iZaiZaiA 2 years ago
parent
commit
9f90999586

+ 24 - 24
src/api/modules/data-fill/query.js

@@ -2,100 +2,100 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取当前合同段的划分树
-    async queryWbsTreeData(form) {
+    async queryWbsTreeData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/queryContractWbsTreeByContractIdAndType',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //根据合同段ID获取所有填报人
-    async getFileUser(form) {
+    async getFileUser(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/getFileUserByContractId',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //获取当前合同段下所有的上报批次
-    async getReportNumber(form) {
+    async getReportNumber(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/getReportNumberByContractId',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //获取流程状态分类和文件类型分类
-    async getDictBizClassify(form) {
+    async getDictBizClassify(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/getDictBizClassifyByCode',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //分页数据
-    async getPageData(form) {
+    async getPageData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/page',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //批量废除
-    async batchAbolish(form) {
+    async batchAbolish(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/batchAbolish',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //批量下载
-    async batchDownloadFileToZip(form) {
+    async batchDownloadFileToZip(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/batchDownloadFileToZip',
             method: 'post',
             params: form,
             responseType: 'blob'
-        })
+        }, msg)
     },
     //批量打印
-    async batchPrint(form) {
+    async batchPrint(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/batchPrint',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //本地验签
-    async localVerify(form) {
+    async localVerify(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/localVerify',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //在线验签
-    async onlineVerify(form) {
+    async onlineVerify(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/onlineVerify',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //输入框查询合同段树
-    async searchContractTree(form) {
+    async searchContractTree(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/searchContractTree',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //获取流程状态
-    async getFirstTaskStatus(form) {
+    async getFirstTaskStatus(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-task-type-status?typeOrStatus=first_task_status',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
 }

+ 48 - 48
src/api/modules/data-fill/wbs.js

@@ -2,196 +2,196 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //新增或删除 合同段划分树首件关联
-    async wbsTreeFirstSave(form) {
+    async wbsTreeFirstSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/treeContractFirst/saveOrDelete',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //修改树节点
-    async wbsTreeUpdateNode(form) {
+    async wbsTreeUpdateNode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/updateContractNodeParameter',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //导图结构树节点查询
-    async queryMappingStructureTree(form) {
+    async queryMappingStructureTree(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/queryMappingStructureTree',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //保存或修改节点上传的图纸记录
-    async saveContractTreeDrawings(form) {
+    async saveContractTreeDrawings(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractTreeDrawings/saveContractTreeDrawings',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //删除节点
-    async removeContractTreeNode(form) {
+    async removeContractTreeNode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/removeContractTreeNode',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //查询当前节点下所有元素表信息
-    async searchNodeAllTable(form) {
+    async searchNodeAllTable(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/wbsTreeContract/searchNodeAllTable',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //清表生成html
-    async getExcelHtml(form) {
+    async getExcelHtml(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/get-excel-html_buss',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //填报页面数据保存
-    async saveExcelBussData(form) {
+    async saveExcelBussData(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/save_buss_data',
             method: 'post',
             data: form
-        });
+        },msg);
     },
     //懒加载项目级工程划分树
-    async queryWbsTreePrivateByProjectIdAndId(form) {
+    async queryWbsTreePrivateByProjectIdAndId(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/queryWbsTreePrivateByProjectIdAndId',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //新增节点及其子节点
-    async saveContractTreeNode(form) {
+    async saveContractTreeNode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/saveContractTreeNode',
             method: 'post',
             data: form
-        });
+        },msg);
     },
     //复制节点
-    async copyContractTreeNode(form) {
+    async copyContractTreeNode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/copyContractTreeNode',
             method: 'post',
             data: form
-        });
+        },msg);
     },
     //自定义排序
-    async diySortTreeNode(form) {
+    async diySortTreeNode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/diySort',
             method: 'post',
             data: form
-        });
+        },msg);
     },
     //获取表单数据
-    async getBussDataInfo(form) {
+    async getBussDataInfo(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/get-buss-dataInfo',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //查询节点状态
-    async queryNodeStatus(form) {
+    async queryNodeStatus(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/queryNodeStatus',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //单个废除
-    async abolishOne(form) {
+    async abolishOne(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/abolishOne',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //隐藏表单
-    async showBussTab(form) {
+    async showBussTab(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/show-buss-tab',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //单表pdf预览
-    async getBussPdfInfo(form) {
+    async getBussPdfInfo(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/get-buss-pdfInfo',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //表单复制
-    async copeBussTab(form) {
+    async copeBussTab(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/cope-buss-tab',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //多表预览
-    async getBussPdfs(form) {
+    async getBussPdfs(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/get-buss-pdfs',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //获取附件列表
-    async getBussFileList(form) {
+    async getBussFileList(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/tablefile/get-buss-fileList',
             method: 'get',
             params: form
-        });
+        },msg);
     },
     //逻辑删除
-    async removeBussFile(form) {
+    async removeBussFile(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/tablefile/remove',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //用户端删除复制信息表
-    async removeBussTabInfo(form) {
+    async removeBussTabInfo(form, msg = true) {
         return httpApi({
             url: '/api/blade-manager/exceltab/remove-buss-tabInfo',
             method: 'post',
             params: form
-        });
+        },msg);
     },
     //复制节点填报数据
-    async copyContractNodeSubmitBusinessData(form) {
+    async copyContractNodeSubmitBusinessData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/copyContractNodeSubmitBusinessData',
             method: 'post',
             data: form
-        });
+        },msg);
     },
     //输入框查询合同段树
-    async searchContractTree(form) {
+    async searchContractTree(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/searchContractTree',
             method: 'get',
             params: form
-        })
+        },msg)
     },
 }
 

+ 23 - 23
src/api/modules/gauge/bezier.js

@@ -2,92 +2,92 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取平曲线数据
-    async queryListData(form) {
+    async queryListData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取片段列表
-    async queryPartList(form) {
+    async queryPartList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/part/list',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //新增片段
-    async savePartAdd(form) {
+    async savePartAdd(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/part/add',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //编辑片段
-    async savePartUpdate(form) {
+    async savePartUpdate(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/part/update',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //删除片段
-    async delPartData(form) {
+    async delPartData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/part/del',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //获取新增线元信息的初始数据
-    async getNextMileagexy(form) {
+    async getNextMileagexy(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/getNextMileagexy',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //里程转换坐标
-    async queryPsChange(form) {
+    async queryPsChange(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/pschange',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //新增保存线元
-    async saveAddMileage(form) {
+    async saveAddMileage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/add',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //编辑保存线元
-    async saveUpdateMileage(form) {
+    async saveUpdateMileage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/update',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //删除线元
-    async saveDelMileage(form) {
+    async saveDelMileage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/del',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //生成坐标
-    async getZzList(form) {
+    async getZzList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/mileage/getZzList',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //导出数据
     async getExportExcel(form) {
@@ -96,6 +96,6 @@ export default {
             method: 'get',
             params: form,
             responseType: 'blob'
-        })
+        }, msg)
     },
 }

+ 10 - 10
src/api/modules/gauge/station.js

@@ -2,44 +2,44 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取数据
-    async queryListData(form) {
+    async queryListData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/dap/list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //新增
-    async addSave(form) {
+    async addSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/dap/add',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //编辑
-    async updateSave(form) {
+    async updateSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/dap/update',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //删除
-    async delData(form) {
+    async delData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/dap/del',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //导出数据
-    async getExportExcel(form) {
+    async getExportExcel(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/dap/exportExcel',
             method: 'get',
             params: form,
             responseType: 'blob'
-        })
+        }, msg)
     },
 }

+ 10 - 10
src/api/modules/ledger/construction.js

@@ -1,31 +1,31 @@
 import {httpApi} from "../../request/httpApi";
 
-export const queryWbsTree = (form) => httpApi({
+export const queryWbsTree = (form, msg = true) => httpApi({
     url: '/api/blade-business/constructionLedger/queryContractWbsTreeByContractIdAndType',
     method: 'get',
     params: form
-});
+}, msg);
 
-export const queryWbsTable = (form) => httpApi({
+export const queryWbsTable = (form, msg = true) => httpApi({
     url: '/api/blade-business/constructionLedger/list',
     method: 'post',
     data: form
-});
+}, msg);
 
-export const updateWbsTable = (form) => httpApi({
+export const updateWbsTable = (form, msg = true) => httpApi({
     url: '/api/blade-business/constructionLedger/update',
     method: 'post',
     data: form
-});
+}, msg);
 
-export const queryNeiYeTree = (form) => httpApi({
+export const queryNeiYeTree = (form, msg = true) => httpApi({
     url: '/api/blade-business/neiYeController/queryContractWbsTreeByContractIdAndType',
     method: 'get',
     params: form
-});
+}, msg);
 
-export const queryNeiYeTable = (form) => httpApi({
+export const queryNeiYeTable = (form, msg = true) => httpApi({
     url: '/api/blade-business/neiYeController/queryCurrentNodeNeiYeLedger',
     method: 'post',
     data: form
-});
+}, msg);

+ 10 - 10
src/api/modules/ledger/query.js

@@ -2,43 +2,43 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取当前合同段下的日志类型
-    async queryLogList(form) {
+    async queryLogList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractLog/queryCurrentContractLogList',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //获取当前日志类型的填报人
-    async queryFillUser(form) {
+    async queryFillUser(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractLog/queryFillUser',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //施工日志分页
-    async constructionLogPage(form) {
+    async constructionLogPage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractLog/constructionLogPage',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //批量废除
-    async batchAbolish(form) {
+    async batchAbolish(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractLog/batchAbolish',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //获取合同段当前日志节点下的填报日期记录
-    async getSubmitLogDateList(form) {
+    async getSubmitLogDateList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/contractLog/getSubmitLogDateList',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
 }

+ 4 - 4
src/api/modules/ledger/weather.js

@@ -1,13 +1,13 @@
 import {httpApi} from "../../request/httpApi";
 
-export const queryWeatherPage = (form) => httpApi({
+export const queryWeatherPage = (form, msg = true) => httpApi({
     url: '/api/blade-business/weather/queryWeatherPage',
     method: 'get',
     params: form
-});
+}, msg);
 
-export const updateWeatherById = (form) => httpApi({
+export const updateWeatherById = (form, msg = true) => httpApi({
     url: '/api/blade-business/weather/updateWeatherById',
     method: 'post',
     data: form
-});
+}, msg);

+ 21 - 21
src/api/modules/other-file/imageData.js

@@ -2,52 +2,52 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取类型列表(类型主页)
-    async getClassIfyList(form) {
+    async getClassIfyList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/getClassIfyList',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取当前项目类型的显隐配置列表
-    async getClassifyShowConfigList(form) {
+    async getClassifyShowConfigList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/getClassifyShowConfigList',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //保存客户端分类显隐记录
-    async saveClassifyShowConfig(form) {
+    async saveClassifyShowConfig(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/saveClassifyShowConfig',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //获取时间结构
-    async getYearDateTree(form) {
+    async getYearDateTree(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/getYearDateTree',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取当前合同段的工程划分
-    async getWbsTreeList(form) {
+    async getWbsTreeList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/queryContractWbsTreeByContractIdAndType',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取分页数据
-    async getPageList(form) {
+    async getPageList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/page',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //新增影音资料信息
     async addImageclassifyFile(form) {
@@ -55,31 +55,31 @@ export default {
             url: '/api/blade-business/imageClassificationFile/save',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //修改影音资料信息
-    async updateImageclassifyFile(form) {
+    async updateImageclassifyFile(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/update',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //详情
-    async queryById(form) {
+    async queryById(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/queryById',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //影音资料信息逻辑删除
-    async removeImageclassifyFile(form) {
+    async removeImageclassifyFile(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/remove',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //影音资料览(图片)
     async imageClassificationFile(form, msg= true) {
@@ -90,12 +90,12 @@ export default {
         }, msg);
     },
     //下载
-    async batchDownloadFileToZip(form) {
+    async batchDownloadFileToZip(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/imageClassificationFile/batchDownloadFileToZip',
             method: 'post',
             params: form,
             responseType: 'blob'
-        });
+        }, msg);
     },
 }

+ 16 - 16
src/api/modules/other-file/projectScanning.js

@@ -2,68 +2,68 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取归档划分树
-    async getClassIfyList(form) {
+    async getClassIfyList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/tree',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //分页
-    async getarchiveFilePage(form) {
+    async getarchiveFilePage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/page',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //批量新增
-    async batchUploadSave(form) {
+    async batchUploadSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/batchSave',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //逻辑删除
-    async removeArchiveFile(form) {
+    async removeArchiveFile(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/remove',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //批量编辑
-    async batchEditSave(form) {
+    async batchEditSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/batchEdit',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //批量废除
-    async batchAbolishSave(form) {
+    async batchAbolishSave(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/batchAbolish',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //批量下载
-    async batchDownloadFileToZip(form) {
+    async batchDownloadFileToZip(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/batchDownloadFileToZip',
             method: 'post',
             params: form,
             responseType: 'blob'
-        })
+        }, msg)
     },
     //批量认证
-    async batchCertification(form) {
+    async batchCertification(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/archiveFile/batchCertification',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
 }

+ 10 - 10
src/api/modules/other.js

@@ -1,34 +1,34 @@
 import {httpApi} from "../request/httpApi";
 
-export const ApprovalApi = (url,form) => httpApi({
+export const ApprovalApi = (url,form, msg = true) => httpApi({
     url: '/api/blade-business/' + url,
     method: 'post',
     data: form
-});
+}, msg);
 
-export const batchApproval = (form) => httpApi({
+export const batchApproval = (form, msg = true) => httpApi({
     url: '/api/blade-business/archiveFile/batchApproval',
     method: 'post',
     data: form
-});
+}, msg);
 
 //短信验证
-export const sendNotice = (form) => httpApi({
+export const sendNotice = (form, msg = true) => httpApi({
     url: '/api/blade-business/task/send-notice',
     method: 'post',
     params: form
-});
+}, msg);
 
 //用户配置保存
-export const userConfigSave = (form) => httpApi({
+export const userConfigSave = (form, msg = true) => httpApi({
     url: '/api/blade-business/defaultConfig/saveOrUpdate',
     method: 'post',
     data: form
-});
+}, msg);
 
 //用户配置详情
-export const userConfigInfo = (form) => httpApi({
+export const userConfigInfo = (form, msg = true) => httpApi({
     url: '/api/blade-business/defaultConfig/detail',
     method: 'get',
     params: form
-});
+}, msg);

+ 6 - 6
src/api/modules/other/first-item.js

@@ -2,27 +2,27 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取合同段划分树中被标记为首件的节点
-    async queryWbsTreeData(form) {
+    async queryWbsTreeData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/treeContractFirst/queryContractWbsTreeFirstByContractIdAndType',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //分页数据
-    async getPageData(form) {
+    async getPageData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/firstInformation/page',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //分页数据
-    async getQueryPageData(form) {
+    async getQueryPageData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/informationWriteQuery/page',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
 }

+ 20 - 20
src/api/modules/other/orderServe.js

@@ -2,82 +2,82 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取工单服务列表
-    async queryUserOpinionPage(form) {
+    async queryUserOpinionPage(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/queryUserOpinionPage',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取当前用户提交的工单服务
-    async queryCurrentUserOpinionList(form) {
+    async queryCurrentUserOpinionList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/queryCurrentUserOpinionList',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //新增工单服务信息
-    async saveUserOpinion(form) {
+    async saveUserOpinion(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/saveUserOpinion',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //获取当前工单的最新流程
-    async queryUserFlowOpinion(form) {
+    async queryUserFlowOpinion(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinionFlow/queryCurrentUserOpinionFlowByUserOpinionId',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //统合处理意见接口
-    async disposeUserFeedback(form) {
+    async disposeUserFeedback(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinionFlow/disposeUserOpinionFeedback',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //获取字典信息
-    async queryDictBizList() {
+    async queryDictBizList(msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/queryDictBizList',
             method: 'get'
-        })
+        },msg)
     },
     //获取当前工单下的所有评论
-    async queryCommentsList(form) {
+    async queryCommentsList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinionComments/queryUserOpinionCommentsByUserOpinionId',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //新增评论
-    async saveUserComments(form) {
+    async saveUserComments(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinionComments/saveUserOpinionComments',
             method: 'post',
             data: form
-        })
+        }, msg)
     },
     //点赞
-    async addGoodNumber(form) {
+    async addGoodNumber(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/addGoodNumber',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
     //取消点赞
-    async cancelGood(form) {
+    async cancelGood(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userOpinion/cancelGood',
             method: 'post',
             params: form
-        })
+        }, msg)
     },
 }

+ 10 - 10
src/api/modules/schedule/data.js

@@ -2,43 +2,43 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //查询内业资料进度
-    async queryMaterialProgress(form) {
+    async queryMaterialProgress(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/materialProgress/queryMaterialProgress',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //报表资料审批统计
-    async queryMaterialProgressStatus(form) {
+    async queryMaterialProgressStatus(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/materialProgress/queryMaterialProgressStatus',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //声像媒体资料统计
-    async queryImageClassification(form) {
+    async queryImageClassification(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/materialProgress/queryImageClassification',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //资料进度
-    async queryContractTreeMaterialProgress(form) {
+    async queryContractTreeMaterialProgress(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/materialProgress/queryContractTreeMaterialProgress',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     // 内外业进度
-    async queryNeiWaiYeProgress(form) {
+    async queryNeiWaiYeProgress(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/neiWaiYeProgressController/neiWaiYeProgress',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
 }

+ 20 - 20
src/api/modules/tasks/data.js

@@ -2,83 +2,83 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //获取任务类型或任务状态
-    async queryTaskTypeStatus(form) {
+    async queryTaskTypeStatus(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-task-type-status',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取当前合同段的上报批次
-    async queryBatchList(form) {
+    async queryBatchList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-batch-list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取当前用户待办流程
-    async queryUserToDoTaskList(form) {
+    async queryUserToDoTaskList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/user-to-do-task-list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //审批页详情
-    async queryApprovalParameter(form) {
+    async queryApprovalParameter(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-approval-parameter',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //完成任务
-    async saveCompleteApprovalTask(form) {
+    async saveCompleteApprovalTask(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/complete-approval-task',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //已办任务
-    async queryUserDoneTaskList(form) {
+    async queryUserDoneTaskList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-user-done-task-list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //批量审批
-    async batchCompleteApprovalTask(form) {
+    async batchCompleteApprovalTask(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/batch-complete-approval-task',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //获取发起
-    async queryUserStartFlow(form) {
+    async queryUserStartFlow(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/query-user-start-flow',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //批量页详情
-    async queryTaskInfo(form) {
+    async queryTaskInfo(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/batch-approval-parameter',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //校验电签短信验证码
-    async checkSmsCode(form) {
+    async checkSmsCode(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/task/check-sms-code',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
 }

+ 10 - 10
src/api/modules/tasks/flow.js

@@ -2,43 +2,43 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //分页数据
-    async getPageData(form) {
+    async getPageData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/fixedFlow/page',
             method: 'get',
             params: form
-        })
+        }, msg)
     },
     //获取系统所有角色划分
-    async queryAllRoleList(form) {
+    async queryAllRoleList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/fixedFlow/queryAllRoleList',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //详情
-    async queryFixedFlowDetail(form) {
+    async queryFixedFlowDetail(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/fixedFlow/detail',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //新增
-    async addFixedFlowData(form) {
+    async addFixedFlowData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/fixedFlow/save',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //修改
-    async updateFixedFlowData(form) {
+    async updateFixedFlowData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/fixedFlow/update',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
 }

+ 22 - 22
src/api/modules/userInfo/index.js

@@ -2,91 +2,91 @@ import {httpApi} from "../../request/httpApi";
 
 export default {
     //修改密码
-    async updatePassword(form) {
+    async updatePassword(form, msg = true) {
         return httpApi({
             url: '/api/blade-user/update-password',
             method: 'post',
             params: form
-        });
+        }, msg);
     },
     //设置默认项目
-    async setDefaultProject(form) {
+    async setDefaultProject(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/defaultProject/save',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //获取默认项目
-    async getDefaultProject(form) {
+    async getDefaultProject(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/defaultProject/queryUserDefault',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //更新用户信息
-    async updateUserInfo(form) {
+    async updateUserInfo(form, msg = true) {
         return httpApi({
             url: '/api/blade-user/update-info',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //获取操作日志
-    async getOperationLog(form) {
+    async getOperationLog(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/operationLog/list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取业务模块
-    async queryBusinessModule(form) {
+    async queryBusinessModule(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/operationLog/queryBusinessModule',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取操作页面
-    async queryOperationView(form) {
+    async queryOperationView(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/operationLog/queryOperationView',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取操作类型
-    async queryOperationTypeList(form) {
+    async queryOperationTypeList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/operationLog/queryOperationTypeList',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //获取用户信息
-    async queryCurrentUserData(form) {
+    async queryCurrentUserData(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/userViewProjectContract/queryCurrentUserData',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
     //回收站分页
-    async queryRecycleBinList(form) {
+    async queryRecycleBinList(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/recycleBin/list',
             method: 'get',
             params: form
-        });
+        }, msg);
     },
     //回收站恢复
-    async recycleBinRegain(form) {
+    async recycleBinRegain(form, msg = true) {
         return httpApi({
             url: '/api/blade-business/recycleBin/regain',
             method: 'post',
             data: form
-        });
+        }, msg);
     },
 }

+ 1 - 1
src/components/hc-sb-table/index.vue

@@ -2,7 +2,7 @@
     <div class="hc-sb-table">
         <template v-for="item in datas">
             <div class="item" :class="curKey === item.key ? 'active' : ''" @click="tabClick(item)">
-                <HcIcon :name="item.icon" class="icon"/>
+                <HcIcon :name="item.icon" class="icon" v-if="item.icon"/>
                 <span class="name">{{item.label}}</span>
             </div>
         </template>

+ 33 - 11
src/plugins/HTableForm.js

@@ -1,20 +1,34 @@
 import {createApp} from "vue/dist/vue.esm-bundler.js";
 import {getTokenHeader} from '~src/api/request/header';
 import {ElInput,ElDatePicker,ElUpload,ElInputNumber,ElTimePicker,ElSelect,ElOption,ElRadioGroup,ElRadio,ElCheckbox,ElCheckboxGroup} from 'element-plus'
-
 const components = {ElInput, ElDatePicker, ElUpload, ElInputNumber, ElTimePicker, ElSelect, ElOption, ElRadioGroup, ElRadio, ElCheckbox, ElCheckboxGroup}
 
 //表单渲染
-export const HTableForm = ({template, formData, appId, onRight, onDatePicker, uploadFinish}) => {
+export const HTableForm = ({template, tableForm, appId, onRight}) => {
     const app = createApp({
         data() {
             return {
                 getTokenHeader: getTokenHeader(),
-                formData,
+                formData: tableForm,
+                formUploadLoading: false,
             }
         },
         template,
         components,
+        watch: {
+            tableForm: {
+                handler(obj) {
+                    this.formData = obj
+                },
+                deep: true
+            },
+            formData: {
+                handler(obj) {
+                    tableForm = obj
+                },
+                deep: true
+            },
+        },
         methods: {
             //鼠标右键事件
             RightClick(a,b,c,d,e,f,event) {
@@ -25,20 +39,28 @@ export const HTableForm = ({template, formData, appId, onRight, onDatePicker, up
                 }
             },
             getInformation() {}, //焦点事件
-            //日期框选择事件
             datePickerChange(val,key) {
                 this.formData[key] = val
-                if (onDatePicker) {
-                    onDatePicker(val,key)
-                }
             },
-            //上传成功事件
+            //上传进度
+            uploadprogress() {
+                this.formUploadLoading = true
+            },
+            //上传完成
             formUploadSuccess(res,key) {
-                if (uploadFinish) {
-                    uploadFinish(res,key)
+                this.formUploadLoading = false
+                if (res.code === 200) {
+                    this.formData[key] = res.data?.link || ''
                 }
             },
-            formUploadExceed() {}
+            //上传失败
+            formUploadError() {
+                this.formUploadLoading = false
+            },
+            //格式错误
+            formUploadExceed() {
+                this.formUploadLoading = false
+            }
         }
     })
     app.mount(appId)

+ 56 - 0
src/styles/ledger/write.scss

@@ -0,0 +1,56 @@
+.hc-layout-box {
+    display: flex;
+    position: relative;
+    height: 100%;
+    .hc-layout-left-box {
+        width: 382px;
+        position: relative;
+        background: #f1f5f8;
+        border-radius: 10px;
+        margin-right: 24px;
+        box-shadow: -2px 0 10px 0 rgba(32,37,50,0.03), 0 10px 21px 20px rgba(32,37,50,0.03);
+        .horizontal-drag-line {
+            position: absolute;
+            right: 0;
+            top: 0;
+            width: 2px;
+            height: 100%;
+            user-select: none;
+            cursor: col-resize;
+            background-color: #00000000;
+        }
+        .hc-project-box {
+            position: relative;
+            padding: 15px 24px;
+            display: flex;
+            align-items: flex-start;
+            border-bottom: 1px solid #E9E9E9;
+            .hc-project-icon-box {
+                font-size: 30px;
+                color: var(--el-color-primary);
+            }
+            .project-name-box {
+                flex: auto;
+                position: relative;
+                overflow: hidden;
+                .project-alias {
+                    color: var(--el-color-primary);
+                }
+                .project-name {
+                    margin-top: 6px;
+                    color: #838791;
+                }
+            }
+        }
+        .hc-tree-box {
+            position: relative;
+            padding: 15px 20px;
+            height: 100%;
+        }
+    }
+    .hc-layout-content-box {
+        flex: 1;
+        height: 100%;
+        position: relative;
+    }
+}

+ 4 - 2
src/views/data-fill/components/HcTreeData.vue

@@ -33,6 +33,7 @@
 
 <script setup>
 import {ref,watch} from "vue";
+import {getArrValue,getObjValue} from "vue-utils-plus"
 //参数
 const props = defineProps({
     menus: {
@@ -116,8 +117,9 @@ const ElTreeClick = async (data,node) => {
 
 //处理自动展开的节点KEY
 const getNodeExpandKeys = async (node, newKeys) => {
-    const parent = node?.parent ?? []
-    const primaryKeyId = node?.data?.primaryKeyId ?? ''
+    const parent = getArrValue(node?.parent)
+    const nodeData = getObjValue(node?.data);
+    const primaryKeyId = nodeData?.primaryKeyId ?? ''
     if (primaryKeyId) {
         newKeys.push(primaryKeyId)
         await getNodeExpandKeys(parent, newKeys)

+ 4 - 28
src/views/data-fill/components/ListItem.vue

@@ -249,20 +249,11 @@ const getExcelHtml = async (item,index) => {
             //渲染表单
             HTableForm({
                 template: resData,
-                formData: formData.value[index],
+                tableForm: formData.value[index],
                 appId: `#table-form-${pkeyId}`,
                 onRight: (event, KeyName) => {
                     onRightClick(event, KeyName, index)
-                },
-                onDatePicker(val,key) {
-                    formData.value[index][key] = val
-                },
-                uploadFinish: (res, KeyName) => {
-                    if (res.code === 200) {
-                        const link = res.data?.link || '';
-                        onUploadFinish(link, KeyName, index)
-                    }
-                },
+                }
             })
             item.isTableFormRender = true
         } else {
@@ -316,9 +307,9 @@ const tableFormSaveClick = async (item,index) => {
 //保存表单数据
 const saveExcelBussData = async (item, index, showTip = true) => {
     const {error, code, data} = await wbsApi.saveExcelBussData({
+        ...formData.value[index],
         pkeyId: item.pkeyId + '',
         classify: classify.value,
-        ...formData.value[index]
     }, false)
     //处理数据
     if (!error && code === 200) {
@@ -401,17 +392,7 @@ const hideClick = async (item) => {
 
 //预览
 const previewClick = async (item,index) => {
-    if (isStatus.value !== '3') {
-        const res = await saveExcelBussData(item, index, false)
-        if (res) {
-            await getBussPdfInfo(item)
-            renewData()
-        } else {
-            window?.$message?.warning('操作失败')
-        }
-    } else {
-        await getBussPdfInfo(item)
-    }
+    await getBussPdfInfo(item)
 }
 
 //上传变量
@@ -459,11 +440,6 @@ const tableFormMenu = ref([
     {label: '关联试验数据', key: "CTD"},
 ])
 
-//上传完成
-const onUploadFinish = (link, KeyName, index) => {
-    formData.value[index][KeyName] = link
-}
-
 //鼠标右键事件
 const contextMenuRef = ref(null)
 const onRightClick = (event, KeyName, index) => {

+ 6 - 4
src/views/data-fill/components/WbsTree.vue

@@ -34,7 +34,7 @@
 <script setup>
 import {ref,nextTick,watch} from "vue";
 import dataFillQuery from '~api/data-fill/query';
-import {isItem,getArrValue} from "vue-utils-plus"
+import {isItem,getArrValue,getObjValue} from "vue-utils-plus"
 
 //参数
 const props = defineProps({
@@ -115,16 +115,18 @@ watch(() => [
 //树形结构异步加载数据
 const defaultExpandedCids = ref([])
 const ElTreeLoadNode = async (node, resolve) => {
-    let contractIdRelation = '', parentId = '';
+    let contractIdRelation = '', parentId = '', primaryKeyId = '';
     if (node.level !== 0) {
-        const nodeData = node?.data ?? {};
-        contractIdRelation = nodeData?.contractIdRelation ?? ''
+        const nodeData = getObjValue(node?.data);
+        contractIdRelation = nodeData?.contractIdRelation || ''
         parentId = contractIdRelation ? nodeData?.primaryKeyId : nodeData?.id
+        primaryKeyId = nodeData?.id || ''
     }
     //获取数据
     const {error, code, data} = await dataFillQuery.queryWbsTreeData({
         contractId: contractId.value || '',
         contractIdRelation,
+        primaryKeyId,
         parentId
     })
     //处理数据

+ 7 - 3
src/views/data-fill/components/nodeTree/index.vue

@@ -100,6 +100,7 @@ const getTreeOneLevel = async () => {
     const data = await queryMappingStructureTree({
         contractId: contractId.value,
         contractIdRelation: '',
+        primaryKeyId: '',
         parentId: '0',
     })
     //处理数据
@@ -110,7 +111,8 @@ const getTreeOneLevel = async () => {
         const children = await queryMappingStructureTree({
             contractId: contractId.value,
             contractIdRelation: res?.contractIdRelation,
-            parentId: res?.contractIdRelation ? res?.primaryKeyId: res?.id,
+            primaryKeyId: res?.primaryKeyId,
+            parentId: res?.id,
         })
         if (children.length > 0) {
             await setTreeExpandKey(children, res)
@@ -130,7 +132,8 @@ const setTreeExpandKey = async (arr,res) => {
             const children = await queryMappingStructureTree({
                 contractId: contractId.value,
                 contractIdRelation: item?.contractIdRelation,
-                parentId: item?.contractIdRelation ? item?.primaryKeyId: item?.id,
+                primaryKeyId: item?.primaryKeyId,
+                parentId: item?.id,
             })
             if (children.length > 0) {
                 await setTreeExpandKey(children, item)
@@ -264,7 +267,8 @@ const nodeLabelClick = async ({node,data}) => {
             const children = await queryMappingStructureTree({
                 contractId: contractId.value,
                 contractIdRelation: data?.contractIdRelation,
-                parentId: data?.contractIdRelation ? data?.primaryKeyId: data?.id,
+                primaryKeyId: data?.primaryKeyId,
+                parentId: data?.id,
             })
             node.childNodes = children
             await nextTick(async () => {

+ 284 - 0
src/views/ledger/components/WbsTree.vue

@@ -0,0 +1,284 @@
+<template>
+    <ElTree class="hc-tree-node" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
+            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu">
+        <template #default="{ node, data }">
+            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
+                <!--树组件,节点名称-->
+                <div class="label" :class="node.level === 1?'level-name':''">
+                    <span :class="data?.colorStatus === 2?'text-blue':data?.colorStatus === 3?'text-orange':data?.colorStatus === 4?'text-green':''" v-if="isColor">{{ node.label }}</span>
+                    <span v-else>{{ node.label }}</span>
+                </div>
+                <!--树组件,操作菜单-->
+                <div class="menu-icon" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1 && menusData.length > 0">
+                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
+                        <HcIcon name="menu" ui="text-2xl"/>
+                    </div>
+                </div>
+                <!--树组件,操作菜单 END-->
+            </div>
+        </template>
+    </ElTree>
+    <!--右键菜单-->
+    <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0">
+        <template #mark="{item}">
+            <HcIcon :name="item.icon" :fill="treeRefData?.isFirst" class="menu-item-icon"/>
+            <span class="menu-item-name">{{treeRefData?.isFirst ? '取消标记为首件' : '标记为首件'}}</span>
+        </template>
+        <template #sort="{item}">
+            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
+            <span class="menu-item-name">{{item.label}}</span>
+        </template>
+    </HcContextMenu>
+</template>
+
+<script setup>
+import {ref,nextTick,watch} from "vue";
+import dataFillQuery from '~api/data-fill/query';
+import {isItem,getArrValue,getObjValue} from "vue-utils-plus"
+
+//参数
+const props = defineProps({
+    menus: {
+        type: Array,
+        default: () => ([])
+    },
+    projectId: {
+        type: [String,Number],
+        default: ''
+    },
+    contractId: {
+        type: [String,Number],
+        default: ''
+    },
+    autoExpandKeys: {
+        type: Array,
+        default: () => ([])
+    },
+    isMark: {
+        type: Boolean,
+        default: false
+    },
+    idPrefix: {
+        type: String,
+        default: 'wbs-tree-'
+    },
+    isAutoKeys: {
+        type: Boolean,
+        default: true
+    },
+    isAutoClick: {
+        type: Boolean,
+        default: true
+    },
+    isColor: {
+        type: Boolean,
+        default: false
+    },
+})
+
+//变量
+const ElTreeRef = ref(null)
+const treeRefNode = ref(null)
+const treeRefData = ref(null)
+const ElTreeProps = ref({
+    label: 'title',
+    children: 'children',
+    isLeaf: 'notExsitChild'
+})
+const menusData = ref(props.menus)
+const menuMark = ref(props.isMark)
+const isAutoKeys = ref(props.isAutoKeys)
+const TreeExpandKey = ref(props.autoExpandKeys)
+const projectId = ref(props.projectId);
+const contractId = ref(props.contractId);
+const idPrefix = ref(props.idPrefix);
+
+//监听
+watch(() => [
+    props.menus,
+    props.isMark,
+    props.isAutoKeys,
+    props.autoExpandKeys,
+    props.projectId,
+    props.contractId,
+    props.idPrefix,
+], ([menus, isMark, AutoKeys, expandKeys, UserProjectId, UserContractId,UserIdPrefix]) => {
+    menusData.value = menus
+    menuMark.value = isMark
+    isAutoKeys.value = AutoKeys
+    TreeExpandKey.value = expandKeys
+    projectId.value = UserProjectId
+    contractId.value = UserContractId
+    idPrefix.value = UserIdPrefix
+})
+
+//树形结构异步加载数据
+const defaultExpandedCids = ref([])
+const ElTreeLoadNode = async (node, resolve) => {
+    let contractIdRelation = '', parentId = '', primaryKeyId = '';
+    if (node.level !== 0) {
+        const nodeData = getObjValue(node?.data);
+        contractIdRelation = nodeData?.contractIdRelation || ''
+        parentId = contractIdRelation ? nodeData?.primaryKeyId : nodeData?.id
+        primaryKeyId = nodeData?.id || ''
+    }
+    //获取数据
+    const {error, code, data} = await dataFillQuery.queryWbsTreeData({
+        contractId: contractId.value || '',
+        contractIdRelation,
+        primaryKeyId,
+        parentId
+    })
+    //处理数据
+    if (!error && code === 200) {
+        let clickKey = '', defaultExpandedArr = [];
+        const keys = TreeExpandKey.value || []
+        const resData = getArrValue(data)
+        if (keys.length > 0) {
+            let lastKey = keys[keys.length-1];
+            for (const item of resData) {
+                //自动展开
+                if (isItem(keys,item?.primaryKeyId)) {
+                    defaultExpandedArr.push(item?.primaryKeyId)
+                }
+                //最后一个,选中点击
+                if (item?.primaryKeyId === lastKey) {
+                    clickKey = item?.primaryKeyId
+                }
+            }
+        } else if (node.level === 0) {
+            defaultExpandedArr.push(resData[0]?.primaryKeyId)
+        }
+        //自动展开
+        defaultExpandedCids.value = defaultExpandedArr
+        resolve(resData)
+        //最后一个,执行点击
+        if (props.isAutoClick && clickKey) {
+            await nextTick(() => {
+                document.getElementById(`${idPrefix.value}${clickKey}`)?.click()
+            })
+        }
+    } else {
+        resolve([])
+    }
+}
+
+//事件
+const emit = defineEmits(['menuTap','nodeTap'])
+
+//节点被点击
+const ElTreeClick = async (data,node) => {
+    if (isAutoKeys.value) {
+        let autoKeysArr = []
+        await getNodeExpandKeys(node, autoKeysArr)
+        const autoKeys = autoKeysArr.reverse()
+        emit('nodeTap', {node, data, keys: autoKeys})
+    } else {
+        emit('nodeTap', {node, data, keys: []})
+    }
+}
+
+//处理自动展开的节点KEY
+const getNodeExpandKeys = async (node, newKeys) => {
+    const parent = node?.parent ?? []
+    const primaryKeyId = node?.data?.primaryKeyId ?? ''
+    if (primaryKeyId) {
+        newKeys.push(primaryKeyId)
+        await getNodeExpandKeys(parent, newKeys)
+    }
+}
+
+//鼠标右键事件
+const contextMenuRef = ref(null)
+const ElTreeLabelContextMenu = (e,data,node) => {
+    const rows = menusData.value || [];
+    if (node.level !== 1 && rows.length > 0) {
+        e.preventDefault();
+        treeRefNode.value = node;
+        treeRefData.value = data;
+        //展开菜单
+        contextMenuRef.value?.showMenu(e)
+    }
+}
+
+//鼠标右键菜单被点击
+const handleMenuSelect = ({key}) => {
+    const node = treeRefNode.value;
+    const data = treeRefData.value;
+    //如果为标记菜单
+    if (key === 'mark' && menuMark.value) {
+        if (data.isFirst === true) {
+            emit('menuTap', {key: 'cancel_mark', node, data})
+        } else {
+            emit('menuTap', {key: 'mark', node, data})
+        }
+    } else {
+        emit('menuTap', {key, node, data})
+    }
+}
+
+//设置树菜单的标记数据
+const setElTreeMenuMark = (keys,isFirst) => {
+    keys.forEach(item => {
+        //根据 data 或者 key 拿到 Tree 组件中的 node
+        let node = ElTreeRef.value.getNode(item)
+        if (!!node) node.data.isFirst = isFirst;
+    })
+}
+
+//设置树菜单的标记数据
+const removeElTreeNode = (key) => {
+    //根据 data 或者 key 拿到 Tree 组件中的 node
+    let node = ElTreeRef.value.getNode(key)
+    //删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性
+    ElTreeRef.value.remove(node)
+}
+
+// 暴露出去
+defineExpose({
+    setElTreeMenuMark,
+    removeElTreeNode
+})
+</script>
+
+<style lang="scss" scoped>
+.data-custom-tree-node {
+    position: relative;
+    display: flex;
+    align-items: center;
+    width: 100%;
+    color: var(--ui-TC);
+    .label {
+        flex: auto;
+        font-size: 16px;
+    }
+    .label.level-name {
+        font-size: 18px;
+        font-weight: bold;
+    }
+    .menu-icon {
+        position: relative;
+        font-size: 20px;
+        opacity: 0;
+        pointer-events: none;
+        transition: opacity 0.2s;
+        .cu-tree-node-popover-menu-icon {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+        }
+    }
+    &:hover {
+        .menu-icon {
+            opacity: 1;
+            pointer-events: all;
+            cursor: context-menu;
+        }
+    }
+    .menu-icon.show {
+        opacity: 1;
+        pointer-events: all;
+        cursor: context-menu;
+    }
+}
+</style>

+ 151 - 1
src/views/ledger/write.vue

@@ -1,7 +1,157 @@
 <template>
-    <div>台账记录</div>
+    <div class="hc-layout-box">
+        <div class="hc-layout-left-box" :style="'width:' + leftWidth + 'px;'" v-if="sbTableKey !== 'weather'">
+            <div class="hc-project-box">
+                <div class="hc-project-icon-box">
+                    <HcIcon name="stack"/>
+                </div>
+                <div class="ml-2 project-name-box">
+                    <span class="text-xl text-cut project-alias">{{projectInfo['projectAlias']}}</span>
+                    <div class="text-xs text-cut project-name">{{projectInfo['name']}}</div>
+                </div>
+            </div>
+            <div class="hc-tree-box">
+                <el-scrollbar>
+                    <WbsTree :autoExpandKeys="TreeAutoExpandKeys" :projectId="projectId" :contractId="contractId" @nodeTap="nodeWbsElTreeClick"/>
+                </el-scrollbar>
+            </div>
+            <!--左右拖动-->
+            <div class="horizontal-drag-line" @mousedown="onmousedown"/>
+        </div>
+        <div class="hc-layout-content-box">
+            <!--https://codepen.io/weilanwl/pen/JjLVyOd-->
+            <HcSbTable :datas="sbTableData" :cur="sbTableKey" @tabClick="sbTableClick"/>
+            <HcCard :scrollbar="false" actionSize="lg">
+                <template #header>
+                    <div class="w-64">
+                        <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
+                    </div>
+                    <div class="ml-2">
+                        <el-button type="primary" size="large" @click="searchClick">搜索</el-button>
+                    </div>
+                </template>
+                <template #extra>
+                    <HcTooltip keys="write_weather_print">
+                        <el-button hc-btn>
+                            <HcIcon name="printer"/>
+                            <span>打印</span>
+                        </el-button>
+                    </HcTooltip>
+                </template>
+                123456
+
+                <template #action>
+                    <HcPages :pages="searchForm" @change="pageChange"/>
+                </template>
+            </HcCard>
+        </div>
+
+    </div>
 </template>
 
 <script setup>
+import {onMounted, ref, watch} from 'vue'
+import {useAppStore} from "~src/store";
+import {useRouter, useRoute} from 'vue-router'
+import WbsTree from "./components/WbsTree.vue"
+import HcSbTable from "~com/hc-sb-table/index.vue";
+import imageApi from '~api/other-file/imageData';
+import {getStoreData, setStoreData} from '~src/utils/storage'
+import {getArrValue, getObjNullValue} from "vue-utils-plus"
+
+//变量
+const router = useRouter()
+const useRoutes = useRoute()
+const useAppState = useAppStore()
+const projectId = ref(useAppState.getProjectId);
+const contractId = ref(useAppState.getContractId);
+const projectInfo = ref(useAppState.getProjectInfo);
+const isCollapse = ref(useAppState.getCollapse)
+
+//路由参数
+const routerQuery = useRoutes?.query;
+const dataType = routerQuery?.type || 'weather';
+
+//自动展开缓存
+const TreeAutoExpandKeys = ref([])
+
+//类型处理
+const sbTableKey = ref(dataType)
+const sbTableData = ref([
+    {icon: 'bar-chart-box', label: '内业台账', key: 'internal'},
+    {icon: 'tools', label: '施工台账', key: 'construction'},
+    {icon: 'sun-cloudy', label: '天气台账', key: 'weather'},
+])
+
+const sbTableClick = (key) => {
+    sbTableKey.value = key
+    /*router.push({
+        path: useRoutes.path,
+        query: {active: key}
+    })*/
+    //searchClick()
+}
+
+//树被点击
+const nodeWbsElTreeClick = ({data, keys}) => {
+
+}
 
+//搜索表单
+const searchForm = ref({
+    recordTime: '', current: 1, size: 20, total: 0
+})
+
+//日期时间被选择
+const betweenTime = ref(null)
+const betweenTimeUpdate = ({val,arr}) => {
+    betweenTime.value = arr
+    searchForm.value.recordTime = val['start'] + '~' + val['end']
+}
+
+//搜索
+const searchClick = () => {
+    searchForm.value.current = 1;
+    getTableData()
+}
+
+//分页被点击
+const pageChange = ({current, size}) => {
+    searchForm.value.current = current
+    searchForm.value.size = size
+    getTableData()
+}
+
+//获取数据
+const getTableData = () => {
+
+}
+
+
+//左右拖动,改变树形结构宽度
+const leftWidth = ref(382);
+const onmousedown = () => {
+    const leftNum = isCollapse.value ? 142 : 272
+    document.onmousemove = (ve) => {
+        const diffVal = ve.clientX - leftNum;
+        if(diffVal >= 310 && diffVal <= 900) {
+            leftWidth.value = diffVal;
+        }
+    }
+    document.onmouseup = () => {
+        document.onmousemove = null;
+        document.onmouseup = null;
+    }
+}
 </script>
+
+<style lang="scss" scoped>
+@import "../../styles/ledger/write.scss";
+</style>
+
+<style lang="scss">
+.hc-layout-box .hc-layout-content-box .hc-card-box.el-card {
+    border-radius: 0 var(--el-card-border-radius) var(--el-card-border-radius) var(--el-card-border-radius);
+    height: calc(100% - 44px);
+}
+</style>

+ 3 - 4
src/views/tasks/hc-data.vue

@@ -146,9 +146,9 @@ onMounted(() => {
 //类型处理
 const sbTableKey = ref(activeName)
 const sbTableData = ref([
-    {icon: 'schedule', label: '待办任务', key: 'key1'},
-    {icon: 'check_circle', label: '已办任务', key: 'key2'},
-    {icon: 'person', label: '我发起的', key: 'key3'},
+    {icon: 'time', label: '待办任务', key: 'key1'},
+    {icon: 'calendar-check', label: '已办任务', key: 'key2'},
+    {icon: 'user-shared', label: '我发起的', key: 'key3'},
 ])
 const sbTableClick = (key) => {
     sbTableKey.value = key
@@ -206,7 +206,6 @@ const queryBatchList = async () => {
     }
 }
 
-
 //搜索表单
 const searchForm = ref({
     queryValue: null, taskType: null, taskStatus: null, batch: null, startTime: null, endTime: null,