yangys
2025-09-04 2781142ab67deba83925da706ca26b7f8ea1a759
审批用户列表改为树形
已修改7个文件
237 ■■■■■ 文件已修改
src/api/flow/todolist.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flow/components/TodolistLeft.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flow/todolist.vue 123 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowmgr/processQuery1.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowmgr/processQuery2.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowmgr/processQuery3.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wel/shemi.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/flow/todolist.js
@@ -43,6 +43,14 @@
  });
}
export const getAssigneeTree = (params) => {
  return request({
    url: `/blade-mdm/flow/flow-user-tree?deptId=0`,
    method: 'get',
    params,
  });
}
export const getAppList = (current, size, params) => {
  return request({
    url: '/blade-mdm/program/ncfile/programpickpage',
@@ -117,6 +125,7 @@
  })
}
// 上一环节审批人
/*
export const getPrevius = data => {
  return request({
    url: '/blade-mdm/flow/previus-approve-user',
@@ -125,6 +134,7 @@
    data: {}
  })
}
  */
// 批量审批
export const batchApprove = data => {
  return request({
src/views/flow/components/TodolistLeft.vue
@@ -109,7 +109,7 @@
            content1: '',
            content2: '',
            codeDiffFileName1: '回传版本',
            codeDiffFileName2: '试切版本',
            codeDiffFileName2: '下发版本',
            showContentId: '',
            attForm: {
                att: '',
src/views/flow/todolist.vue
@@ -36,7 +36,9 @@
                        v-model="activeName"
                    >
                        <el-tab-pane label="审批" name="approve">
                            <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" />
                            <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" >
                            </avue-form>
                        </el-tab-pane>
                        <el-tab-pane label="流程轨迹" name="log">
                            <processTrace :item="row" v-if="activeName==='log'"></processTrace>
@@ -47,12 +49,9 @@
            </div>
        </el-drawer>
    </basic-container>
    <div>
        <!--<top-todo ref="topTodoComponent" />-->
    </div>
</template>
<script>
import { getList, approve, getAssignee,reassgin,manualDispatch,autoDispatch,todoChangeNotify,batchApprove } from '@/api/flow/todolist';
import { getList, approve, getAssignee,getAssigneeTree,reassgin,manualDispatch,autoDispatch,todoChangeNotify,batchApprove } from '@/api/flow/todolist';
import { mapGetters } from 'vuex';
import dayjs from 'dayjs';
import TodolistLeft from './components/TodolistLeft.vue';
@@ -72,13 +71,18 @@
            assigneeData: [],
            allAssigneeData: [],
            managerAssigneeData: [],//数控管理员角色的审批用户
            assignee2Data:[],
            row: {},
            approveBox: false,
            formApprove: {
                comment: '',
                approve: '', // 默认同意
                assignee: ''
                approve: '',
                assignee: '',
            },
            optionApprove: {
                labelWidth: 100,
                column: [
@@ -93,7 +97,7 @@
                            { label: '驳回', value: 'N' },
                        ],
                        rules: [{ required: true, message: '请选择审批结果', trigger: 'blur' }],
                    },
                    },/*
                    {
                        label: '发送给',
                        prop: 'assignee',
@@ -109,7 +113,24 @@
                        dicData: [
                        ],
                        // rules: [{ required: true, message: '请选择下一审批用户', trigger: 'blur' }],
                    },*/
                    {
                        label: '发送给',
                        prop: 'assignee',
                        component: 'elTreeSelect',
                        params: {
                            props:{
                                label: 'name',
                                value:'id',
                                disabled: (data) => data.nodeType==='dept',
                                isLeaf: (data) => data.children==null || data.children.length==0,
                            },
                        },
                        display: true,
                        filterable: true,
                        span: 24,
                        disabled: false,
                    },
                    {
                        label: '备注',
@@ -131,6 +152,7 @@
                            }
                        ]
                    },
                ],
            },
            page: {
@@ -148,12 +170,10 @@
                delBtn: false,
                columnBtn: false,
                tip: false,
                // simplePage: true,
                searchEnter:true,
                searchShow: true,
                searchMenuSpan: 6,
                dialogWidth: '60%',
                // tree: true,
                border: true,
                index: true,
                selection: true,
@@ -221,7 +241,7 @@
                        label: '机床',
                        width: 100,
                        prop: '',
                        showOverflowTooltip:true,
                        formatter: (val, value, label) => {
                            return `${val?.variables?.machineCode}`;
                        },
@@ -242,6 +262,7 @@
                        search: true,
                        searchRange: true,
                        searchSpan: 8,
                        showOverflowTooltip:true,
                        // hide: true,
                    },
                    {
@@ -254,7 +275,8 @@
                    },
                    {
                        label: '当前节点',
                        width: 100,
                        width: 120,
                        showOverflowTooltip:true,
                        prop: 'taskName',
                    },
                    {
@@ -302,6 +324,25 @@
                    {
                        label: '发送给',
                        prop: 'newAssigneeId',
                        component: 'elTreeSelect',
                        params: {
                            props:{
                                label: 'name',
                                value:'id',
                                disabled: (data) => data.nodeType==='dept',
                                isLeaf: (data) => data.children==null || data.children.length==0,
                            },
                        },
                        display: true,
                        filterable: true,
                        span: 24,
                        disabled: false,
                        rules: [{ required: true, message: '请输入选择', trigger: 'blur' }],
                    },
                    /*
                    {
                        label: '发送给',
                        prop: 'newAssigneeId',
                        filterable:true,
                        type: 'select',
                        props: {
@@ -315,13 +356,12 @@
                        ],
                        rules: [{ required: true, message: '请输入选择', trigger: 'blur' }],
                    },
                    },*/
                    {
                        label: '备注',
                        span: 24,
                        prop: 'comment',
                        type: 'textarea',
                        // rules: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
                    },
                ],
            },
@@ -361,12 +401,30 @@
    },
    mounted() {
        //this.setApproveBtn(row)
        /*
        getAssignee({
                taskId: 0,
             }).then(res => {
                //if(row.taskDefinitionKey === '')
                this.assigneeData = res.data.data;
                this.reassignOption.column[1].dicData = this.assigneeData;
             });
        */
         getAssigneeTree({
                taskId: 0,
             }).then(res => {
                this.assigneeData = res.data.data;
                //初始化数控管理员的数组
                for(var i=0;i<this.assigneeData.length;i++){
                    for(var j=0;j<this.assigneeData[i].children.length;j++){
                        if(this.assigneeData[i].children[j].nodeType=='manager'){
                            this.managerAssigneeData[this.managerAssigneeData.length] = this.assigneeData[i].children[j];
                        }
                    }
                }
                this.optionApprove.column[1].data = this.assigneeData;
                this.reassignOption.column[1].data = this.assigneeData;
             });
    },
    methods: {
@@ -431,10 +489,10 @@
            
            if (["cureProgramTask"].includes(row.taskDefinitionKey)) {
                if(approve === 'N'){
                    this.optionApprove.column[1].dicData = this.managerAssigneeData;
                    this.optionApprove.column[1].data = this.managerAssigneeData;
                }else{
                    //this.assigneeData = this.allAssigneeData;
                    this.optionApprove.column[1].dicData = this.allAssigneeData;
                    //this.optionApprove.column[1].dicData = this.allAssigneeData;
                    this.optionApprove.column[1].data = this.assigneeData;
                }
            }
            if (approve === 'Y') {//审批通过的情况
@@ -476,13 +534,10 @@
                    //固化编制节点,不通过给数控管理员
                    //TODO 按找角色定位给其中一个数控管理员
                    this.optionApprove.column[1].disabled = false;
                    for(var i=0;i<this.assigneeData.length;i++){
                        if(this.assigneeData[i].manager == true){
                            this.formApprove.assignee = this.assigneeData[i].id;
                            break;
                        }
                    if(this.managerAssigneeData.length>0){
                        this.formApprove.assignee = this.managerAssigneeData[0].id;
                    }
                    //this.formApprove.assignee = '';
                }else if(["confirmIsUseableTask"].includes(row.taskDefinitionKey)) {
                    //判断是否可用节点,不可用,给编制
                    this.formApprove.assignee = row.variables.programmer;
@@ -676,20 +731,24 @@
            }
        },
        handleAction(row, index) {
             getAssignee({
             getAssigneeTree({
                taskId: row.taskId,
             }).then(res => {
                //if(row.taskDefinitionKey === '')
                this.assigneeData = res.data.data;
                this.allAssigneeData = res.data.data;
                this.managerAssigneeData=[];
                //初始化数控管理员的数组
                for(var i=0;i<this.allAssigneeData.length;i++){
                    if(this.allAssigneeData[i].manager == true){
                        this.managerAssigneeData[this.managerAssigneeData.length] = this.allAssigneeData[i];
                for(var i=0;i<this.assigneeData.length;i++){
                    for(var j=0;j<this.assigneeData[i].children.length;j++){
                        if(this.assigneeData[i].children[j].nodeType=='manager'){
                            this.managerAssigneeData[this.managerAssigneeData.length] = this.assigneeData[i].children[j];
                        }
                    }
                }
                this.optionApprove.column[1].dicData = this.assigneeData;
                this.reassignOption.column[1].dicData = this.assigneeData;
                this.optionApprove.column[1].data = this.assigneeData;
                this.reassignOption.column[1].data = this.assigneeData;
            })
            this.formApprove = {
                comment: '',
@@ -700,7 +759,7 @@
            this.setAssignee(row, this.formApprove.approve);
            this.setApproveBtn(row);
            console.log('handleAction', row, index);
            //console.log('handleAction', row, index);
        },
        handleSubmit(form, done) {
            if(this.row.taskDefinitionKey === 'programmingTask') {
src/views/flowmgr/processQuery1.vue
@@ -25,9 +25,10 @@
            <template #menu="scope">
                <el-button type="primary" text size="default" @click.stop="customView(scope.row, scope.index, 0)">查看
                </el-button>
                <!--
                <el-button type="primary" text size="default" v-if="scope.row.processDefinitionKey === 'dispatch' || scope.row.processDefinitionKey === 'program-cure'"
                    @click.stop="handleApproveTable(scope.row, scope.index)">审批表
                </el-button>
                </el-button>-->
                <el-button type="danger" text size="default" @click.stop="handleDelete(scope.row, scope.index, 0)">删除
                </el-button>
                
@@ -81,18 +82,14 @@
                viewBtn: false,
                columnBtn: false,
                tip: false,
                // simplePage: true,
                searchShow: true,
                searchMenuSpan: 7,
                searchEnter:true,
                dialogWidth: '70%',
                // tree: true,
                border: true,
                index: true,
                selection: true,
                menuWidth: 200,
                // menu: false,
                selection: false,
                menuWidth: 100,
                dialogClickModal: false,
                column: [
                    {
@@ -128,6 +125,7 @@
                    {
                        label: '标题',
                        prop: 'variables.title',
                        showOverflowTooltip:true,
                        width: 150,
                        render: ({ row }) => {
                            return h('p',
@@ -149,6 +147,7 @@
                        label: '流程名称',
                        prop: '',
                        width: 85,
                        showOverflowTooltip:true,
                        render: ({ row }) => {
                            return h('p',
                                {
@@ -158,12 +157,13 @@
                                }, row?.variables?.myProcessName)
                        }
                    },
                    {
                        label: '批次号',
                        prop: 'variables.craftEdition',
                        width: 70,
                        label: '零组件号',
                        prop: 'drawingNo',
                        width: 82,
                        render: ({ row }) => {
                            return h('span', {}, row?.variables?.craftEdition || '');
                            return h('span', {}, row?.variables?.drawingNo || '');
                        }
                    },
                    {
@@ -177,7 +177,7 @@
                    {
                        label: '工序名称',
                        prop: 'processName',
                        width: 80,
                        width: 82,
                        render: ({ row }) => {
                            return h('span', {}, row?.variables?.processName || '');
                        }
@@ -185,23 +185,23 @@
                    {
                        label: '工序版次',
                        prop: 'processEdition',
                        width: 80,
                        width: 82,
                        render: ({ row }) => {
                            return h('span', {}, row?.variables?.processEdition || '');
                        }
                    },
                    {
                        label: '零组件号',
                        prop: 'drawingNo',
                        width: 80,
                   {
                        label: '批次号',
                        prop: 'variables.craftEdition',
                        width: 70,
                        render: ({ row }) => {
                            return h('span', {}, row?.variables?.drawingNo || '');
                            return h('span', {}, row?.variables?.craftEdition || '');
                        }
                    },
                    {
                        label: '任务车间',
                        prop: 'workshop',
                        width: 80,
                        width: 82,
                        render: ({ row }) => {
                            return h('p',{'class': 'margin0'}, row?.variables?.workshop || '');
                        }
@@ -209,28 +209,9 @@
                    {
                        label: '过程卡号',
                        prop: 'empty',
                        width: 80,
                        width: 82,
                    },
                    {
                        label: '图号',
                        prop: '',
                        width: 100,
                        render: ({ row }) => {
                            return h('p',
                                {
                                    attrs: {},
                                    class: {},
                                    style: {},
                                }, row?.variables?.drawingNo)
                        },
                        renderForm: ({ row }) => {
                            return h('span', {
                                attrs: {},
                                class: {},
                                style: {},
                            }, row?.variables?.drawingNo || '');
                        }
                    },
                    {
                        label: '产品型号',
                        prop: '',
@@ -255,6 +236,7 @@
                    {
                        label: '机床',
                        prop: '',
                        showOverflowTooltip:true,
                        render: ({ row }) => {
                            return h('p',
                                {
@@ -279,16 +261,19 @@
                    {
                        label: '创建时间',
                        prop: 'processCreateTime',
                        showOverflowTooltip:true,
                        width: 82,
                    },
                    {
                        label: '当前节点',
                        prop: 'taskName',
                        width: 90
                        showOverflowTooltip:true,
                        width: 110
                    },
                    {
                        label: '计划加工时间',
                        prop: 'planStartTime',
                        width: 180,
                        width: 110,
                        render: ({ row }) => {
                            return h('span', {}, row?.variables?.planStartTime || '');
                        }
src/views/flowmgr/processQuery2.vue
@@ -82,7 +82,7 @@
                // tree: true,
                border: true,
                index: true,
                selection: true,
                selection: false,
                menuWidth: 80,
                // menu: false,
                labelWidth: 90,
src/views/flowmgr/processQuery3.vue
@@ -90,7 +90,7 @@
                // tree: true,
                border: true,
                index: true,
                selection: true,
                selection: false,
                menuWidth: 80,
                // menu: false,
src/views/wel/shemi.vue
@@ -1,7 +1,7 @@
<template>
  <basic-container>
    <div class="norightmenu" v-if="!isSearch">
      <avue-crud :addBtn="false" :option="option" :table-loading="loading" :data="treeData" ref="crud"
      <avue-crud :addBtn="false" :option="option" :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" :table-loading="loading" :data="treeData" ref="crud"
        v-model:search="search" v-model:page="mypage" @current-change="currentChange" @size-change="sizeChange"
        @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad" @row-click="rowClick">
        <template #search>
@@ -66,7 +66,7 @@
      </avue-crud>
    </div>
    <div class="norightmenu" v-else>
      <avue-crud :addBtn="false" :option="option" :table-loading="loading" :data="treeData" ref="crud"
      <avue-crud :addBtn="false" :option="option" :row-style="{height:'20px'}" :cell-style="{padding:'0px'}" :table-loading="loading" :data="treeData" ref="crud"
        v-model:search="search" v-model:page="mypage" @current-change="currentChange" @size-change="sizeChange"
        @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad" @row-click="rowClick">
        <template #search>
@@ -81,7 +81,7 @@
            </el-col>
            <el-col :span="4" class="search-data-flex">
              <span class="search-data-title">零组件号:</span>
              <el-select v-model="searchTreeData.drawingNo" filterable remote reserve-keyword placeholder="零组件号"
              <el-select v-model="searchTreeData.drawingNo" filterable remote reserve-keyword placeholder="输入至少3个字符过滤数据"
                :remote-method="remoteMethod" :loading="searchLoading">
                <el-option v-for="item in drawingNoList" :key="item.value" :label="item.label"
                  :value="item.value" /></el-select>
@@ -756,20 +756,6 @@
      if (query && query.length>2) {
        this.searchLoading = true;
        this.getRemote(query);
        /*
        axios({
          url: '/blade-mdm/program/node/drawing-no-pick',
          method: 'get',
          params: { drawingNo: query }
        }).then(resp => {
          this.searchLoading = false;
          var drawingNoList = [];
          resp.data.data.forEach(item => {
            drawingNoList.push({ label: item, value: item })
          })
          this.drawingNoList = drawingNoList;
        });
        */
      } else {
        this.drawingNoList = [];
      }
@@ -992,8 +978,11 @@
      });
    },
    searchTree() {
      if (this.searchTreeData.programStatus.length == 0) return;
      if (this.searchTreeData.drawingNo == "") return;
      if (this.searchTreeData.programStatus.length == 0 || this.searchTreeData.drawingNo == ""){
        this.$message.warning('请输入程序状态和零组件号进行搜索');
        return;
      }
      this.treeSearchLoad = true;
      this.isSearch = !this.isSearch
      this.searchTreeData.status = this.searchTreeData.programStatus.join();
@@ -1504,7 +1493,7 @@
}
.search-data-title {
  font-size: 12px;
  font-size: 14px;
  margin-right: 8px;
  display: inline-block;
  width: 95px;