Browse Source

Merge branch 'master' of http://8.136.199.33:3000/eta_front/eta_mobile_front into eta-auth

cxmo 1 year ago
parent
commit
7d32a46426

+ 25 - 2
src/api/dataEDB.js

@@ -20,10 +20,19 @@ export default{
     },
 
     /**
-     * ETA指标库分类列表
+     * ETA指标库目录数据仅含目录
      */
     edbClassifyList(){
-        return get('/datamanage/classify/items/v3',{})
+        // return get('/datamanage/classify/items/v3',{})
+        return get('/datamanage/classify/tree',{})
+    },
+
+    /**
+     * ETA指标库目录列表
+     * @param ParentId 父级目录id
+     */
+    edbCatalogList(params){
+        return get('/datamanage/classify/simple',params)
     },
 
     /**
@@ -63,6 +72,20 @@ export default{
         return post('/datamanage/classify/delete',params)
     },
 
+    /**
+     * 移动目录
+     * @param ClassifyId
+     * @param ParentClassifyId
+     * @param EdbInfoId
+     * @param PrevClassifyId
+     * @param NextClassifyId
+     * @param PrevEdbInfoId
+     * @param NextEdbInfoId
+     */
+    edbCatalogMove(params){
+        return post('/datamanage/edb_classify/move',params)
+    },
+
     /**
      * 移动ETA指标库分类
      * @param ClassifyId

+ 10 - 11
src/views/dataEDB/Index.vue

@@ -191,29 +191,28 @@ const edbMoveState=reactive({
     selectValue:'',
     options:[],
     edbInfoId:0,//要移动的分类id
-    tabIndex:2,
+    // tabIndex:2,
 })
 async function handleShowEDBMove(data){
     edbMoveState.options=classifyPopIns.value.classifyList
     edbMoveState.selectValue=data.ClassifyId
     edbMoveState.edbInfoId=data.EdbInfoId
-    edbMoveState.tabIndex=2
+    // edbMoveState.tabIndex=2
     edbMoveState.show=true
 }
 function handleEdbMoveSelectValueChange({value,selectedOptions,tabIndex}){
-    console.log(value,selectedOptions,tabIndex);
-    edbMoveState.tabIndex=tabIndex
+    // console.log(value,selectedOptions,tabIndex);
+    // edbMoveState.tabIndex=tabIndex
 }
 async function handleConfirmEDBMove(){
-    if(edbMoveState.tabIndex!==2){
-        showToast('请选择第三级目录')
-        return
-    }
-    apiDataEDB.edbMove({
-        ClassifyId:edbMoveState.selectValue,
+    apiDataEDB.edbCatalogMove({
+        ClassifyId:0,
+        ParentClassifyId:edbMoveState.selectValue,
         EdbInfoId:edbMoveState.edbInfoId,
+        PrevClassifyId:0,
+        NextClassifyId:0,
         PrevEdbInfoId:0,
-        NextEdbInfoId:0
+        NextEdbInfoId:0,
     }).then(res=>{
         if(res.Ret===200){
             showToast('移动成功!')

+ 12 - 4
src/views/dataEDB/calculate/BatchDetail.vue

@@ -41,6 +41,7 @@ function getCalculateBtnText(){
 		[62,'累计值计算'],
 		[63,'年初至今计算'],
         [72,'指数修匀计算'],
+        [75,'日均值计算'],
 	])
     str=btnTextMap.get(source.value)
 
@@ -160,7 +161,7 @@ function handleConfirmSelectEDB(e){
     edbList.value[currentEdbInfoIndex.value].unit=obj.unit
     edbList.value[currentEdbInfoIndex.value].frequency=obj.frequency
 
-    if([72].includes(source.value)){//指数修匀设置默认指标目录为选择的指标目录
+    if([72,75].includes(source.value)){//指数修匀设置默认指标目录为选择的指标目录
         selectEDBClassifyINS.value?.getSelectClassifyOpt(e.ClassifyId)//获取选择的分类目录
     }
 }
@@ -244,6 +245,12 @@ function setBaseInfo(obj,list){
                 unit: obj.Unit,
 				frequency: obj.Frequency
             }
+        case 75:
+            return {
+                targetName: `${obj.EdbName}日均值`,
+                unit: obj.Unit,
+                frequency: obj.Frequency
+            }
     }
 }
 
@@ -270,7 +277,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     edbList.value[currentEdbInfoIndex.value].classify=value
-    edbList.value[currentEdbInfoIndex.value].classifyName=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    edbList.value[currentEdbInfoIndex.value].classifyName=`${textArr.join('/')}`
 }
 
 //选择频度
@@ -484,7 +492,7 @@ function handleShowEDBHistory(item){
                     right-icon="arrow"
                     required
                     @click-input="showSelectUnit=true"
-                    :disabled="[6,7,32,33].includes(source)"
+                    :disabled="[6,7,32,33,75].includes(source)"
                 />
                 <van-field 
                     :modelValue="edbList[currentEdbInfoIndex].classifyName"
@@ -505,7 +513,7 @@ function handleShowEDBHistory(item){
                     right-icon="arrow"
                     required
                     @click-input="showSelectFrequency=true"
-                    :disabled="[6,7,32,33,5,42,61,64,63,66].includes(source)"
+                    :disabled="[6,7,32,33,5,42,61,64,63,66,75].includes(source)"
                 />
                 <van-field
                     v-if="[8,12,13,39,43,44].includes(source)"

+ 1 - 1
src/views/dataEDB/calculate/Detail.vue

@@ -31,7 +31,7 @@ if(['edit','preview'].includes(route.query.type)){
     <!-- 指标运算 -->
     <FormulaCalculate v-if="['4'].includes(source)" :edbInfo="edbInfo"/>
     <!-- 其他的运算 编辑时toMonthSeason=5\61 accumulate=62\63 -->
-    <OtherCalculate v-if="['toMonthSeason','5','6','7','8','12','13','14','22','35','51','52','61','62','63','accumulate','72'].includes(source)" :edbInfo="edbInfo"/>
+    <OtherCalculate v-if="['toMonthSeason','5','6','7','8','12','13','14','22','35','51','52','61','62','63','accumulate','72','75'].includes(source)" :edbInfo="edbInfo"/>
     <!-- 拼接计算 编辑时则为 23\24 -->
     <JointCalculate v-if="['joint','23','24'].includes(source)" :edbInfo="edbInfo"/>
     <!-- 拟合残差计算 -->

+ 2 - 1
src/views/dataEDB/calculate/components/DiffusionIndexCalcualate.vue

@@ -174,7 +174,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     baseInfo.classify=value
-    classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    classifyStr.value=`${textArr.join('/')}`
 }
 
 //选择频度

+ 2 - 1
src/views/dataEDB/calculate/components/FittingResidualsCalculate.vue

@@ -168,7 +168,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     baseInfo.classify=value
-    classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    classifyStr.value=`${textArr.join('/')}`
 }
 
 //选择频度

+ 2 - 1
src/views/dataEDB/calculate/components/FormulaCalculate.vue

@@ -180,7 +180,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     baseInfo.classify=value
-    classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    classifyStr.value=`${textArr.join('/')}`
 }
 
 //选择频度

+ 2 - 1
src/views/dataEDB/calculate/components/JointCalculate.vue

@@ -156,7 +156,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     baseInfo.classify=value
-    classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    classifyStr.value=`${textArr.join('/')}`
 }
 
 //选择频度

+ 8 - 5
src/views/dataEDB/calculate/components/OtherCalculate.vue

@@ -94,6 +94,7 @@ function getCalculateBtnText(){
 		[62,'累计值计算'],
 		[63,'年初至今计算'],
         [72,'指数修匀计算'],
+        [75,'日均值计算'],
 	])
     str=btnTextMap.get(source.value)
 
@@ -160,12 +161,13 @@ function updateBaseInfoData(data){
 		62:  data.EdbName,
 		63:  data.EdbName,
         72: `${data.EdbName}指数修匀`,
+        75: `${data.EdbName}日均值`
 	}
     baseInfo.name=name_map[source.value]||''
-    baseInfo.unit=[5,8,14,7,35,72].includes(source.value) ? data.Unit : '无',
+    baseInfo.unit=[5,8,14,7,35,72,75].includes(source.value) ? data.Unit : '无',
     baseInfo.frequency=source.value === 14 ? '日度' : source.value === 61 ? '季度' : source.value === 62 ? '' : data.Frequency
 
-    if(source.value===72){//指数修匀目录默认和选择的指标在同一个目录
+    if([72,75].includes(source.value)){//指数修匀目录默认和选择的指标在同一个目录
         selectEDBClassifyINS.value?.getSelectClassifyOpt(data.ClassifyId)//获取选择的分类目录
     }
     
@@ -206,7 +208,8 @@ function handleConfirmClassify({value,selectedOptions}){
         return
     }
     baseInfo.classify=value
-    classifyStr.value=`${selectedOptions[0].ClassifyName}/${selectedOptions[1].ClassifyName}/${selectedOptions[2].ClassifyName}`
+    const textArr=selectedOptions.map(item=>item.ClassifyName)
+    classifyStr.value=`${textArr.join('/')}`
 }
 
 //选择频度
@@ -449,7 +452,7 @@ function handleShowEDBHistory(data){
                 :right-icon="!isPreview?'arrow':''"
                 required
                 @click-input="showSelectUnit=true"
-                :disabled="!editEdbInfoId&&[6,7].includes(source)||isPreview"
+                :disabled="!editEdbInfoId&&[6,7,75].includes(source)||isPreview"
             />
             <van-field 
                 :modelValue="classifyStr"
@@ -471,7 +474,7 @@ function handleShowEDBHistory(data){
                 :right-icon="!isPreview?'arrow':''"
                 required
                 @click-input="showSelectFrequency=true"
-                :disabled="[5,14,61,63].includes(source)||(!editEdbInfoId&&[6,7].includes(source))||isPreview"
+                :disabled="[5,14,61,63].includes(source)||(!editEdbInfoId&&[6,7,75].includes(source))||isPreview"
             />
             <van-field
                 v-if="[8,12,13,35].includes(source)"

+ 185 - 236
src/views/dataEDB/components/EDBClassify.vue

@@ -1,9 +1,10 @@
 <script setup>
-import {reactive, ref,watch} from 'vue'
+import {computed, reactive, ref,watch} from 'vue'
 import { useWindowSize } from '@vueuse/core'
 import apiDataEDB from '@/api/dataEDB'
 import { showDialog , showToast } from 'vant';
 import {useEDBDelete} from '../hooks/useEDBDelete'
+import {deleteClassifyItemEmpty} from '../util/util'
 
 const {edbClassifyDelete}=useEDBDelete()
 const { width } = useWindowSize()
@@ -17,33 +18,88 @@ const props=defineProps({
 const emits=defineEmits(['update:modelValue','change'])
 
 
+// 处理分类数据 index为要过滤的层级数
+// 如index 为3 则获取arr的前三层数据
+function formatClassifyArr(arr,index){
+    index--
+    arr.length&&arr.forEach(item=>{
+        if(!item.Children?.length||index<=0){
+            delete item.Children
+        }
+        item.Children?.length&&formatClassifyArr(item.Children,index)
+    })
+}
+
 const langType=ref('zh')
 function langTypeChange(type){
     langType.value=type
 }
 
-// 当前点击了哪些分类
-let selectClassifyNameStr=''
-let selectClassifyId=0
-function handleSelectClassify(level1,level2,level3){
-    // console.log(level1,level2,level3);
-    if(level1){
-        selectClassifyId=level1.ClassifyId
-        selectClassifyNameStr=`${level1.ClassifyName}`
+const selectClassifyArr=ref([])//当前选择的哪些目录
+function findClassifyList(arr,id){
+    let temarr=[]
+    arr.forEach(item=>{
+        if(item.ClassifyId===id){
+            if(item.Children?.length){
+                temarr=item.Children
+            }else{// 如果选中了最后一级目录或者这个目录没有子目录则就返回他本身
+                temarr=arr
+            }
+        } 
+    })
+    return temarr
+}
+//显示的目录数据
+const showClassifyArrData=computed(()=>{
+    if(selectClassifyArr.value.length===0) return classifyList.value
+    let arr=classifyList.value
+    for (let index = 0; index < selectClassifyArr.value.length; index++) {
+       arr=findClassifyList(arr,selectClassifyArr.value[index].ClassifyId)
     }
-    if(level2){
-        selectClassifyId=level2.ClassifyId
-        selectClassifyNameStr=`${level1.ClassifyName}/${level2.ClassifyName}`
+    return arr
+})
+//点击目录
+function handleSelectClassify(item){
+    // 如果当前选择的分类的最后一个在当前这个显示的目录里则将最后一个替换掉
+    const last=selectClassifyArr.value[selectClassifyArr.value.length-1]
+    // console.log(last);
+    const flag=showClassifyArrData.value.some(e=>e.ClassifyId===last?.ClassifyId)
+    if(flag){
+        selectClassifyArr.value[selectClassifyArr.value.length-1]=item
+        return
     }
-    if(level3){
-        selectClassifyId=level3.ClassifyId
-        selectClassifyNameStr=`${level1.ClassifyName}/${level2.ClassifyName}/${level3.ClassifyName}`
+    if(item.ClassifyId!==selectClassifyArr.value[selectClassifyArr.value.length-1]?.ClassifyId){
+        selectClassifyArr.value.push(item)
     }
 }
+//返回上级目录
+function handleBackClassify(index){
+    if(index===-1){
+        const flag=showClassifyArrData.value.some(item=>item.ClassifyId===selectClassifyArr.value[selectClassifyArr.value.length-1]?.ClassifyId)
+        if(flag){
+            selectClassifyArr.value.length=selectClassifyArr.value.length-2
+        }else{
+            selectClassifyArr.value.length=selectClassifyArr.value.length-1
+        }
+        return
+    }
+    selectClassifyArr.value.length=selectClassifyArr.value.length-index
+}
+// 显示选择的父级目录
+const showParentClassifyData=computed(()=>{
+    const id=selectClassifyArr.value[selectClassifyArr.value.length-1]?.ClassifyId
+    const flag=showClassifyArrData.value.some(item=>item.ClassifyId===id)
+    if(flag) return selectClassifyArr.value.slice(0,selectClassifyArr.value.length-1)
+    return selectClassifyArr.value
+})
 
 // 关闭弹窗
 function handleClose(){
-    emits('change',{selectClassifyNameStr,selectClassifyId})
+    let selectClassifyId=selectClassifyArr.value[selectClassifyArr.value.length-1]?.ClassifyId||0
+    let selectClassifyNameArr=selectClassifyArr.value.map(item=>getClassifyItemName(item))
+
+
+    emits('change',{selectClassifyNameStr:selectClassifyNameArr.join('/'),selectClassifyId})
     emits('update:modelValue',false)
 }
 
@@ -53,18 +109,16 @@ function getClassifyItemName(item){
 }
 
 // 获取分类数据
-const classifyList=ref([])
+let classifyList=ref([])
 async function getEDBClassifyList(){
     const res=await apiDataEDB.edbClassifyList()
     if(res.Ret===200){
+        deleteClassifyItemEmpty(res.Data.AllNodes||[])
         classifyList.value=res.Data.AllNodes||[]
-        // langType.value=res.Data.Language==='CN'?'zh':'en'
     }
 }
 getEDBClassifyList()
 
-const openClassify=ref([])//当前展开的分类
-
 // 分类操作数据
 const classifyState=reactive({
     show:false,
@@ -72,9 +126,7 @@ const classifyState=reactive({
     name:'',//输入框中的值
     placeholderText:'',
     type:'add',//新增、编辑
-    level:1,//1新增/编辑一级目录,2新增/编辑二级目录
-    level1Text:'',
-    level2Text:'',
+    parentText:'',
     parentId:0,
     classifyId:0,
 })
@@ -86,9 +138,7 @@ watch(
             classifyState.name=''
             classifyState.placeholderText=''
             classifyState.type='add'
-            classifyState.level=1
-            classifyState.level1Text=''
-            classifyState.level2Text=''
+            classifyState.parentText=''
             classifyState.parentId=0
             classifyState.classifyId=0
         }
@@ -124,121 +174,67 @@ async function handleConfirmClassifyState(){
 const classifyOptState=reactive({
     show:false,
     actions:[],
-    level:1,//点击的是几级
-    level1Data:null,
-    level2Data:null,
-    level3Data:null
+    data:{}
 })
 watch(
     ()=>classifyOptState.show,
     (n)=>{
         if(!n){
             classifyOptState.actions=[]
-            classifyOptState.level=1
-            classifyOptState.level1Data=null
-            classifyOptState.level2Data=null
-            classifyOptState.level3Data=null
+            classifyOptState.data={}
         }
     }
 )
 // 显示分类的具体操作选项
-function handleShowClassifyOpt(level,level1,level2,level3){
+function handleShowClassifyOpt(item){
     let optArr=[
         {name:'重命名',type:'edit'},
-        {name:'删除',type:'delete',color:"#C54322"}
+        {name:'删除',type:'delete',color:"#C54322"},
     ]
-    if(level===1){
-        // 判断操作权限
-        if(level1.Button.AddButton){//添加权限
-            optArr.unshift({name:'添加二级目录',type:'add'})
-        }
-        if(!level1.Button.OpButton){//编辑权限
-            optArr=optArr.filter(item=>item.type!='edit')
-        }
-        if(!level1.Button.DeleteButton){//删除
-            optArr=optArr.filter(item=>item.type!='delete')
-        }
-    }else if(level===2){
-        // 判断操作权限
-        if(level2.Button.AddButton){//添加权限
-            optArr.unshift({name:'添加三级目录',type:'add'})
-        }
-        if(level2.Button.MoveButton){//移动权限
-            optArr.push({name:'移动至',type:'move'})
-        }
-        if(!level2.Button.OpButton){//编辑权限
-            optArr=optArr.filter(item=>item.type!='edit')
-        }
-        if(!level2.Button.DeleteButton){//删除
-            optArr=optArr.filter(item=>item.type!='delete')
-        }
-    }else if(level===3){
-        // 判断操作权限
-        if(level3.Button.MoveButton){//移动权限
+    if(item.Button.AddButton&&showParentClassifyData.value.length<5){//添加权限
+        optArr.unshift({name:'添加下级目录',type:'add'})
+    }
+    if(!item.Button.DeleteButton){//删除
+        optArr=optArr.filter(item=>item.type!='delete')
+    }
+    if(item.Button.MoveButton){//移动权限
+        // 一级目录不能移动至
+        if(selectClassifyArr.value.length){
             optArr.push({name:'移动至',type:'move'})
         }
-        if(!level3.Button.OpButton){//编辑权限
-            optArr=optArr.filter(item=>item.type!='edit')
-        }
-        if(!level3.Button.DeleteButton){//删除
-            optArr=optArr.filter(item=>item.type!='delete')
-        }
     }
     classifyOptState.actions=optArr
-    classifyOptState.level=level
-    classifyOptState.level1Data=level1
-    classifyOptState.level2Data=level2
-    classifyOptState.level3Data=level3
+    classifyOptState.data=item
     classifyOptState.show=true
 }
 function handleSelectOpt(e){
     if(e.type==='add'){
+        const temarr=[...showParentClassifyData.value,{...classifyOptState.data}]
+        const selectClassifyNameArr=temarr.map(item=>getClassifyItemName(item))
+        classifyState.parentText=selectClassifyNameArr.join('/')
+
         classifyState.title=e.name
         classifyState.placeholderText='请输入目录名称'
         classifyState.type='add'
-        classifyState.level1Text=classifyOptState.level1Data?.ClassifyName
-        classifyState.level2Text=classifyOptState.level2Data?.ClassifyName
-        if(classifyOptState.level===1){
-            classifyState.parentId=classifyOptState.level1Data?.ClassifyId
-            classifyState.level=1
-        }
-        if(classifyOptState.level===2){
-            classifyState.parentId=classifyOptState.level2Data?.ClassifyId
-            classifyState.level=2
-        }
+        classifyState.parentId=classifyOptState.data.ClassifyId
         classifyState.show=true
     }
     if(e.type==='edit'){
+        const temarr=[...showParentClassifyData.value]
+        const selectClassifyNameArr=temarr.map(item=>getClassifyItemName(item))
+        classifyState.parentText=selectClassifyNameArr.join('/')
+
         classifyState.title='重命名'
         classifyState.placeholderText='请输入目录名称'
         classifyState.type='edit'
-        classifyState.level=classifyOptState.level
-        if(classifyOptState.level===1){
-            classifyState.classifyId=classifyOptState.level1Data?.ClassifyId
-            classifyState.name=classifyOptState.level1Data?.ClassifyName
-        }else if(classifyOptState.level===2){
-            classifyState.level1Text=classifyOptState.level1Data?.ClassifyName
-            classifyState.classifyId=classifyOptState.level2Data?.ClassifyId
-            classifyState.name=classifyOptState.level2Data?.ClassifyName
-        }else if(classifyOptState.level===3){
-            classifyState.level1Text=classifyOptState.level1Data?.ClassifyName
-            classifyState.level2Text=classifyOptState.level2Data?.ClassifyName
-            classifyState.classifyId=classifyOptState.level3Data?.ClassifyId
-            classifyState.name=classifyOptState.level3Data?.ClassifyName
-        }
+        classifyState.name=classifyOptState.data.ClassifyName
+        classifyState.classifyId=classifyOptState.data.ClassifyId
         classifyState.show=true
     }
     if(e.type==='delete'){
-        let data=null
-        if(classifyOptState.level===1){
-            data=classifyOptState.level1Data
-        }else if(classifyOptState.level===2){
-            data=classifyOptState.level2Data
-        }else if(classifyOptState.level===3){
-            data=classifyOptState.level3Data
-        }
+        let data=classifyOptState.data
         edbClassifyDelete(data).then(res=>{
-            console.log(res===true);
+            // console.log(res===true);
             if(res===true){
                 getEDBClassifyList()
             }
@@ -247,35 +243,11 @@ function handleSelectOpt(e){
     if(e.type==='move'){
         classifyMoveState.selectValue=''
         classifyMoveState.tabIndex=0
-        if(classifyOptState.level===2){
-            //移动二级
-            classifyMoveState.options=classifyList.value.map(item=>{
-                return {
-                    ...item,
-                    Children:null
-                }
-            })
-            classifyMoveState.classifyId=classifyOptState.level2Data.ClassifyId
-            classifyMoveState.moveLevel=2
-        }
-        if(classifyOptState.level===3){
-            //移动三级
-            classifyMoveState.options=classifyList.value.map(item=>{
-                const children=item.Children.map(_item=>{
-                    return {
-                        ..._item,
-                        Children:null
-                    }
-                })
-                return {
-                    ...item,
-                    Children:children
-                }
-            })
-            classifyMoveState.classifyId=classifyOptState.level3Data.ClassifyId
-            classifyMoveState.moveLevel=3
-        }
-        
+        const level=showParentClassifyData.value.length
+        const arr=JSON.parse(JSON.stringify(classifyList.value))
+        formatClassifyArr(arr,level)
+        classifyMoveState.options=arr||[]
+        classifyMoveState.classifyId=classifyOptState.data.ClassifyId
         classifyMoveState.show=true
     }
     classifyOptState.show=false
@@ -287,44 +259,25 @@ const classifyMoveState=reactive({
     selectValue:'',
     options:[],
     classifyId:0,//要移动的分类id
-    tabIndex:0,//当前选择了哪一级的分类
-    moveLevel:2,//要移动的分类是哪级
 })
 function handleSelectMoveClassifyChange({value,selectedOptions,tabIndex}){
-    classifyMoveState.tabIndex=tabIndex
+    // classifyMoveState.tabIndex=tabIndex
 }
 function handleConfirmMove(){
     if(!classifyMoveState.selectValue){
         showToast('请选择要移动至的目录')
         return
     }
-    if(classifyMoveState.moveLevel===3&&classifyMoveState.tabIndex!=1){
-        showToast('请选择要移动至的二级目录')
-        return
-    }
-    let NextClassifyId=0
-    if(classifyMoveState.moveLevel===2){
-        const index=classifyMoveState.options.findIndex(e=>e.ClassifyId===classifyMoveState.selectValue)
-        console.log(index);
-        NextClassifyId=classifyList.value[index].Children[0]?.ClassifyId
-    }else if(classifyMoveState.moveLevel===3){
-        let index1=0,index2=0;
-        classifyMoveState.options.forEach((e,idx)=>{
-            e.Children?.forEach((e2,idx2)=>{
-                if(e2.ClassifyId===classifyMoveState.selectValue){
-                    index1=idx
-                    index2=idx2
-                }
-            })
-        })
-        NextClassifyId=classifyList.value[index1].Children[index2].Children[0]?.ClassifyId
-    }
-    // console.log(NextClassifyId);
-    apiDataEDB.edbClassifyMove({
+    
+    // 只会将目录移动到某个目录里面所有下面有很多都是0
+    apiDataEDB.edbCatalogMove({
         ClassifyId:classifyMoveState.classifyId,
         ParentClassifyId:classifyMoveState.selectValue,
+        EdbInfoId:0,
         PrevClassifyId:0,
-        NextClassifyId:NextClassifyId
+        NextClassifyId:0,
+        PrevEdbInfoId:0,
+        NextEdbInfoId:0,
     }).then(res=>{
         if(res.Ret===200){
             showToast('移动成功')
@@ -335,7 +288,6 @@ function handleConfirmMove(){
 }
 
 
-
 defineExpose({classifyList,langTypeChange})
 </script>
 
@@ -348,66 +300,26 @@ defineExpose({classifyList,langTypeChange})
         @click-close-icon="handleClose"
     >
         <div class="edb-classify-wrap">
-            <div class="top-box"></div>
-            <div class="classify-box">
-                <van-collapse v-model="openClassify" :border="false">
-                    <van-collapse-item
-                        v-for="level1 in classifyList"
-                        :key="level1.ClassifyId"
-                        :name="level1.ClassifyId"
-                        :is-link="false"
-                        :border="false"
-                    >
-                        <template #title>
-                            <div class="van-ellipsis" @click="handleSelectClassify(level1)">
-                                <van-icon :name="openClassify.includes(level1.ClassifyId)?'arrow-down':'arrow'" style="margin-right:4px;cursor: pointer;"/>
-                                <span :style="{color:selectClassifyId===level1.ClassifyId?'#0052D9':''}">{{getClassifyItemName(level1)}}</span>
-                            </div>
-                        </template>
-                        <template #value>
-                            <img style="width:22px;height:22px;cursor: pointer;" src="@/assets/imgs/dataEDB/icon_opt.png" alt="" @click.stop="handleShowClassifyOpt(1,level1)">
-                        </template>
-                        <div class="level2-box">
-                            <van-collapse-item
-                                v-for="level2 in level1.Children"
-                                :key="level2.ClassifyId"
-                                :name="level2.ClassifyId"
-                                :is-link="false"
-                                :border="false"
-                            >
-                                <template #title>
-                                    <div class="van-ellipsis" @click="handleSelectClassify(level1,level2)">
-                                        <van-icon :name="openClassify.includes(level2.ClassifyId)?'arrow-down':'arrow'" style="margin-right:4px;cursor: pointer;"/>
-                                        <span :style="{color:selectClassifyId===level2.ClassifyId?'#0052D9':''}">{{getClassifyItemName(level2)}}</span>
-                                    </div>
-                                </template>
-                                <template #value>
-                                    <img style="width:22px;height:22px;cursor: pointer;" src="@/assets/imgs/dataEDB/icon_opt.png" alt="" @click.stop="handleShowClassifyOpt(2,level1,level2)">
-                                </template>
-                                <div class="level3-box">
-                                    <van-collapse-item
-                                        v-for="level3 in level2.Children"
-                                        :key="level3.ClassifyId"
-                                        :title="getClassifyItemName(level3)" 
-                                        :name="level3.ClassifyId"
-                                        :is-link="false"
-                                        :border="false"
-                                    >
-                                        <template #title>
-                                            <div class="van-ellipsis" @click="handleSelectClassify(level1,level2,level3)">
-                                                <span :style="{color:selectClassifyId===level3.ClassifyId?'#0052D9':''}">{{getClassifyItemName(level3)}}</span>
-                                            </div>
-                                        </template>
-                                        <template #value>
-                                            <img style="width:22px;height:22px;cursor: pointer;" src="@/assets/imgs/dataEDB/icon_opt.png" alt="" @click.stop="handleShowClassifyOpt(3,level1,level2,level3)">
-                                        </template>
-                                    </van-collapse-item>
-                                </div>
-                            </van-collapse-item>
-                        </div>
-                    </van-collapse-item>
-                </van-collapse>
+            <div class="top-box">
+                <van-icon name="arrow-left" size='20' @click="handleBackClassify(-1)" v-if="showParentClassifyData.length>0"/>
+                <div class="catalog-text-box">
+                    <span 
+                        v-for="item,index in showParentClassifyData" 
+                        :key="item.ClassifyId"
+                        @click="handleBackClassify(selectClassifyArr.length-index)"
+                    >{{getClassifyItemName(item)}}</span>
+                </div>
             </div>
+            <ul class="classify-box">
+                <li class="classify-item" v-for="item in showClassifyArrData" :key="item.UniqueCode">
+                    <span 
+                        class="van-ellipsis title"
+                        :style="{color:selectClassifyArr[selectClassifyArr.length-1]?.ClassifyId===item.ClassifyId?'#0052D9':''}"
+                        @click.stop="handleSelectClassify(item)"
+                    >{{getClassifyItemName(item)}}</span>
+                    <img style="width:22px;height:22px;cursor: pointer;" src="@/assets/imgs/dataEDB/icon_opt.png" alt="" @click.stop="handleShowClassifyOpt(item)">
+                </li>
+            </ul>
             <div class="bot-btn-box">
                 <van-button type="primary" block @click="handleAddLevel1">添加一级目录</van-button>
             </div>
@@ -430,8 +342,7 @@ defineExpose({classifyList,langTypeChange})
         @confirm="handleConfirmClassifyState"
     >
         <div class="edit-classify-wrap">
-            <p v-if="classifyState.level1Text" style="margin-bottom:8px">一级目录:{{classifyState.level1Text}}</p>
-            <p v-if="classifyState.level2Text" style="margin-bottom:8px">二级目录:{{classifyState.level2Text}}</p>
+            <p class="van-ellipsis" v-if="classifyState.parentText" style="margin-bottom:8px">上级目录:{{classifyState.parentText}}</p>
             <input class="input-box" type="text" :placeholder="classifyState.placeholderText" v-model="classifyState.name">
         </div>
     </van-dialog>
@@ -465,21 +376,46 @@ defineExpose({classifyList,langTypeChange})
         height: calc(var(--van-popup-close-icon-margin) + 50px);
         background-color: #fff;
         flex-shrink: 0;
+        display: flex;
+        align-items: center;
+        padding-right: calc(var(--van-popup-close-icon-margin) + var(--van-popup-close-icon-size));
+        padding-top: var(--van-popup-close-icon-margin);
+        padding-left: 28px;
+        .catalog-text-box{
+            margin-left: 20px;
+            flex: 1;
+            overflow-x: auto;
+            display: flex;
+            &::-webkit-scrollbar{
+                display: none;
+                height: 0;
+            }
+            span{
+                display: block;
+                flex-shrink: 0;
+                font-size: 32px;
+                font-weight: 600;
+                &::after{
+                    content:'/'
+                }
+                &:last-child::after{
+                    content:''
+                }
+            }
+        }
     }
     .classify-box{
         flex: 1;
         overflow-y: auto;
-        :deep(.van-cell__title){
-            flex: 2;
-            overflow: hidden;
-            white-space: nowrap;
-            text-overflow: ellipsis;
-            color: #333;
-        }
-        :deep(.van-collapse-item__content){
-            padding-right: 0;
-            padding-top: 0;
-            padding-bottom: 0;
+        padding: 0 32px;
+        .classify-item{
+            display: flex;
+            align-items: center;
+            padding: 10px 0;
+            .title{
+                flex: 1;
+                display: block;
+            }
         }
     }
     .bot-btn-box{
@@ -506,6 +442,19 @@ defineExpose({classifyList,langTypeChange})
     .edb-classify-wrap{
         .top-box{
             height: calc(var(--van-popup-close-icon-margin) + 50px);
+            padding-left: 14px;
+            .catalog-text-box{
+                margin-left: 10px;
+                span{
+                    font-size: 16px;
+                }
+            }
+        }
+        .classify-box{
+            padding: 0 16px;
+            .classify-item{
+                padding: 5px 0;
+            }
         }
         .bot-btn-box{
             padding: 24px;

+ 11 - 11
src/views/dataEDB/components/EditBaseEDB.vue

@@ -2,6 +2,7 @@
 import {watch,ref, reactive, computed} from 'vue'
 import apiDataEDB from '@/api/dataEDB'
 import {edbFrequencyOpts,edbUnitOpts} from '../util/config'
+import {deleteClassifyItemEmpty,findItemWithIdAndParents} from '../util/util'
 import { showToast } from 'vant'
 
 const props=defineProps({
@@ -64,6 +65,7 @@ const edbClassifyList=ref([])
 function getEdbClassifyList(){
     apiDataEDB.edbClassifyList().then(res=>{
         if(res.Ret===200){
+            deleteClassifyItemEmpty(res.Data.AllNodes||[])
             edbClassifyList.value=res.Data.AllNodes||[]
         }
     })
@@ -71,18 +73,13 @@ function getEdbClassifyList(){
 const showSelectClassify=ref(false)
 const selectClassifyNameStr=computed(()=>{
     if(!formState.classify) return ''
-    let str=''
-    edbClassifyList.value.forEach(level1=>{
-        level1.Children?.forEach(level2=>{
-            level2.Children?.forEach(level3=>{
-                if(level3.ClassifyId===formState.classify){
-                    str=`${level1.ClassifyName}/${level2.ClassifyName}/${level3.ClassifyName}`
-                }
-            })
-        })
-    })
-    return str
 
+    let arr=[]
+    arr=findItemWithIdAndParents(edbClassifyList.value,formState.classify)
+    if(arr?.length){
+        const textArr=arr.map(item=>item.ClassifyName)
+        return `${textArr.join('/')}`
+    }
 })
 
 // 选择频率
@@ -228,6 +225,9 @@ async function handleSave(){
             :field-names="{text:'ClassifyName',value:'ClassifyId',children:'Children'}"
             @close="showSelectClassify = false"
         />
+        <div style="width:300px;margin:0 auto;padding:20px 0">
+            <van-button type="primary" round block @click="showSelectClassify = false">确定</van-button>
+        </div>
     </van-popup>
 
     <!-- 选择频率 -->

+ 17 - 15
src/views/dataEDB/components/SelectEDBClassify.vue

@@ -1,7 +1,7 @@
 <script setup>
 import {ref, watch} from 'vue'
 import apiDataEDB from '@/api/dataEDB'
-
+import {deleteClassifyItemEmpty,findItemWithIdAndParents} from '../util/util'
 const props=defineProps({
     show:{
         type:Boolean,
@@ -34,33 +34,32 @@ const edbClassifyList=ref([])
 function getEdbClassifyList(){
     apiDataEDB.edbClassifyList().then(res=>{
         if(res.Ret===200){
+            deleteClassifyItemEmpty(res.Data.AllNodes||[])
             edbClassifyList.value=res.Data.AllNodes||[]
         }
     })
 }
 getEdbClassifyList()
 
-function handleFinish({value,selectedOptions,tabIndex}){
-    emits('select',{value,selectedOptions})
+let activeData=null
+function handleChange(data){
+    activeData=data
+}
+
+function handleConfirmMove(){
+    emits('select',{value:activeData.value,selectedOptions:activeData.selectedOptions})
     handleClose()
 }
 
-// 通过classifyid 获取当前目录
 function getSelectClassifyOpt(id){
     let arr=[]
-    edbClassifyList.value.forEach(e1=>{
-        e1.Children?.forEach(e2=>{
-            e2.Children?.forEach(e3=>{
-                if(e3.ClassifyId===id){
-                    arr=[e1,e1,e3]
-                }
-            })
-        })
-    })
-    if(arr.length===0){
+    arr=findItemWithIdAndParents(edbClassifyList.value,id)
+    if(arr?.length===0){
         classify.value=''
     }
 
+    console.log(arr);
+
     emits('select',{value:id,selectedOptions:arr})
     return arr
 }
@@ -82,7 +81,10 @@ defineExpose({getSelectClassifyOpt})
             :options="edbClassifyList"
             :field-names="{text:'ClassifyName',value:'ClassifyId',children:'Children'}"
             @close="handleClose"
-            @finish="handleFinish"
+            @change="handleChange"
         />
+        <div style="width:300px;margin:0 auto;padding:20px 0">
+            <van-button type="primary" round block @click="handleConfirmMove">确定</van-button>
+        </div>
     </van-popup>
 </template>

+ 16 - 1
src/views/dataEDB/util/config.js

@@ -220,7 +220,14 @@ export const calculateTypeTipsMap=new Map([
 	[72,`指数修匀计算公式:<br>
 	1、设定指数修匀值序列的初始值=原来时间序列的初始值 <br>
 	2、选择平滑系数alpha值:在0-1之间,开区间 <br>
-	3、本期指数修匀值=alpha*本期实际值+(1-alpha)*上期指数修匀值`]
+	3、本期指数修匀值=alpha*本期实际值+(1-alpha)*上期指数修匀值`],
+	[75,`日均值计算公式:<br>
+	1、年度值转日均值=年度值/对应年份天数 <br>
+	2、半年度值转日均值=半年度值/对应半年度天数 <br>
+	3、季度值转日均值=季度值/对应季度天数 <br>
+	4、月度值转日均值=月度值/对应月度天数 <br>
+	5、旬度值转日均值=旬度值/对应旬度天数 <br>
+	6、周度值转日均值=周度值/7`]
 ])
 
 // 常规计算类型
@@ -293,6 +300,10 @@ export const calculateType=[
 		name: '指数修匀',
 		type: 72
 	},
+	{
+		name: '日均值',
+		type: 75
+	},
 ]
 
 // 批量计算类型
@@ -333,4 +344,8 @@ export const calculateBatchType=[
 		name: '指数修匀',
 		type: 72
 	},
+	{
+		name: '日均值',
+		type: 75
+	},
 ]

+ 28 - 0
src/views/dataEDB/util/util.js

@@ -0,0 +1,28 @@
+// 通过classifyid 获取当前目录
+export function findItemWithIdAndParents(data, targetId) {
+    for (let i = 0; i < data.length; i++) {
+        const item = data[i];
+        if (item.ClassifyId === targetId) {
+            // 找到目标项
+            return [item];
+        } else if (item.Children) {
+            // 在子项中继续查找
+            const foundInChild = findItemWithIdAndParents(item.Children, targetId);
+            if (foundInChild) {
+                // 如果在子项中找到目标项,将当前项添加到父级数组中
+                return [item, ...foundInChild];
+            }
+        }
+    }
+    return null; // 如果未找到目标项,返回null
+}
+
+//去除数组中的children为空数组情况
+export function deleteClassifyItemEmpty(arr){
+    arr.length&&arr.forEach(item=>{
+        item.Children.length&&deleteClassifyItemEmpty(item.Children)
+        if(!item.Children.length){
+            delete item.Children
+        }
+    })
+}

+ 12 - 8
src/views/reportEn/AddReport.vue

@@ -61,6 +61,10 @@ async function getReportDetail(){
         reportData.value=res.Data
         reportBaseInfoData.addType=res.Data.AddType
         reportBaseInfoData.classifyName=[
+            {
+                id:res.Data.ClassifyIdRoot,
+                text:res.Data.ClassifyNameRoot
+            },
             {
                 id:res.Data.ClassifyIdFirst,
                 text:res.Data.ClassifyNameFirst
@@ -97,10 +101,10 @@ async function handleReportBaseInfoChange(e){
     reportBaseInfoData=e
 
     // 继承报告 覆盖一次
-    if(e.addType===2&&e.classifyName.length===2){
+    if(e.addType===2&&e.classifyName.length===3){
         const res=await apiReportEn.reportDetailByClassifyId({
-            ClassifyIdFirst:e.classifyName[0].id,
-            ClassifyIdSecond:e.classifyName[1].id
+            ClassifyIdFirst:e.classifyName[1].id,
+            ClassifyIdSecond:e.classifyName[2].id
         })
         if(res.Ret===200){
             if(res.Data===null){
@@ -223,10 +227,10 @@ async function handleReportOpt(e){
     $('#editor .fr-element').find('img.fr-uploading').length&&$('#editor .fr-element').find('img.fr-uploading').remove()
     const params={
         AddType:reportBaseInfoData.addType,
-        ClassifyIdFirst:reportBaseInfoData.classifyName[0]?.id,
-        ClassifyNameFirst:reportBaseInfoData.classifyName[0]?.text,
-        ClassifyIdSecond:reportBaseInfoData.classifyName[1]?.id,
-        ClassifyNameSecond:reportBaseInfoData.classifyName[1]?.text,
+        ClassifyIdFirst:reportBaseInfoData.classifyName[1]?.id,
+        ClassifyNameFirst:reportBaseInfoData.classifyName[1]?.text,
+        ClassifyIdSecond:reportBaseInfoData.classifyName[2]?.id,
+        ClassifyNameSecond:reportBaseInfoData.classifyName[2]?.text,
         Title:reportBaseInfoData.title,
         Abstract:reportBaseInfoData.abstract,
         Author:reportBaseInfoData.author.join(','),
@@ -238,7 +242,7 @@ async function handleReportOpt(e){
         Overview:temOverviewData.value
     }
     
-    if(reportBaseInfoData.classifyName.length!=2){
+    if(reportBaseInfoData.classifyName.length!=3){
         showToast('请选择分类')
         return
     }

+ 14 - 6
src/views/reportEn/List.vue

@@ -21,8 +21,9 @@ const router=useRouter()
 const showCleanFilterBox=computed(()=>{
     if(isClickClose.value) return false
     if(
+        listState.ClassifyNameRoot ||
         listState.ClassifyNameFirst||
-        listState.ClassifyNameFirst||
+        listState.ClassifyNameSecond||
         listState.EndDate||
         listState.Frequency||
         listState.MsgIsSend||
@@ -31,8 +32,12 @@ const showCleanFilterBox=computed(()=>{
 })
 const isClickClose=ref(false)//是否点击过关闭一键清空模块
 function handleCleanFilter(){
+    listState.ClassifyNameRoot=''
     listState.ClassifyNameFirst=''
     listState.ClassifyNameSecond=''
+    // 重置分类选择器状态
+    classifySelector.value.clearClassifyOptions()
+
     listState.MsgIsSend=''
     listState.Frequency=''
     listState.StartDate=''
@@ -43,12 +48,13 @@ function handleCleanFilter(){
 
 // 分类弹窗
 const showClassify=ref(false)
-
+const classifySelector=ref(null)
 
 const listState = reactive({
     publishStatus:'',
     MsgIsSend:'',
     Frequency:'',
+    ClassifyNameRoot:'',
     ClassifyNameFirst:'',
     ClassifyNameSecond:'',
     StartDate:'',
@@ -65,8 +71,9 @@ async function getList(){
         PageSize:listState.pageSize,
         StartDate:listState.StartDate,
         EndDate:listState.EndDate,
-        ClassifyNameFirst:listState.ClassifyNameFirst,
-        ClassifyNameSecond:listState.ClassifyNameSecond,
+        ClassifyIdRoot:listState.ClassifyNameRoot.id,
+        ClassifyIdFirst:listState.ClassifyNameFirst.id,
+        ClassifySecond:listState.ClassifyNameSecond.id,
         Frequency:listState.Frequency,
         EmailState:listState.MsgIsSend,
         TimeType:dateType.value===1?'publish_time':'modify_time',
@@ -172,7 +179,8 @@ function handleResetCalendar(){
 }
 
 // 分类筛选
-function handleConfirmClassify({firstClassify,secondClassify}){
+function handleConfirmClassify({rootClassify,firstClassify,secondClassify}){
+    listState.ClassifyNameRoot=rootClassify
     listState.ClassifyNameFirst=firstClassify
     listState.ClassifyNameSecond=secondClassify
     refreshList()
@@ -577,7 +585,7 @@ function handleGoEmailLog(e){
         :style="width>650?{ width: '400px'}:''"
         round
     >
-        <ListClassify @close="showClassify=false" @confirm="handleConfirmClassify"/>
+        <ListClassify @close="showClassify=false" @confirm="handleConfirmClassify" ref="classifySelector"/>
     </van-popup>
 
     <!-- 日期筛选 -->

+ 5 - 5
src/views/reportEn/components/EditReportBaseInfo.vue

@@ -56,20 +56,20 @@ function selectAddType(e){
 // 报告所属分类
 const showClassifyPop=ref(false)
 const setClassifyVal=computed(()=>{
-    if(reportBaseInfo.classifyName.length===2){
-        return `${reportBaseInfo.classifyName[0].text}/${reportBaseInfo.classifyName[1].text}`
+    if(reportBaseInfo.classifyName.length===3){
+        return `${reportBaseInfo.classifyName[0].text} / ${reportBaseInfo.classifyName[1].text} / ${reportBaseInfo.classifyName[2].text}`
     }
     return '请选择分类'
 })
 function handleShowClassify(){
     showClassifyPop.value=true
 }
-function handleConfirmClassify({firstClassify,secondClassify}){
-    if(!firstClassify.id||!secondClassify.id){
+function handleConfirmClassify({rootClassify,firstClassify,secondClassify}){
+    if(!rootClassify||!firstClassify.id||!secondClassify.id){
         showToast('请选择分类')
         return
     }
-    reportBaseInfo.classifyName=[firstClassify,secondClassify]
+    reportBaseInfo.classifyName=[rootClassify,firstClassify,secondClassify]
     reportBaseInfo.title=secondClassify.text
     showClassifyPop.value=false
 }

+ 2 - 1
src/views/reportEn/components/EditStrategyReport.vue

@@ -115,7 +115,8 @@ async function handleSave(){
 <template>
     <div class="edit-strategy-report-wrap">
         <van-cell-group>
-            <van-cell value-class="cell-con" required title="分类" :value="defaultData.ClassifyNameFirst+'/'+defaultData.ClassifyNameSecond" />
+            <van-cell value-class="cell-con" required title="分类" 
+            :value="defaultData.ClassifyNameRoot+'/'+defaultData.ClassifyNameFirst+'/'+defaultData.ClassifyNameSecond" />
             <van-cell value-class="cell-con" title="作者" :value="baseInfo.author.join(',')" is-link @click="handleShowSelectAuthor"/>
             <van-cell value-class="cell-con" title="频度" :value="baseInfo.frequency.join('')" is-link @click="handleShowFrequency"/>
             <van-cell value-class="cell-con" title="创建时间" :value="baseInfo.createtime" is-link @click="handleShowCreatetime"/>

+ 69 - 17
src/views/reportEn/components/ListClassify.vue

@@ -5,12 +5,15 @@ import apiReportEn from '@/api/reportEn'
 const props=defineProps({
     defaultVal:null,
     noReset:false,
+    rootClassifyDisabled:false,//顶级分类是否要判断禁用
     firstClassifyDisabled:false,//一级分类是否要判断禁用
 })
 
 const emits=defineEmits(['close','confirm'])
 
 const list=ref([])
+const activeTab=ref(0)
+
 function getClassifyList(){
     apiReportEn.getClassifyList({
         CurrentIndex:1,
@@ -21,22 +24,33 @@ function getClassifyList(){
             const arr=res.Data.List||[]
             list.value=arr.map(item=>{
                 const child=item.Child?item.Child.map(e=>{
+                    // console.log(e,'ee')
+                    const groundChild = e.Child? e.Child.map(it =>{
+                        return {
+                            text:it.ClassifyName,
+                            id:it.Id
+                        }
+                    }):[]
+
                     return {
                         text:e.ClassifyName,
-                        id:e.Id
+                        id:e.Id,
+                        children:groundChild,
+                        disabled:props.firstClassifyDisabled&&groundChild.length===0?true:false,
                     }
                 }):[]
                 return {
                     text:item.ClassifyName,
                     id:item.Id,
                     children:child,
-                    disabled:props.firstClassifyDisabled&&child.length===0?true:false,
+                    disabled:props.rootClassifyDisabled&&child.length===0?true:false,
                 }
             })
-            if(props.defaultVal&&props.defaultVal[1]){
-                activeId.value=props.defaultVal[1].id
+
+            if(props.defaultVal&&props.defaultVal[2]){
+                activeId.value=props.defaultVal[2].id
                 list.value.forEach((item,index)=>{
-                    if(item.id===props.defaultVal[0].id){
+                    if(item.id===props.defaultVal[1].id){
                         activeIndex.value=index
                     }
                 })
@@ -54,27 +68,57 @@ function handleCancle(){
 }
 
 function handleReset(){
+    activeTab.value=0
+    activeIndex.value=0
+    activeId.value=null
+    emits('confirm',{rootClassify:'',firstClassify:'',secondClassify:''})
+}
+
+function clearClassifyOptions(){
+    activeTab.value=0
+    activeIndex.value=0
+    activeId.value=null
+}
+
+function tabChange(value) {
     activeIndex.value=0
     activeId.value=null
-    emits('confirm',{firstClassify:'',secondClassify:''})
 }
 
 function handleConfirm(){
-    const firstClassify={
-        text:list.value[activeIndex.value].text,
-        id:list.value[activeIndex.value].id
+
+    let itemChild = list.value[activeTab.value]
+    const rootClassify={
+        text:itemChild.text,
+        id:itemChild.id
     }
+    let firstClassify={text:'',id:''}
+    if(itemChild.children[activeIndex.value]){
+        firstClassify={
+            text:itemChild.children[activeIndex.value].text,
+            id:itemChild.children[activeIndex.value].id
+        }
+    }
+
     let secondClassify={text:'',id:''}
     if(activeId.value){
-        list.value[activeIndex.value].children.forEach(e => {
+        // 找第三级id
+        itemChild.children[activeIndex.value].children.forEach(e => {
+            // console.log(e.id,"e.id",activeId.value);
             if(e.id===activeId.value){
                 secondClassify.text=e.text
                 secondClassify.id=e.id
             }
         });
     }
-    emits('confirm',{firstClassify,secondClassify})
+    // console.log(rootClassify,firstClassify,secondClassify,'secondClassify');
+    emits('confirm',{rootClassify,firstClassify,secondClassify})
 }
+
+defineExpose({
+    clearClassifyOptions
+})
+
 </script>
 
 <template>
@@ -85,12 +129,20 @@ function handleConfirm(){
             <span style="font-size:18px;font-weight:bold">选择分类</span>
             <span style="color:#0052D9" @click="handleConfirm">确定</span>
         </div>
-        <van-tree-select
-            v-model:active-id="activeId"
-            v-model:main-active-index="activeIndex"
-            :items="list"
-            @click-nav="activeId=null"
-        />
+        <van-tabs v-model:active="activeTab" shrink @change="tabChange">
+            <van-tab v-for="tabOp in list" :key="tabOp.id" 
+            :title="tabOp.text" :disabled="tabOp.disabled" >
+                <div class="content">
+                    <van-tree-select
+                        v-model:active-id="activeId"
+                        v-model:main-active-index="activeIndex"
+                        :items="tabOp.children"
+                        @click-nav="activeId=null"
+                    />
+                </div>
+            </van-tab>
+        </van-tabs>
+
     </div>
 </template>