Browse Source

项目管理

ZaiZai 1 year ago
parent
commit
4e9408c482

+ 5 - 5
src/components/auth-btn/index.js → src/components/directive/auth-btn.js

@@ -1,13 +1,13 @@
-import {useAppStore} from "~src/store";
-const store = useAppStore();
+import { useAppStore } from '~src/store'
+const store = useAppStore()
 
 //自定义权限指令
 export const vAuthBtn = {
-    mounted(el, {value}) {
+    mounted(el, { value }) {
         if (value && value.length > 0 && value[0]) {
             if (el.parentNode && !store.getButtonsVal(value[0])) {
-                el.parentNode.removeChild(el);
+                el.parentNode.removeChild(el)
             }
         }
-    }
+    },
 }

+ 56 - 0
src/components/directive/del-com.js

@@ -0,0 +1,56 @@
+import { isNullES } from 'js-fast-way'
+import { delMessage } from 'hc-vue3-ui'
+
+//删除指令
+const delComDom = []
+const delComClickFun = []
+const delComClickItem = []
+const delComOnClick = (el) => {
+    let index = getDomindex(el.target)
+    if (index === -1) return
+    if (delComClickFun.length <= 0) return
+    if (isNullES(delComClickFun[index])) return
+    const fun = delComClickFun[index]
+    if (typeof fun !== 'function') return
+    delMessage(() => {
+        if (delComClickItem.length <= 0 || isNullES(delComClickItem[index])) {
+            fun()
+        } else {
+            fun(delComClickItem[index])
+        }
+    })
+}
+
+//获取当前点击的dom索引
+const getDomindex = (el, times = 0) => {
+    let index = delComDom.indexOf(el)
+    if (index !== -1) {
+        return index
+    }
+    if (times > 10) return -1
+    //如果没有找到,就找父级
+    const parentNode = el?.target?.parentNode ?? el?.parentNode
+    if (isNullES(parentNode)) return -1
+    return getDomindex(parentNode, times + 1)
+}
+
+//注册全局删除指令
+export const vDelCom = {
+    mounted(el, { arg, value }) {
+        //判断是否为函数
+        if (typeof arg !== 'function') return
+        delComDom.push(el)
+        el.addEventListener('click', delComOnClick)
+        delComClickFun.push(arg ?? null)
+        delComClickItem.push(value ?? '')
+    },
+    unmounted(el) {
+        const index = delComDom.indexOf(el)
+        if (index > -1) {
+            delComDom.splice(index, 1)
+            delComClickFun.splice(index, 1)
+            delComClickItem.splice(index, 1)
+        }
+        el.removeEventListener('click', delComOnClick)
+    },
+}

+ 9 - 0
src/components/directive/index.js

@@ -0,0 +1,9 @@
+import { vAuthBtn } from './auth-btn'
+import { vDelCom } from './del-com'
+
+//注册自定义指令
+export const setupDirective = (App) => {
+    //自定义指令
+    App.directive('auth-btn', vAuthBtn)
+    App.directive('del-com', vDelCom)
+}

+ 3 - 2
src/components/index.js

@@ -1,4 +1,4 @@
-import { vAuthBtn } from './auth-btn/index'
+import { setupDirective } from './directive/index'
 import HcCharts from './echarts/echarts.vue'
 import HcMenuIcon from './menu-icon/menu-icon.vue'
 import HcIconInput from './icon-input/icon-input.vue'
@@ -8,7 +8,8 @@ import HcRelatedProject from './related-project/related-project.vue'
 //注册全局组件
 export const setupComponents = (App) => {
     //自定义指令
-    App.directive('auth-btn', vAuthBtn)
+    setupDirective(App)
+
     //自定义组件
     App.component('HcCharts', HcCharts)
     App.component('HcMenuIcon', HcMenuIcon)

+ 19 - 23
src/views/project/modules/list/info-dialog.vue

@@ -12,7 +12,7 @@
                 <div class="right">
                     <el-button hc-btn type="warning" @click="toCheck('editProject')">编辑项目</el-button>
                     <el-button hc-btn type="primary" @click="toCheck('addContract')">创建合同段</el-button>
-                    <el-button hc-btn type="danger" @click="delProject">删除项目</el-button>
+                    <el-button v-del-com:[delProject] hc-btn type="danger">删除项目</el-button>
                 </div>
             </el-header>
             <el-container>
@@ -41,7 +41,7 @@
                                     <div class="action">
                                         <el-link type="warning" @click="toCheck('editContract', item)">编辑合同段信息</el-link>
                                         <el-link v-if="item.contractType === 1" type="success" @click="toCheck('wbsContract', item)">分配WBS</el-link>
-                                        <el-link type="danger" @click="delContract(item)">删除</el-link>
+                                        <el-link v-del-com:[delContract].data="item" type="danger">删除</el-link>
                                     </div>
                                 </div>
                             </div>
@@ -119,31 +119,27 @@ const dialogClose = () => {
 }
 
 //删除项目
-const delProject = () => {
+const delProject = async () => {
     if (isNullES(projectId.value)) return
-    delMessage(async () => {
-        const { error, code, msg } = await mainApi.del(projectId.value)
-        if (!error && code === 200) {
-            window.$message.success('删除成功')
-            dialogClose()
-            emit('change')
-        } else {
-            window.$message.error(msg ?? '删除失败')
-        }
-    })
+    const { error, code, msg } = await mainApi.del(projectId.value)
+    if (!error && code === 200) {
+        window.$message.success('删除成功')
+        dialogClose()
+        emit('change')
+    } else {
+        window.$message.error(msg ?? '删除失败')
+    }
 }
 
 //删除合同段
-const delContract = (item) => {
-    delMessage(async () => {
-        const { error, code, msg } = await contractApi.del(item.id)
-        if (!error && code === 200) {
-            window.$message.success('删除成功')
-            getContractList(projectId.value).then()
-        } else {
-            window.$message.error(msg ?? '删除失败')
-        }
-    })
+const delContract = async (item) => {
+    const { error, code, msg } = await contractApi.del(item.id)
+    if (!error && code === 200) {
+        window.$message.success('删除成功')
+        getContractList(projectId.value).then()
+    } else {
+        window.$message.error(msg ?? '删除失败')
+    }
 }
 
 //功能事件回调

+ 5 - 9
src/views/project/modules/list/wbs-tree.vue

@@ -69,7 +69,7 @@
                                         <el-link type="primary">预览</el-link>
                                         <el-link v-if="row.status === 1" type="warning">隐藏表单</el-link>
                                         <el-link v-if="row.status === 0" type="success">取消隐藏</el-link>
-                                        <el-link type="danger" @click="delInfoTableRow(row)">删除</el-link>
+                                        <el-link v-del-com:[delInfoTableRow].row="row" type="danger">删除</el-link>
                                     </template>
                                 </hc-table>
                             </hc-new-card>
@@ -87,7 +87,7 @@
                                     <el-link type="warning" :disabled="row.excelId === -1 || isNullES(row.excelId)">调整表单</el-link>
                                     <el-link type="primary">编辑元素公式</el-link>
                                     <el-link type="warning">表单同步</el-link>
-                                    <el-link type="danger" @click="delInfoTableRow1(row)">删除表单</el-link>
+                                    <el-link v-del-com:[delInfoTableRow1].row="row" type="danger">删除表单</el-link>
                                 </template>
                             </hc-table>
                         </hc-new-card>
@@ -101,7 +101,7 @@
 <script setup>
 import { ref, watch } from 'vue'
 import { useAppStore } from '~src/store'
-import { delMessage, getStore, setStore } from 'hc-vue3-ui'
+import { getStore, setStore } from 'hc-vue3-ui'
 import { getArrValue, getObjValue, isNullES } from 'js-fast-way'
 import { getDictionaryData } from '~uti/tools'
 import mainApi from '~api/project/project'
@@ -359,9 +359,7 @@ const getInfoTableData = async () => {
 
 //当前项目信息表删除
 const delInfoTableRow = (item) => {
-    delMessage(() => {
-        console.log('删除', item)
-    })
+    console.log('删除', item)
 }
 
 //表单设置
@@ -383,9 +381,7 @@ const setIsFormSetValue = () => {
 }
 //元素表删除
 const delInfoTableRow1 = (item) => {
-    delMessage(() => {
-        console.log('删除', item)
-    })
+    console.log('删除', item)
 }
 
 //数据同步按钮菜单