cfort 3 лет назад
Родитель
Сommit
fc6d52fd66

+ 35 - 21
src/views/platform/bpmn/bpmInstHis/corresponding/index.js

@@ -1,24 +1,38 @@
 export const listTypeData = {
-    '788048416507691008':'gongZheng',
-    '843924691121864704':'peiXun',
-    '747865610389553152':'sheBei',
+    '788048416507691008': 'gongZheng',
+    '843924691121864704': 'peiXun',
+    '747865610389553152': 'sheBei',
     '747865588696612864': 'jianDu',
-    '747865628878045184':'huanJing',
-    '747865535110184960':'jiLiang',
-    '747865562742259712':'heCha',
-    '848876704007979008':'gongYing', //8.供应商
-    '848877659185217536':'fangFa',//9.方法管理
-    '848877794631876608':"touSu",//11、投诉
-    '848877706840899584':"jieGuo",//13、结果有效性
-    '859879431471104000':"keHu",//13、结果有效性
-    '848877774067204096':'ceLiang',//测量不确定度评定
-    '747865515833163776':'jiuZheng',//不符合项与纠正措施
-    '859878561996079104':'nengLiYanZheng',// 能力验证与实验室间比对
-    '859879122875187200':'fengXianKongZhi', // 风险控制
-    '859879582994530304':'neiShen',//内审
-    '859879751135789056':'guangShen', //管审
-    '1069221214599249920':'sheBeiWeiXiu',// 设备维修
-    '1069221265669095424':'sheBeiBaoFei', // 设备报废
-    '1022458306758705152':'sheBeiYanShou', // 设备验收
+    '747865628878045184': 'huanJing',
+    '747865535110184960': 'jiLiang',
+    '747865562742259712': 'heCha',
+    '848876704007979008': 'gongYing', //8.供应商
+    '848877659185217536': 'fangFa',//9.方法管理
+    '848877794631876608': "touSu",//11、投诉
+    '848877706840899584': "jieGuo",//13、结果有效性
+    '859879431471104000': "keHu",//13、结果有效性
+    '848877774067204096': 'ceLiang',//测量不确定度评定
+    '747865515833163776': 'jiuZheng',//不符合项与纠正措施
+    '859878561996079104': 'nengLiYanZheng',// 能力验证与实验室间比对
+    '859879122875187200': 'fengXianKongZhi', // 风险控制
+    '859879582994530304': 'neiShen',//内审
+    '859879751135789056': 'guangShen', //管审
+    '1069221214599249920': 'sheBeiWeiXiu',// 设备维修
+    '1069221265669095424': 'sheBeiBaoFei', // 设备报废
+    '1022458306758705152': 'sheBeiYanShou', // 设备验收
+}
 
-  }
+// 特殊类型,内审管审特殊处理
+export const specialType = {
+    '859879582994530304': [
+        '首次会议签到',
+        '首次会议纪要',
+        '不符合项汇总',
+        '末次会议签到',
+        '末次会议纪要',
+        '不符合项整改'
+    ],
+    '859879751135789056': [
+        
+    ]
+}

+ 495 - 0
src/views/platform/bpmn/bpmInstHis/list-old.vue

@@ -0,0 +1,495 @@
+<template>
+    <div class="main-container">
+        <div slot="west">
+            <ibps-type-tree
+                :width="width"
+                :height="height"
+                title="记录分类"
+                :location="location"
+                category-key="FLOW_TYPE"
+                :hasPermission="selection"
+                @node-click="handleNodeClick"
+                @expand-collapse="handleExpandCollapse"
+            />
+        </div>
+        <ibps-crud
+            v-if="!listType"
+            ref="crud"
+            :style="{ marginLeft: width + 'px' }"
+            :height="height"
+            :data="listData"
+            :toolbars="listConfig.toolbars"
+            :search-form="listConfig.searchForm"
+            :pk-key="pkKey"
+            :displayField="tableTitle"
+            :columns="listConfig.columns"
+            :row-handle="listConfig.rowHandle"
+            :pagination="pagination"
+            :loading="loading"
+            :index-row="false"
+            :selection-row="selection"
+            @action-event="handleAction"
+            @sort-change="handleSortChange"
+            @column-link-click="handleLinkClick"
+            @pagination-change="handlePaginationChange"
+        >
+            <template slot="selectCont" slot-scope="scope">
+                <el-popover
+                    :ref="'popover2-' + scope.row.id"
+                    placement="bottom"
+                    width="250"
+                    popper-class="popverClass"
+                    trigger="click"
+                    @show="getReportAndFile(scope.row)"
+                >
+                    <!-- 触发事件 -->
+                    <!-- @click="handleAction('detail',null,null,scope.row)"-->
+                    <div class="div_test el-icon-s-order" slot="reference">查阅记录</div>
+                    <!-- 弹框内容 -->
+                    <div class="div_content">
+                        <!-- 获取所有输出报告-->
+                        <div
+                            v-if="currReportCont.report.length > 0"
+                            v-for="(item, i) in currReportCont.report"
+                            class="content_butts"
+                        >
+                            <span style="cursor: pointer;" @click="clickCont(currReportCont, i)">
+                                <i class="el-icon-tickets" style="font-size: 18px;"/>
+                                {{
+                                    item.slice(-item.split('').reverse().join('').indexOf(' '), -item.split('').reverse().join('').indexOf('.') - 1)
+                                }}
+                                <!-- {{ item.split('/')[1].split('.')[0].split(' ')[1] }} -->
+                            </span>
+                            <br />
+                        </div>
+
+                        <div class="content_butts" v-if="currReportCont.file">
+                            <ibps-attachment
+                                v-model="fileId"
+                                placeholder="请选择"
+                                :download="true"
+                                :readonly="true"
+                                accept="*"
+                                :multiple="true"
+                                upload-type="attachment"
+                                store="id"
+                                media-type=""
+                                media=""
+                                style="width: 100%;"
+                            />
+                        </div>
+                    </div>
+                </el-popover>
+            </template>
+        </ibps-crud>
+        <typeList
+            v-else
+            :listType="listType"
+            :tableTitle="tableTitle"
+            :reportAll="reportAll"
+            :typeId="typeId"
+        />
+
+        <bpmn-formrender
+            :visible="dialogFormVisible"
+            :instance-id="instanceId"
+            @close="(visible) => (dialogFormVisible = visible)"
+        />
+
+        <el-dialog
+            :close-on-click-modal="false"
+            :close-on-press-escape="false"
+            :top="'3vh'"
+            :width="'90%'"
+            class="js-custom-dialog"
+            append-to-body
+            :fullscreen="false"
+            :visible.sync="visible"
+        >
+            <iframe
+                :src="srcUrl"
+                :height="'100%'"
+                :width="'100%'"
+                frameborder="0"
+                scrolling="no"
+            />
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+    import { queryPageList } from '@/api/platform/bpmn/bpmInstHis'
+    import ActionUtils from '@/utils/action'
+    import IbpsTypeTree from '@/business/platform/cat/type/tree'
+    import FixHeight from '@/mixins/height'
+    import { searchOptions, resultTypeOptions, statusOptions, deleteRoleName } from './constants'
+    import BpmnFormrender from '@/business/platform/bpmn/form/dialog'
+    import curdPost from '@/business/platform/form/utils/custom/joinCURD.js' //增删改查规则
+    import IbpsAttachment from '@/business/platform/file/attachment/selector'
+    import typeList from './typeIndex.vue'
+    import { listTypeData } from './corresponding/index.js'
+    import GetReport from './corresponding/getReport.js'
+    export default {
+        components: {
+            IbpsTypeTree,
+            BpmnFormrender,
+            typeList,
+            'ibps-attachment': IbpsAttachment
+        },
+        mixins: [FixHeight, GetReport],
+        props: {
+            location: {
+                type: String,
+                default: 'initial'
+            }
+        },
+        data() {
+            return {
+                width: 200,
+                selection: false,
+                dialogFormVisible: false, // 弹窗
+                instanceId: '', // 编辑dialog需要使用
+                pkKey: 'id', // 主键  如果主键不是pk需要传主键
+                tableTitle: '',
+                typeId: '',
+                listType: '',
+                srcUrl: '', //报表字段
+                fileId: '', //文件字段
+                isDisable: false, //判断多次点击
+                forClick: '', //判断是否重复点击
+                visible: false,
+                currReportCont: {},
+                title: '',
+                loading: true,
+                height: document.clientHeight,
+                reportAll: [],
+                listData: [],
+                pagination: {},
+                sorts: {},
+                listConfig: {
+                    toolbars: [
+                        { key: 'search' }
+                    ],
+                    searchForm: {
+                        forms: [
+                            {
+                                prop: 'Q^subject_^SL',
+                                label: '关键字:',
+                                width: 125
+                            }
+                            // { prop: 'Q^proc_def_name_^SL', label: '任务名称' },
+                            // {
+                            //     prop: ['Q^create_Time_^DL', 'Q^create_Time_^DG'],
+                            //     label: '完成年度',
+                            //     fieldType: 'daterange',
+                            // },
+                            // {
+                            //     prop: 'Q^status_^S',
+                            //     label: '任务状态',
+                            //     fieldType: 'select',
+                            //     options: searchOptions
+                            // }
+                        ]
+                    },
+                    // 表格字段配置
+                    columns: [
+                        // { prop: 'subject', label: '任务标题', link: 'dialog', width: 250 },
+                        { prop: 'tYear', label: '年份', width: 58 },
+                        { prop: 'tDept', label: '部门', width: 80 },
+                        { prop: 'procDefName', label: '表单名称' },
+                        { prop: 'tUser', label: '编制人', width: 80 },
+                        {
+                            prop: 'endTime',
+                            label: '完成时间',
+                            sortable: 'custom',
+                            dateFormat: 'yyyy-MM-dd',
+                            width: 150
+                        }
+                    ],
+                    rowHandle: {
+                        actions: [
+                            // {
+                            //     key: 'detail',label: '内容及附件'
+                            // }
+                        ],
+                        effect: 'display',
+                        width: '100' //固定按钮
+                    }
+                }
+            }
+        },
+        created() {
+            this.loadData()
+            this.getConfig() //获取配置的报表
+            let roleArr = this.$store.getters.userInfo.role
+            // console.log(roleArr)
+            for (let i = 0; i < roleArr.length; i++) {
+                if (roleArr[i].name == deleteRoleName) {
+                    this.listConfig.toolbars.push({ key: 'remove' })
+                    this.selection = true
+                    return
+                }
+            }
+        },
+        methods: {
+            // 截取事务说明字段内容
+            getDesc(row, column, cellValue, index) {
+                let hasDesc = cellValue.includes('#')
+                if (!hasDesc) {
+                    return ''
+                }
+                return cellValue.split('#')[1]
+            },
+            // 获取配置报表数据
+            getConfig() {
+                const params = {
+                    tableName: 't_lcidglbdbb',
+                    paramWhere: {
+                        1: '1'
+                    }
+                }
+                curdPost('select', params).then((response) => {
+                    this.reportAll = response.variables.data
+                })
+            },
+            // 加载数据
+            loadData() {
+                this.loading = true
+                queryPageList(this.getSearcFormData()).then((response) => {
+                    let data = response.data.dataResult
+                    for (let i in data) {
+                        let dept, user, tName, tYear
+                        let arr = this.getParenthesesStr(data[i].subject)
+                        if (arr.length == 4) {
+                            //如果是年度计划, 标题编辑中取年份, 去除默认给与的年份
+                            data[i]['tYear'] = arr[0]
+                            data[i]['tDept'] = arr[2]
+                            data[i]['tUser'] = arr[3]
+                        } else if (arr.length > 1) {
+                            data[i]['tYear'] = arr[0]
+                            data[i]['tDept'] = arr[1]
+                            data[i]['tUser'] = arr[2]
+                        }
+                    }
+                    // console.log('csnz\n',response.data,'\n')
+                    ActionUtils.handleListData(this, response.data)
+                    this.loading = false
+                }).catch(() => {
+                    this.loading = false
+                })
+            },
+            getParenthesesStr(text) {
+                let result = ''
+                if (!text) return result
+                let regex = /\((.+?)\)/g
+                let options = text.match(regex)
+                if (options) {
+                    let option = options[0]
+                    if (option) {
+                        result = option.substring(1, option.length - 1)
+                    }
+                    if (options[1]) {
+                        let yersOption = options[1]
+                        if (yersOption) {
+                            result =
+                                result + '/' + yersOption.substring(1, yersOption.length - 1)
+                        }
+                    }
+                }
+                return result.split('/')
+            },
+            /**
+             * 获取格式化参数
+             */
+            getSearcFormData() {
+                const params = this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {}
+
+                if (this.$utils.isNotEmpty(this.typeId)) {
+                    params['Q^TYPE_ID_^S'] = this.typeId
+                }
+
+                params['Q^status_^S'] = 'end'
+                let cont = ActionUtils.formatParams(
+                    params,
+                    this.pagination,
+                    this.sorts
+                )
+
+                cont.parameters.push({
+                    parameters: [
+                        {
+                            parameters: [
+                                {
+                                    key: 'Q^proc_Def_Key_^NE',
+                                    value: 'Process_08hbmhs',
+                                    param: 'name'
+                                }
+                            ]
+                        },
+                        {
+                            parameters: [
+                                {
+                                    key: 'Q^proc_Def_Key_^NE',
+                                    value: 'Process_0xlaidt',
+                                    param: 'name1'
+                                }
+                            ]
+                        },
+                        {
+                            parameters: [
+                                {
+                                    key: 'Q^proc_Def_Key_^NE',
+                                    value: 'Process_0ocg0f1',
+                                    param: 'name2'
+                                }
+                            ]
+                        }
+                    ]
+                })
+                return cont
+            },
+            /**
+             * 处理分页事件
+             */
+            handlePaginationChange(page) {
+                ActionUtils.setPagination(this.pagination, page)
+                this.loadData()
+            },
+            /**
+             * 处理排序
+             */
+            handleSortChange(sort) {
+                ActionUtils.setSorts(this.sorts, sort)
+                this.loadData()
+            },
+            handleLinkClick(data, columns) {
+                this.handleEdit(data.id)
+            },
+            /**
+             * 查询
+             */
+            search() {
+                this.loadData()
+            },
+            /* 防止多次快速查询*/
+            numbersClick() {
+                this.isDisable = true
+                setTimeout(() => {
+                    this.isDisable = false
+                }, 600)
+            },
+            /**
+             * 处理按钮事件
+             */
+            handleAction(command, position, selection, data) {
+                switch (command) {
+                    case 'search': // 查询
+                        ActionUtils.setFirstPagination(this.pagination)
+                        this.search()
+                        break
+                        // case 'resetSearch':
+                        // this.typeId = ''
+                        // this.tableTitle = ''
+                        // this.search()
+                        // break
+                    case 'remove':
+                        let str = ''
+                        selection.forEach((item, index) => {
+                            if (index == 0) {
+                                str += item
+                            } else {
+                                str += ',' + item
+                            }
+                        })
+                        let data = {}
+                        data['tableName'] = 'ibps_bpm_inst_his'
+                        data['paramWhere'] = "{id_:'" + str + "'}"
+                        let this_ = this
+                        curdPost('batchDelete', data).then((response) => {
+                            this_.$message({
+                                message: '删除成功!',
+                                type: 'warning'
+                            })
+                            this.search()
+                        })
+                        break
+                    case 'detail': // 明细
+                        ActionUtils.selectedRecord(selection).then((id) => {
+                            this.handleEdit(id)
+                            this.title = '信息'
+                        }).catch(() => {})
+                        break
+                    default:
+                        break
+                }
+            },
+            handleNodeClick(typeId, typeName) {
+                this.tableTitle = typeName.name
+                this.typeId = typeId
+                // console.log(typeId)
+                // 如果是特殊处理添加列表中的数据
+                if (!listTypeData[typeId]) {
+                    this.listType = ''
+                    this.loadData()
+                } else {
+                    this.listType = listTypeData[typeId]
+                }
+            },
+            handleExpandCollapse(isExpand) {
+                this.width = isExpand ? 230 : 30
+            },
+            /**
+             * 处理编辑
+             */
+            handleEdit(id = '') {
+                this.instanceId = id
+                this.dialogFormVisible = true
+            }
+        }
+    }
+</script>
+<style lang="scss">
+    .js-custom-dialog {
+        .el-dialog__body {
+            height: calc(100vh) !important;
+            margin: -9px !important;
+            padding: 0px !important;
+            overflow: hidden;
+        }
+        .el-dialog__header {
+            padding: 0px;
+        }
+        .el-dialog__headerbtn i {
+            font-size: 28px;
+            font-weight: bold;
+            background-color: #ffffff;
+            border-radius: 8px;
+            margin-top: -8px;
+        }
+    }
+    .main-container .div_test {
+        cursor: pointer;
+    }
+    .main-container .el-popover.popverClass {
+        .div_content {
+            .content_checkbox {
+                .el-checkbox-group {
+                    display: flex;
+                    flex-direction: column;
+                    z-index: 999;
+                }
+
+                z-index: 999;
+            }
+            .content_butts {
+                z-index: 999;
+                margin-top: 20px;
+                display: flex;
+                justify-content: flex-end;
+                .el-button {
+                    padding: 7px 14px;
+                }
+            }
+        }
+    }
+</style>

+ 204 - 200
src/views/platform/bpmn/bpmInstHis/list.vue

@@ -7,13 +7,12 @@
                 title="记录分类"
                 :location="location"
                 category-key="FLOW_TYPE"
-                :hasPermission="selection"
+                :hasPermission="hasPermission"
                 @node-click="handleNodeClick"
                 @expand-collapse="handleExpandCollapse"
             />
         </div>
         <ibps-crud
-            v-if="!listType"
             ref="crud"
             :style="{ marginLeft: width + 'px' }"
             :height="height"
@@ -48,22 +47,17 @@
                     <!-- 弹框内容 -->
                     <div class="div_content">
                         <!-- 获取所有输出报告-->
-                        <div
-                            v-if="currReportCont.report.length > 0"
-                            v-for="(item, i) in currReportCont.report"
-                            class="content_butts"
-                        >
-                            <span style="cursor: pointer;" @click="clickCont(currReportCont, i)">
-                                <i class="el-icon-tickets" style="font-size: 18px;"/>
-                                {{
-                                    item.slice(-item.split('').reverse().join('').indexOf(' '), -item.split('').reverse().join('').indexOf('.') - 1)
-                                }}
-                                <!-- {{ item.split('/')[1].split('.')[0].split(' ')[1] }} -->
-                            </span>
-                            <br />
-                        </div>
-
-                        <div class="content_butts" v-if="currReportCont.file">
+                        <template v-if="record.report.length">
+                            <div v-for="item in record.report" class="content_butts">
+                                <span style="cursor: pointer;" @click="openReport(item, record.bizKey)">
+                                    <i class="el-icon-tickets" style="font-size: 18px;"/>
+                                    <!-- 截取表单名称 -->
+                                    {{ item | getReportName }}
+                                </span>
+                                <br/>
+                            </div>
+                        </template>
+                        <div v-if="record.file.length" class="content_butts">
                             <ibps-attachment
                                 v-model="fileId"
                                 placeholder="请选择"
@@ -82,20 +76,11 @@
                 </el-popover>
             </template>
         </ibps-crud>
-        <typeList
-            v-else
-            :listType="listType"
-            :tableTitle="tableTitle"
-            :reportAll="reportAll"
-            :typeId="typeId"
-        />
-
         <bpmn-formrender
             :visible="dialogFormVisible"
             :instance-id="instanceId"
-            @close="(visible) => (dialogFormVisible = visible)"
+            @close="visible => dialogFormVisible = visible"
         />
-
         <el-dialog
             :close-on-click-modal="false"
             :close-on-press-escape="false"
@@ -122,43 +107,53 @@
     import ActionUtils from '@/utils/action'
     import IbpsTypeTree from '@/business/platform/cat/type/tree'
     import FixHeight from '@/mixins/height'
-    import { searchOptions, resultTypeOptions, statusOptions, deleteRoleName } from './constants'
     import BpmnFormrender from '@/business/platform/bpmn/form/dialog'
-    import curdPost from '@/business/platform/form/utils/custom/joinCURD.js' //增删改查规则
+    import curdPost from '@/business/platform/form/utils/custom/joinCURD.js'
     import IbpsAttachment from '@/business/platform/file/attachment/selector'
-    import typeList from './typeIndex.vue'
-    import { listTypeData } from './corresponding/index.js'
-    import GetReport from './corresponding/getReport.js'
+    import { specialType } from './corresponding/index'
     export default {
         components: {
             IbpsTypeTree,
             BpmnFormrender,
-            typeList,
             'ibps-attachment': IbpsAttachment
         },
-        mixins: [FixHeight, GetReport],
+        mixins: [FixHeight],
         props: {
             location: {
                 type: String,
                 default: 'initial'
             }
         },
+        filters: {
+            // 截取报表名称
+            getReportName(value) {
+                // 通过/与.截取
+                return value.slice(-value.split('').reverse().join('').indexOf('/'), -value.split('').reverse().join('').indexOf('.') - 1)
+            }
+        },
         data() {
             return {
-                width: 200,
+                width: 250,
                 selection: false,
-                dialogFormVisible: false, // 弹窗
-                instanceId: '', // 编辑dialog需要使用
-                pkKey: 'id', // 主键  如果主键不是pk需要传主键
+                dialogFormVisible: false,
+                // 编辑dialog需要使用
+                instanceId: '',
+                // 主键 如果主键不是pk需要传主键
+                pkKey: 'id',
                 tableTitle: '',
                 typeId: '',
-                listType: '',
-                srcUrl: '', //报表字段
-                fileId: '', //文件字段
-                isDisable: false, //判断多次点击
-                forClick: '', //判断是否重复点击
+                srcUrl: '',
+                fileId: '',
+                // 判断多次点击
+                isDisable: false,
                 visible: false,
-                currReportCont: {},
+                record: {
+                    report: [],
+                    file: [],
+                    table: [],
+                    field: [],
+                    bizKey: ''
+                },
                 title: '',
                 loading: true,
                 height: document.clientHeight,
@@ -166,69 +161,50 @@
                 listData: [],
                 pagination: {},
                 sorts: {},
+                // 默认过滤部分分类
+                hasPermission: true,
                 listConfig: {
                     toolbars: [
                         { key: 'search' }
                     ],
                     searchForm: {
                         forms: [
-                            {
-                                prop: 'Q^subject_^SL',
-                                label: '关键字:',
-                                width: 125
-                            }
-                            // { prop: 'Q^proc_def_name_^SL', label: '任务名称' },
-                            // {
-                            //     prop: ['Q^create_Time_^DL', 'Q^create_Time_^DG'],
-                            //     label: '完成年度',
-                            //     fieldType: 'daterange',
-                            // },
-                            // {
-                            //     prop: 'Q^status_^S',
-                            //     label: '任务状态',
-                            //     fieldType: 'select',
-                            //     options: searchOptions
-                            // }
+                            { prop: 'Q^subject_^SL', label: '关键字:', width: 125 }
                         ]
                     },
                     // 表格字段配置
                     columns: [
                         // { prop: 'subject', label: '任务标题', link: 'dialog', width: 250 },
-                        { prop: 'tYear', label: '年份', width: 58 },
-                        { prop: 'tDept', label: '部门', width: 80 },
-                        { prop: 'procDefName', label: '表单名称' },
+                        { prop: 'tYear', label: '年份', width: 60 },
+                        { prop: 'tDept', label: '部门', width: 120 },
+                        { prop: 'procDefName', label: '表单名称', width: 200 },
+                        { prop: 'subject', label: '事务说明', formatter: this.getDesc },
                         { prop: 'tUser', label: '编制人', width: 80 },
-                        {
-                            prop: 'endTime',
-                            label: '完成时间',
-                            sortable: 'custom',
-                            dateFormat: 'yyyy-MM-dd',
-                            width: 150
-                        }
+                        { prop: 'endTime', label: '完成时间', sortable: 'custom', dateFormat: 'yyyy-MM-dd', width: 150}
                     ],
                     rowHandle: {
                         actions: [
                             // {
-                            //     key: 'detail',label: '内容及附件'
+                            //     key: 'detail',label:"内容及附件"
                             // }
                         ],
                         effect: 'display',
-                        width: '100' //固定按钮
+                        width: '100'
                     }
                 }
             }
         },
         created() {
             this.loadData()
-            this.getConfig() //获取配置的报表
-            let roleArr = this.$store.getters.userInfo.role
-            // console.log(roleArr)
-            for (let i = 0; i < roleArr.length; i++) {
-                if (roleArr[i].name == deleteRoleName) {
-                    this.listConfig.toolbars.push({ key: 'remove' })
-                    this.selection = true
-                    return
-                }
+            this.getConfig()
+            const roleList = this.$store.getters.userInfo.role
+            // 系统管理角色添加删除按钮
+            const hasRole = roleList.some(item => item.name === '质量负责人')
+            if (hasRole) {
+                // 系统管理角色不做分类过滤
+                this.hasPermission = false
+                this.listConfig.toolbars.push({ key: 'remove' })
+                this.selection = true
             }
         },
         methods: {
@@ -240,49 +216,146 @@
                 }
                 return cellValue.split('#')[1]
             },
-            // 获取配置报表数据
-            getConfig() {
-                const params = {
-                    tableName: 't_lcidglbdbb',
-                    paramWhere: {
-                        1: '1'
-                    }
-                }
-                curdPost('select', params).then((response) => {
-                    this.reportAll = response.variables.data
-                })
-            },
             // 加载数据
             loadData() {
                 this.loading = true
                 queryPageList(this.getSearcFormData()).then((response) => {
-                    let data = response.data.dataResult
-                    for (let i in data) {
-                        let dept, user, tName, tYear
-                        let arr = this.getParenthesesStr(data[i].subject)
-                        if (arr.length == 4) {
-                            //如果是年度计划, 标题编辑中取年份, 去除默认给与的年份
-                            data[i]['tYear'] = arr[0]
-                            data[i]['tDept'] = arr[2]
-                            data[i]['tUser'] = arr[3]
-                        } else if (arr.length > 1) {
-                            data[i]['tYear'] = arr[0]
-                            data[i]['tDept'] = arr[1]
-                            data[i]['tUser'] = arr[2]
+                    let data = response.data && response.data.dataResult
+                    data.forEach(item => {
+                        let temp = this.getParenthesesStr(item.subject)
+                        //如果是年度计划, 标题编辑中取年份, 去除默认给与的年份
+                        if (temp.length === 4) {
+                            // 判断截取内容是否为数字,如果不是则截取创建时间的作为年份
+                            item.tYear = isNaN(Number(temp[0])) ? item.createTime.slice(0, 4) : temp[0]
+                            item.tDept = temp[2]
+                            item.tUser = temp[3]
+                        } else if (temp.length > 1) {
+                            item.tYear = isNaN(Number(temp[0])) ? item.createTime.slice(0, 4) : temp[0]
+                            item.tDept = temp[1]
+                            item.tUser = temp[2]
                         }
-                    }
-                    // console.log('csnz\n',response.data,'\n')
+                    })
                     ActionUtils.handleListData(this, response.data)
                     this.loading = false
                 }).catch(() => {
                     this.loading = false
                 })
             },
+            // 获取所有流程的报表配置数据
+            getConfig() {
+                const sql = 'select bao_biao_lu_jing_, fu_jian_nei_rong_, guan_lian_zi_duan, liu_cheng_xuan_ze, shi_fou_zi_biao_ from t_lcidglbdbb'
+                curdPost('sql', sql).then((res) => {
+                    this.reportAll = res.variables && res.variables.data
+                }).catch(error => {
+                    console.log('获取流程配置报表数据失败!')
+                })
+            },
+            // 获取报表数据及附件数据
+            getReportAndFile({ procDefKey, bizKey, subject }) {
+                if (this.isDisable) {
+                    this.$message.error('请勿快速点击!');
+                    return
+                }
+                this.numbersClick()
+                let temp = this.reportAll.find(item => item.liu_cheng_xuan_ze === procDefKey)
+                if (!temp) {
+                    return
+                }
+                this.record = {
+                    report: temp.liu_cheng_xuan_ze ? temp.bao_biao_lu_jing_.split(',') : [],
+                    file: temp.fu_jian_nei_rong_ ? temp.fu_jian_nei_rong_.split('.') : [],
+                    table: temp.shi_fou_zi_biao_ ? temp.shi_fou_zi_biao_.split('.') : [],
+                    field: temp.guan_lian_zi_duan ? temp.guan_lian_zi_duan.split('.') : [],
+                    bizKey
+                }
+                let typeIndex = ''
+                // 特殊类型处理
+                if (specialType.hasOwnProperty(this.typeId)) {
+                    specialType[this.typeId].forEach((item, index) => {
+                        // 判断当前流程在哪一步,以此决定报表展示
+                        if (subject.includes(item)) {
+                            // 数组下标+2为当前报表文件排序
+                            typeIndex = index + 2
+                        }
+                    })
+                }
+                console.log(typeIndex)
+                if (typeIndex !== '') {
+                    this.record.report = this.record.report.slice(0, typeIndex)
+                }
+                // console.log(this.record)
+                if (this.record.file.length && this.record.table.length) {
+                    this.getAllFile(this.record)
+                    return
+                }
+            },
+            // 获取所有附件
+            getAllFile({file, table, field, bizKey}) {
+                let resultList = []
+                table.forEach((item, index) => {
+                    let sql = `select ${file[index]} from ${item} where ${field.length && field[index] ? field[index] : 'id_'} = '${bizKey}'`
+                    resultList.push(this.getFile(sql, file[index]))
+                })
+                // console.log(resultList)
+                Promise.all(resultList).then(res => {
+                    // console.log('所有附件ID:', res)
+                    this.fileId = res.join(',')
+                }).catch(err => {
+                    console.log('error', err);
+                })
+            },
+            // 获取单个请求中的文件
+            getFile(sql, fileField) {
+                return new Promise((resolve, reject) => {
+                    curdPost('sql', sql).then(res => {
+                        let result = []
+                        let fileList = fileField.split(',')
+                        // console.log(fileList)
+                        let { data = [] } = res.variables || {}
+                        data = data.filter(i => i)
+                        data.forEach(item => {
+                            // 能获取到值说明文件字段只有一个
+                            if (item[fileField]) {
+                                result.push(this.getFileId(item[fileField]))
+                            } else if (fileList.length > 1) {
+                                // 否则文件字段为多个,需嵌套循环
+                                fileList.forEach(i => {
+                                    if (item[i]) {
+                                        result.push(this.getFileId(item[i]))
+                                    }
+                                })
+                            }
+                        })
+                        resolve(result.join(','))
+                    })
+                })
+            },
+            // 获取文件ID
+            getFileId(value) {
+                // 判断是否为图片类型,文件类型只存储文件ID,图片会以对象形式保存
+                if (value.includes('id')) {
+                    let result = []
+                    let temp = JSON.parse(value)
+                    temp.forEach(item => result.push(item.id))
+                    return result.join(',')
+                }
+                return value
+            },
+            // 打开报表
+            openReport(path, id) {
+                this.srcUrl = `${this.$reportPash.replace('show', 'pdf')}${path}&id_=${id}`
+                this.visible = true
+            },
             getParenthesesStr(text) {
                 let result = ''
                 if (!text) return result
-                let regex = /\((.+?)\)/g
-                let options = text.match(regex)
+                // 新数据年份、部门、发起人以{}包裹
+                let regex1 = /\{(.+?)\}/g
+                // 旧数据年份、部门、发起人以()包裹
+                let regex2 = /\((.+?)\)/g
+                let options1 = text.match(regex1)
+                let options2 = text.match(regex2)
+                let options = options1 && options1.length ? options1 : options2
                 if (options) {
                     let option = options[0]
                     if (option) {
@@ -291,73 +364,27 @@
                     if (options[1]) {
                         let yersOption = options[1]
                         if (yersOption) {
-                            result =
-                                result + '/' + yersOption.substring(1, yersOption.length - 1)
+                            result = result + '/' + yersOption.substring(1, yersOption.length - 1)
                         }
                     }
                 }
                 return result.split('/')
             },
-            /**
-             * 获取格式化参数
-             */
+            // 获取格式化参数
             getSearcFormData() {
                 const params = this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {}
-
                 if (this.$utils.isNotEmpty(this.typeId)) {
                     params['Q^TYPE_ID_^S'] = this.typeId
                 }
-
                 params['Q^status_^S'] = 'end'
-                let cont = ActionUtils.formatParams(
-                    params,
-                    this.pagination,
-                    this.sorts
-                )
-
-                cont.parameters.push({
-                    parameters: [
-                        {
-                            parameters: [
-                                {
-                                    key: 'Q^proc_Def_Key_^NE',
-                                    value: 'Process_08hbmhs',
-                                    param: 'name'
-                                }
-                            ]
-                        },
-                        {
-                            parameters: [
-                                {
-                                    key: 'Q^proc_Def_Key_^NE',
-                                    value: 'Process_0xlaidt',
-                                    param: 'name1'
-                                }
-                            ]
-                        },
-                        {
-                            parameters: [
-                                {
-                                    key: 'Q^proc_Def_Key_^NE',
-                                    value: 'Process_0ocg0f1',
-                                    param: 'name2'
-                                }
-                            ]
-                        }
-                    ]
-                })
-                return cont
+                return ActionUtils.formatParams(params, this.pagination, this.sorts)
             },
-            /**
-             * 处理分页事件
-             */
+            // 处理分页事件
             handlePaginationChange(page) {
                 ActionUtils.setPagination(this.pagination, page)
                 this.loadData()
             },
-            /**
-             * 处理排序
-             */
+            // 处理排序
             handleSortChange(sort) {
                 ActionUtils.setSorts(this.sorts, sort)
                 this.loadData()
@@ -365,48 +392,35 @@
             handleLinkClick(data, columns) {
                 this.handleEdit(data.id)
             },
-            /**
-             * 查询
-             */
+            // 查询
             search() {
+                if (this.isDisable) {
+                    this.$message.error('请勿快速点击!')
+                    return
+                }
                 this.loadData()
+                this.numbersClick()
             },
-            /* 防止多次快速查询*/
+            // 防止多次快速查询
             numbersClick() {
                 this.isDisable = true
                 setTimeout(() => {
                     this.isDisable = false
-                }, 600)
+                }, 1000)
             },
-            /**
-             * 处理按钮事件
-             */
+            // 处理按钮事件
             handleAction(command, position, selection, data) {
                 switch (command) {
                     case 'search': // 查询
                         ActionUtils.setFirstPagination(this.pagination)
                         this.search()
                         break
-                        // case 'resetSearch':
-                        // this.typeId = ''
-                        // this.tableTitle = ''
-                        // this.search()
-                        // break
                     case 'remove':
-                        let str = ''
-                        selection.forEach((item, index) => {
-                            if (index == 0) {
-                                str += item
-                            } else {
-                                str += ',' + item
-                            }
-                        })
                         let data = {}
                         data['tableName'] = 'ibps_bpm_inst_his'
-                        data['paramWhere'] = "{id_:'" + str + "'}"
-                        let this_ = this
-                        curdPost('batchDelete', data).then((response) => {
-                            this_.$message({
+                        data['paramWhere'] = "{id_:'" + selection.join(',') + "'}"
+                        curdPost('batchDelete', data).then(() => {
+                            this.$message({
                                 message: '删除成功!',
                                 type: 'warning'
                             })
@@ -426,21 +440,12 @@
             handleNodeClick(typeId, typeName) {
                 this.tableTitle = typeName.name
                 this.typeId = typeId
-                // console.log(typeId)
-                // 如果是特殊处理添加列表中的数据
-                if (!listTypeData[typeId]) {
-                    this.listType = ''
-                    this.loadData()
-                } else {
-                    this.listType = listTypeData[typeId]
-                }
+                this.loadData()
             },
             handleExpandCollapse(isExpand) {
                 this.width = isExpand ? 230 : 30
             },
-            /**
-             * 处理编辑
-             */
+            // 处理编辑
             handleEdit(id = '') {
                 this.instanceId = id
                 this.dialogFormVisible = true
@@ -478,7 +483,6 @@
                     flex-direction: column;
                     z-index: 999;
                 }
-
                 z-index: 999;
             }
             .content_butts {