Commit 0fb08017cb02cb0b70bf3cd7ee24ea6bbfaca144
1 parent
20ddb876
物品放行功能测试完成
Showing
17 changed files
with
1246 additions
and
441 deletions
src/api/work/editItemReleaseViewApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +// 更新放行信息 | |
| 5 | +export function updateItemRelease(data) { | |
| 6 | + return new Promise((resolve, reject) => { | |
| 7 | + request({ | |
| 8 | + url: '/itemRelease.updateItemRelease', | |
| 9 | + method: 'post', | |
| 10 | + data: { | |
| 11 | + ...data, | |
| 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 listItemReleaseType(params) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/itemRelease.listItemReleaseType', | |
| 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 listItemRelease(params) { | |
| 44 | + return new Promise((resolve, reject) => { | |
| 45 | + request({ | |
| 46 | + url: '/itemRelease.listItemRelease', | |
| 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 listItemReleaseRes(params) { | |
| 63 | + return new Promise((resolve, reject) => { | |
| 64 | + request({ | |
| 65 | + url: '/itemRelease.listItemReleaseRes', | |
| 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 | +} | |
| 0 | 79 | \ No newline at end of file | ... | ... |
src/api/work/itemReleaseDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +// 获取放行物品列表 | |
| 5 | +export function listItemReleaseRes(params) { | |
| 6 | + return new Promise((resolve, reject) => { | |
| 7 | + request({ | |
| 8 | + url: '/itemRelease.listItemReleaseRes', | |
| 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 listItemRelease(params) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/itemRelease.listItemRelease', | |
| 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 auditUndoItemRelease(data) { | |
| 44 | + return new Promise((resolve, reject) => { | |
| 45 | + request({ | |
| 46 | + url: '/itemRelease.auditUndoItemRelease', | |
| 47 | + method: 'post', | |
| 48 | + data: { | |
| 49 | + ...data, | |
| 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 listOrgTree(params) { | |
| 63 | + return new Promise((resolve, reject) => { | |
| 64 | + request({ | |
| 65 | + url: '/org.listOrgTree', | |
| 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 queryStaffInfos(params) { | |
| 82 | + return new Promise((resolve, reject) => { | |
| 83 | + request({ | |
| 84 | + url: '/query.staff.infos', | |
| 85 | + method: 'get', | |
| 86 | + params: { | |
| 87 | + ...params, | |
| 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 queryOaWorkflowUser(params) { | |
| 101 | + return new Promise((resolve, reject) => { | |
| 102 | + request({ | |
| 103 | + url: '/oaWorkflow/queryOaWorkflowUser', | |
| 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 queryNextDealUser(params) { | |
| 120 | + return new Promise((resolve, reject) => { | |
| 121 | + request({ | |
| 122 | + url: '/oaWorkflow.queryNextDealUser', | |
| 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 listRunWorkflowImage(params) { | |
| 139 | + return new Promise((resolve, reject) => { | |
| 140 | + request({ | |
| 141 | + url: '/workflow.listRunWorkflowImage', | |
| 142 | + method: 'get', | |
| 143 | + params: { | |
| 144 | + ...params, | |
| 145 | + communityId: getCommunityId() | |
| 146 | + } | |
| 147 | + }).then(response => { | |
| 148 | + const res = response.data | |
| 149 | + resolve(res) | |
| 150 | + }).catch(error => { | |
| 151 | + reject(error) | |
| 152 | + }) | |
| 153 | + }) | |
| 154 | +} | |
| 0 | 155 | \ No newline at end of file | ... | ... |
src/components/machine/cameraControlVideo.vue
src/components/work/editItemRelease.vue
| 1 | 1 | <template> |
| 2 | - <el-dialog | |
| 3 | - :title="$t('itemReleaseManage.edit.title')" | |
| 4 | - :visible.sync="visible" | |
| 5 | - width="60%" | |
| 6 | - @close="handleClose" | |
| 7 | - > | |
| 8 | - <el-form | |
| 9 | - ref="form" | |
| 10 | - :model="formData" | |
| 11 | - :rules="rules" | |
| 12 | - label-width="120px" | |
| 13 | - label-position="right" | |
| 14 | - > | |
| 15 | - <el-form-item | |
| 16 | - :label="$t('itemReleaseManage.form.releaseType')" | |
| 17 | - prop="typeId" | |
| 18 | - > | |
| 19 | - <el-select | |
| 20 | - v-model="formData.typeId" | |
| 21 | - :placeholder="$t('itemReleaseManage.placeholder.requiredSelect')" | |
| 22 | - style="width: 100%" | |
| 23 | - > | |
| 24 | - <el-option | |
| 25 | - v-for="item in releaseTypes" | |
| 26 | - :key="item.typeId" | |
| 27 | - :label="item.typeName" | |
| 28 | - :value="item.typeId" | |
| 29 | - /> | |
| 2 | + <el-dialog :title="$t('itemReleaseManage.edit.title')" :visible.sync="visible" width="60%" @close="handleClose"> | |
| 3 | + <el-form ref="form" :model="formData" :rules="rules" label-width="120px" label-position="right"> | |
| 4 | + <el-form-item :label="$t('itemReleaseManage.form.releaseType')" prop="typeId"> | |
| 5 | + <el-select v-model="formData.typeId" :placeholder="$t('itemReleaseManage.placeholder.requiredSelect')" | |
| 6 | + style="width: 100%"> | |
| 7 | + <el-option v-for="item in releaseTypes" :key="item.typeId" :label="item.typeName" :value="item.typeId" /> | |
| 30 | 8 | </el-select> |
| 31 | 9 | </el-form-item> |
| 32 | 10 | |
| 33 | - <el-form-item | |
| 34 | - :label="$t('itemReleaseManage.form.applyCompany')" | |
| 35 | - prop="applyCompany" | |
| 36 | - > | |
| 37 | - <el-input | |
| 38 | - v-model="formData.applyCompany" | |
| 39 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 40 | - /> | |
| 11 | + <el-form-item :label="$t('itemReleaseManage.form.applyCompany')" prop="applyCompany"> | |
| 12 | + <el-input v-model="formData.applyCompany" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 41 | 13 | </el-form-item> |
| 42 | 14 | |
| 43 | - <el-form-item | |
| 44 | - :label="$t('itemReleaseManage.form.applyPerson')" | |
| 45 | - prop="applyPerson" | |
| 46 | - > | |
| 47 | - <el-input | |
| 48 | - v-model="formData.applyPerson" | |
| 49 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 50 | - /> | |
| 15 | + <el-form-item :label="$t('itemReleaseManage.form.applyPerson')" prop="applyPerson"> | |
| 16 | + <el-input v-model="formData.applyPerson" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 51 | 17 | </el-form-item> |
| 52 | 18 | |
| 53 | - <el-form-item | |
| 54 | - :label="$t('itemReleaseManage.form.idCard')" | |
| 55 | - prop="idCard" | |
| 56 | - > | |
| 57 | - <el-input | |
| 58 | - v-model="formData.idCard" | |
| 59 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 60 | - maxlength="18" | |
| 61 | - /> | |
| 19 | + <el-form-item :label="$t('itemReleaseManage.form.idCard')" prop="idCard"> | |
| 20 | + <el-input v-model="formData.idCard" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 21 | + maxlength="18" /> | |
| 62 | 22 | </el-form-item> |
| 63 | 23 | |
| 64 | - <el-form-item | |
| 65 | - :label="$t('itemReleaseManage.form.phone')" | |
| 66 | - prop="applyTel" | |
| 67 | - > | |
| 68 | - <el-input | |
| 69 | - v-model="formData.applyTel" | |
| 70 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 71 | - maxlength="11" | |
| 72 | - /> | |
| 24 | + <el-form-item :label="$t('itemReleaseManage.form.phone')" prop="applyTel"> | |
| 25 | + <el-input v-model="formData.applyTel" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 26 | + maxlength="11" /> | |
| 73 | 27 | </el-form-item> |
| 74 | 28 | |
| 75 | - <el-form-item | |
| 76 | - :label="$t('itemReleaseManage.form.passTime')" | |
| 77 | - prop="passTime" | |
| 78 | - > | |
| 79 | - <el-input | |
| 80 | - v-model="formData.passTime" | |
| 81 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 82 | - /> | |
| 29 | + <el-form-item :label="$t('itemReleaseManage.form.passTime')" prop="passTime"> | |
| 30 | + <el-input v-model="formData.passTime" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 83 | 31 | </el-form-item> |
| 84 | 32 | |
| 85 | - <el-form-item | |
| 86 | - :label="$t('itemReleaseManage.form.releaseItems')" | |
| 87 | - prop="resName" | |
| 88 | - > | |
| 89 | - <el-input | |
| 90 | - v-model="formData.resName" | |
| 91 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 92 | - /> | |
| 33 | + <el-form-item :label="$t('itemReleaseManage.form.releaseItems')" prop="resName"> | |
| 34 | + <el-input v-model="formData.resName" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 93 | 35 | </el-form-item> |
| 94 | 36 | |
| 95 | - <el-form-item | |
| 96 | - :label="$t('itemReleaseManage.form.itemAmount')" | |
| 97 | - prop="amount" | |
| 98 | - > | |
| 99 | - <el-input | |
| 100 | - v-model="formData.amount" | |
| 101 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 102 | - /> | |
| 37 | + <el-form-item :label="$t('itemReleaseManage.form.itemAmount')" prop="amount"> | |
| 38 | + <el-input v-model="formData.amount" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 103 | 39 | </el-form-item> |
| 104 | 40 | |
| 105 | - <el-form-item | |
| 106 | - :label="$t('itemReleaseManage.form.status')" | |
| 107 | - prop="state" | |
| 108 | - > | |
| 109 | - <el-select | |
| 110 | - v-model="formData.state" | |
| 111 | - :placeholder="$t('itemReleaseManage.placeholder.requiredSelect')" | |
| 112 | - style="width: 100%" | |
| 113 | - > | |
| 114 | - <el-option | |
| 115 | - :label="$t('itemReleaseManage.status.waiting')" | |
| 116 | - value="W" | |
| 117 | - /> | |
| 118 | - <el-option | |
| 119 | - :label="$t('itemReleaseManage.status.processing')" | |
| 120 | - value="D" | |
| 121 | - /> | |
| 122 | - <el-option | |
| 123 | - :label="$t('itemReleaseManage.status.completed')" | |
| 124 | - value="C" | |
| 125 | - /> | |
| 126 | - <el-option | |
| 127 | - :label="$t('itemReleaseManage.status.failed')" | |
| 128 | - value="F" | |
| 129 | - /> | |
| 41 | + <el-form-item :label="$t('itemReleaseManage.form.status')" prop="state"> | |
| 42 | + <el-select v-model="formData.state" :placeholder="$t('itemReleaseManage.placeholder.requiredSelect')" | |
| 43 | + style="width: 100%"> | |
| 44 | + <el-option :label="$t('itemReleaseManage.status.waiting')" value="W" /> | |
| 45 | + <el-option :label="$t('itemReleaseManage.status.processing')" value="D" /> | |
| 46 | + <el-option :label="$t('itemReleaseManage.status.completed')" value="C" /> | |
| 47 | + <el-option :label="$t('itemReleaseManage.status.failed')" value="F" /> | |
| 130 | 48 | </el-select> |
| 131 | 49 | </el-form-item> |
| 132 | 50 | |
| 133 | - <el-form-item | |
| 134 | - :label="$t('itemReleaseManage.form.carNumber')" | |
| 135 | - prop="carNum" | |
| 136 | - > | |
| 137 | - <el-input | |
| 138 | - v-model="formData.carNum" | |
| 139 | - :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" | |
| 140 | - /> | |
| 51 | + <el-form-item :label="$t('itemReleaseManage.form.carNumber')" prop="carNum"> | |
| 52 | + <el-input v-model="formData.carNum" :placeholder="$t('itemReleaseManage.placeholder.requiredInput')" /> | |
| 141 | 53 | </el-form-item> |
| 142 | 54 | |
| 143 | - <el-form-item | |
| 144 | - :label="$t('itemReleaseManage.form.remark')" | |
| 145 | - prop="remark" | |
| 146 | - > | |
| 147 | - <el-input | |
| 148 | - v-model="formData.remark" | |
| 149 | - type="textarea" | |
| 150 | - :placeholder="$t('itemReleaseManage.placeholder.optionalInput')" | |
| 151 | - /> | |
| 55 | + <el-form-item :label="$t('itemReleaseManage.form.remark')" prop="remark"> | |
| 56 | + <el-input v-model="formData.remark" type="textarea" | |
| 57 | + :placeholder="$t('itemReleaseManage.placeholder.optionalInput')" /> | |
| 152 | 58 | </el-form-item> |
| 153 | 59 | </el-form> |
| 154 | 60 | |
| ... | ... | @@ -212,7 +118,6 @@ export default { |
| 212 | 118 | ], |
| 213 | 119 | passTime: [ |
| 214 | 120 | { required: true, message: this.$t('itemReleaseManage.validate.required'), trigger: 'blur' }, |
| 215 | - { max: 12, message: this.$t('itemReleaseManage.validate.maxLength12'), trigger: 'blur' } | |
| 216 | 121 | ], |
| 217 | 122 | resName: [ |
| 218 | 123 | { required: true, message: this.$t('itemReleaseManage.validate.required'), trigger: 'blur' }, | ... | ... |
src/components/work/orgTreeShow.vue
| 1 | 1 | <template> |
| 2 | - <div class="org-tree-show-container"> | |
| 2 | + <div class="org-tree-container"> | |
| 3 | 3 | <el-tree |
| 4 | 4 | ref="orgTree" |
| 5 | - :data="orgs" | |
| 5 | + :data="orgTreeShowInfo.orgs" | |
| 6 | 6 | :props="defaultProps" |
| 7 | 7 | node-key="id" |
| 8 | 8 | default-expand-all |
| ... | ... | @@ -13,44 +13,46 @@ |
| 13 | 13 | </template> |
| 14 | 14 | |
| 15 | 15 | <script> |
| 16 | -import { listOrgTree } from '@/api/work/addItemReleaseViewApi' | |
| 17 | 16 | import { getCommunityId } from '@/api/community/communityApi' |
| 17 | +import { listOrgTree } from '@/api/work/itemReleaseDetailApi' | |
| 18 | 18 | |
| 19 | 19 | export default { |
| 20 | 20 | name: 'OrgTreeShow', |
| 21 | - props: { | |
| 22 | - callBackListener: { | |
| 23 | - type: String, | |
| 24 | - default: '' | |
| 25 | - } | |
| 26 | - }, | |
| 27 | 21 | data() { |
| 28 | 22 | return { |
| 29 | - orgs: [], | |
| 23 | + communityId: '', | |
| 24 | + orgTreeShowInfo: { | |
| 25 | + orgs: [], | |
| 26 | + orgId: '', | |
| 27 | + curOrg: {} | |
| 28 | + }, | |
| 30 | 29 | defaultProps: { |
| 31 | 30 | children: 'children', |
| 32 | 31 | label: 'text' |
| 33 | - }, | |
| 34 | - communityId: '' | |
| 32 | + } | |
| 35 | 33 | } |
| 36 | 34 | }, |
| 37 | 35 | created() { |
| 38 | 36 | this.communityId = getCommunityId() |
| 39 | 37 | }, |
| 40 | 38 | methods: { |
| 41 | - async refreshTree() { | |
| 39 | + refreshTree() { | |
| 40 | + this._loadOrgsShow() | |
| 41 | + }, | |
| 42 | + async _loadOrgsShow() { | |
| 42 | 43 | try { |
| 43 | - const params = { | |
| 44 | + const { data } = await listOrgTree({ | |
| 44 | 45 | communityId: this.communityId |
| 45 | - } | |
| 46 | - const res = await listOrgTree(params) | |
| 47 | - this.orgs = res.data || [] | |
| 46 | + }) | |
| 47 | + this.orgTreeShowInfo.orgs = data | |
| 48 | 48 | } catch (error) { |
| 49 | - console.error('Failed to load org tree:', error) | |
| 49 | + console.error('获取组织树失败:', error) | |
| 50 | 50 | } |
| 51 | 51 | }, |
| 52 | 52 | handleNodeClick(data) { |
| 53 | - this.$emit('switch-org', { | |
| 53 | + this.orgTreeShowInfo.curOrg = data | |
| 54 | + this.orgTreeShowInfo.curOrg.orgId = data.id | |
| 55 | + this.$emit('switchOrg', { | |
| 54 | 56 | orgId: data.id, |
| 55 | 57 | orgName: data.text |
| 56 | 58 | }) |
| ... | ... | @@ -59,9 +61,19 @@ export default { |
| 59 | 61 | } |
| 60 | 62 | </script> |
| 61 | 63 | |
| 62 | -<style scoped> | |
| 63 | -.org-tree-show-container { | |
| 64 | - height: 100%; | |
| 64 | +<style lang="scss" scoped> | |
| 65 | +.org-tree-container { | |
| 66 | + height: 400px; | |
| 65 | 67 | overflow-y: auto; |
| 68 | + | |
| 69 | + /deep/ .el-tree { | |
| 70 | + .el-tree-node__content { | |
| 71 | + height: 40px; | |
| 72 | + } | |
| 73 | + | |
| 74 | + .el-tree-node.is-current > .el-tree-node__content { | |
| 75 | + background-color: #f0f7ff; | |
| 76 | + } | |
| 77 | + } | |
| 66 | 78 | } |
| 67 | 79 | </style> |
| 68 | 80 | \ No newline at end of file | ... | ... |
src/components/work/selectStaff.vue
| 1 | 1 | <template> |
| 2 | - <el-dialog | |
| 3 | - :visible.sync="visible" | |
| 4 | - :title="$t('selectStaff.title')" | |
| 2 | + <el-dialog | |
| 3 | + :visible.sync="visible" | |
| 4 | + :title="$t('selectStaff.selectStaff')" | |
| 5 | 5 | width="80%" |
| 6 | 6 | @close="handleClose" |
| 7 | 7 | > |
| 8 | 8 | <el-row :gutter="20"> |
| 9 | - <el-col :span="12" class="border-right"> | |
| 10 | - <div class="text-center mb-20"> | |
| 11 | - <h4>{{ $t('selectStaff.orgInfo') }}</h4> | |
| 12 | - </div> | |
| 13 | - <div class="org-tree-container"> | |
| 14 | - <OrgTreeShow ref="orgTree" @switch-org="handleSwitchOrg" /> | |
| 15 | - </div> | |
| 9 | + <el-col :span="12"> | |
| 10 | + <div class="section-title">{{ $t('selectStaff.orgInfo') }}</div> | |
| 11 | + <org-tree-show ref="orgTree" @switchOrg="handleSwitchOrg" /> | |
| 16 | 12 | </el-col> |
| 17 | 13 | <el-col :span="12"> |
| 18 | - <div class="text-center mb-20"> | |
| 19 | - <h4>{{ $t('selectStaff.staffInfo') }}</h4> | |
| 20 | - </div> | |
| 21 | - <div class="staff-list-container"> | |
| 22 | - <div | |
| 23 | - v-for="item in staffs" | |
| 24 | - :key="item.staffId" | |
| 14 | + <div class="section-title">{{ $t('selectStaff.staffInfo') }}</div> | |
| 15 | + <div class="staff-list"> | |
| 16 | + <div | |
| 17 | + v-for="(item,index) in selectStaffInfo.staffs" | |
| 18 | + :key="index" | |
| 25 | 19 | class="staff-item" |
| 26 | - :class="{ 'selected': currentStaffId === item.staffId }" | |
| 27 | - @click="selectStaff(item)" | |
| 20 | + :class="{ 'selected': selectStaffInfo.curStaffId === item.staffId }" | |
| 21 | + @click="handleChangeStaff(item)" | |
| 28 | 22 | > |
| 29 | 23 | <div> |
| 30 | 24 | <i class="el-icon-user"></i> |
| ... | ... | @@ -35,21 +29,28 @@ |
| 35 | 29 | </div> |
| 36 | 30 | </el-col> |
| 37 | 31 | </el-row> |
| 38 | - <div | |
| 39 | - v-if="staff.from === 'bpmn' || staff.from === 'purchase' || staff.from === 'contract'" | |
| 40 | - slot="footer" | |
| 41 | - class="dialog-footer" | |
| 42 | - > | |
| 43 | - <el-button @click="selectFirstUser">{{ $t('selectStaff.submitter') }}</el-button> | |
| 44 | - <el-button @click="selectCustomUser">{{ $t('selectStaff.dynamicAssign') }}</el-button> | |
| 32 | + <div slot="footer" class="dialog-footer"> | |
| 33 | + <el-button | |
| 34 | + v-if="staff.from === 'bpmn' || staff.from === 'purchase' || staff.from === 'contract'" | |
| 35 | + @click="handleFirstUser" | |
| 36 | + > | |
| 37 | + {{ $t('selectStaff.submitter') }} | |
| 38 | + </el-button> | |
| 39 | + <el-button | |
| 40 | + v-if="staff.from === 'bpmn' || staff.from === 'purchase' || staff.from === 'contract'" | |
| 41 | + @click="handleCustomUser" | |
| 42 | + > | |
| 43 | + {{ $t('selectStaff.dynamicAssign') }} | |
| 44 | + </el-button> | |
| 45 | + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> | |
| 45 | 46 | </div> |
| 46 | 47 | </el-dialog> |
| 47 | 48 | </template> |
| 48 | 49 | |
| 49 | 50 | <script> |
| 50 | -import OrgTreeShow from './orgTreeShow' | |
| 51 | -import { queryStaffInfos } from '@/api/work/addItemReleaseViewApi' | |
| 51 | +import OrgTreeShow from './OrgTreeShow' | |
| 52 | 52 | import { getCommunityId } from '@/api/community/communityApi' |
| 53 | +import { queryStaffInfos } from '@/api/work/itemReleaseDetailApi' | |
| 53 | 54 | |
| 54 | 55 | export default { |
| 55 | 56 | name: 'SelectStaff', |
| ... | ... | @@ -59,10 +60,13 @@ export default { |
| 59 | 60 | data() { |
| 60 | 61 | return { |
| 61 | 62 | visible: false, |
| 63 | + communityId: '', | |
| 62 | 64 | staff: {}, |
| 63 | - staffs: [], | |
| 64 | - currentStaffId: '', | |
| 65 | - communityId: '' | |
| 65 | + selectStaffInfo: { | |
| 66 | + staffs: [], | |
| 67 | + curStaffId: '', | |
| 68 | + curStaffName: '' | |
| 69 | + } | |
| 66 | 70 | } |
| 67 | 71 | }, |
| 68 | 72 | created() { |
| ... | ... | @@ -77,82 +81,93 @@ export default { |
| 77 | 81 | }) |
| 78 | 82 | }, |
| 79 | 83 | handleClose() { |
| 80 | - this.visible = false | |
| 81 | - this.staffs = [] | |
| 82 | - this.currentStaffId = '' | |
| 84 | + this.selectStaffInfo.staffs = [] | |
| 85 | + this.selectStaffInfo.curStaffId = '' | |
| 83 | 86 | }, |
| 84 | 87 | async handleSwitchOrg(org) { |
| 85 | 88 | try { |
| 86 | - const params = { | |
| 89 | + const { data } = await queryStaffInfos({ | |
| 87 | 90 | page: 1, |
| 88 | 91 | rows: 50, |
| 89 | - row: 50, | |
| 90 | - orgId: org.orgId | |
| 91 | - } | |
| 92 | - const res = await queryStaffInfos(params) | |
| 93 | - this.staffs = res.staffs || [] | |
| 94 | - if (this.staffs.length > 0) { | |
| 95 | - this.currentStaffId = this.staffs[0].staffId | |
| 92 | + orgId: org.orgId, | |
| 93 | + communityId: this.communityId | |
| 94 | + }) | |
| 95 | + this.selectStaffInfo.staffs = data.staffs | |
| 96 | + if (data.staffs.length > 0) { | |
| 97 | + this.selectStaffInfo.curStaffId = data.staffs[0].orgId | |
| 96 | 98 | } |
| 97 | 99 | } catch (error) { |
| 98 | - console.error('Failed to load staffs:', error) | |
| 100 | + console.error('获取员工信息失败:', error) | |
| 99 | 101 | } |
| 100 | 102 | }, |
| 101 | - selectStaff(item) { | |
| 102 | - this.currentStaffId = item.staffId | |
| 103 | - this.$emit('select', { | |
| 104 | - staffId: item.userId, | |
| 105 | - staffName: item.userName, | |
| 106 | - staffTel: item.tel | |
| 107 | - }) | |
| 103 | + handleChangeStaff(item) { | |
| 104 | + this.staff.staffId = item.userId | |
| 105 | + this.staff.staffName = item.userName | |
| 106 | + this.staff.staffTel = item.tel | |
| 108 | 107 | this.visible = false |
| 108 | + | |
| 109 | + if (typeof this.staff.call === 'function') { | |
| 110 | + this.staff.call(this.staff) | |
| 111 | + } | |
| 109 | 112 | }, |
| 110 | - selectFirstUser() { | |
| 111 | - this.$emit('select', { | |
| 112 | - staffId: '${startUserId}', | |
| 113 | - staffName: this.$t('selectStaff.submitter') | |
| 114 | - }) | |
| 113 | + handleFirstUser() { | |
| 114 | + this.staff.staffId = '${startUserId}' | |
| 115 | + this.staff.staffName = this.$t('selectStaff.submitter') | |
| 115 | 116 | this.visible = false |
| 117 | + | |
| 118 | + if (typeof this.staff.call === 'function') { | |
| 119 | + this.staff.call(this.staff) | |
| 120 | + } | |
| 116 | 121 | }, |
| 117 | - selectCustomUser() { | |
| 118 | - this.$emit('select', { | |
| 119 | - staffId: '${nextUserId}', | |
| 120 | - staffName: this.$t('selectStaff.dynamicAssign') | |
| 121 | - }) | |
| 122 | + handleCustomUser() { | |
| 123 | + this.staff.staffId = '${nextUserId}' | |
| 124 | + this.staff.staffName = this.$t('selectStaff.dynamicAssign') | |
| 122 | 125 | this.visible = false |
| 126 | + | |
| 127 | + if (typeof this.staff.call === 'function') { | |
| 128 | + this.staff.call(this.staff) | |
| 129 | + } | |
| 123 | 130 | } |
| 124 | 131 | } |
| 125 | 132 | } |
| 126 | 133 | </script> |
| 127 | 134 | |
| 128 | -<style scoped> | |
| 129 | -.border-right { | |
| 130 | - border-right: 1px solid #ebeef5; | |
| 135 | +<style lang="scss" scoped> | |
| 136 | +.section-title { | |
| 137 | + font-size: 16px; | |
| 138 | + font-weight: bold; | |
| 139 | + margin-bottom: 15px; | |
| 140 | + text-align: center; | |
| 131 | 141 | } |
| 132 | -.org-tree-container, | |
| 133 | -.staff-list-container { | |
| 134 | - height: 400px; | |
| 142 | + | |
| 143 | +.staff-list { | |
| 144 | + max-height: 400px; | |
| 135 | 145 | overflow-y: auto; |
| 136 | - padding: 10px; | |
| 137 | 146 | } |
| 147 | + | |
| 138 | 148 | .staff-item { |
| 139 | 149 | padding: 10px; |
| 140 | 150 | margin-bottom: 10px; |
| 141 | 151 | border: 1px solid #ebeef5; |
| 142 | 152 | border-radius: 4px; |
| 143 | 153 | cursor: pointer; |
| 154 | + transition: all 0.3s; | |
| 155 | + | |
| 156 | + &:hover { | |
| 157 | + background-color: #f5f7fa; | |
| 158 | + } | |
| 159 | + | |
| 160 | + &.selected { | |
| 161 | + background-color: #ecf5ff; | |
| 162 | + border-color: #d9ecff; | |
| 163 | + } | |
| 164 | + | |
| 165 | + .el-icon-user { | |
| 166 | + margin-right: 5px; | |
| 167 | + } | |
| 144 | 168 | } |
| 145 | -.staff-item:hover { | |
| 146 | - background-color: #f5f7fa; | |
| 147 | -} | |
| 148 | -.staff-item.selected { | |
| 149 | - background-color: #ecf5ff; | |
| 150 | - border-color: #d9ecff; | |
| 151 | -} | |
| 152 | -.text-center { | |
| 153 | - text-align: center; | |
| 154 | -} | |
| 155 | -.mb-20 { | |
| 156 | - margin-bottom: 20px; | |
| 169 | + | |
| 170 | +.dialog-footer { | |
| 171 | + text-align: right; | |
| 157 | 172 | } |
| 158 | 173 | </style> |
| 159 | 174 | \ No newline at end of file | ... | ... |
src/i18n/workI18n.js
| ... | ... | @@ -2,15 +2,21 @@ import { messages as itemReleaseTypeManageMessages } from '../views/work/itemRel |
| 2 | 2 | import { messages as itemReleaseManageMessages } from '../views/work/itemReleaseManageLang' |
| 3 | 3 | |
| 4 | 4 | import { messages as addItemReleaseViewMessages } from '../views/work/addItemReleaseViewLang' |
| 5 | +import { messages as editItemReleaseViewMessages } from '../views/work/editItemReleaseViewLang' | |
| 6 | +import { messages as itemReleaseDetailMessages } from '../views/work/itemReleaseDetailLang' | |
| 5 | 7 | export const messages = { |
| 6 | 8 | zh: { |
| 7 | 9 | ...itemReleaseTypeManageMessages.zh, |
| 8 | 10 | ...itemReleaseManageMessages.zh, |
| 9 | 11 | ...addItemReleaseViewMessages.zh, |
| 12 | + ...editItemReleaseViewMessages.zh, | |
| 13 | + ...itemReleaseDetailMessages.zh, | |
| 10 | 14 | }, |
| 11 | 15 | en: { |
| 12 | 16 | ...itemReleaseTypeManageMessages.en, |
| 13 | 17 | ...itemReleaseManageMessages.en, |
| 14 | 18 | ...addItemReleaseViewMessages.en, |
| 19 | + ...editItemReleaseViewMessages.en, | |
| 20 | + ...itemReleaseDetailMessages.en, | |
| 15 | 21 | } |
| 16 | 22 | } |
| 17 | 23 | \ No newline at end of file | ... | ... |
src/lang/owner/auditAuthOwnerUndoLang.js deleted
| 1 | -export const messages = { | |
| 2 | - en: { | |
| 3 | - auditAuthOwnerUndo: { | |
| 4 | - title: 'Authentication Review', | |
| 5 | - back: 'Back', | |
| 6 | - roomNumber: 'Room Number:', | |
| 7 | - roomArea: 'Room Area:', | |
| 8 | - roomType: 'Room Type:', | |
| 9 | - roomStatus: 'Room Status:', | |
| 10 | - owner: 'Owner:', | |
| 11 | - ownerPhone: 'Owner Phone:', | |
| 12 | - authPerson: 'Authenticator:', | |
| 13 | - housePersonnel: 'House Personnel', | |
| 14 | - ownerFace: 'Owner Face', | |
| 15 | - name: 'Name', | |
| 16 | - contact: 'Contact', | |
| 17 | - address: 'Address', | |
| 18 | - idCard: 'ID Card', | |
| 19 | - audit: 'Audit', | |
| 20 | - action: 'Action', | |
| 21 | - selectAudit: 'Please Audit', | |
| 22 | - agree: 'Agree', | |
| 23 | - reject: 'Reject', | |
| 24 | - auditRemark: 'Audit Remark', | |
| 25 | - requiredRemark: 'Required, please fill in the work order description', | |
| 26 | - submit: 'Submit', | |
| 27 | - submitSuccess: 'Submitted successfully', | |
| 28 | - submitFailed: 'Submission failed:' | |
| 29 | - } | |
| 30 | - }, | |
| 31 | - zh: { | |
| 32 | - auditAuthOwnerUndo: { | |
| 33 | - title: '认证审核', | |
| 34 | - back: '返回', | |
| 35 | - roomNumber: '房屋编号:', | |
| 36 | - roomArea: '房屋面积:', | |
| 37 | - roomType: '房屋类型:', | |
| 38 | - roomStatus: '房屋状态:', | |
| 39 | - owner: '业主:', | |
| 40 | - ownerPhone: '业主电话:', | |
| 41 | - authPerson: '认证人员:', | |
| 42 | - housePersonnel: '房屋人员', | |
| 43 | - ownerFace: '业主人脸', | |
| 44 | - name: '姓名', | |
| 45 | - contact: '联系方式', | |
| 46 | - address: '家庭住址', | |
| 47 | - idCard: '身份证', | |
| 48 | - audit: '审核', | |
| 49 | - action: '动作', | |
| 50 | - selectAudit: '请审核', | |
| 51 | - agree: '同意', | |
| 52 | - reject: '拒绝', | |
| 53 | - auditRemark: '审核说明', | |
| 54 | - requiredRemark: '必填,请填写工单说明', | |
| 55 | - submit: '提交', | |
| 56 | - submitSuccess: '提交成功', | |
| 57 | - submitFailed: '提交失败:' | |
| 58 | - } | |
| 59 | - } | |
| 60 | -} | |
| 61 | 0 | \ No newline at end of file |
src/router/workRouter.js
| ... | ... | @@ -14,4 +14,14 @@ export default [ |
| 14 | 14 | name: '/views/work/addItemReleaseView', |
| 15 | 15 | component: () => import('@/views/work/addItemReleaseViewList.vue') |
| 16 | 16 | }, |
| 17 | + { | |
| 18 | + path: '/views/work/editItemReleaseView', | |
| 19 | + name: '/views/work/editItemReleaseView', | |
| 20 | + component: () => import('@/views/work/editItemReleaseViewList.vue') | |
| 21 | + }, | |
| 22 | + { | |
| 23 | + path: '/views/work/itemReleaseDetail', | |
| 24 | + name: '/views/work/itemReleaseDetail', | |
| 25 | + component: () => import('@/views/work/itemReleaseDetailList.vue') | |
| 26 | + }, | |
| 17 | 27 | ] |
| 18 | 28 | \ No newline at end of file | ... | ... |
src/views/community/addCommunityPublicityList.vue
src/views/community/editCommunityPublicityList.vue
src/views/work/addItemReleaseViewList.vue
| ... | ... | @@ -51,7 +51,7 @@ |
| 51 | 51 | </el-col> |
| 52 | 52 | <el-col :span="12"> |
| 53 | 53 | <el-form-item :label="$t('addItemReleaseView.passTime')"> |
| 54 | - <el-date-picker v-model="form.passTime" type="datetime" style="width:100%" | |
| 54 | + <el-date-picker v-model="form.passTime" type="datetime" style="width:100%" value-format="yyyy-MM-dd HH:mm:ss" | |
| 55 | 55 | :placeholder="$t('addItemReleaseView.requiredPassTime')" /> |
| 56 | 56 | </el-form-item> |
| 57 | 57 | </el-col> |
| ... | ... | @@ -134,7 +134,7 @@ |
| 134 | 134 | </el-col> |
| 135 | 135 | </el-row> |
| 136 | 136 | |
| 137 | - <SelectStaff ref="selectStaff" @select="handleStaffSelect" /> | |
| 137 | + <SelectStaff ref="selectStaff" @selectStaff="handleStaffSelect" /> | |
| 138 | 138 | |
| 139 | 139 | <div class="mt-20 text-right"> |
| 140 | 140 | <el-button type="warning" class="mr-20" @click="goBack"> | ... | ... |
src/views/work/editItemReleaseViewLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + editItemReleaseView: { | |
| 4 | + title: 'Edit Release', | |
| 5 | + releaseType: 'Release Type', | |
| 6 | + applyCompany: 'Apply Company', | |
| 7 | + applyPerson: 'Applicant', | |
| 8 | + idCard: 'ID Card', | |
| 9 | + phone: 'Phone', | |
| 10 | + passTime: 'Pass Time', | |
| 11 | + carNum: 'Car Number', | |
| 12 | + remark: 'Remark', | |
| 13 | + releaseItems: 'Release Items', | |
| 14 | + itemName: 'Item Name', | |
| 15 | + itemAmount: 'Quantity', | |
| 16 | + addItem: 'Add Item', | |
| 17 | + selectReleaseType: 'Required, please select release type', | |
| 18 | + inputApplyCompany: 'Required, please enter apply company', | |
| 19 | + inputApplyPerson: 'Required, please enter applicant', | |
| 20 | + inputIdCard: 'Required, please enter ID card', | |
| 21 | + inputPhone: 'Required, please enter phone', | |
| 22 | + selectPassTime: 'Required, please select pass time', | |
| 23 | + inputCarNum: 'Optional, please enter car number', | |
| 24 | + inputRemark: 'Optional, please enter remark', | |
| 25 | + inputItemName: 'Required, please enter item name', | |
| 26 | + inputItemAmount: 'Required, please enter quantity' | |
| 27 | + } | |
| 28 | + }, | |
| 29 | + zh: { | |
| 30 | + editItemReleaseView: { | |
| 31 | + title: '编辑放行', | |
| 32 | + releaseType: '放行类型', | |
| 33 | + applyCompany: '申请单位', | |
| 34 | + applyPerson: '申请人', | |
| 35 | + idCard: '身份证', | |
| 36 | + phone: '手机号', | |
| 37 | + passTime: '通行时间', | |
| 38 | + carNum: '车牌号', | |
| 39 | + remark: '备注', | |
| 40 | + releaseItems: '放行物品', | |
| 41 | + itemName: '物品名称', | |
| 42 | + itemAmount: '物品数量', | |
| 43 | + addItem: '添加物品', | |
| 44 | + selectReleaseType: '必填,请选择放行类型', | |
| 45 | + inputApplyCompany: '必填,请填写申请单位', | |
| 46 | + inputApplyPerson: '必填,请填写申请人', | |
| 47 | + inputIdCard: '必填,请填写身份证', | |
| 48 | + inputPhone: '必填,请填写手机号', | |
| 49 | + selectPassTime: '必填,请选择通行时间', | |
| 50 | + inputCarNum: '选填,请填写车牌号', | |
| 51 | + inputRemark: '选填,请填写备注', | |
| 52 | + inputItemName: '必填,请填写物品名称', | |
| 53 | + inputItemAmount: '必填,请填写数量' | |
| 54 | + } | |
| 55 | + } | |
| 56 | +} | |
| 0 | 57 | \ No newline at end of file | ... | ... |
src/views/work/editItemReleaseViewList.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="edit-item-release-container"> | |
| 3 | + <el-card class="box-card"> | |
| 4 | + <div slot="header" class="flex justify-between"> | |
| 5 | + <span>{{ $t('editItemReleaseView.title') }}</span> | |
| 6 | + <div> | |
| 7 | + <el-button type="text" size="small" @click="goBack"> | |
| 8 | + {{ $t('common.back') }} | |
| 9 | + </el-button> | |
| 10 | + </div> | |
| 11 | + </div> | |
| 12 | + | |
| 13 | + <el-row :gutter="20"> | |
| 14 | + <el-col :span="24"> | |
| 15 | + <el-card shadow="never"> | |
| 16 | + <el-form label-position="right" label-width="120px"> | |
| 17 | + <el-row :gutter="20"> | |
| 18 | + <el-col :span="12"> | |
| 19 | + <el-form-item :label="$t('editItemReleaseView.releaseType')"> | |
| 20 | + <el-select v-model="editItemReleaseViewInfo.typeId" disabled style="width:100%"> | |
| 21 | + <el-option disabled value="" :label="$t('editItemReleaseView.selectReleaseType')" /> | |
| 22 | + <template v-for="item in editItemReleaseViewInfo.itemReleaseTypes"> | |
| 23 | + <el-option :key="item.typeId" :label="item.typeName" :value="item.typeId" | |
| 24 | + v-if="item.state == 'C'" /> | |
| 25 | + </template> | |
| 26 | + </el-select> | |
| 27 | + </el-form-item> | |
| 28 | + </el-col> | |
| 29 | + <el-col :span="12"> | |
| 30 | + <el-form-item :label="$t('editItemReleaseView.applyCompany')"> | |
| 31 | + <el-input v-model.trim="editItemReleaseViewInfo.applyCompany" | |
| 32 | + :placeholder="$t('editItemReleaseView.inputApplyCompany')" /> | |
| 33 | + </el-form-item> | |
| 34 | + </el-col> | |
| 35 | + </el-row> | |
| 36 | + | |
| 37 | + <el-row :gutter="20"> | |
| 38 | + <el-col :span="12"> | |
| 39 | + <el-form-item :label="$t('editItemReleaseView.applyPerson')"> | |
| 40 | + <el-input v-model.trim="editItemReleaseViewInfo.applyPerson" | |
| 41 | + :placeholder="$t('editItemReleaseView.inputApplyPerson')" /> | |
| 42 | + </el-form-item> | |
| 43 | + </el-col> | |
| 44 | + <el-col :span="12"> | |
| 45 | + <el-form-item :label="$t('editItemReleaseView.idCard')"> | |
| 46 | + <el-input v-model.trim="editItemReleaseViewInfo.idCard" | |
| 47 | + :placeholder="$t('editItemReleaseView.inputIdCard')" /> | |
| 48 | + </el-form-item> | |
| 49 | + </el-col> | |
| 50 | + </el-row> | |
| 51 | + | |
| 52 | + <el-row :gutter="20"> | |
| 53 | + <el-col :span="12"> | |
| 54 | + <el-form-item :label="$t('editItemReleaseView.phone')"> | |
| 55 | + <el-input v-model.trim="editItemReleaseViewInfo.applyTel" | |
| 56 | + :placeholder="$t('editItemReleaseView.inputPhone')" /> | |
| 57 | + </el-form-item> | |
| 58 | + </el-col> | |
| 59 | + <el-col :span="12"> | |
| 60 | + <el-form-item :label="$t('editItemReleaseView.passTime')"> | |
| 61 | + <el-date-picker v-model="editItemReleaseViewInfo.passTime" type="datetime" | |
| 62 | + :placeholder="$t('editItemReleaseView.selectPassTime')" style="width:100%" /> | |
| 63 | + </el-form-item> | |
| 64 | + </el-col> | |
| 65 | + </el-row> | |
| 66 | + | |
| 67 | + <el-row :gutter="20"> | |
| 68 | + <el-col :span="12"> | |
| 69 | + <el-form-item :label="$t('editItemReleaseView.carNum')"> | |
| 70 | + <el-input v-model.trim="editItemReleaseViewInfo.carNum" | |
| 71 | + :placeholder="$t('editItemReleaseView.inputCarNum')" /> | |
| 72 | + </el-form-item> | |
| 73 | + </el-col> | |
| 74 | + <el-col :span="12"> | |
| 75 | + <el-form-item :label="$t('editItemReleaseView.remark')"> | |
| 76 | + <el-input v-model.trim="editItemReleaseViewInfo.remark" type="textarea" | |
| 77 | + :placeholder="$t('editItemReleaseView.inputRemark')" /> | |
| 78 | + </el-form-item> | |
| 79 | + </el-col> | |
| 80 | + </el-row> | |
| 81 | + </el-form> | |
| 82 | + </el-card> | |
| 83 | + </el-col> | |
| 84 | + </el-row> | |
| 85 | + | |
| 86 | + <el-row :gutter="20" class="margin-top"> | |
| 87 | + <el-col :span="24"> | |
| 88 | + <el-card shadow="never"> | |
| 89 | + <div slot="header" class="clearfix"> | |
| 90 | + <span>{{ $t('editItemReleaseView.releaseItems') }}</span> | |
| 91 | + <el-button type="primary" size="small" style="float: right;" @click="addResName"> | |
| 92 | + <i class="el-icon-plus"></i> | |
| 93 | + {{ $t('editItemReleaseView.addItem') }} | |
| 94 | + </el-button> | |
| 95 | + </div> | |
| 96 | + | |
| 97 | + <el-table :data="editItemReleaseViewInfo.resNames" border style="width: 100%"> | |
| 98 | + <el-table-column :label="$t('editItemReleaseView.itemName')" align="center"> | |
| 99 | + <template slot-scope="scope"> | |
| 100 | + <el-input v-model.trim="scope.row.resName" :placeholder="$t('editItemReleaseView.inputItemName')" /> | |
| 101 | + </template> | |
| 102 | + </el-table-column> | |
| 103 | + <el-table-column :label="$t('editItemReleaseView.itemAmount')" align="center"> | |
| 104 | + <template slot-scope="scope"> | |
| 105 | + <el-input v-model.trim="scope.row.amount" type="number" | |
| 106 | + :placeholder="$t('editItemReleaseView.inputItemAmount')" /> | |
| 107 | + </template> | |
| 108 | + </el-table-column> | |
| 109 | + <el-table-column :label="$t('common.operation')" align="center" width="120"> | |
| 110 | + <template slot-scope="scope"> | |
| 111 | + <el-button type="danger" size="mini" @click="removeResName(scope.row.resName)"> | |
| 112 | + {{ $t('common.delete') }} | |
| 113 | + </el-button> | |
| 114 | + </template> | |
| 115 | + </el-table-column> | |
| 116 | + </el-table> | |
| 117 | + </el-card> | |
| 118 | + </el-col> | |
| 119 | + </el-row> | |
| 120 | + | |
| 121 | + <div class="action-buttons"> | |
| 122 | + <el-button type="primary" @click="updateItemReleaseInfo"> | |
| 123 | + {{ $t('common.submit') }} | |
| 124 | + </el-button> | |
| 125 | + <el-button type="warning" @click="goBack"> | |
| 126 | + {{ $t('common.cancel') }} | |
| 127 | + </el-button> | |
| 128 | + </div> | |
| 129 | + </el-card> | |
| 130 | + </div> | |
| 131 | +</template> | |
| 132 | + | |
| 133 | +<script> | |
| 134 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 135 | +import { | |
| 136 | + updateItemRelease, | |
| 137 | + listItemReleaseType, | |
| 138 | + listItemRelease, | |
| 139 | + listItemReleaseRes | |
| 140 | +} from '@/api/work/editItemReleaseViewApi' | |
| 141 | + | |
| 142 | +export default { | |
| 143 | + name: 'EditItemReleaseView', | |
| 144 | + data() { | |
| 145 | + return { | |
| 146 | + editItemReleaseViewInfo: { | |
| 147 | + irId: '', | |
| 148 | + typeId: '', | |
| 149 | + applyCompany: '', | |
| 150 | + applyPerson: '', | |
| 151 | + idCard: '', | |
| 152 | + applyTel: '', | |
| 153 | + passTime: '', | |
| 154 | + resNames: [], | |
| 155 | + state: '', | |
| 156 | + carNum: '', | |
| 157 | + remark: '', | |
| 158 | + itemReleaseTypes: [] | |
| 159 | + }, | |
| 160 | + communityId: '' | |
| 161 | + } | |
| 162 | + }, | |
| 163 | + created() { | |
| 164 | + this.communityId = getCommunityId() | |
| 165 | + this.editItemReleaseViewInfo.irId = this.$route.query.irId | |
| 166 | + this.listItemReleaseTypes() | |
| 167 | + this.listItemReleases() | |
| 168 | + this.loadItemReleaseRes() | |
| 169 | + }, | |
| 170 | + methods: { | |
| 171 | + goBack() { | |
| 172 | + this.$router.go(-1) | |
| 173 | + }, | |
| 174 | + validateForm() { | |
| 175 | + // 这里添加表单验证逻辑 | |
| 176 | + return true | |
| 177 | + }, | |
| 178 | + async updateItemReleaseInfo() { | |
| 179 | + if (!this.validateForm()) { | |
| 180 | + return | |
| 181 | + } | |
| 182 | + | |
| 183 | + try { | |
| 184 | + this.editItemReleaseViewInfo.communityId = this.communityId | |
| 185 | + const res = await updateItemRelease(this.editItemReleaseViewInfo) | |
| 186 | + if (res.code === 0) { | |
| 187 | + this.$message.success(this.$t('common.updateSuccess')) | |
| 188 | + this.goBack() | |
| 189 | + } else { | |
| 190 | + this.$message.error(res.msg) | |
| 191 | + } | |
| 192 | + } catch (error) { | |
| 193 | + this.$message.error(this.$t('common.updateFailed')) | |
| 194 | + } | |
| 195 | + }, | |
| 196 | + async listItemReleaseTypes() { | |
| 197 | + try { | |
| 198 | + const params = { | |
| 199 | + page: 1, | |
| 200 | + row: 100, | |
| 201 | + communityId: this.communityId | |
| 202 | + } | |
| 203 | + const res = await listItemReleaseType(params) | |
| 204 | + this.editItemReleaseViewInfo.itemReleaseTypes = res.data | |
| 205 | + } catch (error) { | |
| 206 | + console.error('Failed to fetch item release types:', error) | |
| 207 | + } | |
| 208 | + }, | |
| 209 | + addResName() { | |
| 210 | + this.editItemReleaseViewInfo.resNames.push({ | |
| 211 | + resName: '', | |
| 212 | + amount: '' | |
| 213 | + }) | |
| 214 | + }, | |
| 215 | + removeResName(resName) { | |
| 216 | + this.editItemReleaseViewInfo.resNames = this.editItemReleaseViewInfo.resNames.filter( | |
| 217 | + item => item.resName !== resName | |
| 218 | + ) | |
| 219 | + }, | |
| 220 | + async listItemReleases() { | |
| 221 | + try { | |
| 222 | + const params = { | |
| 223 | + page: 1, | |
| 224 | + row: 1, | |
| 225 | + communityId: this.communityId, | |
| 226 | + irId: this.editItemReleaseViewInfo.irId | |
| 227 | + } | |
| 228 | + const res = await listItemRelease(params) | |
| 229 | + if (res.data && res.data.length > 0) { | |
| 230 | + Object.assign(this.editItemReleaseViewInfo, res.data[0]) | |
| 231 | + } | |
| 232 | + } catch (error) { | |
| 233 | + console.error('Failed to fetch item releases:', error) | |
| 234 | + } | |
| 235 | + }, | |
| 236 | + async loadItemReleaseRes() { | |
| 237 | + try { | |
| 238 | + const params = { | |
| 239 | + page: 1, | |
| 240 | + row: 500, | |
| 241 | + communityId: this.communityId, | |
| 242 | + irId: this.editItemReleaseViewInfo.irId | |
| 243 | + } | |
| 244 | + const res = await listItemReleaseRes(params) | |
| 245 | + this.editItemReleaseViewInfo.resNames = res.data | |
| 246 | + } catch (error) { | |
| 247 | + console.error('Failed to fetch item release resources:', error) | |
| 248 | + } | |
| 249 | + } | |
| 250 | + } | |
| 251 | +} | |
| 252 | +</script> | |
| 253 | + | |
| 254 | +<style lang="scss" scoped> | |
| 255 | +.edit-item-release-container { | |
| 256 | + padding: 20px; | |
| 257 | + | |
| 258 | + .box-card { | |
| 259 | + margin-bottom: 20px; | |
| 260 | + } | |
| 261 | + | |
| 262 | + .header-tools { | |
| 263 | + float: right; | |
| 264 | + } | |
| 265 | + | |
| 266 | + .margin-top { | |
| 267 | + margin-top: 20px; | |
| 268 | + } | |
| 269 | + | |
| 270 | + .action-buttons { | |
| 271 | + margin-top: 20px; | |
| 272 | + text-align: right; | |
| 273 | + | |
| 274 | + .el-button { | |
| 275 | + margin-left: 10px; | |
| 276 | + } | |
| 277 | + } | |
| 278 | +} | |
| 279 | +</style> | |
| 0 | 280 | \ No newline at end of file | ... | ... |
src/views/work/itemReleaseDetailLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + itemReleaseDetail: { | |
| 4 | + releaseDetails: 'Release Details', | |
| 5 | + back: 'Back', | |
| 6 | + applyCompany: 'Application Unit:', | |
| 7 | + passType: 'Pass Type:', | |
| 8 | + applicant: 'Applicant:', | |
| 9 | + idCard: 'ID Card:', | |
| 10 | + phone: 'Phone:', | |
| 11 | + applyTime: 'Application Time:', | |
| 12 | + status: 'Status:', | |
| 13 | + licensePlate: 'License Plate:', | |
| 14 | + passTime: 'Pass Time:', | |
| 15 | + totalQuantity: 'Total Quantity:', | |
| 16 | + releaseItems: 'Release Items', | |
| 17 | + itemName: 'Item Name', | |
| 18 | + quantity: 'Quantity', | |
| 19 | + workflowProcess: 'Workflow Process', | |
| 20 | + serialNumber: 'No.', | |
| 21 | + department: 'Department', | |
| 22 | + handler: 'Handler', | |
| 23 | + processed: 'Processed', | |
| 24 | + processing: 'Processing', | |
| 25 | + timeConsumed: 'Time Consumed', | |
| 26 | + comment: 'Comment', | |
| 27 | + workOrderProcessing: 'Work Order Processing', | |
| 28 | + action: 'Action', | |
| 29 | + pleaseSelect: 'Please Select', | |
| 30 | + agree: 'Agree', | |
| 31 | + return: 'Return', | |
| 32 | + returnToSubmitter: 'Return to Submitter', | |
| 33 | + transfer: 'Transfer', | |
| 34 | + workOrderDescription: 'Work Order Description', | |
| 35 | + requiredDescription: 'Required, please fill in work order description', | |
| 36 | + nextHandler: 'Next Handler', | |
| 37 | + requiredNextHandler: 'Required, please select next handler', | |
| 38 | + select: 'Select', | |
| 39 | + submit: 'Submit', | |
| 40 | + flowChart: 'Flow Chart', | |
| 41 | + illegalOperation: 'Illegal operation', | |
| 42 | + selectStatus: 'Please select status', | |
| 43 | + fillDescription: 'Please fill in description', | |
| 44 | + selectNextHandler: 'Please select next handler', | |
| 45 | + submitSuccess: 'Submit successfully', | |
| 46 | + submitFailed: 'Submit failed', | |
| 47 | + administrator: 'Administrator' | |
| 48 | + } | |
| 49 | + }, | |
| 50 | + zh: { | |
| 51 | + itemReleaseDetail: { | |
| 52 | + releaseDetails: '放行详情', | |
| 53 | + back: '返回', | |
| 54 | + applyCompany: '申请单位:', | |
| 55 | + passType: '通行类型:', | |
| 56 | + applicant: '申请人:', | |
| 57 | + idCard: '身份证:', | |
| 58 | + phone: '手机号:', | |
| 59 | + applyTime: '申请时间:', | |
| 60 | + status: '状态:', | |
| 61 | + licensePlate: '车牌号:', | |
| 62 | + passTime: '通行时间:', | |
| 63 | + totalQuantity: '物品总数量:', | |
| 64 | + releaseItems: '放行物品', | |
| 65 | + itemName: '物品名称', | |
| 66 | + quantity: '数量', | |
| 67 | + workflowProcess: '工单流转', | |
| 68 | + serialNumber: '序号', | |
| 69 | + department: '部门', | |
| 70 | + handler: '处理人', | |
| 71 | + processed: '处理完成', | |
| 72 | + processing: '正在处理', | |
| 73 | + timeConsumed: '耗时', | |
| 74 | + comment: '意见', | |
| 75 | + workOrderProcessing: '工单办理', | |
| 76 | + action: '动作', | |
| 77 | + pleaseSelect: '请选择', | |
| 78 | + agree: '同意', | |
| 79 | + return: '退回', | |
| 80 | + returnToSubmitter: '退回至提交者', | |
| 81 | + transfer: '转单', | |
| 82 | + workOrderDescription: '工单说明', | |
| 83 | + requiredDescription: '必填,请填写工单说明', | |
| 84 | + nextHandler: '下一处理人', | |
| 85 | + requiredNextHandler: '必填,请选择下一处理人', | |
| 86 | + select: '选择', | |
| 87 | + submit: '提交', | |
| 88 | + flowChart: '流程图', | |
| 89 | + illegalOperation: '非法操作', | |
| 90 | + selectStatus: '请选择状态', | |
| 91 | + fillDescription: '请填写说明', | |
| 92 | + selectNextHandler: '请选择下一节点处理人', | |
| 93 | + submitSuccess: '提交成功', | |
| 94 | + submitFailed: '提交失败', | |
| 95 | + administrator: '管理员' | |
| 96 | + } | |
| 97 | + } | |
| 98 | +} | |
| 0 | 99 | \ No newline at end of file | ... | ... |
src/views/work/itemReleaseDetailList.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="item-release-detail-container"> | |
| 3 | + <!-- 放行详情 --> | |
| 4 | + <el-row> | |
| 5 | + <el-col :span="24"> | |
| 6 | + <el-card> | |
| 7 | + <div slot="header" class="flex justify-between"> | |
| 8 | + <span>{{ $t('itemReleaseDetail.releaseDetails') }}</span> | |
| 9 | + <div class="card-header-right"> | |
| 10 | + <el-button type="primary" size="small" @click="_goBack">{{ $t('itemReleaseDetail.back') }}</el-button> | |
| 11 | + </div> | |
| 12 | + </div> | |
| 13 | + <div v-if="itemReleaseDetailInfo.pools"> | |
| 14 | + <el-row :gutter="20"> | |
| 15 | + <el-col :span="8"> | |
| 16 | + <div class="form-group"> | |
| 17 | + <label class="form-label">{{ $t('itemReleaseDetail.applyCompany') }}</label> | |
| 18 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.applyCompany }}</div> | |
| 19 | + </div> | |
| 20 | + </el-col> | |
| 21 | + <el-col :span="8"> | |
| 22 | + <div class="form-group"> | |
| 23 | + <label class="form-label">{{ $t('itemReleaseDetail.passType') }}</label> | |
| 24 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.typeName }}</div> | |
| 25 | + </div> | |
| 26 | + </el-col> | |
| 27 | + <el-col :span="8"> | |
| 28 | + <div class="form-group"> | |
| 29 | + <label class="form-label">{{ $t('itemReleaseDetail.applicant') }}</label> | |
| 30 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.applyPerson }}</div> | |
| 31 | + </div> | |
| 32 | + </el-col> | |
| 33 | + <el-col :span="8"> | |
| 34 | + <div class="form-group"> | |
| 35 | + <label class="form-label">{{ $t('itemReleaseDetail.idCard') }}</label> | |
| 36 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.idCard }}</div> | |
| 37 | + </div> | |
| 38 | + </el-col> | |
| 39 | + <el-col :span="8"> | |
| 40 | + <div class="form-group"> | |
| 41 | + <label class="form-label">{{ $t('itemReleaseDetail.phone') }}</label> | |
| 42 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.applyTel }}</div> | |
| 43 | + </div> | |
| 44 | + </el-col> | |
| 45 | + <el-col :span="8"> | |
| 46 | + <div class="form-group"> | |
| 47 | + <label class="form-label">{{ $t('itemReleaseDetail.applyTime') }}</label> | |
| 48 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.createTime }}</div> | |
| 49 | + </div> | |
| 50 | + </el-col> | |
| 51 | + <el-col :span="8"> | |
| 52 | + <div class="form-group"> | |
| 53 | + <label class="form-label">{{ $t('itemReleaseDetail.status') }}</label> | |
| 54 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.stateName }}</div> | |
| 55 | + </div> | |
| 56 | + </el-col> | |
| 57 | + <el-col :span="8"> | |
| 58 | + <div class="form-group"> | |
| 59 | + <label class="form-label">{{ $t('itemReleaseDetail.licensePlate') }}</label> | |
| 60 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.carNum }}</div> | |
| 61 | + </div> | |
| 62 | + </el-col> | |
| 63 | + <el-col :span="8"> | |
| 64 | + <div class="form-group"> | |
| 65 | + <label class="form-label">{{ $t('itemReleaseDetail.passTime') }}</label> | |
| 66 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.passTime }}</div> | |
| 67 | + </div> | |
| 68 | + </el-col> | |
| 69 | + <el-col :span="8"> | |
| 70 | + <div class="form-group"> | |
| 71 | + <label class="form-label">{{ $t('itemReleaseDetail.totalQuantity') }}</label> | |
| 72 | + <div class="form-content">{{ itemReleaseDetailInfo.pools.amount }}</div> | |
| 73 | + </div> | |
| 74 | + </el-col> | |
| 75 | + </el-row> | |
| 76 | + </div> | |
| 77 | + </el-card> | |
| 78 | + </el-col> | |
| 79 | + </el-row> | |
| 80 | + | |
| 81 | + <!-- 放行物品 --> | |
| 82 | + <el-row> | |
| 83 | + <el-col :span="24"> | |
| 84 | + <el-card> | |
| 85 | + <div slot="header" class="flex justify-between"> | |
| 86 | + <span>{{ $t('itemReleaseDetail.releaseItems') }}</span> | |
| 87 | + </div> | |
| 88 | + <el-table :data="itemReleaseDetailInfo.resNames" border style="width: 100%"> | |
| 89 | + <el-table-column prop="resName" :label="$t('itemReleaseDetail.itemName')" align="center" /> | |
| 90 | + <el-table-column prop="amount" :label="$t('itemReleaseDetail.quantity')" align="center" /> | |
| 91 | + </el-table> | |
| 92 | + </el-card> | |
| 93 | + </el-col> | |
| 94 | + </el-row> | |
| 95 | + | |
| 96 | + <!-- 工单流转 --> | |
| 97 | + <el-row> | |
| 98 | + <el-col :span="24"> | |
| 99 | + <el-card> | |
| 100 | + <div slot="header" class="flex justify-between"> | |
| 101 | + <span>{{ $t('itemReleaseDetail.workflowProcess') }}</span> | |
| 102 | + </div> | |
| 103 | + <el-table :data="itemReleaseDetailInfo.comments" border style="width: 100%"> | |
| 104 | + <el-table-column type="index" :label="$t('itemReleaseDetail.serialNumber')" align="center" width="80" /> | |
| 105 | + <el-table-column prop="orgName" :label="$t('itemReleaseDetail.department')" align="center"> | |
| 106 | + <template slot-scope="scope"> | |
| 107 | + {{ scope.row.orgName || $t('itemReleaseDetail.administrator') }} | |
| 108 | + </template> | |
| 109 | + </el-table-column> | |
| 110 | + <el-table-column prop="staffName" :label="$t('itemReleaseDetail.handler')" align="center" /> | |
| 111 | + <el-table-column :label="$t('itemReleaseDetail.status')" align="center"> | |
| 112 | + <template slot-scope="scope"> | |
| 113 | + {{ scope.row.endTime ? $t('itemReleaseDetail.processed') : $t('itemReleaseDetail.processing') }} | |
| 114 | + </template> | |
| 115 | + </el-table-column> | |
| 116 | + <el-table-column prop="duration" :label="$t('itemReleaseDetail.timeConsumed')" align="center" /> | |
| 117 | + <el-table-column prop="context" :label="$t('itemReleaseDetail.comment')" align="center" /> | |
| 118 | + </el-table> | |
| 119 | + </el-card> | |
| 120 | + </el-col> | |
| 121 | + </el-row> | |
| 122 | + | |
| 123 | + <!-- 工单办理 --> | |
| 124 | + <el-row v-if="itemReleaseDetailInfo.action"> | |
| 125 | + <el-col :span="24"> | |
| 126 | + <el-card> | |
| 127 | + <div slot="header" class="flex justify-between"> | |
| 128 | + <span>{{ $t('itemReleaseDetail.workOrderProcessing') }}</span> | |
| 129 | + </div> | |
| 130 | + <el-form label-width="120px"> | |
| 131 | + <el-form-item :label="$t('itemReleaseDetail.action')"> | |
| 132 | + <el-select v-model="itemReleaseDetailInfo.audit.auditCode" style="width:100%"> | |
| 133 | + <el-option :label="$t('itemReleaseDetail.pleaseSelect')" value="" disabled /> | |
| 134 | + <el-option v-if="itemReleaseDetailInfo.nextAudit.next || itemReleaseDetailInfo.nextAudit.exit" | |
| 135 | + value="1100" :label="$t('itemReleaseDetail.agree')" /> | |
| 136 | + <el-option v-if="itemReleaseDetailInfo.nextAudit.back" value="1200" | |
| 137 | + :label="$t('itemReleaseDetail.return')" /> | |
| 138 | + <el-option v-if="itemReleaseDetailInfo.nextAudit.backIndex" value="1400" | |
| 139 | + :label="$t('itemReleaseDetail.returnToSubmitter')" /> | |
| 140 | + <el-option value="1300" :label="$t('itemReleaseDetail.transfer')" /> | |
| 141 | + </el-select> | |
| 142 | + </el-form-item> | |
| 143 | + <el-form-item :label="$t('itemReleaseDetail.workOrderDescription')"> | |
| 144 | + <el-input type="textarea" :placeholder="$t('itemReleaseDetail.requiredDescription')" | |
| 145 | + v-model="itemReleaseDetailInfo.audit.auditMessage" /> | |
| 146 | + </el-form-item> | |
| 147 | + <!-- 下一处理人 --> | |
| 148 | + <el-form-item v-if="(itemReleaseDetailInfo.audit.auditCode == '1100' && itemReleaseDetailInfo.nextAudit.assignee == '-2') || | |
| 149 | + itemReleaseDetailInfo.audit.auditCode == '1300'" :label="$t('itemReleaseDetail.nextHandler')"> | |
| 150 | + <el-input v-model="itemReleaseDetailInfo.audit.staffName" | |
| 151 | + :placeholder="$t('itemReleaseDetail.requiredNextHandler')" disabled style="width: calc(100% - 120px)" /> | |
| 152 | + <el-button style="width: 120px" @click="chooseStaff">{{ $t('itemReleaseDetail.select') }}</el-button> | |
| 153 | + </el-form-item> | |
| 154 | + <el-form-item> | |
| 155 | + <el-button type="primary" @click="_auditSubmit">{{ $t('itemReleaseDetail.submit') }}</el-button> | |
| 156 | + </el-form-item> | |
| 157 | + </el-form> | |
| 158 | + </el-card> | |
| 159 | + </el-col> | |
| 160 | + </el-row> | |
| 161 | + | |
| 162 | + <!-- 流程图 --> | |
| 163 | + <el-row> | |
| 164 | + <el-col :span="24"> | |
| 165 | + <el-card> | |
| 166 | + <div slot="header" class="flex justify-between"> | |
| 167 | + <span>{{ $t('itemReleaseDetail.flowChart') }}</span> | |
| 168 | + </div> | |
| 169 | + <div class="text-center"> | |
| 170 | + <img :src="itemReleaseDetailInfo.imgData" alt="" style="height:300px"> | |
| 171 | + </div> | |
| 172 | + </el-card> | |
| 173 | + </el-col> | |
| 174 | + </el-row> | |
| 175 | + | |
| 176 | + <!-- 选择员工组件 --> | |
| 177 | + <select-staff ref="selectStaff" @selectStaff="handleStaffSelect" /> | |
| 178 | + </div> | |
| 179 | +</template> | |
| 180 | + | |
| 181 | +<script> | |
| 182 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 183 | +import SelectStaff from '@/components/staff/SelectStaff' | |
| 184 | +import { | |
| 185 | + listItemReleaseRes, | |
| 186 | + listItemRelease, | |
| 187 | + auditUndoItemRelease | |
| 188 | +} from '@/api/work/itemReleaseDetailApi' | |
| 189 | + | |
| 190 | +export default { | |
| 191 | + name: 'ItemReleaseDetailList', | |
| 192 | + components: { | |
| 193 | + SelectStaff | |
| 194 | + }, | |
| 195 | + data() { | |
| 196 | + return { | |
| 197 | + communityId: '', | |
| 198 | + itemReleaseDetailInfo: { | |
| 199 | + irId: '', | |
| 200 | + flowId: '', | |
| 201 | + pools: {}, | |
| 202 | + resNames: [], | |
| 203 | + comments: [], | |
| 204 | + action: '', | |
| 205 | + audit: { | |
| 206 | + auditCode: '1100', | |
| 207 | + auditMessage: '', | |
| 208 | + staffId: '', | |
| 209 | + staffName: '', | |
| 210 | + taskId: '' | |
| 211 | + }, | |
| 212 | + imgData: '', | |
| 213 | + nextAudit: {}, | |
| 214 | + files: [] | |
| 215 | + } | |
| 216 | + } | |
| 217 | + }, | |
| 218 | + created() { | |
| 219 | + this.communityId = getCommunityId() | |
| 220 | + this.initData() | |
| 221 | + }, | |
| 222 | + methods: { | |
| 223 | + initData() { | |
| 224 | + const irId = this.$route.query.irId | |
| 225 | + if (!irId) { | |
| 226 | + this.$message.error(this.$t('itemReleaseDetail.illegalOperation')) | |
| 227 | + return | |
| 228 | + } | |
| 229 | + this.itemReleaseDetailInfo.irId = irId | |
| 230 | + this.itemReleaseDetailInfo.flowId = this.$route.query.flowId | |
| 231 | + this.itemReleaseDetailInfo.action = this.$route.query.action | |
| 232 | + this.itemReleaseDetailInfo.audit.taskId = this.$route.query.taskId | |
| 233 | + | |
| 234 | + this._listOaWorkflowDetails() | |
| 235 | + this._loadItemReleaseRes() | |
| 236 | + this._loadComments() | |
| 237 | + this._openNewOaWorkflowDetailImg() | |
| 238 | + }, | |
| 239 | + async _loadItemReleaseRes() { | |
| 240 | + try { | |
| 241 | + const { data } = await listItemReleaseRes({ | |
| 242 | + page: 1, | |
| 243 | + row: 500, | |
| 244 | + communityId: this.communityId, | |
| 245 | + irId: this.itemReleaseDetailInfo.irId | |
| 246 | + }) | |
| 247 | + this.itemReleaseDetailInfo.resNames = data | |
| 248 | + } catch (error) { | |
| 249 | + console.error('获取放行物品失败:', error) | |
| 250 | + } | |
| 251 | + }, | |
| 252 | + async _listOaWorkflowDetails() { | |
| 253 | + try { | |
| 254 | + const { data } = await listItemRelease({ | |
| 255 | + page: 1, | |
| 256 | + row: 1, | |
| 257 | + irId: this.itemReleaseDetailInfo.irId, | |
| 258 | + flowId: this.itemReleaseDetailInfo.flowId, | |
| 259 | + communityId: this.communityId | |
| 260 | + }) | |
| 261 | + this.itemReleaseDetailInfo.pools = data[0] | |
| 262 | + if (this.itemReleaseDetailInfo.action) { | |
| 263 | + this._loadNextAuditPerson() | |
| 264 | + } | |
| 265 | + } catch (error) { | |
| 266 | + console.error('获取放行详情失败:', error) | |
| 267 | + } | |
| 268 | + }, | |
| 269 | + _loadComments() { | |
| 270 | + // TODO: 需要实现工单评论接口 | |
| 271 | + console.log('加载评论') | |
| 272 | + }, | |
| 273 | + _goBack() { | |
| 274 | + this.$router.go(-1) | |
| 275 | + }, | |
| 276 | + chooseStaff() { | |
| 277 | + this.$refs.selectStaff.open(this.itemReleaseDetailInfo.audit) | |
| 278 | + }, | |
| 279 | + async _auditSubmit() { | |
| 280 | + const _audit = this.itemReleaseDetailInfo.audit | |
| 281 | + _audit.flowId = this.itemReleaseDetailInfo.flowId | |
| 282 | + _audit.irId = this.itemReleaseDetailInfo.irId | |
| 283 | + | |
| 284 | + if (this.itemReleaseDetailInfo.nextAudit.assignee != '-2') { | |
| 285 | + _audit.staffId = this.itemReleaseDetailInfo.nextAudit.assignee | |
| 286 | + } | |
| 287 | + | |
| 288 | + if (!_audit.auditCode) { | |
| 289 | + this.$message.error(this.$t('itemReleaseDetail.selectStatus')) | |
| 290 | + return | |
| 291 | + } | |
| 292 | + if (!_audit.auditMessage) { | |
| 293 | + this.$message.error(this.$t('itemReleaseDetail.fillDescription')) | |
| 294 | + return | |
| 295 | + } | |
| 296 | + if (_audit.auditCode != '1200' && _audit.auditCode != '1400' && !_audit.staffId) { | |
| 297 | + this.$message.error(this.$t('itemReleaseDetail.selectNextHandler')) | |
| 298 | + return | |
| 299 | + } | |
| 300 | + | |
| 301 | + try { | |
| 302 | + await auditUndoItemRelease(_audit) | |
| 303 | + this.$message.success(this.$t('itemReleaseDetail.submitSuccess')) | |
| 304 | + this._goBack() | |
| 305 | + } catch (error) { | |
| 306 | + this.$message.error(error.message || this.$t('itemReleaseDetail.submitFailed')) | |
| 307 | + } | |
| 308 | + }, | |
| 309 | + _loadNextAuditPerson() { | |
| 310 | + // TODO: 需要实现获取下一处理人接口 | |
| 311 | + console.log('加载下一处理人') | |
| 312 | + }, | |
| 313 | + _openNewOaWorkflowDetailImg() { | |
| 314 | + // TODO: 需要实现获取流程图接口 | |
| 315 | + console.log('加载流程图') | |
| 316 | + }, | |
| 317 | + handleStaffSelect(staff) { | |
| 318 | + this.itemReleaseDetailInfo.audit.staffId = staff.staffId | |
| 319 | + this.itemReleaseDetailInfo.audit.staffName = staff.staffName | |
| 320 | + } | |
| 321 | + } | |
| 322 | +} | |
| 323 | +</script> | |
| 324 | + | |
| 325 | +<style lang="scss" scoped> | |
| 326 | +.item-release-detail-container { | |
| 327 | + padding: 20px; | |
| 328 | + | |
| 329 | + .el-row { | |
| 330 | + margin-bottom: 20px; | |
| 331 | + | |
| 332 | + &:last-child { | |
| 333 | + margin-bottom: 0; | |
| 334 | + } | |
| 335 | + } | |
| 336 | + | |
| 337 | + .form-group { | |
| 338 | + margin-bottom: 20px; | |
| 339 | + display: flex; | |
| 340 | + justify-content: flex-start; | |
| 341 | + | |
| 342 | + .form-label { | |
| 343 | + margin-bottom: 5px; | |
| 344 | + color: #606266; | |
| 345 | + } | |
| 346 | + | |
| 347 | + .form-content { | |
| 348 | + } | |
| 349 | + } | |
| 350 | + | |
| 351 | + .card-header-right { | |
| 352 | + float: right; | |
| 353 | + } | |
| 354 | + | |
| 355 | + .text-center { | |
| 356 | + text-align: center; | |
| 357 | + } | |
| 358 | +} | |
| 359 | +</style> | |
| 0 | 360 | \ No newline at end of file | ... | ... |
src/views/work/itemReleaseManageList.vue
| ... | ... | @@ -4,41 +4,25 @@ |
| 4 | 4 | <el-card class="search-card"> |
| 5 | 5 | <div slot="header" class="flex justify-between"> |
| 6 | 6 | <span>{{ $t('itemReleaseManage.search.title') }}</span> |
| 7 | - <el-button | |
| 8 | - type="text" | |
| 9 | - style="float: right; padding: 3px 0" | |
| 10 | - @click="_moreCondition" | |
| 11 | - > | |
| 7 | + <el-button type="text" style="float: right; padding: 3px 0" @click="_moreCondition"> | |
| 12 | 8 | {{ itemReleaseManageInfo.moreCondition ? $t('common.hide') : $t('common.more') }} |
| 13 | 9 | </el-button> |
| 14 | 10 | </div> |
| 15 | 11 | <el-row :gutter="20"> |
| 16 | 12 | <el-col :span="6"> |
| 17 | - <el-select | |
| 18 | - v-model="itemReleaseManageInfo.conditions.typeId" | |
| 19 | - :placeholder="$t('itemReleaseManage.placeholder.selectReleaseType')" | |
| 20 | - style="width: 100%" | |
| 21 | - > | |
| 22 | - <el-option | |
| 23 | - v-for="item in itemReleaseManageInfo.itemReleaseTypes" | |
| 24 | - :key="item.typeId" | |
| 25 | - :label="item.typeName" | |
| 26 | - :value="item.typeId" | |
| 27 | - :disabled="item.state !== 'C'" | |
| 28 | - /> | |
| 13 | + <el-select v-model="itemReleaseManageInfo.conditions.typeId" | |
| 14 | + :placeholder="$t('itemReleaseManage.placeholder.selectReleaseType')" style="width: 100%"> | |
| 15 | + <el-option v-for="item in itemReleaseManageInfo.itemReleaseTypes" :key="item.typeId" :label="item.typeName" | |
| 16 | + :value="item.typeId" :disabled="item.state !== 'C'" /> | |
| 29 | 17 | </el-select> |
| 30 | 18 | </el-col> |
| 31 | 19 | <el-col :span="8"> |
| 32 | - <el-input | |
| 33 | - v-model="itemReleaseManageInfo.conditions.applyCompany" | |
| 34 | - :placeholder="$t('itemReleaseManage.placeholder.selectApplyCompany')" | |
| 35 | - /> | |
| 20 | + <el-input v-model="itemReleaseManageInfo.conditions.applyCompany" | |
| 21 | + :placeholder="$t('itemReleaseManage.placeholder.selectApplyCompany')" /> | |
| 36 | 22 | </el-col> |
| 37 | 23 | <el-col :span="6"> |
| 38 | - <el-input | |
| 39 | - v-model="itemReleaseManageInfo.conditions.applyPerson" | |
| 40 | - :placeholder="$t('itemReleaseManage.placeholder.selectApplyPerson')" | |
| 41 | - /> | |
| 24 | + <el-input v-model="itemReleaseManageInfo.conditions.applyPerson" | |
| 25 | + :placeholder="$t('itemReleaseManage.placeholder.selectApplyPerson')" /> | |
| 42 | 26 | </el-col> |
| 43 | 27 | <el-col :span="4"> |
| 44 | 28 | <el-button type="primary" @click="_queryItemReleaseMethod"> |
| ... | ... | @@ -54,39 +38,20 @@ |
| 54 | 38 | |
| 55 | 39 | <el-row v-show="itemReleaseManageInfo.moreCondition" :gutter="20" style="margin-top: 20px"> |
| 56 | 40 | <el-col :span="6"> |
| 57 | - <el-input | |
| 58 | - v-model="itemReleaseManageInfo.conditions.idCard" | |
| 59 | - :placeholder="$t('itemReleaseManage.placeholder.selectIdCard')" | |
| 60 | - /> | |
| 41 | + <el-input v-model="itemReleaseManageInfo.conditions.idCard" | |
| 42 | + :placeholder="$t('itemReleaseManage.placeholder.selectIdCard')" /> | |
| 61 | 43 | </el-col> |
| 62 | 44 | <el-col :span="8"> |
| 63 | - <el-input | |
| 64 | - v-model="itemReleaseManageInfo.conditions.applyTel" | |
| 65 | - :placeholder="$t('itemReleaseManage.placeholder.selectPhone')" | |
| 66 | - /> | |
| 45 | + <el-input v-model="itemReleaseManageInfo.conditions.applyTel" | |
| 46 | + :placeholder="$t('itemReleaseManage.placeholder.selectPhone')" /> | |
| 67 | 47 | </el-col> |
| 68 | 48 | <el-col :span="6"> |
| 69 | - <el-select | |
| 70 | - v-model="itemReleaseManageInfo.conditions.state" | |
| 71 | - :placeholder="$t('itemReleaseManage.placeholder.selectStatus')" | |
| 72 | - style="width: 100%" | |
| 73 | - > | |
| 74 | - <el-option | |
| 75 | - :label="$t('itemReleaseManage.status.waiting')" | |
| 76 | - value="W" | |
| 77 | - /> | |
| 78 | - <el-option | |
| 79 | - :label="$t('itemReleaseManage.status.processing')" | |
| 80 | - value="D" | |
| 81 | - /> | |
| 82 | - <el-option | |
| 83 | - :label="$t('itemReleaseManage.status.completed')" | |
| 84 | - value="C" | |
| 85 | - /> | |
| 86 | - <el-option | |
| 87 | - :label="$t('itemReleaseManage.status.failed')" | |
| 88 | - value="F" | |
| 89 | - /> | |
| 49 | + <el-select v-model="itemReleaseManageInfo.conditions.state" | |
| 50 | + :placeholder="$t('itemReleaseManage.placeholder.selectStatus')" style="width: 100%"> | |
| 51 | + <el-option :label="$t('itemReleaseManage.status.waiting')" value="W" /> | |
| 52 | + <el-option :label="$t('itemReleaseManage.status.processing')" value="D" /> | |
| 53 | + <el-option :label="$t('itemReleaseManage.status.completed')" value="C" /> | |
| 54 | + <el-option :label="$t('itemReleaseManage.status.failed')" value="F" /> | |
| 90 | 55 | </el-select> |
| 91 | 56 | </el-col> |
| 92 | 57 | </el-row> |
| ... | ... | @@ -96,61 +61,21 @@ |
| 96 | 61 | <el-card class="list-card"> |
| 97 | 62 | <div slot="header" class="flex justify-between"> |
| 98 | 63 | <span>{{ $t('itemReleaseManage.list.title') }}</span> |
| 99 | - <el-button | |
| 100 | - type="primary" | |
| 101 | - size="small" | |
| 102 | - @click="_openAddItemReleaseModal" | |
| 103 | - > | |
| 64 | + <el-button type="primary" size="small" @click="_openAddItemReleaseModal"> | |
| 104 | 65 | <i class="el-icon-plus"></i> |
| 105 | 66 | {{ $t('itemReleaseManage.button.applyRelease') }} |
| 106 | 67 | </el-button> |
| 107 | 68 | </div> |
| 108 | 69 | |
| 109 | - <el-table | |
| 110 | - :data="itemReleaseManageInfo.itemReleases" | |
| 111 | - border | |
| 112 | - style="width: 100%" | |
| 113 | - v-loading="loading" | |
| 114 | - > | |
| 115 | - <el-table-column | |
| 116 | - prop="irId" | |
| 117 | - :label="$t('itemReleaseManage.table.orderNo')" | |
| 118 | - align="center" | |
| 119 | - /> | |
| 120 | - <el-table-column | |
| 121 | - prop="typeName" | |
| 122 | - :label="$t('itemReleaseManage.table.releaseType')" | |
| 123 | - align="center" | |
| 124 | - /> | |
| 125 | - <el-table-column | |
| 126 | - prop="applyCompany" | |
| 127 | - :label="$t('itemReleaseManage.table.applyCompany')" | |
| 128 | - align="center" | |
| 129 | - /> | |
| 130 | - <el-table-column | |
| 131 | - prop="applyPerson" | |
| 132 | - :label="$t('itemReleaseManage.table.applyPerson')" | |
| 133 | - align="center" | |
| 134 | - /> | |
| 135 | - <el-table-column | |
| 136 | - prop="idCard" | |
| 137 | - :label="$t('itemReleaseManage.table.idCard')" | |
| 138 | - align="center" | |
| 139 | - /> | |
| 140 | - <el-table-column | |
| 141 | - prop="applyTel" | |
| 142 | - :label="$t('itemReleaseManage.table.phone')" | |
| 143 | - align="center" | |
| 144 | - /> | |
| 145 | - <el-table-column | |
| 146 | - prop="passTime" | |
| 147 | - :label="$t('itemReleaseManage.table.passTime')" | |
| 148 | - align="center" | |
| 149 | - /> | |
| 150 | - <el-table-column | |
| 151 | - :label="$t('itemReleaseManage.table.items')" | |
| 152 | - align="center" | |
| 153 | - > | |
| 70 | + <el-table :data="itemReleaseManageInfo.itemReleases" border style="width: 100%" v-loading="loading"> | |
| 71 | + <el-table-column prop="irId" :label="$t('itemReleaseManage.table.orderNo')" align="center" /> | |
| 72 | + <el-table-column prop="typeName" :label="$t('itemReleaseManage.table.releaseType')" align="center" /> | |
| 73 | + <el-table-column prop="applyCompany" :label="$t('itemReleaseManage.table.applyCompany')" align="center" /> | |
| 74 | + <el-table-column prop="applyPerson" :label="$t('itemReleaseManage.table.applyPerson')" align="center" /> | |
| 75 | + <el-table-column prop="idCard" :label="$t('itemReleaseManage.table.idCard')" align="center" /> | |
| 76 | + <el-table-column prop="applyTel" :label="$t('itemReleaseManage.table.phone')" align="center" /> | |
| 77 | + <el-table-column prop="passTime" :label="$t('itemReleaseManage.table.passTime')" align="center" /> | |
| 78 | + <el-table-column :label="$t('itemReleaseManage.table.items')" align="center"> | |
| 154 | 79 | <template slot-scope="scope"> |
| 155 | 80 | {{ scope.row.amount }}( |
| 156 | 81 | <el-link type="primary" @click="viewResName(scope.row)"> |
| ... | ... | @@ -158,60 +83,30 @@ |
| 158 | 83 | </el-link>) |
| 159 | 84 | </template> |
| 160 | 85 | </el-table-column> |
| 161 | - <el-table-column | |
| 162 | - prop="stateName" | |
| 163 | - :label="$t('itemReleaseManage.table.status')" | |
| 164 | - align="center" | |
| 165 | - /> | |
| 166 | - <el-table-column | |
| 167 | - prop="carNum" | |
| 168 | - :label="$t('itemReleaseManage.table.carNumber')" | |
| 169 | - align="center" | |
| 170 | - > | |
| 86 | + <el-table-column prop="stateName" :label="$t('itemReleaseManage.table.status')" align="center" /> | |
| 87 | + <el-table-column prop="carNum" :label="$t('itemReleaseManage.table.carNumber')" align="center"> | |
| 171 | 88 | <template slot-scope="scope"> |
| 172 | 89 | {{ scope.row.carNum || $t('common.none') }} |
| 173 | 90 | </template> |
| 174 | 91 | </el-table-column> |
| 175 | - <el-table-column | |
| 176 | - :label="$t('common.operation')" | |
| 177 | - align="center" | |
| 178 | - width="240" | |
| 179 | - > | |
| 92 | + <el-table-column :label="$t('common.operation')" align="center" width="240"> | |
| 180 | 93 | <template slot-scope="scope"> |
| 181 | - <el-button | |
| 182 | - size="mini" | |
| 183 | - @click="_openDetail(scope.row)" | |
| 184 | - > | |
| 94 | + <el-button size="mini" @click="_openDetail(scope.row)"> | |
| 185 | 95 | {{ $t('common.detail') }} |
| 186 | 96 | </el-button> |
| 187 | - <el-button | |
| 188 | - size="mini" | |
| 189 | - type="primary" | |
| 190 | - @click="_openEditItemReleaseModel(scope.row)" | |
| 191 | - > | |
| 97 | + <el-button size="mini" type="primary" @click="_openEditItemReleaseModel(scope.row)"> | |
| 192 | 98 | {{ $t('common.edit') }} |
| 193 | 99 | </el-button> |
| 194 | - <el-button | |
| 195 | - size="mini" | |
| 196 | - type="danger" | |
| 197 | - @click="_openDeleteItemReleaseModel(scope.row)" | |
| 198 | - > | |
| 100 | + <el-button size="mini" type="danger" @click="_openDeleteItemReleaseModel(scope.row)"> | |
| 199 | 101 | {{ $t('common.delete') }} |
| 200 | 102 | </el-button> |
| 201 | 103 | </template> |
| 202 | 104 | </el-table-column> |
| 203 | 105 | </el-table> |
| 204 | 106 | |
| 205 | - <el-pagination | |
| 206 | - :current-page.sync="page.current" | |
| 207 | - :page-sizes="[10, 20, 30, 50]" | |
| 208 | - :page-size="page.size" | |
| 209 | - :total="page.total" | |
| 210 | - layout="total, sizes, prev, pager, next, jumper" | |
| 211 | - @size-change="handleSizeChange" | |
| 212 | - @current-change="handleCurrentChange" | |
| 213 | - style="margin-top: 20px" | |
| 214 | - /> | |
| 107 | + <el-pagination :current-page.sync="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size" | |
| 108 | + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" | |
| 109 | + @current-change="handleCurrentChange" style="margin-top: 20px" /> | |
| 215 | 110 | </el-card> |
| 216 | 111 | |
| 217 | 112 | <!-- 组件 --> |
| ... | ... | @@ -224,14 +119,12 @@ |
| 224 | 119 | <script> |
| 225 | 120 | import { getCommunityId } from '@/api/community/communityApi' |
| 226 | 121 | import { listItemRelease, listItemReleaseType } from '@/api/work/itemReleaseManageApi' |
| 227 | -import EditItemRelease from '@/components/work/editItemRelease' | |
| 228 | 122 | import DeleteItemRelease from '@/components/work/deleteItemRelease' |
| 229 | 123 | import ViewItemReleaseRes from '@/components/work/viewItemReleaseRes' |
| 230 | 124 | |
| 231 | 125 | export default { |
| 232 | 126 | name: 'ItemReleaseManageList', |
| 233 | 127 | components: { |
| 234 | - EditItemRelease, | |
| 235 | 128 | DeleteItemRelease, |
| 236 | 129 | ViewItemReleaseRes |
| 237 | 130 | }, |
| ... | ... | @@ -304,7 +197,7 @@ export default { |
| 304 | 197 | this.$router.push('/views/work/addItemReleaseView') |
| 305 | 198 | }, |
| 306 | 199 | _openEditItemReleaseModel(item) { |
| 307 | - this.$refs.editItemRelease.open(item) | |
| 200 | + this.$router.push(`/views/work/editItemReleaseView?irId=${item.irId}&flowId=${item.flowId}`) | |
| 308 | 201 | }, |
| 309 | 202 | _openDeleteItemReleaseModel(item) { |
| 310 | 203 | this.$refs.deleteItemRelease.open(item) | ... | ... |