OtherCalculate.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. <script setup>
  2. import {ref,reactive,watch} from 'vue'
  3. import { useRoute, useRouter } from "vue-router";
  4. import EDBHistory from '@/views/dataEDB/components/EDBHistory.vue'
  5. import SelectEDB from './SelectEDB.vue'
  6. import SelectEDBClassify from '../../components/SelectEDBClassify.vue'
  7. import SelectEDBUnit from '../../components/SelectEDBUnit.vue'
  8. import SelectEDBFrequency from '../../components/SelectEDBFrequency.vue'
  9. import SeeEDBDataList from './SeeEDBDataList.vue'
  10. import {calculateTypeTipsMap} from '../../util/config'
  11. import { showToast } from 'vant';
  12. import apiDataEDB from '@/api/dataEDB'
  13. import { useWindowSize } from '@vueuse/core'
  14. const { width } = useWindowSize()
  15. const route=useRoute()
  16. const router=useRouter()
  17. const props=defineProps({
  18. edbInfo:{
  19. type:Object,
  20. default:null
  21. }
  22. })
  23. watch(
  24. ()=>props.edbInfo,
  25. ()=>{
  26. if(['edit','preview'].includes(route.query.type)){
  27. const fromEdbInfo=props.edbInfo.CalculateList[0]
  28. const edbInfoData=props.edbInfo.EdbInfoDetail
  29. searchEDBInfoByCode(fromEdbInfo.FromEdbCode)
  30. baseInfo.name=edbInfoData.EdbName
  31. baseInfo.unit=edbInfoData.Unit
  32. baseInfo.classify=edbInfoData.ClassifyId
  33. baseInfo.frequency=edbInfoData.Frequency
  34. if(edbInfoData.Source===51){//降频
  35. baseInfo.valueType=edbInfoData.CalculateFormula
  36. }
  37. if(edbInfoData.Source===35){//超季节性
  38. baseInfo.calendarType=edbInfoData.Calendar
  39. }
  40. if(edbInfoData.Source===22){//时间位移
  41. baseInfo.moveType=edbInfoData.MoveType
  42. baseInfo.moveUnit=edbInfoData.MoveFrequency
  43. baseInfo.moveVal=edbInfoData.CalculateFormula
  44. }
  45. if([8,12,13,35].includes(edbInfoData.Source)){
  46. baseInfo.numberN=Number(edbInfoData.CalculateFormula)
  47. }
  48. if([72].includes(edbInfoData.Source)){//指数修匀
  49. baseInfo.alphaVal=Number(edbInfoData.CalculateFormula)
  50. }
  51. setTimeout(() => {
  52. selectEDBClassifyINS.value?.getSelectClassifyOpt(props.edbInfo.EdbInfoDetail.ClassifyId)//获取选择的分类目录
  53. }, 1000);
  54. }
  55. }
  56. )
  57. // 预览页面
  58. const isPreview=ref(route.query.type==='preview'||false)
  59. const moveTypeOpts=[{name:'领先',key:1},{name:'滞后',key:2}]
  60. const moveUnitOpts=[
  61. {name:'天',key:'天'},
  62. {name:'周',key:'周'},
  63. {name:'月',key:'月'},
  64. {name:'季',key:'季'},
  65. {name:'年',key:'年'},
  66. ]
  67. //公式说明
  68. const showTips=ref(false)
  69. const tipsContent=ref(calculateTypeTipsMap.get(['toMonthSeason','accumulate'].includes(route.query.source)? route.query.source: Number(route.query.source))||'')
  70. //提交计算按钮文字
  71. function getCalculateBtnText(){
  72. let str='生成计算指标'
  73. const btnTextMap=new Map([
  74. [5,'转月值计算'],
  75. [6,'同比值计算'],
  76. [7,'同差值计算'],
  77. [8,'移动平均计算'],
  78. [12,'环比值计算'],
  79. [13,'环差值计算'],
  80. [14,'升频计算'],
  81. [22,'保存'],
  82. [35,'超季节性计算'],
  83. [52,'年化计算'],
  84. [51,'降频计算'],
  85. [61,'转季值计算'],
  86. [62,'累计值计算'],
  87. [63,'年初至今计算'],
  88. [72,'指数修匀计算'],
  89. [75,'日均值计算'],
  90. ])
  91. str=btnTextMap.get(source.value)
  92. return str
  93. }
  94. const editEdbInfoId=ref(route.query.edbInfoId||0)//编辑时的指标id
  95. const source=ref(0)//计算类型
  96. const tabsArr=ref([])
  97. // 初始化
  98. function init(){
  99. // 累计值转月/季值
  100. if(route.query.source==='toMonthSeason'){
  101. tabsArr.value=[{ label: '累计值转月值',key: 5 },{ label: '累计值转季值',key: 61 }]
  102. source.value=5
  103. }else if(route.query.source==='accumulate'){//累计值
  104. tabsArr.value=[{ label: '累计值',key: 62 },{ label: '年初至今累计值',key: 63 }]
  105. source.value=62
  106. }else{
  107. tabsArr.value=[]
  108. source.value=Number(route.query.source)
  109. }
  110. }
  111. init()
  112. // 选择指标
  113. const showSelectEDB=ref(false)
  114. const selectEDBinfo=ref(null)
  115. function handleConfirmSelectEDB(e){
  116. selectEDBinfo.value=e
  117. updateBaseInfoData(e)
  118. }
  119. // 编辑时回显选择的指标 通过code去搜索
  120. function searchEDBInfoByCode(code){
  121. apiDataEDB.edbSearchList({KeyWord:code,CurrentIndex:1,PageSize:1}).then(res=>{
  122. if(res.Ret===200){
  123. selectEDBinfo.value=res.Data?.List[0]
  124. }
  125. })
  126. }
  127. // 选择指标更新基础信息
  128. function updateBaseInfoData(data){
  129. const tMap=new Map([
  130. ['日度','D'],
  131. ['周度','W'],
  132. ['旬度','T'],
  133. ['月度','M'],
  134. ['季度','Q'],
  135. ['年度','Y'],
  136. ])
  137. const name_map = {
  138. 5: data.EdbName,
  139. 8: `${data.EdbName}/${baseInfo.numberN}${tMap.get(data.Frequency)}MA`,
  140. 14: `${data.EdbName}/${data.Frequency}升频`,
  141. 6: `${data.EdbName}同比`,
  142. 7: `${data.EdbName}同差`,
  143. 12: `${data.EdbName}${baseInfo.numberN}${data.Frequency.slice(0,1)}环比`,
  144. 13: `${data.EdbName}${baseInfo.numberN}${data.Frequency.slice(0,1)}环差`,
  145. 35: `${data.EdbName}超季节性/${baseInfo.numberN}年${baseInfo.calendarType==='公历'?'':'/'+baseInfo.calendarType}`,
  146. 52: `${data.EdbName}年化`,
  147. 51: `${data.EdbName}/${data.Frequency}降频`,
  148. 61: data.EdbName,
  149. 62: data.EdbName,
  150. 63: data.EdbName,
  151. 72: `${data.EdbName}指数修匀`,
  152. 75: `${data.EdbName}日均值`
  153. }
  154. baseInfo.name=name_map[source.value]||''
  155. baseInfo.unit=[5,8,14,7,35,72,75].includes(source.value) ? data.Unit : '无',
  156. baseInfo.frequency=source.value === 14 ? '日度' : source.value === 61 ? '季度' : source.value === 62 ? '' : data.Frequency
  157. if([72,75].includes(source.value)){//指数修匀目录默认和选择的指标在同一个目录
  158. selectEDBClassifyINS.value?.getSelectClassifyOpt(data.ClassifyId)//获取选择的分类目录
  159. }
  160. }
  161. // 基础信息
  162. const edbNameInputFocus=ref(false)
  163. const numberNInputFocus=ref(false)
  164. const alphaValInputFocus=ref(false)
  165. const baseInfo=reactive({
  166. name:'',
  167. unit:'',
  168. classify:'',
  169. frequency:'',
  170. numberN:1,//N值
  171. moveVal:'',
  172. moveType:1,
  173. moveUnit:'天',
  174. calendarType:'公历',
  175. valueType:'期末值',
  176. alphaVal:'',
  177. })
  178. // 选择单位
  179. const showSelectUnit=ref(false)
  180. function onConfirmSelectUnit(value){
  181. baseInfo.unit=value
  182. }
  183. //选择分类
  184. const showSelectClassify=ref(false)
  185. const classifyStr=ref('')
  186. const selectEDBClassifyINS=ref(null)
  187. function handleConfirmClassify({value,selectedOptions}){
  188. if(selectedOptions.length===0){
  189. baseInfo.classify=''
  190. classifyStr.value=''
  191. return
  192. }
  193. baseInfo.classify=value
  194. const textArr=selectedOptions.map(item=>item.ClassifyName)
  195. classifyStr.value=`${textArr.join('/')}`
  196. }
  197. //选择频度
  198. const showSelectFrequency=ref(false)
  199. function handleConfirmFrequency(value){
  200. baseInfo.frequency=value
  201. }
  202. //移动方式类型选择
  203. const showMoveType=ref(false)
  204. function onSelectMoveType(e){
  205. baseInfo.moveType=e.key
  206. }
  207. function getMoveTypeName(e){
  208. return moveTypeOpts.filter(item=>item.key===e)[0].name
  209. }
  210. //移动方式单位选择
  211. const showMoveUnit=ref(false)
  212. function onSelectMoveUnit(e){
  213. baseInfo.moveUnit=e.key
  214. }
  215. //超季节性日历选择
  216. const showSelectCalendar=ref(false)
  217. //降频数据取值选择
  218. const showDataValSelect=ref(false)
  219. //查看指标数据详情
  220. const showSeeEDBDataList=ref(false)
  221. // 提交计算
  222. const saveBtnLoading=ref(false)
  223. async function handleSave(){
  224. if(!selectEDBinfo.value){
  225. showToast('指标不能为空')
  226. return
  227. }
  228. if(!baseInfo.name){
  229. showToast('指标名称不能为空')
  230. return
  231. }
  232. if(!baseInfo.unit){
  233. showToast('指标单位不能为空')
  234. return
  235. }
  236. if(!baseInfo.classify){
  237. showToast('指标目录不能为空')
  238. return
  239. }
  240. if(!baseInfo.frequency){
  241. showToast('指标频度不能为空')
  242. return
  243. }
  244. if([72].includes(source.value)){
  245. if(baseInfo.alphaVal<=0||baseInfo.alphaVal>=1){
  246. showToast('请输入>0,<1的alpha数值')
  247. return
  248. }
  249. }
  250. const valueMap = {
  251. 22: 'moveVal',
  252. 51: 'valueType',
  253. 72: 'alphaVal'
  254. }
  255. const params={
  256. FromEdbInfoId: selectEDBinfo.value.EdbInfoId,
  257. Source: source.value,
  258. EdbName: baseInfo.name,
  259. Unit: baseInfo.unit,
  260. ClassifyId: baseInfo.classify,
  261. Frequency: baseInfo.frequency,
  262. Formula: valueMap[source.value] ? String(baseInfo[valueMap[source.value]]) : String(baseInfo.numberN),
  263. MoveFrequency: baseInfo.moveUnit,
  264. MoveType: baseInfo.moveType,
  265. Calendar: baseInfo.calendarType,
  266. }
  267. saveBtnLoading.value=true
  268. const res=route.query.type==='edit'?await apiDataEDB.editCalculateEDB({...params,EdbInfoId:Number(route.query.edbInfoId)}) : await apiDataEDB.addCalculateEDB(params)
  269. saveBtnLoading.value=false
  270. if(res.Ret===200){
  271. showToast(res.Msg)
  272. setTimeout(() => {
  273. if(route.query.type==='edit'){
  274. router.back()
  275. }else{
  276. router.replace({
  277. path:'/dataEDB/detail',
  278. query:{
  279. edbInfoId:res.Data.EdbInfoId
  280. }
  281. })
  282. }
  283. }, 1500);
  284. }
  285. }
  286. // tab切换重置表单
  287. function handleTabChange(){
  288. selectEDBinfo.value=null
  289. baseInfo.name=''
  290. baseInfo.unit=''
  291. baseInfo.classify=''
  292. baseInfo.frequency=''
  293. baseInfo.numberN=1
  294. baseInfo.moveVal=''
  295. baseInfo.moveType=1
  296. baseInfo.moveUnit='天'
  297. baseInfo.calendarType='公历'
  298. baseInfo.valueType='期末值'
  299. classifyStr.value=''
  300. }
  301. //点击选择的指标左侧图标查看指标详情
  302. const showEDBHistory=ref(false)// 显示指标溯源
  303. const edbHistoryId=ref(0)
  304. function handleShowEDBHistory(data){
  305. //计算指标打开弹窗,基础指标打开新页面
  306. if(data.EdbType===2){
  307. edbHistoryId.value=data.EdbInfoId
  308. showEDBHistory.value=true
  309. }else{
  310. const routerEl=router.resolve({
  311. path:'/dataEDB/detail',
  312. query:{
  313. edbInfoId:data.EdbInfoId
  314. }
  315. })
  316. window.open(routerEl.href,'_blank')
  317. }
  318. }
  319. </script>
  320. <template>
  321. <div class="other-calculate-wrap">
  322. <van-tabs
  323. v-model:active="source"
  324. sticky
  325. :offset-top="width>650?60:0"
  326. border
  327. title-active-color="#0052D9"
  328. title-inactive-color="#333"
  329. line-width="16px"
  330. @change="handleTabChange"
  331. v-if="tabsArr.length"
  332. >
  333. <van-tab
  334. :title="tab.label"
  335. :name="tab.key"
  336. v-for="tab in tabsArr"
  337. :key="tab.key"
  338. />
  339. </van-tabs>
  340. <section class="section select-edb-box">
  341. <van-field
  342. :modelValue="selectEDBinfo?.EdbName"
  343. label="选择指标"
  344. :right-icon="!isPreview?'arrow':''"
  345. readonly
  346. placeholder="请选择指标"
  347. input-align="right"
  348. @click-input="showSelectEDB=true"
  349. :disabled="isPreview"
  350. >
  351. <template #left-icon>
  352. <div class="left-icon" v-if="selectEDBinfo" @click="handleShowEDBHistory(selectEDBinfo)">
  353. <svg-icon name="edb-history-tag" size="24px"/>
  354. </div>
  355. </template>
  356. </van-field>
  357. </section>
  358. <section class="section edbinfo-box">
  359. <div class="van-cell__title">已选指标</div>
  360. <div v-if="!selectEDBinfo">
  361. <img class="list-empty-img" src="https://hzstatic.hzinsights.com/static/ETA_mobile/empty_img.png" alt="">
  362. <p style="text-align:center;color:#999">暂无指标</p>
  363. </div>
  364. <div class="info-box" v-else>
  365. <h2 class="name">{{selectEDBinfo?.EdbName}}</h2>
  366. <ul class="info-list">
  367. <li class="info-item">ID:{{selectEDBinfo.EdbCode}}</li>
  368. <li class="info-item">起始时间:{{selectEDBinfo.StartDate}}</li>
  369. <li class="info-item">频度:{{selectEDBinfo.Frequency}}</li>
  370. <li class="info-item">更新时间:{{selectEDBinfo.ModifyTime}}</li>
  371. <li class="info-item">单位:{{selectEDBinfo.Unit}}</li>
  372. <li class="info-item">数据来源:{{selectEDBinfo.SourceName}}</li>
  373. </ul>
  374. <div style="text-align:right">
  375. <van-button color="#0052D9" size="small" @click="showSeeEDBDataList=true">查看数据</van-button>
  376. </div>
  377. </div>
  378. </section>
  379. <section class="section baseinfo-box">
  380. <!-- 时间位移(移动方式) -->
  381. <van-field
  382. label="移动方式"
  383. required
  384. v-if="source===22"
  385. :disabled="isPreview"
  386. >
  387. <template #input>
  388. <div class="move-type-box">
  389. <div :class="['btn',isPreview?'disabled':'']" @click="()=>{if(isPreview)return false;showMoveType=true}">
  390. <svg-icon name="swap" v-if="!isPreview"></svg-icon>
  391. <span>{{getMoveTypeName(baseInfo.moveType)}}</span>
  392. </div>
  393. <input :disabled="isPreview" class="input" type="number" :min="0" v-model="baseInfo.moveVal">
  394. <div :class="['btn',isPreview?'disabled':'']" @click="()=>{if(isPreview)return false;showMoveUnit=true}">
  395. <svg-icon name="swap" v-if="!isPreview"></svg-icon>
  396. <span>{{baseInfo.moveUnit}}</span>
  397. </div>
  398. </div>
  399. </template>
  400. </van-field>
  401. <van-field
  402. v-model="baseInfo.name"
  403. label="指标名称"
  404. placeholder="指标名称"
  405. input-align="right"
  406. required
  407. @focus="edbNameInputFocus=true"
  408. @blur="edbNameInputFocus=false"
  409. :disabled="isPreview"
  410. >
  411. <template #right-icon>
  412. <svg-icon v-if="!isPreview" class="edit-icon" name="edit" :color="edbNameInputFocus?'#0052D9':'#333333'"/>
  413. </template>
  414. </van-field>
  415. <van-field
  416. :modelValue="baseInfo.unit"
  417. readonly
  418. label="单位"
  419. placeholder="请选择单位"
  420. input-align="right"
  421. :right-icon="!isPreview?'arrow':''"
  422. required
  423. @click-input="showSelectUnit=true"
  424. :disabled="!editEdbInfoId&&[6,7,75].includes(source)||isPreview"
  425. />
  426. <van-field
  427. :modelValue="classifyStr"
  428. readonly
  429. label="指标目录"
  430. placeholder="请选择指标目录"
  431. input-align="right"
  432. :right-icon="!isPreview?'arrow':''"
  433. required
  434. @click-input="showSelectClassify=true"
  435. :disabled="isPreview"
  436. />
  437. <van-field
  438. :modelValue="baseInfo.frequency"
  439. readonly
  440. label="频度"
  441. placeholder="请选择指标频度"
  442. input-align="right"
  443. :right-icon="!isPreview?'arrow':''"
  444. required
  445. @click-input="showSelectFrequency=true"
  446. :disabled="[5,14,61,63].includes(source)||(!editEdbInfoId&&[6,7,75].includes(source))||isPreview"
  447. />
  448. <van-field
  449. v-if="[8,12,13,35].includes(source)"
  450. v-model.number="baseInfo.numberN"
  451. label="N等于"
  452. placeholder="请输入N数值"
  453. input-align="right"
  454. required
  455. @focus="numberNInputFocus=true"
  456. @blur="numberNInputFocus=false"
  457. :disabled="isPreview"
  458. >
  459. <template #right-icon>
  460. <svg-icon v-if="!isPreview" class="edit-icon" name="edit" :color="numberNInputFocus?'#0052D9':'#333333'"/>
  461. </template>
  462. </van-field>
  463. <!-- 超季节性日历 -->
  464. <van-field
  465. v-if="source===35"
  466. :modelValue="baseInfo.calendarType"
  467. readonly
  468. label="日历"
  469. placeholder="请选择日历"
  470. input-align="right"
  471. :right-icon="!isPreview?'arrow':''"
  472. required
  473. @click-input="showSelectCalendar=true"
  474. :disabled="isPreview"
  475. />
  476. <!-- 降频数据取值 -->
  477. <van-field
  478. v-if="source===51"
  479. :modelValue="baseInfo.valueType"
  480. readonly
  481. label="数据取值"
  482. placeholder="请选择"
  483. input-align="right"
  484. :right-icon="!isPreview?'arrow':''"
  485. @click-input="showDataValSelect=true"
  486. :disabled="isPreview"
  487. />
  488. <!-- 指数修匀 alpha 值 -->
  489. <van-field
  490. v-if="[72].includes(source)"
  491. v-model.number="baseInfo.alphaVal"
  492. type="number"
  493. label="alpha值"
  494. placeholder="请输入alpha值"
  495. input-align="right"
  496. required
  497. @focus="alphaValInputFocus=true"
  498. @blur="alphaValInputFocus=false"
  499. :disabled="isPreview"
  500. >
  501. <template #right-icon>
  502. <svg-icon v-if="!isPreview" class="edit-icon" name="edit" :color="alphaValInputFocus?'#0052D9':'#333333'"/>
  503. </template>
  504. </van-field>
  505. </section>
  506. <div class="formula-intro-btn" @click="showTips=true">
  507. <svg-icon class="icon" name="warning"></svg-icon>
  508. <span>公式说明</span>
  509. </div>
  510. <div class="opt-btns" v-if="!isPreview">
  511. <van-button class="primary2" @click="$router.back()">取消</van-button>
  512. <van-button
  513. type="primary"
  514. :loading="saveBtnLoading"
  515. loading-text="计算中..."
  516. @click="handleSave"
  517. >{{getCalculateBtnText()}}</van-button>
  518. </div>
  519. </div>
  520. <!-- 选择指标 -->
  521. <SelectEDB v-model:show="showSelectEDB" :source='source' @select="handleConfirmSelectEDB"/>
  522. <!-- 选择单位 -->
  523. <SelectEDBUnit v-model:show="showSelectUnit" @select="onConfirmSelectUnit"/>
  524. <!-- 选择分类 -->
  525. <SelectEDBClassify ref="selectEDBClassifyINS" v-model:show="showSelectClassify" :defaultId="baseInfo.classify" @select="handleConfirmClassify" />
  526. <!-- 选择频度 -->
  527. <SelectEDBFrequency v-model:show="showSelectFrequency" @select="handleConfirmFrequency"/>
  528. <!-- 查看指标数据 -->
  529. <SeeEDBDataList v-model:show="showSeeEDBDataList" :edbInfoId="selectEDBinfo?.EdbInfoId" />
  530. <!-- 移动方式类型选择 -->
  531. <van-action-sheet v-model:show="showMoveType" close-on-click-action :actions="moveTypeOpts" @select="onSelectMoveType" />
  532. <!-- 移动方式单位选择 -->
  533. <van-action-sheet v-model:show="showMoveUnit" close-on-click-action :actions="moveUnitOpts" @select="onSelectMoveUnit" />
  534. <!-- 超季节性日历选择 -->
  535. <van-action-sheet v-model:show="showSelectCalendar" close-on-click-action :actions="[{name:'公历'},{name:'农历'}]" @select="e=>baseInfo.calendarType=e.name" />
  536. <!-- 降频数据取值 -->
  537. <van-action-sheet v-model:show="showDataValSelect" close-on-click-action :actions="[{name:'期末值'},{name:'平均值'}]" @select="e=>baseInfo.valueType=e.name" />
  538. <!-- 指标溯源 -->
  539. <EDBHistory v-model:show="showEDBHistory" :edbInfoId="edbHistoryId"/>
  540. <!-- 公式说明 -->
  541. <van-dialog
  542. v-model:show="showTips"
  543. :title="$route.query.name"
  544. confirmButtonText='知道啦'
  545. >
  546. <div class="edb-formula-tips-html-box" v-html="tipsContent"></div>
  547. </van-dialog>
  548. </template>
  549. <style lang="scss" scoped>
  550. .other-calculate-wrap{
  551. min-height: 90vh;
  552. background-color: $page-bg-grey;
  553. padding-bottom: 210px ;
  554. }
  555. .section{
  556. background-color: #fff;
  557. margin-bottom: 32px;
  558. }
  559. .edbinfo-box{
  560. padding: var(--van-cell-horizontal-padding);
  561. .info-box{
  562. margin-top: 14px;
  563. border-radius: 8px;
  564. border: 1px solid $border-color;
  565. box-shadow: $box-shadow;
  566. padding: 20px;
  567. .name{
  568. font-size: 32px;
  569. margin: 0 0 10px 0;
  570. }
  571. .info-list{
  572. display: flex;
  573. flex-wrap: wrap;
  574. gap: 10px 0;
  575. color: $font-grey;
  576. margin-bottom: 10px;
  577. .info-item{
  578. width: 100%;
  579. margin-bottom: 10px;
  580. }
  581. }
  582. }
  583. }
  584. .move-type-box{
  585. width: 100%;
  586. display: flex;
  587. align-items: center;
  588. justify-content: flex-end;
  589. gap: 20px;
  590. .input{
  591. box-sizing: border-box;
  592. display: block;
  593. border-radius: 12px;
  594. width: 150px;
  595. height: 72px;
  596. padding: 0 32px;
  597. background-color: #f6f6f6;
  598. }
  599. .btn{
  600. flex-shrink: 0;
  601. display: flex;
  602. align-items: center;
  603. justify-content: center;
  604. width: 130px;
  605. height: 72px;
  606. border-radius: 12px;
  607. background-color: #F2F3FF;
  608. color: $theme-color;
  609. }
  610. .disabled{
  611. background-color: #F6F6F6;
  612. color: #333;
  613. }
  614. }
  615. .formula-intro-btn{
  616. width: 180px;
  617. height: 60px;
  618. display: flex;
  619. align-items: center;
  620. justify-content: center;
  621. gap: 5px;
  622. color: $theme-color;
  623. line-height: 1;
  624. background-color: #fff;
  625. border-radius: 32px;
  626. margin-left: auto;
  627. margin-right: var(--van-cell-horizontal-padding);
  628. .icon{
  629. width: 24px;
  630. height: 24px;
  631. }
  632. }
  633. .opt-btns{
  634. position: fixed;
  635. left: 0;
  636. right: 0;
  637. bottom: 0;
  638. background-color: #fff;
  639. z-index: 99;
  640. padding: 48px;
  641. display: flex;
  642. justify-content: space-between;
  643. .van-button{
  644. width: 48%;
  645. max-width: 300PX;
  646. }
  647. }
  648. @media screen and (min-width:$media-width){
  649. .other-calculate-wrap{
  650. padding-bottom: 105px;
  651. }
  652. .section{
  653. margin-bottom: 16px;
  654. }
  655. .edbinfo-box{
  656. .info-box{
  657. margin-top: 7px;
  658. border-radius: 4px;
  659. padding: 10px;
  660. .name{
  661. font-size: 16px;
  662. margin: 0 0 5px 0;
  663. }
  664. .info-list{
  665. gap: 5px 0;
  666. margin-bottom: 5px;
  667. .info-item{
  668. margin-bottom: 5px;
  669. }
  670. }
  671. }
  672. }
  673. .move-type-box{
  674. gap: 10px;
  675. .input{
  676. border-radius: 6px;
  677. width: 65px;
  678. height: 36px;
  679. padding: 0 16px;
  680. }
  681. .btn{
  682. width: 65px;
  683. height: 36px;
  684. border-radius: 6px;
  685. }
  686. }
  687. .formula-intro-btn{
  688. width: 90px;
  689. height: 30px;
  690. gap: 2px;
  691. border-radius: 16px;
  692. .icon{
  693. width: 12px;
  694. height: 12px;
  695. }
  696. }
  697. .opt-btns{
  698. padding: 24px;
  699. justify-content: center;
  700. gap: 10px;
  701. }
  702. }
  703. </style>