Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

ZaiZai před 2 roky
rodič
revize
a412dc00d6

+ 113 - 17
src/components/dialog/EditNodeDialog.vue

@@ -19,13 +19,17 @@
           <el-option v-for="item in projectTypeList"  :key="item.value"  :label="item.label" :value="item.value"></el-option>
           </el-select>
       </el-form-item> -->
-      <el-form-item  label="储存类型"  prop="storageType"  v-if="addform.nodeType==1">
+
+
+      <!-- <el-form-item  label="储存类型"  prop="storageType"  v-if="addform.nodeType==1">
           <el-select  v-model="addform.storageType"  placeholder="请选择"  size="large" style="width:100%">
               <el-option  v-for="item in storageTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
           </el-select>
-      </el-form-item>
+      </el-form-item> -->
+
+      <template v-if="true">
 
-      <template v-if="addform.nodeType==2">
+  
           <el-form-item  label="是否存储节点"  prop="isStorageNode">
               <el-select  v-model="addform.isStorageNode" placeholder="请选择" size="large" style="width:100%">
                   <el-option  v-for="item in storageNodeList"  :key="item.value"  :label="item.label"  :value="item.value"></el-option>
@@ -106,19 +110,21 @@
 </template>
 
 <script setup>
+import {useAppStore} from "~src/store";
 import {ref, watch, onMounted,nextTick,toRefs,computed } from "vue";
 import {roletree,getDictionary,archiveTreeSave,archiveTreeDetail,archiveTreeUpdate} from "~api/other";
+import archiveFileApi from "~api/archiveFile/archiveFile";
+import {getArrValue,isArrItem} from "js-fast-way"
+const useAppState = useAppStore()
 
+const contractId = ref(useAppState.getContractId);
 //参数
 const props = defineProps({
     projectId: {
         type: [String,Number],
         default: ''
     },
-    contractId: {
-        type: [String,Number],
-        default: ''
-    },
+
     node: {
         type: Object,
         default: () => ({})
@@ -134,20 +140,23 @@ const props = defineProps({
 })
 
 const projectId = ref(props.projectId);
-const contractId = ref(props.contractId);
+
 // 使用toRefs结构,使其具有响应式
 const {node} = toRefs(props);
 
 //监听
 watch(() => [
     props.projectId,
-    props.contractId,
-], ([UserProjectId, UserContractId]) => {
+  
+], ([UserProjectId]) => {
+
     projectId.value = UserProjectId
-    contractId.value = UserContractId
+   
+   
 })
 
 watch(() => [props.show,props.type],([newShow,newType])=>{
+  
     //console.log(newShow,newType)
     if(newShow){
       if(newType == 'add'){
@@ -157,6 +166,7 @@ watch(() => [props.show,props.type],([newShow,newType])=>{
       }
     }else{
       cancelClick();
+      addNodeModal.value = false;
     }
 });
 
@@ -185,6 +195,7 @@ let addform = ref({})
 let addNodeModal = ref(false)
 
 const addNode = async()=>{
+    
     //console.log(node.value.data)
     const {code,data } = await archiveTreeDetail({
         id:node.value.data.id
@@ -192,13 +203,22 @@ const addNode = async()=>{
     if (code == 200) {
         delete data['id'];
         delete data['nodeName'];
+   
         //新增的信息和父级一样
         //是否竣工图,是否接口节点。默认否
         data.isInterfaceNode = 2;
         data.interfaceType = 2;
 
         addform.value = data;
+        console.log(data,'data');
         addNodeModal.value = true;
+        if(data.isStorageNode==1){
+            emit('hide', {})
+            window.$message.warning('存储节点下面不允许新增节点')
+        }
+        
+    
+        
     }
 }
 
@@ -206,6 +226,48 @@ const cancelClick = () => {
   emit('hide', {})
   addNodeModal.value = false
 }
+// const confirmClick = async () => {
+//     await ruleFormRef.value.validate(async (valid, fields) => {
+//         if (valid) {
+//             let form = {
+//                 id: addform.value.id,
+//                 projectId:projectId.value,
+//                 parentId: node.value.data.id, //上级节点id
+//                 nodeName: addform.value.nodeName,  //节点名称
+//                 nodeType: addform.value.nodeType,  // 节点类型
+//                 postType: addform.value.postType,  //岗位类型
+
+//                 projectType:addform.value.projectType, //工程类型
+//                 storageType:addform.value.storageType, //储存类型
+//             }
+//             if(addform.value.nodeType == 2){
+//                 form.isStorageNode = addform.value.isStorageNode  //是否为存储节点
+//                 if(addform.value.isStorageNode == 1){
+//                     form.isBuiltDrawing = addform.value.isBuiltDrawing  //竣工图
+//                     form.isInterfaceNode = addform.value.isInterfaceNode  //是否接口节点
+//                     if(addform.value.isInterfaceNode == 1){
+//                         form.interfaceType =  addform.value.interfaceType  //选择接口类型
+//                     }
+//                 }else{
+//                     delete form.storageType
+//                 }
+//             }else if (addform.value.nodeType == 1){
+//                 form.associationType = addform.value.associationType  //关联类型
+//                 if(addform.value.associationType == 1){
+//                     form.majorDataType = addform.value.majorDataType //内业资料类型
+//                     form.displayHierarchy = addform.value.displayHierarchy  //显示层级
+//                 }else if(addform.value.associationType == 2){
+//                     // form.expDataType = addform.value.expDataType.join(',')//文件类型
+//                     form.expDataType = addform.value.expDataType//文件类型
+//                 }
+//             }
+
+//             await saveTreeNode(form)
+
+//             addNodeModal.value = false
+//         }
+//     })
+// }
 const confirmClick = async () => {
     await ruleFormRef.value.validate(async (valid, fields) => {
         if (valid) {
@@ -220,7 +282,7 @@ const confirmClick = async () => {
                 projectType:addform.value.projectType, //工程类型
                 storageType:addform.value.storageType, //储存类型
             }
-            if(addform.value.nodeType == 2){
+          
                 form.isStorageNode = addform.value.isStorageNode  //是否为存储节点
                 if(addform.value.isStorageNode == 1){
                     form.isBuiltDrawing = addform.value.isBuiltDrawing  //竣工图
@@ -231,7 +293,7 @@ const confirmClick = async () => {
                 }else{
                     delete form.storageType
                 }
-            }else if (addform.value.nodeType == 1){
+         
                 form.associationType = addform.value.associationType  //关联类型
                 if(addform.value.associationType == 1){
                     form.majorDataType = addform.value.majorDataType //内业资料类型
@@ -240,7 +302,7 @@ const confirmClick = async () => {
                     // form.expDataType = addform.value.expDataType.join(',')//文件类型
                     form.expDataType = addform.value.expDataType//文件类型
                 }
-            }
+            
 
             await saveTreeNode(form)
 
@@ -250,7 +312,7 @@ const confirmClick = async () => {
 }
 
 const saveTreeNode = async (form)=>{
-    if (form.majorDataType) {
+    if (form?.majorDataType&&isArrItem( form?.majorDataType)) {
         if (form.majorDataType.length > 0) {
           let das = ''
           form.majorDataType.forEach((val, key) => {
@@ -263,7 +325,15 @@ const saveTreeNode = async (form)=>{
         }
       }
       if (addform.value.id) {
-        await archiveTreeUpdateHandle(form)
+        console.log(isEditsto.value,'isEditsto.value');
+        console.log(ishabvFile.value,'ishabvFile.value');
+        // await archiveTreeUpdateHandle(form)
+        if(isEditsto.value===1&&addform.value.isStorageNode===2&&ishabvFile.value){
+            //是否存储类型由是改为否,要判断该节点下是否有存储文件
+            window.$message.warning('当前节点下有存储文件,请迁移或删除后再变更')
+        }else{
+            await archiveTreeUpdateHandle(form)
+        }
       } else {
         await archiveTreeSaveHandle(form)
       }
@@ -290,14 +360,40 @@ const archiveTreeUpdateHandle = async (form)=>{//编辑
         node.value.data.storageType = form.storageType;
     }
 }
-
+const ishabvFile=ref(false)
+//查询该节点下有没有文件
+const getTableData = async (nodeid) => {
+    console.log(contractId.value,'contractId.value');
+    const { error, code, data } = await archiveFileApi.getarchiveFilePage({
+        nodeIds: nodeid,
+        current: 1,
+        size: 20,
+        total: 0,
+        projectId: projectId.value,
+        contractId:contractId.value
+    })
+    if (!error && code === 200) {
+        let dataarr=getArrValue(data['records'])
+        if(dataarr.length>0){
+            ishabvFile.value=true
+        }else{
+            ishabvFile.value=false
+        }
+    } else {
+        ishabvFile.value=false
+    }
+}
+const isEditsto=ref('')//原始为存储节点
 //编辑节点
 const editNodeModal = async ()=>{
+    getTableData(node.value.data.id)
     const {code,data } = await archiveTreeDetail({
         id:node.value.data.id
     })
     if (code == 200) {
         addform.value = data;
+        isEditsto.value=data.isStorageNode
+       
         addNodeModal.value = true
     }
     //addform.value = node.data;

+ 50 - 65
src/components/tree/hc-tree.vue

@@ -1,39 +1,24 @@
 <template>
 
           <el-radio-group v-model="radioKeys" @change="treeRadioChange">
-            <ElTree class="hc-tree-node tree-line" :class="ui" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="id"
+            <ElTree class="hc-tree-node tree-line  el-radio-group" :class="ui" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="id"
                     :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu2" :indent="0" >
                 <template #default="{ node, data }">
                     <div class="data-custom-tree-node" :id="`${idPrefix}${data['id']}`">
                         <!--树组件,节点名称-->
                         <div class="label level-name" v-if="node.level === 1" >
                            <span> {{ node.label }}</span>
-                            <div class="menu-icon1" :class="node.showTreeMenu?'show':''"  v-if="isShowMenu">
-                                <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event,data,node)">
-                                    <HcIcon name="apps" ui="text-2xl"/>
-                                </div>
-                            </div>
-                           
                         </div>
                         <div class="label" v-else>
                             <el-radio class="size-xl" :label="data['id']" @click.stop="clickRadio(data)" v-if="isRadio && showRadioFun(data)">{{ node.label }}</el-radio>
                             <span v-else>{{ node.label }}</span>
-                            <div class="menu-icon1" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1 && menusData.length > 0">
-                                <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event,data,node)">
-                                    <HcIcon name="apps" ui="text-2xl"/>
-                                </div>
-                            </div>
-                            
-                        
-
-                            <!--没有传入菜单使用默认的-->
-                            <div class="menu-icon1" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1 && menusData.length < 1&&isShowMenu">
-                                <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event,data,node)">
-                                    <HcIcon name="apps" ui="text-2xl"/>
-                                </div>
+                        </div>
+                         <div class="text-blue submit-counts" v-if="false">【{{ data.submitCounts ?? 0 }}】</div>
+                        <!--没有传入菜单使用默认的-->
+                        <div class="menu-icon1" :class="node.showTreeMenu?'show':''" v-if="isShowMenu">
+                            <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu2($event,data,node)">
+                                <HcIcon name="apps" ui="text-2xl"/>
                             </div>
-                       
-                        
                         </div>
                
                     </div>
@@ -452,51 +437,36 @@ defineExpose({
 </script>
 
 <style lang="scss" scoped>
+
+
 @import "../../styles/app/tree.scss";
-.el-radio-group {
-    width: auto;
 
-}
 .data-custom-tree-node {
-    .label{
-        line-height: 30px;
+    flex: 1;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    .label {
+        flex: 1;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
     }
-    .menu-icon {
-        position: absolute;
-        pointer-events: none;
-        transition: opacity 0.2s;
-        opacity: 0;
-        right: 0;
-        background: rgba(255, 255, 255, 0.25);
-        border-radius: 2px;
-        .cu-tree-node-popover-menu-icon {
-            display: flex;
-            align-items: center;
-            justify-content: center;
-        }
+    .submit-counts {
+        position: unset;
+        font-size: 14px;
     }
-    &:hover {
-        .menu-icon {
-            opacity: 1;
-            pointer-events: all;
-            cursor: context-menu;
-        }
-    }
-    .menu-icon.show {
-        opacity: 1;
-        pointer-events: all;
-        cursor: context-menu;
-    }
-        .menu-icon1 {
-        // position: absolute;
-        vertical-align: bottom;
-        display:inline-block;
-        pointer-events: none;
-        transition: opacity 0.2s;
-        opacity: 0;
-        // right: 0;
-        background: rgba(255, 255, 255, 0.25);
+    .menu-icon1 {
+        background: hsla(0,0%,100%,.25);
         border-radius: 2px;
+        display: inline-block;
+        pointer-events: none;
+        position: relative;
+        right: -45px;
+        transition: width .2s;
+        vertical-align: bottom;
+        width: 0;
+
         .cu-tree-node-popover-menu-icon {
             display: flex;
             align-items: center;
@@ -505,15 +475,30 @@ defineExpose({
     }
     &:hover {
         .menu-icon1 {
-            opacity: 1;
-            pointer-events: all;
             cursor: context-menu;
+            pointer-events: all;
+            right: 0;
+            width: 24px;
         }
     }
     .menu-icon1.show {
-        opacity: 1;
-        pointer-events: all;
         cursor: context-menu;
+        pointer-events: all;
+        right: 0;
+        width: 24px;
     }
 }
 </style>
+<style lang="scss">
+
+.el-tree.hc-tree-node .el-tree-node {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    .el-tree-node_content {
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+}
+</style>

+ 5 - 2
src/views/custody/components/tab-reform.vue

@@ -4,10 +4,13 @@
             <HcNewSwitch :datas="tabData" :keys="tabKey" @change="tabChange"/>
         </template>
         <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading">
+            <template #sourceType="{row}">
+                        <span class="text-link" @click="tableRowName(row)">{{row?.sourceType==0?'巡检':'验收'}}</span>
+             </template>
             <template #fileName="{row}">
                         <span class="text-link" @click="tableRowName(row)">{{row?.fileName}}</span>
              </template>
-        </HcTable>>
+        </HcTable>
         <template #action>
             <HcPages :pages="searchForm" @change="pageChange"/>
         </template>
@@ -106,7 +109,7 @@ const pageChange = ({current, size}) => {
 //内业台账表头
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'from', name: '来源',width:150},
+    {key:'sourceType', name: '来源',width:150},
     {key:'archiveName', name: '所属案卷'},
     {key:'fileName', name: '具体文件'},
     {key:'allopinion', name: '问题描述'}