third.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. <template>
  2. <div class="hc-page-layout-box">
  3. <div :style="`width:${leftWidth}px;`" class="hc-layout-left-box bg-white">
  4. <div class="hc-project-box">
  5. <div class="hc-project-icon-box">
  6. <HcIcon name="stack" />
  7. </div>
  8. <div class="ml-2 project-name-box">
  9. <span class="project-alias">{{ projectInfo.projectName }}</span>
  10. </div>
  11. </div>
  12. <div class="hc-tree-box">
  13. <el-scrollbar>
  14. <HcTreeData
  15. v-if="isShowTree" :auto-expand-keys="thirdTreeKeys" :contract-id="contractId"
  16. :project-id="projectId" type="leftTree" @menu-tap="menuTapClick" @node-tap="wbsElTreeClick"
  17. />
  18. </el-scrollbar>
  19. </div>
  20. <!-- 左右拖动 -->
  21. <div class="horizontal-drag-line" @mousedown="onmousedown" />
  22. </div>
  23. <div class="hc-page-content-box">
  24. <HcNewCard :scrollbar="false" action-size="lg">
  25. <template #header>
  26. <HcTooltip keys="tentative_detect_third_add">
  27. <el-button :disabled="!thirdTreeKeys" hc-btn type="primary" @click="addFormModalClick">
  28. <HcIcon name="add-circle" />
  29. <span>新增</span>
  30. </el-button>
  31. </HcTooltip>
  32. <HcTooltip keys="tentative_detect_third_edit">
  33. <el-button
  34. :disabled="tableCheckedKeys.length <= 0" hc-btn type="primary" color="#12C060"
  35. style="color: white;" @click="editFormModalClick"
  36. >
  37. <HcIcon name="edit" />
  38. <span>编辑</span>
  39. </el-button>
  40. </HcTooltip>
  41. <HcTooltip keys="tentative_detect_third_copy">
  42. <el-button
  43. :disabled="tableCheckedKeys.length <= 0" :loading="copyLoading" hc-btn
  44. color="#A16222" @click="copyTableModalClick"
  45. >
  46. <HcIcon name="file-copy-2" />
  47. <span>复制</span>
  48. </el-button>
  49. </HcTooltip>
  50. <HcTooltip keys="tentative_detect_third_del">
  51. <el-button v-del-com:[delModalClick] :disabled="tableCheckedKeys.length <= 0" hc-btn color="#e03997">
  52. <HcIcon name="delete-bin-2" />
  53. <span>删除</span>
  54. </el-button>
  55. </HcTooltip>
  56. </template>
  57. <template #search>
  58. <div class="w-40">
  59. <el-input v-model="searchForm.queryName" clearable placeholder="送样人员" />
  60. </div>
  61. <div class="w-40 ml-2">
  62. <el-select v-model="searchForm.queryStatus" clearable placeholder="请选择是否合格">
  63. <el-option
  64. v-for="item in qualifiedData" :key="item.value" :label="item.label"
  65. :value="item.value"
  66. />
  67. </el-select>
  68. </div>
  69. <div class="w-64 ml-2">
  70. <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
  71. </div>
  72. <div class="w-72 ml-2">
  73. <el-input
  74. v-model="searchForm.queryValue" clearable placeholder="请输入报告编号、委托编号"
  75. @keyup="keyUpEvent"
  76. />
  77. </div>
  78. <div class="ml-2">
  79. <el-button type="primary" @click="searchClick">
  80. <HcIcon name="search-2" />
  81. <span>搜索</span>
  82. </el-button>
  83. </div>
  84. </template>
  85. <HcTable
  86. ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading"
  87. is-new :index-style="{ width: 60 }" is-check :check-style="{ width: 29 }"
  88. @selection-change="tableSelection"
  89. >
  90. <template #status="{ row }">
  91. <!-- <span>{{arrKeyValue(categoryData, 'dictKey', 'dictValue', row.detectionCategory)}}</span> -->
  92. <span>{{ row.status === 1 ? '合格' : row.status === 0 ? '不合格' : '' }}</span>
  93. </template>
  94. </HcTable>
  95. <template #action>
  96. <HcPages :pages="searchForm" @change="pageChange" />
  97. </template>
  98. </HcNewCard>
  99. </div>
  100. <!-- 新增/编辑 -->
  101. <hc-new-dialog
  102. v-model="addEditFormModal" :is-close="false" :title="`${formModalTitle} 外委试验信息`" is-row-footer
  103. widths="70rem" @close="addEditFormModalClose"
  104. >
  105. <template #extra>
  106. <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" size="default" @change="tabTypeChange" />
  107. </template>
  108. <el-form
  109. v-if="tabTypeKey === 'tab1'" ref="addEditFormRef" :model="addEditFormModel"
  110. :rules="addEditFormRules"
  111. label-width="auto" size="large"
  112. >
  113. <div class="hc-form-item">
  114. <el-form-item label="合同段">
  115. <el-select
  116. v-model="addEditFormModel.contractId" :teleported="false" block
  117. placeholder="请选择合同段" popper-class="select-popper"
  118. >
  119. <el-option
  120. v-for="item in projectInfo?.contractInfoList" :key="item.id"
  121. :label="item.name" :value="item.id"
  122. />
  123. </el-select>
  124. </el-form-item>
  125. <el-form-item label="合格状态">
  126. <el-radio-group v-model="addEditFormModel.status" size="large">
  127. <el-radio :value="0">不合格</el-radio>
  128. <el-radio :value="1">合格</el-radio>
  129. </el-radio-group>
  130. </el-form-item>
  131. </div>
  132. <div class="hc-form-item">
  133. <el-form-item label="委托编号" prop="entrustNo">
  134. <el-input v-model="addEditFormModel.entrustNo" />
  135. </el-form-item>
  136. <el-form-item label="样品名称">
  137. <el-input v-model="addEditFormModel.materialName" />
  138. </el-form-item>
  139. </div>
  140. <div class="hc-form-item">
  141. <el-form-item label="委托单位" prop="entrustCompany">
  142. <el-input v-model="addEditFormModel.entrustCompany" />
  143. </el-form-item>
  144. <el-form-item label="样品编号">
  145. <el-input v-model="addEditFormModel.specificationNumber" />
  146. </el-form-item>
  147. </div>
  148. <div class="hc-form-item">
  149. <el-form-item label="证书编号">
  150. <el-input
  151. v-model="addEditFormModel.testingAgencyCertificateNo"
  152. placeholder="检测机构资质证书编号"
  153. />
  154. </el-form-item>
  155. <el-form-item label="样品数量">
  156. <el-input v-model="addEditFormModel.materialCount" />
  157. </el-form-item>
  158. </div>
  159. <div class="hc-form-item">
  160. <el-form-item label="取样人">
  161. <el-input v-model="addEditFormModel.userName" />
  162. </el-form-item>
  163. <el-form-item label="代表数量">
  164. <el-input v-model="addEditFormModel.representativeCount" />
  165. </el-form-item>
  166. </div>
  167. <div class="hc-form-item">
  168. <el-form-item label="见证人">
  169. <el-input v-model="addEditFormModel.witness" />
  170. </el-form-item>
  171. <el-form-item label="检测机构">
  172. <el-input v-model="addEditFormModel.inspectionOrganization" />
  173. </el-form-item>
  174. </div>
  175. <div class="hc-form-item">
  176. <el-form-item label="送样日期">
  177. <el-date-picker
  178. v-model="addEditFormModel.sampleDeliveryDate" :clearable="false" class="block"
  179. type="date" value-format="YYYY-MM-DD"
  180. />
  181. </el-form-item>
  182. <el-form-item label="产地">
  183. <el-input v-model="addEditFormModel.placeOfOrigin" />
  184. </el-form-item>
  185. </div>
  186. <div class="hc-form-item">
  187. <el-form-item label="取样日期">
  188. <el-date-picker
  189. v-model="addEditFormModel.samplingDate" :clearable="false" class="block"
  190. type="date" value-format="YYYY-MM-DD"
  191. />
  192. </el-form-item>
  193. <el-form-item label="取样地点">
  194. <el-input v-model="addEditFormModel.samplingLocation" />
  195. </el-form-item>
  196. </div>
  197. <div class="hc-form-item">
  198. <el-form-item label="检测日期">
  199. <el-date-picker
  200. v-model="addEditFormModel.testDate" :clearable="false" class="block"
  201. type="date" value-format="YYYY-MM-DD"
  202. />
  203. </el-form-item>
  204. <el-form-item label="生产厂家">
  205. <el-input v-model="addEditFormModel.manufacturer" />
  206. </el-form-item>
  207. </div>
  208. <div class="hc-form-item">
  209. <el-form-item label="报告日期">
  210. <el-date-picker
  211. v-model="addEditFormModel.reportDate" :clearable="false" class="block"
  212. type="date" value-format="YYYY-MM-DD"
  213. />
  214. </el-form-item>
  215. <el-form-item label="生产批号">
  216. <el-input v-model="addEditFormModel.batchNumber" />
  217. </el-form-item>
  218. </div>
  219. <div class="hc-form-item">
  220. <el-form-item label="报告编号" prop="reportNo">
  221. <el-input v-model="addEditFormModel.reportNo" />
  222. </el-form-item>
  223. <el-form-item label="工程部位">
  224. <el-input v-model="addEditFormModel.projectPosition" />
  225. </el-form-item>
  226. </div>
  227. <div class="hc-form-item">
  228. <el-form-item label="试验类型">
  229. <el-input v-model="addEditFormModel.trialType" />
  230. </el-form-item>
  231. <el-form-item label="规格型号">
  232. <el-input v-model="addEditFormModel.specificationModel" />
  233. </el-form-item>
  234. </div>
  235. <el-form-item label="委托单附件">
  236. <FormItemUpload v-model="addEditFormModel.delegationOrderUrl" action="upload-file" :file-name="addEditFormModel.delegationOrderUrlName" />
  237. </el-form-item>
  238. <el-form-item label="记录表附件">
  239. <FormItemUpload v-model="addEditFormModel.recordTableUrl" action="upload-file" :file-name="addEditFormModel.recordTableUrlName" />
  240. </el-form-item>
  241. <el-form-item label="报告单附件">
  242. <FormItemUpload v-model="addEditFormModel.reportAttachmentUrl" action="upload-file" :file-name="addEditFormModel.reportAttachmentUrlName" />
  243. </el-form-item>
  244. </el-form>
  245. <el-form
  246. v-if="tabTypeKey === 'tab2'" ref="addEditFormRef" :model="addEditFormModel" label-position="top" label-width="auto"
  247. size="large"
  248. >
  249. <el-form-item label="检测依据">
  250. <el-input
  251. v-model="addEditFormModel.testBasisText" :autosize="{ minRows: 3 }" maxlength="1000"
  252. placeholder="请输入检测依据" show-word-limit type="textarea"
  253. />
  254. </el-form-item>
  255. <el-form-item label="评定标准">
  256. <el-input
  257. v-model="addEditFormModel.evaluationCriteriaText" :autosize="{ minRows: 3 }"
  258. maxlength="1000" placeholder="请输入评定标准" show-word-limit type="textarea"
  259. />
  260. </el-form-item>
  261. <el-form-item label="检测结论">
  262. <el-input
  263. v-model="addEditFormModel.testConclusionText" :autosize="{ minRows: 3 }" maxlength="1000"
  264. placeholder="请输入检测结论" show-word-limit type="textarea"
  265. />
  266. </el-form-item>
  267. <el-form-item label="备注">
  268. <el-input
  269. v-model="addEditFormModel.remarks" :autosize="{ minRows: 3 }" maxlength="1000"
  270. placeholder="请输入备注" show-word-limit type="textarea"
  271. />
  272. </el-form-item>
  273. </el-form>
  274. <template #leftRowFooter>
  275. <el-button hc-btn type="primary" @click="linksSampleModalClick">
  276. <HcIcon name="links" />
  277. <span>选择样品信息</span>
  278. </el-button>
  279. </template>
  280. <template #rightRowFooter>
  281. <el-button size="large" @click="addEditFormModalClose">
  282. <HcIcon name="close" />
  283. <span>取消</span>
  284. </el-button>
  285. <el-button :loading="addEditFormLoading" hc-btn type="primary" @click="addEditFormClick">
  286. <HcIcon name="check" />
  287. <span>确认</span>
  288. </el-button>
  289. </template>
  290. </hc-new-dialog>
  291. <!-- 选择样品信息 -->
  292. <hc-new-dialog v-model="linksSampleModal" is-row-footer is-table title="选择样品信息" widths="70%" @close="linksSampleModalClose">
  293. <div class="hc-links-sample-modal-box">
  294. <div class="hc-links-sample-tree-box">
  295. <el-scrollbar>
  296. <TestTree
  297. :project-id="projectId"
  298. :tenant-id="userInfo?.tenant_id"
  299. :wbs-temp-id="projectInfo?.referenceWbsTemplateIdTrial"
  300. :wbs-type="2"
  301. @node-tap="sampleTreeClick"
  302. />
  303. </el-scrollbar>
  304. </div>
  305. <div class="hc-links-sample-table-box">
  306. <HcTable
  307. :column="linksSampleTableColumn" :datas="linksSampleTableData"
  308. :is-index="false" :loading="linksSampleTableLoading" is-new
  309. >
  310. <template #action="{ row }">
  311. <el-button v-if="addEditFormModel.sampleId === row.id" plain size="small" type="primary">
  312. 已选择
  313. </el-button>
  314. <el-button v-else plain size="small" type="primary" @click="linksSampleRow(row)">
  315. 选择
  316. </el-button>
  317. </template>
  318. </HcTable>
  319. </div>
  320. </div>
  321. <template #leftRowFooter>
  322. <el-button size="large" @click="linksSampleModalClose">
  323. <HcIcon name="close" />
  324. <span>取消</span>
  325. </el-button>
  326. </template>
  327. <template #rightRowFooter>
  328. <HcPages :pages="searchSampleForm" @change="pageSampleChange" />
  329. </template>
  330. </hc-new-dialog>
  331. </div>
  332. </template>
  333. <script setup>
  334. import { onMounted, ref, watch } from 'vue'
  335. import { useAppStore } from '~src/store'
  336. import HcTreeData from './components/HcTreeData.vue'
  337. import FormItemUpload from './components/FormItemUpload.vue'
  338. import TestTree from '../material/components/TestTree.vue'
  339. import { getStoreValue, setStoreValue } from '~src/utils/storage'
  340. import dataApi from '~api/tentative/detect/third'
  341. import samplingApi from '~api/tentative/material/sampling'
  342. import { arrToId, formValidate, getArrValue } from 'js-fast-way'
  343. //变量
  344. const useAppState = useAppStore()
  345. const projectId = ref(useAppState.getProjectId)
  346. const contractId = ref(useAppState.getContractId)
  347. const projectInfo = ref(useAppState.getProjectInfo)
  348. const userInfo = ref(useAppState.getUserInfo)
  349. const isCollapse = ref(useAppState.getCollapse)
  350. //监听
  351. watch(() => [
  352. useAppState.getCollapse,
  353. ], ([Collapse]) => {
  354. isCollapse.value = Collapse
  355. })
  356. //自动展开缓存
  357. const thirdTreeKeys = ref(getStoreValue('thirdTreeKeys'))
  358. //渲染完成
  359. onMounted(() => {
  360. const keys = thirdTreeKeys.value
  361. if (keys) {
  362. searchForm.value.nodeId = keys
  363. getTableData()
  364. }
  365. })
  366. //是否合格
  367. const qualifiedData = ref([
  368. { label: '不合格', value: 0 },
  369. { label: '合格', value: 1 },
  370. ])
  371. //搜索表单
  372. const searchForm = ref({
  373. queryName: null, queryStatus: null, queryValue: null, startTime: null, endTime: null,
  374. current: 1, size: 20, total: 0,
  375. })
  376. //树被点击
  377. const nodeItemInfo = ref({})
  378. const wbsElTreeClick = ({ node, keys }) => {
  379. nodeItemInfo.value = node
  380. //缓存自动展开
  381. thirdTreeKeys.value = keys
  382. setStoreValue('thirdTreeKeys', keys)
  383. //改变搜索表单数据
  384. searchForm.value.nodeId = keys
  385. searchForm.value.current = 1
  386. getTableData()
  387. }
  388. const menuTapClick = ({ data }) => {
  389. if (data?.isData === 1) {
  390. window.$message.warning('当前节点下已有数据,不允许新增节点')
  391. }
  392. }
  393. const isShowTree = ref(true)
  394. //日期时间被选择
  395. const betweenTime = ref(null)
  396. const betweenTimeUpdate = ({ arr }) => {
  397. betweenTime.value = arr
  398. if (arr.length > 0) {
  399. searchForm.value.startTime = arr[0]
  400. searchForm.value.endTime = arr[1]
  401. } else {
  402. searchForm.value.startTime = ''
  403. searchForm.value.endTime = ''
  404. }
  405. }
  406. //回车搜索
  407. const keyUpEvent = (e) => {
  408. if (e.key === 'Enter') {
  409. searchForm.value.current = 1
  410. getTableData()
  411. }
  412. }
  413. //搜索
  414. const searchClick = () => {
  415. searchForm.value.current = 1
  416. getTableData()
  417. }
  418. //分页被点击
  419. const pageChange = ({ current, size }) => {
  420. searchForm.value.current = current
  421. searchForm.value.size = size
  422. getTableData()
  423. }
  424. //表格数据
  425. const tableRef = ref(null)
  426. const tableColumn = ref([
  427. { key: 'entrustNo', name: '委托编号', width: 150 },
  428. { key: 'reportNo', name: '报告编号', width: 150 },
  429. { key: 'specificationNumber', name: '样品编号', width: 150 },
  430. { key: 'trialType', name: '试验类型', width: 150 },
  431. { key: 'materialName', name: '样品名称', width: 150 },
  432. { key: 'specificationModel', name: '规格型号', width: 150 },
  433. { key: 'entrustCompany', name: '委托单位', width: 150 },
  434. { key: 'inspectionOrganization', name: '检测机构', width: 150 },
  435. { key: 'projectPosition', name: '工程部位', width: 150 },
  436. { key: 'userName', name: '送样人', width: 100 },
  437. { key: 'sampleDeliveryDate', name: '送样日期', width: 150 },
  438. { key: 'reportDate', name: '报告日期', width: 150 },
  439. { key: 'status', name: '检测结果', width: 150 },
  440. { key: 'remarks', name: '备注', width: 180 },
  441. ])
  442. const tableData = ref([])
  443. //获取数据
  444. const tableLoading = ref(false)
  445. const getTableData = async () => {
  446. tableLoading.value = true
  447. const { error, code, data } = await dataApi.queryPage({
  448. ...searchForm.value,
  449. projectId: projectId.value,
  450. contractId: contractId.value,
  451. })
  452. //处理数据
  453. tableLoading.value = false
  454. if (!error && code === 200) {
  455. tableData.value = getArrValue(data['records'])
  456. searchForm.value.total = data.total || 0
  457. } else {
  458. tableData.value = []
  459. searchForm.value.total = 0
  460. }
  461. }
  462. //多选
  463. const tableCheckedKeys = ref([])
  464. const tableSelection = (rows) => {
  465. tableCheckedKeys.value = rows
  466. }
  467. //新增/编辑
  468. const addEditFormModal = ref(false)
  469. const formModalTitle = ref('新增')
  470. const addFormModalClick = () => {
  471. const { data } = nodeItemInfo.value
  472. if (data?.id) {
  473. addEditFormModel.value = {
  474. nodeId: data.id, trialType: data.nodeName, status: 1,
  475. }
  476. formModalTitle.value = '新增'
  477. addEditFormModal.value = true
  478. } else {
  479. window.$message.warning('请先选择一个树节点')
  480. }
  481. }
  482. //编辑
  483. const editFormModalClick = () => {
  484. const keys = tableCheckedKeys.value
  485. if (keys.length === 1) {
  486. // addEditFormModel.value = keys[0]
  487. addEditFormModel.value = { ...keys[0] }
  488. formModalTitle.value = '编辑'
  489. addEditFormModal.value = true
  490. } else if (keys.length > 1) {
  491. window?.$message?.warning('只能选择一条数据编辑')
  492. }
  493. }
  494. //关闭
  495. const addEditFormModalClose = () => {
  496. addEditFormModal.value = false
  497. addEditFormModel.value = {}
  498. }
  499. //类型tab数据和相关处理
  500. const tabTypeKey = ref('tab1')
  501. const tabTypeTab = ref([
  502. { key: 'tab1', name: '基础信息' },
  503. { key: 'tab2', name: '检查结论' },
  504. ])
  505. const tabTypeChange = (item) => {
  506. tabTypeKey.value = item?.key
  507. }
  508. //新增/编辑 表单
  509. const addEditFormRef = ref(null)
  510. const addEditFormModel = ref({})
  511. const addEditFormRules = {
  512. entrustCompany: {
  513. required: true,
  514. trigger: 'blur',
  515. message: '请输入委托单位',
  516. },
  517. entrustNo: {
  518. required: true,
  519. trigger: 'blur',
  520. message: '请输入编号',
  521. },
  522. reportNo: {
  523. required: true,
  524. trigger: 'blur',
  525. message: '请输入报告编号',
  526. },
  527. }
  528. //新增/编辑/复制弹窗 保存
  529. const addEditFormLoading = ref(false)
  530. const addEditFormClick = async () => {
  531. let validate
  532. console.log(addEditFormRef.value, 'addEditFormRef.value')
  533. if (addEditFormRef.value !== null) {
  534. validate = await formValidate(addEditFormRef.value)
  535. }
  536. console.log(validate, 'validate')
  537. if (validate) {
  538. if (formModalTitle.value === '复制') {
  539. await copyFormApi()
  540. } else {
  541. await submitFormApi()
  542. }
  543. }
  544. }
  545. //新增、编辑 提交保存
  546. const submitFormApi = async () => {
  547. addEditFormLoading.value = true
  548. console.log(addEditFormModel.value, 'addEditFormModel.value')
  549. const { error, code, msg } = await dataApi.submitForm({
  550. ...addEditFormModel.value,
  551. projectId: projectId.value,
  552. contractId: contractId.value,
  553. })
  554. //处理数据
  555. addEditFormLoading.value = false
  556. if (!error && code === 200) {
  557. window?.$message?.success('操作成功')
  558. addEditFormModal.value = false
  559. isShowTree.value = false
  560. setTimeout(() => {
  561. isShowTree.value = true
  562. }, 100)
  563. await getTableData()
  564. } else {
  565. window?.$message?.error(msg)
  566. }
  567. }
  568. //复制
  569. const copyTableModalClick = () => {
  570. const rows = tableCheckedKeys.value
  571. if (rows.length === 1) {
  572. addEditFormModel.value = rows[0]
  573. formModalTitle.value = '复制'
  574. addEditFormModal.value = true
  575. } else if (rows.length > 1) {
  576. const ids = arrToId(rows)
  577. batchCopyFormApi(ids)
  578. }
  579. }
  580. const changepdf = (pdf)=>{
  581. console.log(pdf, 'pdf')
  582. }
  583. //复制提交保存
  584. const copyFormApi = async () => {
  585. addEditFormLoading.value = true
  586. const { error, code, msg } = await dataApi.copyData({
  587. ...addEditFormModel.value,
  588. projectId: projectId.value,
  589. contractId: contractId.value,
  590. })
  591. //处理数据
  592. addEditFormLoading.value = false
  593. if (!error && code === 200) {
  594. window?.$message?.success('操作成功')
  595. addEditFormModal.value = false
  596. await getTableData()
  597. } else {
  598. window?.$message?.error(msg)
  599. }
  600. }
  601. //批量复制 提交保存
  602. const copyLoading = ref(false)
  603. const batchCopyFormApi = async (ids) => {
  604. copyLoading.value = true
  605. const { error, code, msg } = await dataApi.copyData({
  606. projectId: projectId.value,
  607. contractId: contractId.value,
  608. ids: ids,
  609. })
  610. //处理数据
  611. copyLoading.value = false
  612. if (!error && code === 200) {
  613. window?.$message?.success('操作成功')
  614. await getTableData()
  615. } else {
  616. window?.$message?.error(msg)
  617. }
  618. }
  619. //删除
  620. const delModalClick = async (_, resolve) => {
  621. await tableRemoveData()
  622. resolve()
  623. }
  624. //批量删除
  625. const tableRemoveData = async () => {
  626. const rows = tableCheckedKeys.value
  627. if (rows.length > 0) {
  628. const ids = arrToId(rows)
  629. //删除请求
  630. const { error, code, msg } = await dataApi.removeData({
  631. projectId: projectId.value,
  632. contractId: contractId.value,
  633. ids: ids,
  634. })
  635. //处理数据
  636. if (!error && code === 200) {
  637. window?.$message?.success('操作成功')
  638. // searchClick()
  639. isShowTree.value = false
  640. setTimeout(() => {
  641. isShowTree.value = true
  642. }, 100)
  643. await getTableData()
  644. } else {
  645. window?.$message?.error(msg)
  646. }
  647. }
  648. }
  649. //关联数据搜索
  650. const searchSampleForm = ref({
  651. current: 1, size: 20, total: 0,
  652. })
  653. //关联进场材料
  654. const linksSampleModal = ref(false)
  655. const linksSampleModalClick = () => {
  656. searchSampleForm.value.current = 1
  657. linksSampleTableData.value = []
  658. linksSampleModal.value = true
  659. }
  660. //树被点击
  661. const sampleTreeClick = ({ data }) => {
  662. searchSampleForm.value.nodeId = data['primaryKeyId'] || ''
  663. searchSampleForm.value.current = 1
  664. getLinksSampleTable()
  665. }
  666. //分页被点击
  667. const pageSampleChange = ({ current, size }) => {
  668. searchSampleForm.value.current = current
  669. searchSampleForm.value.size = size
  670. getLinksSampleTable()
  671. }
  672. //关联进场材料数据
  673. const linksSampleTableColumn = ref([
  674. { key: 'materialName', name: '取样名称' },
  675. { key: 'samplingDate', name: '取样日期' },
  676. { key: 'specificationNumber', name: '样品编号' },
  677. { key: 'specificationModel', name: '规格型号' },
  678. { key: 'materialCount', name: '试样数量' },
  679. { key: 'calculationUnit', name: '计算单位' },
  680. { key: 'proposedPosition', name: '拟用部位' },
  681. { key: 'representativeCount', name: '代表数量' },
  682. { key: 'userName', name: '取样人' },
  683. { key: 'action', name: '操作' },
  684. ])
  685. const linksSampleTableData = ref([])
  686. //获取关联数据
  687. const linksSampleTableLoading = ref(false)
  688. const getLinksSampleTable = async () => {
  689. const { nodeId } = searchSampleForm.value
  690. if (nodeId) {
  691. linksSampleTableLoading.value = true
  692. const { error, code, data } = await samplingApi.queryPage({
  693. ...searchSampleForm.value,
  694. projectId: projectId.value,
  695. contractId: contractId.value,
  696. })
  697. //处理数据
  698. linksSampleTableLoading.value = false
  699. if (!error && code === 200) {
  700. linksSampleTableData.value = getArrValue(data['records'])
  701. searchSampleForm.value.total = data.total || 0
  702. } else {
  703. linksSampleTableData.value = []
  704. searchSampleForm.value.total = 0
  705. }
  706. } else {
  707. window?.$message?.warning('请先选择一个树节点')
  708. }
  709. }
  710. //确认关联
  711. const linksSampleRow = (row) => {
  712. const form = addEditFormModel.value
  713. form.materialName = row.materialName ?? '' //样品名称
  714. form.specificationNumber = row.specificationNumber ?? '' //样品编号
  715. form.materialCount = row.materialCount ?? '' //试样数量
  716. form.userName = row.userName ?? '' //取样人
  717. form.representativeCount = row.representativeCount ?? '' //代表数量
  718. form.samplingDate = row.samplingDate ?? '' //取样日期
  719. form.samplingLocation = row.samplingLocation ?? '' //取样地点
  720. form.batchNumber = row.batchNumber ?? '' //生产批号
  721. form.specificationModel = row.specificationModel ?? '' //规格型号
  722. form.sampleId = row.id //关联ID
  723. //更新数据
  724. addEditFormModel.value = form
  725. }
  726. //关闭关联进场材料
  727. const linksSampleModalClose = () => {
  728. linksSampleModal.value = false
  729. linksSampleTableData.value = []
  730. searchSampleForm.value.current = 1
  731. }
  732. //左右拖动,改变树形结构宽度
  733. const leftWidth = ref(300)
  734. const onmousedown = () => {
  735. const leftNum = isCollapse.value ? 142 : 272
  736. document.onmousemove = (ve) => {
  737. let diffVal = ve.clientX - leftNum
  738. if (diffVal >= 260 && diffVal <= 700) {
  739. leftWidth.value = diffVal
  740. }
  741. }
  742. document.onmouseup = () => {
  743. document.onmousemove = null
  744. document.onmouseup = null
  745. }
  746. }
  747. </script>
  748. <style lang="scss" scoped>
  749. @import "../../../styles/tentative/detect/third.scss";
  750. // :deep.dialog .select-popper{
  751. // position: fixed;
  752. // top: 100px !important;
  753. // left: 133px !important;
  754. // }
  755. </style>