Commit c8479d2ed605d53e7b00cbed40e4120941d1a6bc
1 parent
2061c5fb
优化工作单pc 端办理bug
Showing
9 changed files
with
707 additions
and
99 deletions
src/api/oa/workTaskDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | ||
| 3 | + | ||
| 4 | +// 获取工单详情 | ||
| 5 | +export function getWorkDetail(params) { | ||
| 6 | + return new Promise((resolve, reject) => { | ||
| 7 | + request({ | ||
| 8 | + url: '/work.listWorkPool', | ||
| 9 | + method: 'get', | ||
| 10 | + params: { | ||
| 11 | + ...params, | ||
| 12 | + communityId: getCommunityId() | ||
| 13 | + } | ||
| 14 | + }).then(response => { | ||
| 15 | + const res = response.data | ||
| 16 | + resolve(res) | ||
| 17 | + }).catch(error => { | ||
| 18 | + reject(error) | ||
| 19 | + }) | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 获取工单项列表 | ||
| 24 | +export function getWorkTaskItems(params) { | ||
| 25 | + return new Promise((resolve, reject) => { | ||
| 26 | + request({ | ||
| 27 | + url: '/task.listWorkTaskItem', | ||
| 28 | + method: 'get', | ||
| 29 | + params: { | ||
| 30 | + ...params, | ||
| 31 | + communityId: getCommunityId() | ||
| 32 | + } | ||
| 33 | + }).then(response => { | ||
| 34 | + const res = response.data | ||
| 35 | + resolve(res) | ||
| 36 | + }).catch(error => { | ||
| 37 | + reject(error) | ||
| 38 | + }) | ||
| 39 | + }) | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +// 获取工单事件列表 | ||
| 43 | +export function getWorkEvents(params) { | ||
| 44 | + return new Promise((resolve, reject) => { | ||
| 45 | + request({ | ||
| 46 | + url: '/workEvent.listWorkEvent', | ||
| 47 | + method: 'get', | ||
| 48 | + params: { | ||
| 49 | + ...params, | ||
| 50 | + communityId: getCommunityId() | ||
| 51 | + } | ||
| 52 | + }).then(response => { | ||
| 53 | + const res = response.data | ||
| 54 | + resolve(res) | ||
| 55 | + }).catch(error => { | ||
| 56 | + reject(error) | ||
| 57 | + }) | ||
| 58 | + }) | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +// 获取工单文件列表 | ||
| 62 | +export function getWorkFiles(params) { | ||
| 63 | + return new Promise((resolve, reject) => { | ||
| 64 | + request({ | ||
| 65 | + url: '/work.listWorkPoolFile', | ||
| 66 | + method: 'get', | ||
| 67 | + params: { | ||
| 68 | + ...params, | ||
| 69 | + communityId: getCommunityId() | ||
| 70 | + } | ||
| 71 | + }).then(response => { | ||
| 72 | + const res = response.data | ||
| 73 | + resolve(res) | ||
| 74 | + }).catch(error => { | ||
| 75 | + reject(error) | ||
| 76 | + }) | ||
| 77 | + }) | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +// 完成工单任务 | ||
| 81 | +export function finishWorkTask(data) { | ||
| 82 | + return new Promise((resolve, reject) => { | ||
| 83 | + request({ | ||
| 84 | + url: '/work.finishWorkTask', | ||
| 85 | + method: 'post', | ||
| 86 | + data: { | ||
| 87 | + ...data, | ||
| 88 | + communityId: getCommunityId() | ||
| 89 | + } | ||
| 90 | + }).then(response => { | ||
| 91 | + const res = response.data | ||
| 92 | + resolve(res) | ||
| 93 | + }).catch(error => { | ||
| 94 | + reject(error) | ||
| 95 | + }) | ||
| 96 | + }) | ||
| 97 | +} | ||
| 98 | + | ||
| 99 | +// 获取组织树 | ||
| 100 | +export function getOrgTree(params) { | ||
| 101 | + return new Promise((resolve, reject) => { | ||
| 102 | + request({ | ||
| 103 | + url: '/org.listOrgTree', | ||
| 104 | + method: 'get', | ||
| 105 | + params: { | ||
| 106 | + ...params, | ||
| 107 | + communityId: getCommunityId() | ||
| 108 | + } | ||
| 109 | + }).then(response => { | ||
| 110 | + const res = response.data | ||
| 111 | + resolve(res) | ||
| 112 | + }).catch(error => { | ||
| 113 | + reject(error) | ||
| 114 | + }) | ||
| 115 | + }) | ||
| 116 | +} | ||
| 117 | + | ||
| 118 | +// 获取员工列表 | ||
| 119 | +export function getStaffList(params) { | ||
| 120 | + return new Promise((resolve, reject) => { | ||
| 121 | + request({ | ||
| 122 | + url: '/query.staff.infos', | ||
| 123 | + method: 'get', | ||
| 124 | + params: { | ||
| 125 | + ...params, | ||
| 126 | + communityId: getCommunityId() | ||
| 127 | + } | ||
| 128 | + }).then(response => { | ||
| 129 | + const res = response.data | ||
| 130 | + resolve(res) | ||
| 131 | + }).catch(error => { | ||
| 132 | + reject(error) | ||
| 133 | + }) | ||
| 134 | + }) | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +// 上传文件 | ||
| 138 | +export function uploadFile(data, config) { | ||
| 139 | + return new Promise((resolve, reject) => { | ||
| 140 | + const formData = new FormData() | ||
| 141 | + formData.append('uploadFile', data.get('uploadFile')) | ||
| 142 | + | ||
| 143 | + request({ | ||
| 144 | + url: '/uploadVedio/upload', | ||
| 145 | + method: 'post', | ||
| 146 | + data: formData, | ||
| 147 | + headers: { | ||
| 148 | + 'Content-Type': 'multipart/form-data' | ||
| 149 | + }, | ||
| 150 | + ...config | ||
| 151 | + }).then(response => { | ||
| 152 | + const res = response.data | ||
| 153 | + resolve(res) | ||
| 154 | + }).catch(error => { | ||
| 155 | + reject(error) | ||
| 156 | + }) | ||
| 157 | + }) | ||
| 158 | +} | ||
| 0 | \ No newline at end of file | 159 | \ No newline at end of file |
src/components/oa/WorkDetailTask.vue
| @@ -161,7 +161,7 @@ export default { | @@ -161,7 +161,7 @@ export default { | ||
| 161 | }, | 161 | }, |
| 162 | openWorkTaskDetail(work) { | 162 | openWorkTaskDetail(work) { |
| 163 | this.$router.push({ | 163 | this.$router.push({ |
| 164 | - path: '/oa/workTaskDetail', | 164 | + path: '/pages/oa/workTaskDetail', |
| 165 | query: { | 165 | query: { |
| 166 | workId: work.workId, | 166 | workId: work.workId, |
| 167 | taskId: work.taskId | 167 | taskId: work.taskId |
src/i18n/commonLang.js
| @@ -62,7 +62,8 @@ export const messages = { | @@ -62,7 +62,8 @@ export const messages = { | ||
| 62 | file:'File', | 62 | file:'File', |
| 63 | hide:'Hide', | 63 | hide:'Hide', |
| 64 | viewDetail:'View Detail', | 64 | viewDetail:'View Detail', |
| 65 | - yuan:'yuan' | 65 | + yuan:'yuan', |
| 66 | + process:'Process' | ||
| 66 | } | 67 | } |
| 67 | }, | 68 | }, |
| 68 | zh: { | 69 | zh: { |
| @@ -128,7 +129,8 @@ export const messages = { | @@ -128,7 +129,8 @@ export const messages = { | ||
| 128 | file:'附件', | 129 | file:'附件', |
| 129 | hide:'隐藏', | 130 | hide:'隐藏', |
| 130 | viewDetail:'查看详情', | 131 | viewDetail:'查看详情', |
| 131 | - yuan:'元' | 132 | + yuan:'元', |
| 133 | + process:'处理' | ||
| 132 | } | 134 | } |
| 133 | } | 135 | } |
| 134 | } | 136 | } |
| 135 | \ No newline at end of file | 137 | \ No newline at end of file |
src/i18n/oaI18n.js
| @@ -56,6 +56,7 @@ import { messages as visitUndoMessages } from '../views/oa/visitUndoLang' | @@ -56,6 +56,7 @@ import { messages as visitUndoMessages } from '../views/oa/visitUndoLang' | ||
| 56 | import { messages as doHistoryComplaintsMessages } from '../views/oa/doHistoryComplaintsLang' | 56 | import { messages as doHistoryComplaintsMessages } from '../views/oa/doHistoryComplaintsLang' |
| 57 | import { messages as myAuditHistoryOrdersMessages } from '../views/resource/myAuditHistoryOrdersLang' | 57 | import { messages as myAuditHistoryOrdersMessages } from '../views/resource/myAuditHistoryOrdersLang' |
| 58 | import { messages as visitFinishMessages } from '../views/oa/visitFinishLang' | 58 | import { messages as visitFinishMessages } from '../views/oa/visitFinishLang' |
| 59 | +import { messages as workTaskDetailMessages } from '../views/oa/workTaskDetailLang' | ||
| 59 | 60 | ||
| 60 | 61 | ||
| 61 | export const messages ={ | 62 | export const messages ={ |
| @@ -117,6 +118,7 @@ export const messages ={ | @@ -117,6 +118,7 @@ export const messages ={ | ||
| 117 | ...doHistoryComplaintsMessages.en, | 118 | ...doHistoryComplaintsMessages.en, |
| 118 | ...myAuditHistoryOrdersMessages.en, | 119 | ...myAuditHistoryOrdersMessages.en, |
| 119 | ...visitFinishMessages.en, | 120 | ...visitFinishMessages.en, |
| 121 | + ...workTaskDetailMessages.en, | ||
| 120 | }, | 122 | }, |
| 121 | zh:{ | 123 | zh:{ |
| 122 | ...activitiesTypeManageMessages.zh, | 124 | ...activitiesTypeManageMessages.zh, |
| @@ -176,5 +178,6 @@ export const messages ={ | @@ -176,5 +178,6 @@ export const messages ={ | ||
| 176 | ...doHistoryComplaintsMessages.zh, | 178 | ...doHistoryComplaintsMessages.zh, |
| 177 | ...myAuditHistoryOrdersMessages.zh, | 179 | ...myAuditHistoryOrdersMessages.zh, |
| 178 | ...visitFinishMessages.zh, | 180 | ...visitFinishMessages.zh, |
| 181 | + ...workTaskDetailMessages.zh, | ||
| 179 | } | 182 | } |
| 180 | } | 183 | } |
| 181 | \ No newline at end of file | 184 | \ No newline at end of file |
src/router/oaRouter.js
| @@ -269,4 +269,9 @@ export default [ | @@ -269,4 +269,9 @@ export default [ | ||
| 269 | name:'/pages/property/visitFinish', | 269 | name:'/pages/property/visitFinish', |
| 270 | component: () => import('@/views/oa/visitFinishList.vue') | 270 | component: () => import('@/views/oa/visitFinishList.vue') |
| 271 | }, | 271 | }, |
| 272 | + { | ||
| 273 | + path:'/pages/oa/workTaskDetail', | ||
| 274 | + name:'/pages/oa/workTaskDetail', | ||
| 275 | + component: () => import('@/views/oa/workTaskDetailList.vue') | ||
| 276 | + }, | ||
| 272 | ] | 277 | ] |
| 273 | \ No newline at end of file | 278 | \ No newline at end of file |
src/views/oa/doWorkList.vue
| @@ -4,12 +4,9 @@ | @@ -4,12 +4,9 @@ | ||
| 4 | <el-col :span="4"> | 4 | <el-col :span="4"> |
| 5 | <el-card class="tree-card"> | 5 | <el-card class="tree-card"> |
| 6 | <ul class="state-list"> | 6 | <ul class="state-list"> |
| 7 | - <li | ||
| 8 | - v-for="(item,index) in doWorkInfo.states" | ||
| 9 | - :key="index" | ||
| 10 | - @click="swatchWorkState(item)" | ||
| 11 | - :class="{'active-state':doWorkInfo.conditions.state === item.state}"> | ||
| 12 | - {{item.name}} | 7 | + <li v-for="(item, index) in doWorkInfo.states" :key="index" @click="swatchWorkState(item)" |
| 8 | + :class="{ 'active-state': doWorkInfo.conditions.state === item.state }"> | ||
| 9 | + {{ item.name }} | ||
| 13 | </li> | 10 | </li> |
| 14 | </ul> | 11 | </ul> |
| 15 | </el-card> | 12 | </el-card> |
| @@ -21,31 +18,21 @@ | @@ -21,31 +18,21 @@ | ||
| 21 | </div> | 18 | </div> |
| 22 | <el-row :gutter="20"> | 19 | <el-row :gutter="20"> |
| 23 | <el-col :span="4"> | 20 | <el-col :span="4"> |
| 24 | - <el-input | ||
| 25 | - v-model.trim="doWorkInfo.conditions.workNameLike" | ||
| 26 | - :placeholder="$t('doWork.search.workNameLike')" | ||
| 27 | - clearable /> | 21 | + <el-input v-model.trim="doWorkInfo.conditions.workNameLike" |
| 22 | + :placeholder="$t('doWork.search.workNameLike')" clearable /> | ||
| 28 | </el-col> | 23 | </el-col> |
| 29 | <el-col :span="4"> | 24 | <el-col :span="4"> |
| 30 | - <el-input | ||
| 31 | - v-model.trim="doWorkInfo.conditions.staffNameLike" | ||
| 32 | - :placeholder="$t('doWork.search.staffNameLike')" | ||
| 33 | - clearable /> | 25 | + <el-input v-model.trim="doWorkInfo.conditions.staffNameLike" |
| 26 | + :placeholder="$t('doWork.search.staffNameLike')" clearable /> | ||
| 34 | </el-col> | 27 | </el-col> |
| 35 | <el-col :span="4"> | 28 | <el-col :span="4"> |
| 36 | - <el-date-picker | ||
| 37 | - v-model="doWorkInfo.conditions.queryStartTime" | ||
| 38 | - type="datetime" | ||
| 39 | - :placeholder="$t('doWork.search.queryStartTime')" | ||
| 40 | - value-format="yyyy-MM-dd HH:mm:ss"> | 29 | + <el-date-picker v-model="doWorkInfo.conditions.queryStartTime" type="datetime" |
| 30 | + :placeholder="$t('doWork.search.queryStartTime')" value-format="yyyy-MM-dd HH:mm:ss"> | ||
| 41 | </el-date-picker> | 31 | </el-date-picker> |
| 42 | </el-col> | 32 | </el-col> |
| 43 | <el-col :span="4"> | 33 | <el-col :span="4"> |
| 44 | - <el-date-picker | ||
| 45 | - v-model="doWorkInfo.conditions.queryEndTime" | ||
| 46 | - type="datetime" | ||
| 47 | - :placeholder="$t('doWork.search.queryEndTime')" | ||
| 48 | - value-format="yyyy-MM-dd HH:mm:ss" | 34 | + <el-date-picker v-model="doWorkInfo.conditions.queryEndTime" type="datetime" |
| 35 | + :placeholder="$t('doWork.search.queryEndTime')" value-format="yyyy-MM-dd HH:mm:ss" | ||
| 49 | :disabled="!doWorkInfo.conditions.queryStartTime"> | 36 | :disabled="!doWorkInfo.conditions.queryStartTime"> |
| 50 | </el-date-picker> | 37 | </el-date-picker> |
| 51 | </el-col> | 38 | </el-col> |
| @@ -66,104 +53,53 @@ | @@ -66,104 +53,53 @@ | ||
| 66 | <div slot="header" class="flex justify-between"> | 53 | <div slot="header" class="flex justify-between"> |
| 67 | <span>{{ $t('doWork.table.title') }}</span> | 54 | <span>{{ $t('doWork.table.title') }}</span> |
| 68 | </div> | 55 | </div> |
| 69 | - <el-table | ||
| 70 | - :data="doWorkInfo.works" | ||
| 71 | - border | ||
| 72 | - style="width: 100%" | ||
| 73 | - v-loading="loading"> | ||
| 74 | - <el-table-column | ||
| 75 | - prop="workId" | ||
| 76 | - :label="$t('doWork.table.workId')" | ||
| 77 | - align="center"> | 56 | + <el-table :data="doWorkInfo.works" border style="width: 100%" v-loading="loading"> |
| 57 | + <el-table-column prop="workId" :label="$t('doWork.table.workId')" align="center"> | ||
| 78 | </el-table-column> | 58 | </el-table-column> |
| 79 | - <el-table-column | ||
| 80 | - prop="workName" | ||
| 81 | - :label="$t('doWork.table.workName')" | ||
| 82 | - align="center"> | 59 | + <el-table-column prop="workName" :label="$t('doWork.table.workName')" align="center"> |
| 83 | </el-table-column> | 60 | </el-table-column> |
| 84 | - <el-table-column | ||
| 85 | - prop="typeName" | ||
| 86 | - :label="$t('doWork.table.typeName')" | ||
| 87 | - align="center"> | 61 | + <el-table-column prop="typeName" :label="$t('doWork.table.typeName')" align="center"> |
| 88 | </el-table-column> | 62 | </el-table-column> |
| 89 | - <el-table-column | ||
| 90 | - prop="workCycle" | ||
| 91 | - :label="$t('doWork.table.workCycle')" | ||
| 92 | - align="center"> | 63 | + <el-table-column prop="workCycle" :label="$t('doWork.table.workCycle')" align="center"> |
| 93 | <template slot-scope="scope"> | 64 | <template slot-scope="scope"> |
| 94 | {{ scope.row.workCycle === '1001' ? $t('doWork.workCycle.once') : $t('doWork.workCycle.periodic') }} | 65 | {{ scope.row.workCycle === '1001' ? $t('doWork.workCycle.once') : $t('doWork.workCycle.periodic') }} |
| 95 | </template> | 66 | </template> |
| 96 | </el-table-column> | 67 | </el-table-column> |
| 97 | - <el-table-column | ||
| 98 | - prop="startTime" | ||
| 99 | - :label="$t('doWork.table.startTime')" | ||
| 100 | - align="center"> | 68 | + <el-table-column prop="startTime" :label="$t('doWork.table.startTime')" align="center"> |
| 101 | </el-table-column> | 69 | </el-table-column> |
| 102 | - <el-table-column | ||
| 103 | - prop="endTime" | ||
| 104 | - :label="$t('doWork.table.endTime')" | ||
| 105 | - align="center"> | 70 | + <el-table-column prop="endTime" :label="$t('doWork.table.endTime')" align="center"> |
| 106 | </el-table-column> | 71 | </el-table-column> |
| 107 | - <el-table-column | ||
| 108 | - prop="createUserName" | ||
| 109 | - :label="$t('doWork.table.createUserName')" | ||
| 110 | - align="center"> | 72 | + <el-table-column prop="createUserName" :label="$t('doWork.table.createUserName')" align="center"> |
| 111 | </el-table-column> | 73 | </el-table-column> |
| 112 | - <el-table-column | ||
| 113 | - prop="curStaffName" | ||
| 114 | - :label="$t('doWork.table.curStaffName')" | ||
| 115 | - align="center"> | 74 | + <el-table-column prop="curStaffName" :label="$t('doWork.table.curStaffName')" align="center"> |
| 116 | <template slot-scope="scope"> | 75 | <template slot-scope="scope"> |
| 117 | {{ scope.row.curStaffName || '-' }} | 76 | {{ scope.row.curStaffName || '-' }} |
| 118 | </template> | 77 | </template> |
| 119 | </el-table-column> | 78 | </el-table-column> |
| 120 | - <el-table-column | ||
| 121 | - prop="curCopyName" | ||
| 122 | - :label="$t('doWork.table.curCopyName')" | ||
| 123 | - align="center"> | 79 | + <el-table-column prop="curCopyName" :label="$t('doWork.table.curCopyName')" align="center"> |
| 124 | <template slot-scope="scope"> | 80 | <template slot-scope="scope"> |
| 125 | {{ scope.row.curCopyName || '-' }} | 81 | {{ scope.row.curCopyName || '-' }} |
| 126 | </template> | 82 | </template> |
| 127 | </el-table-column> | 83 | </el-table-column> |
| 128 | - <el-table-column | ||
| 129 | - prop="stateName" | ||
| 130 | - :label="$t('doWork.table.stateName')" | ||
| 131 | - align="center"> | 84 | + <el-table-column prop="stateName" :label="$t('doWork.table.stateName')" align="center"> |
| 132 | </el-table-column> | 85 | </el-table-column> |
| 133 | - <el-table-column | ||
| 134 | - prop="createTime" | ||
| 135 | - :label="$t('doWork.table.createTime')" | ||
| 136 | - align="center"> | 86 | + <el-table-column prop="createTime" :label="$t('doWork.table.createTime')" align="center"> |
| 137 | </el-table-column> | 87 | </el-table-column> |
| 138 | - <el-table-column | ||
| 139 | - :label="$t('common.operation')" | ||
| 140 | - align="center" | ||
| 141 | - width="180"> | 88 | + <el-table-column :label="$t('common.operation')" align="center" width="180"> |
| 142 | <template slot-scope="scope"> | 89 | <template slot-scope="scope"> |
| 143 | - <el-button | ||
| 144 | - v-if="scope.row.state === 'W' || scope.row.state === 'D'" | ||
| 145 | - type="text" | ||
| 146 | - size="small" | 90 | + <el-button v-if="scope.row.state === 'W' || scope.row.state === 'D'" type="text" size="small" |
| 147 | @click="_openTodoTaskDetail(scope.row)"> | 91 | @click="_openTodoTaskDetail(scope.row)"> |
| 148 | {{ $t('common.process') }} | 92 | {{ $t('common.process') }} |
| 149 | </el-button> | 93 | </el-button> |
| 150 | - <el-button | ||
| 151 | - type="text" | ||
| 152 | - size="small" | ||
| 153 | - @click="_toWorkDetailPage(scope.row)"> | 94 | + <el-button type="text" size="small" @click="_toWorkDetailPage(scope.row)"> |
| 154 | {{ $t('common.detail') }} | 95 | {{ $t('common.detail') }} |
| 155 | </el-button> | 96 | </el-button> |
| 156 | </template> | 97 | </template> |
| 157 | </el-table-column> | 98 | </el-table-column> |
| 158 | </el-table> | 99 | </el-table> |
| 159 | - <el-pagination | ||
| 160 | - @size-change="handleSizeChange" | ||
| 161 | - @current-change="handleCurrentChange" | ||
| 162 | - :current-page="pagination.current" | ||
| 163 | - :page-sizes="[10, 20, 30, 50]" | ||
| 164 | - :page-size="pagination.size" | ||
| 165 | - layout="total, sizes, prev, pager, next, jumper" | ||
| 166 | - :total="pagination.total"> | 100 | + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" |
| 101 | + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size" | ||
| 102 | + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"> | ||
| 167 | </el-pagination> | 103 | </el-pagination> |
| 168 | </el-card> | 104 | </el-card> |
| 169 | </el-col> | 105 | </el-col> |
| @@ -272,7 +208,7 @@ export default { | @@ -272,7 +208,7 @@ export default { | ||
| 272 | }, | 208 | }, |
| 273 | _toWorkDetailPage(work) { | 209 | _toWorkDetailPage(work) { |
| 274 | this.$router.push({ | 210 | this.$router.push({ |
| 275 | - path: '/pages/oa/workDetail', | 211 | + path: '/views/oa/workDetail', |
| 276 | query: { | 212 | query: { |
| 277 | workId: work.workId | 213 | workId: work.workId |
| 278 | } | 214 | } |
src/views/oa/workDetailList.vue
| @@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
| 14 | 14 | ||
| 15 | <!-- 业主信息 --> | 15 | <!-- 业主信息 --> |
| 16 | <div class="margin-top"> | 16 | <div class="margin-top"> |
| 17 | - <el-row :gutter="20" > | 17 | + <el-row :gutter="20"> |
| 18 | <el-col :span="24" class="text-left"> | 18 | <el-col :span="24" class="text-left"> |
| 19 | <el-row :gutter="20"> | 19 | <el-row :gutter="20"> |
| 20 | <el-col :span="6"> | 20 | <el-col :span="6"> |
| @@ -150,7 +150,7 @@ | @@ -150,7 +150,7 @@ | ||
| 150 | <div v-if="workDetailInfo._currentTab == 'workDetailContent'"> | 150 | <div v-if="workDetailInfo._currentTab == 'workDetailContent'"> |
| 151 | <div class="padding flex justify-start" v-for="(item, index) in workDetailInfo.contents" :key="index"> | 151 | <div class="padding flex justify-start" v-for="(item, index) in workDetailInfo.contents" :key="index"> |
| 152 | <div>{{ item.seqNum }}、</div> | 152 | <div>{{ item.seqNum }}、</div> |
| 153 | - <div v-html="item.content" style="width: 80%;"></div> | 153 | + <div v-html="item.content" style="width: 80%;" class="text-left"></div> |
| 154 | </div> | 154 | </div> |
| 155 | </div> | 155 | </div> |
| 156 | <div v-if="workDetailInfo._currentTab == 'workDetailTask'"> | 156 | <div v-if="workDetailInfo._currentTab == 'workDetailTask'"> |
src/views/oa/workTaskDetailLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + workTaskDetail: { | ||
| 4 | + title: 'Work Task Detail', | ||
| 5 | + workId: 'Work ID', | ||
| 6 | + workName: 'Work Name', | ||
| 7 | + typeName: 'Type Name', | ||
| 8 | + workCycle: 'Work Cycle', | ||
| 9 | + once: 'One-time', | ||
| 10 | + periodic: 'Periodic', | ||
| 11 | + startTime: 'Start Time', | ||
| 12 | + endTime: 'End Time', | ||
| 13 | + createUserName: 'Creator', | ||
| 14 | + curStaffName: 'Handler', | ||
| 15 | + curCopyName: 'CC', | ||
| 16 | + stateName: 'Status', | ||
| 17 | + createTime: 'Create Time', | ||
| 18 | + attachment: 'Attachment', | ||
| 19 | + select: 'Select', | ||
| 20 | + content: 'Content', | ||
| 21 | + status: 'Status', | ||
| 22 | + pending: 'Pending', | ||
| 23 | + processed: 'Processed', | ||
| 24 | + flow: 'Work Flow', | ||
| 25 | + preStaff: 'Previous Handler', | ||
| 26 | + staff: 'Handler', | ||
| 27 | + validTime: 'Valid Time', | ||
| 28 | + time: 'Time', | ||
| 29 | + type: 'Type', | ||
| 30 | + handler: 'Handler Process', | ||
| 31 | + copy: 'CC Process', | ||
| 32 | + process: 'Process', | ||
| 33 | + remark: 'Remark', | ||
| 34 | + attachmentList: 'Attachments', | ||
| 35 | + action: 'Action', | ||
| 36 | + pleaseSelect: 'Please Select', | ||
| 37 | + | ||
| 38 | + transfer: 'Transfer', | ||
| 39 | + nextHandler: 'Next Handler', | ||
| 40 | + selectNextHandler: 'Please select next handler', | ||
| 41 | + inputRemark: 'Please input remark', | ||
| 42 | + submitSuccess: 'Submit success', | ||
| 43 | + submitFailed: 'Submit failed' | ||
| 44 | + } | ||
| 45 | + }, | ||
| 46 | + zh: { | ||
| 47 | + workTaskDetail: { | ||
| 48 | + title: '任务单详情', | ||
| 49 | + workId: '工单编号', | ||
| 50 | + workName: '工单名称', | ||
| 51 | + typeName: '类型名称', | ||
| 52 | + workCycle: '标识', | ||
| 53 | + once: '一次性工单', | ||
| 54 | + periodic: '周期性工单', | ||
| 55 | + startTime: '开始时间', | ||
| 56 | + endTime: '结束时间', | ||
| 57 | + createUserName: '发起人', | ||
| 58 | + curStaffName: '处理人', | ||
| 59 | + curCopyName: '抄送人', | ||
| 60 | + stateName: '状态', | ||
| 61 | + createTime: '创建时间', | ||
| 62 | + attachment: '附件', | ||
| 63 | + select: '选择', | ||
| 64 | + content: '工作单内容', | ||
| 65 | + status: '状态', | ||
| 66 | + pending: '待处理', | ||
| 67 | + processed: '已处理', | ||
| 68 | + flow: '工作单流转', | ||
| 69 | + preStaff: '前处理人', | ||
| 70 | + staff: '处理人', | ||
| 71 | + validTime: '任务有效期', | ||
| 72 | + time: '时间', | ||
| 73 | + type: '类型', | ||
| 74 | + handler: '处理人办理', | ||
| 75 | + copy: '抄送人办理', | ||
| 76 | + remark: '意见', | ||
| 77 | + attachmentList: '工作单附件', | ||
| 78 | + action: '动作', | ||
| 79 | + pleaseSelect: '请选择', | ||
| 80 | + process: '办理', | ||
| 81 | + transfer: '转单', | ||
| 82 | + nextHandler: '下一处理人', | ||
| 83 | + selectNextHandler: '必填,请选择下一处理人', | ||
| 84 | + inputRemark: '必填,请填写工单说明', | ||
| 85 | + submitSuccess: '办理成功', | ||
| 86 | + submitFailed: '办理失败' | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | +} | ||
| 0 | \ No newline at end of file | 90 | \ No newline at end of file |
src/views/oa/workTaskDetailList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="work-task-detail-container"> | ||
| 3 | + <el-card class="box-card"> | ||
| 4 | + <div class="flex justify-between"> | ||
| 5 | + <div class="text-title">{{ $t('workTaskDetail.title') }}</div> | ||
| 6 | + <div> | ||
| 7 | + <el-button type="primary" size="small" style="margin-left:10px" @click="goBack"> | ||
| 8 | + <i class="el-icon-close"></i>{{ $t('common.back') }} | ||
| 9 | + </el-button> | ||
| 10 | + </div> | ||
| 11 | + </div> | ||
| 12 | + | ||
| 13 | + <!-- 基本信息 --> | ||
| 14 | + <div class="margin-top"> | ||
| 15 | + <el-row :gutter="20"> | ||
| 16 | + <el-col :span="6"> | ||
| 17 | + <div class="form-group"> | ||
| 18 | + <label class="col-form-label"> | ||
| 19 | + {{ $t('workTaskDetail.workId') }}: | ||
| 20 | + </label> | ||
| 21 | + <label>{{ workTaskDetailInfo.workId }}</label> | ||
| 22 | + </div> | ||
| 23 | + </el-col> | ||
| 24 | + <el-col :span="6"> | ||
| 25 | + <div class="form-group"> | ||
| 26 | + <label class="col-form-label"> | ||
| 27 | + {{ $t('workTaskDetail.workName') }}: | ||
| 28 | + </label> | ||
| 29 | + <label>{{ workTaskDetailInfo.workName }}</label> | ||
| 30 | + </div> | ||
| 31 | + </el-col> | ||
| 32 | + <el-col :span="6"> | ||
| 33 | + <div class="form-group"> | ||
| 34 | + <label class="col-form-label"> | ||
| 35 | + {{ $t('workTaskDetail.typeName') }}: | ||
| 36 | + </label> | ||
| 37 | + <label>{{ workTaskDetailInfo.typeName }}</label> | ||
| 38 | + </div> | ||
| 39 | + </el-col> | ||
| 40 | + <el-col :span="6"> | ||
| 41 | + <div class="form-group"> | ||
| 42 | + <label class="col-form-label"> | ||
| 43 | + {{ $t('workTaskDetail.workCycle') }}: | ||
| 44 | + </label> | ||
| 45 | + <label>{{ workTaskDetailInfo.workCycle == '1001' ? $t('workTaskDetail.once') : | ||
| 46 | + $t('workTaskDetail.periodic') }}</label> | ||
| 47 | + </div> | ||
| 48 | + </el-col> | ||
| 49 | + </el-row> | ||
| 50 | + | ||
| 51 | + <el-row :gutter="20"> | ||
| 52 | + <el-col :span="6"> | ||
| 53 | + <div class="form-group"> | ||
| 54 | + <label class="col-form-label"> | ||
| 55 | + {{ $t('workTaskDetail.startTime') }}: | ||
| 56 | + </label> | ||
| 57 | + <label>{{ workTaskDetailInfo.startTime }}</label> | ||
| 58 | + </div> | ||
| 59 | + </el-col> | ||
| 60 | + <el-col :span="6"> | ||
| 61 | + <div class="form-group"> | ||
| 62 | + <label class="col-form-label"> | ||
| 63 | + {{ $t('workTaskDetail.endTime') }}: | ||
| 64 | + </label> | ||
| 65 | + <label>{{ workTaskDetailInfo.endTime }}</label> | ||
| 66 | + </div> | ||
| 67 | + </el-col> | ||
| 68 | + <el-col :span="6"> | ||
| 69 | + <div class="form-group"> | ||
| 70 | + <label class="col-form-label"> | ||
| 71 | + {{ $t('workTaskDetail.createUserName') }}: | ||
| 72 | + </label> | ||
| 73 | + <label>{{ workTaskDetailInfo.createUserName }}</label> | ||
| 74 | + </div> | ||
| 75 | + </el-col> | ||
| 76 | + <el-col :span="6"> | ||
| 77 | + <div class="form-group"> | ||
| 78 | + <label class="col-form-label"> | ||
| 79 | + {{ $t('workTaskDetail.curStaffName') }}: | ||
| 80 | + </label> | ||
| 81 | + <label>{{ workTaskDetailInfo.curStaffName || '-' }}</label> | ||
| 82 | + </div> | ||
| 83 | + </el-col> | ||
| 84 | + </el-row> | ||
| 85 | + | ||
| 86 | + <el-row :gutter="20"> | ||
| 87 | + <el-col :span="6"> | ||
| 88 | + <div class="form-group"> | ||
| 89 | + <label class="col-form-label"> | ||
| 90 | + {{ $t('workTaskDetail.curCopyName') }}: | ||
| 91 | + </label> | ||
| 92 | + <label>{{ workTaskDetailInfo.curCopyName || '-' }}</label> | ||
| 93 | + </div> | ||
| 94 | + </el-col> | ||
| 95 | + <el-col :span="6"> | ||
| 96 | + <div class="form-group"> | ||
| 97 | + <label class="col-form-label"> | ||
| 98 | + {{ $t('workTaskDetail.stateName') }}: | ||
| 99 | + </label> | ||
| 100 | + <label>{{ workTaskDetailInfo.stateName }}</label> | ||
| 101 | + </div> | ||
| 102 | + </el-col> | ||
| 103 | + <el-col :span="6"> | ||
| 104 | + <div class="form-group"> | ||
| 105 | + <label class="col-form-label"> | ||
| 106 | + {{ $t('workTaskDetail.createTime') }}: | ||
| 107 | + </label> | ||
| 108 | + <label>{{ workTaskDetailInfo.createTime }}</label> | ||
| 109 | + </div> | ||
| 110 | + </el-col> | ||
| 111 | + <el-col :span="6"> | ||
| 112 | + <div class="form-group"> | ||
| 113 | + <label class="col-form-label"> | ||
| 114 | + {{ $t('workTaskDetail.attachment') }}: | ||
| 115 | + </label> | ||
| 116 | + <label> | ||
| 117 | + <el-link v-if="workTaskDetailInfo.pathUrl" :href="workTaskDetailInfo.pathUrl" target="_blank"> | ||
| 118 | + {{ $t('common.download') }} | ||
| 119 | + </el-link> | ||
| 120 | + <span v-else>-</span> | ||
| 121 | + </label> | ||
| 122 | + </div> | ||
| 123 | + </el-col> | ||
| 124 | + </el-row> | ||
| 125 | + </div> | ||
| 126 | + </el-card> | ||
| 127 | + | ||
| 128 | + <!-- 工作单内容 --> | ||
| 129 | + <el-card class="margin-top"> | ||
| 130 | + <el-table :data="workTaskDetailInfo.items" border style="width: 100%"> | ||
| 131 | + <el-table-column v-if="workTaskDetailInfo.todo == 'ON'" :label="$t('workTaskDetail.select')" width="250" | ||
| 132 | + align="center"> | ||
| 133 | + <template slot-scope="{row}"> | ||
| 134 | + <el-radio v-if="row.state == 'W'" v-model="workTaskDetailInfo.audit.itemId" :label="row.itemId" | ||
| 135 | + @change="selectContent(row)"></el-radio> | ||
| 136 | + <span v-else>-</span> | ||
| 137 | + </template> | ||
| 138 | + </el-table-column> | ||
| 139 | + <el-table-column :label="$t('workTaskDetail.content')" prop="content"> | ||
| 140 | + <template slot-scope="{row, $index}"> | ||
| 141 | + <div class="flex justify-start"> | ||
| 142 | + <div>{{ $index + 1 }}、</div> | ||
| 143 | + <div v-html="row.content"></div> | ||
| 144 | + </div> | ||
| 145 | + </template> | ||
| 146 | + </el-table-column> | ||
| 147 | + <el-table-column :label="$t('workTaskDetail.status')" width="100" align="center"> | ||
| 148 | + <template slot-scope="{row}"> | ||
| 149 | + {{ row.state == 'W' ? $t('workTaskDetail.pending') : $t('workTaskDetail.processed') }} | ||
| 150 | + </template> | ||
| 151 | + </el-table-column> | ||
| 152 | + </el-table> | ||
| 153 | + </el-card> | ||
| 154 | + | ||
| 155 | + <!-- 工作单流转 --> | ||
| 156 | + <el-card v-if="workTaskDetailInfo.todo != 'ON' && workTaskDetailInfo.events && workTaskDetailInfo.events.length > 0" | ||
| 157 | + class="margin-top "> | ||
| 158 | + <div slot="header" class="text-left"> | ||
| 159 | + <span>{{ $t('workTaskDetail.flow') }}</span> | ||
| 160 | + </div> | ||
| 161 | + <el-table :data="workTaskDetailInfo.events" border style="width: 100%"> | ||
| 162 | + <el-table-column :label="$t('workTaskDetail.preStaff')" align="center" prop="preStaffName"></el-table-column> | ||
| 163 | + <el-table-column :label="$t('workTaskDetail.staff')" align="center" prop="staffName"></el-table-column> | ||
| 164 | + <el-table-column :label="$t('workTaskDetail.validTime')" align="center" prop="startTime"> | ||
| 165 | + <template slot-scope="{row}"> | ||
| 166 | + {{ row.startTime }}<br>~{{ row.endTime }} | ||
| 167 | + </template> | ||
| 168 | + </el-table-column> | ||
| 169 | + <el-table-column :label="$t('workTaskDetail.time')" align="center" prop="endTime"></el-table-column> | ||
| 170 | + <el-table-column :label="$t('workTaskDetail.type')" align="center" prop="eventType"> | ||
| 171 | + <template slot-scope="{row}"> | ||
| 172 | + <span v-if="row.eventType == '1001'">{{ $t('workTaskDetail.handler') }}</span> | ||
| 173 | + <span v-else-if="row.eventType == '2002'">{{ $t('workTaskDetail.copy') }}</span> | ||
| 174 | + <span v-else>{{ $t('workTaskDetail.process') }}</span> | ||
| 175 | + </template> | ||
| 176 | + </el-table-column> | ||
| 177 | + <el-table-column :label="$t('workTaskDetail.remark')" align="center" prop="remark"></el-table-column> | ||
| 178 | + </el-table> | ||
| 179 | + </el-card> | ||
| 180 | + | ||
| 181 | + <!-- 工作单附件 --> | ||
| 182 | + <el-card v-if="workTaskDetailInfo.todo != 'ON' && workTaskDetailInfo.files && workTaskDetailInfo.files.length > 0" | ||
| 183 | + class="margin-top"> | ||
| 184 | + <div slot="header" class="text-left"> | ||
| 185 | + <span>{{ $t('workTaskDetail.attachmentList') }}</span> | ||
| 186 | + </div> | ||
| 187 | + <el-table :data="workTaskDetailInfo.files" border style="width: 100%"> | ||
| 188 | + <el-table-column :label="$t('workTaskDetail.staff')" align="center"></el-table-column> | ||
| 189 | + <el-table-column :label="$t('workTaskDetail.attachment')" align="center"> | ||
| 190 | + <template slot-scope="{row}"> | ||
| 191 | + <el-link :href="row.pathUrl" target="_blank">{{ $t('common.download') }}</el-link> | ||
| 192 | + </template> | ||
| 193 | + </el-table-column> | ||
| 194 | + </el-table> | ||
| 195 | + </el-card> | ||
| 196 | + | ||
| 197 | + <!-- 工单办理 --> | ||
| 198 | + <el-card v-if="workTaskDetailInfo.todo == 'ON' && workTaskDetailInfo.audit.itemId" class="margin-top text-left"> | ||
| 199 | + <div slot="header" class="text-left"> | ||
| 200 | + <span>{{ $t('workTaskDetail.process') }}</span> | ||
| 201 | + </div> | ||
| 202 | + <el-form label-width="120px"> | ||
| 203 | + <el-form-item :label="$t('workTaskDetail.action')"> | ||
| 204 | + <el-select v-model="workTaskDetailInfo.audit.auditCode" style="width:100%"> | ||
| 205 | + <el-option :label="$t('workTaskDetail.pleaseSelect')" value="" disabled></el-option> | ||
| 206 | + <el-option :label="$t('workTaskDetail.process')" value="C"></el-option> | ||
| 207 | + <el-option :label="$t('workTaskDetail.transfer')" value="T"></el-option> | ||
| 208 | + </el-select> | ||
| 209 | + </el-form-item> | ||
| 210 | + | ||
| 211 | + <el-form-item v-if="workTaskDetailInfo.audit.auditCode == 'T'" :label="$t('workTaskDetail.nextHandler')"> | ||
| 212 | + <el-input v-model="workTaskDetailInfo.audit.staffName" :placeholder="$t('workTaskDetail.selectNextHandler')" | ||
| 213 | + disabled> | ||
| 214 | + <el-button slot="append" icon="el-icon-search" @click="chooseStaff"></el-button> | ||
| 215 | + </el-input> | ||
| 216 | + </el-form-item> | ||
| 217 | + | ||
| 218 | + <el-form-item :label="$t('workTaskDetail.attachment')"> | ||
| 219 | + <upload-file ref="uploadFile" @notify="handleNotifyFile"></upload-file> | ||
| 220 | + </el-form-item> | ||
| 221 | + | ||
| 222 | + <el-form-item :label="$t('workTaskDetail.remark')"> | ||
| 223 | + <el-input type="textarea" :placeholder="$t('workTaskDetail.inputRemark')" | ||
| 224 | + v-model="workTaskDetailInfo.audit.auditMessage"></el-input> | ||
| 225 | + </el-form-item> | ||
| 226 | + | ||
| 227 | + <el-form-item class="text-right"> | ||
| 228 | + <el-button type="primary" @click="auditSubmit">{{ $t('common.submit') }}</el-button> | ||
| 229 | + </el-form-item> | ||
| 230 | + </el-form> | ||
| 231 | + </el-card> | ||
| 232 | + | ||
| 233 | + <select-staff ref="selectStaff" @selectStaff="handleStaffChange"></select-staff> | ||
| 234 | + </div> | ||
| 235 | +</template> | ||
| 236 | + | ||
| 237 | +<script> | ||
| 238 | +import { getWorkDetail, getWorkTaskItems, getWorkEvents, getWorkFiles, finishWorkTask } from '@/api/oa/workTaskDetailApi' | ||
| 239 | +import UploadFile from '@/components/upload/uploadFile' | ||
| 240 | +import SelectStaff from '@/components/staff/SelectStaff' | ||
| 241 | + | ||
| 242 | +export default { | ||
| 243 | + name: 'WorkTaskDetailList', | ||
| 244 | + components: { | ||
| 245 | + UploadFile, | ||
| 246 | + SelectStaff | ||
| 247 | + }, | ||
| 248 | + data() { | ||
| 249 | + return { | ||
| 250 | + workTaskDetailInfo: { | ||
| 251 | + viewWorkFlag: '', | ||
| 252 | + workId: "", | ||
| 253 | + wtId: '', | ||
| 254 | + workName: '', | ||
| 255 | + typeName: "", | ||
| 256 | + workCycle: "", | ||
| 257 | + startTime: "", | ||
| 258 | + endTime: "", | ||
| 259 | + createUserName: "", | ||
| 260 | + curStaffName: "", | ||
| 261 | + curCopyName: "", | ||
| 262 | + stateName: "", | ||
| 263 | + createTime: '', | ||
| 264 | + items: [], | ||
| 265 | + pathUrl: '', | ||
| 266 | + taskId: '', | ||
| 267 | + todo: 'OFF', | ||
| 268 | + events: [], | ||
| 269 | + files: [], | ||
| 270 | + audit: { | ||
| 271 | + taskId: '', | ||
| 272 | + auditCode: 'C', | ||
| 273 | + auditMessage: this.$t('workTaskDetail.processed'), | ||
| 274 | + staffId: '', | ||
| 275 | + staffName: '', | ||
| 276 | + pathUrl: '', | ||
| 277 | + itemId: '', | ||
| 278 | + } | ||
| 279 | + } | ||
| 280 | + } | ||
| 281 | + }, | ||
| 282 | + created() { | ||
| 283 | + this.workTaskDetailInfo.workId = this.$route.query.workId | ||
| 284 | + this.workTaskDetailInfo.taskId = this.$route.query.taskId | ||
| 285 | + const todo = this.$route.query.todo | ||
| 286 | + if (todo) { | ||
| 287 | + this.workTaskDetailInfo.todo = todo | ||
| 288 | + this.workTaskDetailInfo.audit.taskId = this.$route.query.taskId | ||
| 289 | + } | ||
| 290 | + if (!this.workTaskDetailInfo.workId) return | ||
| 291 | + | ||
| 292 | + this.loadWorkInfo() | ||
| 293 | + this.loadWorkTaskItem() | ||
| 294 | + this.loadWorkEventData() | ||
| 295 | + this.loadWorkFileData() | ||
| 296 | + }, | ||
| 297 | + methods: { | ||
| 298 | + async loadWorkInfo() { | ||
| 299 | + try { | ||
| 300 | + const params = { | ||
| 301 | + workId: this.workTaskDetailInfo.workId, | ||
| 302 | + page: 1, | ||
| 303 | + row: 1, | ||
| 304 | + } | ||
| 305 | + const { data } = await getWorkDetail(params) | ||
| 306 | + Object.assign(this.workTaskDetailInfo, data[0]) | ||
| 307 | + } catch (error) { | ||
| 308 | + console.error('获取工单详情失败:', error) | ||
| 309 | + } | ||
| 310 | + }, | ||
| 311 | + async loadWorkTaskItem() { | ||
| 312 | + try { | ||
| 313 | + const params = { | ||
| 314 | + taskId: this.workTaskDetailInfo.taskId, | ||
| 315 | + page: 1, | ||
| 316 | + row: 100, | ||
| 317 | + } | ||
| 318 | + const { data } = await getWorkTaskItems(params) | ||
| 319 | + this.workTaskDetailInfo.items = data | ||
| 320 | + } catch (error) { | ||
| 321 | + console.error('获取工单项失败:', error) | ||
| 322 | + } | ||
| 323 | + }, | ||
| 324 | + async loadWorkEventData() { | ||
| 325 | + try { | ||
| 326 | + const params = { | ||
| 327 | + taskId: this.workTaskDetailInfo.taskId, | ||
| 328 | + workId: this.workTaskDetailInfo.workId, | ||
| 329 | + page: 1, | ||
| 330 | + row: 100 | ||
| 331 | + } | ||
| 332 | + const { data } = await getWorkEvents(params) | ||
| 333 | + this.workTaskDetailInfo.events = data | ||
| 334 | + } catch (error) { | ||
| 335 | + console.error('获取工单事件失败:', error) | ||
| 336 | + } | ||
| 337 | + }, | ||
| 338 | + async loadWorkFileData() { | ||
| 339 | + try { | ||
| 340 | + const params = { | ||
| 341 | + taskId: this.workTaskDetailInfo.taskId, | ||
| 342 | + workId: this.workTaskDetailInfo.workId, | ||
| 343 | + page: 1, | ||
| 344 | + row: 100 | ||
| 345 | + } | ||
| 346 | + const { data } = await getWorkFiles(params) | ||
| 347 | + this.workTaskDetailInfo.files = data | ||
| 348 | + } catch (error) { | ||
| 349 | + console.error('获取工单文件失败:', error) | ||
| 350 | + } | ||
| 351 | + }, | ||
| 352 | + selectContent(item) { | ||
| 353 | + if (item.state == 'C') return | ||
| 354 | + this.workTaskDetailInfo.audit.itemId = item.itemId | ||
| 355 | + }, | ||
| 356 | + chooseStaff() { | ||
| 357 | + this.$refs.selectStaff.open(this.workTaskDetailInfo.audit) | ||
| 358 | + }, | ||
| 359 | + handleStaffChange(staff) { | ||
| 360 | + this.workTaskDetailInfo.audit.staffId = staff.staffId | ||
| 361 | + this.workTaskDetailInfo.audit.staffName = staff.staffName | ||
| 362 | + }, | ||
| 363 | + handleNotifyFile(file) { | ||
| 364 | + this.workTaskDetailInfo.audit.pathUrl = file.realFileName | ||
| 365 | + }, | ||
| 366 | + async auditSubmit() { | ||
| 367 | + try { | ||
| 368 | + await finishWorkTask(this.workTaskDetailInfo.audit) | ||
| 369 | + this.$message.success(this.$t('workTaskDetail.submitSuccess')) | ||
| 370 | + this.goBack() | ||
| 371 | + } catch (error) { | ||
| 372 | + this.$message.error(error.message || this.$t('workTaskDetail.submitFailed')) | ||
| 373 | + } | ||
| 374 | + }, | ||
| 375 | + goBack() { | ||
| 376 | + this.$router.go(-1) | ||
| 377 | + } | ||
| 378 | + } | ||
| 379 | +} | ||
| 380 | +</script> | ||
| 381 | + | ||
| 382 | +<style scoped> | ||
| 383 | +.work-task-detail-container { | ||
| 384 | + padding: 20px; | ||
| 385 | +} | ||
| 386 | + | ||
| 387 | +.margin-top { | ||
| 388 | + margin-top: 20px; | ||
| 389 | +} | ||
| 390 | + | ||
| 391 | +.flex { | ||
| 392 | + display: flex; | ||
| 393 | +} | ||
| 394 | + | ||
| 395 | +.justify-between { | ||
| 396 | + justify-content: space-between; | ||
| 397 | +} | ||
| 398 | + | ||
| 399 | +.justify-start { | ||
| 400 | + justify-content: flex-start; | ||
| 401 | +} | ||
| 402 | + | ||
| 403 | +.text-title { | ||
| 404 | + font-size: 18px; | ||
| 405 | +} | ||
| 406 | + | ||
| 407 | +.form-group { | ||
| 408 | + margin-bottom: 15px; | ||
| 409 | + text-align: left; | ||
| 410 | +} | ||
| 411 | + | ||
| 412 | +.col-form-label { | ||
| 413 | + margin-right: 10px; | ||
| 414 | +} | ||
| 415 | +</style> | ||
| 0 | \ No newline at end of file | 416 | \ No newline at end of file |