jinlin
2023-12-12 0dff85a422669f41ef6d8e88fa24bf26ca164cbd
修改
20个文件已修改
1个文件已添加
629 ■■■■■ 已修改文件
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/service/ConfigItemChangeService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/model/ConfigItemWarehouse.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemChange/ConfigItemChangeDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/configItemWarehouse/ConfigItemWarehouseDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/project/SoftwareTestOrderDao.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-dialog/src/zt-dialog.vue 426 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-table-column-handle/src/zt-table-column-handle.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/task/already-task.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/testCheckOrder/TestCheckOrder-AddOrUpdate.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/common/src/main/java/com/zt/common/entity/BaseEntity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/common/src/main/java/com/zt/common/entity/FlowInfo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/configItemChange/service/ConfigItemChangeService.java
@@ -69,7 +69,9 @@
     * @return
     */
    public List<ConfigItemChange> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
        List<ConfigItemChange> list= baseDao.getList(queryFilter.getQueryParams());
        workflowService.getRunFlow(list,"pzxbg");
        return list;
    }
    /**
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/model/ConfigItemWarehouse.java
@@ -26,8 +26,6 @@
    @ApiModelProperty(value = "项目ID")
    private Long projectId;
    @ApiModelProperty(value = "配置项入库编号")
    private String code;
modules/mainPart/src/main/java/com/zt/life/modules/configItemWarehouse/service/ConfigItemWarehouseService.java
@@ -76,7 +76,9 @@
     * @return
     */
    public List<ConfigItemWarehouse> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
        List<ConfigItemWarehouse> list= baseDao.getList(queryFilter.getQueryParams());
        workflowService.getRunFlow(list,"pzxrk");
        return list;
    }
    /**
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
@@ -4,6 +4,7 @@
import com.zt.common.service.BaseService;
import com.zt.life.export.dto.WordFile;
import com.zt.life.export.service.WordFileService;
import com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse;
import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderDao;
import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto;
import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder;
@@ -78,7 +79,9 @@
     * @return
     */
    public List<ItemCirculatOrder> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
        List<ItemCirculatOrder> list= baseDao.getList(queryFilter.getQueryParams());
        workflowService.getRunFlow(list,"pzxrk");
        return list;
    }
    /**
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/controller/TestCheckOrderController.java
@@ -61,7 +61,7 @@
            @ApiImplicitParam(name = "softwareName", value = "项目名称", dataType = Constant.QT.STRING, format = "p.software_name^LK"),
            @ApiImplicitParam(name = "pageCode", value = "配置项标识", dataType = Constant.QT.STRING, format = "a.page_code^LK")})
    public PageResult<TestCheckOrder> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
        List<TestCheckOrder> testCheckOrder =testCheckOrderService.page(queryFilter);
        List<TestCheckOrder> testCheckOrder = testCheckOrderService.page(queryFilter);
        return PageResult.ok(testCheckOrder);
    }
@@ -109,10 +109,10 @@
        return Result.ok();
    }
    /*@GetMapping("exportCheckOrder")
    @GetMapping("exportCheckOrder")
    @ApiOperation("打印测试环境建立确认表")
    @LogOperation("打印测试环境建立确认表")
    public void exportEnviron(Long id, HttpServletRequest request, HttpServletResponse response) {
        environService.exportEnviron(id, request, response);
    }*/
    public void exportCheckOrder(Long id, String pageCode, HttpServletRequest request, HttpServletResponse response) {
        testCheckOrderService.exportCheckOrder(id,pageCode, request, response);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/testCheckOrder/service/TestCheckOrderService.java
@@ -1,6 +1,9 @@
package com.zt.life.modules.testCheckOrder.service;
import cn.hutool.core.convert.Convert;
import com.zt.common.service.BaseService;
import com.zt.life.export.dto.WordFile;
import com.zt.life.export.service.WordFileService;
import com.zt.life.modules.configItemWarehouse.dto.ConfigItemWarehouseDto;
import com.zt.life.modules.configItemWarehouse.model.WarehouseCmAudit;
import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem;
@@ -8,6 +11,8 @@
import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto;
import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder;
import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical;
import com.zt.life.modules.mainPart.utils.GetFilesPath;
import com.zt.life.modules.mainPart.utils.GetShowDictList;
import com.zt.life.modules.project.model.Project;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.life.modules.testCheckOrder.dao.TestCheckOrderDao;
@@ -23,6 +28,10 @@
import com.zt.common.db.query.QueryFilter;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -44,10 +53,19 @@
    private ProjectService projectService;
    @Autowired
    private GetShowDictList getShowDictList;
    @Autowired
    private SysCodeRuleService sysCodeRuleService;
    @Autowired
    private WorkflowService workflowService;
    @Autowired
    private GetFilesPath getFilesPath;
    @Autowired
    private WordFileService wordFileService;
    /**
@@ -57,7 +75,9 @@
     * @return
     */
    public List<TestCheckOrder> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
        List<TestCheckOrder> list = baseDao.getList(queryFilter.getQueryParams());
        workflowService.getRunFlow(list, "csjcd");
        return list;
    }
    /**
@@ -133,4 +153,37 @@
        }
        return checkId;
    }
    public void exportCheckOrder(Long id, String pageCode, HttpServletRequest request, HttpServletResponse response) {
        try {
            CheckOrderDto dataObj = this.getDto(id, null, pageCode);
            String processorPath = "文件图片:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCheckOrder().getProcessorId()));
            dataObj.getCheckOrder().setProcessor(processorPath);
            String verifierPath = "文件图片:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCheckOrder().getVerifierId()));
            dataObj.getCheckOrder().setVerifier(verifierPath);
            //通用字典列表字符串生成
            for (TestCheckOrderList checkOrderList : dataObj.getCheckOrderList()) {
                String value = checkOrderList.getCheckResult();
                String checkResultStr = getShowDictList.getShowDictList(value, "tristate1", false);
                checkOrderList.setCheckResult(checkResultStr);
            }
            Map<String, String> map = new HashMap<>();
            map.put("plan", "计划");
            map.put("report", "报告");
            map.put("record", "记录");
            map.put("explain", "说明");
            String type = map.get(pageCode);
            dataObj.setPageCode(type);
            WordFile wordFile = new WordFile();
            wordFile.setModulePath("软件测试检查单.docx");
            wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_软件测试"+type+"检查单.docx");
            wordFileService.exportWordFile(request, dataObj, wordFile, response);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
modules/mainPart/src/main/resources/mapper/configItemChange/ConfigItemChangeDao.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.zt.life.modules.configItemChange.dao.ConfigItemChangeDao">
    <select id="getList" resultType="com.zt.life.modules.configItemChange.model.ConfigItemChange">
        select a.* ,p.*,p.CODE AS projectCode
        select a.* ,p.software_name,p.CODE AS projectCode
        from config_item_change a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
modules/mainPart/src/main/resources/mapper/configItemWarehouse/ConfigItemWarehouseDao.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.zt.life.modules.configItemWarehouse.dao.ConfigItemWarehouseDao">
    <select id="getList" resultType="com.zt.life.modules.configItemWarehouse.model.ConfigItemWarehouse">
        select a.* ,p.*,p.CODE AS projectCode
        select a.* ,p.software_name,p.CODE AS projectCode
        from config_item_warehouse a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderDao">
    <select id="getList" resultType="com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder">
        select a.*, p.*
        select a.*, p.software_name,p.software_identity
        from item_circulat_order a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
modules/mainPart/src/main/resources/mapper/project/EnvironDao.xml
@@ -3,7 +3,7 @@
<mapper namespace="com.zt.life.modules.project.dao.EnvironDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.Environ">
        SELECT a.*, p.*
        SELECT a.*, p.software_name,p.software_identity
        FROM environ a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
modules/mainPart/src/main/resources/mapper/project/SoftwareTestOrderDao.xml
@@ -4,7 +4,7 @@
<mapper namespace="com.zt.life.modules.project.dao.SoftwareTestOrderDao">
    <select id="getList" resultType="com.zt.life.modules.project.model.SoftwareTestOrder">
        SELECT a.*, p.*
        SELECT a.*, p.software_name,p.software_identity
        FROM software_test_order a
        INNER JOIN  project p ON p.id = a.project_id
        <where>
web/packages/components/zt-dialog/src/zt-dialog.vue
@@ -1,237 +1,237 @@
<template>
    <el-dialog
            v-dialogDrag
            :class="{'dialog-column-1': column === '1', 'dialog-column-2': column === '2', 'dialog-column-3': column === '3', 'dialog-column-4': column === '4'}"
            :visible.sync="visible"
            v-if="visible"
            :title="_title"
            :close-on-click-modal="false"
            :close-on-press-escape="false"
            :append-to-body="appendToBody"
            @open="onOpen"
            @close="onClose">
        <slot></slot>
        <template slot="footer">
          <template v-if="isView">
            <el-button type="info" @click="close()">{{ $t('close') }}</el-button>
          </template>
          <template v-else>
            <template v-if="stepMarker && stepMarker.indexOf('first')>0">
              <el-button type="warning" @click="formSubmit('zc')">暂存</el-button>
              <el-button type="warning" @click="formSubmit('tj')" v-if="">提交
              </el-button>
            </template>
            <template v-else-if="stepMarker">
              <el-button type="warning" @click="formSubmit('zc')">暂存</el-button>
              <el-button type="warning" @click="formSubmit('bl')">办理</el-button>
            </template>
            <el-button type="primary" @click="formSubmit('qd')" v-preventReClick v-else-if="editAble && hasConfirm">{{
                $t('confirm') }}
            </el-button>
            <el-button type="warning" @click="formSubmit('bc')" v-else-if="editAble">保存
            </el-button>
            <el-button @click="visible = false" v-if="editAble||stepMarker">{{ $t('cancel') }}</el-button>
            <el-button type="info" @click="close()" v-else>{{ $t('close') }}</el-button>
          </template>
            <slot name="footer"></slot>
  <el-dialog
    v-dialogDrag
    :class="{'dialog-column-1': column === '1', 'dialog-column-2': column === '2', 'dialog-column-3': column === '3', 'dialog-column-4': column === '4'}"
    :visible.sync="visible"
    v-if="visible"
    :title="_title"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    :append-to-body="appendToBody"
    @open="onOpen"
    @close="onClose">
    <slot></slot>
    <template slot="footer">
      <template v-if="isView">
        <el-button type="info" @click="close()">{{ $t('close') }}</el-button>
      </template>
      <template v-else>
        <template v-if="stepMarker && stepMarker.indexOf('first')>0">
          <el-button type="warning" @click="formSubmit('zc')">暂存</el-button>
          <el-button type="warning" @click="formSubmit('tj')" v-if="">提交
          </el-button>
        </template>
    </el-dialog>
        <template v-else-if="stepMarker">
          <el-button type="warning" @click="formSubmit('zc')">暂存</el-button>
          <el-button type="warning" @click="formSubmit('bl')">办理</el-button>
        </template>
        <el-button v-else-if="editAble && hasConfirm" type="primary" @click="formSubmit('qd')" v-preventReClick>{{
          $t('confirm') }}
        </el-button>
        <el-button v-else-if="editAble" type="warning" @click="formSubmit('bc')">保存
        </el-button>
        <el-button type="info" @click="visible = false" v-if="editAble||stepMarker">{{ $t('cancel') }}</el-button>
        <el-button type="info" @click="close()" v-else>{{ $t('close') }}</el-button>
      </template>
      <slot name="footer"></slot>
    </template>
  </el-dialog>
</template>
<script>
    import cloneDeep from 'lodash/cloneDeep'
  import cloneDeep from 'lodash/cloneDeep'
    export default {
        name: 'ZtDialog',
        props: {
            title: String,
            column: { // 几列
                type: String,
                default: '1'
            },
            stepMarker: {},
            appendToBody: {
                type: Boolean,
                default: false
            },
            hasConfirm: {
                type: Boolean,
                default: false
            },
            editAble: {
                type: Boolean,
                default: true
            },
            hasSubmit: {
                type: Boolean,
                default: false
            },
            hasSave: {
                type: Boolean,
                default: false
            }
        },
        data() {
            return {
                dataFormBack: null,
                visible: false,
                isView:true,
                //editAble: true // 是否可编辑
            }
        },
        computed: {
            _title() {
                if (this.title) {
                    return this.title
                } else if (!this.editAble) {
                    return this.$t('view')
                } else if (this.$parent.dataForm !== undefined) {
                    return !this.$parent.dataForm.id ? this.$t('add') : this.$t('update')
                }
            }
        },
        mounted() {
            this.dataFormBack = cloneDeep(this.$parent.dataForm)
        },
        methods: {
            init(id, row, isView) {
                this.$nextTick(() => {
                    // 清空表单校验
                    console.log(this.$parent.$refs.dataForm, id, row, isView, 'this.$parent.$refs.dataForm')
                    if (this.$parent.$refs.dataForm) { // dialog里面的form
                        this.$parent.$refs.dataForm.resetFields()
                    }
                    // this.editAble = isView !== true // 是否可编辑
                    // 设置dialog父页面初始化表单
                    this.$parent.dataForm = cloneDeep(this.dataFormBack)
                    if (this.$parent.dataForm) {
                        this.$parent.dataForm.id = id
                        this.$parent.dataForm.disabled = isView === true // 表单是否可编辑
                    }
                    if (this.$parent.init) {
                        console.log(id, row,this.stepMarker, 'id row')
                        this.$parent.init(id, row)
                    }
                    if (id && this.$parent.getInfo) {
                        this.$parent.getInfo()
                    }
                })
                this.open()
            },
            // 表单提交
            formSubmit(submitType) {
                let dataForm = this.$parent.$refs.dataForm
                if (dataForm) {
                    dataForm.validate(async valid => {
                        if (valid) {
                            this.$emit('confirm', submitType)
                        } else {
                            this.$nextTick(() => {
                                let isError = document.getElementsByClassName('is-error')
                                isError[0].scrollIntoView({
                                    // 滚动到指定节点
                                    // 值有start,center,end,nearest,当前显示在视图区域中间
                                    block: 'center',
                                    // 值有auto、instant,smooth,缓动动画(当前是慢速的)
                                    behavior: 'smooth'
                                })
                            })
                        }
                    })
                } else {
                    this.$emit('confirm', submitType)
                }
            },
            open() {
                this.visible = true
            },
            close() {
                this.visible = false
            },
            onOpen() {
                this.$emit('open')
            },
            onClose() {
                this.$emit('close')
            }
  export default {
    name: 'ZtDialog',
    props: {
      title: String,
      column: { // 几列
        type: String,
        default: '1'
      },
      stepMarker: {},
      appendToBody: {
        type: Boolean,
        default: false
      },
      hasConfirm: {
        type: Boolean,
        default: false
      },
      editAble: {
        type: Boolean,
        default: false
      },
      hasSubmit: {
        type: Boolean,
        default: false
      },
      hasSave: {
        type: Boolean,
        default: false
      }
    },
    data() {
      return {
        dataFormBack: null,
        visible: false,
        isView: false,
        //editAble: true // 是否可编辑
      }
    },
    computed: {
      _title() {
        if (this.title) {
          return this.title
        } else if (!this.editAble) {
          return this.$t('view')
        } else if (this.$parent.dataForm !== undefined) {
          return !this.$parent.dataForm.id ? this.$t('add') : this.$t('update')
        }
      }
    },
    mounted() {
      this.dataFormBack = cloneDeep(this.$parent.dataForm)
    },
    methods: {
      init(id, row, isView) {
        this.isView = isView
        this.$nextTick(() => {
          // 清空表单校验
          console.log(this.$parent.$refs.dataForm, id, row, isView, 'this.$parent.$refs.dataForm')
          if (this.$parent.$refs.dataForm) { // dialog里面的form
            this.$parent.$refs.dataForm.resetFields()
          }
          this.editAble = isView !== true // 是否可编辑
          this.$parent.dataForm = cloneDeep(this.dataFormBack)
          if (this.$parent.dataForm) {
            this.$parent.dataForm.id = id
            this.$parent.dataForm.disabled = isView === true // 表单是否可编辑
          }
          if (this.$parent.init) {
            console.log(id, row, this.stepMarker, 'id row')
            this.$parent.init(id, row)
          }
          if (id && this.$parent.getInfo) {
            this.$parent.getInfo()
          }
        })
        this.open()
      },
      // 表单提交
      formSubmit(submitType) {
        let dataForm = this.$parent.$refs.dataForm
        if (dataForm) {
          dataForm.validate(async valid => {
            if (valid) {
              this.$emit('confirm', submitType)
            } else {
              this.$nextTick(() => {
                let isError = document.getElementsByClassName('is-error')
                isError[0].scrollIntoView({
                  // 滚动到指定节点
                  // 值有start,center,end,nearest,当前显示在视图区域中间
                  block: 'center',
                  // 值有auto、instant,smooth,缓动动画(当前是慢速的)
                  behavior: 'smooth'
                })
              })
            }
          })
        } else {
          this.$emit('confirm', submitType)
        }
      },
      open() {
        this.visible = true
      },
      close() {
        this.visible = false
      },
      onOpen() {
        this.$emit('open')
      },
      onClose() {
        this.$emit('close')
      }
    }
  }
</script>
<style lang="scss" scoped>
    .dialog-column-1 {
        /deep/ .el-dialog {
            position: fixed;
            margin-top: 0 !important;
            top: 50% !important;
            left: 50% !important;
            transform: translate(-50%, -50%);
            width: 50%;
            /*margin-top:7vh !important;*/
            .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
                width: 75%;
            }
        }
  .dialog-column-1 {
    /deep/ .el-dialog {
      position: fixed;
      margin-top: 0 !important;
      top: 50% !important;
      left: 50% !important;
      transform: translate(-50%, -50%);
      width: 50%;
      /*margin-top:7vh !important;*/
      .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
        width: 75%;
      }
    }
  }
    .dialog-column-2 {
        /deep/ .el-dialog {
            width: 60%;
            position: fixed;
            margin-top: 0 !important;
            top: 50% !important;
            left: 50% !important;
            transform: translate(-50%, -50%);
  .dialog-column-2 {
    /deep/ .el-dialog {
      width: 60%;
      position: fixed;
      margin-top: 0 !important;
      top: 50% !important;
      left: 50% !important;
      transform: translate(-50%, -50%);
            .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
                width: 50%;
                float: left;
            }
        }
      .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
        width: 50%;
        float: left;
      }
    }
  }
    .dialog-column-3 {
        /deep/ .el-dialog {
            width: 75%;
            position: fixed;
            margin-top: 0 !important;
            top: 50% !important;
            left: 50% !important;
            transform: translate(-50%, -50%);
  .dialog-column-3 {
    /deep/ .el-dialog {
      width: 75%;
      position: fixed;
      margin-top: 0 !important;
      top: 50% !important;
      left: 50% !important;
      transform: translate(-50%, -50%);
            .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
                //width: 33.33333%;
                float: left;
            }
        }
      .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
        //width: 33.33333%;
        float: left;
      }
    }
  }
    .dialog-column-4 {
        /deep/ .el-dialog {
            width: 90%;
            position: fixed;
            margin-top: 0 !important;
            top: 50% !important;
            left: 50% !important;
            transform: translate(-50%, -50%);
  .dialog-column-4 {
    /deep/ .el-dialog {
      width: 90%;
      position: fixed;
      margin-top: 0 !important;
      top: 50% !important;
      left: 50% !important;
      transform: translate(-50%, -50%);
            .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
                //width: 33.33333%;
                float: left;
            }
        }
      .el-form > .el-form-item, .el-form .el-collapse-item__content > .el-form-item {
        //width: 33.33333%;
        float: left;
      }
    }
  }
    /deep/ .el-form {
        padding: 15px;
  /deep/ .el-form {
    padding: 15px;
        .item-line-divider {
            width: 100%;
            height: 0px;
            float: left;
        }
    .item-line-divider {
      width: 100%;
      height: 0px;
      float: left;
    }
  }
</style>
web/packages/components/zt-table-column-handle/src/zt-table-column-handle.vue
@@ -2,7 +2,7 @@
  <el-table-column fixed="right" :label="$t('handle')" header-align="center" align="center" :width="width" v-slot="{ row }">
    <slot :row="row"></slot>
    <zt-table-button v-if="isCanView(row)" type="default" @click="table.viewHandle(row)">{{ $t('view') }}</zt-table-button>
  <zt-table-button v-if="isCanEidt(row) && $hasPermission(editPerm)" type="primary" @click="table.editHandle(row)">{{ $t('update') }}</zt-table-button>
  <zt-table-button v-if="isCanEidt(row) && $hasPermission(editPerm) " type="primary" @click="table.editHandle(row)">{{ $t('update') }}</zt-table-button>
  <zt-table-button v-if="isCanDelete(row) && $hasPermission(deletePerm)" type="danger" @click="table.deleteHandle(row)">{{ $t('delete') }}</zt-table-button>
  </el-table-column>
</template>
@@ -41,10 +41,18 @@
        return typeof this.hasView === 'boolean' ? this.hasView : this.hasView(row)
      },
      isCanEidt(row) {
        return typeof this.hasEdit === 'boolean' ? this.hasEdit : this.hasEdit(row)
        if(row.flowInfo && row.flowInfo.bizId){
          return false
        }else {
          return typeof this.hasEdit === 'boolean' ? this.hasEdit : this.hasEdit(row)
        }
      },
      isCanDelete(row) {
        return typeof this.hasDelete === 'boolean' ? this.hasDelete : this.hasDelete(row)
        if(row.flowInfo && row.flowInfo.bizId){
          return false
        }else {
          return typeof this.hasDelete === 'boolean' ? this.hasDelete : this.hasDelete(row)
        }
      }
    }
  }
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse.vue
@@ -26,7 +26,7 @@
                <el-table-column prop="projectCode" label="项目编号"/>
                <el-table-column prop="softwareName" label="项目名称"/>
                <zt-table-column-dict prop="libraryType" label="库类型" dict="library_type"/>
              <zt-table-column-handle :table="table" edit-perm="configItemWarehouse:update" delete-perm="configItemWarehouse::delete"/>
              <zt-table-column-handle :table="table"  edit-perm="configItemWarehouse:update" delete-perm="configItemWarehouse::delete"/>
        </el-table>
        <!-- 弹窗, 新增 / 修改 -->
        <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/>
web/src/views/modules/sys/task/already-task.vue
@@ -189,19 +189,17 @@
      },
      check(row) {
        console.log(row, "task row");
        let row2 = cloneDeep(row)
        row2.stepMarker = null
        if (row.flowCode === 'wplz') {
          this.$nextTick(()=>{
            this.$refs.itemCirculatOrder.$refs.dialog.init(row2.bizId,row2)
            this.$refs.itemCirculatOrder.$refs.dialog.init(row.bizId,row, true)
          })
        } else if (row.flowCode === 'pzxrk') {
          this.$nextTick(()=>{
            this.$refs.configItemWarehouse.$refs.dialog.init(row2.bizId,row2)
            this.$refs.configItemWarehouse.$refs.dialog.init(row.bizId,row, true)
          })
        } else if (row.flowCode === 'csjcd') {
          this.$nextTick(()=>{
            this.$refs.testCheckOrder.$refs.dialog.init(row2.bizId,row2)
            this.$refs.testCheckOrder.$refs.dialog.init(row.bizId,row, true)
          })
        }
        else {
web/src/views/modules/testCheckOrder/TestCheckOrder-AddOrUpdate.vue
@@ -115,10 +115,16 @@
    <template v-slot:footer>
      <el-button v-if="dataForm.disabled" type="primary" @click="print()">打印</el-button>
    </template>
    <template v-slot:footer>
      <el-button v-if="dataForm.disabled" type="primary" @click="print()">打印</el-button>
    </template>
  </zt-dialog>
</template>
<script>
  import qs from "qs";
  import Cookies from "js-cookie";
  export default {
    data() {
      return {
@@ -202,6 +208,15 @@
        }
        console.log(this.dataForm,'this.dataForm this.dataForm')
      },
      async print(){
        var params = qs.stringify({
          token: Cookies.get('token'),
          id:this.dataForm.id,
          pageCode: this.pageCode
        })
        let apiURL = `/testCheckOrder/TestCheckOrder/exportCheckOrder`
        window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}`
      },
      // 表单提交
      async formSubmit(submitType) {
        let isFlow = false
zt/common/src/main/java/com/zt/common/entity/BaseEntity.java
@@ -24,4 +24,8 @@
    @ApiModelProperty("附件")
    @TableField(exist = false)
    private Map<String,String> accessoryMap;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目名称")
    private FlowInfo flowInfo;
}
zt/common/src/main/java/com/zt/common/entity/FlowInfo.java
New file
@@ -0,0 +1,30 @@
/**
 * Copyright (c) 2021 All rights reserved.
 *
 * 版权所有,侵权必究!
 */
package com.zt.common.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@ApiModel(value = "工作流任务WF_RUN_TASK")
@EqualsAndHashCode(callSuper=false)
public class FlowInfo {
    @ApiModelProperty(value = "")
    private Long bizId;
    @ApiModelProperty(value = "")
    private String stepMarker;
}
zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java
@@ -9,8 +9,8 @@
package com.zt.modules.workflow.dao;
import com.zt.common.dao.BaseDao;
import com.zt.common.entity.FlowInfo;
import com.zt.core.sys.model.SysUser;
import com.zt.modules.workflow.model.WfRunInstance;
import com.zt.modules.workflow.model.WfRunTask;
import com.zt.modules.workflow.dto.BizInfoDto;
import com.zt.modules.workflowconfig.model.WfDefStep;
@@ -99,4 +99,6 @@
    void setTaskPartFinish3(Long bizId, Long receiveDeptId, Integer status);
    void deleteFlowStep(@Param("wfIdCode") String wfIdCode, @Param("stepIdMark") String stepIdMark, @Param("bizId") Long bizId);
    List<FlowInfo> getRunFlow(Map<String, Object> params);
}
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
@@ -5,6 +5,9 @@
package com.zt.modules.workflow.service;
import cn.hutool.core.convert.Convert;
import com.zt.common.entity.BaseEntity;
import com.zt.common.entity.BusiEntity;
import com.zt.common.entity.FlowInfo;
import com.zt.common.service.BaseService;
import com.zt.common.utils.UUIDUtil;
import com.zt.core.context.UserContext;
@@ -27,6 +30,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 工作流服务
@@ -1021,4 +1025,20 @@
    public void deleteFlowStep(String wfIdCode, String stepIdMark, Long bizId){
        baseDao.deleteFlowStep(wfIdCode,stepIdMark,bizId);
    }
    public void getRunFlow(List<? extends BusiEntity> dataList, String flowCode) {
        List<Long> ids = dataList.stream().map(f -> f.getId()).collect(Collectors.toList());
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("bizIds", ids);
        params.put("flowCode", flowCode);
        List<FlowInfo> list = baseDao.getRunFlow(params);
        for (BaseEntity item : dataList) {
            List<FlowInfo> list2 = list.stream().filter(item2->item2.getBizId().equals(item.getId())).collect(Collectors.toList());
            if (list2.size()>0) {
                item.setFlowInfo(list2.get(0));
            }else{
                item.setFlowInfo(new FlowInfo());
            }
        }
    }
}
zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml
@@ -609,6 +609,22 @@
            AND `STATUS` = 0
            LIMIT 0,1
    </select>
    <select id="getRunFlow" resultType="com.zt.common.entity.FlowInfo">
        select * from (
                          select distinct(a.biz_id) biz_id, a.STEP_MARKER,b.STEP_NO
                          from wf_run_task a
                             ,wf_def_step b
                          where a.STEP_ID = b.id and a.FLOW_CODE ='${flowCode}'
                            <if test="bizIds != null">
                                and a.BIZ_ID in
                                <foreach item="item" collection="bizIds" open="(" separator="," close=")">
                                    #{item}
                                </foreach>
                            </if>
                          order by STEP_NO desc
                      ) c
        group by biz_id
    </select>
    <update id="updateConnect">
        update `wf_run_task`