From 70259971b080e1a82fac931216672e1077a73b6e Mon Sep 17 00:00:00 2001 From: gaoshp <291585735@qq.com> Date: 星期二, 08 七月 2025 20:39:56 +0800 Subject: [PATCH] update --- src/views/flow/todolist.vue | 485 ++++++++++++++++++++++++++++------------------------- 1 files changed, 258 insertions(+), 227 deletions(-) diff --git a/src/views/flow/todolist.vue b/src/views/flow/todolist.vue index 1e2121d..250ad09 100644 --- a/src/views/flow/todolist.vue +++ b/src/views/flow/todolist.vue @@ -1,73 +1,134 @@ <template> <basic-container> - <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" - :permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose" @row-del="rowDel" - @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" - @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange" - @refresh-change="refreshChange" @on-load="onLoad"> + <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"> <template #menu-left> - <el-button type="primary" plain - @click="reassign">閲嶆柊鎸囨淳 + <el-button type="primary" plain @click="reassign">閲嶆柊鎸囨淳 </el-button> </template> - <!-- <template #source="{ row }"> - <div style="text-align: center"> - <i :class="row.source" /> - </div> - </template> --> + <template #menu="scope"> + <el-button type="primary" text size="default" v-if="permission.flow_model_update" + @click.stop="handleAction(scope.row, scope.index)">瀹℃壒 + </el-button> + </template> </avue-crud> + <!-- <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 { getLazyList, remove, update, add, getMenu } from '@/api/system/menu'; +import { getList, approve,getAssignee } from '@/api/flow/todolist'; import { mapGetters } from 'vuex'; -import iconList from '@/config/iconList'; -import func from '@/utils/func'; -import { getMenuTree } from '@/api/system/menu'; - +import dayjs from 'dayjs'; +import TodolistLeft from './components/TodolistLeft.vue'; +import TodolistRightTop from './components/TodolistRightTop.vue'; export default { + components: { + TodolistLeft, + TodolistRightTop + }, data() { return { - form: {}, - query: {}, - loading: true, - selectionList: [], - parentId: 0, + applist: [], + assigneeData: [], + row: {}, + approveBox: false, + formApprove: { + comment: '', + approve: '', // 榛樿鍚屾剰 + }, + optionApprove: { + labelWidth: 100, + column: [ + + { + label: '瀹℃壒缁撴灉', + prop: 'approve', + type: 'radio', + span: 24, + dicData: [ + { label: '閫氳繃', value: 'Y' }, + { 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: '澶囨敞', + span: 24, + prop: 'comment', + type: 'textarea', + rules: [{ required: true, message: '璇疯緭鍏ュ鎵规剰瑙�', trigger: 'blur' }], + }, + ], + }, page: { pageSize: 10, currentPage: 1, total: 0, }, + form: {}, + query: {}, + loading: true, option: { addBtn: false, - lazy: true, + editBtn: false, + delBtn: false, + columnBtn: false, tip: false, - simplePage: true, + // simplePage: true, searchShow: true, searchMenuSpan: 6, dialogWidth: '60%', - tree: true, + // tree: true, border: true, index: true, - selection: true, - viewBtn: true, - menuWidth: 320, + // selection: true, + // viewBtn: true, + menuWidth: 100, dialogClickModal: false, column: [ { - label: '鍒涘缓鏃堕棿', - prop: 'time', - width: 300, - type: 'datetime', - search: true, - searchRange: true, - searchSpan: 8, - hide: true, - }, - { label: '鍏抽敭瀛�', - prop: 'keyWord', + prop: 'keyword', width: 300, search: true, searchType: 'input', @@ -83,231 +144,178 @@ }, ], }, - { - label: '缂栧彿', - prop: 'name', - width: 300, + label: '浠诲姟鍚嶇О', + prop: 'processDefinitionName', + width: 100, }, { label: '娴佺▼绫诲瀷', - prop: 'path', - rules: [ - { - required: true, - message: '璇疯緭鍏ヨ矾鐢卞湴鍧�', - trigger: 'blur', - }, - ], + width: 100, + prop: 'categoryName', }, - { - label: '瀹炰緥缂栧彿', - type: 'tree', - }, - { - label: '娴佺▼瀹炰緥鍚�', - type: 'tree', - }, + { label: '鏈哄簥', - type: 'tree', + width: 100, + prop: '', + formatter: (val, value, label) => { + return `${val?.variables?.machineCode}`; + }, }, { label: '鍒涘缓浜�', - type: 'tree', + width: 100, + prop: 'startUserName', }, { label: '鍒涘缓鏃堕棿', - type: 'tree', + 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: '鍒拌揪鏃堕棿', - type: 'tree', + label: '涓婁竴姝ョ敤鎴�', + width: 200, + prop: '', + formatter: (val, value, label) => { + return `${val?.variables?.approveUserNickName || ''}`; + }, }, { - label: '鍒拌揪鎻忚堪', - type: 'tree', + label: '褰撳墠鑺傜偣', + width: 200, + prop: 'taskName', }, { label: '鏂囦欢', - type: 'tree', + width: 200, + prop: '', }, { label: '鍒拌揪鏃堕棿', - type: 'tree', + width: 200, + prop: 'createTime', }, - + { + label: '鍒拌揪鎻忚堪', + width: 200, + prop: 'comment', + }, + ], }, data: [], }; }, watch: { - 'form.category'() { - const category = func.toInt(this.form.category); - this.$refs.crud.option.column.filter(item => { - if (item.prop === 'path') { - item.rules[0].required = category === 1; - } - if (item.prop === 'isOpen') { - item.disabled = category === 2; - } - }); + // 'form.category'() { + // const category = func.toInt(this.form.category); + // this.$refs.crud.option.column.filter(item => { + // if (item.prop === 'path') { + // item.rules[0].required = category === 1; + // } + // if (item.prop === 'isOpen') { + // item.disabled = category === 2; + // } + // }); + // }, + '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']), - permissionList() { - return { - addBtn: this.validData(this.permission.menu_add, false), - viewBtn: this.validData(this.permission.menu_view, false), - delBtn: this.validData(this.permission.menu_delete, false), - editBtn: this.validData(this.permission.menu_edit, false), - }; - }, - ids() { - let ids = []; - this.selectionList.forEach(ele => { - ids.push(ele.id); - }); - return ids.join(','); - }, + // permissionList() { + // return { + // addBtn: this.validData(this.permission.menu_add, false), + // viewBtn: this.validData(this.permission.menu_view, false), + // delBtn: this.validData(this.permission.menu_delete, false), + // editBtn: this.validData(this.permission.menu_edit, false), + // }; + // }, + }, + mounted() { + getAssignee().then(res=> { + this.assigneeData = res.data.data; + this.optionApprove.column[1].dicData = this.assigneeData; + }) }, methods: { - reassign () {// 閲嶆柊鎸囨淳 + 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); }, - initData() { - getMenuTree().then(res => { - const column = this.findObject(this.option.column, 'parentId'); - column.dicData = res.data.data; + 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; + this.onLoad(this.page, this.query); + done(); + }).catch(err => { + console.error(err); }); }, - handleAdd(row) { - this.parentId = row.id; - const column = this.findObject(this.option.column, 'parentId'); - column.value = row.id; - column.addDisabled = true; - this.$refs.crud.rowAdd(); + reassign() {// 閲嶆柊鎸囨淳 + }, - rowSave(row, done, loading) { - add(row).then( - res => { - // 鑾峰彇鏂板鏁版嵁鐨勭浉鍏冲瓧娈� - const data = res.data.data; - row.id = data.id; - this.$message({ - type: 'success', - message: '鎿嶄綔鎴愬姛!', - }); - // 鏁版嵁鍥炶皟杩涜鍒锋柊 - done(row); - }, - error => { - window.console.log(error); - loading(); - } - ); - }, - rowUpdate(row, index, done, loading) { - update(row).then( - () => { - this.$message({ - type: 'success', - message: '鎿嶄綔鎴愬姛!', - }); - // 鏁版嵁鍥炶皟杩涜鍒锋柊 - done(row); - }, - error => { - window.console.log(error); - loading(); - } - ); - }, - rowDel(row, index, done) { - this.$confirm('纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - }) - .then(() => { - return remove(row.id); - }) - .then(() => { - this.$message({ - type: 'success', - message: '鎿嶄綔鎴愬姛!', - }); - // 鏁版嵁鍥炶皟杩涜鍒锋柊 - done(row); - }); - }, - handleDelete() { - if (this.selectionList.length === 0) { - this.$message.warning('璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�'); - return; + searchChange(params, done) { + let data = {} + this.query = params; + this.page.currentPage = 1; + console.log('searchChange', params); + params.createTimeBegin = params?.processCreateTime?.[0] || ''; + params.createTimeEnd = params?.processCreateTime?.[1] || ''; + console.log(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.$confirm('纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - }) - .then(() => { - return remove(this.ids); - }) - .then(() => { - // 鍒锋柊琛ㄦ牸鏁版嵁骞堕噸杞� - this.data = []; - this.parentId = 0; - this.$refs.crud.refreshTable(); - this.$refs.crud.toggleSelection(); - // 琛ㄦ牸鏁版嵁閲嶈浇 - this.onLoad(this.page); - this.$message({ - type: 'success', - message: '鎿嶄綔鎴愬姛!', - }); - }); + this.query = data + this.onLoad(this.page, data); + done(); }, searchReset() { this.query = {}; - this.parentId = 0; this.onLoad(this.page); - }, - searchChange(params, done) { - this.query = params; - this.parentId = ''; - this.page.currentPage = 1; - this.onLoad(this.page, params); - done(); - }, - selectionChange(list) { - this.selectionList = list; - }, - selectionClear() { - this.selectionList = []; - this.$refs.crud.toggleSelection(); - }, - beforeOpen(done, type) { - if (['add', 'edit'].includes(type)) { - this.initData(); - } - if (['edit', 'view'].includes(type)) { - getMenu(this.form.id).then(res => { - this.form = Object.assign(res.data.data, { - hasChildren: this.form.hasChildren, - }); - }); - } - done(); - }, - beforeClose(done) { - this.parentId = ''; - const column = this.findObject(this.option.column, 'parentId'); - column.value = ''; - column.addDisabled = false; - done(); }, currentChange(currentPage) { this.page.currentPage = currentPage; @@ -318,22 +326,45 @@ refreshChange() { this.onLoad(this.page, this.query); }, + onLoad(page, params = {}) { + const query = { + ...this.query, + // category: params.category ? flowCategory(params.category) : null, + mode: this.mode, + }; + try { + delete query.processCreateTime; // 鍒犻櫎涓嶅繀瑕佺殑鏌ヨ鏉′欢 + } catch (error) { + console.error('鏃ユ湡鏍煎紡鍖栭敊璇�', error); + } + this.loading = true; - getLazyList(this.parentId, Object.assign(params, this.query)).then(res => { - this.data = res.data.data; + 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; - this.selectionClear(); }); }, - treeLoad(tree, treeNode, resolve) { - const parentId = tree.id; - // getLazyList(parentId).then(res => { - // resolve(res.data.data); - // }); + 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> -- Gitblit v1.9.3