ZaiZai 1 年之前
父節點
當前提交
43bcb19515
共有 3 個文件被更改,包括 224 次插入8 次删除
  1. 24 0
      src/api/modules/project/tree.js
  2. 4 2
      src/views/project/tree/drawer-temp.vue
  3. 196 6
      src/views/project/tree/tree-form.vue

+ 24 - 0
src/api/modules/project/tree.js

@@ -41,4 +41,28 @@ export default {
             params: form,
         })
     },
+    //节点详情
+    async treeDetail(form) {
+        return HcApi({
+            url: '/api/blade-manager/archiveTree/detail',
+            method: 'get',
+            params: form,
+        })
+    },
+    //节点更新
+    async treeUpdate(form) {
+        return HcApi({
+            url: '/api/blade-manager/archiveTree/update',
+            method: 'post',
+            data: form,
+        })
+    },
+    //节点新增
+    async treeAdd(form) {
+        return HcApi({
+            url: '/api/blade-manager/archiveTree/save',
+            method: 'post',
+            data: form,
+        })
+    },
 }

+ 4 - 2
src/views/project/tree/drawer-temp.vue

@@ -114,16 +114,18 @@ const treeMenu = ({ level }, resolve) => {
 const treeMenuClick = ({ key, data, node }) => {
     if (key === 'add') {
         if (Number(data.isStorageNode) !== 1) {
-            window.$message.warning('该节点下不允许新增节点')
-        } else {
             treeFormType.value = '新增'
             treeFormData.value = data
             treeFormNode.value = node
+            isTreeFormShow.value = true
+        } else {
+            window.$message.warning('该节点下不允许新增节点')
         }
     } else if (key === 'edit') {
         treeFormType.value = '编辑'
         treeFormData.value = data
         treeFormNode.value = node
+        isTreeFormShow.value = true
     } else if (key === 'sync') {
         syncTreeNode(data.id)
     }

+ 196 - 6
src/views/project/tree/tree-form.vue

@@ -1,6 +1,107 @@
 <template>
-    <hc-dialog v-model="isShow" ui="hc-project-tree-tree-form" :title="type" widths="400px" :padding="false" @close="dialogClose">
-        111111
+    <hc-dialog v-model="isShow" ui="hc-project-tree-tree-form" :title="type" widths="500px" @close="dialogClose">
+        <el-scrollbar>
+            <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top" label-width="auto">
+                <el-form-item label="节点名称:" prop="nodeName">
+                    <el-input v-model="formModel.nodeName" placeholder="请输入节点名称" />
+                </el-form-item>
+                <el-form-item label="岗位类型:" prop="postType">
+                    <el-select v-model="formModel.postType" filterable block placeholder="请选择岗位类型">
+                        <el-option v-for="item in JobTypeList" :key="item.id" :label="item.title" :value="item.id" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="节点类型:" prop="nodeType">
+                    <el-select v-model="formModel.nodeType" filterable block placeholder="请选择节点类型">
+                        <el-option label="关联电子原生文件" :value="1" />
+                        <el-option label="数字化上传文件" :value="2" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="工程类型:" prop="projectType">
+                    <el-select v-model="formModel.projectType" filterable block placeholder="请选择工程类型">
+                        <el-option label="水利水电工程" :value="1" />
+                        <el-option label="公路工程" :value="2" />
+                        <el-option label="全部" :value="3" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item v-if="formModel.nodeType === 1" label="储存类型:" prop="storageType">
+                    <el-select v-model="formModel.storageType" filterable block placeholder="请选择储存类型">
+                        <el-option label="普通" :value="1" />
+                        <el-option label="竣工图" :value="2" />
+                        <el-option label="计量" :value="3" />
+                        <el-option label="质检" :value="4" />
+                        <el-option label="声像" :value="5" />
+                        <el-option label="隐蔽" :value="6" />
+                        <el-option label="原材试验" :value="7" />
+                        <el-option label="管理文件" :value="8" />
+                        <el-option label="变更令" :value="9" />
+                    </el-select>
+                </el-form-item>
+                <template v-if="formModel.nodeType === 2">
+                    <el-form-item label="存储节点:" prop="isStorageNode">
+                        <el-select v-model="formModel.isStorageNode" filterable block placeholder="请选择是否存储节点">
+                            <el-option label="是" :value="1" />
+                            <el-option label="否" :value="2" />
+                        </el-select>
+                    </el-form-item>
+                    <template v-if="formModel.isStorageNode === 1">
+                        <el-form-item label="储存类型:" prop="storageType">
+                            <el-select v-model="formModel.storageType" filterable block placeholder="请选择储存类型">
+                                <el-option label="普通" :value="1" />
+                                <el-option label="竣工图" :value="2" />
+                                <el-option label="计量" :value="3" />
+                                <el-option label="质检" :value="4" />
+                                <el-option label="声像" :value="5" />
+                                <el-option label="隐蔽" :value="6" />
+                                <el-option label="原材试验" :value="7" />
+                                <el-option label="管理文件" :value="8" />
+                                <el-option label="变更令" :value="9" />
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="接口节点:" prop="isInterfaceNode">
+                            <el-select v-model="formModel.isInterfaceNode" filterable block placeholder="请选择是否接口节点">
+                                <el-option label="是" :value="1" />
+                                <el-option label="否" :value="2" />
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item v-if="formModel.isInterfaceNode === 1" label="接口类型:" prop="interfaceType">
+                            <el-select v-model="formModel.interfaceType" filterable block placeholder="请选择接口类型">
+                                <el-option label="试验接口" :value="1" />
+                                <el-option label="计量接口" :value="2" />
+                            </el-select>
+                        </el-form-item>
+                    </template>
+                </template>
+                <template v-if="formModel.nodeType === 1">
+                    <el-form-item label="关联类型:" prop="associationType">
+                        <el-select v-model="formModel.associationType" filterable block placeholder="请选择关联类型">
+                            <el-option label="质检资料" :value="1" />
+                            <el-option label="试验资料" :value="2" />
+                            <el-option label="影像资料" :value="3" />
+                            <el-option label="台账资料" :value="4" />
+                            <el-option label="首件资料" :value="5" />
+                            <el-option label="日志文件" :value="6" />
+                        </el-select>
+                    </el-form-item>
+                    <template v-if="formModel.associationType === 1">
+                        <el-form-item label="业内资料类型:" prop="majorDataType">
+                            <el-checkbox-group v-model="formModel.majorDataType">
+                                <el-checkbox v-for="item in majorDataTypeList" :key="item.value" :value="item.value" name="type">{{ item.label }}</el-checkbox>
+                            </el-checkbox-group>
+                        </el-form-item>
+                        <el-form-item label="显示层级:" prop="displayHierarchy">
+                            <el-select v-model="formModel.displayHierarchy" filterable block placeholder="请选择显示层级">
+                                <el-option v-for="item in displayHierarchyList" :key="item.value" :label="item.label" :value="item.value" />
+                            </el-select>
+                        </el-form-item>
+                    </template>
+                    <el-form-item v-if="formModel.associationType === 2" label="文件类型:" prop="expDataType">
+                        <el-checkbox-group v-model="formModel.expDataType">
+                            <el-checkbox v-for="item in fileTypeList" :key="item.value" :value="item.value">{{ item.label }}</el-checkbox>
+                        </el-checkbox-group>
+                    </el-form-item>
+                </template>
+            </el-form>
+        </el-scrollbar>
         <template #footer>
             <el-button hc-btn @click="dialogClose">取消</el-button>
             <el-button hc-btn type="primary" :loading="submitLoading" @click="dialogSubmit">提交</el-button>
@@ -10,9 +111,10 @@
 
 <script setup>
 import { ref, watch } from 'vue'
+import { formValidate, getArrValue, getObjValue, isNullES } from 'js-fast-way'
 import { getDictionaryData } from '~uti/tools'
-import { getObjValue } from 'js-fast-way'
 import mainApi from '~api/project/tree'
+import roleApi from '~api/system/role'
 
 const props = defineProps({
     info: {
@@ -58,16 +160,102 @@ watch(isShow, (val) => {
 
 //获取数据详情
 const getInfoData = () => {
+    const data = getObjValue(dataInfo.value)
+    if (props.type === '新增') {
+        formModel.value = {
+            parentId: data.id,
+            postType: data.postType,
+            projectId: formInfo.value.id,
+        }
+    } else {
+        getTreeDetail(data.id)
+    }
+    getRoleData()
+    getMajorData()
+    getDisplayList()
+}
+
+//节点详情
+const getTreeDetail = async (id) => {
+    const { data } = await mainApi.treeDetail({ id })
+    const res = getObjValue(data)
+    formModel.value = {
+        ...res,
+        id: id,
+        nodeName: res.fullName,
+        expDataType: isNullES(res.expDataType) ? [] : res.expDataType.split(','),
+        majorDataType: isNullES(res.majorDataType) ? [] : res.majorDataType.split(','),
+    }
+}
 
+//岗位类型
+const JobTypeList = ref([])
+const getRoleData = async () => {
+    const { data } = await roleApi.roleTree()
+    JobTypeList.value = getArrValue(data)
 }
 
+//内页资料类型
+const majorDataTypeList = ref([])
+const getMajorData = async () => {
+    majorDataTypeList.value = await getDictionaryData('major_data_type', true)
+}
+
+//显示层级
+const displayHierarchyList = ref([])
+const getDisplayList = async () => {
+    displayHierarchyList.value = await getDictionaryData('display_hierarchy', true)
+}
+
+//文件类型
+const fileTypeList = [
+    { label: '配合比', value: 1 }, { label: '原材', value: 2 }, { label: '汇总', value: 3 },
+    { label: '设备', value: 4 }, { label: '外委(第三方)', value: 5 },
+]
+
+//基础表单
+const formRef = ref(null)
+const formModel = ref({})
+const formRules = {
+    nodeName: { required: true, trigger: 'blur', message: '请输入节点名称' },
+    postType: { required: true, trigger: 'blur', message: '请选择岗位类型' },
+    nodeType: { required: true, trigger: 'blur', message: '请选择节点类型' },
+    isStorageNode: { required: true, trigger: 'blur', message: '请选择存储节点' },
+    isInterfaceNode: { required: true, trigger: 'blur', message: '请选择接口节点' },
+    interfaceType: { required: true, trigger: 'blur', message: '请选择接口类型' },
+    associationType: { required: true, trigger: 'blur', message: '请选择关联类型' },
+    majorDataType: { required: true, trigger: 'blur', message: '请选择业内资料类型' },
+    displayHierarchy: { required: true, trigger: 'blur', message: '请选择显示层级' },
+    projectType: { required: true, trigger: 'blur', message: '请选择工程类型' },
+    storageType: { required: true, trigger: 'blur', message: '请选择储存类型' },
+    expDataType: { required: true, trigger: 'blur', message: '请选择文件类型' },
+}
+
+
 //提交
 const submitLoading = ref(false)
 const dialogSubmit = async () => {
+    const isForm = await formValidate(formRef.value)
+    if (!isForm) return
+    const data = getObjValue(dataInfo.value)
+    const form = formModel.value
+    if (data.postType !== form.postType) {
+        window.$message.warning('岗位类型必须和父级节点岗位类型一致')
+        return
+    }
     submitLoading.value = true
-    //const { isRes } = await mainApi.addColByTabId(tableData.value)
+    form.majorDataType = form.majorDataType.join(',')
+    form.expDataType = form.expDataType.join(',')
+    //发起请求
+    let res = {}
+    if (props.type === '新增') {
+        res = await mainApi.treeAdd(form)
+    } else {
+        res = await mainApi.treeUpdate(form)
+    }
+    const { isRes } = getObjValue(res)
     submitLoading.value = false
-    //if (!isRes) return
+    if (!isRes) return
     window.$message.success('操作成功')
     dialogClose()
     emit('finish')
@@ -77,15 +265,17 @@ const dialogSubmit = async () => {
 const dialogClose = () => {
     isShow.value = false
     submitLoading.value = false
+    formInfo.value = {}
     dataInfo.value = {}
     nodeInfo.value = {}
+    formModel.value = {}
     emit('close')
 }
 </script>
 
 <style lang="scss">
 .el-overlay-dialog .el-dialog.hc-new-dialog.hc-project-tree-tree-form .el-dialog__body{
-    height: 660px;
+    height: 680px;
     padding: 12px 0;
 }
 </style>