1
lzhe
2025-08-10 1259d382f686ea81732953afc46e822fb45cf509
src/views/wel/index.vue
@@ -36,14 +36,17 @@
      </template> -->
      <template #name="{ row }">
        <span>{{row.name}}</span>
        <el-button :size="size" text v-if="row.nodeType != 70" icon="el-icon-setting" type="primary" placeholder="修改" @click="showEdit(row)" title="修改"></el-button>
        <!-- <el-button :size="size" text v-if="row.nodeType != 70" icon="el-icon-setting" type="primary" placeholder="修改" @click="showEdit(row)" title="修改"></el-button>
        <el-button :size="size" text v-if="row.nodeType != 10" icon="el-icon-delete" type="primary" @click="showDel(row)" placeholder="删除" title="删除"></el-button>
        <el-button :size="size" text v-if="row.nodeType != 60 && row.nodeType != 70" icon="el-icon-document-add" type="primary" @click="showAdd(row)" placeholder="新增子级" title="新增子级"></el-button>
        <el-button :size="size" text v-if="row.nodeType == 60 || row.nodeType == 50" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="文件上传" title="文件上传"></el-button>
        <el-button :size="size" text v-if="row.nodeType == 60 || row.nodeType == 50" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="文件上传" title="文件上传"></el-button> -->
        <!-- 涉密网才有 -->
        <el-button :size="size" text v-if="row.nodeType == 70 && isSM" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="升版" title="升版"></el-button>
        <!-- <el-button :size="size" text v-if="row.nodeType == 70 && isSM" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="升版" title="升版"></el-button> -->
        <!-- 工控网才有 -->
        <el-button :size="size" text v-if="row.nodeType == 70 && !isSM" icon="el-icon-position" type="primary" @click="downsend(row)" placeholder="下发" title="下发"></el-button>
        <!-- <el-button :size="size" text v-if="row.nodeType == 70 && !isSM" icon="el-icon-position" type="primary" @click="downsend(row)" placeholder="下发" title="下发"></el-button> -->
        <!-- 替换 -->
        <el-button :size="size" text v-if="row.nodeType == 60 && isSM" icon="el-icon-switch" type="primary" @click="replacement(row)" placeholder="替换" title="替换"></el-button>
        <!-- <el-icon><Switch /></el-icon> -->
      </template>
    </avue-crud>
    <!-- 新增节点 -->
@@ -66,17 +69,120 @@
    <template v-else-if="tabsType == 'tab3'">
        <div v-html="convertToHtml(fileContent)"></div>
    </template>
    <template v-else-if="tabsType == 'tab4'">
        <avue-crud :addBtn="false" :option="tabsFormOption4" :data="tabsForm4" ref="crud4" @selection-change="selectionChange">
          <template #menu-left>
            <el-button :size="size" type="primary" @click="comparison" :disabled="selectionList.length != 2">对比</el-button>
          </template>
        </avue-crud>
    </template>
    <el-dialog title="升版" append-to-body v-model="upgradeModal" width="500">
      <avue-form :option="upgradeModalOption" v-model="upgradeModalForm" @submit="upgradeSubmit" @reset-change="upgradeCancel"></avue-form>
    </el-dialog>
  </basic-container>
  <!-- 文件对比 -->
  <el-drawer title="文件对比" append-to-body v-model="diffBox" size="100%" class="code-box">
      <div>
          <code-diff :old-string="this.content1" :new-string="this.content2" output-format="side-by-side" :hideStat="true" :filename="codeDiffFileName1" :newFilename="codeDiffFileName2"/>
      </div>
  </el-drawer>
  <!-- 替换 -->
  <el-drawer title="替换" append-to-body v-model="todolistModel" size="100%" class="code-box">
    <div class="approve-box">
        <div class="left">
            <TodolistLeft :row="row" @selection-change="todoSelectionChange" />
        </div>
        <div class="right">
            <TodolistRightTop :row="row" />
            <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" />
        </div>
    </div>
  </el-drawer>
</template>
<script>
import { ElMessage } from 'element-plus';
import TodolistLeft from './components/TodolistLeft.vue';
import TodolistRightTop from './components/TodolistRightTop.vue';
export default {
  components: {
    TodolistLeft,
    TodolistRightTop
  },
  data() {
    let rejectText = '驳回';//+this.row.categoryName;
    return {
      replaceDataId: "",
      formApprove: {
        title: '',
        comment: '',
        approve: '', // 默认同意
        assignee: ''
      },
      optionApprove: {
        labelWidth: 100,
        column: [
          {
            label: '流程标题',
            prop: 'title',
            rules: [{ required: true, message: '请输入流程标题', trigger: 'blur' }],
          },
          {
            label: '发送给',
            prop: 'assignee',
            type: 'select',
            dicUrl: `/api/blade-mdm/flow/flow-user-list?deptId=0`,
            dicFlag: true,
            props: {
              label: 'name',
              value: 'id',
            },
            filterable: true,
            span: 24,
            disabled: false,
            rules: [{ required: true, message: '请选择', trigger: 'change' }],
          },
          {
              label: '工序版次',
              prop: 'processEdition',
              type: 'input',
              span: 24,
              // disabled: true,
              display: false,// 隐藏显示
              // rules: [{ required: true, message: '请选择下一审批用户', trigger: 'blur' }],
          },
          {
              label: '备注',
              span: 24,
              prop: 'comment',
              type: 'textarea',
              // rules: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
              rules: [
                  {
                  validator: (rule, value, callback) => {
                      console.log('-------',this.formApprove)
                      if (value === '' && this.formApprove.approve !== 'Y') {
                          callback(new Error('请输入备注'));
                      } else {
                          callback();
                      }
                  },
                  trigger: 'blur'
                  }
              ]
          },
        ],
      },
      applist: [],
      row: {},
      todolistModel: false,
      diffBox: false,
      content1: "",
      content2: "",
      codeDiffFileName1: "",
      codeDiffFileName2: "",
      selectionList: [],
      targetRow: {},
      upgradeModal: false,
      file: null,
@@ -122,6 +228,10 @@
          icon: 'el-icon-warning',
          label: '文件内容',
          prop: 'tab3'
        }, {
          icon: 'el-icon-warning',
          label: '历史记录',
          prop: 'tab4'
        }]
      },
      tabsFormOption: {
@@ -159,7 +269,7 @@
            placeholder: " "
          },
          {
            label: '最后修改时间',
            label: '修改时间',
            prop: 'updateTime',
            disabled: true,
            placeholder: " "
@@ -242,6 +352,22 @@
        current: 1,
        total: 0,
      },
      tabsFormOption4: {
        rowKey: "id",
        selection: true,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        searchBtn: false,
        emptyBtn: false,
        menu: false,
        column: [
          {label: '版本号',prop: 'versionNumber'},
          {label: '创建时间',prop: 'createTime'},
          {label: '创建人',prop: 'createUserName'},
        ]
      },
      tabsForm4: {},
      option: {
        highlightCurrentRow: true,
        rowKey: "id",
@@ -259,6 +385,12 @@
        menu: false,
        searchBtn: false,
        emptyBtn: false,
        refreshBtn: false,
        columnBtn: false,
        searchShowBtn: false,
        refreshBtn: false,
        copyBtn: false,
        gridBtn: false,
        column: [
          {
            label: '目录',
@@ -267,11 +399,29 @@
          },
          {
            label: '版本',
            prop: 'abc'
            prop: 'versionNumber',
         formatter: (val, value, label) => {
               if(val.nodeType == '60'){
               if(value==-1){
                  return '';
               }else{
                  return value;
               }
            }else{
               return '';
            }
         }
          },
          {
            label: '版次',
            prop: 'abc'
            prop: 'processEdition',
         formatter: (val, value, label) => {
               if(val.nodeType == '60'){
               return value;
            }else{
               return '';
            }
         }
          },
          {
            label: '描述',
@@ -285,12 +435,7 @@
            label: '设备',
            prop: 'machineCode'
          },
        /*
          {
            label: '固化状态',
            prop: 'abc'
          },
        */
          {
            label: '锁定状态',
            prop: 'isLocked',
@@ -309,7 +454,7 @@
            label: '流程状态',
            prop: 'flowStatus',
               formatter: (val, value, label) => {
                  if(val.nodeType != '70'){
                  if(val.nodeType != '60'){
                     //非程序节点
                     return '';
                  }else{
@@ -475,11 +620,77 @@
    }
  },
  watch: {
    uploadmodalBox(old) {
      //this.onLoad();
    }
  },
  methods: {
    handleSubmit(form, done) {
      //发起程序替换流程
      var obj = {
        title: this.formApprove.title,
        nodeId: this.id,
        tempInstanceId: this.replaceDataId,
        assignee: this.formApprove.assignee
      }
      axios({
        url: '/blade-mdm/flow/replace/start',
        method: 'post',
        data: obj
      }).then(
      resp => {
        this.$message({
          type: 'success',
          message: '操作成功!',
        });
        done();
        this.todolistModel = false;
      });
      // if(this.row.taskDefinitionKey === 'programmingTask') {
      //     // if(this.applist.length !== 1) {
      //     //     done();
      //     //     return this.$message.success('请选择1个程序');
      //     // }
      // }
      // approve({
      //     ...this.formApprove,
      //     taskId: this.row.taskId,
      //     processInstanceId: this.row.processInstanceId,
      //     // programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '',
      // }).then(res => {
      //     if(res.data.code !== 200) {
      //         this.$message.error(res.data.msg);
      //         done();
      //         return;
      //     }
      //     this.$message.success('审批成功');
      //     this.approveBox = false;
      //     this.onLoad(this.page, this.query);
      //     done();
      // }).catch(err => {
      //     done();
      //     console.error(err);
      // });
    },
    todoSelectionChange(applist) {
      this.applist = applist;
    },
    replacement(row) {  //替换
      this.id = row.id;
      this.formApprove = {
          comment: '',
          approve: 'Y', // 默认同
      }
      //准备程序替换流程
      axios({
        url: '/blade-mdm/flow/replace/prestart',
        method: 'post',
        params: {nodeId: row.id}
      }).then(
      resp => {
        this.row = row;
        this.replaceDataId = resp.data.data;
        this.todolistModel = true;
      });
    },
    convertToHtml(text) {
        return text.replace(/\r\n/g, '<br>');
    },
@@ -663,6 +874,11 @@
        this.tabsOption = this.tabsOption2;
        //获取文件list
        this.getFile(row.id);
        //获取历史记录
        this.getHistory(row.id);
        //清空对比记录
        this.content1 = "";
        this.content2 = "";
      }
      this.$nextTick(()=> {
        this.tabsType = 'tab1';
@@ -672,7 +888,7 @@
    tabsHandleChange(tabs) {
      this.tabsType = tabs.prop;
    },
    showUpload(row) {//获取文件内容
    showUpload(row) {//获取附件内容(暂时没用)
      this.fileList = [];
      this.uploadmodalForm = row;
      this.loading = true;
@@ -700,6 +916,39 @@
          this.fileContent = res.data.data;
        }
      );
    },
    getHistory(id) {  //查看历史记录
      this.loading = true;
      axios({
        url: '/blade-mdm/program/node/history-by-nodeid',
        method: 'get',
        params: {id},
      }).then(
        res => {
          this.loading = false;
          this.tabsForm4 = res.data.data;
        }
      );
    },
    comparison() { //对比
      this.loading = true;
      axios({
        url: '/blade-mdm/program/node/compare-content',
        method: 'get',
        params: {id1:this.selectionList[0].id,id2:this.selectionList[1].id},
      }).then(
        res => {
          this.loading = false;
          this.content1 = res.data.data.content1;
          this.content2 = res.data.data.content2;
          this.codeDiffFileName1 = this.selectionList[0].versionNumber;
          this.codeDiffFileName2 = this.selectionList[1].versionNumber;
          this.diffBox = true;
        }
      );
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    showEdit(row,done) {
      this.modalTitle = "修改";
@@ -894,10 +1143,28 @@
.highlight-row:hover {
  background-color: #e6f0ff !important;
}
.approve-box {
  display: flex;
  &>div {
      border: 1px solid #ccc;
  }
  .left {
      width: 400px;
  }
  .right {
      flex: 1;
  }
}
</style>
<style>
  .highlight-row {
    background-color: #f0f7ff;
    font-weight: bold;
  }
  .code-box .el-drawer__header {
    margin-bottom: 0;
  }
</style>