|
@@ -5,16 +5,53 @@ import SelectEDB from './SelectEDB.vue'
|
|
|
import SelectEDBClassify from '../../components/SelectEDBClassify.vue'
|
|
|
import SelectEDBUnit from '../../components/SelectEDBUnit.vue'
|
|
|
import SelectEDBFrequency from '../../components/SelectEDBFrequency.vue'
|
|
|
+import SeeEDBDataList from './SeeEDBDataList.vue'
|
|
|
import {calculateTypeTipsMap} from '../../util/config'
|
|
|
+import { showToast } from 'vant';
|
|
|
+import apiDataEDB from '@/api/dataEDB'
|
|
|
|
|
|
const route=useRoute()
|
|
|
const router=useRouter()
|
|
|
|
|
|
+const moveTypeOpts=[{name:'领先',key:1},{name:'滞后',key:2}]
|
|
|
+const moveUnitOpts=[
|
|
|
+ {name:'天',key:'天'},
|
|
|
+ {name:'周',key:'周'},
|
|
|
+ {name:'月',key:'月'},
|
|
|
+ {name:'季',key:'季'},
|
|
|
+ {name:'年',key:'年'},
|
|
|
+]
|
|
|
+
|
|
|
//公式说明
|
|
|
const showTips=ref(false)
|
|
|
const tipsContent=ref(calculateTypeTipsMap.get(['toMonthSeason','accumulate'].includes(route.query.type)? route.query.type: Number(route.query.type))||'')
|
|
|
|
|
|
-let source=ref(0)//计算类型
|
|
|
+//提交计算按钮文字
|
|
|
+function getCalculateBtnText(){
|
|
|
+ let str='生成计算指标'
|
|
|
+ const btnTextMap=new Map([
|
|
|
+ [5,'转月值计算'],
|
|
|
+ [6,'同比值计算'],
|
|
|
+ [7,'同差值计算'],
|
|
|
+ [8,'移动平均计算'],
|
|
|
+ [12,'环比值计算'],
|
|
|
+ [13,'环差值计算'],
|
|
|
+ [14,'升频计算'],
|
|
|
+ [22,'保存'],
|
|
|
+ [35,'超季节性计算'],
|
|
|
+ [52,'年化计算'],
|
|
|
+ [51,'降频计算'],
|
|
|
+ [61,'转季值计算'],
|
|
|
+ [62,'累计值计算'],
|
|
|
+ [63,'年初至今计算'],
|
|
|
+ ])
|
|
|
+ str=btnTextMap.get(source.value)
|
|
|
+
|
|
|
+ return str
|
|
|
+}
|
|
|
+
|
|
|
+const editEdbInfoId=ref(route.query.edbInfoId||0)//编辑时的指标id
|
|
|
+const source=ref(0)//计算类型
|
|
|
const tabsArr=ref([])
|
|
|
// 初始化
|
|
|
function init(){
|
|
@@ -52,13 +89,13 @@ function updateBaseInfoData(data){
|
|
|
])
|
|
|
const name_map = {
|
|
|
5: data.EdbName,
|
|
|
- // 8: `${data.EdbName}/${this.formData.n_num}${tMap.get(data.Frequency)}MA`,
|
|
|
+ 8: `${data.EdbName}/${baseInfo.numberN}${tMap.get(data.Frequency)}MA`,
|
|
|
14: `${data.EdbName}/${data.Frequency}升频`,
|
|
|
6: `${data.EdbName}同比`,
|
|
|
7: `${data.EdbName}同差`,
|
|
|
- // 12: `${data.EdbName}${this.formData.n_num}${data.Frequency.slice(0,1)}环比`,
|
|
|
- // 13: `${data.EdbName}${this.formData.n_num}${data.Frequency.slice(0,1)}环差`,
|
|
|
- // 35: `${data.EdbName}超季节性/${this.formData.n_num}年${this.formData.calendar_type==='公历'?'':'/'+this.formData.calendar_type}`,
|
|
|
+ 12: `${data.EdbName}${baseInfo.numberN}${data.Frequency.slice(0,1)}环比`,
|
|
|
+ 13: `${data.EdbName}${baseInfo.numberN}${data.Frequency.slice(0,1)}环差`,
|
|
|
+ 35: `${data.EdbName}超季节性/${baseInfo.numberN}年${baseInfo.calendarType==='公历'?'':'/'+baseInfo.calendarType}`,
|
|
|
52: `${data.EdbName}年化`,
|
|
|
51: `${data.EdbName}/${data.Frequency}降频`,
|
|
|
61: data.EdbName,
|
|
@@ -66,18 +103,27 @@ function updateBaseInfoData(data){
|
|
|
63: data.EdbName,
|
|
|
}
|
|
|
baseInfo.name=name_map[source.value]||''
|
|
|
- baseInfo.unit=data.Unit
|
|
|
- baseInfo.frequency=source === 14 ? '日度' : source === 61 ? '季度' : source === 62 ? '' : data.Frequency
|
|
|
- baseInfo.classify=data.ClassifyId
|
|
|
+ baseInfo.unit=[5,8,14,7,35].includes(source.value) ? data.Unit : '无',
|
|
|
+ baseInfo.frequency=source.value === 14 ? '日度' : source.value === 61 ? '季度' : source.value === 62 ? '' : data.Frequency
|
|
|
+
|
|
|
+ // baseInfo.classify=data.ClassifyId
|
|
|
+ // selectEDBClassifyINS.value?.getSelectClassifyOpt(data.ClassifyId)//获取选择的分类目录
|
|
|
}
|
|
|
|
|
|
// 基础信息
|
|
|
const edbNameInputFocus=ref(false)
|
|
|
+const numberNInputFocus=ref(false)
|
|
|
const baseInfo=reactive({
|
|
|
name:'',
|
|
|
unit:'',
|
|
|
classify:'',
|
|
|
- frequency:''
|
|
|
+ frequency:'',
|
|
|
+ numberN:1,//N值
|
|
|
+ moveVal:'',
|
|
|
+ moveType:1,
|
|
|
+ moveUnit:'天',
|
|
|
+ calendarType:'公历',
|
|
|
+ valueType:'期末值'
|
|
|
})
|
|
|
|
|
|
// 选择单位
|
|
@@ -89,6 +135,7 @@ function onConfirmSelectUnit(value){
|
|
|
//选择分类
|
|
|
const showSelectClassify=ref(false)
|
|
|
const classifyStr=ref('')
|
|
|
+const selectEDBClassifyINS=ref(null)
|
|
|
function handleConfirmClassify({value,selectedOptions}){
|
|
|
baseInfo.classify=value
|
|
|
classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
|
|
@@ -100,8 +147,93 @@ function handleConfirmFrequency(value){
|
|
|
baseInfo.frequency=value
|
|
|
}
|
|
|
|
|
|
+//移动方式类型选择
|
|
|
+const showMoveType=ref(false)
|
|
|
+function onSelectMoveType(e){
|
|
|
+ baseInfo.moveType=e.key
|
|
|
+}
|
|
|
+function getMoveTypeName(e){
|
|
|
+ return moveTypeOpts.filter(item=>item.key===e)[0].name
|
|
|
+}
|
|
|
+
|
|
|
+//移动方式单位选择
|
|
|
+const showMoveUnit=ref(false)
|
|
|
+function onSelectMoveUnit(e){
|
|
|
+ baseInfo.moveUnit=e.key
|
|
|
+}
|
|
|
+
|
|
|
+//超季节性日历选择
|
|
|
+const showSelectCalendar=ref(false)
|
|
|
+
|
|
|
+//查看指标数据详情
|
|
|
+const showSeeEDBDataList=ref(false)
|
|
|
+
|
|
|
+// 提交计算
|
|
|
+const saveBtnLoading=ref(false)
|
|
|
+async function handleSave(){
|
|
|
+ if(!selectEDBinfo.value){
|
|
|
+ showToast('指标不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(!baseInfo.name){
|
|
|
+ showToast('指标名称不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(!baseInfo.unit){
|
|
|
+ showToast('指标单位不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(!baseInfo.classify){
|
|
|
+ showToast('指标目录不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(!baseInfo.frequency){
|
|
|
+ showToast('指标频度不能为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
-function handleSave(){
|
|
|
+ const valueMap = {
|
|
|
+ 22: 'moveVal',
|
|
|
+ 51: 'valueType'
|
|
|
+ }
|
|
|
+ const params={
|
|
|
+ FromEdbInfoId: selectEDBinfo.value.EdbInfoId,
|
|
|
+ Source: source.value,
|
|
|
+ EdbName: baseInfo.name,
|
|
|
+ Unit: baseInfo.unit,
|
|
|
+ ClassifyId: baseInfo.classify,
|
|
|
+ Frequency: baseInfo.frequency,
|
|
|
+ Formula: valueMap[source.value] ? String(baseInfo[valueMap[source.value]]) : String(baseInfo.numberN),
|
|
|
+ MoveFrequency: baseInfo.moveUnit,
|
|
|
+ MoveType: baseInfo.moveType,
|
|
|
+ Calendar: baseInfo.calendarType,
|
|
|
+ }
|
|
|
+
|
|
|
+ saveBtnLoading.value=true
|
|
|
+ const res=await apiDataEDB.addCalculateEDB(params)
|
|
|
+ saveBtnLoading.value=false
|
|
|
+ if(res.Ret===200){
|
|
|
+ showToast(res.Msg)
|
|
|
+ setTimeout(() => {
|
|
|
+ router.back()
|
|
|
+ }, 1500);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// tab切换重置表单
|
|
|
+function handleTabChange(){
|
|
|
+ selectEDBinfo.value=null
|
|
|
+ baseInfo.name=''
|
|
|
+ baseInfo.unit=''
|
|
|
+ baseInfo.classify=''
|
|
|
+ baseInfo.frequency=''
|
|
|
+ baseInfo.numberN=1
|
|
|
+ baseInfo.moveVal=''
|
|
|
+ baseInfo.moveType=1
|
|
|
+ baseInfo.moveUnit='天'
|
|
|
+ baseInfo.calendarType='公历'
|
|
|
+ baseInfo.valueType='期末值'
|
|
|
+ classifyStr.value=''
|
|
|
|
|
|
}
|
|
|
|
|
@@ -115,7 +247,8 @@ function handleSave(){
|
|
|
border
|
|
|
title-active-color="#0052D9"
|
|
|
title-inactive-color="#333"
|
|
|
- line-width="16px"
|
|
|
+ line-width="16px"
|
|
|
+ @change="handleTabChange"
|
|
|
v-if="tabsArr.length"
|
|
|
>
|
|
|
<van-tab
|
|
@@ -161,12 +294,31 @@ function handleSave(){
|
|
|
<li class="info-item" style="width:100%">数据来源:{{selectEDBinfo.SourceName}}</li>
|
|
|
</ul>
|
|
|
<div style="text-align:right">
|
|
|
- <van-button color="#0052D9" size="small">查看数据</van-button>
|
|
|
- <van-button color="#D54941" size="small" style="color:#fff;margin-left:10px" @click="selectEDBinfo=null">删除</van-button>
|
|
|
+ <van-button color="#0052D9" size="small" @click="showSeeEDBDataList=true">查看数据</van-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</section>
|
|
|
<section class="section baseinfo-box">
|
|
|
+ <!-- 时间位移(移动方式) -->
|
|
|
+ <van-field
|
|
|
+ label="移动方式"
|
|
|
+ required
|
|
|
+ v-if="source===22"
|
|
|
+ >
|
|
|
+ <template #input>
|
|
|
+ <div class="move-type-box">
|
|
|
+ <div class="btn" @click="showMoveType=true">
|
|
|
+ <svg-icon name="swap"></svg-icon>
|
|
|
+ <span>{{getMoveTypeName(baseInfo.moveType)}}</span>
|
|
|
+ </div>
|
|
|
+ <input class="input" type="number" :min="0" v-model="baseInfo.moveVal">
|
|
|
+ <div class="btn" @click="showMoveUnit=true">
|
|
|
+ <svg-icon name="swap"></svg-icon>
|
|
|
+ <span>{{baseInfo.moveUnit}}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
<van-field
|
|
|
v-model="baseInfo.name"
|
|
|
label="指标名称"
|
|
@@ -189,7 +341,7 @@ function handleSave(){
|
|
|
right-icon="arrow"
|
|
|
required
|
|
|
@click-input="showSelectUnit=true"
|
|
|
- :disabled="[6,7].includes(source)"
|
|
|
+ :disabled="!editEdbInfoId&&[6,7].includes(source)"
|
|
|
/>
|
|
|
<van-field
|
|
|
:modelValue="classifyStr"
|
|
@@ -210,7 +362,33 @@ function handleSave(){
|
|
|
right-icon="arrow"
|
|
|
required
|
|
|
@click-input="showSelectFrequency=true"
|
|
|
- :disabled="[5,14,61,63].includes(source)"
|
|
|
+ :disabled="[5,14,61,63].includes(source)||(!editEdbInfoId&&[6,7].includes(source))"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-if="[8,12,13,35].includes(source)"
|
|
|
+ v-model.number="baseInfo.numberN"
|
|
|
+ label="N等于"
|
|
|
+ placeholder="请输入N数值"
|
|
|
+ input-align="right"
|
|
|
+ required
|
|
|
+ @focus="numberNInputFocus=true"
|
|
|
+ @blur="numberNInputFocus=false"
|
|
|
+ >
|
|
|
+ <template #right-icon>
|
|
|
+ <svg-icon class="edit-icon" name="edit" :color="numberNInputFocus?'#0052D9':'#333333'"/>
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
+ <!-- 超季节性日历 -->
|
|
|
+ <van-field
|
|
|
+ v-if="source===35"
|
|
|
+ :modelValue="baseInfo.calendarType"
|
|
|
+ readonly
|
|
|
+ label="日历"
|
|
|
+ placeholder="请选择日历"
|
|
|
+ input-align="right"
|
|
|
+ right-icon="arrow"
|
|
|
+ required
|
|
|
+ @click-input="showSelectCalendar=true"
|
|
|
/>
|
|
|
</section>
|
|
|
|
|
@@ -220,7 +398,12 @@ function handleSave(){
|
|
|
</div>
|
|
|
<div class="opt-btns">
|
|
|
<van-button class="primary2" @click="$router.back()">取消</van-button>
|
|
|
- <van-button type="primary" @click="handleSave">生成计算指标</van-button>
|
|
|
+ <van-button
|
|
|
+ type="primary"
|
|
|
+ :loading="saveBtnLoading"
|
|
|
+ loading-text="计算中..."
|
|
|
+ @click="handleSave"
|
|
|
+ >{{getCalculateBtnText()}}</van-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -231,11 +414,23 @@ function handleSave(){
|
|
|
<SelectEDBUnit v-model:show="showSelectUnit" @select="onConfirmSelectUnit"/>
|
|
|
|
|
|
<!-- 选择分类 -->
|
|
|
- <SelectEDBClassify v-model:show="showSelectClassify" :defaultId="baseInfo.classify" @select="handleConfirmClassify" />
|
|
|
+ <SelectEDBClassify ref="selectEDBClassifyINS" v-model:show="showSelectClassify" :defaultId="baseInfo.classify" @select="handleConfirmClassify" />
|
|
|
|
|
|
<!-- 选择频度 -->
|
|
|
<SelectEDBFrequency v-model:show="showSelectFrequency" @select="handleConfirmFrequency"/>
|
|
|
|
|
|
+ <!-- 查看指标数据 -->
|
|
|
+ <SeeEDBDataList v-model:show="showSeeEDBDataList" :edbInfoId="selectEDBinfo?.EdbInfoId" />
|
|
|
+
|
|
|
+ <!-- 移动方式类型选择 -->
|
|
|
+ <van-action-sheet v-model:show="showMoveType" close-on-click-action :actions="moveTypeOpts" @select="onSelectMoveType" />
|
|
|
+
|
|
|
+ <!-- 移动方式单位选择 -->
|
|
|
+ <van-action-sheet v-model:show="showMoveUnit" close-on-click-action :actions="moveUnitOpts" @select="onSelectMoveUnit" />
|
|
|
+
|
|
|
+ <!-- 超季节性日历选择 -->
|
|
|
+ <van-action-sheet v-model:show="showSelectCalendar" close-on-click-action :actions="[{name:'公历'},{name:'农历'}]" @select="e=>baseInfo.calendarType=e.name" />
|
|
|
+
|
|
|
<!-- 公式说明 -->
|
|
|
<van-dialog
|
|
|
v-model:show="showTips"
|
|
@@ -280,6 +475,33 @@ function handleSave(){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+.move-type-box{
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-end;
|
|
|
+ gap: 20px;
|
|
|
+ .input{
|
|
|
+ box-sizing: border-box;
|
|
|
+ display: block;
|
|
|
+ border-radius: 12px;
|
|
|
+ width: 150px;
|
|
|
+ height: 72px;
|
|
|
+ padding: 0 32px;
|
|
|
+ background-color: #f6f6f6;
|
|
|
+ }
|
|
|
+ .btn{
|
|
|
+ flex-shrink: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: 130px;
|
|
|
+ height: 72px;
|
|
|
+ border-radius: 12px;
|
|
|
+ background-color: #F2F3FF;
|
|
|
+ color: $theme-color;
|
|
|
+ }
|
|
|
+}
|
|
|
.formula-intro-btn{
|
|
|
width: 180px;
|
|
|
height: 60px;
|