浏览代码

第三方检测

ZaiZai 2 年之前
父节点
当前提交
3b8741c021
共有 1 个文件被更改,包括 333 次插入208 次删除
  1. 333 208
      src/views/tentative/detect/outside.vue

+ 333 - 208
src/views/tentative/detect/outside.vue

@@ -12,7 +12,7 @@
             </div>
             <div class="hc-tree-box">
                 <el-scrollbar>
-                    <WbsTree :autoExpandKeys="treeAutoExpandKeys" :menus="ElTreeMenu" :projectId="projectId" :contractId="contractId" isColor @nodeTap="wbsElTreeClick" @menuTap="ElTreeMenuClick"/>
+                    <HcTreeData :autoExpandKeys="thirdTreeKeys" :projectId="projectId" :contractId="contractId" type="rightTree" @nodeTap="wbsElTreeClick"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -21,26 +21,26 @@
         <div class="hc-page-content-box">
             <HcCard :scrollbar="false" actionSize="lg">
                 <template #header>
-                    <HcTooltip keys="tentative_detect_outside_add">
-                        <el-button type="primary" hc-btn @click="addFormModalClick">
+                    <HcTooltip keys="tentative_detect_third_add">
+                        <el-button type="primary" hc-btn :disabled="!thirdTreeKeys" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
-                    <HcTooltip keys="tentative_detect_outside_edit">
-                        <el-button hc-btn @click="editFormModalClick">
+                    <HcTooltip keys="tentative_detect_third_edit">
+                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
-                    <HcTooltip keys="tentative_detect_outside_copy">
-                        <el-button hc-btn @click="copyTableModalClick">
+                    <HcTooltip keys="tentative_detect_third_copy">
+                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="copyLoading" @click="copyTableModalClick">
                             <HcIcon name="file-copy-2"/>
                             <span>复制</span>
                         </el-button>
                     </HcTooltip>
-                    <HcTooltip keys="tentative_detect_outside_del">
-                        <el-button hc-btn @click="delModalClick">
+                    <HcTooltip keys="tentative_detect_third_del">
+                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
@@ -48,12 +48,10 @@
                 </template>
                 <template #search>
                     <div class="w-40">
-                        <el-select v-model="searchForm.user" placeholder="请选择送样人员" clearable>
-                            <el-option v-for="item in userData" :key="item.value" :label="item['label']" :value="item['value']"/>
-                        </el-select>
+                        <el-input v-model="searchForm.queryName" placeholder="送样人员" clearable/>
                     </div>
                     <div class="w-40 ml-2">
-                        <el-select v-model="searchForm.qualified" placeholder="请选择是否合格" clearable>
+                        <el-select v-model="searchForm.queryStatus" placeholder="请选择是否合格" clearable>
                             <el-option v-for="item in qualifiedData" :key="item.value" :label="item['label']" :value="item['value']"/>
                         </el-select>
                     </div>
@@ -77,128 +75,135 @@
             </HcCard>
         </div>
 
-        <!--新增/编辑 节点-->
-        <HcDialog :show="addEditNodeFormModal" title="新增/编辑 节点" widths="30rem" :loading="addEditNodeFormLoading" @save="addEditNodeFormModalSave" @close="addEditNodeFormModalClose">
-            <el-form :model="addEditNodeFormModel" label-width="auto" label-position="top" size="large">
-                <el-form-item class="mb-0" label="节点名称">
-                    <el-input v-model="addEditNodeFormModel.key1" placeholder="请输入节点名称"/>
-                </el-form-item>
-            </el-form>
-        </HcDialog>
-
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" title="新增/编辑 第三方检测信息" widths="70rem" :isClose="false" isRowFooter @close="addEditFormModalClose">
+        <HcDialog :show="addEditFormModal" :title="formModalTitle + ' 第三方试验信息'" widths="70rem" isRowFooter :isClose="false" @close="addEditFormModalClose">
             <template #extra>
                 <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" @change="tabTypeChange"/>
             </template>
             <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large" v-if="tabTypeKey === 'tab1'">
                 <div class="hc-form-item">
                     <el-form-item label="合同段">
-                        <el-select v-model="addEditFormModel.key1" block placeholder="请选择合同段">
+                        <el-select v-model="addEditFormModel.contractId" block placeholder="请选择合同段">
                             <el-option v-for="item in projectInfo?.contractInfoList" :key="item.id" :label="item['name']" :value="item['id']"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="合格状态">
-                        <el-radio-group v-model="addEditFormModel.key2" size="large">
-                            <el-radio :label="1">不合格</el-radio>
-                            <el-radio :label="2">合格</el-radio>
+                        <el-radio-group v-model="addEditFormModel.status" size="large">
+                            <el-radio :label="0">不合格</el-radio>
+                            <el-radio :label="1">合格</el-radio>
                         </el-radio-group>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="委托编号">
-                        <el-input v-model="addEditFormModel.key3"/>
+                        <el-input v-model="addEditFormModel.entrustNo"/>
                     </el-form-item>
                     <el-form-item label="样品名称">
-                        <el-input v-model="addEditFormModel.key4"/>
+                        <el-input v-model="addEditFormModel.materialName"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
-                    <el-form-item label="委托单位" prop="key5">
-                        <el-input v-model="addEditFormModel.key5"/>
+                    <el-form-item label="委托单位" prop="entrustCompany">
+                        <el-input v-model="addEditFormModel.entrustCompany"/>
                     </el-form-item>
                     <el-form-item label="样品编号">
-                        <el-input v-model="addEditFormModel.key6"/>
+                        <el-input v-model="addEditFormModel.specificationNumber"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="证书编号">
-                        <el-input v-model="addEditFormModel.key7" placeholder="检测机构资质证书编号"/>
+                        <el-input v-model="addEditFormModel.testingAgencyCertificateNo" placeholder="检测机构资质证书编号"/>
                     </el-form-item>
                     <el-form-item label="样品数量">
-                        <el-input v-model="addEditFormModel.key8"/>
+                        <el-input v-model="addEditFormModel.materialCount"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="取样人">
-                        <el-input v-model="addEditFormModel.key9"/>
+                        <el-input v-model="addEditFormModel.userName"/>
                     </el-form-item>
                     <el-form-item label="代表数量">
-                        <el-input v-model="addEditFormModel.key10"/>
+                        <el-input v-model="addEditFormModel.representativeCount"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="见证人">
-                        <el-input v-model="addEditFormModel.key11"/>
+                        <el-input v-model="addEditFormModel.witness"/>
                     </el-form-item>
                     <el-form-item label="检测机构">
-                        <el-input v-model="addEditFormModel.key12"/>
+                        <el-input v-model="addEditFormModel.inspectionOrganization"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="送样日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.key13" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker type="date" v-model="addEditFormModel.sampleDeliveryDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                     </el-form-item>
                     <el-form-item label="产地">
-                        <el-input v-model="addEditFormModel.key14"/>
+                        <el-input v-model="addEditFormModel.placeOfOrigin"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="取样日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.key13" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker type="date" v-model="addEditFormModel.samplingDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                     </el-form-item>
                     <el-form-item label="取样地点">
-                        <el-input v-model="addEditFormModel.key14"/>
+                        <el-input v-model="addEditFormModel.samplingLocation"/>
+                    </el-form-item>
+                </div>
+                <div class="hc-form-item">
+                    <el-form-item label="检测日期">
+                        <el-date-picker type="date" v-model="addEditFormModel.testDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                    </el-form-item>
+                    <el-form-item label="生产厂家">
+                        <el-input v-model="addEditFormModel.manufacturer"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="报告日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.key15" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker type="date" v-model="addEditFormModel.reportDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                     </el-form-item>
                     <el-form-item label="生产批号">
-                        <el-input v-model="addEditFormModel.key16"/>
+                        <el-input v-model="addEditFormModel.batchNumber"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="报告编号">
-                        <el-input v-model="addEditFormModel.key17"/>
+                        <el-input v-model="addEditFormModel.reportNo"/>
                     </el-form-item>
                     <el-form-item label="工程部位">
-                        <el-input v-model="addEditFormModel.key18"/>
+                        <el-input v-model="addEditFormModel.projectPosition"/>
                     </el-form-item>
                 </div>
-                <el-form-item label="委托单附件" prop="key13">
-                    <div class="form-item-dashed hover">上传文件(待定,看后端接口后,再定)</div>
+                <div class="hc-form-item">
+                    <el-form-item label="试验类型">
+                        <el-input v-model="addEditFormModel.trialType"/>
+                    </el-form-item>
+                    <el-form-item label="规格型号">
+                        <el-input v-model="addEditFormModel.specificationModel"/>
+                    </el-form-item>
+                </div>
+                <el-form-item label="委托单附件">
+                    <FormItemUpload v-model="addEditFormModel.delegationOrderUrl"/>
                 </el-form-item>
-                <el-form-item label="记录表附件" prop="key13">
-                    <div class="form-item-dashed hover">上传文件(待定,看后端接口后,再定)</div>
+                <el-form-item label="记录表附件">
+                    <FormItemUpload v-model="addEditFormModel.recordTableUrl"/>
                 </el-form-item>
-                <el-form-item label="报告单附件" prop="key13">
-                    <div class="form-item-dashed hover">上传文件(待定,看后端接口后,再定)</div>
+                <el-form-item label="报告单附件">
+                    <FormItemUpload v-model="addEditFormModel.reportAttachmentUrl"/>
                 </el-form-item>
             </el-form>
             <el-form ref="addEditFormRef" :model="addEditFormModel" label-position="top" label-width="auto" size="large" v-if="tabTypeKey === 'tab2'">
                 <el-form-item label="检测依据">
-                    <el-input v-model="addEditFormModel.desc1" type="textarea" placeholder="请输入检测依据" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.testBasisText" type="textarea" placeholder="请输入检测依据" :autosize="{ minRows: 3}"/>
                 </el-form-item>
                 <el-form-item label="评定标准">
-                    <el-input v-model="addEditFormModel.desc2" type="textarea" placeholder="请输入评定标准" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.evaluationCriteriaText" type="textarea" placeholder="请输入评定标准" :autosize="{ minRows: 3}"/>
                 </el-form-item>
                 <el-form-item label="检测结论">
-                    <el-input v-model="addEditFormModel.desc3" type="textarea" placeholder="请输入检测结论" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.testConclusionText" type="textarea" placeholder="请输入检测结论" :autosize="{ minRows: 3}"/>
                 </el-form-item>
                 <el-form-item label="备注">
-                    <el-input v-model="addEditFormModel.desc4" type="textarea" placeholder="请输入备注" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.remarks" type="textarea" placeholder="请输入备注" :autosize="{ minRows: 3}"/>
                 </el-form-item>
             </el-form>
             <template #leftRowFooter>
@@ -220,17 +225,35 @@
         </HcDialog>
 
         <!--选择样品信息-->
-        <HcDialog :show="linksSampleModal" title="选择样品信息" widths="70%" isTable saveText="确认" @close="linksSampleModalClose" @save="linksSampleModalSave">
+        <HcDialog :show="linksSampleModal" title="选择样品信息" widths="70%" isTable isRowFooter @close="linksSampleModalClose">
             <div class="hc-links-sample-modal-box">
                 <div class="hc-links-sample-tree-box">
                     <el-scrollbar>
-                        <WbsTree :autoExpandKeys="treeAutoExpandKeys" :projectId="projectId" :contractId="contractId"/>
+                        <TestTree :projectId="projectId"
+                                  :wbsTempId="projectInfo?.referenceWbsTemplateIdTrial"
+                                  :wbsType="2"
+                                  :tenantId="userInfo?.tenant_id"
+                                  @nodeTap="sampleTreeClick"/>
                     </el-scrollbar>
                 </div>
                 <div class="hc-links-sample-table-box">
-                    <HcTable ref="tableSampleRef" :column="linksSampleTableColumn" :datas="linksSampleTableData" :loading="linksSampleTableLoading" :isIndex="false" isCheck @selection-change="linksSampleTableSelection"/>
+                    <HcTable :column="linksSampleTableColumn" :datas="linksSampleTableData" :loading="linksSampleTableLoading" :isIndex="false">
+                        <template #action="{row}">
+                            <el-button type="primary" size="small" plain v-if="addEditFormModel.sampleId === row.id">已选择</el-button>
+                            <el-button type="primary" size="small" plain @click="linksSampleRow(row)" v-else>选择</el-button>
+                        </template>
+                    </HcTable>
                 </div>
             </div>
+            <template #leftRowFooter>
+                <el-button size="large" @click="linksSampleModalClose">
+                    <HcIcon name="close"/>
+                    <span>取消</span>
+                </el-button>
+            </template>
+            <template #rightRowFooter>
+                <HcPages :pages="searchSampleForm" @change="pageSampleChange"/>
+            </template>
         </HcDialog>
 
     </div>
@@ -239,15 +262,21 @@
 <script setup>
 import {ref, watch, onMounted} from "vue";
 import {useAppStore} from "~src/store";
-import WbsTree from "../../data-fill/components/WbsTree.vue"
+import HcTreeData from "./components/HcTreeData.vue"
+import FormItemUpload from "./components/FormItemUpload.vue"
+import TestTree from "../material/components/TestTree.vue"
 import {getStoreData, setStoreData} from '~src/utils/storage'
-import {HcIsButton} from "~src/plugins/IsButtons";
+import dataApi from "~api/tentative/detect/third";
+import samplingApi from "~api/tentative/material/sampling"
+import {formValidate, getArrValue} from "vue-utils-plus";
+import {delMessage, rowsToId} from "~uti/tools";
 
 //变量
 const useAppState = useAppStore()
 const projectId = ref(useAppState.getProjectId);
 const contractId = ref(useAppState.getContractId);
 const projectInfo = ref(useAppState.getProjectInfo);
+const userInfo = ref(useAppState.getUserInfo);
 const isCollapse = ref(useAppState.getCollapse)
 
 //监听
@@ -258,106 +287,50 @@ watch(() => [
 })
 
 //自动展开缓存
-const treeAutoExpandKeys = ref(getStoreData('wbsTreeExpandKeys') || [])
+const thirdTreeKeys = ref(getStoreData('outsideTreeKeys'))
 
 //渲染完成
 onMounted(() => {
-    setElTreeMenu()
+    const keys = thirdTreeKeys.value
+    if (keys) {
+        searchForm.value.nodeId = keys
+        getTableData()
+    }
 })
 
-const userData = ref([
-    {label: 'xxx', value: '1'}
-])
-
+//是否合格
 const qualifiedData = ref([
-    {label: '是', value: '1'}
+    {label: '不合格', value: 0},
+    {label: '合格', value: 1}
 ])
 
 //搜索表单
-const searchForm = ref({user: null, qualified: null, betweenTime: null, queryValue: null, current: 1, size: 20, total: 0})
-
-//树菜单配置
-const ElTreeMenu = ref([])
-const setElTreeMenu = () => {
-    let newArr = [];
-    if (HcIsButton('tentative_detect_outside_tree_add')) {
-        newArr.push({icon: 'add-circle', label: '新增节点', key: "add"})
-    }
-    if (HcIsButton('tentative_detect_outside_tree_edit')) {
-        newArr.push({icon: 'draft', label: '修改节点', key: "edit"})
-    }
-    if (HcIsButton('tentative_detect_outside_tree_del')) {
-        newArr.push({icon: 'delete-bin', label: '删除节点', key: "del"})
-    }
-    ElTreeMenu.value = newArr
-}
-
-//树相关的变量
-const primaryKeyId = ref('')
-const nodeItemInfo = ref({})
-const nodeDataInfo = ref({})
+const searchForm = ref({
+    queryName: null, queryStatus: null, queryValue: null, startTime: null, endTime: null,
+    current: 1, size: 20, total: 0
+})
 
 //树被点击
-const wbsElTreeClick = ({node, data, keys}) => {
+const nodeItemInfo = ref({})
+const wbsElTreeClick = ({node, keys}) => {
     nodeItemInfo.value = node
-    nodeDataInfo.value = data
-    primaryKeyId.value = data['primaryKeyId'] || ''
     //缓存自动展开
-    treeAutoExpandKeys.value = keys
-    setStoreData('wbsTreeExpandKeys',keys)
+    thirdTreeKeys.value = keys
+    setStoreData('outsideTreeKeys',keys)
     //改变搜索表单数据
-    //searchForm.value.wbsId = data['contractIdRelation'] ? data['id'] : data['primaryKeyId']
-    //searchForm.value.contractIdRelation = data['contractIdRelation']
+    searchForm.value.nodeId = keys
     searchForm.value.current = 1;
     getTableData()
 }
 
-//树菜单被点击
-const ElTreeMenuClick = async ({key,node,data}) => {
-    nodeItemInfo.value = node
-    nodeDataInfo.value = data
-    if (key === 'add') {
-        addEditNodeFormModal.value = true
-    } else if (key === 'edit') {
-        addEditNodeFormModal.value = true
-    } else if (key === 'del') {
-        delNodeModalClick()
-    }
-}
-
-//新增/编辑 节点
-const addEditNodeFormModal = ref(false)
-const addEditNodeFormModel = ref({key1: ''})
-//保存节点信息
-const addEditNodeFormLoading = ref(false)
-const addEditNodeFormModalSave = () => {
-    addEditNodeFormModal.value = false
-}
-//关闭节点编辑弹窗
-const addEditNodeFormModalClose = () => {
-    addEditNodeFormModal.value = false
-}
-
-//删除节点
-const delNodeModalClick = () => {
-    window?.$messageBox?.alert('请谨慎考虑后,确认是否需要删除?', '删除提醒', {
-        showCancelButton: true,
-        confirmButtonText: '确认删除',
-        cancelButtonText: '取消',
-        type: 'warning',
-        callback: (action) => {
-            if (action === 'confirm') {
-                //removeContractTreeNode()
-            }
-        }
-    })
-}
-
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({arr,query}) => {
+const betweenTimeUpdate = ({arr}) => {
     betweenTime.value = arr
-    searchForm.value.betweenTime = query
+    if (arr.length > 0) {
+        searchForm.value.startTime = arr[0]
+        searchForm.value.endTime = arr[1]
+    }
 }
 
 //回车搜索
@@ -384,49 +357,81 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'key1', name: '委托编号'},
-    {key:'key2', name: '报告编号'},
-    {key:'key3', name: '样品编号'},
-    {key:'key4', name: '试验类型'},
-    {key:'key5', name: '样品名称'},
-    {key:'key6', name: '规格型号'},
-    {key:'key7', name: '委托单位'},
-    {key:'key8', name: '检测机构'},
-    {key:'key9', name: '工程部位'},
-    {key:'key10', name: '送样人'},
-    {key:'key11', name: '送样日期'},
-    {key:'key12', name: '报告日期'},
-    {key:'key13', name: '检测结果'},
-    {key:'key14', name: '备注'},
+    {key:'entrustNo', name: '委托编号', width: 150},
+    {key:'reportNo', name: '报告编号', width: 150},
+    {key:'specificationNumber', name: '样品编号', width: 150},
+    {key:'trialType', name: '试验类型', width: 150},
+    {key:'materialName', name: '样品名称', width: 150},
+    {key:'specificationModel', name: '规格型号', width: 150},
+    {key:'entrustCompany', name: '委托单位', width: 150},
+    {key:'inspectionOrganization', name: '检测机构', width: 150},
+    {key:'projectPosition', name: '工程部位', width: 150},
+    {key:'userName', name: '送样人', width: 100},
+    {key:'sampleDeliveryDate', name: '送样日期', width: 150},
+    {key:'reportDate', name: '报告日期', width: 150},
+    {key:'testConclusionText', name: '检测结果', width: 150},
+    {key:'remarks', name: '备注', width: 180},
 ])
+const tableData = ref([])
 
 //获取数据
 const tableLoading = ref(false)
-const tableData = ref([
-    {}
-])
 const getTableData = async () => {
-
+    tableLoading.value = true
+    const { error, code, data } = await dataApi.queryPage({
+        ...searchForm.value,
+        projectId: projectId.value,
+        contractId: contractId.value
+    })
+    //处理数据
+    tableLoading.value = false
+    if (!error && code === 200) {
+        tableData.value = getArrValue(data['records'])
+        searchForm.value.total = data.total || 0
+    } else {
+        tableData.value = []
+        searchForm.value.total = 0
+    }
 }
 
 //多选
 const tableCheckedKeys = ref([]);
 const tableSelection = (rows) => {
-    tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
-    })
+    tableCheckedKeys.value = rows
 }
 
 //新增/编辑
 const addEditFormModal = ref(false)
+const formModalTitle = ref('新增')
 const addFormModalClick = () => {
-    addEditFormModal.value = true
+    const { data } = nodeItemInfo.value
+    if (data?.id) {
+        addEditFormModel.value = {
+            nodeId: data.id, trialType: data.nodeName, status: 1
+        }
+        formModalTitle.value = '新增'
+        addEditFormModal.value = true
+    } else {
+        window.$message.warning('请先选择一个树节点')
+    }
 }
+
+//编辑
 const editFormModalClick = () => {
-    addEditFormModal.value = true
+    const keys = tableCheckedKeys.value
+    if (keys.length === 1) {
+        addEditFormModel.value = keys[0]
+        formModalTitle.value = '编辑'
+        addEditFormModal.value = true
+    } else if (keys.length > 1) {
+        window?.$message?.warning('只能选择一条数据编辑')
+    }
 }
+
+//关闭
 const addEditFormModalClose = () => {
     addEditFormModal.value = false
+    addEditFormModel.value = {}
 }
 
 //类型tab数据和相关处理
@@ -443,93 +448,213 @@ const tabTypeChange = (item) => {
 const addEditFormRef = ref(null)
 const addEditFormModel = ref({})
 const addEditFormRules = {
-    key5: {
+    entrustCompany: {
         required: true,
         trigger: 'blur',
-        message: "请输入"
+        message: "请输入委托单位"
     }
 }
 
-//新增/编辑 保存
+//新增/编辑/复制弹窗 保存
 const addEditFormLoading = ref(false)
-const addEditFormClick = () => {
+const addEditFormClick = async () => {
+    const validate = await formValidate(addEditFormRef.value)
+    if (validate) {
+        if (formModalTitle.value === '复制') {
+            await copyFormApi()
+        } else {
+            await submitFormApi()
+        }
+    }
+}
 
+//新增、编辑 提交保存
+const submitFormApi = async () => {
+    addEditFormLoading.value = true
+    const { error, code } = await dataApi.submitForm({
+        ...addEditFormModel.value,
+        projectId: projectId.value,
+        contractId: contractId.value
+    })
+    //处理数据
+    addEditFormLoading.value = false
+    if (!error && code === 200) {
+        window?.$message?.success('操作成功')
+        addEditFormModal.value = false
+        await getTableData()
+    }
 }
 
 //复制
 const copyTableModalClick = () => {
-    addEditFormModal.value = true
+    const rows = tableCheckedKeys.value
+    if (rows.length === 1) {
+        addEditFormModel.value = rows[0]
+        formModalTitle.value = '复制'
+        addEditFormModal.value = true
+    } else if (rows.length > 1) {
+        const ids = rowsToId(rows)
+        batchCopyFormApi(ids)
+    }
+}
+
+//复制提交保存
+const copyFormApi = async () => {
+    addEditFormLoading.value = true
+    const { error, code } = await dataApi.copyData({
+        ...addEditFormModel.value,
+        projectId: projectId.value,
+        contractId: contractId.value
+    })
+    //处理数据
+    addEditFormLoading.value = false
+    if (!error && code === 200) {
+        window?.$message?.success('操作成功')
+        addEditFormModal.value = false
+        await getTableData()
+    }
+}
+
+//批量复制 提交保存
+const copyLoading = ref(false)
+const batchCopyFormApi = async (ids) => {
+    copyLoading.value = true
+    const { error, code } = await dataApi.copyData({
+        projectId: projectId.value,
+        contractId: contractId.value,
+        ids: ids,
+    })
+    //处理数据
+    copyLoading.value = false
+    if (!error && code === 200) {
+        window?.$message?.success('操作成功')
+        await getTableData()
+    }
 }
 
 //删除
 const delModalClick = () => {
-    window?.$messageBox?.alert('请谨慎考虑后,确认是否需要删除?', '删除提醒', {
-        showCancelButton: true,
-        confirmButtonText: '确认删除',
-        cancelButtonText: '取消',
-        type: 'warning',
-        callback: (action) => {
-            if (action === 'confirm') {
-                //removeContractTreeNode()
-            }
-        }
+    delMessage(() => {
+        tableRemoveData()
     })
 }
 
+//批量删除
+const tableRemoveData = async () => {
+    const rows = tableCheckedKeys.value
+    if (rows.length > 0 ) {
+        const ids = rowsToId(rows)
+        //删除请求
+        const { error, code } = await dataApi.removeData({
+            projectId: projectId.value,
+            contractId: contractId.value,
+            ids: ids,
+        })
+        //处理数据
+        if (!error && code === 200) {
+            window?.$message?.success('操作成功')
+            searchClick()
+        }
+    }
+}
+
+//关联数据搜索
+const searchSampleForm = ref({
+    current: 1, size: 20, total: 0
+})
+
 //关联进场材料
 const linksSampleModal = ref(false)
-const linksSampleModalClick = (row) => {
+const linksSampleModalClick = () => {
+    searchSampleForm.value.current = 1;
+    linksSampleTableData.value = []
     linksSampleModal.value = true
 }
 
+//树被点击
+const sampleTreeClick = ({data}) => {
+    searchSampleForm.value.nodeId = data['primaryKeyId'] || ''
+    searchSampleForm.value.current = 1;
+    getLinksSampleTable()
+}
+
+//分页被点击
+const pageSampleChange = ({current, size}) => {
+    searchSampleForm.value.current = current
+    searchSampleForm.value.size = size
+    getLinksSampleTable()
+}
+
 //关联进场材料数据
-const tableSampleRef = ref(null)
 const linksSampleTableColumn = ref([
-    {key:'key1', name: '样品名称'},
-    {key:'key2', name: '取样日期'},
-    {key:'key3', name: '样品编号'},
-    {key:'key4', name: '规格型号'},
-    {key:'key5', name: '试样数量'},
-    {key:'key6', name: '计算单位'},
-    {key:'key7', name: '拟用部位'},
-    {key:'key8', name: '代表数量'},
-    {key:'key9', name: '取样人'},
+    {key:'materialName', name: '取样名称'},
+    {key:'samplingDate', name: '取样日期'},
+    {key:'specificationNumber', name: '样品编号'},
+    {key:'specificationModel', name: '规格型号'},
+    {key:'materialCount', name: '试样数量'},
+    {key:'calculationUnit', name: '计算单位'},
+    {key:'proposedPosition', name: '拟用部位'},
+    {key:'representativeCount', name: '代表数量'},
+    {key:'userName', name: '取样人'}
 ])
 const linksSampleTableData = ref([])
-const linksSampleTableLoading = ref(false)
 
-//多选
-const tableSampleCheckedKeys = ref([]);
-const linksSampleTableSelection = (rows) => {
-    tableSampleCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
-    })
+//获取关联数据
+const linksSampleTableLoading = ref(false)
+const getLinksSampleTable = async () => {
+    const { nodeId } = searchSampleForm.value
+    if (nodeId) {
+        linksSampleTableLoading.value = true
+        const { error, code, data } = await samplingApi.queryPage({
+            ...searchSampleForm.value,
+            projectId: projectId.value,
+            contractId: contractId.value
+        })
+        //处理数据
+        linksSampleTableLoading.value = false
+        if (!error && code === 200) {
+            linksSampleTableData.value = getArrValue(data['records'])
+            searchSampleForm.value.total = data.total || 0
+        } else {
+            linksSampleTableData.value = []
+            searchSampleForm.value.total = 0
+        }
+    } else {
+        window?.$message?.warning('请先选择一个树节点')
+    }
 }
 
-const linksSampleModalSave = () => {
-
+//确认关联
+const linksSampleRow = (row) => {
+    const form = addEditFormModel.value;
+    form.materialName = row.materialName ?? ''                  //样品名称
+    form.specificationNumber = row.specificationNumber ?? ''    //样品编号
+    form.materialCount = row.materialCount ?? ''                //试样数量
+    form.userName = row.userName ?? ''                          //取样人
+    form.representativeCount = row.representativeCount ?? ''    //代表数量
+    form.samplingDate = row.samplingDate ?? ''                  //取样日期
+    form.samplingLocation = row.samplingLocation ?? ''          //取样地点
+    form.batchNumber = row.batchNumber ?? ''                    //生产批号
+    form.specificationModel = row.specificationModel ?? ''      //规格型号
+    form.sampleId = row.id                                      //关联ID
+    //更新数据
+    addEditFormModel.value = form
 }
 
 //关闭关联进场材料
 const linksSampleModalClose = () => {
     linksSampleModal.value = false
-}
-
-
-//拼接ID
-const rowsToId = (rows) => {
-    return rows.map((obj) => {
-        return obj.id;
-    }).join(",")
+    linksSampleTableData.value = []
+    searchSampleForm.value.current = 1;
 }
 
 //左右拖动,改变树形结构宽度
-const leftWidth = ref(382);
+const leftWidth = ref(300);
 const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 310 && diffVal <= 900) {
+        if(diffVal >= 260 && diffVal <= 700) {
             leftWidth.value = diffVal;
         }
     }