third.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  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" @menuTap="menuTapClick" @nodeTap="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 :disabled="tableCheckedKeys.length <= 0" hc-btn color="#e03997" @click="delModalClick">
  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. @nodeTap="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. import { delMessageV2 } from '~com/message/index.js'
  344. //变量
  345. const useAppState = useAppStore()
  346. const projectId = ref(useAppState.getProjectId)
  347. const contractId = ref(useAppState.getContractId)
  348. const projectInfo = ref(useAppState.getProjectInfo)
  349. const userInfo = ref(useAppState.getUserInfo)
  350. const isCollapse = ref(useAppState.getCollapse)
  351. //监听
  352. watch(() => [
  353. useAppState.getCollapse,
  354. ], ([Collapse]) => {
  355. isCollapse.value = Collapse
  356. })
  357. //自动展开缓存
  358. const thirdTreeKeys = ref(getStoreValue('thirdTreeKeys'))
  359. //渲染完成
  360. onMounted(() => {
  361. const keys = thirdTreeKeys.value
  362. if (keys) {
  363. searchForm.value.nodeId = keys
  364. getTableData()
  365. }
  366. })
  367. //是否合格
  368. const qualifiedData = ref([
  369. { label: '不合格', value: 0 },
  370. { label: '合格', value: 1 },
  371. ])
  372. //搜索表单
  373. const searchForm = ref({
  374. queryName: null, queryStatus: null, queryValue: null, startTime: null, endTime: null,
  375. current: 1, size: 20, total: 0,
  376. })
  377. //树被点击
  378. const nodeItemInfo = ref({})
  379. const wbsElTreeClick = ({ node, keys }) => {
  380. nodeItemInfo.value = node
  381. //缓存自动展开
  382. thirdTreeKeys.value = keys
  383. setStoreValue('thirdTreeKeys', keys)
  384. //改变搜索表单数据
  385. searchForm.value.nodeId = keys
  386. searchForm.value.current = 1
  387. getTableData()
  388. }
  389. const menuTapClick = ({ data }) => {
  390. if (data?.isData === 1) {
  391. window.$message.warning('当前节点下已有数据,不允许新增节点')
  392. }
  393. }
  394. const isShowTree = ref(true)
  395. //日期时间被选择
  396. const betweenTime = ref(null)
  397. const betweenTimeUpdate = ({ arr }) => {
  398. betweenTime.value = arr
  399. if (arr.length > 0) {
  400. searchForm.value.startTime = arr[0]
  401. searchForm.value.endTime = arr[1]
  402. } else {
  403. searchForm.value.startTime = ''
  404. searchForm.value.endTime = ''
  405. }
  406. }
  407. //回车搜索
  408. const keyUpEvent = (e) => {
  409. if (e.key === 'Enter') {
  410. searchForm.value.current = 1
  411. getTableData()
  412. }
  413. }
  414. //搜索
  415. const searchClick = () => {
  416. searchForm.value.current = 1
  417. getTableData()
  418. }
  419. //分页被点击
  420. const pageChange = ({ current, size }) => {
  421. searchForm.value.current = current
  422. searchForm.value.size = size
  423. getTableData()
  424. }
  425. //表格数据
  426. const tableRef = ref(null)
  427. const tableColumn = ref([
  428. { key: 'entrustNo', name: '委托编号', width: 150 },
  429. { key: 'reportNo', name: '报告编号', width: 150 },
  430. { key: 'specificationNumber', name: '样品编号', width: 150 },
  431. { key: 'trialType', name: '试验类型', width: 150 },
  432. { key: 'materialName', name: '样品名称', width: 150 },
  433. { key: 'specificationModel', name: '规格型号', width: 150 },
  434. { key: 'entrustCompany', name: '委托单位', width: 150 },
  435. { key: 'inspectionOrganization', name: '检测机构', width: 150 },
  436. { key: 'projectPosition', name: '工程部位', width: 150 },
  437. { key: 'userName', name: '送样人', width: 100 },
  438. { key: 'sampleDeliveryDate', name: '送样日期', width: 150 },
  439. { key: 'reportDate', name: '报告日期', width: 150 },
  440. { key: 'status', name: '检测结果', width: 150 },
  441. { key: 'remarks', name: '备注', width: 180 },
  442. ])
  443. const tableData = ref([])
  444. //获取数据
  445. const tableLoading = ref(false)
  446. const getTableData = async () => {
  447. tableLoading.value = true
  448. const { error, code, data } = await dataApi.queryPage({
  449. ...searchForm.value,
  450. projectId: projectId.value,
  451. contractId: contractId.value,
  452. })
  453. //处理数据
  454. tableLoading.value = false
  455. if (!error && code === 200) {
  456. tableData.value = getArrValue(data['records'])
  457. searchForm.value.total = data.total || 0
  458. } else {
  459. tableData.value = []
  460. searchForm.value.total = 0
  461. }
  462. }
  463. //多选
  464. const tableCheckedKeys = ref([])
  465. const tableSelection = (rows) => {
  466. tableCheckedKeys.value = rows
  467. }
  468. //新增/编辑
  469. const addEditFormModal = ref(false)
  470. const formModalTitle = ref('新增')
  471. const addFormModalClick = () => {
  472. const { data } = nodeItemInfo.value
  473. if (data?.id) {
  474. addEditFormModel.value = {
  475. nodeId: data.id, trialType: data.nodeName, status: 1,
  476. }
  477. formModalTitle.value = '新增'
  478. addEditFormModal.value = true
  479. } else {
  480. window.$message.warning('请先选择一个树节点')
  481. }
  482. }
  483. //编辑
  484. const editFormModalClick = () => {
  485. const keys = tableCheckedKeys.value
  486. if (keys.length === 1) {
  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 } = 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. }
  565. }
  566. //复制
  567. const copyTableModalClick = () => {
  568. const rows = tableCheckedKeys.value
  569. if (rows.length === 1) {
  570. addEditFormModel.value = rows[0]
  571. formModalTitle.value = '复制'
  572. addEditFormModal.value = true
  573. } else if (rows.length > 1) {
  574. const ids = arrToId(rows)
  575. batchCopyFormApi(ids)
  576. }
  577. }
  578. const changepdf = (pdf)=>{
  579. console.log(pdf, 'pdf')
  580. }
  581. //复制提交保存
  582. const copyFormApi = async () => {
  583. addEditFormLoading.value = true
  584. const { error, code } = await dataApi.copyData({
  585. ...addEditFormModel.value,
  586. projectId: projectId.value,
  587. contractId: contractId.value,
  588. })
  589. //处理数据
  590. if (!error && code === 200) {
  591. window?.$message?.success('操作成功')
  592. addEditFormModal.value = false
  593. setTimeout(() => {
  594. addEditFormLoading.value = false
  595. }, 1000)
  596. await getTableData()
  597. }
  598. addEditFormLoading.value = false
  599. }
  600. //批量复制 提交保存
  601. const copyLoading = ref(false)
  602. const batchCopyFormApi = async (ids) => {
  603. copyLoading.value = true
  604. const { error, code } = await dataApi.copyData({
  605. projectId: projectId.value,
  606. contractId: contractId.value,
  607. ids: ids,
  608. })
  609. //处理数据
  610. copyLoading.value = false
  611. if (!error && code === 200) {
  612. window?.$message?.success('操作成功')
  613. await getTableData()
  614. }
  615. }
  616. //删除
  617. const delModalClick = () => {
  618. delMessageV2(async (action, instance, done) => {
  619. if (action === 'confirm') {
  620. instance.confirmButtonLoading = true
  621. await tableRemoveData()
  622. instance.confirmButtonLoading = false
  623. done()
  624. } else {
  625. done()
  626. }
  627. })
  628. }
  629. //批量删除
  630. const tableRemoveData = async () => {
  631. const rows = tableCheckedKeys.value
  632. if (rows.length > 0) {
  633. const ids = arrToId(rows)
  634. //删除请求
  635. const { error, code } = await dataApi.removeData({
  636. projectId: projectId.value,
  637. contractId: contractId.value,
  638. ids: ids,
  639. })
  640. //处理数据
  641. if (!error && code === 200) {
  642. window?.$message?.success('操作成功')
  643. // searchClick()
  644. isShowTree.value = false
  645. setTimeout(() => {
  646. isShowTree.value = true
  647. }, 100)
  648. await getTableData()
  649. }
  650. }
  651. }
  652. //关联数据搜索
  653. const searchSampleForm = ref({
  654. current: 1, size: 20, total: 0,
  655. })
  656. //关联进场材料
  657. const linksSampleModal = ref(false)
  658. const linksSampleModalClick = () => {
  659. searchSampleForm.value.current = 1
  660. linksSampleTableData.value = []
  661. linksSampleModal.value = true
  662. }
  663. //树被点击
  664. const sampleTreeClick = ({ data }) => {
  665. searchSampleForm.value.nodeId = data['primaryKeyId'] || ''
  666. searchSampleForm.value.current = 1
  667. getLinksSampleTable()
  668. }
  669. //分页被点击
  670. const pageSampleChange = ({ current, size }) => {
  671. searchSampleForm.value.current = current
  672. searchSampleForm.value.size = size
  673. getLinksSampleTable()
  674. }
  675. //关联进场材料数据
  676. const linksSampleTableColumn = ref([
  677. { key: 'materialName', name: '取样名称' },
  678. { key: 'samplingDate', name: '取样日期' },
  679. { key: 'specificationNumber', name: '样品编号' },
  680. { key: 'specificationModel', name: '规格型号' },
  681. { key: 'materialCount', name: '试样数量' },
  682. { key: 'calculationUnit', name: '计算单位' },
  683. { key: 'proposedPosition', name: '拟用部位' },
  684. { key: 'representativeCount', name: '代表数量' },
  685. { key: 'userName', name: '取样人' },
  686. { key: 'action', name: '操作' },
  687. ])
  688. const linksSampleTableData = ref([])
  689. //获取关联数据
  690. const linksSampleTableLoading = ref(false)
  691. const getLinksSampleTable = async () => {
  692. const { nodeId } = searchSampleForm.value
  693. if (nodeId) {
  694. linksSampleTableLoading.value = true
  695. const { error, code, data } = await samplingApi.queryPage({
  696. ...searchSampleForm.value,
  697. projectId: projectId.value,
  698. contractId: contractId.value,
  699. })
  700. //处理数据
  701. linksSampleTableLoading.value = false
  702. if (!error && code === 200) {
  703. linksSampleTableData.value = getArrValue(data['records'])
  704. searchSampleForm.value.total = data.total || 0
  705. } else {
  706. linksSampleTableData.value = []
  707. searchSampleForm.value.total = 0
  708. }
  709. } else {
  710. window?.$message?.warning('请先选择一个树节点')
  711. }
  712. }
  713. //确认关联
  714. const linksSampleRow = (row) => {
  715. const form = addEditFormModel.value
  716. form.materialName = row.materialName ?? '' //样品名称
  717. form.specificationNumber = row.specificationNumber ?? '' //样品编号
  718. form.materialCount = row.materialCount ?? '' //试样数量
  719. form.userName = row.userName ?? '' //取样人
  720. form.representativeCount = row.representativeCount ?? '' //代表数量
  721. form.samplingDate = row.samplingDate ?? '' //取样日期
  722. form.samplingLocation = row.samplingLocation ?? '' //取样地点
  723. form.batchNumber = row.batchNumber ?? '' //生产批号
  724. form.specificationModel = row.specificationModel ?? '' //规格型号
  725. form.sampleId = row.id //关联ID
  726. //更新数据
  727. addEditFormModel.value = form
  728. }
  729. //关闭关联进场材料
  730. const linksSampleModalClose = () => {
  731. linksSampleModal.value = false
  732. linksSampleTableData.value = []
  733. searchSampleForm.value.current = 1
  734. }
  735. //左右拖动,改变树形结构宽度
  736. const leftWidth = ref(300)
  737. const onmousedown = () => {
  738. const leftNum = isCollapse.value ? 142 : 272
  739. document.onmousemove = (ve) => {
  740. let diffVal = ve.clientX - leftNum
  741. if (diffVal >= 260 && diffVal <= 700) {
  742. leftWidth.value = diffVal
  743. }
  744. }
  745. document.onmouseup = () => {
  746. document.onmousemove = null
  747. document.onmouseup = null
  748. }
  749. }
  750. </script>
  751. <style lang="scss" scoped>
  752. @import "../../../styles/tentative/detect/third.scss";
  753. // :deep.dialog .select-popper{
  754. // position: fixed;
  755. // top: 100px !important;
  756. // left: 133px !important;
  757. // }
  758. </style>