Ver Fonte

更换插件

ZaiZai há 2 anos atrás
pai
commit
69a6af7d5b

+ 2 - 2
src/views/data-fill/collapse-form/formula.vue

@@ -19,7 +19,7 @@
 <script setup>
 import {ref, watch, onMounted} from "vue";
 import wbsApi from "~api/data-fill/wbs";
-import {getObjNullValue} from "vue-utils-plus"
+import {getObjVal} from "js-fast-way"
 
 const props = defineProps({
     projectId: [String, Number],
@@ -83,7 +83,7 @@ const getPanel = async () => {
             pkeyId: pkeyIds,
         }, false)
         if (!error && code === 200) {
-            componentDetail.value = getObjNullValue(data)
+            componentDetail.value = getObjVal(data)
             formulaModalinfo.value.type = componentDetail?.value.info?.data || ''
         } else {
             componentDetail.value = []

+ 17 - 16
src/views/data-fill/collapse-form/index.vue

@@ -272,12 +272,13 @@ import HcTestFile from "./test-file.vue"
 import HcFormula from "./formula.vue"
 import HcDragNode from "~com/drag-node/index.vue"
 import NoDataSvg from '~src/assets/view/no-data.svg'
-//import {getArrValue, getObjVal, isString, deepClone, arrIndex} from "js-fast-way"
-import {setPosRange, isType, utilsArray, deepClone, isValueNull} from "vue-utils-plus"
+import {
+    getArrValue, getObjValue, getObjVal,
+    isNullES, deepClone, arrIndex, setPosRange
+} from "js-fast-way"
+
 //初始变量
 const useAppState = useAppStore()
-const {isIndex, getIndex} = utilsArray()
-const {isString, getObjNullValue, getArrValue, getObjValue} = isType()
 
 //参数
 const props = defineProps({
@@ -340,7 +341,7 @@ const formparentId = ref('')
 const itemRefs = ref([])
 const setItemRefs = (el, {pkeyId}) => {
     if (el) {
-        let index = getIndex(itemRefs.value, 'pkeyId', pkeyId)
+        let index = arrIndex(itemRefs.value, 'pkeyId', pkeyId)
         if (index !== -1) {
             itemRefs.value[index].ref = el
         } else {
@@ -355,7 +356,7 @@ const setItemRefs = (el, {pkeyId}) => {
 //处理表单的ref
 const setSpliceItemRefs = async ({pkeyId}) => {
     const refs = itemRefs.value
-    let index = getIndex(refs, 'pkeyId', pkeyId)
+    let index = arrIndex(refs, 'pkeyId', pkeyId)
     if (index !== -1) {
         refs.splice(index, 1)
         itemRefs.value = refs
@@ -420,7 +421,7 @@ const changeFormData = ref({
 })
 const changeFormDatas = (pkeyId, type) => {
     const changeData = changeFormData.value[type]
-    const index = getIndex(changeData, 'pkeyId', pkeyId)
+    const index = arrIndex(changeData, 'pkeyId', pkeyId)
     if (index !== -1) {
         return changeData[index]
     } else {
@@ -433,7 +434,7 @@ const setChangeFormDatas = async (pkeyId, type) => {
     const refs = await getFormRef(pkeyId)
     const formData = refs?.getFormData()
     const changeData = changeFormData.value[type]
-    const index = getIndex(changeData, 'pkeyId', pkeyId)
+    const index = arrIndex(changeData, 'pkeyId', pkeyId)
     if (index !== -1) {
         changeData[index] = formData
     } else {
@@ -560,7 +561,7 @@ const designModalSave = async () => {
             pkId: pkeyId,
         })
         //处理数据
-        const res = getObjNullValue(data)
+        const res = getObjVal(data)
         if (!error && code === 200 && res) {
             try {
                 const refs = await getFormRef(pkeyId)
@@ -734,7 +735,7 @@ const DragModalTableForm = ref([])
 const DragModalHeight = ref(600)
 const windowClick = async (item, indexs) => {
     const list = deepClone(DragModalTableForm.value)
-    let index = getIndex(list, 'pkeyId', item.pkeyId)
+    let index = arrIndex(list, 'pkeyId', item.pkeyId)
     if (!item.isWindow) {
         const formSize = getTableFormSize(item?.pkeyId)
         const newTableForm = {
@@ -1075,7 +1076,7 @@ const setDragModalLoading = (dragItem, text = '保存中...', show = false) => {
 //获取表单的ref
 const getFormRef = async (pkeyId) => {
     const itemRef = itemRefs.value
-    const index = getIndex(itemRef, 'pkeyId', pkeyId)
+    const index = arrIndex(itemRef, 'pkeyId', pkeyId)
     return itemRef[index].ref
 }
 
@@ -1083,7 +1084,7 @@ const getFormRef = async (pkeyId) => {
 const delWindowRefs = (pkeyId) => {
     //判断是否存在窗口,如果存在,就删除窗口
     const list = DragModalTableForm.value
-    const index = getIndex(list, 'pkeyId', pkeyId)
+    const index = arrIndex(list, 'pkeyId', pkeyId)
     if (index !== -1) {
         list.splice(index, 1)
         DragModalTableForm.value = list
@@ -1170,7 +1171,7 @@ const setMountKey_down_up = () => {
     //全局按键按下监听
     document.onkeydown = async (event) => {
         const pkeyId = presentId.value
-        if (!isValueNull(pkeyId)) {
+        if (!isNullES(pkeyId)) {
             const {key, ctrlKey} = event
             //按下ctrl键
             if (ctrlKey && key === 'Control') {
@@ -1192,7 +1193,7 @@ const setMountKey_down_up = () => {
     //全局键盘放开监听
     document.onkeyup = async (event) => {
         const pkeyId = presentId.value
-        if (!isValueNull(pkeyId)) {
+        if (!isNullES(pkeyId)) {
             const {key, ctrlKey} = event
             if (!ctrlKey && key === 'Control') {
                 const refs = await getFormRef(pkeyId)
@@ -1242,8 +1243,8 @@ const getFormRegExpJson = async () => {
         const refs = await getFormRef(pkeyId)
         const regExp = refs?.getRegExpJson()
         const nodeName = refs?.getNodeName()
-        if (getObjNullValue(regExp)) {
-            const index = getIndex(list, 'pkeyId', pkeyId)
+        if (getObjVal(regExp)) {
+            const index = arrIndex(list, 'pkeyId', pkeyId)
             formRegExpJson[pkeyId] = {
                 ...regExp,
                 itemId: `item-${index}-${pkeyId}`,

+ 1 - 1
src/views/data-fill/collapse-form/special-diaolg.vue

@@ -17,7 +17,7 @@
 
 <script setup>
 import {ref, nextTick} from "vue";
-import {formValidate, setPosInsert, setPosRange} from "vue-utils-plus"
+import {formValidate, setPosInsert, setPosRange} from "js-fast-way"
 
 const specialRef = ref(null)
 const specialCharacters = [

+ 1 - 1
src/views/data-fill/collapse-form/test-data.vue

@@ -26,7 +26,7 @@
 
 <script setup>
 import {ref, watch, onMounted} from "vue";
-import {getArrValue, getObjValue, setPosInsert} from "vue-utils-plus"
+import {getArrValue, getObjValue, setPosInsert} from "js-fast-way"
 import dataApi from "~api/tentative/detect/test";
 
 const props = defineProps({

+ 1 - 1
src/views/data-fill/collapse-form/test-diaolg.vue

@@ -40,7 +40,7 @@
 <script setup>
 import {ref, watch, onMounted} from "vue";
 import TestTree from "./testTree.vue"
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import {getStoreValue, setStoreValue} from "~uti/storage";
 import samplingApi from "~api/tentative/material/sampling";
 

+ 5 - 5
src/views/data-fill/collapse-form/test-file.vue

@@ -16,7 +16,7 @@
                           :tenantId="tenant_id"
                           :wbsId="wbsTempId"
                           :wbsType="wbs_type"
-                         @nodeTap="fileModalElTreeClick"
+                          @nodeTap="fileModalElTreeClick"
                 >
                 </TestTree>
                 <!-- 第三方树 -->
@@ -54,8 +54,8 @@
                     <template #reportNo="{row}">
                         <span :class="[row?.isSelectedStatus===1?'text-green':'']">{{ row?.reportNo }}</span>
                     </template>
-                     <template #status="{row}">
-                        <span >{{ row?.status==1?'合格':'不合格' }}</span>
+                    <template #status="{row}">
+                        <span>{{ row?.status == 1 ? '合格' : '不合格' }}</span>
                     </template>
                 </HcTable>
                 <HcTable v-if="fileModalradio==3" ref="dialogTableRef" :column="filedialogTableColumn1"
@@ -65,7 +65,7 @@
                         <span :class="[row?.isSelectedStatus===1?'text-green':'']">{{ row?.reportNo }}</span>
                     </template>
                     <template #status="{row}">
-                        <span >{{ row?.status==1?'合格':'不合格' }}</span>
+                        <span>{{ row?.status == 1 ? '合格' : '不合格' }}</span>
                     </template>
                 </HcTable>
 
@@ -79,7 +79,7 @@
 
 <script setup>
 import {ref, watch, onMounted, nextTick} from "vue";
-import {getArrValue, isItem} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import {getTreeAll} from "~api/tentative/detect";
 import thirdApi from "~api/tentative/detect/third";
 import samplingApi from "~api/tentative/material/sampling";

+ 2 - 2
src/views/data-fill/collapse-form/testTree.vue

@@ -19,7 +19,7 @@
 
 <script setup>
 import {ref, nextTick, watch} from "vue";
-import {isItem, getArrValue} from "vue-utils-plus"
+import {isArrItem, getArrValue} from "js-fast-way"
 import samplingApi from "~api/tentative/material/sampling";
 
 //参数
@@ -99,7 +99,7 @@ const ElTreeLoadNode = async (node, resolve) => {
             let lastKey = keys[keys.length - 1];
             for (const item of resData) {
                 //自动展开
-                if (isItem(keys, item?.primaryKeyId)) {
+                if (isArrItem(keys, item?.primaryKeyId)) {
                     defaultExpandedArr.push(item?.primaryKeyId)
                 }
                 //最后一个,选中点击

+ 0 - 1
src/views/data-fill/components/HcTreeData.vue

@@ -58,7 +58,6 @@
 <script setup>
 import {ref, watch, nextTick} from "vue";
 import {getTreeNodeType} from '~uti/utils';
-import {getArrValue, getObjValue} from "vue-utils-plus"
 //参数
 const props = defineProps({
     menus: {

+ 14 - 12
src/views/data-fill/components/HcTreeNode.vue

@@ -1,17 +1,19 @@
 <template>
-    <ElTree class="hc-tree-node-box hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :data="ElTreeData" :node-key="nodeKey" highlight-current accordion show-checkbox
-            :check-strictly="isStrictly" :expand-on-click-node="false" @check="ElTreeCheckChange" :indent="0">
+    <ElTree ref="ElTreeRef" :check-strictly="isStrictly" :data="ElTreeData" :expand-on-click-node="false"
+            :indent="0" :node-key="nodeKey" :props="ElTreeProps" accordion
+            class="hc-tree-node-box hc-tree-node tree-line" highlight-current show-checkbox @check="ElTreeCheckChange">
         <template #default="{ node, data }">
             <div class="custom-tree-node">
                 <div class="label" @dblclick="ElTreeDblClick(data)">
-                    <el-input v-model="data.title" size="small" @keyup="keyUpEvent($event,data)" v-if="data.isInputName" @blur="ElTreeBtnClick(data)">
+                    <el-input v-if="data.isInputName" v-model="data.title" size="small" @blur="ElTreeBtnClick(data)"
+                              @keyup="keyUpEvent($event,data)">
                         <template #append>
-                            <el-button type="primary" plain size="small" @click="ElTreeBtnClick(data)">
+                            <el-button plain size="small" type="primary" @click="ElTreeBtnClick(data)">
                                 <HcIcon name="check"/>
                             </el-button>
                         </template>
                     </el-input>
-                    <span v-else>{{data.title}}</span>
+                    <span v-else>{{ data.title }}</span>
                 </div>
             </div>
         </template>
@@ -20,13 +22,13 @@
 
 <script setup>
 import {nextTick, onMounted, ref, watch} from "vue";
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import wbsApi from '~api/data-fill/wbs';
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     nodeKey: {
@@ -34,11 +36,11 @@ const props = defineProps({
         default: 'primaryKeyId'
     },
     nodeId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     oldId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     strictly: {
@@ -57,7 +59,7 @@ const ElTreeProps = ref({label: 'title', children: 'children', isLeaf: 'notExsit
 watch(() => [
     props.projectId,
     props.strictly,
-], ([pid,strictly]) => {
+], ([pid, strictly]) => {
     projectId.value = pid
     isStrictly.value = strictly
 })
@@ -87,7 +89,7 @@ const ElTreeLoadNode = async () => {
 }
 
 //被选择的
-const ElTreeCheckChange = (_,nodes) => {
+const ElTreeCheckChange = (_, nodes) => {
     emit('check-change', nodes)
 }
 
@@ -106,7 +108,7 @@ const ElTreeDblClick = (item) => {
     item.isInputName = true;
 }
 //回车
-const keyUpEvent = (e,item) => {
+const keyUpEvent = (e, item) => {
     if (e.key === "Enter") {
         ElTreeBtnClick(item)
     }

+ 18 - 13
src/views/data-fill/components/HcUpload.vue

@@ -1,22 +1,27 @@
 <template>
-    <el-upload class="hc-upload-border" drag :action="action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :file-list="fileListData" multiple :disabled="uploadDisabled"
-               :on-preview="uploadPreview" :before-remove="delUploadData" :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload"
-               :on-progress="uploadprogress" :on-remove="uploadRemove">
-        <div class="hc-upload-loading" v-loading="uploadDisabled" :element-loading-text="loadingText">
+    <el-upload :accept="accept" :action="action" :before-remove="delUploadData" :before-upload="beforeUpload"
+               :data="uploadData"
+               :disabled="uploadDisabled" :file-list="fileListData" :headers="getTokenHeader()" :on-error="uploadError"
+               :on-exceed="uploadExceed" :on-preview="uploadPreview" :on-progress="uploadprogress"
+               :on-remove="uploadRemove" :on-success="uploadSuccess" class="hc-upload-border"
+               drag multiple>
+        <div v-loading="uploadDisabled" :element-loading-text="loadingText" class="hc-upload-loading">
             <HcIcon name="backup" ui="text-5xl mt-4"/>
             <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
         </div>
         <template #tip>
-            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB</div>
+            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB
+            </div>
         </template>
     </el-upload>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
 import wbsApi from "~api/data-fill/wbs"
-import {isSize} from "vue-utils-plus"
+import {isFileSize} from "js-fast-way"
+
 const props = defineProps({
     fileList: {
         type: Array,
@@ -45,7 +50,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     beforeFileNum.value = 0
     finishFileNum.value = 0
     errorFileNum.value = 0
@@ -57,8 +62,8 @@ const emit = defineEmits(['change'])
 //上传前
 const beforeFileNum = ref(0)
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
-        beforeFileNum.value ++;
+    if (isFileSize(file?.size, 60)) {
+        beforeFileNum.value++;
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');
@@ -81,7 +86,7 @@ const uploadprogress = () => {
 //上传完成
 const finishFileNum = ref(0)
 const uploadSuccess = () => {
-    finishFileNum.value ++;
+    finishFileNum.value++;
     if (beforeFileNum.value === finishFileNum.value) {
         uploadDisabled.value = false
         emit('change', {type: 'success'})
@@ -91,7 +96,7 @@ const uploadSuccess = () => {
 //上传失败
 const errorFileNum = ref(0)
 const uploadError = () => {
-    errorFileNum.value ++;
+    errorFileNum.value++;
     window?.$message?.error('上传失败');
     const num = finishFileNum.value + errorFileNum.value;
     if (beforeFileNum.value === num) {
@@ -124,7 +129,7 @@ const delUploadData = async ({id}) => {
 }
 
 const uploadRemove = () => {
-    if(fileListData.value.length <= 0) {
+    if (fileListData.value.length <= 0) {
         emit('change', {type: 'del'})
     }
 }

+ 0 - 2085
src/views/data-fill/components/ListItem(已废弃).vue

@@ -1,2085 +0,0 @@
-<template>
-    <div class="data-fill-list-box">
-        <el-collapse v-model="ActiveKey" @change="CollapseChange">
-            <template v-for="(item,index) in listDatas" :key="item?.pkeyId">
-                <el-collapse-item :id="`item-${index}-${item?.pkeyId}`" :disabled="item['isBussShow'] === 2"
-                                  :name="`item-${index}-${item?.pkeyId}`">
-                    <template #title>
-                        <div class="hc-collapse-item-header">
-                            <div class="text-lg truncate item-title">{{ item.nodeName }}</div>
-                            <div class="hc-extra-text-box">
-                                <HcTooltip v-if="item['isCopeTab'] === 2" keys="wbs_del_table">
-                                    <el-button :disabled="item['isBussShow'] === 2" plain type="danger"
-                                               @click.stop="delClick(item,index)">删除本表
-                                    </el-button>
-                                </HcTooltip>
-                                <!-- <HcTooltip keys="wbs_copy_table">
-                                    <el-button :disabled="item['isBussShow'] === 2" :loading="copyClickLoading" plain
-                                               type="primary" @click.stop="copyClick(item,index)">
-                                        复制本表
-                                    </el-button>
-                                </HcTooltip> -->
-                                <HcTooltip keys="wbs_copy_table">
-                                    <el-button
-                                        v-if="item['isLinkTable'] === 1"
-                                        disabled plain
-                                        type="info">
-                                        复制本表
-                                    </el-button>
-                                    <el-button v-else :loading="copyClickLoading" plain type="primary"
-                                               @click.stop="copyClick(item,index)">复制本表
-                                    </el-button>
-                                </HcTooltip>
-                                <HcTooltip keys="wbs_hide_table">
-                                    <el-button plain type="primary" @click.stop="hideClick(item,index)">
-                                        <template v-if="item['isBussShow'] === 1">隐藏本表</template>
-                                        <template v-else>显示本表</template>
-                                    </el-button>
-                                </HcTooltip>
-                                <HcTooltip v-if="isStatus != 3" keys="wbs_preview_table">
-                                    <el-button
-                                        v-if="item['isBussShow'] === 2 || item['isTabPdf'] === 1|| item['pdfUrl'] === ''"
-                                        disabled plain
-                                        type="info">
-                                        预览
-                                    </el-button>
-                                    <el-button v-else plain type="primary" @click.stop="previewClick(item,index)">预览
-                                    </el-button>
-                                </HcTooltip>
-                                <HcTooltip keys="wbs_upload_table">
-                                    <el-button :disabled="item['isBussShow'] === 2"
-                                               :type="item['tabFileType'] === 2?'success':'primary'"
-                                               plain
-                                               @click.stop="uploadClick(item,index)">
-                                        <template v-if="item['tabFileType'] === 2">已上传</template>
-                                        <template v-else>上传</template>
-                                    </el-button>
-                                </HcTooltip>
-                            </div>
-                        </div>
-                    </template>
-                    <div :style="`height: calc(100vh - ${drawType ? '555px' : '386px'});`"
-                         class="data-fill-list-item-content">
-                        <div class="data-fill-table-form-box">
-                            <div :id="`table-form-${item?.pkeyId}`" class="hc-excel-table-form-view"/>
-                            <div v-if="item?.isTableForm === false" class="hc-no-table-form">
-                                <div class="table-form-no">
-                                    <img :src="notableform" alt=""/>
-                                    <div class="desc">暂无表单数据</div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="data-fill-table-tip-box">
-                            <div class="text-orange tip-title">
-                                <HcIcon fill name="error" ui="text-2xl"/>
-                                <span class="ml-1">提示</span>
-                            </div>
-                            <div class="text-gray-400 tip-item">
-                                1、灰色框代表可通过系统识别计算,公式自动引用,可通过公式计算少量数据,(表头数据及简单),也可只填写白色框数据
-                            </div>
-                            <div class="text-gray-400 tip-item">2、系统支持键盘中,shift +
-                                tab键向上一个填报框切换,tab向下一个填报框切换。Shift + 上 ( ↑ )、下 ( ↓ )、左 ( ← )、右 ( →
-                                )键,切换填报输入框焦点。
-                            </div>
-                            <div class="table-tip-foot">
-                                <div class="tip-left-btn">
-                                    <HcTooltip keys="wbs_import_table">
-                                        <div class="text-gray-400 dow-text">
-                                            <HcIcon name="publish" ui="text-lg"/>
-                                            <span class="ml-1">导入列表数据</span>
-                                        </div>
-                                    </HcTooltip>
-                                    <HcTooltip keys="wbs_download_table">
-                                        <div class="text-main dow-text">
-                                            <HcIcon name="file_download" ui="text-lg"/>
-                                            <span class="ml-1">下载导入模板</span>
-                                        </div>
-                                    </HcTooltip>
-                                </div>
-                                <div class="tip-right-btn">
-                                    <HcTooltip keys="wbs_save_table">
-                                        <el-button :disabled="item?.isTableForm === false"
-                                                   :loading="tableFormSaveLoading" hc-btn
-                                                   type="primary"
-                                                   @click="tableFormSaveClick(item,index)">
-                                            <HcIcon name="save"/>
-                                            <span>保存</span>
-                                        </el-button>
-                                    </HcTooltip>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </el-collapse-item>
-            </template>
-        </el-collapse>
-    </div>
-
-    <!--右键菜单-->
-    <HcContextMenu ref="contextMenuRef" :datas="tableFormMenu" @item-click="handleMenuSelect"/>
-
-    <!--上传文件-->
-    <HcDialog :footer="false" :show="uploadModal" title="上传文件" widths="38rem" @close="uploadModal = false">
-        <HcUpload :datas="uploadData" :fileList="fileListData" @change='uploadChange'/>
-    </HcDialog>
-
-    <!--插入设计值/频率-->
-    <HcDialog :show="IDVFModal" saveText="确认插入" title="插入设计值/频率" widths="600px" @close="closeIDVFModal"
-              @save="IDVFModalSaveClick">
-        <el-alert :closable="false" title="填写完设计值和频率,系统自动计算实测值" type="warning"/>
-        <el-form ref="formIDVFRef" :model="formIDVFModel" label-width="auto" size="large">
-            <div class="form-item-div text-center mb-3">
-                <el-radio-group v-model="formIDVFModel.type" size="large">
-                    <el-radio :label="1">公路工程</el-radio>
-                    <el-radio :label="2" class="ml-4">水利水电</el-radio>
-                </el-radio-group>
-            </div>
-            <el-form-item label="设计值">
-                <!-- onkeyup="value = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')" -->
-                <el-input v-model="formIDVFModel.design" placeholder="如果设计值存在两个,则使用 '/' 连接,例如12/23"/>
-            </el-form-item>
-            <el-form-item v-if="formIDVFModel.type === 1" label="频率">
-                <!--  onkeyup="value = value.replace(/^(0+)|[^\d]+/g,'')" -->
-                <el-input v-model="formIDVFModel.size"
-                          placeholder="如果设计值使用 '/' 连接,则频率也是用 '/' 连接,例如5/10"/>
-            </el-form-item>
-            <el-form-item v-if="formIDVFModel.type === 2" label="容量">
-                <!--   onkeyup="value = value.replace(/^(0+)|[^\d]+/g,'')" -->
-                <el-input v-model="formIDVFModel.capacity"
-                          placeholder="如果容量存在两个,则使用 '*',或者 '/' 连接例如2*4,5/7"/>
-            </el-form-item>
-            <el-form-item label="合格点数">
-                <el-input v-model="formIDVFModel.pass"
-                          placeholder="如果设计值使用 '/' 连接,则合格点数也是用 '/' 连接,例如2/5"/>
-            </el-form-item>
-            <el-form-item label="偏差范围">
-                <el-input v-model="formIDVFModel.dev"
-                          placeholder="如果设计值使用 '/' 连接,则偏差范围也是用 '/' 连接,例如±2/±3"/>
-            </el-form-item>
-        </el-form>
-    </HcDialog>
-
-    <!--插入特殊字符-->
-    <HcDialog :show="specialModal" saveText="确认插入" title="插入特殊字符" widths="600px" @close="specialModal = false"
-              @save="specialNodeClick">
-        <el-form ref="specialFormRef" :model="specialFormModel" :rules="specialFormRules" class="mb-6" label-width="0px"
-                 size="large">
-            <el-form-item class="special-form-item" prop="val">
-                <el-input id="specialId" ref="specialRef" v-model="specialFormModel.val"
-                          clearable placeholder="请选择特殊字符代码" @blur="specialInputBlur"/>
-            </el-form-item>
-        </el-form>
-        <el-row :gutter="20" style="margin: -10px;">
-            <el-col v-for="item in specialCharacters" :span="3" style="padding: 10px;">
-                <div class="special-box" @click="specialClick">
-                    <span :title="`字符代码(C):${item !== 'K̅'?item.slice(2,7):'K̅'}`" class="font-EUDC" v-html="item"/>
-                </div>
-            </el-col>
-        </el-row>
-    </HcDialog>
-
-    <!--关联试验数据-->
-    <HcDialog :footer="false" :show="CTDModal" title="关联试验数据" widths="84%" @close="CTDModal = false">
-        <div class="adding-form-dialog-box">
-            <div class="dialog-tree-box">
-                <el-scrollbar>
-                    <ElTree ref="ElTreeRef"
-                            :autoExpandKeys="CTDTreeAutoExpandKeys"
-                            :default-expanded-keys="defaultExpandedCids"
-                            :indent="0"
-                            :load="ElTreeLoadNode"
-                            :props="ElTreeProps"
-                            accordion
-                            class="hc-tree-node tree-line"
-                            highlight-current
-                            lazy
-                            node-key="primaryKeyId"
-                            @node-click="CTDElTreeClick"
-
-                    >
-                    </ElTree>
-                </el-scrollbar>
-            </div>
-            <div class="dialog-table-box">
-                <div class="dialog-search">
-                    <div class="w-64 ml-2">
-                        <HcDatePicker :dates="CTDbetweenTime" clearable @change="CTDbetweenTimeUpdate"/>
-                    </div>
-                    <div class="ml-2">
-                        <el-button type="primary" @click="CTDsearchClick">
-                            <HcIcon name="search-2"/>
-                            <span>搜索</span>
-                        </el-button>
-                    </div>
-                </div>
-                <div class="dialog-table">
-                    <HcTable :column="CTDdialogTableColumn" :datas="CTDdialogTableData1"
-                             :loading="CTDdialogTableLoading">
-                        <template #reportNo="{row}">
-                            <span class="text-link" @click="CTDtableRowName(row)">{{ row?.reportNo }}</span>
-                        </template>
-                    </HcTable>
-                </div>
-                <div class="dialog-pages">
-                    <HcPages :pages="CTDsearchFormPage" @change="CTDsearchFormPageChange"/>
-                </div>
-            </div>
-        </div>
-    </HcDialog>
-    <!-- 选择要插入的数据 -->
-    <HcDialog :show="insertDataShow" saveText="保存" title="选择需要插入的数据" widths="84%" @close="cancelinsertData"
-              @save="submitinsertData">
-        <div>
-            <div class="flex-1" style="padding-left:20px">
-                <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" :round="false" size="default"
-                             @change="tabTypeChange"/>
-                <el-select v-model="testReportId" :loading="insertDataSelectoading" :placeholder="placeholderType"
-                           class="ml-2 w-80"
-                           clearable @change="testReportIdchange">
-                    <el-option v-for="item in testReportData" :key="item.pKeyId" :label="item['nodeName']"
-                               :value="item['pKeyId']"/>
-                </el-select>
-            </div>
-            <div class="dialog-table-box">
-                <!-- <div class="dialog-table">
-                   <HcTable :column="insertDataTableColumn" :datas="insertDataTable" :loading="insertDataTableLoading">
-                       <template #tempLow="{row}">{{row['tempLow']}} ~ {{row['tempHigh']}}</template>
-                       <template #action="{row}">
-                                <el-checkbox size="large"  @change="insertDataTableCheck(row)"/>
-
-                       </template>
-                   </HcTable>
-                </div> -->
-                <!-- <div class="dialog-pages">
-                   <HcPages :pages="insertDataPage" @change="insertDataPageChange"/>
-               </div> -->
-                <div class="copy-node-many-table">
-                    <el-scrollbar v-loading="insertDataTableLoading">
-                        <el-table :data="insertDataTable" border stripe @selection-change="insertDataTableCheck">
-                            <el-table-column type="selection" width="55"/>
-                            <!-- <el-table-column prop="key_12__3_1" label="数据名称"/> -->
-                            <el-table-column label="字段名称" prop="key"/>
-                            <el-table-column label="数值" prop="value"/>
-                            <!-- <el-table-column prop="action" label="操作" width="120" align="center">
-                                <template #default="{row}">
-                                      <el-checkbox  size="large"  @change="insertDataTableCheck(row)"/>
-                                </template> -->
-                            <!-- </el-table-column> -->
-                        </el-table>
-                    </el-scrollbar>
-                </div>
-            </div>
-        </div>
-    </HcDialog>
-    <!-- 复制本表 -->
-    <HcDialog :show="CopyModal" saveText="确认复制" title="复制本表" widths="1200px" @close="CopyModal = false"
-              @save="CopyModal = false">
-        <el-alert :closable="false" title="复跨节点复制: 把当前表格已形成的数据复制到其他工程部位的相同表格里面"
-                  type="warning"/>
-        <el-alert :closable="false" title="本节点复制:在当前节点内复制本表及数据" type="warning"/>
-        <div class="radio-group-box">
-            <el-radio-group v-model="CopyModalType">
-                <el-radio label="1">跨节点复制</el-radio>
-                <el-radio class="ml-4" label="2">本节点复制</el-radio>
-            </el-radio-group>
-        </div>
-        <div v-if="CopyModalType=== '1'" class="copy-node-many-box">
-            <div class="copy-node-many-tree">
-                <el-scrollbar>
-                    <WbsTree
-                        :contractId="contractId"
-                        :projectId="projectId"
-                        @nodeLoading="ElTreeNodeLoading"
-                        @nodeTap="wbsElTreeClick"
-
-                    />
-                </el-scrollbar>
-            </div>
-            <div class="copy-node-many-table">
-                <el-scrollbar v-loading="ListItemLoading">
-                    <el-table :data="copyModalTable" border stripe>
-                        <el-table-column label="表格名称" prop="fullName"/>
-                        <el-table-column align="center" label="操作" prop="action" width="120">
-                            <template #default="{row}">
-                                <el-checkbox v-model="row.isCheck" size="large" @change="copyModalTableCheck(row)"/>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                </el-scrollbar>
-            </div>
-        </div>
-    </HcDialog>
-    <!--关联试验文件-->
-    <HcDialog :show="fileModal" saveText="保存" title="关联试验文件" widths="84%" @close="fileModal = false"
-              @save="savefileModal">
-        <div class="radio-box">
-            <el-radio-group v-model="fileModalradio" @change="radioChange">
-                <el-radio :label="1">试验检测</el-radio>
-                <el-radio :label="2">第三方检测</el-radio>
-                <el-radio :label="3">外委检测</el-radio>
-            </el-radio-group>
-        </div>
-        <div class="adding-form-dialog-box">
-            <div class="dialog-tree-box">
-                <el-scrollbar>
-                    <!-- 试验检测树 -->
-                    <ElTree v-if="fileModalradio==1"
-                            :indent="0"
-                            :load="ElTreeLoadNode"
-                            :props="ElTreeProps"
-                            accordion
-                            class="hc-tree-node tree-line"
-                            highlight-current
-                            lazy
-                            node-key="primaryKeyId"
-                            @node-click="fileModalElTreeClick"
-                    >
-                    </ElTree>
-                    <!-- 第三方树 -->
-                    <ElTree
-                        v-else
-                        ref="ElTreeRef2" :data="thirdtreeDatas" :indent="0" :props="thirdElTreeProps"
-                        accordion class="hc-tree-node" highlight-current
-                        node-key="id" @node-click="thirdtreeDatasElTreeClick">
-                    </ElTree>
-                </el-scrollbar>
-            </div>
-            <div class="dialog-table-box">
-                <div class="dialog-search">
-                    <div class="w-64 ml-2">
-                        <HcDatePicker :dates="filebetweenTime" clearable @change="filebetweenTimeUpdate"/>
-                    </div>
-                    <div class="ml-2">
-                        <el-button type="primary" @click="filesearchClick">
-                            <HcIcon name="search-2"/>
-                            <span>搜索</span>
-                        </el-button>
-                    </div>
-                </div>
-                <div class="dialog-table">
-                    <HcTable v-if="fileModalradio==1" ref="dialogTableRef1" :column="filedialogTableColumn"
-                             :datas="filedialogTableData" :loading="filedialogTableLoading" isCheck
-                             @selection-change="filedialogTableSelection1">
-                        <template #reportNo="{row}">
-                            <span :class="[row?.isSelectedStatus==1?'text-green':'']">{{ row?.reportNo }}</span>
-                        </template>
-                    </HcTable>
-                    <HcTable v-if="fileModalradio==2" ref="dialogTableRef2" :column="filedialogTableColumn1"
-                             :datas="filedialogTableData" :loading="filedialogTableLoading" isCheck
-                             @selection-change="filedialogTableSelection">
-                        <template #reportNo="{row}">
-                            <span :class="[row?.isSelectedStatus===1?'text-green':'']">{{ row?.reportNo }}</span>
-                        </template>
-                    </HcTable>
-                    <HcTable v-if="fileModalradio==3" ref="dialogTableRef" :column="filedialogTableColumn1"
-                             :datas="filedialogTableData" :loading="filedialogTableLoading" isCheck
-                             @selection-change="filedialogTableSelection">
-                        <template #reportNo="{row}">
-                            <span :class="[row?.isSelectedStatus===1?'text-green':'']">{{ row?.reportNo }}</span>
-                        </template>
-                    </HcTable>
-
-                </div>
-                <div class="dialog-pages">
-                    <HcPages :pages="filesearchFormPage" @change="filesearchFormPageChange"/>
-                </div>
-            </div>
-        </div>
-
-
-    </HcDialog>
-    <!-- 公式参数配置 -->
-    <HcDialog :show="formulaModal" saveText="保存" title="公式参数配置" widths="84%" @close="formulaModal = false"
-              @save="PanelSaveClick">
-
-        <div v-if="componentDetail['type']==='radio'">
-            <el-form ref="formIDVFRef" :model="formulaModalinfo" label-width="auto" size="large">
-                <el-form-item :label="componentDetail['info']['label']">
-                    <!-- onkeyup="value = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')" -->
-                    <el-radio-group v-model="formulaModalinfo.type" size="large">
-                        <el-radio :label="componentDetail['info']['value'][0]['value']">
-                            {{ componentDetail['info']['value'][0]['label'] }}
-                        </el-radio>
-                        <el-radio :label="componentDetail['info']['value'][1]['value']" class="ml-4">
-                            {{ componentDetail['info']['value'][1]['label'] }}
-                        </el-radio>
-                    </el-radio-group>
-                </el-form-item>
-            </el-form>
-        </div>
-
-    </HcDialog>
-</template>
-
-<script setup>
-import {ref, watch, nextTick} from "vue";
-import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import notableform from '~src/assets/view/notableform.svg';
-import HTableForm from "~src/plugins/HTableForm"
-import WbsTree from "../components/WbsTree.vue"
-import wbsApi from "~api/data-fill/wbs"
-import dataApi from "~api/tentative/detect/test";
-import thirdApi from "~api/tentative/detect/third";
-import {getTreeAll} from "~api/tentative/detect"
-import HcUpload from "./HcUpload.vue"
-import {utilsText, isType, formValidate, deepClone, getObjValue} from "vue-utils-plus"
-import {useAppStore} from "~src/store";
-import samplingApi from "~api/tentative/material/sampling"
-
-//初始
-const props = defineProps({
-    datas: {
-        type: Array,
-        default: () => ([])
-    },
-    classify: {
-        type: [String, Number],
-        default: ''
-    },
-    status: {
-        type: [String, Number],
-        default: ''
-    },
-    primaryKeyId: {
-        type: [String, Number],
-        default: ''
-    },
-    contractId: {
-        type: [String, Number],
-        default: ''
-    },
-    projectInfo: {
-        type: Object,
-        default: () => ({})
-    },
-    authBtnTabKey: {
-        type: [String, Number],
-        default: ''
-    },
-    drawType: {
-        type: Boolean,
-        default: false
-    },
-    wbsTempId: {
-        type: [String, Number],
-        default: ''
-    },
-    tenantId: {
-        type: [String, Number],
-        default: ''
-    },
-    wbsType: {
-        type: [String, Number],
-        default: ''
-    },
-})
-const {isString, getObjNullValue, getArrValue} = isType()
-const {setPosInsert, setPosRange} = utilsText()
-const listDatas = ref(props.datas)
-const classify = ref(props.classify)
-const isStatus = ref(props.status)
-const isPrimaryKeyId = ref(props.primaryKeyId)
-const contractId = ref(props.contractId)
-const projectInfo = ref(props.projectInfo)
-const useAppState = useAppStore()
-const authBtnTabKey = ref(props.authBtnTabKey)
-const drawType = ref(props.drawType)
-const wbsTempId = ref(props.wbsTempId);
-const tenantId = ref(props.tenantId);
-const wbsType = ref(props.wbsType);
-const menuBarShow = ref(useAppState.menuBarShow)
-
-//全局变量
-const projectId = ref(useAppState.getProjectId);
-const componentDetail = ref({
-    type: 'radio',
-    info: {
-        label: '是否引用公式数据',
-        value: [
-            {label: '是', value: 1},
-            {label: '否', value: 0},
-        ]
-    }
-})
-
-//监听
-watch(() => [
-    props.datas,
-    props.classify,
-    props.primaryKeyId,
-    props.contractId,
-    props.projectInfo,
-    useAppState.menuBarShow,
-], ([datas, classifyVal, primaryKeyId, cid, pInfo, menuBar]) => {
-    listDatas.value = datas
-    classify.value = classifyVal
-    isPrimaryKeyId.value = primaryKeyId
-    contractId.value = cid
-    projectInfo.value = pInfo
-    menuBarShow.value = menuBar
-    setFormDataNum(datas)
-})
-
-//监听
-// watch(() => [
-//     props.status
-// ], ([val]) => {
-//     //1 未填报,2待上报,3已上报
-//     isStatus.value = val
-// })
-//监听
-watch(() => [
-    props.autoExpandKeys,
-    props.projectId,
-    props.contractId,
-    props.wbsTempId,
-    props.tenantId,
-    props.wbsType,
-    props.status
-], ([expandKeys, UserProjectId, UserContractId, UserWbsTempId, UserTenantId, UserIdPrefix, wbs_type, val]) => {
-
-    projectId.value = UserProjectId
-    contractId.value = UserContractId
-    wbsTempId.value = UserWbsTempId
-    tenantId.value = UserTenantId
-
-    wbsType.value = wbs_type
-    isStatus.value = val
-})
-
-//渲染完成
-nextTick(() => {
-    setFormDataNum(props.datas)
-})
-
-//获取表单初始数据
-const getFormDataInit = (item, pkeyId) => {
-    return {
-        projectId: item?.projectId,
-        contractId: item?.contractId,
-        classify: classify.value,
-        pkeyId: pkeyId ? pkeyId + '' : '',
-        nodeId: isPrimaryKeyId.value
-    }
-}
-
-//设置表单对象的数量
-const formData = ref([])
-const setFormDataNum = (datas) => {
-    ActiveKey.value = []
-    let newArr = [];
-    for (let i = 0; i < datas.length; i++) {
-        newArr.push({
-            ...getFormDataInit(datas[i], datas[i].pkeyId),
-            isCollapseLoad: false,
-        })
-    }
-    formData.value = newArr
-    setTableFormMenu(projectInfo.value)
-}
-
-//展开事件
-const ActiveKey = ref([])
-const formKeyIds = ref('')
-const formparentId = ref('')
-const CollapseChange = async (name) => {
-    ActiveKey.value = name
-    let names = []
-    if (name.length > 0) {
-        names = name[0] ? name[name.length - 1].split('-') : name[0]
-    }
-    if (names.length > 0) {
-        getOffsetTop(name);
-        const index = names[1]
-        const item = listDatas.value[index]
-        formKeyIds.value = item.pkeyId ? item.pkeyId + '' : ''
-        formparentId.value = item.parentId ? item.parentId + '' : ''
-        if (!item.isTableFormRender) {
-            //获取已填写的数据
-            await getBussDataInfo(item, item.pkeyId, index)
-            //按键key列表
-            const keys = await getHtmlBussColsApi(item.pkeyId)
-            //渲染表单
-            await getExcelHtml(item, index, keys)
-        }
-    } else {
-        getOffsetTop()
-        formKeyIds.value = ''
-    }
-}
-
-//获取按键切换输入框的key列表
-const getHtmlBussColsApi = async (pkeyId) => {
-    const pkeyIds = pkeyId ? pkeyId + '' : ''
-    if (pkeyIds) {
-        const {error, code, data} = await wbsApi.getHtmlBussCols({pkeyId: pkeyIds}, false)
-        if (!error && code === 200) {
-            let keys = getArrValue(data);
-            for (let i = 0; i < keys.length; i++) {
-                if (keys[i].length <= 0) {
-                    keys.splice(i, 1)
-                }
-            }
-            return keys;
-        } else {
-            return [];
-        }
-    }
-}
-
-//获取模板标签数据
-const formRegExpJson = ref({})
-const getExcelHtml = async (item, index, keys) => {
-    const pkeyIds = item.pkeyId ? item.pkeyId + '' : ''
-    if (pkeyIds) {
-        const {error, code, data} = await wbsApi.getExcelHtml({pkeyId: pkeyIds}, false)
-        const resData = isString(data) ? data || '' : ''
-        if (!error && code === 200 && resData) {
-            item.isTableForm = true
-            //渲染表单
-            HTableForm.createForm({
-                template: resData,
-                tableForm: formData.value[index],
-                keys: keys,
-                appId: `#table-form-${pkeyIds}`,
-                onRight: (event, KeyName) => {
-                    onRightClick(event, KeyName, index)
-                },
-                //表单正则效验
-                onBlur: (event, key, reg, val, msg, leng) => {
-                    setTableFormBlurReg(pkeyIds, event, key, reg, val, msg, item, index, leng)
-                }
-            })
-            item.isTableFormRender = true
-            item.isRenderTableForm = true
-            await nextTick(() => {
-                HTableForm.setByClassKeyup(keys)
-            })
-        } else {
-            item.isTableForm = false
-            item.isRenderTableForm = true
-            window?.$message?.warning('暂无表单')
-        }
-    } else {
-        item.isTableForm = false
-        item.isRenderTableForm = false
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//正则效验
-const setTableFormBlurReg = (pkeyId, event, key, reg, val, msg, item, index, leng) => {
-    const dom = document.getElementById(key)?.parentElement ?? ''
-    if (dom) {
-        if (val && reg) {
-            let regx = new RegExp(reg);
-            let state = regx.test(val);
-            if (state) {
-                delete formRegExpJson.value[pkeyId]
-                dom.style = ''
-            } else {
-                formRegExpJson.value[pkeyId] = {
-                    key,
-                    reg,
-                    val,
-                    msg,
-                    state,
-                    nodeName: item.nodeName,
-                    itemId: `item-${index}-${item?.pkeyId}`
-                }
-                dom.style = '--el-input-border-color: #fe0000; box-shadow: 0 0 0 2px #fe0000 inset;'
-                window?.$message?.warning(msg)
-            }
-        } else {
-            delete formRegExpJson.value[pkeyId]
-            dom.style = ''
-        }
-        /*let efficacyRegState = true, efficacyLengState = true;
-        //正则效验
-        if (val && reg) {
-            let regx = new RegExp(reg);
-            let state = regx.test(val);
-            console.log('reg:', reg)
-            console.log('val:', val)
-            console.log('state:', state)
-            if (!state) {
-                efficacyRegState = true
-            } else {
-                efficacyRegState = false
-                window?.$message?.warning(msg)
-            }
-        } else {
-            efficacyRegState = true
-        }
-        //校验字符长度
-        if (val && leng) {
-            const num = val.toString().length;
-            if (num > leng) {
-                efficacyLengState = false
-                window?.$message?.warning('长度不能超过' + leng)
-            } else {
-                efficacyLengState = true
-            }
-        } else {
-            efficacyLengState = true
-        }
-        //处理效验结果
-        if (efficacyRegState && efficacyLengState) {
-            delete formRegExpJson.value[pkeyId]
-            dom.style = ''
-        } else {
-            formRegExpJson.value[pkeyId] = {key, reg, val, msg, leng, state: efficacyRegState, lengState: efficacyLengState, nodeName: item.nodeName, itemId: `item-${index}-${item?.pkeyId}`}
-            dom.style = '--el-input-border-color: #fe0000; box-shadow: 0 0 0 2px #fe0000 inset;'
-        }*/
-    }
-}
-
-//获取已填写的数据
-const getBussDataInfo = async (item, pkeyId, index) => {
-    const pkeyIds = pkeyId ? pkeyId + '' : ''
-    if (pkeyIds) {
-        const {error, code, data} = await wbsApi.getBussDataInfo({
-            pkeyId: pkeyIds
-        }, false)
-        const resData = getObjNullValue(data)
-        if (!error && code === 200 && resData) {
-            HTableForm.setPickerKey(resData)
-            const InitObj = getFormDataInit(item, pkeyId) //有数据,关联数据
-            formData.value[index] = {...resData, ...InitObj, isCollapseLoad: true}
-        } else {
-            formData.value[index] = {...getFormDataInit(item, pkeyId), isCollapseLoad: true}
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//单个保存
-const tableFormSaveLoading = ref(false)
-const tableFormSaveClick = async (item, index) => {
-    if (isStatus.value !== '3') {
-        const res = await saveExcelBussData(item, index)
-        if (res) {
-            await getBussPdfInfo(item)
-            renewData()
-        }
-    } else {
-        window?.$message?.warning('已上报的资料,不允许保存。')
-    }
-}
-
-//保存表单数据
-const saveExcelBussData = async (item, index, showTip = true) => {
-    const isRegExp = !!getObjNullValue(formRegExpJson.value)
-    if (!isRegExp) {
-        tableFormSaveLoading.value = true
-        const InitObj = getFormDataInit(item, item.pkeyId)
-        const {error, code} = await wbsApi.saveExcelBussData({
-            ...formData.value[index],
-            ...InitObj
-        })
-        //处理数据
-        tableFormSaveLoading.value = false
-        if (!error && code === 200) {
-            if (showTip) window?.$message?.success('保存成功')
-            return true
-        } else {
-            return false
-        }
-    } else {
-        window?.$message?.warning('请先修改完红色输入框的数据')
-        return false
-    }
-}
-
-//预览PDF
-const getBussPdfInfo = async (item, showTip = true) => {
-    const pkeyIds = item.pkeyId ? item.pkeyId + '' : ''
-    if (pkeyIds) {
-        const {error, code, data} = await wbsApi.getBussPdfInfo({
-            pkeyId: pkeyIds
-        }, false)
-        if (!error && code === 200) {
-            if (data) {
-                window.open(data, '_blank')
-            } else if (showTip) {
-                window?.$message?.warning('PDF错误')
-            }
-        } else {
-            if (showTip) {
-                window?.$message?.warning(data.msg || '获取PDF失败')
-            }
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//删除本表
-const delClick = async (item) => {
-    const pkeyIds = item.pkeyId ? item.pkeyId + '' : ''
-    if (pkeyIds) {
-        if (isStatus.value !== '3') {
-            const {error, code} = await wbsApi.removeBussTabInfo({
-                pkeyid: pkeyIds,
-                classify: classify.value,
-            })
-            if (!error && code === 200) {
-                window?.$message?.success('操作成功')
-                renewData()
-            }
-        } else {
-            window?.$message?.warning('已上报的资料,不允许删除')
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-//复制本表弹窗
-const CopyModal = ref(false);
-const CopyModalType = ref('1');
-const treeLoading = ref(false);
-const copyModalTable = ref([])
-const insertDataShow = ref(false);
-//类型tab数据和相关处理
-const tabTypeKey = ref('2')
-const tabTypeTab = ref([
-    {key: '1', name: '试验记录表'},
-    {key: '2', name: '试验报告单'},
-]);
-let placeholderType = ref('试验报告单')
-const tabTypeChange = ({key}) => {
-    tabTypeKey.value = key
-    if (tabTypeKey.value === '1') {
-        placeholderType = '试验记录表'
-    } else {
-        placeholderType = '试验报告单'
-    }
-
-    getSearchNodeTables()
-
-}
-const insertDataTableLoading = ref(false)
-const insertDataTableColumn = ref(
-    [{key: 'key_12__3_1', name: '数据名称'}],
-)
-const insertDataTable = ref([])
-const multipleSelection = ref([])
-const insertDataTableCheck = (val) => {
-    multipleSelection.value = val
-}
-//分页
-const insertDataPage = ref({current: 1, size: 20, total: 0})
-const insertDataPageChange = ({current, size}) => {
-    insertDataPage.value.current = current
-    insertDataPage.value.size = size
-    // getDialogTableData()
-}
-
-const testReportId = ref('');
-const testReportData = ref([])
-let checPkd = ref('')
-const testReportIdchange = (key) => {
-    testReportData.value.forEach((item) => {
-        if (item.id = key) {
-            checPkd.value = item.pKeyId
-        }
-    })
-
-    getBussddataInfotrialData()
-}
-//树相关变量
-// const primaryKeyId = ref('')
-const nodeItemInfo = ref({})
-const nodeDataInfo = ref({})
-//树加载完成
-const ElTreeNodeLoading = () => {
-    treeLoading.value = false
-}
-
-//获取数据列表
-const ListItemLoading = ref(false);
-const checked1 = ref(true)
-const searchNodeAllTable = async () => {
-    copyModalTable.value = []
-    const info = nodeDataInfo.value;
-    ListItemLoading.value = true
-    const {error, code, data} = await wbsApi.searchNodeAllTable({
-        projectId: projectId.value,
-        contractId: contractId.value,
-        primaryKeyId: info['primaryKeyId'],
-        type: authBtnTabKey.value
-    })
-    //处理数据
-    ListItemLoading.value = false
-    if (!error && code === 200) {
-        copyModalTable.value = getArrValue(data);
-        copyModalTable.value.forEach((item) => {
-            item.isCheck = false
-        })
-    } else {
-        copyModalTable.value = []
-    }
-}
-const getTableDataAll = () => {
-    searchNodeAllTable()
-}
-
-//树被点击
-const wbsElTreeClick = ({node, data, keys}) => {
-    nodeItemInfo.value = node
-    nodeDataInfo.value = data
-    getTableDataAll();
-}
-const copyClickLoading = ref(false)
-//复制本表
-const copyClick = async (item, index) => {
-    // CopyModal.value=true;
-    // const copyModalTable=ref([])
-
-    if (item.pkeyId) {
-        if (isStatus.value !== '3') {
-            copyClickLoading.value = true
-            if (!item.isRenderTableForm) {
-                await copeBussTab(item.pkeyId + '')
-            } else if (!item.isTableForm) {
-                window?.$message?.warning('暂无表单数据')
-            } else if (item.isRenderTableForm) {
-                const res = await saveExcelBussData(item, index, false)
-                if (res) {
-                    await copeBussTab(item.pkeyId + '')
-                } else {
-                    window?.$message?.warning('复制本表操作失败')
-                }
-            } else {
-                window?.$message?.warning(`数据异常了, isRenderTableForm: ${item.isRenderTableForm}, isTableForm: ${item.isTableForm}, pkeyIds:${item.pkeyId}`)
-            }
-        } else {
-            window?.$message?.warning('已上报的资料,不允许复制')
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//勾选复制本表
-const copyModalTableCheck = async (item) => {
-    console.log('复制本表', item);
-}
-const copeBussTab = async (pkeyIds) => {
-    const {error, code} = await wbsApi.copeBussTab({
-        pkeyId: pkeyIds
-    })
-    if (!error && code === 200) {
-        window?.$message?.success('操作成功')
-        renewData()
-    }
-}
-
-
-//隐藏本表
-const hideClick = async (item) => {
-    const pkeyIds = item.pkeyId ? item.pkeyId + '' : ''
-    if (pkeyIds) {
-        if (isStatus.value !== '3') {
-            const isBussShow = item['isBussShow'] === 2 ? 1 : 2 //状态(1显示 2隐藏)
-            const {error, code} = await wbsApi.showBussTab({
-                pkeyId: pkeyIds,
-                status: isBussShow
-            })
-            if (!error && code === 200) {
-                window?.$message?.success('操作成功')
-                renewData()
-            }
-        } else {
-            window?.$message?.warning('已上报的资料,不允许隐藏')
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//预览
-const previewClick = async (item, index) => {
-    await getBussPdfInfo(item)
-}
-
-//上传变量
-const uploadModal = ref(false)
-const fileListData = ref([]);
-const uploadData = ref({})
-
-//上传被点击
-const uploadClick = (item, index) => {
-    const pkeyIds = item.pkeyId ? item.pkeyId + '' : ''
-    const keyName = `item-${index}-${pkeyIds}`
-    if (pkeyIds) {
-        if (isStatus.value !== '3' && item.isTableForm) {
-            uploadModal.value = true
-            uploadData.value = getFormDataInit(item, pkeyIds)
-            //获取文件列表
-            getBussFileList(pkeyIds)
-        } else if (!item.isRenderTableForm) {
-            CollapseChange([keyName])
-            window?.$message?.warning('请再次点击上传')
-        } else if (!item.isTableForm) {
-            window?.$message?.warning('暂无表单数据')
-        } else {
-            window?.$message?.warning('已上报的资料,不允许上传')
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-
-//获取文件列表
-const getBussFileList = async (pkeyId) => {
-    const {error, code, data} = await wbsApi.getBussFileList({
-        pkeyid: pkeyId
-    })
-    if (!error && code === 200) {
-        fileListData.value = getArrValue(data)
-    } else {
-        fileListData.value = []
-    }
-}
-
-//上传文件
-const uploadChange = async ({type}) => {
-    if (type === 'success') {
-        uploadModal.value = false
-        renewData()
-    } else if (type === 'del') {
-        renewData()
-    }
-}
-
-//相关变量
-const tableFormItemNode = ref({})
-
-//菜单数据
-const tableFormMenu = ref([])
-
-//设置菜单权限数据
-const setTableFormMenu = (info) => {
-    const infos = getObjValue(info)
-    const isOpen = infos['isOpenRandomNumber'] ?? 0
-    let newArr = []
-    if (isOpen === 1) {
-        newArr.push({label: '插入设计值/频率', key: "IDVF"})
-    }
-    //newArr.push({label: '插入设计值/频率', key: "IDVF"})
-    newArr.push({label: '插入特殊字符', key: "special"})
-    newArr.push({label: '关联试验数据', key: "CTD"}),
-        newArr.push({label: '关联试验文件', key: "file"}),
-        newArr.push({label: '公式参数', key: "formula"})
-    tableFormMenu.value = newArr
-}
-
-
-//鼠标右键事件
-const contextMenuRef = ref(null)
-const onRightClick = (event, KeyName, index) => {
-    console.log(KeyName, 'KeyName');
-    //取光标位置
-    const specialDom = document.getElementById(KeyName + "")
-    const startPos = specialDom?.selectionStart || 0
-    const endPos = specialDom?.selectionEnd || 0
-    //存储临时信息
-    tableFormItemNode.value = {KeyName, index, startPos, endPos, pkeyId: formKeyIds.value}
-    contextMenuRef.value?.showMenu(event) //展开菜单
-}
-const formulaModal = ref(false)
-const formulaModalinfo = ref({
-    type: ''
-})
-//鼠标右键菜单被点击
-const handleMenuSelect = ({key}) => {
-    if (key === 'IDVF') {
-        IDVFModal.value = true
-    } else if (key === 'special') {
-        specialModalShow()
-    } else if (key === 'CTD') {
-        CTDModal.value = true
-        CTDbetweenTime.value = []
-        CTDdialogTableData1.value = []
-    } else if (key === 'file') {
-        fileModal.value = true;
-        fileModalradio.value = 1
-        filedialogTableData.value = []
-
-    } else if (key === 'formula') {
-        formulaModal.value = true
-        console.log(tableFormItemNode.value, 'tableFormItemNode.value');
-        getPanel()
-    }
-}
-//获取公式面板数据
-const getPanel = async () => {
-    const pkeyIds = formKeyIds.value
-    if (pkeyIds) {
-        const {error, code, data} = await wbsApi.queryPanel({
-            key: tableFormItemNode.value['KeyName'],
-            contractId: contractId.value,
-            parentId: formparentId.value,
-            pkeyId: pkeyIds,
-
-        }, false)
-
-        if (!error && code === 200) {
-            componentDetail.value = getObjNullValue(data)
-            formulaModalinfo.value.type = componentDetail?.value.info?.data || ''
-        } else {
-            componentDetail.value = []
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-const PanelSaveClick = async (item, index) => {
-    const {res, error, code} = await wbsApi.savePanel({
-        parentId: formparentId.value,
-        key: tableFormItemNode.value['KeyName'],
-        contractId: contractId.value,
-        value: formulaModalinfo?.value?.type,
-        pkeyId: tableFormItemNode.value?.pkeyId,
-        scope: componentDetail?.value['scope'],
-        code: componentDetail?.value?.info['code'],
-    })
-    if (!error && code === 200) {
-        window?.$message?.success('操作成功')
-        formulaModal.value = false;
-    }
-
-
-}
-//插入设计值
-const IDVFModal = ref(false)
-const formIDVFRef = ref(null)
-const formIDVFModel = ref({type: 1, design: '', size: '', dev: '', key: '', capacity: '', pass: '', pkId: ''})
-
-
-//插入特殊字符
-const specialModal = ref(false)
-const specialCharacters = ref([
-    '&#57344;', "&#57345;", "&#57346;", "&#57347;", '&#8804;', '&#8805;', '&#8451;',
-    '&#9312;', '&#9313;', '&#9314;', '&#9315;', '&#9316;', '&#9317;', '&#9318;', '&#9319;', '&#9320;', '&#9321;', '&#9322;', '&#9323;',
-    '&#9324;', '&#9325;', '&#9326;', '&#9327;', '&#9328;', '&#9329;', '&#9330;', '&#9331;',
-    "&#8544;", "&#8545;", "&#8546;", "&#8547;", "&#8548;", "&#8549;", "&#8550;", "&#8551;", "&#8552;", "&#8553;", "&#8554;", "&#8555;", "K̅"
-])
-
-//输入框验证
-const specialFormRef = ref(null)
-const specialFormModel = ref({val: ''})
-const specialFormRules = {
-    val: {
-        required: true,
-        trigger: "blur",
-        message: "请选择特殊字符代码"
-    }
-}
-//显示插入特殊字符
-const specialRef = ref(null)
-const specialModalShow = () => {
-    specialFormModel.value.val = ''
-    specialModal.value = true
-    nextTick(() => {
-        specialRef.value?.focus();
-    })
-}
-//失去焦点
-const specialPos = ref({start: 0, end: 0})
-const specialInputBlur = (e) => {
-    specialPos.value = {
-        start: e?.target?.selectionStart || 0,
-        end: e?.target?.selectionEnd || 0
-    }
-}
-//点击符号
-const specialClick = (event) => {
-    const text = event?.target?.innerText ?? ''
-    const start = specialPos.value.start
-    const end = specialPos.value.end
-    const form = specialFormModel.value.val
-    specialFormModel.value.val = setPosInsert(start, end, form, text)
-    specialRef.value?.focus();
-    let posVal = start + text.length;
-    nextTick(() => {
-        setPosRange('specialId', posVal)
-    })
-}
-
-//确认插入
-const specialNodeClick = async () => {
-    const res = await formValidate(specialFormRef.value)
-    if (res) {
-        const item = tableFormItemNode.value
-        const form = formData.value[item.index]
-        const val = specialFormModel.value.val ?? ''
-        formData.value[item.index][item.KeyName] = setPosInsert(item.startPos, item.endPos, form[item.KeyName], val)
-        specialModal.value = false
-        specialRef.value?.focus();
-        let posVal = item.startPos + val.length;
-        nextTick(() => {
-            setPosRange(item.KeyName, posVal)
-        })
-    }
-}
-
-//关联试验数据
-const CTDModal = ref(false)
-//树形结构异步加载数据
-const defaultExpandedCids = ref([])
-//自动展开缓存
-const CTDTreeAutoExpandKeys = ref(getStoreValue('CTDElTreeExpandKeys') || [])
-const dialogTableRef = ref(null)
-const dialogTableRef1 = ref(null)
-const dialogTableRef2 = ref(null)
-
-const ElTreeProps = ref({
-    label: 'title',
-    children: 'children',
-    isLeaf: 'hasChildren'
-})
-const ElTreeLoadNode = async (node, resolve) => {
-    let parentId = '0';
-    if (node.level !== 0) {
-        parentId = node?.data?.id
-    }
-    //获取数据
-    const {error, code, data} = await samplingApi.queryLazyTree({
-        wbsId: wbsTempId.value,
-        tenantId: tenantId.value,
-        projectId: projectId.value,
-        parentId,
-        wbsType: wbsType.value
-    })
-    //处理数据
-    if (!error && code === 200) {
-        let clickKey = '', defaultExpandedArr = [];
-        const keys = CTDTreeAutoExpandKeys.value || []
-        const resData = getArrValue(data)
-        for (let i = 0; i < resData.length; i++) {
-            resData[i].hasChildren = !resData[i].hasChildren
-        }
-        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
-        if (node.level === 0) {
-            emit('nodeLoading')
-            if (resData.length <= 0) {
-                window?.$message?.warning('该项目未使用试验系统,无法获取数据')
-            }
-        }
-        resolve(resData)
-
-        //最后一个,执行点击
-        if (clickKey) {
-            await nextTick(() => {
-                // document.getElementById(`${idPrefix.value}${clickKey}`)?.click()
-            })
-        }
-    } else {
-        if (node.level === 0) {
-            emit('nodeLoading')
-        }
-        resolve([])
-    }
-}
-//节点被点击
-const CTDnodeItemInfo = ref({})
-const CTDnodeDataInfo = ref({})
-const CTDdialogTableData1 = ref([])
-const filedialogTableData = ref([])
-//多选
-const filetableCheckedKeys = ref([]);
-const filedialogTableSelection1 = (rows) => {
-    filetableCheckedKeys.value = rows.filter((item) => {
-        return (item ?? '') !== '';
-    })
-}
-const filedialogTableSelection = (rows) => {
-    filetableCheckedKeys.value = rows.filter((item) => {
-        return (item ?? '') !== '';
-    })
-}
-//确认关联试验文件
-const savefileModal = () => {
-    const idarr = []
-    filetableCheckedKeys.value.forEach((item) => {
-        idarr.push(item.id)
-    })
-    const idval = idarr.join(',')
-    savesubmitRelationFile(idval)
-    fileModal.value = false
-}
-const CTDdialogTableColumn = ref([
-    {key: 'reportNo', name: '报告编号'},
-    {key: 'reportDate', name: '报告日期'},
-    {key: 'projectPositionName', name: '工程用途及部位'},
-    {key: 'detectionResultName', name: '检测结果'},
-])
-const filedialogTableColumn = ref([
-    // reportNo
-    {key: 'reportNo', name: '报告编号'},
-    {key: 'reportDate', name: '报告日期'},
-    {key: 'projectPositionName', name: '工程用途及部位'},
-    {key: 'detectionResultName', name: '检测结果'},
-])
-const filedialogTableColumn1 = ref([
-    // reportNo
-    {key: 'reportNo', name: '报告编号'},
-    {key: 'reportDate', name: '报告日期'},
-    {key: 'projectPosition', name: '工程用途及部位'},
-    {key: 'detectionResultName', name: '检测结果'},
-])
-const CTDElTreeClick = (data, node, keys) => {
-    CTDnodeItemInfo.value = node
-    CTDnodeDataInfo.value = data
-    getNodeData()
-    //缓存展开的节点
-    CTDTreeAutoExpandKeys.value = keys.value || []
-    setStoreValue('CTDElTreeExpandKeys', keys.value)
-
-}
-//获取试验树节点下的记录信息
-const getNodeData = async () => {
-    //获取数据
-    CTDdialogTableLoading.value = true
-    const {error, code, data} = await samplingApi.gettrialPage({
-        contractId: contractId.value,
-        nodeId: CTDnodeDataInfo.value.primaryKeyId,
-        current: CTDsearchFormPage.value.current,
-        size: CTDsearchFormPage.value.size,
-        startTime: CTDsearchFormPage.value.startTime,
-        endTime: CTDsearchFormPage.value.lastTime,
-    })
-    //处理数据
-    if (!error && code === 200) {
-        CTDdialogTableData1.value = getArrValue(data['records'])
-        CTDsearchFormPage.value.total = data.total || 0
-        CTDdialogTableLoading.value = false
-    } else {
-        CTDdialogTableData1.value = []
-        CTDsearchFormPage.value.total = 0
-        CTDdialogTableLoading.value = false
-    }
-}
-//试验文件节点下的数据
-const getfileNodeData = async () => {
-    //获取数据
-    filedialogTableLoading.value = true
-    const {error, code, data} = await samplingApi.gettrialPage({
-        contractId: contractId.value,
-        nodeId: filenodeDataInfo.value.primaryKeyId,
-        current: filesearchFormPage.value.current,
-        size: filesearchFormPage.value.size,
-        startTime: filesearchFormPage.value.startTime,
-        endTime: filesearchFormPage.value.lastTime,
-        qualityTestPKeyId: isPrimaryKeyId.value
-    })
-    //处理数据
-    if (!error && code === 200) {
-        filedialogTableData.value = getArrValue(data['records'])
-        filesearchFormPage.value.total = data.total || 0
-        filedialogTableLoading.value = false
-        let defaultarr = []
-        filedialogTableData.value.forEach((item) => {
-            if (item.isSelectedStatus === 1) {
-                defaultarr.push(item)
-            }
-            tabtoggleSelection(defaultarr)
-        })
-
-    } else {
-        filedialogTableData.value = []
-        filesearchFormPage.value.total = 0
-        filesearchFormPage.value = false
-    }
-}
-
-const tabtoggleSelection = (rows) => {
-    if (rows) {
-        rows.forEach(row => {
-            nextTick(() => {
-                dialogTableRef1.value?.toggleRowSelection(row, true);
-            })
-        });
-    } else {
-        dialogTableRef1.value?.clearSelection();
-
-    }
-}
-const outtabtoggleSelection = (rows) => {
-    if (rows) {
-        rows.forEach(row => {
-            nextTick(() => {
-                dialogTableRef2.value?.toggleRowSelection(row, true);
-            })
-        });
-    } else {
-        dialogTableRef2.value?.clearSelection();
-    }
-}
-const thirdtabtoggleSelection = (rows) => {
-    console.log(rows, 'rows');
-    if (rows) {
-        rows.forEach(row => {
-            nextTick(() => {
-                if (fileModalradio.value == 2) {
-                    dialogTableRef2.value?.toggleRowSelection(row, true);
-                } else {
-                    dialogTableRef.value?.toggleRowSelection(row, true);
-                }
-            })
-        });
-    } else {
-        if (fileModalradio.value == 2) {
-            dialogTableRef2.value?.clearSelection();
-        } else {
-            dialogTableRef.value?.clearSelection();
-        }
-    }
-}
-//获取试验表中的data数据接口:
-const getBussddataInfotrialData = async () => {
-    insertDataTableLoading.value = true;
-    console.log(checPkd.value, 'checPkd.value');
-    const {error, code, data} = await dataApi.getBussddataInfotrialList({
-        // id:testReportId.value,
-        id: currowid.value,
-        pkeyId: testReportId.value,
-    })
-
-    insertDataTableLoading.value = false
-    if (!error && code === 200) {
-        // insertDataTable.value = getArrValue(data)
-        let arrobj = getObjValue(data)
-        let arr = []
-        for (var key of Object.keys(arrobj)) {
-            arr.push({
-                key: key,
-                value: arrobj[key]
-            })
-        }
-        insertDataTable.value = arr
-
-    } else {
-        insertDataTable.value = []
-
-    }
-
-}
-
-//保存试验节点数据
-
-//取消关联数据
-const cancelinsertData = async () => {
-    insertDataShow.value = false
-
-}
-//确定关联试验数据数据
-const submitinsertData = async () => {
-    if (multipleSelection.value.length > 0) {
-        const item = tableFormItemNode.value
-        const form = formData.value[item.index]
-        const val = []
-        multipleSelection.value.forEach((item) => {
-            val.push(item['value'])
-        })
-        const newval = val.join('、')
-        formData.value[item.index][item.KeyName] = setPosInsert(item.startPos, item.endPos, form[item.KeyName], newval)
-        insertDataShow.value = false
-        CTDModal.value = false
-        let posVal = item.startPos + newval.length;
-        nextTick(() => {
-            setPosRange(item.KeyName, posVal)
-        })
-    } else {
-        window?.$message?.warning('请选择你要关联的数据')
-    }
-}
-//公式参数配置
-const saveformulaModal = () => {
-    console.log('保存');
-}
-//节点被点击
-const ElTreeClick = async (data, node) => {
-    console.log(data, mode);
-    let autoKeysArr = []
-    await getNodeExpandKeys(node, autoKeysArr)
-    const autoKeys = autoKeysArr.reverse()
-    emit('nodeTap', {node, data, keys: autoKeys})
-}
-//处理自动展开的节点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 CTDbetweenTime = ref([])
-const filebetweenTime = ref([])
-//搜索表单
-const CTDsearchFormPage = ref({
-    startTime: null, lastTime: null, wbsId: null, current: 1, size: 20, total: 0
-})
-const filesearchFormPage = ref({
-    startTime: null, lastTime: null, wbsId: null, current: 1, size: 20, total: 0
-})
-const CTDsearchFormPageChange = ({current, size}) => {
-    CTDsearchFormPage.value.current = current
-    CTDsearchFormPage.value.size = size
-    // getDialogTableData()
-}
-const filesearchFormPageChange = ({current, size}) => {
-    filesearchFormPage.value.current = current
-    filesearchFormPage.value.size = size
-    // getDialogTableData()
-}
-const CTDbetweenTimeUpdate = ({arr, query}) => {
-    CTDbetweenTime.value = arr
-    CTDsearchFormPage.value.startTime = arr[0]
-    CTDsearchFormPage.value.lastTime = arr[1]
-}
-const filebetweenTimeUpdate = ({arr, query}) => {
-    filebetweenTime.value = arr
-    filesearchFormPage.value.startTime = arr[0]
-    filesearchFormPage.value.lastTime = arr[1]
-}
-//搜索
-const CTDsearchClick = () => {
-    CTDsearchFormPage.value.current = 1;
-    getNodeData()
-}
-const filesearchClick = () => {
-    filesearchFormPage.value.current = 1;
-    getfileNodeData()
-}
-const CTDdialogTableLoading = ref(false)
-const filedialogTableLoading = ref(false)
-const insertDataSelectoading = ref(false)
-const CTDdialogTableKeys = ref([])
-
-const currowid = ref('')
-//名称被点击
-const CTDtableRowName = (row) => {
-    currowid.value = row.id
-    insertDataShow.value = true
-    getSearchNodeTables()
-}
-const getSearchNodeTables = async () => {
-    insertDataSelectoading.value = true
-    const {error, code, data} = await dataApi.searchNodeTables({
-        id: currowid.value,
-        projectId: projectId.value,
-        contractId: contractId.value,
-        primaryKeyId: CTDnodeDataInfo.value.primaryKeyId,
-        // type: authBtnTabKey.value,
-        tableType: tabTypeKey.value
-    })
-    //处理数据
-    insertDataSelectoading.value = false
-    if (!error && code === 200) {
-        testReportData.value = getArrValue(data)
-        if (testReportData.value.length > 0) {
-            testReportId.value = testReportData.value[0].pKeyId
-            getBussddataInfotrialData()
-        }
-    } else {
-        testReportData.value = []
-
-    }
-}
-
-//关联试验文件
-const fileModal = ref(false)
-const fileModalradio = ref(1)
-const radioChange = (val) => {
-    if (val !== 1) {
-        getthirdTreeDatas(val)
-    }
-}
-//获取试验文件树树数据
-const fileModaltreeDatas = ref([])
-//节点被点击
-//节点被点击
-const filenodeItemInfo = ref({})
-const filenodeDataInfo = ref({})
-const fileTableData1 = ref([])
-const fileTableColumn = ref([
-    {key: 'recordNo', name: '报告编号'},
-    {key: 'reportDate', name: '报告日期'},
-    {key: 'projectPositionName', name: '工程用途及部位'},
-    {key: 'detectionResultName', name: '检测结果'},
-])
-
-const fileModalElTreeClick = async (data, node) => {
-    filenodeItemInfo.value = node
-    filenodeDataInfo.value = data
-    getfileNodeData()
-}
-
-//获取第三方树试验文件
-
-//获取树数据
-const thirdtreeDatas = ref([])
-const thirdElTreeProps = ref({
-    label: 'nodeName',
-    children: 'children',
-    isLeaf: 'hasChildren'
-})
-const getthirdTreeDatas = async (type) => {
-    const {error, code, data} = await getTreeAll({
-        projectId: projectId.value,
-        contractId: contractId.value
-    })
-    if (!error && code === 200) {
-        if (type == 2) {
-            thirdtreeDatas.value = getArrValue(data['rightTree'])
-        } else {
-            thirdtreeDatas.value = getArrValue(data['leftTree'])
-        }
-
-
-    } else {
-        thirdtreeDatas.value = []
-    }
-}
-const thirdfilenodeItemInfo = ref({})
-const thirdfilenodeDataInfo = ref({})
-//获取第三方树节点下的数据
-const getthirdTreetavleDatas = async () => {
-    filedialogTableLoading.value = true
-    const {error, code, data} = await thirdApi.queryPage({
-        projectId: projectId.value,
-        contractId: contractId.value,
-        nodeId: thirdfilenodeDataInfo.value.id,
-        current: filesearchFormPage.value.current,
-        size: filesearchFormPage.value.size,
-        startTime: filesearchFormPage.value.startTime,
-        endTime: filesearchFormPage.value.lastTime,
-        qualityTestPKeyId: isPrimaryKeyId.value
-
-
-    })
-    //处理数据
-    if (!error && code === 200) {
-        filedialogTableData.value = getArrValue(data['records'])
-        filesearchFormPage.value.total = data.total || 0
-        filedialogTableLoading.value = false
-        if (filedialogTableData.value.length > 0) {
-            let defaultarr = []
-            filedialogTableData.value.forEach((item) => {
-                if (item.isSelectedStatus === 1) {
-                    defaultarr.push(item)
-
-                }
-                if (fileModalradio === 2) {
-                    outtabtoggleSelection(defaultarr)
-                } else {
-                    thirdtabtoggleSelection(defaultarr)
-                }
-
-            })
-        }
-    } else {
-        filedialogTableData.value = []
-        filesearchFormPage.value.total = 0
-        filesearchFormPage.value = false
-    }
-    filedialogTableLoading.value = false
-}
-const thirdtreeDatasElTreeClick = (data, node) => {
-    thirdfilenodeItemInfo.value = node
-    thirdfilenodeDataInfo.value = data
-    getthirdTreetavleDatas()
-}
-//关联试验文件
-const savesubmitRelationFile = async (ids) => {
-    console.log(isPrimaryKeyId.value, ' isPrimaryKeyId.value');
-    const {error, code, data} = await samplingApi.submitRelationFile({
-        projectId: projectId.value,
-        contractId: contractId.value,
-        nodeId: isPrimaryKeyId.value,
-        type: fileModalradio.value,
-        ids
-    })
-    if (!error && code === 200) {
-        window?.$message?.success('操作成功')
-    }
-}
-//设计值频率计算
-const IDVFModalSaveClick = async () => {
-    const {pkeyId, KeyName, index} = tableFormItemNode.value
-    if (pkeyId) {
-        const {design, size} = formIDVFModel.value
-        const {error, code, data} = await wbsApi.queryFormulaRange({
-            ...formIDVFModel.value,
-            // dev: (!design && !size) ? '±5': '',
-            key: KeyName,
-            pkId: pkeyId,
-
-        })
-        //处理数据
-        const res = getObjNullValue(data)
-        if (!error && code === 200 && res) {
-            Object.keys(data).forEach(key => {
-                formData.value[index][key] = data[key]
-            })
-            IDVFModal.value = false
-        }
-    } else {
-        window?.$message?.warning('pkeyId为空')
-    }
-}
-const closeIDVFModal = () => {
-    IDVFModal.value = false
-    formIDVFModel.value = {type: 1, design: '', size: '', dev: '', key: '', capacity: '', pass: '', pkId: ''}
-}
-//事件
-const emit = defineEmits(['renew', 'offsetTop'])
-
-//被点击
-const getOffsetTop = (key = '') => {
-    if (key) {
-        const dom = document.getElementById(key[key.length - 1])
-        if (!drawType.value) {
-            if (dom?.offsetTop >= 583 && ActiveKey.value.length > 1) {
-                const barWidth = menuBarShow.value ? 36 : 0;
-                emit('offsetTop', dom?.offsetTop - 583 + barWidth)
-            } else {
-                emit('offsetTop', dom?.offsetTop)
-            }
-        } else {
-            if (dom.offsetTop >= 424 && ActiveKey.value.length > 1) {
-                const barWidth = menuBarShow.value ? 18 : 0;
-                emit('offsetTop', dom?.offsetTop - 424 - barWidth)
-            } else {
-                emit('offsetTop', dom?.offsetTop)
-            }
-        }
-
-    } else {
-        emit('offsetTop', 0)
-    }
-    ActiveKey.value = ActiveKey.value[ActiveKey.value.length - 1]
-}
-
-//通知数据更新
-const renewData = () => {
-    emit('renew')
-    ActiveKey.value = []
-}
-
-//获取表单数据
-const getFormData = () => {
-    const formArr = formData.value;
-    return formArr.filter((item) => {
-        return (item.pkeyId ?? '') !== '' && item.isCollapseLoad;
-    })
-}
-
-//获取表单效验数据
-const getFormRegExpJson = () => {
-    return deepClone(formRegExpJson.value);
-}
-
-//获取当前展开项
-const getActiveKey = () => {
-    return ActiveKey.value;
-}
-
-//设置当前展开项
-const setActiveKey = (key) => {
-    return ActiveKey.value = key;
-}
-
-//名称被点击
-const tableRowName = (row) => {
-    console.log(row, 'row');
-    //如果 evisaPdfUrl 不为空,使用evisaPdfUrl,反之使用pdfUrl
-    // if (row['evisaPdfUrl']) {
-    //     window.open(row['evisaPdfUrl'],'_blank')
-    // } else if (row['pdfUrl']) {
-    //     window.open(row['pdfUrl'],'_blank')
-    // } else {
-    //     window.$message?.warning('文件不存在')
-    // }
-}
-// 暴露出去
-defineExpose({
-    getFormData,
-    getFormRegExpJson,
-    getActiveKey,
-    setActiveKey
-})
-</script>
-
-<style lang="scss" scoped>
-table {
-    width: 100%;
-}
-.data-fill-list-box {
-    position: relative;
-    //margin-bottom: 25%;
-    .hc-collapse-item-header {
-        flex: 1;
-        position: relative;
-        margin-left: 46px;
-        display: flex;
-        align-items: center;
-        .item-title {
-            flex: 1;
-            position: relative;
-            user-select: none;
-            color: #50545E;
-            font-size: 16px;
-            font-weight: 400;
-            cursor: pointer;
-        }
-        .hc-extra-text-box {
-            position: relative;
-            padding-right: 24px;
-        }
-    }
-    .data-fill-list-item-content {
-        position: relative;
-        display: flex;
-        height: calc(100vh - 386px);
-        .data-fill-table-form-box {
-            position: relative;
-            padding: 24px 20px;
-            height: 100%;
-            overflow: auto;
-            flex: 1;
-            border: 8px solid #50545E;
-
-            .hc-no-table-form {
-                position: relative;
-                height: 100%;
-                display: flex;
-                justify-content: center;
-                align-items: center;
-
-                .table-form-no {
-                    position: relative;
-                    img {
-                        width: 350px;
-                    }
-                    .desc {
-                        text-align: center;
-                        font-size: 20px;
-                        color: #aaa;
-                    }
-                }
-            }
-        }
-        .data-fill-table-tip-box {
-            width: 240px;
-            position: relative;
-            border-left: 1px solid #E9E9E9;
-            padding: 20px 15px 80px;
-            .tip-title {
-                font-size: 16px;
-                margin-bottom: 10px;
-                display: flex;
-                align-items: center;
-            }
-            .tip-item {
-                margin-bottom: 20px;
-            }
-            .table-tip-foot {
-                position: absolute;
-                bottom: 15px;
-                right: 0;
-                left: 0;
-                display: flex;
-                align-items: center;
-                padding: 0 15px;
-                .tip-left-btn {
-                    flex: 1;
-                    .dow-text {
-                        cursor: pointer;
-                        display: flex;
-                        align-items: center;
-                    }
-                }
-            }
-        }
-    }
-}
-.special-box {
-    position: relative;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    border: 1px solid #eee;
-    border-radius: 3px;
-    height: 52px;
-    width: 52px;
-    cursor: pointer;
-    user-select: none;
-    transition: color .3s, background-color .3s;
-    &:hover {
-        color: var(--el-color-primary);
-        background-color: var(--el-color-primary-light-8);
-    }
-    .font-EUDC {
-        font-size: 22px;
-    }
-}
-.radio-group-box {
-    text-align: center;
-}
-</style>
-
-<style lang="scss">
-.data-fill-list-box {
-    .el-collapse {
-        --el-collapse-header-height: 60px;
-        border: 0;
-        .el-collapse-item {
-            margin: 0 0 16px;
-            background-color: #f1f5f8;
-            border: 1px solid #E9E9E9;
-            border-radius: 4px;
-        }
-        .el-collapse-item__header {
-            background-color: transparent;
-            font-weight: 400;
-            border-bottom: 0;
-            cursor: default;
-            font-size: 14px;
-            .el-collapse-item__arrow {
-                position: absolute;
-                color: #50545E;
-                cursor: pointer;
-                left: 20px;
-                margin: 0;
-            }
-        }
-        .el-collapse-item.is-active .el-collapse-item__header.is-active {
-            background-color: #E7EEF4;
-        }
-        .el-collapse-item__wrap {
-            background-color: transparent;
-            border-bottom: 0;
-            .el-collapse-item__content {
-                position: relative;
-                padding-bottom: 0;
-                font-size: 14px;
-                color: #50545E;
-                line-height: initial;
-            }
-        }
-    }
-}
-
-//插入特殊字符弹窗的输入框
-.data-fill-list-box .data-fill-table-form-box td,
-.data-fill-list-box .data-fill-table-form-box td .el-input .el-input__wrapper .el-input__inner,
-.el-form-item.special-form-item .el-form-item__content .el-input .el-input__wrapper .el-input__inner {
-    font-family: "EUDC", 宋体, v-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
-}
-//复制本表弹窗
-.copy-node-many-box {
-    position: relative;
-    height: 53vh;
-    display: flex;
-    margin-top: 24px;
-    margin-bottom: -30px;
-    border-top: 1px solid #efeff5;
-    .copy-node-many-tree {
-        position: relative;
-        flex: 1;
-        height: 100%;
-        padding: 20px 20px 20px 0;
-        border-right: 1px solid #efeff5;
-    }
-    .copy-node-many-table {
-        position: relative;
-        flex: 1;
-        height: 100%;
-        padding: 20px 0 20px 20px;
-    }
-}
-
-//关联试验数据
-.adding-form-dialog-box {
-    position: relative;
-    height: 100%;
-    display: flex;
-    .dialog-tree-box {
-        position: relative;
-        border-right: 1px solid #EEEEEE;
-        width: 500px;
-        height: 100%
-    }
-    .dialog-table-box {
-        position: relative;
-        flex: 1;
-        height: 100%;
-        padding: 18px;
-        .dialog-search {
-            position: relative;
-            display: flex;
-        }
-        .dialog-table {
-            position: relative;
-            height: calc(100% - 68px);
-            padding: 18px 0;
-        }
-        .dialog-pages {
-            position: relative;
-        }
-    }
-}
-.copy-node-many-table {
-    position: relative;
-    flex: 1;
-    height: 100%;
-    padding: 20px 0 20px 20px;
-}
-.dialog-table-box {
-    position: relative;
-    flex: 1;
-    height: 100%;
-    padding: 18px;
-    .dialog-search {
-        position: relative;
-        display: flex;
-    }
-    .dialog-table {
-        position: relative;
-        height: calc(100% - 68px);
-        padding: 18px 0;
-    }
-    .dialog-pages {
-        position: relative;
-    }
-}
-.text-blue {
-    color: blue;
-}
-.text-green {
-    color: green
-}
-
-</style>

+ 3 - 3
src/views/data-fill/components/WbsTree.vue

@@ -59,7 +59,7 @@
 import {ref, nextTick, watch} from "vue";
 import dataFillQuery from '~api/data-fill/query';
 import {getTreeNodeType} from '~uti/utils';
-import {isItem, getArrValue, getObjValue, isValueNull} from "vue-utils-plus"
+import {getArrValue, getObjValue, isAllNull, isArrItem} from "js-fast-way"
 
 //参数
 const props = defineProps({
@@ -202,7 +202,7 @@ const ElTreeLoadNode = async (node, resolve) => {
             let lastKey = keys[keys.length - 1];
             for (const item of resData) {
                 //自动展开
-                if (isItem(keys, item?.primaryKeyId)) {
+                if (isArrItem(keys, item?.primaryKeyId)) {
                     defaultExpandedArr.push(item?.primaryKeyId)
                 }
                 //最后一个,选中点击
@@ -294,7 +294,7 @@ const handleMenuSelect = async ({key}) => {
 
 const handleMenuClosed = () => {
     const node = treeRefNode.value;
-    if (!isValueNull(node)) {
+    if (!isAllNull(node)) {
         treeRefNode.value['showTreeMenu'] = false
     }
 }

+ 14 - 11
src/views/data-fill/components/division/HcUpload.vue

@@ -1,8 +1,10 @@
 <template>
-    <el-upload ref="uploadRef" class="hc-division-upload" :headers="getTokenHeader()" :data="uploadData" :action="action" :accept="accept" :limit="1" :disabled="uploadDisabled"
-               :before-upload="beforeUpload" :on-exceed="uploadExceed" :on-progress="uploadprogress" :on-success="uploadSuccess" :on-error="uploadError" :on-change="uploadChange" :auto-upload="false">
+    <el-upload ref="uploadRef" :accept="accept" :action="action" :auto-upload="false"
+               :before-upload="beforeUpload" :data="uploadData" :disabled="uploadDisabled" :headers="getTokenHeader()"
+               :limit="1" :on-change="uploadChange" :on-error="uploadError"
+               :on-exceed="uploadExceed" :on-progress="uploadprogress" :on-success="uploadSuccess" class="hc-division-upload">
         <template #trigger>
-            <el-button type="primary" hc-btn :disabled="uploadDisabled" :loading="uploadDisabled">
+            <el-button :disabled="uploadDisabled" :loading="uploadDisabled" hc-btn type="primary">
                 <HcIcon name="file-add"/>
                 <span>选择文件</span>
             </el-button>
@@ -11,25 +13,26 @@
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
+import {getObjValue, isFileSize} from "js-fast-way"
 import {genFileId} from 'element-plus'
-import {isSize,getObjValue} from "vue-utils-plus"
+
 const props = defineProps({
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     type: {
-        type: [Number,String],
+        type: [Number, String],
         default: 0
     },
     isSplicingNumber: {
-        type: [Number,String],
+        type: [Number, String],
         default: 0
     },
     primaryKeyId: {
-        type: [Number,String],
+        type: [Number, String],
         default: 0
     },
 })
@@ -53,7 +56,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     setUploadData(props.contractId, props.type, props.isSplicingNumber, props.primaryKeyId)
 })
 
@@ -68,7 +71,7 @@ const emit = defineEmits(['progress', 'finished', 'change'])
 
 //上传前
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
+    if (isFileSize(file?.size, 60)) {
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');

+ 31 - 19
src/views/data-fill/components/nodeTree/children.vue

@@ -1,26 +1,38 @@
 <template>
     <div class="cu-tree-node-children">
-        <div class="cu-tree-node-view is-leaf" v-for="item in nodes" :key="item['primaryKeyId']">
+        <div v-for="item in nodes" :key="item['primaryKeyId']" class="cu-tree-node-view is-leaf">
             <div class="cu-tree-node-label">
                 <div class="cu-tree-node-label-text">
-                    <div class="cu-tree-node-label-name" :id="`node-tree-${item.key}`" @click="nodeLabelClick(item)" @dblclick="nodeLabelDblClick(item)" @contextmenu.prevent.stop="nodeLabelContextMenu($event,item,item?.data)">
-                        <el-button hc-btn color="#0081ff" :loading="item.loading" v-if="item?.colorStatus === 2">{{item.label}}</el-button>
-                        <el-button hc-btn color="#f37b1d" :loading="item.loading" v-else-if="item?.colorStatus === 3">{{item.label}}</el-button>
-                        <el-button hc-btn color="#1ECC95" text-white :loading="item.loading" v-else-if="item?.colorStatus === 4">{{item.label}}</el-button>
-                        <el-button type="info" hc-btn :loading="item.loading" v-else>{{item.label}}</el-button>
+                    <div :id="`node-tree-${item.key}`" class="cu-tree-node-label-name" @click="nodeLabelClick(item)"
+                         @dblclick="nodeLabelDblClick(item)"
+                         @contextmenu.prevent.stop="nodeLabelContextMenu($event,item,item?.data)">
+                        <el-button v-if="item?.colorStatus === 2" :loading="item.loading" color="#0081ff" hc-btn>
+                            {{ item.label }}
+                        </el-button>
+                        <el-button v-else-if="item?.colorStatus === 3" :loading="item.loading" color="#f37b1d" hc-btn>
+                            {{ item.label }}
+                        </el-button>
+                        <el-button v-else-if="item?.colorStatus === 4" :loading="item.loading" color="#1ECC95" hc-btn
+                                   text-white>{{ item.label }}
+                        </el-button>
+                        <el-button v-else :loading="item.loading" hc-btn type="info">{{ item.label }}</el-button>
                     </div>
-                    <span class="cu-tree-node-label-btn" :class="[ifExpanded(item)?'expanded':'']" v-if="isExpanded(item)" @click="expandedClick(item)"/>
+                    <span v-if="isExpanded(item)" :class="[ifExpanded(item)?'expanded':'']"
+                          class="cu-tree-node-label-btn" @click="expandedClick(item)"/>
                 </div>
             </div>
-            <TreeNodeChildren :data="item.childNodes" :parentNodes="item" v-if="ifExpanded(item)" @expandClick="ChildrenExpandedClick" @nodeClick="ChildrenNodeLabelClick" @nodeDblClick="ChildrenNodeLabelDblClick" @menuClick="ChildrenCpoverMenuClick"/>
+            <TreeNodeChildren v-if="ifExpanded(item)" :data="item.childNodes" :parentNodes="item"
+                              @expandClick="ChildrenExpandedClick" @menuClick="ChildrenCpoverMenuClick"
+                              @nodeClick="ChildrenNodeLabelClick" @nodeDblClick="ChildrenNodeLabelDblClick"/>
         </div>
     </div>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import TreeNodeChildren from "./children.vue"
-import {isObject,isBoolean} from "vue-utils-plus"
+import {isObject, isBoolean} from "js-fast-way"
+
 const props = defineProps({
     data: {
         type: Array,
@@ -45,7 +57,7 @@ const nodes = ref([])
 watch(() => [
     props.data,
     props.parentNodes
-], ([val,Nodes]) => {
+], ([val, Nodes]) => {
     datas.value = val
     if (isDataType(Nodes)) {
         parent.value = Nodes
@@ -56,7 +68,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     if (isDataType(props.parentNodes)) {
         parent.value = props.parentNodes
         setDatasToNodes()
@@ -99,7 +111,7 @@ const setDatasToNodes = () => {
     parent.value['childrenNodes'] = nodes.value //把当前节点数据,存入父节点的数据里。
 }
 
-const emit = defineEmits(['expandClick','nodeMouseover','nodeMouseout', 'nodeClick', 'nodeDblClick', 'menuClick'])
+const emit = defineEmits(['expandClick', 'nodeMouseover', 'nodeMouseout', 'nodeClick', 'nodeDblClick', 'menuClick'])
 
 //下级数据是否存在
 const isChildren = (item) => {
@@ -136,8 +148,8 @@ const expandedClick = (item) => {
         data: item.data
     })
 }
-const ChildrenExpandedClick = ({node,data}) => {
-    emit('expandClick', {node,data})
+const ChildrenExpandedClick = ({node, data}) => {
+    emit('expandClick', {node, data})
 }
 
 //鼠标左键单击事件
@@ -147,8 +159,8 @@ const nodeLabelClick = (item) => {
         data: item.data
     })
 }
-const ChildrenNodeLabelClick = ({node,data}) => {
-    emit('nodeClick', {node,data})
+const ChildrenNodeLabelClick = ({node, data}) => {
+    emit('nodeClick', {node, data})
 }
 
 //双击事件
@@ -158,8 +170,8 @@ const nodeLabelDblClick = (item) => {
         data: item.data
     })
 }
-const ChildrenNodeLabelDblClick = ({node,data}) => {
-    emit('nodeDblClick', {node,data})
+const ChildrenNodeLabelDblClick = ({node, data}) => {
+    emit('nodeDblClick', {node, data})
 }
 
 //鼠标右键事件

+ 27 - 24
src/views/data-fill/components/nodeTree/index.vue

@@ -1,37 +1,40 @@
 <template>
-    <div class="cu-tree-node-container" v-loading="treeNodeLoading" @mousewheel.prevent="treeNodeMousewheel">
-        <div class="cu-tree-node-box horizontal collapsable" :id="'tree-node-' + uuid" @mousedown="treeNodeMouseDown" :style="{zoom: zoomRef + '%'}" v-if="!!nodes.label">
+    <div v-loading="treeNodeLoading" class="cu-tree-node-container" @mousewheel.prevent="treeNodeMousewheel">
+        <div v-if="!!nodes.label" :id="'tree-node-' + uuid" :style="{zoom: zoomRef + '%'}"
+             class="cu-tree-node-box horizontal collapsable" @mousedown="treeNodeMouseDown">
             <div class="cu-tree-node-view">
                 <div class="cu-tree-node-label">
                     <div class="cu-tree-node-label-text">
-                        <div class="cu-tree-node-label-name" :id="`node-tree-${nodes.key}`">
-                            <el-button type="primary" hc-btn :loading="nodes.loading">{{nodes.label}}</el-button>
+                        <div :id="`node-tree-${nodes.key}`" class="cu-tree-node-label-name">
+                            <el-button :loading="nodes.loading" hc-btn type="primary">{{ nodes.label }}</el-button>
                         </div>
                     </div>
                 </div>
-                <TreeNodeChildren :data="nodes.childNodes" :parentNodes="nodes" @expandClick="expandClick" @nodeClick="nodeLabelClick" @nodeDblClick="nodeLabelDblClick" @menuClick="poverMenuClick"/>
+                <TreeNodeChildren :data="nodes.childNodes" :parentNodes="nodes" @expandClick="expandClick"
+                                  @menuClick="poverMenuClick" @nodeClick="nodeLabelClick"
+                                  @nodeDblClick="nodeLabelDblClick"/>
             </div>
         </div>
         <!--右键菜单-->
-        <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0">
+        <HcContextMenu v-if="menusData.length > 0" ref="contextMenuRef" :datas="menusData"
+                       @item-click="handleMenuSelect">
             <template #mark="{item}">
-                <HcIcon :name="item.icon" :fill="treeRefData?.isFirst" class="menu-item-icon"/>
-                <span class="menu-item-name">{{treeRefData?.isFirst ? '取消标记为首件' : '标记为首件'}}</span>
+                <HcIcon :fill="treeRefData?.isFirst" :name="item.icon" 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>
+                <HcIcon :line="false" :name="item.icon" class="menu-item-icon"/>
+                <span class="menu-item-name">{{ item.label }}</span>
             </template>
         </HcContextMenu>
     </div>
 </template>
 
 <script setup>
-import {watch,ref,onMounted,nextTick} from "vue";
+import {watch, ref, onMounted, nextTick} from "vue";
 import TreeNodeChildren from "./children.vue";
-import {isType, getRandom, isItem} from "vue-utils-plus"
 import wbsApi from "~api/data-fill/wbs"
-const {getObjValue,getArrValue} = isType()
+import {getObjValue, getArrValue, getRandom, isArrItem} from "js-fast-way"
 
 //参数
 const props = defineProps({
@@ -52,11 +55,11 @@ const props = defineProps({
         default: false
     },
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
 })
@@ -89,7 +92,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     getTreeOneLevel()
 })
 
@@ -124,11 +127,11 @@ const getTreeOneLevel = async () => {
 }
 
 //设置自动展开
-const setTreeExpandKey = async (arr,res) => {
+const setTreeExpandKey = async (arr, res) => {
     const keys = TreeExpandKey.value || []
     res.children = []
     for (const item of arr) {
-        if (isItem(keys, item?.primaryKeyId)) {
+        if (isArrItem(keys, item?.primaryKeyId)) {
             const children = await queryMappingStructureTree({
                 contractId: contractId.value,
                 contractIdRelation: item?.contractIdRelation,
@@ -240,28 +243,28 @@ const getNodeExpandKeys = async (node, newKeys) => {
     }
 }
 
-const emit = defineEmits(['expand', 'nodeClick', 'nodeDblClick','menuClick']);
+const emit = defineEmits(['expand', 'nodeClick', 'nodeDblClick', 'menuClick']);
 
 //导图结构展开和收缩被点击
-const expandClick = ({node,data}) => {
+const expandClick = ({node, data}) => {
     if (!node.children) {
         node.expanded = false;
     }
     node.isExpand = !node.isExpand;
-    emit('expand', {node,data})
+    emit('expand', {node, data})
 }
 
 //鼠标左键单击事件
-const nodeLabelClick = async ({node,data}) => {
+const nodeLabelClick = async ({node, data}) => {
     if (data?.notExsitChild) {
-        await awaitNodeClick(node,data)
+        await awaitNodeClick(node, data)
     } else {
         let ifChildren = !!(node.childNodes && node.childNodes.length > 0);
         if (ifChildren) {
             node.expanded = true;
             node.isExpand = true;
             node.loading = false
-            await awaitNodeClick(node,data)
+            await awaitNodeClick(node, data)
         } else {
             node.loading = true
             const children = await queryMappingStructureTree({

+ 6 - 8
src/views/data-fill/division.vue

@@ -361,7 +361,7 @@ import HcTreeData from "./components/division/HcTreeData.vue"
 import HcTreeData1 from "./components/division/HcTreeData1.vue"
 import DivisionTree from "./components/division/DivisionTree.vue"
 import HcTreeNode from "./components/HcTreeNode.vue"
-import {isType, getIndex, deepClone, formValidate, utilsArray} from "vue-utils-plus"
+import {getArrValue, deepClone, formValidate, arrIndex} from "js-fast-way"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import {getDictionary} from "~api/other"
 import wbsApi from "~api/data-fill/wbs";
@@ -372,8 +372,6 @@ import Draggable from "vuedraggable";
 const router = useRouter()
 const useRoutes = useRoute()
 const useAppState = useAppStore()
-const {getObjValue, getArrValue} = isType()
-const {isIndex} = utilsArray()
 
 //全局变量
 const projectId = ref(useAppState.getProjectId);
@@ -430,7 +428,7 @@ const getWbsNodeTypeApi = async () => {
 //获取类型名称
 const getRowType = (type) => {
     const nodeData = nodeTypeData.value
-    const index = getIndex(nodeData, 'value', type)
+    const index = arrIndex(nodeData, 'value', type)
     return nodeData[index]?.label ?? type
 }
 
@@ -448,7 +446,7 @@ const getMajorDataTypeApi = async () => {
 const getRowMajorType = (type) => {
     if (type) {
         const nodeData = majorDataTypeData.value
-        const index = getIndex(nodeData, 'dictKey', type)
+        const index = arrIndex(nodeData, 'dictKey', type)
         return nodeData[index]?.dictValue ?? type
     }
 }
@@ -466,7 +464,7 @@ const getWbsNodeTableTypeApi = async () => {
 const getRowTableType = (type) => {
     if (type > 0) {
         const nodeData = nodeTableTypeData.value
-        const index = getIndex(nodeData, 'dictKey', type)
+        const index = arrIndex(nodeData, 'dictKey', type)
         return nodeData[index]?.dictValue ?? type
     } else {
         return ''
@@ -486,7 +484,7 @@ const getTableOwnerTypeApi = async () => {
 const getRowTableOwnerType = (type) => {
     if (type > 0) {
         const nodeData = tableOwnerTypeData.value
-        const index = getIndex(nodeData, 'dictKey', type)
+        const index = arrIndex(nodeData, 'dictKey', type)
         return nodeData[index]?.dictValue ?? type
     } else {
         return ''
@@ -794,7 +792,7 @@ const copyNodeClick = async () => {
     //isSameNode 是否同节点 1=同节点,0=跨节点
     if (table.length > 0) {
         table.forEach((ele) => {
-            if (ele.parentId===formCopyNodeModel.value.parentId||ele.id===formCopyNodeModel.value.parentId) {
+            if (ele.parentId === formCopyNodeModel.value.parentId || ele.id === formCopyNodeModel.value.parentId) {
                 ele.isSameNode = 1
             } else {
                 ele.isSameNode = 0

+ 1 - 2
src/views/data-fill/query.vue

@@ -204,13 +204,12 @@ import {useAppStore} from "~src/store";
 import WbsTree from "./components/WbsTree.vue"
 import HcTreeData from "./components/HcTreeData.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {isType, downloadBlob, isString} from "vue-utils-plus"
+import {downloadBlob, isString, getObjValue, getArrValue} from "js-fast-way"
 import queryApi from '~api/data-fill/query';
 import {eVisaTaskCheckApi} from "~api/other"
 
 //变量
 const useAppState = useAppStore()
-const {getObjValue, getArrValue} = isType()
 const projectId = ref(useAppState.getProjectId);
 const contractId = ref(useAppState.getContractId);
 const projectInfo = ref(useAppState.getProjectInfo);

+ 25 - 25
src/views/data-fill/wbs.vue

@@ -659,7 +659,6 @@ import {ref, watch, onMounted} from "vue";
 import {useRouter, useRoute} from 'vue-router'
 import {useAppStore} from "~src/store";
 import {HcIsButton} from "~src/plugins/IsButtons";
-//import ListItem from "./components/ListItem.vue"
 import CollapseForm from "./collapse-form/index.vue"
 import NodeTree from "./components/nodeTree/index.vue"
 import HcTreeNode from "./components/HcTreeNode.vue"
@@ -667,7 +666,7 @@ import HcTreeData from "./components/HcTreeData.vue"
 import WbsTree from "./components/WbsTree.vue"
 import {getTokenHeader} from '~src/api/request/header';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {isType, deepClone, formValidate, setCopyText} from "vue-utils-plus"
+import {deepClone, formValidate, setCopyText, getObjValue, getArrValue, getObjVal, isString} from "js-fast-way"
 import {getDictionary, eVisaTaskCheckApi} from "~api/other"
 import wbsApi from "~api/data-fill/wbs"
 import queryApi from '~api/data-fill/query';
@@ -677,7 +676,6 @@ import Draggable from "vuedraggable";
 const router = useRouter()
 const useRoutes = useRoute()
 const useAppState = useAppStore()
-const {getObjValue, getArrValue, getObjNullValue, isString} = isType()
 
 //全局变量
 const projectId = ref(useAppState.getProjectId);
@@ -1219,19 +1217,20 @@ const copyNodeElTreeClick = ({data}) => {
     const TabKey = copyNodeTabKey.value;
     const {title, type, partitionCode} = formCopyNodeModel.value;
     if (TabKey === '2') {
+        setCopyNodeTable(data, title, partitionCode)
         //1 单位工程,2 分部工程,3 子分部工程,4 分项工程, 5 子分项工程,6 工序
         //工序节点不能复制到工序节点下面
-        if (type === 6 && (data['type'] === 4 || data['type'] === 5 || data['type'] == 6)) {
-             //限制复制数据不能复制到本身节点下
-                if (data['id'] !== formCopyNodeModel.value.id) {
-                    if (data['notExsitChild']) {
-                        //限制一个节点不能点击多次
-                        let oldarr = copyNodeTable.value
-                        let result = oldarr.some(item => item.primaryKeyId === data['primaryKeyId']) //true
-                        if (!result) {
-                            setCopyNodeTable(data, data?.title)
-                        }
+        /*if (type === 6 && (data['type'] === 4 || data['type'] === 5 || data['type'] == 6)) {
+            //限制复制数据不能复制到本身节点下
+            if (data['id'] !== formCopyNodeModel.value.id) {
+                if (data['notExsitChild']) {
+                    //限制一个节点不能点击多次
+                    let oldarr = copyNodeTable.value
+                    let result = oldarr.some(item => item.primaryKeyId === data['primaryKeyId']) //true
+                    if (!result) {
+                        setCopyNodeTable(data, data?.title)
                     }
+                }
             }
         }
 
@@ -1252,11 +1251,12 @@ const copyNodeElTreeClick = ({data}) => {
         }
         if (type === 1 && data['type'] === 1) {
             setCopyNodeTable(data, title, partitionCode)
-        }
+        }*/
     } else if (TabKey === '3') {
         console.log(1111111);
+        setCopyNodeTable(data, data?.title)
         //限制复制数据不能复制到本身节点下
-        if (data['id'] !== formCopyNodeModel.value.id) {
+        /*if (data['id'] !== formCopyNodeModel.value.id) {
             // console.log(formCopyNodeModel.value,'formCopyNodeModel.value');
             // console.log(data,'data');
             // if(data['colorStatus']===1||data['colorStatus']===2){
@@ -1272,7 +1272,7 @@ const copyNodeElTreeClick = ({data}) => {
                     setCopyNodeTable(data, data?.title)
                 }
             }
-        }
+        }*/
 
     }
 }
@@ -1282,8 +1282,8 @@ const setCopyNodeTable = (data, title) => {
         title: data?.title || '',
         nodeName: title || '',
         primaryKeyId: data?.primaryKeyId || '',
-        parentId:data?.parentId || '',
-        id:data?.id || '',
+        parentId: data?.parentId || '',
+        id: data?.id || '',
 
     })
 }
@@ -1335,12 +1335,12 @@ const copyNodeClick = async () => {
         classify = arr.join(',')
     }
     //isSameNode 是否同节点 1=同节点,0=跨节点
-     if(table.length>0){
-        table.forEach((ele)=>{
-            if(ele.parentId===formCopyNodeModel.value.parentId||ele.id===formCopyNodeModel.value.parentId){
-               ele.isSameNode =1
-            }else{
-                ele.isSameNode =0
+    if (table.length > 0) {
+        table.forEach((ele) => {
+            if (ele.parentId === formCopyNodeModel.value.parentId || ele.id === formCopyNodeModel.value.parentId) {
+                ele.isSameNode = 1
+            } else {
+                ele.isSameNode = 0
             }
         })
     }
@@ -1709,7 +1709,7 @@ const tableFormSaveClick = async () => {
         FormRegExpJson = await ListItemRef.value?.getFormRegExpJson()
     }
     //效验数据
-    if (getObjNullValue(FormRegExpJson)) {
+    if (getObjVal(FormRegExpJson)) {
         setFormRegExpJson(FormRegExpJson)
     } else if (FormData.length > 0) {
         tableFormSaveLoading.value = true