1
李喆(开发组)
2025-08-11 32d659432b0e6627758faf39380fc569e56b9799
src/views/flow/todolist.vue
@@ -5,16 +5,18 @@
            @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
            @selection-change="selectionTransferTask">
            <template #menu-left>
                <el-button type="primary" plain @click="reassign">重新指派
                <el-button type="primary" plain @click="reassign(0)">重新指派</el-button>
                <el-button type="primary" v-if="permission.manual_dispatch" plain @click="reassign(1)">手动派工
                </el-button>
                <el-button type="primary" v-if="permission.auto_dispatch" plain @click="reassign(2)">自动派工
                </el-button>
            </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 type="primary" text size="default" @click.stop="handleAction(scope.row, scope.index)">审批
                </el-button>
            </template>
        </avue-crud>
        <el-dialog title="指派" append-to-body v-model="reassignBox" width="30%">
        <el-dialog title=" " append-to-body v-model="reassignBox" width="30%">
            <avue-form ref="reassginform" :option="reassignOption" v-model="reassignForm" @submit="toPerson"></avue-form>
        </el-dialog>
        <el-drawer title="审批" append-to-body v-model="approveBox" size="100%" v-if="approveBox">
@@ -32,7 +34,7 @@
</template>
<script>
import { getList, approve, getAssignee,reassgin } from '@/api/flow/todolist';
import { getList, approve, getAssignee,reassgin,manualDispatch,autoDispatch,getPrevius } from '@/api/flow/todolist';
import { mapGetters } from 'vuex';
import dayjs from 'dayjs';
import TodolistLeft from './components/TodolistLeft.vue';
@@ -44,6 +46,7 @@
    },
    data() {
        return {
            applist: [],
            assigneeData: [],
            row: {},
@@ -51,6 +54,7 @@
            formApprove: {
                comment: '',
                approve: '', // 默认同意
                assignee: ''
            },
            optionApprove: {
                labelWidth: 100,
@@ -77,6 +81,7 @@
                            label: 'name',
                            value: 'id',
                        },
                        filterable: true,
                        span: 24,
                        disabled: false,
                        dicData: [
@@ -85,11 +90,33 @@
                        // rules: [{ required: true, message: '请选择下一审批用户', trigger: 'blur' }],
                    },
                    {
                        label: '工序版次',
                        prop: 'processEdition',
                        type: 'input',
                        span: 24,
                        // disabled: true,
                        display: false,// 隐藏显示
                        // rules: [{ required: true, message: '请选择下一审批用户', trigger: 'blur' }],
                    },
                    {
                        label: '备注',
                        span: 24,
                        prop: 'comment',
                        type: 'textarea',
                        rules: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
                        // rules: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
                        rules: [
                            {
                            validator: (rule, value, callback) => {
                                console.log('-------',this.formApprove)
                                if (value === '' && this.formApprove.approve !== 'Y') {
                                    callback(new Error('请输入备注'));
                                } else {
                                    callback();
                                }
                            },
                            trigger: 'blur'
                            }
                        ]
                    },
                ],
            },
@@ -102,6 +129,7 @@
            query: {},
            loading: true,
            option: {
                rowKey: "taskId",
                addBtn: false,
                editBtn: false,
                delBtn: false,
@@ -137,16 +165,29 @@
                            },
                        ],
                    },
               {
                        label: '标题',
                        prop: '',
                        width: 100,
                  render: ({ row }) => {
                            return h('p',
                                {
                                    attrs: {},
                                    class: {},
                                    style: {},
                                }, row?.variables?.title)
                        }
                    },
                    {
                        label: '任务名称',
                        label: '流程名称',
                        prop: 'processDefinitionName',
                        width: 100,
                    },
                    },/*
                    {
                        label: '流程类型',
                        width: 100,
                        prop: 'categoryName',
                    },
                    },*/
                    {
                        label: '机床',
@@ -207,6 +248,7 @@
            data: [],
            transferTaskSelection: [],
            reassignBox: false,
            reassignType: 0, // 0:重新指派,1:自动派工 2: 自动派工
            reassignOption: {
                submitBtn: true,
                emptyBtn: false,
@@ -233,7 +275,7 @@
                        span: 24,
                        prop: 'comment',
                        type: 'textarea',
                        rules: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
                        rules: [{ required: false, message: '请输入审批意见', trigger: 'blur' }],
                    },
                ],
            },
@@ -253,24 +295,23 @@
        //     });
        // },
        '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;
            }
            this.setAssignee(this.row, val);
            // if(val === 'Y' && ['confirmIsUseableTask'].includes(this.row.taskDefinitionKey) && this.row.variables.isProcessEditionSame=='N') {
            //     // this.optionApprove.column[2].display = true; // 显示工序版次
            // } else {
            //     this.optionApprove.column[2].display = 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),
        //     };
        // },
        permissionList() {
            return {
                manual_dispatch: this.validData(this.permission.manual_dispatch, false),
                auto_dispatch: this.validData(this.permission.auto_dispatch, false),
            };
        },
    },
    mounted() {
        getAssignee().then(res => {
@@ -278,77 +319,207 @@
            this.optionApprove.column[1].dicData = this.assigneeData;
            this.reassignOption.column[0].dicData = this.assigneeData;
        })
        this.setApproveBtn()
    },
    methods: {
        // 设置审批结果的状态
        setApproveBtn () {
            // 1.审批界面radio文本修改,普通节点的2个radio文本 通过(approve=Y),不通过(现在的驳回)(approve=N)
            this.optionApprove.column[0].dicData = [
                { label: '通过', value: 'Y' },
                { label: '不通过', value: 'N' },
            ];
            switch (this.row.taskDefinitionKey) {
                case 'teamLeaderTask': // 任务派工
                case 'cureProgramTask': // 固化编制
                    this.optionApprove.column[0].dicData = [
                        { label: '通过', value: 'Y' },
                        { label: '结束', value: 'N' },
                    ];
                    break;
                case 'confirmIsUseableTask': // 检查程序是否可用
                    this.optionApprove.column[0].dicData = [
                        { label: '通过', value: 'Y' },
                        { label: '不通过', value: 'N' },
                        { label: '驳回', value: 'R' },
                    ];
                    break;
                case 'seniorApproveTask': // 高师审核
                case 'approveTask': // 高师审核
                default:
                    this.optionApprove.column[0].dicData = [
                        { label: '通过', value: 'Y' },
                        { label: '不通过', value: 'N' },
                    ];
                    break;
            }
        },
        setAssignee (row, approve) {
            if (approve === 'Y') {
                if (["check", 'cureCheckTask '].includes(row.taskDefinitionKey)) {// 校对
                    this.formApprove.assignee = row.variables.senior;
                } else if (["programmingTask",'cureProgramTask'].includes(row.taskDefinitionKey)) {// 编制,校对
                    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 (["approveTask", 'seniorApproveTask','replaceApprove'].includes(row.taskDefinitionKey)) {// 高师审核
                    this.optionApprove.column[1].disabled = true;
                    this.formApprove.assignee = ''; // 如果是通过,则默认指派给自己
                }
            } else if(approve === 'N'){
                this.formApprove.assignee = ''
                if (["approveTask", 'seniorApproveTask','replaceApprove'].includes(row.taskDefinitionKey)) {// 高师审核
                    this.optionApprove.column[1].disabled = true;
                    getPrevius({processInstanceId: row.processInstanceId}).then(res => {
                        console.log(res)
                        if(res.data.code === 200) {
                            this.formApprove.assignee = res.data.data // 如果是通过,则默认指派给自己
                        }
                    })
                }
            }
        },
        selectionTransferTask(list) {
            this.transferTaskSelection = list;
        },
        reassign() {// 重新指派
        reassign(val) {// 重新指派
            this.reassignType = val;
            if (this.transferTaskSelection.length === 0) {
                this.$message.warning('请选择需要重新指派的任务');
                this.$message.warning('请选择需要操作的任务');
                return;
            }
            if (this.transferTaskSelection.length > 1) {
            if (this.transferTaskSelection.length > 1 && this.reassignType === 0) {
                this.$message.warning('请选择一条');
                return;
            }
            this.reassignBox = true;
            if(val === 2) {
                this.$confirm('请确认是否进行批量自动派工?', '', {
                    confirmButtonText: this.$t('submitText'),
                    cancelButtonText: this.$t('cancelText'),
                    type: 'warning',
                }).then(() => {
                    autoDispatch({
                        taskIds: this.transferTaskSelection.map(v => v.taskId),
                        processInstanceIds: this.transferTaskSelection.map(v => v.processInstanceId),
                    }).then(res => {
                        if(res.data.code !== 200) {
                            this.$message.error(res.data.msg);
                            return;
                        }
                        this.$message.success('操作成功');
                        this.onLoad(this.page, this.query);
                    }).catch(err => {
                        this.$message.success('操作失败');
                    })
                });
            } else {
                this.reassignBox = true;
            }
        },
        toPerson(form, done) {
            this.$confirm('请确认是否指派', '', {
                confirmButtonText: this.$t('submitText'),
                cancelButtonText: this.$t('cancelText'),
                type: 'warning',
            }).then(() => {
                console.log('toPerson', form);
                reassgin({
                    ...form,
                    taskId: this.transferTaskSelection[0].taskId,
                    processInstanceId: this.transferTaskSelection[0].processInstanceId,
                }).then(res => {
                    this.$message.success('指派成功');
                    this.reassignBox = false;
                    this.$refs?.reassginform?.resetForm();
                    this.onLoad(this.page, this.query);
            let tip = ''
            this.reassignType === 1 ? tip = '请确认是否手动派工' : this.reassignType === 2 ? tip = '请确认是否自动派工' : tip = '请确认是否重新指派';
            if (this.reassignType === 0) {
                this.$confirm(tip, '', {
                    confirmButtonText: this.$t('submitText'),
                    cancelButtonText: this.$t('cancelText'),
                    type: 'warning',
                }).then(() => {
                    reassgin({
                        ...form,
                        taskId: this.transferTaskSelection[0].taskId,
                        processInstanceId: this.transferTaskSelection[0].processInstanceId,
                    }).then(res => {
                        if(res.data.code !== 200) {
                            this.$message.error(res.data.msg);
                            return;
                        }
                        this.$message.success('操作成功');
                        this.reassignBox = false;
                        this.$refs?.reassginform?.resetForm();
                        this.onLoad(this.page, this.query);
                        done()
                }).catch(err => {
                    console.error(err);
                })
            });
                    }).catch(err => {
                        this.$message.error('操作失败');
                        done()
                    })
                });
            } else if (this.reassignType === 1) {
                this.$confirm(tip, '', {
                    confirmButtonText: this.$t('submitText'),
                    cancelButtonText: this.$t('cancelText'),
                    type: 'warning',
                }).then(() => {
                    manualDispatch({
                        assignee: form.newAssigneeId,
                        comment: form.comment,
                        taskIds: this.transferTaskSelection.map(v => v.taskId),
                        processInstanceIds: this.transferTaskSelection.map(v => v.processInstanceId),
                    }).then(res => {
                        if(res.data.code !== 200) {
                            this.$message.error(res.data.msg);
                            return;
                        }
                        this.$message.success('操作成功');
                        this.reassignBox = false;
                        this.$refs?.reassginform?.resetForm();
                        this.onLoad(this.page, this.query);
                        done()
                    }).catch(err => {
                        console.error(err);
                        done()
                    })
                });
            }
            done();
        },
        handleAction(row, index) {
            this.formApprove = {
                comment: '',
                approve: '', // 默认同
                approve: 'Y', // 默认同
            }
            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") {
            }
            this.setAssignee(row, this.formApprove.approve);
            console.log('handleAction', row, index);
        },
        handleSubmit(form, done) {
            if(this.row.taskDefinitionKey === 'programmingTask') {
                // if(this.applist.length !== 1) {
                //     done();
                //     return this.$message.success('请选择1个程序');
                // }
            }
            approve({
                ...this.formApprove,
                taskId: this.row.taskId,
                processInstanceId: this.row.processInstanceId,
                programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '',
                // programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '',
            }).then(res => {
                if(res.data.code !== 200) {
                    this.$message.error(res.data.msg);
                    done();
                    return;
                }
                this.$message.success('审批成功');
                this.approveBox = false;
                this.onLoad(this.page, this.query);
                done();
            }).catch(err => {
                done();
                console.error(err);
            });
        },