ludc
2024-08-15 b19fab639f82d33776e58b541c17a17be75325e7
Merge remote-tracking branch 'origin/master'
已修改13个文件
1264 ■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/App.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/modeling/businessType/api.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/user.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/flow-cycle/flowchartEditor.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/page/index/top/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue 855 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue 121 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/lifeCycle/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/statusPool/index.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/department/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/App.vue
@@ -25,6 +25,9 @@
  height: 100%;
  overflow: hidden;
}
.el-menu--vertical .el-menu--popup-right-start{
  background: #ffffff !important;
}
.el-card__body {
  padding: 15px;
}
@@ -39,8 +42,14 @@
  margin-top: 0 !important;
}
.avue-dialog .el-dialog__body{
  padding: 20px 20px 30px 20px; // 上右下左
  margin-bottom: 20px !important;
  padding: 20px 20px 0px 20px; // 上右下左 取消表格下边距(会出现滚动条)
  margin-bottom: 10px !important;
}
.avue-dialog .el-dialog__body .avue-form{
  margin: 0px auto 40px; // 单独给对话框里的avue表单加上下边距
}
.avue-crud .avue-form {
  margin: 0px auto !important; // 表格内的表单(比如:搜索栏) 取消下边距
}
.avue--detail .el-col{
  margin-bottom: 0;
Source/plt-web/plt-web-ui/src/api/modeling/businessType/api.js
@@ -8,3 +8,12 @@
    params
  });
}
// 列表查询
export function addLifeCycle(params) {
  return request({
    url: "/api/btmTypeController/addBtmType",
    method: "post",
    data:params
  });
}
Source/plt-web/plt-web-ui/src/api/user.js
@@ -37,3 +37,12 @@
  });
}
// 退出登录
export function logout(params) {
  return request({
    url: "/api/framework/loginController/logout",
    method: "post",
    params
  });
}
Source/plt-web/plt-web-ui/src/components/flow-cycle/flowchartEditor.vue
@@ -25,7 +25,7 @@
          </div>
        </div>
        <div v-if="type !== 'detail'" class="vfe-chart-panel">
        <div  class="vfe-chart-panel">
          <div class="vfe-chart-panel-detail">
            <editor-detail-panel
              ref="EditorDetailPanel"
@@ -131,13 +131,13 @@
    onAfterChange(e) {
      console.log(e)
      try {
        if('edit' === this.$store.state.flow.type){
          this.$refs.flowChart.propsAPI.remove(e.item);
          if(e.action === 'remove'){
            this.$message.error('编辑状态下不能切换选中项!');
          }
          return;
        }
        // if('edit' === this.$store.state.flow.type){
        //   this.$refs.flowChart.propsAPI.remove(e.item);
        //   if(e.action === 'remove'){
        //     this.$message.error('编辑状态下不能切换选中项!');
        //   }
        //   return;
        // }
        // 如果添加了节点且节点没有被更改过
        if (e.action === "add" && e.model.type === "node") {
          if (!e.model.change) {
@@ -148,7 +148,6 @@
          }
        }
      } catch (err) {
        console.log(err)
        // 处理节点 ID 冲突错误
        if (
          err.message ===
Source/plt-web/plt-web-ui/src/page/index/top/index.vue
@@ -329,6 +329,7 @@
        type: "warning"
      }).then(() => {
        this.$store.dispatch("LogOut").then(() => {
          console.log('123');
          resetRouter();
          this.$router.push({path: "/login"});
        });
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
@@ -737,8 +737,12 @@
        row,
        this.$refs.userCrud,
        this.lastIndex,
        (newIndex) => { this.lastIndex = newIndex; },
        () => { this.selectList = []; }
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
@@ -1213,38 +1217,44 @@
        linkTypeName: "",
        rangeValue: ""
      };
      if (this.dialogTitle === 'add') {
        this.form.range = this.form.rangeValue.replace(/\n/g, ';');
        if (this.form.attributeSelectType === 'business') {
          this.form.btmTypeId = this.form.referValue;
        } else {
          this.form.linkTypeName = this.form.referValue;
        }
        addAttribute(this.form).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTableList();
            this.form = form;
            this.addVisible = false;
      this.$refs.form.validate((valid) => {
        if (valid) {
          if (this.dialogTitle === 'add') {
            this.form.range = this.form.rangeValue.replace(/\n/g, ';');
            if (this.form.attributeSelectType === 'business') {
              this.form.btmTypeId = this.form.referValue;
            } else {
              this.form.linkTypeName = this.form.referValue;
            }
            addAttribute(this.form).then(res => {
              if (res.data.code === 200) {
                this.$message.success(res.data.obj);
                this.getTableList();
                this.form = form;
                this.addVisible = false;
              }
            })
          }
        })
      }
      if (this.dialogTitle === 'edit') {
        this.form.range = this.form.rangeValue.replace(/\n/g, ';');
        if (this.form.attributeSelectType === 'business') {
          this.form.btmTypeId = this.form.referValue;
        } else {
          this.form.linkTypeName = this.form.referValue;
        }
        updateAttribute(this.form).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTableList();
            this.form = form;
            this.addVisible = false;
          if (this.dialogTitle === 'edit') {
            this.form.range = this.form.rangeValue.replace(/\n/g, ';');
            if (this.form.attributeSelectType === 'business') {
              this.form.btmTypeId = this.form.referValue;
            } else {
              this.form.linkTypeName = this.form.referValue;
            }
            updateAttribute(this.form).then(res => {
              if (res.data.code === 200) {
                this.$message.success(res.data.obj);
                this.getTableList();
                this.form = form;
                this.addVisible = false;
              }
            })
          }
        })
      }
        } else {
          return false;
        }
      });
    },
    // 导入
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
@@ -48,150 +48,556 @@
    </el-aside>
    <el-main>
      <basic-container>
        <div style="display: flex;justify-content: center">
          <div class="descBox">
            <el-descriptions  :column="1" border class="margin-top" size="medium" title="属性信息">
        <div style="display: flex;justify-content: center; height: 230px">
          <div class="descBox" style="max-height: 100px">
            <el-descriptions :column="1" border class="margin-top" size="medium" title="属性信息">
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.name"></i>
                  名称
                </template>
                <el-tag v-if="nodeRow.id">{{ nodeRow.id }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  标签
                </template>
                <el-tag v-if="nodeRow.name">{{ nodeRow.name }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.label"></i>
                  标签
                </template>
                <el-tag v-if="nodeRow.label">{{ nodeRow.label }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.implClass"></i>
                  实现类
                </template>
                <el-tooltip class="item" effect="dark" :content="nodeRow.implClass" placement="top-start">
                  <el-tag v-if="nodeRow.implClass">{{ nodeRow.implClass }}</el-tag>
                <el-tooltip v-if="nodeRow.implClass" :content="nodeRow.implClass" class="item" effect="dark"
                            placement="top-start">
                  <el-tag style="max-width: 250px;overflow: hidden">{{ nodeRow.implClass }}
                  </el-tag>
                </el-tooltip>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.desc"></i>
                  描述
                </template>
                <el-tag v-if="nodeRow.description">{{ nodeRow.description }}</el-tag>
                <span v-if="nodeRow.description">{{ nodeRow.description }}</span>
              </el-descriptions-item>
            </el-descriptions>
          </div>
          <div class="descBox">
            <el-descriptions  :column="1" border class="margin-top" size="medium" title="属性信息">
            <el-descriptions :column="1" border class="margin-top" size="medium" title="版本规则">
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.name"></i>
                  名称
                  版本规则
                </template>
                <el-tag v-if="nodeRow.name">{{ nodeRow.name }}</el-tag>
                <el-tag v-if="nodeRow.revLevel"
                        :type="nodeRow.revLevel === '0' ? 'warning' : nodeRow.revLevel === '1' ? '' : 'success'">
                  {{
                    nodeRow.revLevel === '0'
                      ? '不可修订'
                      : nodeRow.revLevel === '1'
                      ? '采用一级版本管理'
                      : '采用二级版本管理'
                  }}
                </el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
              <el-descriptions-item v-if="nodeRow.revLevel !== '0'" :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.label"></i>
                  标签
                  版本号规则
                </template>
                <el-tag v-if="nodeRow.label">{{ nodeRow.label }}</el-tag>
                <el-tag v-if="nodeRow.revisionRuleId">{{ nodeRow.revisionRuleId }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
              <el-descriptions-item v-if="nodeRow.revLevel !== '0'" :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.implClass"></i>
                  实现类
                  分隔符
                </template>
                <el-tag v-if="nodeRow.implClass">{{ nodeRow.implClass }}</el-tag>
                <el-tag v-if="nodeRow.delimiter">{{ nodeRow.delimiter }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
              <el-descriptions-item v-if="nodeRow.revLevel !== '0' && nodeRow.revLevel !== '1'"
                                    :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.desc"></i>
                  描述
                  版次号规则
                </template>
                <el-tag v-if="nodeRow.description">{{ nodeRow.description }}</el-tag>
                <el-tag v-if="nodeRow.revisionRuleId"
                        :type="nodeRow.revisionRuleId === '0' ? 'warning' : nodeRow.revisionRuleId === '1' ? '' : 'success'">
                  {{
                    nodeRow.versionRule === '0'
                      ? '1.2.3...'
                      : nodeRow.versionRule === '1'
                      ? 'a.b.c...'
                      : '0.1.2...'
                  }}
                </el-tag>
              </el-descriptions-item>
            </el-descriptions>
          </div>
          <div class="descBox">
            <el-descriptions  :column="1" border class="margin-top" size="medium" title="属性信息">
            <el-descriptions :column="1" border class="margin-top" size="medium" title="生命周期">
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.name"></i>
                  名称
                  生命周期
                </template>
                <el-tag v-if="nodeRow.name">{{ nodeRow.name }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.label"></i>
                  标签
                </template>
                <el-tag v-if="nodeRow.label">{{ nodeRow.label }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.implClass"></i>
                  实现类
                </template>
                <el-tag v-if="nodeRow.implClass">{{ nodeRow.implClass }}</el-tag>
              </el-descriptions-item>
              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                    :labelStyle="descriptionOption.labelStyle">
                <template slot="label">
                  <i :class="icons.desc"></i>
                  描述
                </template>
                <el-tag v-if="nodeRow.description">{{ nodeRow.description }}</el-tag>
                <el-tag v-if="nodeRow.lifeCycleId">{{ nodeRow.lifeCycleId }}</el-tag>
              </el-descriptions-item>
            </el-descriptions>
          </div>
        </div>
        <div style="margin-top: 30px">
          <h3>属性列表</h3>
          <avue-crud
            :data="attrData"
            :option="attrOption">
          </avue-crud>
        </div>
      </basic-container>
    </el-main>
    <!-- 新增 && 编辑 -->
    <el-dialog
      v-dialogDrag
      :title="title === 'add' ? '创建' : '修改'"
      :visible.sync="visible"
      append-to-body="true"
      class="avue-dialog"
      width="75%"
      @close="addDialogClose">
      <el-form ref="form" :model="form" :rules="rules" label-width="95px">
        <div class="dialogForm">
          <div class="leftForm">
            <el-form-item label="类型名称:" prop="id">
              <el-input v-model="form.id" :readOnly="title === 'edit'"></el-input>
            </el-form-item>
            <el-form-item label="标签:">
              <el-input v-model="form.name"></el-input>
            </el-form-item>
            <el-form-item label="继承自:">
              <el-input v-model="form.fName" :readOnly="title === 'edit'"></el-input>
            </el-form-item>
            <el-form-item label="实现类:">
              <el-input v-model="form.implClass"></el-input>
            </el-form-item>
            <el-form-item label="描述">
              <el-input v-model="form.description" :rows="2" type="textarea"></el-input>
            </el-form-item>
          </div>
          <div class="centerForm">
            <el-form-item label="版本规则:" label-width="110px" prop="revLevel">
              <el-select v-model="form.revLevel">
                <el-option label="不可修订" value="0"></el-option>
                <el-option label="采用一级版本管理" value="1"></el-option>
                <el-option label="采用二级版本管理" value="2"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item v-if="form.revLevel !== '0'" label="版本号规则:" label-width="110px" prop="revisionRuleName">
              <div style="display: flex;gap: 5px;align-items: center">
                <el-input v-model="form.revisionRuleId" :readOnly="true"></el-input>
                <el-button plain size="small" style="margin-left: 5px;height: 30px" type="success"
                           @click="versionAddHandler">添加
                </el-button>
                <el-switch
                  v-model="form.inputRevisionFlag"
                  active-text="手工输入"
                  style="width: 300px">
                </el-switch>
              </div>
            </el-form-item>
            <el-form-item v-if="form.revLevel !== '0'" label="分隔符:" label-width="110px" prop="delimiter">
              <el-select v-model="form.delimiter" clearable>
                <el-option label="." value="."></el-option>
                <el-option label="-" value="-"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item v-if="form.revLevel !== '0' && form.revLevel !== '1'" label="版次号规则:" label-width="110px"
                          prop="revLevel">
              <el-select v-model="form.versionRule" clearable>
                <el-option label="1.2.3..." value="0"></el-option>
                <el-option label="a.b.c..." value="1"></el-option>
                <el-option label="0.1.2..." value="2"></el-option>
              </el-select>
            </el-form-item>
          </div>
          <div class="rightForm">
            <el-form-item label="生命周期:" label-width="138px" prop="lifeCycleId">
              <div style="display: flex;gap: 5px;align-items: center">
                <el-input v-model="form.lifeCycleId" :readOnly="true"></el-input>
                <el-button plain size="small" style="margin-left: 5px;height: 30px" type="success"
                           @click="lifeAddHandler('input')">添加
                </el-button>
              </div>
            </el-form-item>
            <el-form-item label="备选生命周期列表:" label-width="138px">
              <div style="display: flex; align-items: center">
                <div style="height: 200px; width: 280px; border: 1px solid #bdbbbb;overflow-y: auto">
                  <!-- 内容 -->
                  <el-table
                    :data="dialogLifeTable"
                    :show-header="false"
                    style="width: 100%">
                    <el-table-column
                      align="center"
                      prop="id">
                    </el-table-column>
                    <el-table-column
                      fixed="right"
                      label="操作"
                      width="60">
                      <template slot-scope="scope">
                        <el-button
                          size="small"
                          style="color:#F56C6C;"
                          type="text"
                          @click.native.prevent="dialogDeleteLifeTable(scope.$index)">
                          移除
                        </el-button>
                      </template>
                    </el-table-column>
                  </el-table>
                </div>
                <el-button plain size="mini" style="margin-left: 5px" type="success"
                           @click="lifeAddHandler('table')">添加
                </el-button>
              </div>
            </el-form-item>
          </div>
        </div>
      </el-form>
      <div class="bottomForm">
        <h3>属性池列表</h3>
        <avue-crud
          :data="dialogAttrData"
          :option="dialogAttrOption">
          <template slot="menuLeft">
            <el-button icon="el-icon-plus" size="small" type="primary" @click="addDialogClickHandler">创建</el-button>
          </template>
        </avue-crud>
      </div>
      <span slot="footer" class="dialog-footer">
         <el-button @click="addDialogClose">取 消</el-button>
         <el-button type="primary" @click="addDialogSavaHandler">确 定</el-button>
        </span>
    </el-dialog>
    <!-- 属性池添加 -->
    <el-dialog
      v-dialogDrag
      :visible.sync="attrPollDialogVisible"
      append-to-body="true"
      class="avue-dialog"
      title="属性池"
      width="60%"
      @close="dialogAttrClose"
    >
      <avue-crud
        :key="dialogAttrReload"
        ref="dialogAttrCrud"
        :data="dialogAttrSaveData"
        :option="dialogAttrSaveOption"
        :page.sync="attrPage"
        :table-loading="dialogAttrLoading"
        @selection-change="dialogAttrSelectChange"
        @row-click="dialogAttrRowClickHandler"
        @size-change="attrSizeChange"
        @current-change="attrCurrentChange"
        @search-change="attrHandleSearch"
        @search-reset="attrHandleReset"
      >
      </avue-crud>
      <span slot="footer" class="dialog-footer">
         <el-button @click="dialogAttrClose">取 消</el-button>
         <el-button type="primary" @click="dialogAttrAddClickHandler">确 定</el-button>
        </span>
    </el-dialog>
    <el-dialog
      v-dialogDrag
      :visible.sync="dialogVersionVisible"
      append-to-body="true"
      class="avue-dialog"
      title="版本号规则"
      width="60%"
    >
      <avue-crud
        :key="dialogVersionKey"
        ref="dialogAttrCrud"
        :data="dialogVersionData"
        :option="dialogVersionOption"
        :table-loading="dialogVersionLoading"
        @row-click="dialogVersionRowClick"
        @search-change="versionHandleSearch"
        @search-reset="versionHandleReset"
      >
      </avue-crud>
      <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVersionVisible = false">取 消</el-button>
         <el-button type="primary" @click="dialogVersionAddClickHandler">确 定</el-button>
        </span>
    </el-dialog>
    <!-- 生命周期 -->
    <el-dialog
      v-dialogDrag
      :visible.sync="dialogLfeVisible"
      append-to-body="true"
      class="avue-dialog"
      title="生命周期模板"
      width="60%"
    >
      <avue-crud
        :key="dialogLifeKey"
        ref="dialogAttrCrud"
        :data="dialogLifeData"
        :option="dialogLifeOption"
        :table-loading="dialogLifeLoading"
        @row-click="dialogLifeRowClick"
        @search-change="lifeHandleSearch"
        @search-reset="lifeHandleReset"
      >
      </avue-crud>
      <span slot="footer" class="dialog-footer">
         <el-button @click="dialogLfeVisible = false">取 消</el-button>
         <el-button type="primary" @click="dialogLifeAddClickHandler">确 定</el-button>
        </span>
    </el-dialog>
  </el-container>
</template>
<script>
import {getBizTypes} from "@/api/modeling/businessType/api"
import basicOption from '@/util/basic-option'
import {getBizTypes, addLifeCycle} from "@/api/modeling/businessType/api"
import {gridAttribute} from "@/api/modeling/attributePool/api";
import func from "@/util/func";
import {getVersionRuleAllList} from "@/api/modeling/version/api";
import {gridLifeCycle} from "@/api/modeling/lifeCycle/api";
export default {
  name: "index",
  data() {
    return {
      form:{
      dialogLifeDefalutData: [], // 查询重置默认数据
      lifeType: '',
      dialogLifeTable: [],
      dialogLifeSaveRow: {},
      dialogLifeKey: Math.random(),
      dialogLifeData: [],
      dialogLifeOption: {
        ...basicOption,
        addBtn: false,
        selection: false,
        refreshBtn: false,
        menu: false,
        height: 450,
        searchMenuSpan: 8,
        highlightCurrentRow: true,
        column: [
          {
            label: '生命周期模板名',
            prop: 'id',
            searchLabelWidth: 120,
            search: true
          }
        ]
      },
      nodeRow:{},
      dialogLifeLoading: false,
      dialogLfeVisible: false,
      dialogVersionDefalutData: [], // 查询重置默认数据
      dialogSwitchValue: false,
      dialogVersionSaveRow: {},
      dialogVersionVisible: false,
      dialogVersionKey: Math.random(),
      dialogVersionData: [],
      dialogVersionOption: {
        ...basicOption,
        addBtn: false,
        selection: false,
        refreshBtn: false,
        menu: false,
        height: 450,
        searchMenuSpan: 8,
        highlightCurrentRow: true,
        // calcHeight: 100,
        column: [
          {
            label: '版本号规则',
            prop: 'id',
            searchLabelWidth: 110,
            search: true
          }
        ]
      },
      dialogVersionLoading: false,
      dialogAttrSelectList: [],
      searchAttrParams: {},
      dialogAttrLoading: false,
      dialogAttrReload: Math.random(),
      attrPage: {
        currentPage: 1,
        pageSize: 30,
        total: 0,
        pageSizes: [30, 50, 100, 200],
      },
      dialogAttrSaveOption: {
        ...basicOption,
        addBtn: false,
        menu: false,
        refreshBtn: false,
        index: false,
        highlightCurrentRow: true,
        height: 450,
        searchMenuSpan: 8,
        column: [
          {
            label: '属性名',
            prop: 'id',
            sortable: true,
            search: true,
          },
          {
            label: '属性类型',
            prop: 'attributeDataType',
            sortable: true,
          },
          {
            label: '初始值',
            prop: 'defaultValue',
            sortable: true,
          },
          {
            label: '说明',
            prop: 'description',
            sortable: true,
            overHidden: true
          }
        ]
      },
      dialogAttrSaveData: [],
      attrPollDialogVisible: false,
      rules: {
        id: [
          {required: true, message: '请输类型名称', trigger: 'blur'},
          {validator: this.validateEnglishOnly, trigger: 'blur'}
        ],
        revLevel: [
          {required: true, message: '请选择版本规则', trigger: 'blur'},
        ],
        lifeCycleId: [
          {required: true, message: '请选择生命周期', trigger: 'blur'},
        ]
      },
      dialogAttrData: [],
      dialogAttrOption: {
        ...basicOption,
        editBtn: false,
        refreshBtn: false,
        selection: false,
        height: 210,
        addBtn: false,
        // index:false,
        column: [
          {
            label: '属性名',
            prop: 'id',
            sortable: true,
          },
          {
            label: '属性类型',
            prop: 'attributeDataType',
            sortable: true,
          },
          {
            label: '初始值',
            prop: 'defaultValue',
            sortable: true,
          },
          {
            label: '说明',
            prop: 'description',
            overHidden: true
          }
        ]
      },
      title: '',
      visible: false,
      attrData: [],
      attrOption: {
        ...basicOption,
        calcHeight: -40,
        addBtn: false,
        menu: false,
        index: false,
        selection: false,
        refreshBtn: false,
        column: [
          {
            prop: 'id',
            label: '属性名',
            sortable: true
          },
          {
            prop: 'btmTypeId',
            label: '业务类型',
            sortable: true
          },
          {
            prop: 'attrDataType',
            label: '属性类型',
            sortable: true
          },
          {
            prop: 'defaultValue',
            label: '默认值',
            sortable: true
          },
          {
            prop: 'description',
            label: '说明',
            overHidden: true
          }
        ]
      },
      form: {
        id: '', // 类型名称
        name: '', // 标签
        fName: '', // 继承自
        implClass: '', // 实现类
        description: '', // 描述
        revLevel: '', // 版本规则
        revisionRuleId: '',// 版本号规则
        inputRevisionFlag: false, // 手工输入
        versionRule: '', // 版次号规则
        lifeCycleId: '', // 生命周期
        subLifeCycleId: '', // 生命周期备选列表,
        apNameArray: "", // 属性池列表’,‘分隔
      },
      nodeRow: {},
      treeOption: {
        height: 'auto',
        defaultExpandAll: false,
        menu: false,
        addBtn: false,
        props: {
          label: 'name',
          value: 'name',
          label: 'id',
          value: 'id',
          children: 'children'
        }
      },
      treeData: [],
      descriptionOption: {
        labelStyle: 'text-align:center;min-width:80px;',
        contentStyle: 'width:200px;text-align:center;word-break;break-all;'
        labelStyle: 'text-align:center;width:100px;',
        contentStyle: 'max-width:200px;text-align:center;word-break;break-all;'
      },
      icons: {
        id: 'el-icon-finished',
@@ -204,6 +610,7 @@
    this.getTreeList();
  },
  methods: {
    //树表查询
    getTreeList() {
      getBizTypes().then(res => {
        const data = res.data.data.map(item => {
@@ -214,16 +621,303 @@
    },
    // 树点击
    nodeClick(row){
      console.log(row);
    nodeClick(row) {
      this.attrData = JSON.parse(row.attributes);
      this.nodeRow = row;
    },
    // 创建按钮
    addClickHandler() {
      this.title = 'add';
      this.visible = true;
    },
    // 对话框 属性池列表增加按钮
    addDialogClickHandler() {
      this.dialogAttrLoading = true;
      this.attrPollDialogVisible = true;
      this.dialogAttrReload = Math.random(); // 强制刷新表格 解决表格错行
      this.getAttrDialogDta();
    },
    // 查询属性池列表数据
    getAttrDialogDta() {
      gridAttribute(this.attrPage.currentPage, this.attrPage.pageSize, this.searchAttrParams).then(res => {
        const data = res.data.data;
        this.dialogAttrSaveData = data;
        this.attrPage.total = res.data.total;
        this.dialogAttrLoading = false;
      }).catch(err => {
        this.$message.error(err);
      });
    },
    // 新增属性池列表关闭对话框
    dialogAttrClose() {
      this.attrPollDialogVisible = false;
      this.searchAttrParams = {};
    },
    // 添加属性池表格选择框
    dialogAttrSelectChange(row) {
      this.dialogAttrSelectList = row;
    },
    // 添加属性池 行点击
    dialogAttrRowClickHandler(row) {
      func.rowClickHandler(
        row,
        this.$refs.dialogAttrCrud,
        this.attrLastIndex,
        (newIndex) => {
          this.attrLastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
    //添加属性池 条数
    attrSizeChange(val) {
      this.attrPage.pageSize = val;
      this.getAttrDialogDta()
    },
    //添加属性池 页码
    attrCurrentChange(val) {
      this.attrPage.currentPage = val;
      this.getAttrDialogDta();
    },
    //添加属性池 搜索
    attrHandleSearch(params, done) {
      if (func.isEmptyObject(params)) {
        this.searchAttrParams = {};
      } else {
        this.searchAttrParams = {
          "conditionMap[id]": "*" + params.id + "*"
        };
      }
      this.getAttrDialogDta();
      done();
    },
    //添加属性池 清空搜索
    attrHandleReset() {
      this.searchAttrParams = {};
      this.getAttrDialogDta();
    },
    // 添加属性池 保存
    dialogAttrAddClickHandler() {
      let hasDuplicate = false;
      // 先创建一个临时数组来存储不重复的项
      const newItems = [];
      this.dialogAttrSelectList.forEach(item => {
        const exists = this.dialogAttrData.some(existingItem => existingItem.id === item.id);
        if (exists) {
          hasDuplicate = true;
          return;
        }
        // 如果没有重复项,则将该项添加到临时数组中
        newItems.push({
          id: item.id,
          attributeDataType: item.attributeDataType,
          defaultValue: item.defaultValue,
          description: item.description
        });
      });
      if (hasDuplicate) {
        this.$message.error('请检查是否有添加重复项!');
      } else {
        // 如果没有重复项,将新项添加到 dialogAttrData
        this.dialogAttrData.push(...newItems);
        this.attrPollDialogVisible = false;
      }
    },
    // 版本规则管理添加
    versionAddHandler() {
      this.dialogVersionVisible = true;
      this.dialogVersionKey = Math.random(); // 打开时刷新表格避免表格错行
      this.dialogVersionLoading = true;
      getVersionRuleAllList().then(res => {
        const data = res.data.data.map(item => {
          return {
            id: item.id
          }
        });
        this.dialogVersionData = data;
        this.dialogVersionDefalutData = data;
        this.dialogVersionLoading = false;
      }).catch(err => {
        this.$message.error(err)
      });
    },
    // 版本规则行点击
    dialogVersionRowClick(row) {
      this.dialogVersionSaveRow = row;
    },
    // 版本规则搜索
    versionHandleSearch(params, done) {
      const {id} = params;
      if (!params.id) {
        this.dialogVersionData = this.dialogVersionDefalutData;
        return done();
      }
      ;
      this.dialogVersionData = this.dialogVersionDefalutData.filter(item => {
        return item.id && item.id.includes(id);
      });
      done();
    },
    // 版本管理置空
    versionHandleReset() {
      this.dialogVersionData = this.dialogVersionDefalutData;
    },
    // 版本号规则保存
    dialogVersionAddClickHandler() {
      if (func.isEmptyObject(this.dialogVersionSaveRow)) {
        this.$message.error('请至少选择一条数据');
        return;
      }
      this.form.revisionRuleId = this.dialogVersionSaveRow.id;
      this.dialogVersionVisible = false;
    },
    // 生命周期新增
    lifeAddHandler(val) {
      this.dialogLfeVisible = true;
      this.dialogLifeKey = Math.random(); // 打开时刷新表格避免表格错行
      this.dialogLifeLoading = true;
      this.lifeType = val;
      gridLifeCycle().then(res => {
        const data = res.data.data.map(item => {
          return {
            id: item.id
          }
        });
        this.dialogLifeData = data;
        this.dialogLifeDefalutData = data;
        this.dialogLifeLoading = false
      }).catch(err => {
        this.$message.error(err)
      });
    },
    // 生命周期行点击
    dialogLifeRowClick(row) {
      this.dialogLifeSaveRow = row;
    },
    // 生命周期保存
    dialogLifeAddClickHandler() {
      if (func.isEmptyObject(this.dialogLifeSaveRow)) {
        this.$message.error('请至少选择一条数据');
        return;
      }
      if (this.lifeType === 'input') {
        this.form.lifeCycleId = this.dialogLifeSaveRow.id;
      } else {
        const flag = this.dialogLifeTable.some(item => item.id === this.dialogLifeSaveRow.id);
        if (flag) {
          this.$message.error('已存在相同的数据,请添加其他数据');
          return;
        }
        this.dialogLifeTable.push(this.dialogLifeSaveRow);
      }
      this.dialogLfeVisible = false;
    },
    // 生命周期备选列表移除
    dialogDeleteLifeTable(index) {
      this.dialogLifeTable.splice(index, 1)
    },
    // 生命周期搜索
    lifeHandleSearch(params, done) {
      const {id} = params;
      if (!params.id) {
        this.dialogLifeData = this.dialogLifeDefalutData;
        return done();
      }
      ;
      this.dialogLifeData = this.dialogLifeDefalutData.filter(item => {
        return item.id && item.id.includes(id);
      });
      done();
    },
    // 生命周期重置
    lifeHandleReset() {
      this.dialogLifeData = this.dialogLifeDefalutData;
    },
    // 只能输入英文正则校验
    validateEnglishOnly(rule, value, callback) {
      if (!value) {
        return callback(new Error('请输入类型名称'));
      }
      if (!/^[A-Za-z]+$/.test(value)) {
        return callback(new Error('只能输入英文字母'));
      }
      callback(); // 验证通过
    },
    // 新增编辑保存
    addDialogSavaHandler() {
      console.log(this.form)
      this.$refs.form.validate((valid) => {
        if (valid) {
          addLifeCycle(this.form).then(res => {
            console.log(res);
          })
        } else {
          return false;
        }
      });
      this.$refs.form.validate((valid) => {
        if (valid) {
        } else {
          return false;
        }
      });
    }
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .avue-dialog .el-dialog__body {
    padding: 20px 20px 0px 20px; // 上右下左
    margin-bottom: 10px !important;
  }
  .el-scrollbar__wrap {
    overflow: auto !important;
  }
@@ -276,8 +970,23 @@
  text-align: center;
  padding-left: 4.5px;
}
.descBox{
.descBox {
  width: 32%;
  margin-left: 20px;
}
.dialogForm {
  display: flex;
  justify-content: space-around;
}
.dialogForm > div {
  width: 29%;
  border: 1px solid #eee;
  padding: 25px 20px 5px 10px; /* 上 右 下 左 */
  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* 添加阴影效果 */
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue
@@ -84,9 +84,9 @@
          </el-form>
          <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="rowSaveHandler">确 定</el-button>
        <el-button @click="dialogVisible = false">取 消</el-button>
      </span>
            <el-button @click="dialogVisible = false">取 消</el-button>
            <el-button type="primary" @click="rowSaveHandler">确 定</el-button>
          </span>
        </el-dialog>
        <!-- 查看使用范围    -->
@@ -243,6 +243,7 @@
      dialogData: [],
      dialogOption: {
        ...basicOption,
        calcHeight: 50,
        refreshBtn: false,
        selection: false,
        column: [
@@ -376,8 +377,12 @@
        row,
        this.$refs.userCrud,
        this.lastIndex,
        (newIndex) => { this.lastIndex = newIndex; },
        () => { this.selectList = []; }
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
@@ -472,61 +477,67 @@
    // 对话框枚举保存
    rowSaveHandler() {
      const lengthStatus = this.dialogData.some(item => item.value.length > this.form.length)
      if (lengthStatus) {
        this.$message.error('请检查枚举值是否超过最大长度!')
        return;
      }
      if (this.form.enumValueDataType === "Integer") {
        // 判断是否包含非数字字符
        const integerStatus = this.dialogData.some(item => {
          if (!/^\-?\d+$/.test(item.value)) {
            return true;
      const lengthStatus = this.dialogData.some(item => item.value.length > this.form.length);
      this.$refs.form.validate((valid) => {
        if (valid) {
          if (lengthStatus) {
            this.$message.error('请检查枚举值是否超过最大长度!')
            return;
          }
        })
        // 判断是否是integer格式
        const integerNumStatus = this.dialogData.some(item => {
          let numValue = parseInt(item.value);
          if (isNaN(numValue) || !Number.isInteger(numValue)) {
            return true;
          if (this.form.enumValueDataType === "Integer") {
            // 判断是否包含非数字字符
            const integerStatus = this.dialogData.some(item => {
              if (!/^\-?\d+$/.test(item.value)) {
                return true;
              }
            })
            // 判断是否是integer格式
            const integerNumStatus = this.dialogData.some(item => {
              let numValue = parseInt(item.value);
              if (isNaN(numValue) || !Number.isInteger(numValue)) {
                return true;
              }
            })
            if (integerStatus || integerNumStatus) {
              this.$message.error('枚举值必须是Integer类型');
              return;
            }
          }
        })
        if (integerStatus || integerNumStatus) {
          this.$message.error('枚举值必须是Integer类型');
          return;
          if (this.dialogType === 'add') {
            let params = {
              ...this.form,
              items: this.dialogData
            }
            addEnumType(params).then(res => {
              if (res.data.code === 200) {
                this.$message.success(res.data.obj);
                this.dialogVisible = false;
                this.getTableList();
              }
            })
          } else if (this.dialogType === 'edit') {
            let params = {
              ...this.form,
              items: this.dialogData,
              oid: this.editRow.oid,
              ts: this.editRow.ts
            }
            updateEnumType(params).then(res => {
              if (res.data.code === 200) {
                this.$message.success(res.data.obj);
                this.dialogVisible = false;
                this.getTableList();
              }
            })
          }
        } else {
          return false;
        }
      }
      if (this.dialogType === 'add') {
        let params = {
          ...this.form,
          items: this.dialogData
        }
        addEnumType(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.dialogVisible = false;
            this.getTableList();
          }
        })
      } else if (this.dialogType === 'edit') {
        let params = {
          ...this.form,
          items: this.dialogData,
          oid: this.editRow.oid,
          ts: this.editRow.ts
        }
        updateEnumType(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.dialogVisible = false;
            this.getTableList();
          }
        })
      }
      });
    },
    // 枚举项新增
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/lifeCycle/index.vue
@@ -374,6 +374,8 @@
        startStatus: params.startStatus,
        startStatusName: params.startStatusName,
        description: params.description,
        ts:params.ts,
        oid:params.oid,
        bounds: params.nodes.map(node => ({
          name: node.id,
          cellx: String(node.x),
@@ -392,10 +394,12 @@
        : () => addLifeCycle(transformedData);
      getFunction().then(res => {
        console.log(res);
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.createdHandler();
          // this.handleResetTree();
          this.rowData = {};
          this.$store.dispatch('updateMethodBtn', Object.keys(this.rowData).length > 0);
        }
      });
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue
@@ -41,7 +41,7 @@
    <el-main>
      <basic-container>
        <div>
        <div style="height: 380px">
          <el-descriptions :column="2" border class="margin-top" size="medium">
            <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                  :labelStyle="descriptionOption.labelStyle">
@@ -94,11 +94,13 @@
                <i :class="icons.from"></i>
                From端类型
              </template>
              <span v-for="item in nodeRow.btmItemsFrom" style="margin-left:2px;">
              <el-tag effect="plain" style="margin-top: 2px;">
              <div style="height: 60px;overflow-y: auto;display: flex;flex-wrap: wrap">
                <span v-for="item in nodeRow.btmItemsFrom" style="margin-left:3px;">
              <el-tag effect="plain" style="margin-top: 3px;">
                  {{ item }}
              </el-tag>
            </span>
                </span>
              </div>
            </el-descriptions-item>
            <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                  :labelStyle="descriptionOption.labelStyle">
@@ -128,11 +130,13 @@
                <i :class="icons.to"></i>
                To端类型
              </template>
              <span v-for="item in nodeRow.btmItemsTo" style="margin-left:2px;">
              <el-tag effect="plain" style="margin-top: 2px;">
              <div style="height: 60px;overflow-y: auto;display: flex;flex-wrap: wrap">
                <span v-for="item in nodeRow.btmItemsTo" style="margin-left:2px;">
                 <el-tag effect="plain" style="margin-top: 2px;">
                  {{ item }}
              </el-tag>
            </span>
                 </el-tag>
                </span>
              </div>
            </el-descriptions-item>
            <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                  :labelStyle="descriptionOption.labelStyle">
@@ -155,7 +159,7 @@
          </el-descriptions>
        </div>
        <div style="margin-top: 20px">
        <div style="margin-top: 30px">
          <h3>属性池列表</h3>
          <avue-crud
            :data="tableData"
@@ -197,10 +201,6 @@
          <div class="centerForm">
            <el-form-item label="Form端类型:" label-width="110px">
              <!--              <el-button v-if="!form.btmItemsFrom" plain size="mini" type="success"-->
              <!--                         @click="FormItemReferChange('form')">添加-->
              <!--              </el-button>-->
              <!--              <el-input v-if="form.btmItemsFrom" v-model="form.btmItemsFrom"></el-input>-->
              <div style="display: flex; align-items: center">
                <div style="height: 200px; width: 280px; border: 1px solid #bdbbbb;overflow-y: auto">
                  <!-- 内容 -->
@@ -445,6 +445,7 @@
        highlightCurrentRow: true,
        searchMenuSpan: 8,
        searchLabelWidth: 100,
        calcHeight: 30,
        column: [
          {
            label: '业务类型名',
@@ -575,7 +576,7 @@
        editBtn: false,
        refreshBtn: false,
        selection: false,
        height: 300,
        height: 200,
        addBtn: false,
        // index:false,
        column: [
@@ -597,6 +598,7 @@
          {
            label: '说明',
            prop: 'description',
            overHidden: true
          }
        ]
      },
@@ -623,6 +625,7 @@
        // index:false,
        addBtn: false,
        menu: false,
        calcHeight: -40,
        column: [
          {
            label: '属性名',
@@ -642,6 +645,7 @@
          {
            label: '说明',
            prop: 'description',
            overHidden: true
          }
        ]
      },
@@ -661,7 +665,7 @@
        desc: 'el-icon-chat-line-square'
      },
      bizLastIndex: null,
      attrLastIndex:null
      attrLastIndex: null
    }
  },
  created() {
@@ -873,8 +877,12 @@
        row,
        this.$refs.dialogAttrCrud,
        this.attrLastIndex,
        (newIndex) => { this.attrLastIndex = newIndex; },
        () => { this.selectList = []; }
        (newIndex) => {
          this.attrLastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
@@ -904,8 +912,6 @@
      this.bizFormData = [];
      this.bizToData = [];
      this.dialogBottomData = [];
      console.log(this.form);
      console.log('--', this.nodeRow)
    },
    // 添加属性池 保存
@@ -955,9 +961,13 @@
    //添加属性池 搜索
    attrHandleSearch(params, done) {
      this.searchAttrParams = {
        "conditionMap[id]": "*" + params.id + "*"
      };
      if (func.isEmptyObject(params)) {
        this.searchAttrParams = {};
      } else {
        this.searchAttrParams = {
          "conditionMap[id]": "*" + params.id + "*"
        };
      }
      this.getAttrDialogDta();
      done();
    },
@@ -1011,8 +1021,12 @@
        row,
        this.$refs.bizTypeCrud,
        this.bizLastIndex,
        (newIndex) => { this.bizLastIndex = newIndex; },
        () => { this.selectList = []; }
        (newIndex) => {
          this.bizLastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
@@ -1087,16 +1101,22 @@
        this.$message.error('form端业务类型和to端类型均不能为空!')
        return;
      }
      this.form.btmItemsFrom = this.bizFormData.map(item => item.name);
      this.form.btmItemsTo = this.bizToData.map(item => item.name);
      this.form.attributes = this.dialogBottomData.map(item => item.id);
      let flag = this.title === 'add' ? true : false;
      addAndEditLink(flag, this.form).then(res => {
        if (res.data.code === 200) {
          this.visible = false;
          this.$message.success(res.data.msg);
          this.resetForm();
          this.getTreeList();
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.form.btmItemsFrom = this.bizFormData.map(item => item.name);
          this.form.btmItemsTo = this.bizToData.map(item => item.name);
          this.form.attributes = this.dialogBottomData.map(item => item.id);
          let flag = this.title === 'add' ? true : false;
          addAndEditLink(flag, this.form).then(res => {
            if (res.data.code === 200) {
              this.visible = false;
              this.$message.success(res.data.msg);
              this.resetForm();
              this.getTreeList();
            }
          });
        } else {
          return false;
        }
      });
    },
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/statusPool/index.vue
@@ -2,10 +2,10 @@
  <basic-container>
    <avue-crud
      ref="useCrud"
      :table-loading="loading"
      :data="data"
      :option="option"
      :page.sync="page"
      :table-loading="loading"
      @selection-change="selectChange"
      @row-click="rowClickHandler"
      @refresh-change="handleRefresh"
@@ -107,7 +107,7 @@
  name: "index",
  data() {
    return {
      loading:false,
      loading: false,
      data: [],
      option: {
        ...basicOption,
@@ -178,8 +178,8 @@
        ]
      },
      visible: false,
      selectList:[],
      lastIndex:null,
      selectList: [],
      lastIndex: null,
      page: {
        currentPage: 1,
        pageSize: 15,
@@ -205,12 +205,12 @@
    },
    // 表格刷新
    handleRefresh(){
    handleRefresh() {
      this.getTreeList();
    },
    // 表格多选
    selectChange(row){
    selectChange(row) {
      this.selectList = row;
    },
@@ -232,8 +232,12 @@
        row,
        this.$refs.useCrud,
        this.lastIndex,
        (newIndex) => { this.lastIndex = newIndex; },
        () => { this.selectList = []; }
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.selectList = [];
        }
      );
    },
@@ -277,7 +281,7 @@
    },
    // 行单个删除
    delRowClickHandler(row){
    delRowClickHandler(row) {
      this.$confirm('您确定要删除所选择的数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
@@ -315,18 +319,23 @@
    // 创建或编辑保存
    addSaveHandler() {
      const saveFunction = this.dialogTitle === 'add' ? addSave : editSave;
      saveFunction(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.loading = true;
          this.getTreeList();
          this.visible = false;
      this.$refs.form.validate((valid) => {
        if (valid) {
          saveFunction(this.form).then(res => {
            if (res.data.code === 200) {
              this.$message.success(res.data.obj);
              this.loading = true;
              this.getTreeList();
              this.visible = false;
            } else {
              this.$message.error(res.data.obj);
            }
          }).catch(error => {
            this.$message.error(error);
          });
        } else {
          this.$message.error(res.data.obj);
          return false;
        }
      }).catch(error => {
        this.$message.error(error);
      });
    },
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue
@@ -354,17 +354,22 @@
    // 新增 编辑 保存
    addSaveHandler() {
      const saveFunction = this.dialogTitle === 'add' ? addVersionRule : updateVersionRule;
      saveFunction(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTreeList();
          this.visible = false;
      this.$refs.form.validate((valid) => {
        if (valid) {
          saveFunction(this.form).then(res => {
            if (res.data.code === 200) {
              this.$message.success(res.data.obj);
              this.getTreeList();
              this.visible = false;
            } else {
              this.$message.error(res.data.obj);
            }
          }).catch(error => {
            this.$message.error(error);
          });
        } else {
          this.$message.error(res.data.obj);
          return false;
        }
      }).catch(error => {
        this.$message.error(error);
      });
    },
@@ -441,7 +446,7 @@
      }
      ;
      this.checkViewData = this.checkViewData.filter(item => {
      this.checkViewData = this.checkViewDataSearch.filter(item => {
        return item.source && item.source.includes(source);
      });
Source/plt-web/plt-web-ui/src/views/system/department/index.vue
@@ -115,6 +115,7 @@
        refreshBtn: false,
        addBtn: false,
        menu: false,
        calcHeight:80,
        column: [
          {
            label: '部门',