提交质量评价
Showing
8 changed files
with
1001 additions
and
149 deletions
| ... | @@ -114,7 +114,7 @@ export const getRegisteredList = (type) => request({ | ... | @@ -114,7 +114,7 @@ export const getRegisteredList = (type) => request({ |
| 114 | 114 | ||
| 115 | /** 质量评价审批通过 */ | 115 | /** 质量评价审批通过 */ |
| 116 | export const qualityAllow = (params) => request({ | 116 | export const qualityAllow = (params) => request({ |
| 117 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/quality-evaluation/allow`, | 117 | url: `${import.meta.env.VITE_API_NEW_PORTAL}/quality-evaluation/submit-flow`, |
| 118 | method: 'post', | 118 | method: 'post', |
| 119 | data: params | 119 | data: params |
| 120 | }); | 120 | }); | ... | ... |
| ... | @@ -38,13 +38,13 @@ export const getFlowData = (params) => request({ | ... | @@ -38,13 +38,13 @@ export const getFlowData = (params) => request({ |
| 38 | method: 'post', | 38 | method: 'post', |
| 39 | data: params | 39 | data: params |
| 40 | }) | 40 | }) |
| 41 | export const getCamundaDeploymentId = (flowType) => request({ | 41 | export const getCamundaDeploymentId = (flowType, tenantGuid = null, staffGuid = null) => request({ |
| 42 | url: `${import.meta.env.VITE_APP_WORK_FLOW_URL}/work-flow/data/get-camunda-deployment-id`, | 42 | url: `${import.meta.env.VITE_APP_WORK_FLOW_URL}/work-flow/data/get-camunda-deployment-id`, |
| 43 | method: 'post', | 43 | method: 'post', |
| 44 | data: { | 44 | data: { |
| 45 | tenantGuid: userData.tenantGuid, | 45 | tenantGuid: tenantGuid || userData.tenantGuid, |
| 46 | flowType:flowType, | 46 | flowType:flowType, |
| 47 | staffGuid: userData.staffGuid, | 47 | staffGuid: staffGuid || userData.staffGuid, |
| 48 | } | 48 | } |
| 49 | }) | 49 | }) |
| 50 | 50 | ... | ... |
| ... | @@ -967,7 +967,7 @@ const panelChange = (scope, row) => { | ... | @@ -967,7 +967,7 @@ const panelChange = (scope, row) => { |
| 967 | </div> | 967 | </div> |
| 968 | <div v-if="item.example" class="panel_header-expample">{{ item.example }}</div> | 968 | <div v-if="item.example" class="panel_header-expample">{{ item.example }}</div> |
| 969 | <el-input ref="exampleTextareaRef" :id="item.field" | 969 | <el-input ref="exampleTextareaRef" :id="item.field" |
| 970 | :class="[item.col, { is_block: item.block, 'extra-textarea-class': item.type === 'textarea' && !item.label }]" | 970 | :class="[item.col, { is_block: item.block }]" |
| 971 | v-model="formInline[item.field]" :rows="item.rows ?? 4" type="textarea" :placeholder="item.placeholder" | 971 | v-model="formInline[item.field]" :rows="item.rows ?? 4" type="textarea" :placeholder="item.placeholder" |
| 972 | :disabled="item.disabled || readonly" :readonly="item.readonly" resize="none" | 972 | :disabled="item.disabled || readonly" :readonly="item.readonly" resize="none" |
| 973 | :maxlength="item.maxlength ?? 500" show-word-limit @focus="(event) => inputFocus(event, item)" | 973 | :maxlength="item.maxlength ?? 500" show-word-limit @focus="(event) => inputFocus(event, item)" | ... | ... |
| ... | @@ -86,7 +86,19 @@ const routes: RouteRecordRaw[] = [ | ... | @@ -86,7 +86,19 @@ const routes: RouteRecordRaw[] = [ |
| 86 | cache: true, | 86 | cache: true, |
| 87 | reuse: true | 87 | reuse: true |
| 88 | } | 88 | } |
| 89 | }, | ||
| 90 | { | ||
| 91 | path: 'register-catalog-detail', | ||
| 92 | name: 'evaCatalogDetail', | ||
| 93 | component: () => import('@/views/data_asset/registerCatalogDetail.vue'), | ||
| 94 | meta: { | ||
| 95 | title: '详情-', | ||
| 96 | sidebar: false, | ||
| 97 | breadcrumb: false, | ||
| 98 | cache: true, | ||
| 99 | reuse: true | ||
| 89 | } | 100 | } |
| 101 | }, | ||
| 90 | ], | 102 | ], |
| 91 | }, | 103 | }, |
| 92 | { | 104 | { | ... | ... |
| ... | @@ -51,14 +51,14 @@ const useUserStore = defineStore( | ... | @@ -51,14 +51,14 @@ const useUserStore = defineStore( |
| 51 | //获取用户信息 | 51 | //获取用户信息 |
| 52 | account.value = res.data.logonUser | 52 | account.value = res.data.logonUser |
| 53 | userId.value = res.data.userId | 53 | userId.value = res.data.userId |
| 54 | userName.value = res.data.userName | ||
| 55 | // userData.value = JSON.stringify(res.data.data); | ||
| 56 | currentTenantGuid.value = res.data.tenantInfoList && res.data.tenantInfoList.length ? res.data.tenantInfoList[0].guid : ''; | 54 | currentTenantGuid.value = res.data.tenantInfoList && res.data.tenantInfoList.length ? res.data.tenantInfoList[0].guid : ''; |
| 57 | localStorage.setItem('currentTenantGuid', currentTenantGuid.value); | 55 | localStorage.setItem('currentTenantGuid', currentTenantGuid.value); |
| 58 | let currentTenant = res.data.tenantInfoList?.[0]; | 56 | let currentTenant = res.data.tenantInfoList?.[0]; |
| 59 | getCurrentUserInfo({tenantGuid: currentTenantGuid.value}).then((res: any) => { | 57 | getCurrentUserInfo({tenantGuid: currentTenantGuid.value}).then((res: any) => { |
| 60 | console.log(res, 'getCurrentUserInfo'); | 58 | console.log(res, 'getCurrentUserInfo'); |
| 61 | if (res.code == '00000') { | 59 | if (res.code == '00000') { |
| 60 | userName.value = res.data.staffName; | ||
| 61 | localStorage.setItem('userName', res.data?.staffName); | ||
| 62 | localStorage.setItem('userData', JSON.stringify(res.data)); | 62 | localStorage.setItem('userData', JSON.stringify(res.data)); |
| 63 | } else { | 63 | } else { |
| 64 | ElMessage.error(res.msg) | 64 | ElMessage.error(res.msg) |
| ... | @@ -66,7 +66,6 @@ const useUserStore = defineStore( | ... | @@ -66,7 +66,6 @@ const useUserStore = defineStore( |
| 66 | }) | 66 | }) |
| 67 | return getSystemMenu({ tenantGuid: currentTenantGuid.value }).then((info: any) => { | 67 | return getSystemMenu({ tenantGuid: currentTenantGuid.value }).then((info: any) => { |
| 68 | if (info.code == '00000') { | 68 | if (info.code == '00000') { |
| 69 | localStorage.setItem('userName', currentTenant?.name) | ||
| 70 | localStorage.setItem('userInfoData', JSON.stringify(info.data)); | 69 | localStorage.setItem('userInfoData', JSON.stringify(info.data)); |
| 71 | userInfoData.value = info.data; | 70 | userInfoData.value = info.data; |
| 72 | } else { | 71 | } else { | ... | ... |
| ... | @@ -11,15 +11,13 @@ import { | ... | @@ -11,15 +11,13 @@ import { |
| 11 | getQualityEvaList, | 11 | getQualityEvaList, |
| 12 | getRegisteredList, | 12 | getRegisteredList, |
| 13 | saveQuality, | 13 | saveQuality, |
| 14 | registerApproveCancel, | ||
| 15 | registerApproveBackup, | ||
| 16 | qualityAllow, | 14 | qualityAllow, |
| 17 | deleteQuality, | 15 | deleteQuality, |
| 18 | updatQuality | 16 | updatQuality |
| 19 | } from "@/api/modules/dataAsset"; | 17 | } from "@/api/modules/dataAsset"; |
| 20 | import useUserStore from "@/store/modules/user"; | 18 | import useUserStore from "@/store/modules/user"; |
| 21 | import useDataAssetStore from "@/store/modules/dataAsset"; | 19 | import useDataAssetStore from "@/store/modules/dataAsset"; |
| 22 | import { passFlowData, rejectFlowData, revokeFlowData, getCamundaDeploymentId, getProcessNodesPromise } from "@/api/modules/workFlowService"; | 20 | import { rejectFlowData, revokeFlowData, getCamundaDeploymentId, getProcessNodesPromise } from "@/api/modules/workFlowService"; |
| 23 | 21 | ||
| 24 | const assetStore = useDataAssetStore(); | 22 | const assetStore = useDataAssetStore(); |
| 25 | 23 | ||
| ... | @@ -44,7 +42,7 @@ const tableFields = ref([ | ... | @@ -44,7 +42,7 @@ const tableFields = ref([ |
| 44 | const deploymentId = ref(''); | 42 | const deploymentId = ref(''); |
| 45 | 43 | ||
| 46 | onBeforeMount(() => { | 44 | onBeforeMount(() => { |
| 47 | getCamundaDeploymentId('10018').then((res: any) => { | 45 | getCamundaDeploymentId('10018', userData.tenantGuid, userData.staffGuid).then((res: any) => { |
| 48 | if (res.code == proxy.$passCode) { | 46 | if (res.code == proxy.$passCode) { |
| 49 | deploymentId.value = res.data; | 47 | deploymentId.value = res.data; |
| 50 | } else { | 48 | } else { |
| ... | @@ -168,7 +166,7 @@ const tableInfo = ref({ | ... | @@ -168,7 +166,7 @@ const tableInfo = ref({ |
| 168 | actionInfo: { | 166 | actionInfo: { |
| 169 | label: "操作", | 167 | label: "操作", |
| 170 | type: "btn", | 168 | type: "btn", |
| 171 | width: 160, | 169 | width: 175, |
| 172 | btns: (scope) => { | 170 | btns: (scope) => { |
| 173 | let row = scope.row; | 171 | let row = scope.row; |
| 174 | return getTableBtns(row); | 172 | return getTableBtns(row); |
| ... | @@ -178,25 +176,43 @@ const tableInfo = ref({ | ... | @@ -178,25 +176,43 @@ const tableInfo = ref({ |
| 178 | 176 | ||
| 179 | const getTableBtns = (row) => { | 177 | const getTableBtns = (row) => { |
| 180 | let btnsArr: any[] = []; | 178 | let btnsArr: any[] = []; |
| 181 | if (row.approveState == 'A') {//审批中 | 179 | const approveVO = row.approveVO || {}; |
| 182 | btnsArr.push({ label: "详情", value: "path_detail" }) | 180 | const approveState = row.approveState || null; |
| 183 | if (row.tenantGuid == userData.tenantGuid) { | 181 | const approveStaffGuids = approveVO.approveStaffGuids || []; |
| 184 | btnsArr.push({ label: "撤销", value: "revoke" }); | 182 | const staffGuid = approveVO.staffGuid || ''; |
| 183 | const bizApproveState = row.bizApproveState; | ||
| 184 | const currentStaffGuid = userData.staffGuid | ||
| 185 | let isShowCancel = false; | ||
| 186 | let flowState; | ||
| 187 | if (approveState == 'N') { | ||
| 188 | flowState = 1; | ||
| 185 | } | 189 | } |
| 186 | if (row.approveTenantGuids?.includes(userData.tenantGuid)) { | 190 | if (approveState == 'A' && approveStaffGuids.indexOf(currentStaffGuid) > -1) { |
| 187 | btnsArr.push({ label: "通过", value: "pass" }); | 191 | flowState = 2; |
| 188 | btnsArr.push({ label: "驳回", value: "backup" }); | ||
| 189 | } | 192 | } |
| 190 | } else if (row.approveState == 'Y') {//已通过的不能删除。 | 193 | if ((approveState == 'C' || approveState == 'R') && staffGuid == currentStaffGuid) { |
| 191 | btnsArr.push({ label: "详情", value: "path_detail" }) | 194 | flowState = 3; |
| 192 | } else if (row.approveState == 'R' || row.approveState == 'C') {//已驳回或已撤销 | ||
| 193 | btnsArr.push({ label: "详情", value: "path_detail" }); | ||
| 194 | if (row.tenantGuid == userData.tenantGuid) { | ||
| 195 | btnsArr.push({ label: "重新提交", value: "edit", disabled: false }) | ||
| 196 | } | 195 | } |
| 197 | if (row.tenantGuid == userData.tenantGuid) { | 196 | if (approveVO && approveVO.approveState == 'A' && staffGuid == currentStaffGuid) { |
| 198 | btnsArr.push({ label: "删除", value: "delete" }); | 197 | isShowCancel = true; |
| 199 | } | 198 | } |
| 199 | if (flowState === 1) { | ||
| 200 | btnsArr = [{ label: "删除", value: "del" }] | ||
| 201 | } | ||
| 202 | if (flowState === 2) { | ||
| 203 | btnsArr = [{ label: "通过", value: "pass" }, { label: "驳回", value: "reject" }] | ||
| 204 | } | ||
| 205 | if (flowState === 3) { | ||
| 206 | btnsArr.push({ label: "删除", value: "del" }) | ||
| 207 | } | ||
| 208 | if (flowState === 3 && bizApproveState != 'D') { | ||
| 209 | btnsArr.push({ label: "重新提交", value: "redit" }) | ||
| 210 | } | ||
| 211 | if (isShowCancel) { | ||
| 212 | btnsArr.push({ label: "撤销", value: "revoke" }) | ||
| 213 | } | ||
| 214 | if (flowState !== 1) { | ||
| 215 | btnsArr.push({ label: "详情", value: "detail" }) | ||
| 200 | } | 216 | } |
| 201 | return btnsArr; | 217 | return btnsArr; |
| 202 | } | 218 | } |
| ... | @@ -207,15 +223,15 @@ const tableBtnClick = (scope, btn) => { | ... | @@ -207,15 +223,15 @@ const tableBtnClick = (scope, btn) => { |
| 207 | const type = btn.value; | 223 | const type = btn.value; |
| 208 | const row = scope.row; | 224 | const row = scope.row; |
| 209 | currTableData.value = row; | 225 | currTableData.value = row; |
| 210 | if (type == "edit") { | 226 | if (type == "redit") { |
| 211 | dialogInfo.value.visible = true; | 227 | dialogInfo.value.visible = true; |
| 212 | dialogInfo.value.type = 'reSubmit'; | 228 | dialogInfo.value.type = 'reSubmit'; |
| 213 | formItems.value[0].visible = false; | 229 | formItems.value[0].visible = false; |
| 214 | formItems.value[0].default = row.registerGuid; | 230 | formItems.value[0].default = row.registerGuid; |
| 215 | formItems.value[1].default = row.qualityEvaluationFile || []; | 231 | formItems.value[1].default = row.qualityEvaluationFile || []; |
| 216 | } else if (type == "delete") { | 232 | } else if (type == "del") { |
| 217 | delTableOpen("此操作将永久删除该资产质量评价,是否继续?", "warning"); | 233 | delTableOpen("此操作将永久删除该资产质量评价,是否继续?", "warning"); |
| 218 | } else if (type === 'backup') { | 234 | } else if (type === 'reject') { |
| 219 | rejectDialogInfo.value.visible = true; | 235 | rejectDialogInfo.value.visible = true; |
| 220 | } else if (type === 'pass') { | 236 | } else if (type === 'pass') { |
| 221 | passDialogInfo.value.visible = true; | 237 | passDialogInfo.value.visible = true; |
| ... | @@ -251,7 +267,7 @@ const tableBtnClick = (scope, btn) => { | ... | @@ -251,7 +267,7 @@ const tableBtnClick = (scope, btn) => { |
| 251 | message: '已取消撤销' | 267 | message: '已取消撤销' |
| 252 | }); | 268 | }); |
| 253 | }); | 269 | }); |
| 254 | } else if (type === 'path_detail') { // 详情 | 270 | } else if (type === 'detail') { // 详情 |
| 255 | if (row.registerApproveState == 'Y') { | 271 | if (row.registerApproveState == 'Y') { |
| 256 | router.push({ | 272 | router.push({ |
| 257 | name: 'registerDetail', | 273 | name: 'registerDetail', |
| ... | @@ -259,14 +275,14 @@ const tableBtnClick = (scope, btn) => { | ... | @@ -259,14 +275,14 @@ const tableBtnClick = (scope, btn) => { |
| 259 | }); | 275 | }); |
| 260 | } else { | 276 | } else { |
| 261 | router.push({ | 277 | router.push({ |
| 262 | name: 'registerCatalogDetail', | 278 | name: 'evaCatalogDetail', |
| 263 | query: { guid: row.damGuid, type: 'asset' } | 279 | query: { guid: row.damGuid, evaGuid: row.guid, type: 'qualityEvaluate' } |
| 264 | }); | 280 | }); |
| 265 | } | 281 | } |
| 266 | } else if (type == 'productDetail') { | 282 | } else if (type == 'productDetail') { |
| 267 | router.push({ | 283 | router.push({ |
| 268 | name: 'registerCatalogDetail', | 284 | name: 'registerCatalogDetail', |
| 269 | query: { guid: row.damGuid, type: 'asset' } | 285 | query: { guid: row.damGuid } |
| 270 | }); | 286 | }); |
| 271 | } | 287 | } |
| 272 | }; | 288 | }; |
| ... | @@ -403,9 +419,10 @@ const dialogBtnClick = (btn, info) => { | ... | @@ -403,9 +419,10 @@ const dialogBtnClick = (btn, info) => { |
| 403 | damGuid: currTableData.value.damGuid, | 419 | damGuid: currTableData.value.damGuid, |
| 404 | daName: currTableData.value.daName, | 420 | daName: currTableData.value.daName, |
| 405 | immediateApprove: true, | 421 | immediateApprove: true, |
| 406 | issuingEntityGuid: res.data?.[1]?.candidateUsers?.[0]?.staffGuid, | 422 | evaluationAgencyGuid: res.data?.[1]?.candidateUsers?.[0]?.staffGuid, |
| 407 | qualityEvaluationFile: info.qualityEvaluationFile?.map(f => f.url) || [] | 423 | qualityEvaluationFile: info.qualityEvaluationFile || [] |
| 408 | }).then((res: any) => { | 424 | }).then((res: any) => { |
| 425 | dialogInfo.value.footer.btns[1].loading = false; | ||
| 409 | if (res?.code == proxy.$passCode) { | 426 | if (res?.code == proxy.$passCode) { |
| 410 | ElMessage.success('该资产质量评价重新提交成功'); | 427 | ElMessage.success('该资产质量评价重新提交成功'); |
| 411 | dialogInfo.value.visible = false; | 428 | dialogInfo.value.visible = false; |
| ... | @@ -422,10 +439,10 @@ const dialogBtnClick = (btn, info) => { | ... | @@ -422,10 +439,10 @@ const dialogBtnClick = (btn, info) => { |
| 422 | damGuid: info.damGuid, | 439 | damGuid: info.damGuid, |
| 423 | daName: daInfo.damName, | 440 | daName: daInfo.damName, |
| 424 | immediateApprove: true, | 441 | immediateApprove: true, |
| 425 | // registerTime: daInfo.registerTime, | 442 | evaluationAgencyGuid: res.data?.[1]?.candidateUsers?.[0]?.staffGuid, |
| 426 | issuingEntityGuid: res.data?.[1]?.candidateUsers?.[0]?.staffGuid, | 443 | qualityEvaluationFile: info.qualityEvaluationFile || [] |
| 427 | qualityEvaluationFile: info.qualityEvaluationFile?.map(f => f.url) || [] | ||
| 428 | }).then((res: any) => { | 444 | }).then((res: any) => { |
| 445 | dialogInfo.value.footer.btns[1].loading = false; | ||
| 429 | if (res?.code == proxy.$passCode) { | 446 | if (res?.code == proxy.$passCode) { |
| 430 | ElMessage.success('质量评价发起成功'); | 447 | ElMessage.success('质量评价发起成功'); |
| 431 | dialogInfo.value.visible = false; | 448 | dialogInfo.value.visible = false; |
| ... | @@ -568,7 +585,7 @@ const passDialogInfo = ref({ | ... | @@ -568,7 +585,7 @@ const passDialogInfo = ref({ |
| 568 | footer: { | 585 | footer: { |
| 569 | btns: [ | 586 | btns: [ |
| 570 | { type: "default", label: "取消", value: "cancel" }, | 587 | { type: "default", label: "取消", value: "cancel" }, |
| 571 | { type: "primary", label: "确定", value: "submit" }, | 588 | { type: "primary", label: "确定", value: "submit", loading: false }, |
| 572 | ], | 589 | ], |
| 573 | }, | 590 | }, |
| 574 | }); | 591 | }); |
| ... | @@ -581,14 +598,19 @@ const passDialogInputChange = (val, item) => { | ... | @@ -581,14 +598,19 @@ const passDialogInputChange = (val, item) => { |
| 581 | 598 | ||
| 582 | const passDialogBtnClick = (btn, info) => { | 599 | const passDialogBtnClick = (btn, info) => { |
| 583 | if (btn.value == 'submit') { | 600 | if (btn.value == 'submit') { |
| 601 | passDialogInfo.value.footer.btns[1].loading = true; | ||
| 584 | qualityAllow({ | 602 | qualityAllow({ |
| 585 | guid: currTableData.value.guid, | 603 | guid: currTableData.value.approveVO.approveGuid, |
| 604 | bizGuid: currTableData.value.guid, | ||
| 605 | flowType: currTableData.value.approveVO.flowType, | ||
| 606 | approveStaffGuid: userData.staffGuid, | ||
| 586 | qualityScore: info.qualityScore, | 607 | qualityScore: info.qualityScore, |
| 587 | evaluationRangeStart: info.evaluationRange[0], | 608 | evaluationRangeStart: info.evaluationRange[0], |
| 588 | evaluationRangeEnd: info.evaluationRange[1], | 609 | evaluationRangeEnd: info.evaluationRange[1], |
| 589 | evaluationNote: info.evaluationNote, | 610 | evaluationNote: info.evaluationNote, |
| 590 | evaluationFile: info.evaluationFile.map(f => f.url), | 611 | evaluationFile: info.evaluationFile || [], |
| 591 | }).then((res: any) => { | 612 | }).then((res: any) => { |
| 613 | passDialogInfo.value.footer.btns[1].loading = false; | ||
| 592 | if (res?.code == proxy.$passCode) { | 614 | if (res?.code == proxy.$passCode) { |
| 593 | if (res.data) { | 615 | if (res.data) { |
| 594 | ElMessage.success('审批成功'); | 616 | ElMessage.success('审批成功'); |
| ... | @@ -648,13 +670,15 @@ const rejectDialogBtnClick = (btn, info) => { | ... | @@ -648,13 +670,15 @@ const rejectDialogBtnClick = (btn, info) => { |
| 648 | ElMessage.error('请填写驳回理由'); | 670 | ElMessage.error('请填写驳回理由'); |
| 649 | return | 671 | return |
| 650 | } | 672 | } |
| 673 | let row = currTableData.value; | ||
| 651 | tableInfo.value.loading = true; | 674 | tableInfo.value.loading = true; |
| 652 | let params = { | 675 | let params = { |
| 653 | bizGuid: currTableData.value.guid, | 676 | guid: row.approveVO.approveGuid, |
| 654 | funcCode: currTableData.value.funcCode, | 677 | flowType: row.approveVO.flowType, |
| 678 | approveStaffGuid: userData.staffGuid, | ||
| 655 | approveSuggest: info.approveSuggest | 679 | approveSuggest: info.approveSuggest |
| 656 | } | 680 | } |
| 657 | registerApproveBackup(params).then((res: any) => { | 681 | rejectFlowData(params).then((res: any) => { |
| 658 | tableInfo.value.loading = false; | 682 | tableInfo.value.loading = false; |
| 659 | if (res?.code == proxy.$passCode) { | 683 | if (res?.code == proxy.$passCode) { |
| 660 | if (res.data) { | 684 | if (res.data) { | ... | ... |
| ... | @@ -10,15 +10,25 @@ import { ContentWrap } from '@/components/ContentWrap'; | ... | @@ -10,15 +10,25 @@ import { ContentWrap } from '@/components/ContentWrap'; |
| 10 | import { | 10 | import { |
| 11 | getRegisterCatalogDetail, | 11 | getRegisterCatalogDetail, |
| 12 | dataSourcesList, | 12 | dataSourcesList, |
| 13 | qualityAllow, | ||
| 14 | costAssessAllow, | ||
| 13 | getRegisterCatalogTableDetail, | 15 | getRegisterCatalogTableDetail, |
| 16 | getEvaDetail | ||
| 14 | } from "@/api/modules/dataAsset"; | 17 | } from "@/api/modules/dataAsset"; |
| 15 | import { changeNum } from '@/utils/common' | 18 | import { changeNum } from '@/utils/common' |
| 19 | import { ElMessage, ElMessageBox } from "element-plus"; | ||
| 20 | import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService"; | ||
| 21 | import { CircleCloseFilled } from '@element-plus/icons-vue' | ||
| 22 | import { onUploadFilePreview, onUploadFileDownload, setFileName } from '@/api/modules/common'; | ||
| 16 | 23 | ||
| 17 | const router = useRouter(); | 24 | const router = useRouter(); |
| 18 | const route = useRoute(); | 25 | const route = useRoute(); |
| 19 | const userStore = useUserStore(); | 26 | const userStore = useUserStore(); |
| 27 | const userData = JSON.parse(userStore.userData) | ||
| 20 | const fullPath = route.fullPath; | 28 | const fullPath = route.fullPath; |
| 21 | const catalogGuid = route.query.guid; | 29 | const catalogGuid = route.query.guid; |
| 30 | const evaGuid = route.query.evaGuid; | ||
| 31 | const detailType = ref(route.query.type); | ||
| 22 | 32 | ||
| 23 | const { proxy } = getCurrentInstance() as any; | 33 | const { proxy } = getCurrentInstance() as any; |
| 24 | /** 当前主要类型的详情信息。 */ | 34 | /** 当前主要类型的详情信息。 */ |
| ... | @@ -64,6 +74,12 @@ const baseInfoFormItems = ref([ | ... | @@ -64,6 +74,12 @@ const baseInfoFormItems = ref([ |
| 64 | }, | 74 | }, |
| 65 | ]); | 75 | ]); |
| 66 | 76 | ||
| 77 | const evaDetailInfo: any = ref({}); | ||
| 78 | |||
| 79 | const deploymentId = ref(''); | ||
| 80 | |||
| 81 | const processInstanceId = ref(''); | ||
| 82 | |||
| 67 | const getDetailInfo = () => { | 83 | const getDetailInfo = () => { |
| 68 | fullscreenLoading.value = true; | 84 | fullscreenLoading.value = true; |
| 69 | getRegisterCatalogDetail(catalogGuid).then((res: any) => { | 85 | getRegisterCatalogDetail(catalogGuid).then((res: any) => { |
| ... | @@ -89,6 +105,18 @@ const getDetailInfo = () => { | ... | @@ -89,6 +105,18 @@ const getDetailInfo = () => { |
| 89 | proxy.$ElMessage.error(res.msg); | 105 | proxy.$ElMessage.error(res.msg); |
| 90 | } | 106 | } |
| 91 | }); | 107 | }); |
| 108 | if (evaGuid) { | ||
| 109 | getEvaDetail({ guid: evaGuid }).then((res: any) => { | ||
| 110 | if (res.code == proxy.$passCode) { | ||
| 111 | const data = res.data || {}; | ||
| 112 | evaDetailInfo.value = data; | ||
| 113 | deploymentId.value = data.approveVO.camundaDeploymentId; | ||
| 114 | processInstanceId.value = data.approveVO?.camundaInstanceId; | ||
| 115 | } else { | ||
| 116 | proxy.$ElMessage.error(res.msg); | ||
| 117 | } | ||
| 118 | }); | ||
| 119 | } | ||
| 92 | } | 120 | } |
| 93 | 121 | ||
| 94 | onBeforeMount(() => { | 122 | onBeforeMount(() => { |
| ... | @@ -159,10 +187,562 @@ const handleTableViewData = (scope) => { | ... | @@ -159,10 +187,562 @@ const handleTableViewData = (scope) => { |
| 159 | }); | 187 | }); |
| 160 | } | 188 | } |
| 161 | 189 | ||
| 190 | const toolBtns: any = computed(() => { | ||
| 191 | let btnsArr: any = [{ | ||
| 192 | label: "关闭", value: "cancel", plain: true | ||
| 193 | }]; | ||
| 194 | let approveVO = evaDetailInfo.value.approveVO; | ||
| 195 | let staffGuid = userData.staffGuid; | ||
| 196 | if (approveVO && approveVO.approveState == 'A' && approveVO.approveStaffGuids&&approveVO.approveStaffGuids.indexOf(staffGuid) > -1) { | ||
| 197 | btnsArr.push(...[{ label: "通过", value: "pass", type: 'primary' }, { label: "驳回", value: "reject", type: 'danger', plain: true }]); | ||
| 198 | } | ||
| 199 | if (approveVO && approveVO.approveState == 'A' && approveVO.staffGuid == staffGuid) { | ||
| 200 | btnsArr.push({ label: "撤销", value: "revoke" }); | ||
| 201 | } | ||
| 202 | return btnsArr; | ||
| 203 | }); | ||
| 204 | |||
| 205 | const btnClick = (btn) => { | ||
| 206 | const type = btn.value; | ||
| 207 | if (type == 'cancel') { | ||
| 208 | userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath)); | ||
| 209 | router.push({ | ||
| 210 | name: detailType.value == 'qualityEvaluate' ? 'qualityEvaluate' : (detailType.value == 'costAssess' ? 'valueEvaluate' : (detailType.value == 'certificate' ? 'certificateManagement' : 'registerManagemant')) | ||
| 211 | }); | ||
| 212 | } else if (type == 'pass') { | ||
| 213 | passDialogInfo.value.visible = true; | ||
| 214 | assessFormItems.value[2].placeholder = '按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币***元。本次评估结论在评估基准日后一年内有效,即自20*年*月*日至20*年*月*日止。超过一年,需重新举行资产评估。'; | ||
| 215 | qualityEvaluateFormItems.value[2].placeholder = '本次评估数据资产总体质量得分为**分\n准确性:\n一致性:\n可访问性:\n规范性:\n完整性:'; | ||
| 216 | // if (assetDetailInfo.value.dataStartDate) { | ||
| 217 | // qualityEvaluateFormItems.value[1].default = [assetDetailInfo.value.dataStartDate, assetDetailInfo.value.dataEndDate]; | ||
| 218 | // qualityEvaluateFormItems.value[1].disabled = true; | ||
| 219 | // } else { | ||
| 220 | // qualityEvaluateFormItems.value[1].default = null; | ||
| 221 | // qualityEvaluateFormItems.value[1].disabled = false; | ||
| 222 | // } | ||
| 223 | } else if (type == 'reject') { | ||
| 224 | rejectDialogInfo.value.visible = true; | ||
| 225 | } else if (type == 'revoke') { | ||
| 226 | ElMessageBox.confirm('确定撤销该资产登记审批流程吗?', "提示", { | ||
| 227 | confirmButtonText: "确定", | ||
| 228 | cancelButtonText: "取消", | ||
| 229 | type: 'warning', | ||
| 230 | }).then(() => { | ||
| 231 | let params = { | ||
| 232 | guid: evaDetailInfo.value.approveVO.approveGuid, | ||
| 233 | flowType: evaDetailInfo.value.approveVO.flowType, | ||
| 234 | approveStaffGuid: userData.staffGuid, | ||
| 235 | } | ||
| 236 | revokeFlowData(params).then((res: any) => { | ||
| 237 | if (res?.code == proxy.$passCode) { | ||
| 238 | if (res.data) { | ||
| 239 | ElMessage.success('该审批流程撤销成功!'); | ||
| 240 | getDetailInfo(); | ||
| 241 | } else { | ||
| 242 | ElMessage.error('该审批流程撤销失败!'); | ||
| 243 | } | ||
| 244 | } else { | ||
| 245 | ElMessage.error(res.msg); | ||
| 246 | } | ||
| 247 | }); | ||
| 248 | }).catch(() => { | ||
| 249 | ElMessage({ | ||
| 250 | type: 'info', | ||
| 251 | message: '已取消撤销' | ||
| 252 | }); | ||
| 253 | }); | ||
| 254 | } else if (type == 'confirm') { | ||
| 255 | passDialogInfo.value.visible = true; | ||
| 256 | } | ||
| 257 | } | ||
| 258 | |||
| 259 | const passDialogSize = computed(() => { | ||
| 260 | if (detailType.value == 'asset') { | ||
| 261 | return 460; | ||
| 262 | } else if (detailType.value == 'qualityEvaluate' || detailType.value == 'costAssess') { | ||
| 263 | return 700; | ||
| 264 | } | ||
| 265 | }); | ||
| 266 | |||
| 267 | const passDialogTitle = computed(() => { | ||
| 268 | if (detailType.value == 'asset' || detailType.value == 'qualityEvaluate' || detailType.value == 'costAssess') { | ||
| 269 | return "通过"; | ||
| 270 | } | ||
| 271 | }); | ||
| 272 | |||
| 273 | const qualityEvaluateFormItems = ref([ | ||
| 274 | { | ||
| 275 | label: '质量得分', | ||
| 276 | type: 'input', | ||
| 277 | placeholder: '请输入数值', | ||
| 278 | field: 'qualityScore', | ||
| 279 | default: '', | ||
| 280 | inputType: 'scoreNumber', | ||
| 281 | min: 0, | ||
| 282 | max: 100, | ||
| 283 | required: true | ||
| 284 | }, | ||
| 285 | { | ||
| 286 | label: "评价对象范围", | ||
| 287 | type: "date-picker", | ||
| 288 | field: "evaluationRange", | ||
| 289 | default: null, | ||
| 290 | placeholder: "开始时间~结束时间", | ||
| 291 | clearable: true, | ||
| 292 | required: true, | ||
| 293 | }, | ||
| 294 | { | ||
| 295 | label: '质量评价说明', | ||
| 296 | type: 'textarea', | ||
| 297 | example: '示例:本次评估数据资产总体质量得分为99.80分。从评价维度分析,准确性、一致性和可访问性均为 100 分;规范性 99.42 分、完整性 99.50分。', | ||
| 298 | placeholder: `本次评估数据资产总体质量得分为**分\n准确性:\n一致性:\n可访问性:\n规范性:\n完整性:`, | ||
| 299 | field: 'evaluationNote', | ||
| 300 | focusValue: true, | ||
| 301 | rows: 6, | ||
| 302 | default: '', | ||
| 303 | clearable: true, | ||
| 304 | required: true, | ||
| 305 | block: true, | ||
| 306 | }, | ||
| 307 | { | ||
| 308 | label: '质量评价报告', | ||
| 309 | tip: '支持扩展名:PDF', | ||
| 310 | type: 'upload-file', | ||
| 311 | accept: '.pdf', | ||
| 312 | limit: 1, | ||
| 313 | block: true, | ||
| 314 | required: true, | ||
| 315 | default: [], | ||
| 316 | field: 'evaluationFile', | ||
| 317 | } | ||
| 318 | ]); | ||
| 319 | |||
| 320 | const assessFormItems = ref([ | ||
| 321 | { | ||
| 322 | label: '评估金额(元)', | ||
| 323 | type: 'input', | ||
| 324 | inputType: 'moneyNumber', | ||
| 325 | placeholder: '请输入数值', | ||
| 326 | field: 'assessmentMoney', | ||
| 327 | default: '', | ||
| 328 | required: true | ||
| 329 | }, | ||
| 330 | { | ||
| 331 | label: "评价日期", | ||
| 332 | type: "date", | ||
| 333 | field: "assessmentDate", | ||
| 334 | default: null, | ||
| 335 | placeholder: "请选择", | ||
| 336 | clearable: true, | ||
| 337 | required: true, | ||
| 338 | }, | ||
| 339 | { | ||
| 340 | label: '价值评估说明', | ||
| 341 | type: 'textarea', | ||
| 342 | placeholder: '按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币***元。本次评估结论在评估基准日后一年内有效,即自20*年*月*日至20*年*月*日止。超过一年,需重新举行资产评估。', | ||
| 343 | field: 'assessmentNote', | ||
| 344 | focusValue: true, | ||
| 345 | default: '', | ||
| 346 | clearable: true, | ||
| 347 | required: true, | ||
| 348 | block: true, | ||
| 349 | }, | ||
| 350 | { | ||
| 351 | label: '价值评估报告', | ||
| 352 | tip: '支持扩展名:PDF', | ||
| 353 | type: 'upload-file', | ||
| 354 | accept: '.pdf', | ||
| 355 | limit: 1, | ||
| 356 | required: true, | ||
| 357 | block: true, | ||
| 358 | default: [], | ||
| 359 | field: 'assessmentFile', | ||
| 360 | } | ||
| 361 | ]); | ||
| 362 | |||
| 363 | const passFormItems = computed(() => { | ||
| 364 | if (detailType.value == 'asset') { | ||
| 365 | return [{ | ||
| 366 | label: '', | ||
| 367 | type: "textarea", | ||
| 368 | placeholder: "请填写通过理由(必填)", | ||
| 369 | field: "approveSuggest", | ||
| 370 | clearable: true, | ||
| 371 | block: true, | ||
| 372 | col: 'margin_b_0', | ||
| 373 | }]; | ||
| 374 | } else if (detailType.value == 'qualityEvaluate') { | ||
| 375 | return qualityEvaluateFormItems.value; | ||
| 376 | } else if (detailType.value == 'costAssess') { | ||
| 377 | return assessFormItems.value | ||
| 378 | } | ||
| 379 | }); | ||
| 380 | |||
| 381 | const evaFormRules = ref({ | ||
| 382 | qualityScore: [{ | ||
| 383 | validator: (rule: any, value: any, callback: any) => { | ||
| 384 | if (value === 0) { | ||
| 385 | callback(); | ||
| 386 | return; | ||
| 387 | } | ||
| 388 | if (!value) { | ||
| 389 | callback(new Error('请填写质量得分')); | ||
| 390 | return; | ||
| 391 | } | ||
| 392 | //TODO 请填写1~100以内的整数 | ||
| 393 | // const r = /(^[0-9]([0-9]*)$|^[0-9]$)/; // 正整数(可以以0打头) | ||
| 394 | // if (value && !r.test(value)) { | ||
| 395 | // callback(new Error('请填写大于或等于零整数')); | ||
| 396 | // return; | ||
| 397 | // } | ||
| 398 | // if ((value + '').length > 6) { | ||
| 399 | // callback(new Error('请填写1~100以内的整数')); | ||
| 400 | // return; | ||
| 401 | // } | ||
| 402 | callback(); | ||
| 403 | }, | ||
| 404 | trigger: "blur", | ||
| 405 | }], | ||
| 406 | evaluationRange: [{ | ||
| 407 | type: 'array', required: true, message: '请填写评价对象范围', trigger: 'change', | ||
| 408 | }], | ||
| 409 | evaluationNote: [{ | ||
| 410 | validator: (rule: any, value: any, callback: any) => { | ||
| 411 | if (!value) { | ||
| 412 | callback(new Error('请填写质量评价说明')); | ||
| 413 | return; | ||
| 414 | } | ||
| 415 | if (value && value.length > 500) { | ||
| 416 | callback(new Error('请填写小于500个字的质量评价说明')); | ||
| 417 | return; | ||
| 418 | } | ||
| 419 | callback(); | ||
| 420 | }, | ||
| 421 | trigger: "blur", | ||
| 422 | }], | ||
| 423 | evaluationFile: [{ | ||
| 424 | validator: (rule: any, value: any, callback: any) => { | ||
| 425 | if (!value?.length) { | ||
| 426 | callback(new Error('请上传质量评价报告')); | ||
| 427 | return; | ||
| 428 | } | ||
| 429 | callback(); | ||
| 430 | }, | ||
| 431 | trigger: "blur", | ||
| 432 | }] | ||
| 433 | }); | ||
| 434 | |||
| 435 | const passFormRules = computed(() => { | ||
| 436 | if (detailType.value == 'asset') { | ||
| 437 | return {}; | ||
| 438 | } else if (detailType.value == 'qualityEvaluate') { | ||
| 439 | return evaFormRules.value; | ||
| 440 | } else if (detailType.value == 'costAssess') { | ||
| 441 | return { | ||
| 442 | assessmentMoney: [{ | ||
| 443 | validator: (rule: any, value: any, callback: any) => { | ||
| 444 | if (value === 0) { | ||
| 445 | callback(); | ||
| 446 | return; | ||
| 447 | } | ||
| 448 | if (!value) { | ||
| 449 | callback(new Error('请填写评估金额')); | ||
| 450 | return; | ||
| 451 | } | ||
| 452 | //TODO 请填写1~100以内的整数 | ||
| 453 | // const r = /(^[0-9]([0-9]*)$|^[0-9]$)/; // 正整数(可以以0打头) | ||
| 454 | // if (value && !r.test(value)) { | ||
| 455 | // callback(new Error('请填写大于或等于零整数')); | ||
| 456 | // return; | ||
| 457 | // } | ||
| 458 | // if ((value + '').length > 6) { | ||
| 459 | // callback(new Error('请填写1~100以内的整数')); | ||
| 460 | // return; | ||
| 461 | // } | ||
| 462 | callback(); | ||
| 463 | }, | ||
| 464 | trigger: "blur", | ||
| 465 | }], | ||
| 466 | assessmentNote: [{ | ||
| 467 | validator: (rule: any, value: any, callback: any) => { | ||
| 468 | if (!value) { | ||
| 469 | callback(new Error('请填写价值评估说明')); | ||
| 470 | return; | ||
| 471 | } | ||
| 472 | if (value && value.length > 500) { | ||
| 473 | callback(new Error('请填写小于500个字的价值评估说明')); | ||
| 474 | return; | ||
| 475 | } | ||
| 476 | callback(); | ||
| 477 | }, | ||
| 478 | trigger: "blur", | ||
| 479 | }], | ||
| 480 | assessmentDate: [{ | ||
| 481 | required: true, message: '请填写评价日期', trigger: 'blur' | ||
| 482 | }], | ||
| 483 | assessmentFile: [{ | ||
| 484 | validator: (rule: any, value: any, callback: any) => { | ||
| 485 | if (!value?.length) { | ||
| 486 | callback(new Error('请上传价值评估报告')); | ||
| 487 | return; | ||
| 488 | } | ||
| 489 | callback(); | ||
| 490 | }, | ||
| 491 | trigger: "blur", | ||
| 492 | }] | ||
| 493 | } | ||
| 494 | } else if (detailType.value == 'certificate') { | ||
| 495 | return { | ||
| 496 | documentFile: [{ | ||
| 497 | validator: (rule: any, value: any, callback: any) => { | ||
| 498 | if (!value?.length) { | ||
| 499 | callback(new Error('请上传证件')) | ||
| 500 | } else { | ||
| 501 | callback(); | ||
| 502 | } | ||
| 503 | }, trigger: 'change' | ||
| 504 | }] | ||
| 505 | }; | ||
| 506 | } | ||
| 507 | }); | ||
| 508 | |||
| 509 | const passDialogInfo = ref({ | ||
| 510 | visible: false, | ||
| 511 | size: passDialogSize.value, | ||
| 512 | direction: "column", | ||
| 513 | header: { | ||
| 514 | title: passDialogTitle.value, | ||
| 515 | }, | ||
| 516 | type: '', | ||
| 517 | contents: [ | ||
| 518 | { | ||
| 519 | type: 'form', | ||
| 520 | title: '', | ||
| 521 | formInfo: { | ||
| 522 | id: 'quality-pass-dialog', | ||
| 523 | items: passFormItems.value, | ||
| 524 | rules: passFormRules.value | ||
| 525 | } | ||
| 526 | } | ||
| 527 | ], | ||
| 528 | footer: { | ||
| 529 | btns: [ | ||
| 530 | { type: "default", label: "取消", value: "cancel" }, | ||
| 531 | { type: "primary", label: "确定", value: "submit", loading: false, }, | ||
| 532 | ], | ||
| 533 | }, | ||
| 534 | }); | ||
| 535 | |||
| 536 | const passDialogInputChange = (val, item, inlineValue) => { | ||
| 537 | if (item.field == 'qualityScore') { | ||
| 538 | qualityEvaluateFormItems.value[2].placeholder = `本次评估数据资产总体质量得分为${val}分\n准确性:\n一致性:\n可访问性:\n规范性:\n完整性:`; | ||
| 539 | } else if (item.field == 'assessmentMoney') { | ||
| 540 | let M = ""; | ||
| 541 | let D = ""; | ||
| 542 | let assessmentDate = inlineValue.assessmentDate; | ||
| 543 | if (assessmentDate) { | ||
| 544 | M = (assessmentDate.getMonth() + 1 < 10 ? '0' + (assessmentDate.getMonth() + 1) : assessmentDate.getMonth() + 1); | ||
| 545 | D = (assessmentDate.getDate() + 1 < 10 ? '0' + assessmentDate.getDate() : assessmentDate.getDate()); | ||
| 546 | } | ||
| 547 | assessFormItems.value[2].placeholder = `按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币${val}元。本次评估结论在评估基准日后一年内有效,即自${inlineValue.assessmentDate ? `${inlineValue.assessmentDate.getFullYear()}年${M}月${D}日至${inlineValue.assessmentDate.getFullYear() + 1}年${M}月${D}日` : '20*年*月*日至20*年*月*日'}止。超过一年,需重新举行资产评估。`; | ||
| 548 | } else if (item.field == 'assessmentDate') { | ||
| 549 | let M = (val.getMonth() + 1 < 10 ? '0' + (val.getMonth() + 1) : val.getMonth() + 1); | ||
| 550 | let D = (val.getDate() + 1 < 10 ? '0' + val.getDate() : val.getDate()); | ||
| 551 | assessFormItems.value[2].placeholder = `按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币${inlineValue.assessmentMoney ? inlineValue.assessmentMoney : '***'}元。本次评估结论在评估基准日后一年内有效,即自${val ? `${val.getFullYear()}年${M}月${D}日至${val.getFullYear() + 1}年${M}月${D}日` : '20*年*月*日至20*年*月*日'}止。超过一年,需重新举行资产评估。`; | ||
| 552 | } | ||
| 553 | } | ||
| 554 | |||
| 555 | const submitPromise: any = ref(null); | ||
| 556 | |||
| 557 | const passDialogBtnClick = (btn, info) => { | ||
| 558 | if (btn.value == 'submit') { | ||
| 559 | if (detailType.value == 'asset') { //如果是资产登记的审批。 | ||
| 560 | if (submitPromise.value) { | ||
| 561 | return; | ||
| 562 | } | ||
| 563 | passDialogInfo.value.footer.btns[1].loading = true; | ||
| 564 | let params = { | ||
| 565 | guid: evaDetailInfo.value.approveVO.approveGuid, | ||
| 566 | flowType: evaDetailInfo.value.approveVO.flowType, | ||
| 567 | approveSuggest: info.approveSuggest, | ||
| 568 | approveStaffGuid: userData.staffGuid, | ||
| 569 | } | ||
| 570 | submitPromise.value = passFlowData(params).then((res: any) => { | ||
| 571 | submitPromise.value = null; | ||
| 572 | passDialogInfo.value.footer.btns[1].loading = false; | ||
| 573 | if (res?.code == proxy.$passCode) { | ||
| 574 | if (res.data) { | ||
| 575 | ElMessage.success('审批成功'); | ||
| 576 | passDialogInfo.value.visible = false; | ||
| 577 | getDetailInfo(); | ||
| 578 | } else { | ||
| 579 | ElMessage.error('审批失败'); | ||
| 580 | } | ||
| 581 | } else { | ||
| 582 | ElMessage.error(res.msg); | ||
| 583 | } | ||
| 584 | }); | ||
| 585 | } else if (detailType.value == 'qualityEvaluate') { | ||
| 586 | if (submitPromise.value) { | ||
| 587 | return; | ||
| 588 | } | ||
| 589 | passDialogInfo.value.footer.btns[1].loading = true; | ||
| 590 | submitPromise.value = qualityAllow({ | ||
| 591 | bizGuid: evaDetailInfo.value.guid, | ||
| 592 | flowType: evaDetailInfo.value.approveVO.flowType, | ||
| 593 | approveStaffGuid: userData.staffGuid, | ||
| 594 | guid: evaDetailInfo.value.approveVO.approveGuid, | ||
| 595 | qualityScore: info.qualityScore, | ||
| 596 | evaluationRangeStart: info.evaluationRange[0], | ||
| 597 | evaluationRangeEnd: info.evaluationRange[1], | ||
| 598 | evaluationNote: info.evaluationNote, | ||
| 599 | evaluationFile: info.evaluationFile || [] | ||
| 600 | }).then((res: any) => { | ||
| 601 | passDialogInfo.value.footer.btns[1].loading = false; | ||
| 602 | submitPromise.value = null; | ||
| 603 | if (res?.code == proxy.$passCode) { | ||
| 604 | if (res.data) { | ||
| 605 | ElMessage.success('审批成功'); | ||
| 606 | passDialogInfo.value.visible = false; | ||
| 607 | getDetailInfo(); | ||
| 608 | } else { | ||
| 609 | ElMessage.error('审批失败'); | ||
| 610 | } | ||
| 611 | } else { | ||
| 612 | ElMessage.error(res.msg); | ||
| 613 | } | ||
| 614 | }); | ||
| 615 | } else if (detailType.value == 'costAssess') { | ||
| 616 | if (submitPromise.value) { | ||
| 617 | return; | ||
| 618 | } | ||
| 619 | submitPromise.value = costAssessAllow({ | ||
| 620 | guid: evaDetailInfo.value.guid, | ||
| 621 | assessmentMoney: info.assessmentMoney, | ||
| 622 | assessmentDate: info.assessmentDate, | ||
| 623 | assessmentNote: info.assessmentNote, | ||
| 624 | assessmentFile: info.assessmentFile.map(f => f.url), | ||
| 625 | }).then((res: any) => { | ||
| 626 | submitPromise.value = null; | ||
| 627 | if (res?.code == proxy.$passCode) { | ||
| 628 | if (res.data) { | ||
| 629 | ElMessage.success('审批成功'); | ||
| 630 | passDialogInfo.value.visible = false; | ||
| 631 | getDetailInfo(); | ||
| 632 | } else { | ||
| 633 | ElMessage.error('审批失败'); | ||
| 634 | } | ||
| 635 | } else { | ||
| 636 | ElMessage.error(res.msg); | ||
| 637 | } | ||
| 638 | }); | ||
| 639 | } | ||
| 640 | } else if (btn.value == 'cancel') { | ||
| 641 | passDialogInfo.value.visible = false; | ||
| 642 | } | ||
| 643 | }; | ||
| 644 | |||
| 645 | const rejectDialogInfo = ref({ | ||
| 646 | visible: false, | ||
| 647 | size: 460, | ||
| 648 | direction: "column", | ||
| 649 | header: { | ||
| 650 | title: "驳回", | ||
| 651 | }, | ||
| 652 | type: '', | ||
| 653 | contents: [ | ||
| 654 | { | ||
| 655 | type: 'form', | ||
| 656 | title: '', | ||
| 657 | formInfo: { | ||
| 658 | id: 'batch-reject-form', | ||
| 659 | items: [ | ||
| 660 | { | ||
| 661 | label: '', | ||
| 662 | type: "textarea", | ||
| 663 | placeholder: "请填写驳回理由(必填)", | ||
| 664 | field: "approveSuggest", | ||
| 665 | clearable: true, | ||
| 666 | block: true, | ||
| 667 | col: 'margin_b_0', | ||
| 668 | } | ||
| 669 | ] | ||
| 670 | } | ||
| 671 | } | ||
| 672 | ], | ||
| 673 | footer: { | ||
| 674 | btns: [ | ||
| 675 | { type: "default", label: "取消", value: "cancel" }, | ||
| 676 | { type: "primary", label: "确定", value: "submit" }, | ||
| 677 | ], | ||
| 678 | }, | ||
| 679 | }); | ||
| 680 | |||
| 681 | const rejectDialogBtnClick = (btn, info) => { | ||
| 682 | if (btn.value == 'submit') { | ||
| 683 | if (info.approveSuggest == '') { | ||
| 684 | ElMessage.error('请填写驳回理由'); | ||
| 685 | return | ||
| 686 | } | ||
| 687 | //资产登记的驳回。 | ||
| 688 | let params = { | ||
| 689 | guid: evaDetailInfo.value.approveVO.approveGuid, | ||
| 690 | flowType: evaDetailInfo.value.approveVO.flowType, | ||
| 691 | approveSuggest: info.approveSuggest, | ||
| 692 | approveStaffGuid: userData.staffGuid, | ||
| 693 | } | ||
| 694 | rejectFlowData(params).then((res: any) => { | ||
| 695 | if (res?.code == proxy.$passCode) { | ||
| 696 | if (res.data) { | ||
| 697 | ElMessage.success('驳回成功'); | ||
| 698 | rejectDialogInfo.value.visible = false; | ||
| 699 | getDetailInfo(); | ||
| 700 | } else { | ||
| 701 | ElMessage.error('驳回失败'); | ||
| 702 | } | ||
| 703 | } else { | ||
| 704 | ElMessage.error(res.msg); | ||
| 705 | } | ||
| 706 | }); | ||
| 707 | } else if (btn.value == 'cancel') { | ||
| 708 | rejectDialogInfo.value.visible = false; | ||
| 709 | } | ||
| 710 | }; | ||
| 711 | |||
| 162 | </script> | 712 | </script> |
| 163 | 713 | ||
| 164 | <template> | 714 | <template> |
| 165 | <div class="main-content" v-loading="fullscreenLoading"> | 715 | <div class="main-content" v-loading="fullscreenLoading"> |
| 716 | <div class="detail-content" :style="{ height: detailType == 'qualityEvaluate' ? 'calc(100% - 44px)' : '100%' }"> | ||
| 717 | <div v-if="detailType == 'qualityEvaluate'" | ||
| 718 | :class="['panel_wrap', 'results_panel', evaDetailInfo.approveVO?.approveState == 'Y' ? 'success' : (evaDetailInfo.approveVO?.approveState == 'R' ? 'reject' : (evaDetailInfo.approveVO?.approveState == 'C' ? 'revoke' : 'audit'))]"> | ||
| 719 | <div class="panel_header"> | ||
| 720 | <div class="header_title" v-if="evaDetailInfo.approveVO?.approveState == 'Y'"> | ||
| 721 | <el-icon class="title-icon"> | ||
| 722 | <svg-icon name="icon-success" /> | ||
| 723 | </el-icon> | ||
| 724 | <span class="title_text">审批通过</span> | ||
| 725 | </div> | ||
| 726 | <div class="header_title" v-else-if="evaDetailInfo.approveVO?.approveState == 'R'"> | ||
| 727 | <el-icon class="title-icon"> | ||
| 728 | <CircleCloseFilled /> | ||
| 729 | </el-icon> | ||
| 730 | <span class="title_text">审批被驳回</span> | ||
| 731 | </div> | ||
| 732 | <div class="header_title" v-else-if="evaDetailInfo.approveVO?.approveState == 'A'"> | ||
| 733 | <el-icon class="title-icon"> | ||
| 734 | <svg-icon name="icon-audit" /> | ||
| 735 | </el-icon> | ||
| 736 | <span class="title_text">待审批</span> | ||
| 737 | </div> | ||
| 738 | <div class="header_title" v-else-if="evaDetailInfo.approveVO?.approveState == 'C'"> | ||
| 739 | <el-icon class="title-icon"> | ||
| 740 | <svg-icon name="icon-revoke" /> | ||
| 741 | </el-icon> | ||
| 742 | <span class="title_text">已撤销</span> | ||
| 743 | </div> | ||
| 744 | </div> | ||
| 745 | </div> | ||
| 166 | <div class="header"> | 746 | <div class="header"> |
| 167 | <div class="left-img"></div> | 747 | <div class="left-img"></div> |
| 168 | <div class="right-main"> | 748 | <div class="right-main"> |
| ... | @@ -281,13 +861,219 @@ const handleTableViewData = (scope) => { | ... | @@ -281,13 +861,219 @@ const handleTableViewData = (scope) => { |
| 281 | </el-table-column> | 861 | </el-table-column> |
| 282 | </el-table> | 862 | </el-table> |
| 283 | </ContentWrap> | 863 | </ContentWrap> |
| 864 | <ContentWrap v-if="route.query.type == 'qualityEvaluate'" id="id-assetContent" title="附件信息" description="" style="margin: 16px 16px 16px"> | ||
| 865 | <div class="list_panel mt4"> | ||
| 866 | <div class="list_item is_block isFile" v-if="evaDetailInfo?.qualityEvaluationFile?.length" :style="{ width: '40%' }"> | ||
| 867 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据质量评价收集</span> | ||
| 868 | <span v-for="(item) in (evaDetailInfo?.qualityEvaluationFile || [])" | ||
| 869 | class="item_value" :style="{ 'padding-left': '0px' }"> | ||
| 870 | <div class="file-operate"> | ||
| 871 | <template | ||
| 872 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'"> | ||
| 873 | <img class="file-img" src="../../assets/images/excel.png" /> | ||
| 874 | </template> | ||
| 875 | <template | ||
| 876 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'"> | ||
| 877 | <img class="file-img" src="../../assets/images/word.png" /> | ||
| 878 | </template> | ||
| 879 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'"> | ||
| 880 | <img class="file-img" src="../../assets/images/zip.png" /> | ||
| 881 | </template> | ||
| 882 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'"> | ||
| 883 | <img class="file-img" src="../../assets/images/RAR.png" /> | ||
| 884 | </template> | ||
| 885 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'"> | ||
| 886 | <img class="file-img" src="../../assets/images/PDF.png" /> | ||
| 887 | </template> | ||
| 888 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'"> | ||
| 889 | <img class="file-img" src="../../assets/images/png.png" /> | ||
| 890 | </template> | ||
| 891 | <template | ||
| 892 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"> | ||
| 893 | <img class="file-img" src="../../assets/images/jpg.png" /> | ||
| 894 | </template> | ||
| 895 | <div class="file-name">{{ item.name }}</div> | ||
| 896 | <div :style="{ right: '36px' }" | ||
| 897 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'" | ||
| 898 | class="file-preview" @click="onUploadFilePreview(item)">查看</div> | ||
| 899 | <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div> | ||
| 900 | </div> | ||
| 901 | </span> | ||
| 902 | </div> | ||
| 903 | </div> | ||
| 904 | </ContentWrap> | ||
| 905 | <ContentWrap id="id-qualityEvaluate" v-if="route.query.type == 'qualityEvaluate' && evaDetailInfo.qualityScore != null" title="质量评价" | ||
| 906 | description="资产质量评价信息" style="margin-top: 15px"> | ||
| 907 | <div class="list_panel"> | ||
| 908 | <div class="list_item"> | ||
| 909 | <span class="item_label">质量得分:</span> | ||
| 910 | <span class="item_value">{{ evaDetailInfo.qualityScore }}</span> | ||
| 911 | </div> | ||
| 912 | <div class="list_item" :style="{ width: '60%' }"> | ||
| 913 | <span class="item_label">评价对象范围:</span> | ||
| 914 | <span class="item_value">{{ evaDetailInfo.evaluationRangeStart + '~' + evaDetailInfo.evaluationRangeEnd | ||
| 915 | }}</span> | ||
| 916 | </div> | ||
| 917 | <div class="list_item is_block"> | ||
| 918 | <span class="item_label">质量评价结果:</span> | ||
| 919 | <span class="item_value">{{ evaDetailInfo.evaluationNote ?? '--' }}</span> | ||
| 920 | </div> | ||
| 921 | <div class="list_item is_block" :style="{ 'max-width': '700px' }"> | ||
| 922 | <span class="item_label">质量评价报告:</span> | ||
| 923 | <span class="item_value"> | ||
| 924 | <div class="file-operate"> | ||
| 925 | <img class="file-img" src="../../assets/images/PDF.png" /> | ||
| 926 | <div class="file-name">{{ evaDetailInfo.evaluationFile?.[0]?.name }}</div> | ||
| 927 | <div :style="{ right: '36px' }" class="file-preview" | ||
| 928 | @click="onUploadFilePreview(evaDetailInfo.evaluationFile?.[0])">查看</div> | ||
| 929 | <div :style="{ right: '0px' }" class="file-preview" | ||
| 930 | @click="onUploadFileDownload(evaDetailInfo.evaluationFile?.[0])">下载</div> | ||
| 931 | </div> | ||
| 932 | </span> | ||
| 933 | </div> | ||
| 934 | </div> | ||
| 935 | </ContentWrap> | ||
| 936 | <ContentWrap v-if="route.query.type == 'qualityEvaluate'" id="id-approveInfo" title="审批信息" description="" style="margin: 16px 16px 16px"> | ||
| 937 | <ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId"> | ||
| 938 | </ApprovalProcess> | ||
| 939 | </ContentWrap> | ||
| 940 | </div> | ||
| 941 | <div class="tool_btns" v-if="toolBtns.length && route.query.type == 'qualityEvaluate'"> | ||
| 942 | <div class="btns"> | ||
| 943 | <el-button v-for="btn in toolBtns" :type="btn.type" :plain="btn.plain" @click="btnClick(btn)">{{ btn.label | ||
| 944 | }}</el-button> | ||
| 945 | </div> | ||
| 946 | </div> | ||
| 947 | <Dialog :dialogInfo="passDialogInfo" @btnClick="passDialogBtnClick" @inputChange=passDialogInputChange /> | ||
| 948 | <Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" /> | ||
| 284 | </div> | 949 | </div> |
| 285 | </template> | 950 | </template> |
| 286 | 951 | ||
| 287 | <style lang="scss" scoped> | 952 | <style lang="scss" scoped> |
| 288 | .main-content { | 953 | .main-content { |
| 954 | height: 100%; | ||
| 955 | } | ||
| 956 | |||
| 957 | .detail-content { | ||
| 289 | overflow-y: auto; | 958 | overflow-y: auto; |
| 290 | height: 100%; | 959 | height: 100%; |
| 960 | |||
| 961 | .panel_wrap { | ||
| 962 | .panel_header { | ||
| 963 | .header_title { | ||
| 964 | height: 40px; | ||
| 965 | padding: 0 16px; | ||
| 966 | background-color: #fafafa; | ||
| 967 | box-shadow: 0 0 0 1px rgba(229, 229, 229, 1); | ||
| 968 | display: flex; | ||
| 969 | align-items: center; | ||
| 970 | } | ||
| 971 | |||
| 972 | .title_text { | ||
| 973 | line-height: 22px; | ||
| 974 | font-size: 14px; | ||
| 975 | color: var(--el-color-regular); | ||
| 976 | font-weight: 600; | ||
| 977 | } | ||
| 978 | } | ||
| 979 | &.results_panel { | ||
| 980 | box-shadow: 0 0 0 1px #d9d9d9; | ||
| 981 | margin: 16px 16px 0px; | ||
| 982 | |||
| 983 | .panel_header { | ||
| 984 | .header_title { | ||
| 985 | background-color: transparent; | ||
| 986 | box-shadow: none; | ||
| 987 | |||
| 988 | .el-icon { | ||
| 989 | margin-right: 8px; | ||
| 990 | width: 20px; | ||
| 991 | height: 20px; | ||
| 992 | |||
| 993 | svg { | ||
| 994 | width: 100%; | ||
| 995 | height: 100%; | ||
| 996 | } | ||
| 997 | } | ||
| 998 | } | ||
| 999 | } | ||
| 1000 | |||
| 1001 | .panel_body { | ||
| 1002 | padding-top: 0; | ||
| 1003 | margin-top: 0; | ||
| 1004 | box-shadow: none; | ||
| 1005 | |||
| 1006 | .results_list { | ||
| 1007 | display: flex; | ||
| 1008 | |||
| 1009 | .list_item { | ||
| 1010 | display: flex; | ||
| 1011 | margin-bottom: 8px; | ||
| 1012 | margin-right: 60px; | ||
| 1013 | color: #666; | ||
| 1014 | |||
| 1015 | .item_value { | ||
| 1016 | word-break: break-all; | ||
| 1017 | padding: 0 8px; | ||
| 1018 | color: var(--el-color-regular); | ||
| 1019 | } | ||
| 1020 | } | ||
| 1021 | } | ||
| 1022 | } | ||
| 1023 | |||
| 1024 | &.success { | ||
| 1025 | background-color: #F4FEF6; | ||
| 1026 | box-shadow: 0 0 0 1px #4FA55D; | ||
| 1027 | |||
| 1028 | .panel_header { | ||
| 1029 | .header_title { | ||
| 1030 | .el-icon { | ||
| 1031 | color: #4FA55D; | ||
| 1032 | } | ||
| 1033 | } | ||
| 1034 | } | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | &.reject { | ||
| 1038 | background-color: #FDF2F4; | ||
| 1039 | box-shadow: 0 0 0 1px #E63E33; | ||
| 1040 | |||
| 1041 | .panel_header { | ||
| 1042 | .header_title { | ||
| 1043 | .el-icon { | ||
| 1044 | color: #E63E33; | ||
| 1045 | } | ||
| 1046 | } | ||
| 1047 | } | ||
| 1048 | } | ||
| 1049 | |||
| 1050 | &.audit { | ||
| 1051 | background-color: #FEFBF3; | ||
| 1052 | box-shadow: 0 0 0 1px #F19E40; | ||
| 1053 | |||
| 1054 | .panel_header { | ||
| 1055 | .header_title { | ||
| 1056 | .el-icon { | ||
| 1057 | color: #F19E40; | ||
| 1058 | } | ||
| 1059 | } | ||
| 1060 | } | ||
| 1061 | } | ||
| 1062 | |||
| 1063 | &.revoke { | ||
| 1064 | background-color: #F5F5F5; | ||
| 1065 | box-shadow: 0 0 0 1px #CCCCCC; | ||
| 1066 | |||
| 1067 | .panel_header { | ||
| 1068 | .header_title { | ||
| 1069 | .el-icon { | ||
| 1070 | color: #666666; | ||
| 1071 | } | ||
| 1072 | } | ||
| 1073 | } | ||
| 1074 | } | ||
| 1075 | } | ||
| 1076 | } | ||
| 291 | } | 1077 | } |
| 292 | 1078 | ||
| 293 | .header { | 1079 | .header { |
| ... | @@ -375,4 +1161,117 @@ const handleTableViewData = (scope) => { | ... | @@ -375,4 +1161,117 @@ const handleTableViewData = (scope) => { |
| 375 | padding-right: 8px; | 1161 | padding-right: 8px; |
| 376 | } | 1162 | } |
| 377 | } | 1163 | } |
| 1164 | |||
| 1165 | .tool_btns { | ||
| 1166 | width: 100%; | ||
| 1167 | display: flex; | ||
| 1168 | justify-content: center; | ||
| 1169 | align-items: center; | ||
| 1170 | height: 44px; | ||
| 1171 | padding: 0 16px; | ||
| 1172 | border-top: 1px solid var(--el-border-color-regular); | ||
| 1173 | } | ||
| 1174 | |||
| 1175 | .file-operate { | ||
| 1176 | display: flex; | ||
| 1177 | align-items: center; | ||
| 1178 | position: relative; | ||
| 1179 | |||
| 1180 | .file-img { | ||
| 1181 | width: 24px; | ||
| 1182 | height: 24px; | ||
| 1183 | } | ||
| 1184 | |||
| 1185 | &:hover { | ||
| 1186 | background-color: #f5f5f5; | ||
| 1187 | } | ||
| 1188 | |||
| 1189 | .file-name { | ||
| 1190 | color: var(--el-color-regular); | ||
| 1191 | margin-left: 4px; | ||
| 1192 | } | ||
| 1193 | |||
| 1194 | .file-preview { | ||
| 1195 | position: absolute; | ||
| 1196 | cursor: pointer; | ||
| 1197 | color: var(--el-color-primary); | ||
| 1198 | margin-right: 8px; | ||
| 1199 | } | ||
| 1200 | } | ||
| 1201 | |||
| 1202 | .list_panel { | ||
| 1203 | display: flex; | ||
| 1204 | flex-wrap: wrap; | ||
| 1205 | display: flex; | ||
| 1206 | align-items: center; | ||
| 1207 | |||
| 1208 | .small-title { | ||
| 1209 | width: 100%; | ||
| 1210 | font-size: 14px; | ||
| 1211 | color: var(--el-text-color-primary); | ||
| 1212 | line-height: 18px; | ||
| 1213 | font-weight: 600; | ||
| 1214 | } | ||
| 1215 | |||
| 1216 | .list_item { | ||
| 1217 | width: 33.33%; | ||
| 1218 | line-height: 32px; | ||
| 1219 | font-size: 14px; | ||
| 1220 | color: var(--el-text-color-regular); | ||
| 1221 | display: flex; | ||
| 1222 | justify-content: space-between; | ||
| 1223 | min-width: 120px; | ||
| 1224 | |||
| 1225 | .item_label { | ||
| 1226 | text-align: left; | ||
| 1227 | } | ||
| 1228 | |||
| 1229 | .item_value { | ||
| 1230 | color: var(--el-color-regular); | ||
| 1231 | padding: 0 4px; | ||
| 1232 | flex: 1; | ||
| 1233 | text-align: justify; | ||
| 1234 | min-width: 0; | ||
| 1235 | } | ||
| 1236 | |||
| 1237 | &.is_block { | ||
| 1238 | width: 100%; | ||
| 1239 | |||
| 1240 | .item_value { | ||
| 1241 | white-space: pre-wrap; | ||
| 1242 | } | ||
| 1243 | } | ||
| 1244 | |||
| 1245 | .file-operate { | ||
| 1246 | display: flex; | ||
| 1247 | align-items: center; | ||
| 1248 | position: relative; | ||
| 1249 | |||
| 1250 | .file-img { | ||
| 1251 | width: 24px; | ||
| 1252 | height: 24px; | ||
| 1253 | } | ||
| 1254 | |||
| 1255 | &:hover { | ||
| 1256 | background-color: #f5f5f5; | ||
| 1257 | } | ||
| 1258 | |||
| 1259 | .file-name { | ||
| 1260 | color: var(--el-color-regular); | ||
| 1261 | margin-left: 4px; | ||
| 1262 | } | ||
| 1263 | |||
| 1264 | .file-preview { | ||
| 1265 | position: absolute; | ||
| 1266 | cursor: pointer; | ||
| 1267 | color: var(--el-color-primary); | ||
| 1268 | margin-right: 8px; | ||
| 1269 | } | ||
| 1270 | } | ||
| 1271 | } | ||
| 1272 | |||
| 1273 | .isFile { | ||
| 1274 | flex-direction: column; | ||
| 1275 | } | ||
| 1276 | } | ||
| 378 | </style> | 1277 | </style> | ... | ... |
| ... | @@ -11,10 +11,6 @@ import { CircleCloseFilled, Document } from '@element-plus/icons-vue' | ... | @@ -11,10 +11,6 @@ import { CircleCloseFilled, Document } from '@element-plus/icons-vue' |
| 11 | import { ElMessage, ElMessageBox } from "element-plus"; | 11 | import { ElMessage, ElMessageBox } from "element-plus"; |
| 12 | import { | 12 | import { |
| 13 | getRegiaterDetail, | 13 | getRegiaterDetail, |
| 14 | getApproveList, | ||
| 15 | registerApproveAllow, | ||
| 16 | registerApproveBackup, | ||
| 17 | registerApproveCancel, | ||
| 18 | getEvaDetail, | 14 | getEvaDetail, |
| 19 | qualityAllow, | 15 | qualityAllow, |
| 20 | costAssessAllow, | 16 | costAssessAllow, |
| ... | @@ -25,7 +21,6 @@ import { | ... | @@ -25,7 +21,6 @@ import { |
| 25 | } from "@/api/modules/dataAsset"; | 21 | } from "@/api/modules/dataAsset"; |
| 26 | import { | 22 | import { |
| 27 | getTenantDetailInfo, | 23 | getTenantDetailInfo, |
| 28 | getImageContent, | ||
| 29 | getTenantInfo | 24 | getTenantInfo |
| 30 | } from "@/api/modules/queryService"; | 25 | } from "@/api/modules/queryService"; |
| 31 | import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService"; | 26 | import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService"; |
| ... | @@ -87,6 +82,8 @@ const getDetailInfo = () => { | ... | @@ -87,6 +82,8 @@ const getDetailInfo = () => { |
| 87 | const data = res.data || {}; | 82 | const data = res.data || {}; |
| 88 | evaDetailInfo.value = data; | 83 | evaDetailInfo.value = data; |
| 89 | detailInfo.value = data; | 84 | detailInfo.value = data; |
| 85 | deploymentId.value = data.approveVO.camundaDeploymentId; | ||
| 86 | processInstanceId.value = data.approveVO?.camundaInstanceId; | ||
| 90 | //需要显示质量评价信息 | 87 | //需要显示质量评价信息 |
| 91 | if (data.qualityScore != null) { | 88 | if (data.qualityScore != null) { |
| 92 | if (tabsInfo.value.tabs.length == 4) { | 89 | if (tabsInfo.value.tabs.length == 4) { |
| ... | @@ -509,14 +506,14 @@ const toolBtns: any = computed(() => { | ... | @@ -509,14 +506,14 @@ const toolBtns: any = computed(() => { |
| 509 | } | 506 | } |
| 510 | return btnsArr; | 507 | return btnsArr; |
| 511 | } | 508 | } |
| 512 | if (detailInfo.value.approveState == 'A') { | 509 | let approveVO = detailInfo.value.approveVO; |
| 513 | if (detailInfo.value.approveTenantGuids?.includes(userData.tenantGuid)) { | 510 | let staffGuid = userData.staffGuid; |
| 511 | if (approveVO && approveVO.approveState == 'A' && approveVO.approveStaffGuids&&approveVO.approveStaffGuids.indexOf(staffGuid) > -1) { | ||
| 514 | btnsArr.push(...[{ label: "通过", value: "pass", type: 'primary' }, { label: "驳回", value: "reject", type: 'danger', plain: true }]); | 512 | btnsArr.push(...[{ label: "通过", value: "pass", type: 'primary' }, { label: "驳回", value: "reject", type: 'danger', plain: true }]); |
| 515 | } | 513 | } |
| 516 | if (detailInfo.value.tenantGuid == userData.tenantGuid) { | 514 | if (approveVO && approveVO.approveState == 'A' && approveVO.staffGuid == staffGuid) { |
| 517 | btnsArr.push({ label: "撤销", value: "revoke" }); | 515 | btnsArr.push({ label: "撤销", value: "revoke" }); |
| 518 | } | 516 | } |
| 519 | } | ||
| 520 | return btnsArr; | 517 | return btnsArr; |
| 521 | }); | 518 | }); |
| 522 | 519 | ||
| ... | @@ -920,12 +917,15 @@ const passDialogBtnClick = (btn, info) => { | ... | @@ -920,12 +917,15 @@ const passDialogBtnClick = (btn, info) => { |
| 920 | return; | 917 | return; |
| 921 | } | 918 | } |
| 922 | submitPromise.value = qualityAllow({ | 919 | submitPromise.value = qualityAllow({ |
| 923 | guid: detailInfo.value.guid, | 920 | bizGuid: detailInfo.value.guid, |
| 921 | flowType: detailInfo.value.approveVO.flowType, | ||
| 922 | approveStaffGuid: userData.staffGuid, | ||
| 923 | guid: detailInfo.value.approveVO.approveGuid, | ||
| 924 | qualityScore: info.qualityScore, | 924 | qualityScore: info.qualityScore, |
| 925 | evaluationRangeStart: info.evaluationRange[0], | 925 | evaluationRangeStart: info.evaluationRange[0], |
| 926 | evaluationRangeEnd: info.evaluationRange[1], | 926 | evaluationRangeEnd: info.evaluationRange[1], |
| 927 | evaluationNote: info.evaluationNote, | 927 | evaluationNote: info.evaluationNote, |
| 928 | evaluationFile: info.evaluationFile.map(f => f.url), | 928 | evaluationFile: info.evaluationFile || [], |
| 929 | }).then((res: any) => { | 929 | }).then((res: any) => { |
| 930 | submitPromise.value = null; | 930 | submitPromise.value = null; |
| 931 | if (res?.code == proxy.$passCode) { | 931 | if (res?.code == proxy.$passCode) { |
| ... | @@ -1086,34 +1086,34 @@ const formattedDate = (dateVal) => { | ... | @@ -1086,34 +1086,34 @@ const formattedDate = (dateVal) => { |
| 1086 | </div> | 1086 | </div> |
| 1087 | <div class="main-wrap" ref="contentRef"> | 1087 | <div class="main-wrap" ref="contentRef"> |
| 1088 | <div v-if="detailType != 'certificate' && detailType != 'asset'" | 1088 | <div v-if="detailType != 'certificate' && detailType != 'asset'" |
| 1089 | :class="['panel_wrap', 'results_panel', detailInfo.approveState == 'Y' ? 'success' : (detailInfo.approveState == 'R' ? 'reject' : (detailInfo.approveState == 'C' ? 'revoke' : 'audit'))]"> | 1089 | :class="['panel_wrap', 'results_panel', detailInfo.approveVO?.approveState == 'Y' ? 'success' : (detailInfo.approveVO?.approveState == 'R' ? 'reject' : (detailInfo.approveVO?.approveState == 'C' ? 'revoke' : 'audit'))]"> |
| 1090 | <div class="panel_header"> | 1090 | <div class="panel_header"> |
| 1091 | <div class="header_title" v-if="detailInfo.approveState == 'Y'"> | 1091 | <div class="header_title" v-if="detailInfo.approveVO?.approveState == 'Y'"> |
| 1092 | <el-icon class="title-icon"> | 1092 | <el-icon class="title-icon"> |
| 1093 | <svg-icon name="icon-success" /> | 1093 | <svg-icon name="icon-success" /> |
| 1094 | </el-icon> | 1094 | </el-icon> |
| 1095 | <span class="title_text">审批通过</span> | 1095 | <span class="title_text">审批通过</span> |
| 1096 | </div> | 1096 | </div> |
| 1097 | <div class="header_title" v-else-if="detailInfo.approveState == 'R'"> | 1097 | <div class="header_title" v-else-if="detailInfo.approveVO?.approveState == 'R'"> |
| 1098 | <el-icon class="title-icon"> | 1098 | <el-icon class="title-icon"> |
| 1099 | <CircleCloseFilled /> | 1099 | <CircleCloseFilled /> |
| 1100 | </el-icon> | 1100 | </el-icon> |
| 1101 | <span class="title_text">审批被驳回</span> | 1101 | <span class="title_text">审批被驳回</span> |
| 1102 | </div> | 1102 | </div> |
| 1103 | <div class="header_title" v-else-if="detailInfo.approveState == 'A'"> | 1103 | <div class="header_title" v-else-if="detailInfo.approveVO?.approveState == 'A'"> |
| 1104 | <el-icon class="title-icon"> | 1104 | <el-icon class="title-icon"> |
| 1105 | <svg-icon name="icon-audit" /> | 1105 | <svg-icon name="icon-audit" /> |
| 1106 | </el-icon> | 1106 | </el-icon> |
| 1107 | <span class="title_text">待审批</span> | 1107 | <span class="title_text">待审批</span> |
| 1108 | </div> | 1108 | </div> |
| 1109 | <div class="header_title" v-else-if="detailInfo.approveState == 'C'"> | 1109 | <div class="header_title" v-else-if="detailInfo.approveVO?.approveState == 'C'"> |
| 1110 | <el-icon class="title-icon"> | 1110 | <el-icon class="title-icon"> |
| 1111 | <svg-icon name="icon-revoke" /> | 1111 | <svg-icon name="icon-revoke" /> |
| 1112 | </el-icon> | 1112 | </el-icon> |
| 1113 | <span class="title_text">已撤销</span> | 1113 | <span class="title_text">已撤销</span> |
| 1114 | </div> | 1114 | </div> |
| 1115 | </div> | 1115 | </div> |
| 1116 | <div class="panel_body" v-if="detailInfo.approveState != 'A' && detailInfo.approveState != 'C'"> | 1116 | <div class="panel_body" v-if="detailInfo.approveVO?.approveState != 'A' && detailInfo.approveVO?.approveState != 'C'"> |
| 1117 | <div class="results_list"> | 1117 | <div class="results_list"> |
| 1118 | <div class="list_item"> | 1118 | <div class="list_item"> |
| 1119 | <span class="item_label">审批人:</span> | 1119 | <span class="item_label">审批人:</span> |
| ... | @@ -1123,7 +1123,7 @@ const formattedDate = (dateVal) => { | ... | @@ -1123,7 +1123,7 @@ const formattedDate = (dateVal) => { |
| 1123 | <span class="item_label">审批时间:</span> | 1123 | <span class="item_label">审批时间:</span> |
| 1124 | <span class="item_value">{{ approveTableInfo.data.at(-1)?.approveTime || '--' }}</span> | 1124 | <span class="item_value">{{ approveTableInfo.data.at(-1)?.approveTime || '--' }}</span> |
| 1125 | </div> | 1125 | </div> |
| 1126 | <div class="list_item" v-if="detailInfo.approveState == 'R'"> | 1126 | <div class="list_item" v-if="detailInfo.approveVO?.approveState == 'R'"> |
| 1127 | <span class="item_label">审批意见:</span> | 1127 | <span class="item_label">审批意见:</span> |
| 1128 | <span class="item_value">{{ approveTableInfo.data.at(-1)?.approveSuggest || '--' }}</span> | 1128 | <span class="item_value">{{ approveTableInfo.data.at(-1)?.approveSuggest || '--' }}</span> |
| 1129 | </div> | 1129 | </div> |
| ... | @@ -1380,7 +1380,7 @@ const formattedDate = (dateVal) => { | ... | @@ -1380,7 +1380,7 @@ const formattedDate = (dateVal) => { |
| 1380 | </div> | 1380 | </div> |
| 1381 | </span> | 1381 | </span> |
| 1382 | </div> | 1382 | </div> |
| 1383 | <!-- <div class="list_item is_block isFile" :style="{ width: '40%' }" | 1383 | <div class="list_item is_block isFile" :style="{ width: '40%' }" |
| 1384 | v-if="(detailType != 'asset' || assetDetailInfo.isEvaluationAssessment == 'Y') && assetDetailInfo.registerAttachment?.qualityEvaluationFile?.length"> | 1384 | v-if="(detailType != 'asset' || assetDetailInfo.isEvaluationAssessment == 'Y') && assetDetailInfo.registerAttachment?.qualityEvaluationFile?.length"> |
| 1385 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据质量评价收集</span> | 1385 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据质量评价收集</span> |
| 1386 | <span v-for="(item) in (assetDetailInfo.registerAttachment?.qualityEvaluationFile || [])" | 1386 | <span v-for="(item) in (assetDetailInfo.registerAttachment?.qualityEvaluationFile || [])" |
| ... | @@ -1410,14 +1410,14 @@ const formattedDate = (dateVal) => { | ... | @@ -1410,14 +1410,14 @@ const formattedDate = (dateVal) => { |
| 1410 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"> | 1410 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"> |
| 1411 | <img class="file-img" src="../../assets/images/jpg.png" /> | 1411 | <img class="file-img" src="../../assets/images/jpg.png" /> |
| 1412 | </template> | 1412 | </template> |
| 1413 | <div class="file-name">{{ setFileName(item.name) }}</div> | 1413 | <div class="file-name">{{ item.name }}</div> |
| 1414 | <div :style="{ right: '36px' }" | 1414 | <div :style="{ right: '36px' }" |
| 1415 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'" | 1415 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'" |
| 1416 | class="file-preview" @click="onUploadFilePreview(item)">查看</div> | 1416 | class="file-preview" @click="onUploadFilePreview(item)">查看</div> |
| 1417 | <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div> | 1417 | <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div> |
| 1418 | </div> | 1418 | </div> |
| 1419 | </span> | 1419 | </span> |
| 1420 | </div> --> | 1420 | </div> |
| 1421 | <div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }" | 1421 | <div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }" |
| 1422 | v-if="detailType == 'certificate' && assetDetailInfo.registerAttachment?.assessmentFile?.length"> | 1422 | v-if="detailType == 'certificate' && assetDetailInfo.registerAttachment?.assessmentFile?.length"> |
| 1423 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据价值评估</span> | 1423 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据价值评估</span> |
| ... | @@ -1456,88 +1456,6 @@ const formattedDate = (dateVal) => { | ... | @@ -1456,88 +1456,6 @@ const formattedDate = (dateVal) => { |
| 1456 | </div> | 1456 | </div> |
| 1457 | </span> | 1457 | </span> |
| 1458 | </div> | 1458 | </div> |
| 1459 | <div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }" | ||
| 1460 | v-if="detailType == 'certificate' && assetDetailInfo.registerAttachment?.evaluationFile?.length"> | ||
| 1461 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">质量评估报告</span> | ||
| 1462 | <span v-for="(item) in (assetDetailInfo.registerAttachment?.evaluationFile || [])" class="item_value" | ||
| 1463 | :style="{ 'padding-left': '0px' }"> | ||
| 1464 | <div class="file-operate"> | ||
| 1465 | <template | ||
| 1466 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'"> | ||
| 1467 | <img class="file-img" src="../../assets/images/excel.png" /> | ||
| 1468 | </template> | ||
| 1469 | <template | ||
| 1470 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'"> | ||
| 1471 | <img class="file-img" src="../../assets/images/word.png" /> | ||
| 1472 | </template> | ||
| 1473 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'"> | ||
| 1474 | <img class="file-img" src="../../assets/images/zip.png" /> | ||
| 1475 | </template> | ||
| 1476 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'"> | ||
| 1477 | <img class="file-img" src="../../assets/images/RAR.png" /> | ||
| 1478 | </template> | ||
| 1479 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'"> | ||
| 1480 | <img class="file-img" src="../../assets/images/PDF.png" /> | ||
| 1481 | </template> | ||
| 1482 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'"> | ||
| 1483 | <img class="file-img" src="../../assets/images/png.png" /> | ||
| 1484 | </template> | ||
| 1485 | <template | ||
| 1486 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"> | ||
| 1487 | <img class="file-img" src="../../assets/images/jpg.png" /> | ||
| 1488 | </template> | ||
| 1489 | <div class="file-name">{{ setFileName(item.name) }}</div> | ||
| 1490 | <div :style="{ right: '36px' }" | ||
| 1491 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'" | ||
| 1492 | class="file-preview" @click="onUploadFilePreview(item)">查看</div> | ||
| 1493 | <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div> | ||
| 1494 | </div> | ||
| 1495 | </span> | ||
| 1496 | </div> | ||
| 1497 | |||
| 1498 | |||
| 1499 | |||
| 1500 | |||
| 1501 | <div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }" | ||
| 1502 | v-if="(detailType == 'asset' && assetDetailInfo.isCostAssessment == 'Y') && assetDetailInfo.registerAttachment?.costAssessmentFile?.length"> | ||
| 1503 | <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">价值评估报告</span> | ||
| 1504 | <span v-for="(item) in (assetDetailInfo.registerAttachment?.costAssessmentFile || [])" class="item_value" | ||
| 1505 | :style="{ 'padding-left': '0px' }"> | ||
| 1506 | <div class="file-operate"> | ||
| 1507 | <template | ||
| 1508 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'"> | ||
| 1509 | <img class="file-img" src="../../assets/images/excel.png" /> | ||
| 1510 | </template> | ||
| 1511 | <template | ||
| 1512 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'"> | ||
| 1513 | <img class="file-img" src="../../assets/images/word.png" /> | ||
| 1514 | </template> | ||
| 1515 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'"> | ||
| 1516 | <img class="file-img" src="../../assets/images/zip.png" /> | ||
| 1517 | </template> | ||
| 1518 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'"> | ||
| 1519 | <img class="file-img" src="../../assets/images/RAR.png" /> | ||
| 1520 | </template> | ||
| 1521 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'"> | ||
| 1522 | <img class="file-img" src="../../assets/images/PDF.png" /> | ||
| 1523 | </template> | ||
| 1524 | <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'"> | ||
| 1525 | <img class="file-img" src="../../assets/images/png.png" /> | ||
| 1526 | </template> | ||
| 1527 | <template | ||
| 1528 | v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"> | ||
| 1529 | <img class="file-img" src="../../assets/images/jpg.png" /> | ||
| 1530 | </template> | ||
| 1531 | <div class="file-name">{{ setFileName(item.name) }}</div> | ||
| 1532 | <div :style="{ right: '36px' }" | ||
| 1533 | v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'" | ||
| 1534 | class="file-preview" @click="onUploadFilePreview(item)">查看</div> | ||
| 1535 | <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div> | ||
| 1536 | </div> | ||
| 1537 | </span> | ||
| 1538 | </div> | ||
| 1539 | |||
| 1540 | |||
| 1541 | 1459 | ||
| 1542 | <div class="list_item is_block isFile" :style="{ width: '40%' }" | 1460 | <div class="list_item is_block isFile" :style="{ width: '40%' }" |
| 1543 | v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y') && assetDetailInfo.registerAttachment?.evaluationFile?.length"> | 1461 | v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y') && assetDetailInfo.registerAttachment?.evaluationFile?.length"> | ... | ... |
-
Please register or sign in to post a comment