recordCheck.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="100px"
  10. >
  11. <el-form-item label="任务单号" prop="orderNo">
  12. <el-input
  13. v-model="queryParams.orderNo"
  14. placeholder="请输入任务单号"
  15. clearable
  16. @keyup.enter="handleQuery"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <el-form-item label="记录编号" prop="recordNo">
  21. <el-input
  22. v-model="queryParams.recordNo"
  23. placeholder="请输入记录编号"
  24. clearable
  25. @keyup.enter="handleQuery"
  26. class="!w-240px"
  27. />
  28. </el-form-item>
  29. <el-form-item label="工程号" prop="projectNo">
  30. <el-input
  31. v-model="queryParams.projectNo"
  32. placeholder="请输入工程号"
  33. clearable
  34. @keyup.enter="handleQuery"
  35. class="!w-240px"
  36. />
  37. </el-form-item>
  38. <!-- <el-form-item label="工程名称" prop="projectName">-->
  39. <!-- <el-input-->
  40. <!-- v-model="queryParams.projectName"-->
  41. <!-- placeholder="请输入工程名称"-->
  42. <!-- clearable-->
  43. <!-- @keyup.enter="handleQuery"-->
  44. <!-- class="!w-240px"-->
  45. <!-- />-->
  46. <!-- </el-form-item>-->
  47. <el-form-item label="单位名称" prop="unitName">
  48. <el-input
  49. v-model="queryParams.unitName"
  50. placeholder="请输入单位名称"
  51. clearable
  52. @keyup.enter="handleQuery"
  53. class="!w-240px"
  54. />
  55. </el-form-item>
  56. <el-form-item label="检验类型" prop="checkType">
  57. <el-select
  58. v-model="queryParams.checkType"
  59. placeholder="请选择检验类型"
  60. clearable
  61. class="!w-240px"
  62. >
  63. <el-option
  64. v-for="(item, key) in PressurePipeCheckTypeMap"
  65. :key="key"
  66. :label="item"
  67. :value="key"
  68. />
  69. </el-select>
  70. </el-form-item>
  71. <el-form-item label="检验项目" prop="checkProject">
  72. <el-input
  73. v-model="queryParams.checkProject"
  74. placeholder="请输入检验项目"
  75. clearable
  76. @keyup.enter="handleQuery"
  77. class="!w-240px"
  78. />
  79. </el-form-item>
  80. <el-form-item label="检验员" prop="checkUserStrIds">
  81. <el-select
  82. class="!w-240px"
  83. v-model="queryParams.checkUserStrIds"
  84. readonly
  85. clearable
  86. placeholder="请选择检验员"
  87. multiple
  88. popper-class="user-select-popper"
  89. @click.stop.prevent="() => handleOpenUserDialog(recheckStrIdsOpts, 'checkUserStrIds')"
  90. >
  91. <el-option
  92. v-for="child in recheckStrIdsOpts"
  93. :key="child && child.id"
  94. :label="child.nickName"
  95. :value="child.id"
  96. />
  97. </el-select>
  98. </el-form-item>
  99. <!-- <el-form-item label="已检天数" prop="checkedDays">-->
  100. <!-- <el-input-->
  101. <!-- v-model="queryParams.checkedDays"-->
  102. <!-- placeholder="请输入已检天数"-->
  103. <!-- clearable-->
  104. <!-- @keyup.enter="handleQuery"-->
  105. <!-- class="!w-240px"-->
  106. <!-- />-->
  107. <!-- </el-form-item>-->
  108. <el-form-item label="审核状态" prop="recheckStatus">
  109. <el-select v-model="queryParams.recheckStatus" placeholder="请选择审核状态" clearable class="!w-240px">
  110. <el-option label="全部" value="all" />
  111. <el-option
  112. v-for="(item, key) in PressureCheckerRecheckStatusMap"
  113. :key="key"
  114. :label="item"
  115. :value="key"
  116. />
  117. </el-select>
  118. </el-form-item>
  119. <el-form-item label="校核人" prop="recheckStrIds">
  120. <el-select
  121. class="!w-240px"
  122. v-model="queryParams.recheckStrIds"
  123. readonly
  124. clearable
  125. placeholder="请选择校核人"
  126. multiple
  127. popper-class="user-select-popper"
  128. @click.stop.prevent="() => handleOpenUserDialog(recheckStrIdsOpts, 'recheckStrIds')"
  129. >
  130. <el-option
  131. v-for="child in recheckStrIdsOpts"
  132. :key="child && child.id"
  133. :label="child.nickName"
  134. :value="child.id"
  135. />
  136. </el-select>
  137. </el-form-item>
  138. <el-form-item label="项目负责人" prop="managerStrIds">
  139. <el-select
  140. class="!w-240px"
  141. v-model="queryParams.managerStrIds"
  142. readonly
  143. clearable
  144. placeholder="请选择项目负责人"
  145. multiple
  146. popper-class="user-select-popper"
  147. @click.stop.prevent="() => handleOpenUserDialog(recheckStrIdsOpts, 'managerStrIds')"
  148. >
  149. <el-option
  150. v-for="child in recheckStrIdsOpts"
  151. :key="child && child.id"
  152. :label="child.nickName"
  153. :value="child.id"
  154. />
  155. </el-select>
  156. </el-form-item>
  157. <el-form-item>
  158. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  159. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  160. </el-form-item>
  161. </el-form>
  162. </ContentWrap>
  163. <!-- 列表 -->
  164. <ContentWrap>
  165. <!-- <el-radio-group class="mb-20px" v-model="isClaim" @change="handleQuery">
  166. <el-radio-button label="全部" value="all" />
  167. <el-radio-button label="审核中" value="100" />
  168. <el-radio-button label="已通过" value="200" />
  169. <el-radio-button label="已拒绝" value="300" />
  170. </el-radio-group> -->
  171. <el-table v-loading="loading" :data="list" :stripe="true" border>
  172. <el-table-column label="任务单号" align="center" prop="orderNo" min-width="150px" />
  173. <el-table-column label="记录编号" align="center" prop="subReportNo" min-width="205px">
  174. <template #default="scope">
  175. <div class="report-number-cell">
  176. <span
  177. v-if="getReportTypeIcon(scope.row.reportType)"
  178. :class="getReportTypeIconClass(scope.row.reportType)"
  179. >
  180. {{ getReportTypeIcon(scope.row.reportType) }}
  181. </span>
  182. <span>{{ scope.row.subReportNo || '-' }}</span>
  183. </div>
  184. </template>
  185. </el-table-column>
  186. <!-- <el-table-column label="设备注册代码" align="center" prop="equipCode" min-width="200px">-->
  187. <!-- <template #default="{ row }">-->
  188. <!-- {{ row.equipCode }}-->
  189. <!-- <div class="mt-8px">-->
  190. <!-- <el-tag v-if="row.productCode" type="success">-->
  191. <!-- {{ row.productCode }}-->
  192. <!-- </el-tag>-->
  193. <!-- </div>-->
  194. <!-- </template>-->
  195. <!-- </el-table-column>-->
  196. <el-table-column label="工程号" align="center" prop="projectNo" min-width="200px">
  197. <template #default="{ row }">
  198. <div class="project-info"
  199. v-for="(item, index) in row.projectNoList"
  200. :key="item?.id || index">
  201. <el-tag type="success" class="project-name-tag">{{ item }}</el-tag>
  202. </div>
  203. </template>
  204. </el-table-column>
  205. <el-table-column label="检验性质" align="center" prop="checkType" min-width="120px">
  206. <template #default="scope">
  207. {{ PressurePipeCheckTypeMap[scope.row.checkType] || '-' }}
  208. </template>
  209. </el-table-column>
  210. <el-table-column label="单位名称" align="center" prop="unitName" min-width="200px" />
  211. <el-table-column label="检验项目" align="center" prop="reportName" min-width="150px">
  212. <template #default="{row}">
  213. <template v-if="!row.recheckList || !row.recheckList?.length">
  214. <el-row style="justify-content: center;">{{ row.reportName }}</el-row>
  215. </template>
  216. <template v-else>
  217. <el-row style="justify-content: center;" v-for="item in row.recheckList" :key="JSON.stringify(item)">{{ item.reportName }}</el-row>
  218. </template>
  219. </template>
  220. </el-table-column>
  221. <el-table-column label="项目负责人" align="center" prop="manager" min-width="120px">
  222. <template #default="scope">
  223. {{
  224. scope.row.manager
  225. ? `${scope.row.manager.nickname} (${scope.row.manager.employeeNo})`
  226. : '-'
  227. }}
  228. </template>
  229. </el-table-column>
  230. <el-table-column label="检验员" align="center" prop="checkUsers" min-width="150px">
  231. <template #default="scope">
  232. <div v-if="scope.row.checkUsers && scope.row.checkUsers.length > 0">
  233. <div v-for="user in scope.row.checkUsers" :key="user.id">
  234. {{ user.nickname }} ({{ user.employeeNo }})
  235. </div>
  236. </div>
  237. <div v-else>-</div>
  238. </template>
  239. </el-table-column>
  240. <el-table-column label="校核人" align="center" prop="dataEntry" min-width="120px">
  241. <template #default="scope">
  242. {{ scope.row.recheckName || '-' }}
  243. </template>
  244. </el-table-column>
  245. <el-table-column label="剩余期限(工作日)" align="center" prop="workDays" min-width="100px">
  246. <template #default="scope">
  247. {{ scope.row.workDays || '10' }}
  248. </template>
  249. </el-table-column>
  250. <el-table-column label="状态" align="center" prop="recheckStatus" min-width="120px">
  251. <template #default="scope">
  252. <el-tag :type="getStatusTagType(scope.row.recheckStatus)">
  253. {{ PressureCheckerRecheckStatusMap[scope.row.recheckStatus] || '未知状态' }}
  254. </el-tag>
  255. </template>
  256. </el-table-column>
  257. <!-- 退回原因 -->
  258. <el-table-column label="退回原因" align="center" prop="recheckReason" min-width="150px">
  259. <template #default="scope">
  260. {{ scope.row.recheckReason || '-' }}
  261. </template>
  262. </el-table-column>
  263. <el-table-column label="提交时间" align="center" prop="submitTime" min-width="155px">
  264. <template #default="scope">
  265. {{ formatDate(scope.row.submitTime) }}
  266. </template>
  267. </el-table-column>
  268. <!-- 操作 -->
  269. <el-table-column label="操作" align="center" min-width="150px" fixed="right">
  270. <template #default="scope">
  271. <el-button
  272. link
  273. type="primary"
  274. @click="handleCheck(scope.row)"
  275. v-if="scope.row.recheckStatus === PressureCheckerRecheckStatus.AUDITING"
  276. >
  277. 校核
  278. </el-button>
  279. <el-button
  280. link
  281. type="primary"
  282. @click="handleView(scope.row)"
  283. v-if="scope.row.recheckStatus !== PressureCheckerRecheckStatus.AUDITING"
  284. >
  285. 详情
  286. </el-button>
  287. <el-button link type="primary" @click="handleShowRecord(scope.row)"> 流转记录 </el-button>
  288. </template>
  289. </el-table-column>
  290. </el-table>
  291. <!-- 分页 -->
  292. <Pagination
  293. :total="total"
  294. v-model:page="queryParams.pageNo"
  295. v-model:limit="queryParams.pageSize"
  296. @pagination="getList"
  297. />
  298. </ContentWrap>
  299. <AuditCheckRecord
  300. v-if="showAuditCheckRecord"
  301. v-model:visible="showAuditCheckRecord"
  302. :reportUrl="reportUrl"
  303. v-model:recheckInfo="recheckInfo"
  304. :auditId="auditId"
  305. :id="idValue"
  306. :apiParams="auditApiParams"
  307. :pageType="pageType"
  308. :flagStatus="true"
  309. :equipId="equipId"
  310. :reportType="reportType"
  311. :rejectFn="!recheckInfo?.recheckList ? PipeTaskOrderApi.rejectRecordTemplateAudit : PipeTaskOrderApi.batchRejectRecheck"
  312. :passFn="!recheckInfo?.recheckList ? PipeTaskOrderApi.passRecordTemplateAudit : PipeTaskOrderApi.batchPassRecheck"
  313. @close="handleCloseAuditDetail"
  314. />
  315. <!-- 流转记录对话框 -->
  316. <ReportRecordDialog v-model:visible="showRecordDialog" :selected-item="selectedRecordItem" />
  317. <!-- 选择人员公共弹窗 -->
  318. <CustomDialog
  319. v-model="customUserDialogVisible"
  320. :dialogAttrs="{
  321. zIndex: 10006
  322. }"
  323. @confirm="handleUserConfirm"
  324. >
  325. <el-input
  326. v-model="userQueryData.nickName"
  327. clearable
  328. placeholder="请输入名称"
  329. @keyup.enter="handleFetchUserList"
  330. style="margin-bottom: 14px"
  331. >
  332. <template #append>
  333. <el-button @click="handleFetchUserList">
  334. <Icon icon="ep:search" />
  335. </el-button>
  336. </template>
  337. </el-input>
  338. <SmartTable
  339. ref="userTableRef"
  340. v-model:pageNo="userQueryData.pageNo"
  341. v-model:pagesize="userQueryData.pageSize"
  342. :total="userQueryData.total"
  343. v-model:columns="userColumns"
  344. :data="userTableList"
  345. :buttons="[]"
  346. :showSettingTools="false"
  347. :showSearch="false"
  348. :showRefresh="false"
  349. @on-page-size-change="onPageSizeChange"
  350. @on-page-no-change="onPageNoChange"
  351. />
  352. </CustomDialog>
  353. </template>
  354. <script setup lang="ts">
  355. import AuditCheckRecord from './AuditCheckRecord.vue'
  356. import ReportRecordDialog from './components/ReportRecordDialog.vue'
  357. import { ref, reactive, onMounted, computed } from 'vue'
  358. import { useMessage } from '@/hooks/web/useMessage'
  359. import { PipeTaskOrderApi } from '@/api/pressure2/pipetaskorder'
  360. import {
  361. PressureCheckerRecheckStatus,
  362. PressureReportType, PressurePipeCheckTypeMap
  363. } from '@/utils/constants'
  364. import SmartTable from '@/components/SmartTable/SmartTable'
  365. import { getUserList } from '@/api/common/user'
  366. import { useUserStore } from '@/store/modules/user'
  367. import { cloneDeep } from 'lodash-es'
  368. import { useRoute } from 'vue-router'
  369. import { formatDate } from '@/utils/formatTime'
  370. const PressureCheckerRecheckStatusMap = {
  371. [PressureCheckerRecheckStatus.AUDITING]: '审核中',
  372. [PressureCheckerRecheckStatus.APPROVED]: '已通过',
  373. [PressureCheckerRecheckStatus.REJECTED]: '退回',
  374. }
  375. const route = useRoute()
  376. const userStore = useUserStore()
  377. const userInfo = computed(() => userStore.user)
  378. /** 记录校核页面 */
  379. defineOptions({ name: 'PipeCheckerRecordCheck' })
  380. const fieldKey = ref('')
  381. const loading = ref(true)
  382. const list = ref<any[]>([])
  383. const total = ref(0)
  384. // 人员选择弹窗
  385. const checkFormOptions = ref<any[]>([])
  386. const queryParams = reactive<Recordable>({
  387. pageNo: 1,
  388. pageSize: 10,
  389. orderNo: undefined,
  390. recordNo: undefined,
  391. projectName: undefined,
  392. projectNo: undefined,
  393. unitName: undefined,
  394. checkType: undefined,
  395. checkProject: undefined,
  396. //checkUserStrIds: [userInfo.value.id], //检验员, 用户id集合
  397. checkUserStrIds: [],
  398. checkedDays: undefined,
  399. // status: undefined,
  400. recheckStrIds: [userInfo.value.id],
  401. //managerStrIds: [userInfo.value.id], //项目负责人,用户id集合
  402. managerStrIds: [],
  403. recheckStatus: '100'
  404. })
  405. const queryFormRef = ref()
  406. const message = useMessage()
  407. // 获取状态标签类型
  408. const getStatusTagType = (
  409. status: number
  410. ): 'success' | 'warning' | 'info' | 'primary' | 'danger' => {
  411. const statusTagMap: Record<number, 'success' | 'warning' | 'info' | 'primary' | 'danger'> = {
  412. [PressureCheckerRecheckStatus.AUDITING]: 'primary',
  413. [PressureCheckerRecheckStatus.APPROVED]: 'success',
  414. [PressureCheckerRecheckStatus.REJECTED]: 'danger'
  415. }
  416. return statusTagMap[status] || 'info'
  417. }
  418. /** 查询列表 */
  419. const getList = async () => {
  420. loading.value = true
  421. try {
  422. const params: Record<string, any> = cloneDeep(queryParams)
  423. params.recheckStrIds = params.recheckStrIds.join(',')
  424. params.managerStrIds = params.managerStrIds.join(',')
  425. params.checkUserStrIds = params.checkUserStrIds.join(',')
  426. //if(params.status === 'all') delete params.status
  427. if(params.recheckStatus === 'all') delete params.recheckStatus
  428. if(!params.recheckStrIds) delete params.recheckStrIds
  429. if(!params.managerStrIds) delete params.managerStrIds
  430. if(!params.checkUserStrIds) delete params.checkUserStrIds
  431. const data = await PipeTaskOrderApi.getTaskOrderOrderItemRecheckPage(params)
  432. list.value = data.list || []
  433. total.value = data.total || 0
  434. } catch (error) {
  435. console.error('获取记录校核列表失败:', error)
  436. message.error('获取列表数据失败')
  437. } finally {
  438. loading.value = false
  439. }
  440. }
  441. // const isClaim = ref('100')
  442. /** 搜索按钮操作 */
  443. const handleQuery = () => {
  444. // if (isClaim.value === 'all') {
  445. // // 清除状态筛选
  446. // delete queryParams.recheckStatus
  447. // } else {
  448. // // 设置状态筛选
  449. // queryParams.recheckStatus = [isClaim.value]
  450. // }
  451. queryParams.pageNo = 1
  452. getList()
  453. }
  454. /** 重置按钮操作 */
  455. const resetQuery = () => {
  456. queryFormRef.value.resetFields()
  457. queryParams.recheckStrIds = [userInfo.value.id]
  458. handleQuery()
  459. }
  460. /** 校核 */
  461. const showAuditCheckRecord = ref(false)
  462. const reportUrl = ref('')
  463. const auditId = ref('')
  464. const idValue = ref('')
  465. const equipId = ref('')
  466. const auditApiParams = ref({})
  467. const reportType = ref(0)
  468. const pageType = ref('check')
  469. const recheckInfo = ref({})
  470. const handleCheck = async (row: any) => {
  471. //测试先注释
  472. //if (!row.reportUrl) return ElMessage.warning('缺少记录文件地址,请联系管理员!')
  473. pageType.value = 'check'
  474. showAuditCheckRecord.value = true
  475. reportUrl.value = row.reportUrl
  476. auditId.value = row.reportId
  477. equipId.value = row.equipId
  478. idValue.value = row.id
  479. auditApiParams.value = {
  480. id: row.reportId
  481. }
  482. // 从后端获取同一 orderItemId + 当前校核人 的所有待校核项(跨报告合并),不受分页影响
  483. const relatedItems = await PipeTaskOrderApi.getRecheckRelatedItems(row.id)
  484. recheckInfo.value = {
  485. ...row,
  486. recheckList: relatedItems || []
  487. }
  488. //console.log(row.reportType, !row.reportType ? 0 : Number(row.reportType))
  489. reportType.value = !row.reportType ? 0 : Number(row.reportType)
  490. console.log(equipId.value);
  491. }
  492. // 审核详情页面关闭回调
  493. const handleCloseAuditDetail = () => {
  494. auditApiParams.value = {}
  495. reportType.value = 0
  496. getList()
  497. }
  498. /** 查看详情 */
  499. const handleView = (row: any) => {
  500. // 根据实际需求实现详情查看功能
  501. pageType.value = 'detail'
  502. showAuditCheckRecord.value = true
  503. reportUrl.value = row.reportUrl
  504. auditId.value = row.reportId
  505. equipId.value = row.equipId
  506. idValue.value = row.id
  507. auditApiParams.value = {
  508. id: row.reportId
  509. }
  510. reportType.value = row.reportType
  511. // message.info('详情查看功能待实现')
  512. }
  513. /** 流转记录对话框状态 */
  514. const showRecordDialog = ref(false)
  515. const selectedRecordItem = ref<any>(null)
  516. // 显示流转记录
  517. const handleShowRecord = (row: any) => {
  518. selectedRecordItem.value = {
  519. ...row,
  520. id: row.reportId || row.id
  521. }
  522. showRecordDialog.value = true
  523. }
  524. // 人员选择弹窗
  525. // const checkFormItem = ref<any>({})
  526. const recheckStrIdsOpts = ref<any[]>([
  527. { id: userInfo.value.id, nickName: userInfo.value?.nickname }
  528. ])
  529. const userTableRef = ref()
  530. const customUserDialogVisible = ref(false)
  531. interface UserListQuery {
  532. nickName: string
  533. pageNo: number
  534. pageSize: number
  535. total?: number
  536. }
  537. const userQueryData = reactive<UserListQuery>({
  538. nickName: '',
  539. pageNo: 1,
  540. pageSize: 10,
  541. total: 0
  542. })
  543. const userTableList = ref<any[]>([])
  544. const userColumns = ref<any[]>([
  545. {
  546. type: 'selection',
  547. width: '50px'
  548. },
  549. {
  550. label: '工号',
  551. prop: 'employeeNo'
  552. },
  553. {
  554. label: '姓名',
  555. prop: 'nickname'
  556. },
  557. {
  558. label: '部门',
  559. prop: 'deptName'
  560. }
  561. ])
  562. // 打开用户选择框
  563. const handleOpenUserDialog = (options: any, key: string) => {
  564. checkFormOptions.value = options
  565. userQueryData.nickName = ''
  566. fieldKey.value = key
  567. userQueryData.pageNo = 1
  568. userQueryData.pageSize = 10
  569. handleFetchUserList()
  570. }
  571. // 获取用户信息
  572. const handleFetchUserList = async () => {
  573. const queryParams: UserListQuery = {
  574. ...userQueryData
  575. }
  576. delete queryParams.total
  577. const result = await getUserList(queryParams)
  578. userTableList.value = result.list
  579. userQueryData.total = result.total
  580. customUserDialogVisible.value = true
  581. }
  582. const onPageSizeChange = (val) => {
  583. userQueryData.pageSize = val
  584. handleFetchUserList()
  585. }
  586. const onPageNoChange = (val) => {
  587. userQueryData.pageNo = val
  588. handleFetchUserList()
  589. }
  590. const handleUserConfirm = () => {
  591. console.log('getTableRef', userTableRef.value.getTableRef())
  592. const selectRows = userTableRef.value.getTableRef().getSelectionRows()
  593. console.log('selectRows', selectRows)
  594. // 过滤组合合成options
  595. const currOptions = checkFormOptions.value.map((item) => item.id) || []
  596. selectRows
  597. .filter((item) => !currOptions.includes(item.id))
  598. .forEach((item) => {
  599. checkFormOptions.value.push({
  600. id: item.id,
  601. nickName: item.nickname,
  602. employeeNo: item.employeeNo
  603. })
  604. })
  605. queryParams[fieldKey.value] = [
  606. ...new Set([...queryParams[fieldKey.value], ...selectRows.map((row) => row.id)])
  607. ]
  608. customUserDialogVisible.value = false
  609. }
  610. // 获取报告类型图标样式类
  611. const getReportTypeIconClass = (reportType): string => {
  612. reportType = Number(reportType)
  613. switch (reportType) {
  614. case PressureReportType.MAIN: // 100 主报告
  615. return 'report-type-icon main'
  616. case PressureReportType.SUB: // 200 子报告
  617. return 'report-type-icon sub'
  618. case PressureReportType.SINGLE: // 300 独审报告
  619. return 'report-type-icon single'
  620. case PressureReportType.SUBCONTRACT:
  621. return 'report-type-icon subcontract'
  622. default:
  623. return 'report-type-icon'
  624. }
  625. }
  626. // 获取报告类型图标
  627. const getReportTypeIcon = (reportType) => {
  628. reportType = Number(reportType)
  629. switch (reportType) {
  630. case PressureReportType.MAIN: // 100 主报告
  631. return '主'
  632. case PressureReportType.SINGLE: // 300 独审报告
  633. return '独'
  634. case PressureReportType.SUB: // 200 子报告
  635. return '子'
  636. case PressureReportType.SUBCONTRACT:
  637. return '分'
  638. default:
  639. return null // 子报告或未知类型不显示图标
  640. }
  641. }
  642. watch(() => route.path, async () => {
  643. if (route.path === '/gdjy/record-check/pipe') {
  644. await getList()
  645. }
  646. })
  647. /** 初始化 */
  648. onMounted(() => {
  649. const { searchUserId } = route.query
  650. if (searchUserId) {
  651. queryParams.checkUserStrIds = []
  652. queryParams.recheckStrIds = [searchUserId as string]
  653. queryParams.managerStrIds = []
  654. }
  655. getList()
  656. })
  657. </script>
  658. <style lang="scss" scoped>
  659. // 可以添加必要的样式
  660. </style>
  661. <style lang="scss" scoped>
  662. .user-select-popper {
  663. display: none !important;
  664. }
  665. .report-number-cell {
  666. display: flex;
  667. align-items: center;
  668. gap: 8px;
  669. justify-content: center;
  670. .report-type-icon {
  671. display: inline-flex;
  672. align-items: center;
  673. justify-content: center;
  674. width: 20px;
  675. height: 20px;
  676. background-color: var(--el-color-primary);
  677. color: white;
  678. border-radius: 3px;
  679. font-size: 12px;
  680. font-weight: bold;
  681. flex-shrink: 0;
  682. &.main {
  683. background-color: var(--el-color-primary); // 主报告使用系统primary颜色
  684. }
  685. &.sub {
  686. background-color: var(--el-color-primary); // 主报告使用系统primary颜色
  687. }
  688. &.single {
  689. background-color: #e6a23c; // 独审报告使用橙色
  690. }
  691. &.subcontract {
  692. background-color: #afadf6; // 分包项目使用蓝色
  693. }
  694. }
  695. }
  696. </style>