| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" |
| | | @search-change="searchChange" @search-reset="searchReset" |
| | | @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
| | | @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange" |
| | | @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
| | | <template #menu-left> |
| | | <el-button type="primary" plain @click="reassign">重新指派 |
| | | </el-button> |
| | |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-dialog title="审批" append-to-body v-model="approveBox" width="20%"> |
| | | <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> |
| | | <!-- <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="deployBox = false">取 消</el-button> |
| | | <el-button type="primary" @click="handleDoDeploy" :loading="deployLoading">确 定</el-button> |
| | | </span> |
| | | </template> --> |
| | | </el-dialog> |
| | | <!-- <el-dialog title="审批" append-to-body v-model="approveBox" width="100%"> |
| | | <div class="approve-box"> |
| | | <div class="left"> |
| | | <TodolistLeft :row="row"/> |
| | | </div> |
| | | <div class="right"> |
| | | <TodolistRightTop :row="row" /> |
| | | <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> |
| | | </div> |
| | | </div> |
| | | </el-dialog> --> |
| | | <el-drawer title="审批" append-to-body v-model="approveBox" size="100%" v-if="approveBox"> |
| | | <div class="approve-box"> |
| | | <div class="left"> |
| | | <TodolistLeft :row="row" @selection-change="selectionChange"/> |
| | | </div> |
| | | <div class="right"> |
| | | <TodolistRightTop :row="row" /> |
| | | <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> |
| | | </div> |
| | | </div> |
| | | </el-drawer> |
| | | </basic-container> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getList, approve } from '@/api/flow/todolist'; |
| | | import { getList, approve,getAssignee } from '@/api/flow/todolist'; |
| | | import { mapGetters } from 'vuex'; |
| | | |
| | | import dayjs from 'dayjs'; |
| | | import TodolistLeft from './components/TodolistLeft.vue'; |
| | | import TodolistRightTop from './components/TodolistRightTop.vue'; |
| | | export default { |
| | | components: { |
| | | TodolistLeft, |
| | | TodolistRightTop |
| | | }, |
| | | data() { |
| | | return { |
| | | applist: [], |
| | | assigneeData: [], |
| | | row: {}, |
| | | approveBox: false, |
| | | formApprove: { |
| | | comment: '', |
| | | approve: 'Y', // 默认同意 |
| | | approve: '', // 默认同意 |
| | | }, |
| | | optionApprove: { |
| | | labelWidth: 100, |
| | | column: [ |
| | | |
| | | |
| | | { |
| | | label: '审批结果', |
| | | prop: 'approve', |
| | |
| | | { label: '驳回', value: 'N' }, |
| | | ], |
| | | rules: [{ required: true, message: '请选择审批结果', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '发送给', |
| | | prop: 'assignee', |
| | | type: 'select', |
| | | // dicUrl: `/blade-mdm/flow/flow-user-list?deptId=0`, |
| | | // dicFlag: true, |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | span: 24, |
| | | disabled: false, |
| | | dicData: [ |
| | | |
| | | ], |
| | | // rules: [{ required: true, message: '请选择下一审批用户', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '备注', |
| | |
| | | form: {}, |
| | | query: {}, |
| | | loading: true, |
| | | selectionList: [], |
| | | parentId: 0, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | option: { |
| | | addBtn: false, |
| | | editBtn: false, |
| | |
| | | index: true, |
| | | // selection: true, |
| | | // viewBtn: true, |
| | | menuWidth: 320, |
| | | menuWidth: 100, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | label: '创建时间', |
| | | prop: 'createTime', |
| | | type: 'datetime', |
| | | format: 'YYYY-MM-DD', |
| | | valueFormat: 'YYYY-MM-DD', |
| | | search: true, |
| | | searchRange: true, |
| | | searchSpan: 8, |
| | | hide: true, |
| | | }, |
| | | { |
| | | label: '关键字', |
| | | prop: 'keyword', |
| | |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | { |
| | | label: '编号', |
| | | prop: 'taskId', |
| | | width: 100, |
| | | }, |
| | | { |
| | | label: '任务名称', |
| | | prop: 'taskName', |
| | | prop: 'processDefinitionName', |
| | | width: 100, |
| | | }, |
| | | { |
| | | label: '流程类型', |
| | | width: 100, |
| | | prop: 'processDefinitionName', |
| | | prop: 'categoryName', |
| | | }, |
| | | { |
| | | label: '实例编号', |
| | | width: 100, |
| | | type: 'processInstanceId', |
| | | }, |
| | | |
| | | { |
| | | label: '机床', |
| | | width: 100, |
| | | type: 'tree', |
| | | prop: '', |
| | | formatter: (val, value, label) => { |
| | | return `${val?.variables?.machineCode}`; |
| | | }, |
| | | }, |
| | | { |
| | | label: '创建人', |
| | | width: 100, |
| | | type: 'tree', |
| | | prop: 'startUserName', |
| | | }, |
| | | { |
| | | label: '创建时间', |
| | | width: 100, |
| | | prop: 'createTime', |
| | | width: 200, |
| | | prop: 'processCreateTime', |
| | | type: 'datetime', |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | search: true, |
| | | searchRange: true, |
| | | searchSpan: 8, |
| | | // hide: true, |
| | | }, |
| | | { |
| | | label: '到达时间', |
| | | width: 100, |
| | | label: '上一步用户', |
| | | width: 200, |
| | | prop: '', |
| | | formatter: (val, value, label) => { |
| | | return `${val?.variables?.approveUserNickName || ''}`; |
| | | }, |
| | | }, |
| | | { |
| | | label: '到达描述', |
| | | width: 100, |
| | | prop: 'comment', |
| | | label: '当前节点', |
| | | width: 200, |
| | | prop: 'taskName', |
| | | }, |
| | | { |
| | | label: '文件', |
| | | width: 100, |
| | | width: 200, |
| | | prop: '', |
| | | }, |
| | | { |
| | | label: '到达时间', |
| | | width: 100, |
| | | prop: '', |
| | | width: 200, |
| | | prop: 'createTime', |
| | | }, |
| | | { |
| | | label: '到达描述', |
| | | width: 200, |
| | | prop: 'comment', |
| | | }, |
| | | |
| | | ], |
| | |
| | | // } |
| | | // }); |
| | | // }, |
| | | 'formApprove.approve'(val) { |
| | | if (val === 'Y' && this.row.taskDefinitionKey === 'approveTask') { |
| | | this.optionApprove.column[1].disabled = true; |
| | | this.formApprove.assignee = ''; // 如果是通过,则默认指派给自己 |
| | | } else { |
| | | this.optionApprove.column[1].disabled = false; |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['userInfo', 'permission']), |
| | |
| | | // }; |
| | | // }, |
| | | }, |
| | | mounted() { |
| | | getAssignee().then(res=> { |
| | | this.assigneeData = res.data.data; |
| | | this.optionApprove.column[1].dicData = this.assigneeData; |
| | | }) |
| | | }, |
| | | methods: { |
| | | handleAction(row, index) { |
| | | this.formApprove = { |
| | | comment: '', |
| | | approve: '', // 默认同 |
| | | } |
| | | this.approveBox = true; |
| | | this.row = row |
| | | if(row.taskDefinitionKey=="check") { |
| | | this.formApprove.assignee = row.variables.senior; |
| | | } else if(row.taskDefinitionKey=="programmingTask") { |
| | | this.formApprove.assignee = row.variables.checker; |
| | | } else if(row.taskDefinitionKey=="teamLeaderTask") { |
| | | this.formApprove.assignee = row.variables.programmer |
| | | } else if(row.taskDefinitionKey=="confirmIsUseableTask") { |
| | | this.formApprove.assignee = row.variables.checker |
| | | } else if(row.taskDefinitionKey=="approveTask") { |
| | | |
| | | } |
| | | console.log('handleAction', row, index); |
| | | }, |
| | | handleSubmit (form,done) { |
| | | handleSubmit(form, done) { |
| | | approve({ |
| | | ...this.formApprove, |
| | | taskId: this.row.taskId, |
| | | processInstanceId: this.row.processInstanceId, |
| | | programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '', |
| | | }).then(res => { |
| | | this.$message.success('审批成功'); |
| | | this.approveBox = false; |
| | |
| | | |
| | | }, |
| | | searchChange(params, done) { |
| | | let data = {} |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | console.log('searchChange', params); |
| | | params.createTimeBegin = params.createTime[0] || ''; |
| | | params.createTimeEnd = params.createTime[1] || ''; |
| | | params.createTimeBegin = params?.processCreateTime?.[0] || ''; |
| | | params.createTimeEnd = params?.processCreateTime?.[1] || ''; |
| | | console.log(params); |
| | | this.onLoad(this.page, params); |
| | | // data = { |
| | | // createTimeBegin: dayjs(params.createTimeBegin).isValid() ? dayjs(params.createTimeBegin).format('YYYY-MM-DD') : '', |
| | | // createTimeEnd: dayjs(params.createTimeEnd).isValid() ? dayjs(params.createTimeEnd).format('YYYY-MM-DD') : '', |
| | | // keyword: params.keyword || '' |
| | | // } |
| | | data = { |
| | | createTimeBegin: params.createTimeBegin, |
| | | createTimeEnd: params.createTimeEnd, |
| | | keyword: params.keyword || '' |
| | | } |
| | | this.query = data |
| | | this.onLoad(this.page, data); |
| | | done(); |
| | | }, |
| | | searchReset() { |
| | |
| | | // category: params.category ? flowCategory(params.category) : null, |
| | | mode: this.mode, |
| | | }; |
| | | try { |
| | | delete query.processCreateTime; // 删除不必要的查询条件 |
| | | } catch (error) { |
| | | console.error('日期格式化错误', error); |
| | | } |
| | | |
| | | this.loading = true; |
| | | getList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => { |
| | | getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => { |
| | | const data = res.data.data; |
| | | this.page.total = data.total; |
| | | this.data = data.records; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | selectionChange (applist) { |
| | | this.applist = applist |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style></style> |
| | | <style scoped="scoped" lang="scss"> |
| | | .approve-box { |
| | | display: flex; |
| | | & > div { |
| | | border: 1px solid #ccc; |
| | | } |
| | | .left { |
| | | width: 400px; |
| | | } |
| | | .right { |
| | | flex:1; |
| | | } |
| | | } |
| | | </style> |