ludc
2024-07-19 f51c53a327689950ce5d0533a1cb872e597ea705
Merge remote-tracking branch 'origin/master'
已修改6个文件
已添加13个文件
877 ■■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/api/modeling/enumType/api.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/actions/base/upRevisionAction.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/actions/handlers.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/page/index/top/index.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/store/modules/user.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/util/func.js 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue 552 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/option.js 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/lifeCycle/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/statusPool/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/user/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/user/option.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/modeling/enumType/api.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
import request from '@/router/axios';
// åˆ—表查询
export function getEnumTypeList(params) {
  return request({
    url: "/api/webEnumController/getEnumTypeList",
    method: "get",
    params
  });
}
// æžšä¸¾åˆ›å»º
export function addEnumType(params) {
  return request({
    url: "/api/webEnumController/addEnumType",
    method: "post",
    data:params
  });
}
// æžšä¸¾ä¿®æ”¹
export function updateEnumType(params) {
  return request({
    url: "/api/webEnumController/updateEnumType",
    method: "put",
    data:params
  });
}
// æžšä¸¾åˆ é™¤
export function deleteEnumTypes(data) {
  return request({
    url: "/api/webEnumController/deleteEnumTypes",
    method: "delete",
    data:data
  });
}
// æŸ¥çœ‹ä½¿ç”¨èŒƒå›´
export function getUsedEnumList(params) {
  return request({
    url: "/api/webEnumController/getUsedEnumList",
    method: "get",
    params
  });
}
// å¯¼å‡º
export function download  (params) {
  return request({
    url: '/api/webEnumController/exportEnumTypes',
    method: 'get',
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
    params
  })
}
// ä¸‹è½½å¯¼å…¥æ¨¡æ¿
export function downloadEnumTemplate  (params) {
  return request({
    url: '/api/webEnumController/downloadEnumTemplate',
    method: 'get',
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
    params
  })
}
Source/plt-web/plt-web-ui/src/components/actions/base/upRevisionAction.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
/**
 * æŒ‰é’®å¤„理 ä¸šåŠ¡ç±»åž‹å®¡ç­¾
 */
import {paramLow,callPreEvent, callPostEvent} from '../BaseAction';
import {validatenull} from "@/util/validate";
import Vue from "vue";
import func from "@/util/func";
import {download} from "@/api/base/file";
export const doAction = (options,callback) => {
  console.log(options)
  options.sourceData = options.sourceData || {};
  options.dataStore = options.dataStore || [];
  if (!options.dataStore || options.dataStore.length < 1) {
    Vue.prototype.$message.error("请至少选择一条数据");
    return false;
  }
  callPreEvent(options, doBefore, function (options) {
    showStartWindow(options, function () {
      callPostEvent(options, doAfter, callback,type);
    });
  });
};
/**
 * æ˜¾ç¤ºæµç¨‹çš„窗口
 * @param options æŒ‰é’®çš„配置信息
 * @param callback å›žè°ƒ
 */
export const showStartWindow = (options,callback)=> {
  const paramVOS = options.paramVOS;
  // if (!paramVOS['form'] && !paramVOS['context']) {
  //   Vue.prototype.$message.error("按钮配置不正确");
  //   return false;
  // }
  // func.downloadFileByBlobHandler();
}
/**
 * å‰ç½®äº‹ä»¶
 * @param options æŒ‰é’®çš„配置信息
 * @param callback å›žè°ƒ
 */
export const doBefore = (options,callback)=> {
  console.log("执行增加前置事件")
  if(callback){
    callback(options);
  }
}
/**
 * åŽç½®äº‹ä»¶
 * @param options æŒ‰é’®çš„配置信息
 * @param callback å›žè°ƒ
 */
export const doAfter = (options,callback,actionType)=> {
  console.log('执行增加后置事件');
  if(callback){
    callback(actionType);
  }
}
Source/plt-web/plt-web-ui/src/components/actions/handlers.js
@@ -39,9 +39,12 @@
    downloadfile: () => {import("@/components/actions/base/downloadFileAction").then(module => {
      module.doAction(options,callback);
    })},
    uprevision: () => {import("@/components/actions/base/upRevisionAction").then(module => {
      module.doAction(options,callback);
    })}
  };
  if (handlers[type]) {
    handlers[type]()
    handlers[type]();
  } else {
    Vue.prototype.$message.error('未找到对应action,请重新配置按钮!');
  }
Source/plt-web/plt-web-ui/src/page/index/top/index.vue
@@ -132,6 +132,7 @@
import topNotice from './top-notice'
import topLang from "./top-lang";
import {changePassword} from "@/api/user"
import func from "@/util/func";
export default {
  components: {
@@ -300,9 +301,20 @@
    submitSwitch(form, done) {
      let userInfo = JSON.parse(localStorage.getItem('saber-userInfo'));
      let params = {userOid:userInfo.content.userOid,...form}
      let params = {
        userOid:userInfo.content.userOid,
        oldPassword:func.encryptData(form.oldPassword,'daliantan0v0vcip'),
        password:func.encryptData(form.password,'daliantan0v0vcip'),
        confirmPassword:func.encryptData(form.confirmPassword,'daliantan0v0vcip'),
      }
      changePassword(params).then(res =>{
        console.log(res);
        if(res.data.code === 200){
          this.$message.success(res.data.msg);
          this.passwordVisible = false;
        }
      }).catch(err => {
        console.log(err);
      })
      // this.$store.dispatch("refreshToken", form).then(() => {
      //   this.userBox = false;
Source/plt-web/plt-web-ui/src/store/modules/user.js
@@ -7,6 +7,7 @@
import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
import {getTopMenu, getRoutes} from '@/api/system/menu'
import md5 from 'js-md5'
import func from "@/util/func";
function addPath(ele, first) {
@@ -62,7 +63,8 @@
    //根据用户名登录
    LoginByUsername({commit}, userInfo) {
      return new Promise((resolve, reject) => {
        loginByUsername(userInfo.deptId, userInfo.roleId, userInfo.username,userInfo.password, userInfo.type, userInfo.key,).then(res => {
        let passwordDes = func.encryptData(userInfo.password,'daliantan0v0vcip')
        loginByUsername(userInfo.deptId, userInfo.roleId, userInfo.username,passwordDes, userInfo.type, userInfo.key,).then(res => {
          const data = res.data;
          if (data.code === 200) {
            // commit('SET_TOKEN', data.obj.sessionInfo.token);
Source/plt-web/plt-web-ui/src/util/func.js
@@ -1,6 +1,8 @@
/**
 * é€šç”¨å·¥å…·ç±»
 */
import CryptoJS from 'crypto-js'
export default class func {
  /**
   * ä¸ä¸ºç©º
@@ -184,5 +186,50 @@
      return item[attr] !== array[0][attr];
    });
  }
  /**
   * 3des加密
   * @param message
   * @param key
   * @returns {string}
   */
  encryptByDES(message, key) {
    const keyHex = CryptoJS.enc.Utf8.parse(key);
    const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
  /**
   * HmacMD5加密
   * @param message
   * @param key
   * @returns {string}
   * @constructor
   */
  static HmacMD5(message, key) {
    const encrypted = CryptoJS.HmacMD5(message,key);
    return encrypted.toString();
  }
  /**
   * aes加密
   * @param data
   * @param secretKey
   * @returns {string}
   */
  static encryptData(data, secretKey) {
    const key = CryptoJS.enc.Utf8.parse(secretKey);
    const iv = CryptoJS.enc.Utf8.parse(secretKey.substr(0, 16)); // AES block size is 128 bits (16 bytes)
    const encrypted = CryptoJS.AES.encrypt(data, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
  }
}
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
<p>属性池</p>
</template>
<script>
export default {
name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>业务类型</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,552 @@
<template>
  <basic-container>
    <avue-crud
      ref="userCrud"
      :data="tableData"
      :option="option"
      :table-loading="tableLoading"
      @on-load="getTableList"
      @refresh-change="handleRefresh"
      @search-change="handleSearch"
      @search-reset="handleReset"
      @selection-change="selectChange"
      @row-click="rowClickHandler"
    >
      <template slot="menuLeft" slot-scope="scope">
        <el-button icon="el-icon-plus" size="small" type="primary" @click="rowSaveHandlerClick">创建</el-button>
        <el-button icon="el-icon-delete" plain size="small" type="danger" @click="allDelHandler">删除</el-button>
        <el-button icon="el-icon-view" plain size="small" type="primary" @click="chekView">查看使用范围</el-button>
        <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadTemplateHandler">下载导入模板</el-button>
        <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadHandler">导出</el-button>
        <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadUser">导入</el-button>
      </template>
      <template slot="menu" slot-scope="scope">
        <el-button icon="el-icon-edit" size="small" type="text" @click="editBtnClick(scope.row)">编辑
        </el-button>
        <el-button icon="el-icon-delete" size="small" type="text" @click="rowDeleteHandler(scope.row)">删除
        </el-button>
      </template>
    </avue-crud>
    <!-- åˆ›å»ºç¼–辑自定义对话框    -->
    <el-dialog
      v-dialogDrag
      v-loading="dialogLoading"
      :title="dialogType === 'add' ? ' åˆ›å»º' : '编辑'"
      :visible.sync="dialogVisible"
      append-to-body="true"
      class="avue-dialog"
      width="70%"
      @close="dialogClose"
    >
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="名称:" prop="id">
              <el-input v-model="form.id"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="标签:">
              <el-input v-model="form.name"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="类型:">
              <el-select v-model="form.enumValueDataType" placeholder="请选择类型">
                <el-option label="String" value="String"></el-option>
                <el-option label="Integer" value="Integer"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="长度:">
              <el-input-number v-model="form.length" :max="999" :min="1" label="描述文字"></el-input-number>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <avue-crud
              ref="dialogCrud"
              :data="dialogData"
              :option="dialogOption"
              @row-save="rowSaveDialogHandler"
              @row-update="rowUpdateDialogHandler"
              @row-del="rowDeleteDialogHandler"
            >
            </avue-crud>
          </el-col>
        </el-row>
      </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-dialog>
    <!-- æŸ¥çœ‹ä½¿ç”¨èŒƒå›´    -->
    <el-dialog
      v-dialogDrag
      v-loading="checkViewLoading"
      title="查看使用范围"
      :visible.sync="checkViewVisible"
      append-to-body="true"
      class="avue-dialog"
      width="70%"
    >
    <avue-crud
      ref="checkViewCrud"
      :data="checkViewData"
      :option="checkViewOption"
      @search-change="checkHandleSearch"
      @search-reset="checkHandleReset"
    >
    </avue-crud>
    </el-dialog>
    <!--导入    -->
    <upload-file ref="upload" :tipList="tipList" :fileType="upFileType" :fileUrl="fileUrl" title="导入" @updata="getTableList"></upload-file>
  </basic-container>
</template>
<script>
import basicOption from '@/util/basic-option'
import {getEnumTypeList, addEnumType, updateEnumType, deleteEnumTypes,getUsedEnumList,download,downloadEnumTemplate} from "@/api/modeling/enumType/api";
import func from "@/util/func";
export default {
  name: "index",
  data() {
    return {
      tipList:["导入模板中标明红色字体的为必输项","*注意*:第二行开始的数据为示例数据,导入前请将其删除,当导入的枚举下具备多个枚举项时,应按照示例enum2的写法",
        "枚举项名称(当前枚举下有枚举项时必填)","枚举值(当前枚举下有枚举项时必填)"],
      upFileType: ['xls', 'xlsx'],
      fileUrl: 'api/webEnumController/importEnumTypes',
      checkViewOption:{
        ...basicOption,
        addBtn:false,
        menu:false,
        searchMenuSpan: 8,
        refreshBtn: false,
        selection:false,
        column:[
          {
            label: '名称',
            prop: 'enumName',
            sortable: true,
          },
          {
            label: '来源',
            prop: 'source',
            sortable: true,
            search:true
          },
          {
            label: '说明',
            prop: 'desc',
          }
        ]
      },
      checkViewData:[],
      checkViewDataSearch:[],
      checkViewVisible:false,
      checkViewLoading:false,
      editRow: {},
      dialogType: '',
      dialogData: [],
      dialogOption: {
        ...basicOption,
        refreshBtn: false,
        selection: false,
        column: [
          {
            label: '枚举项名',
            prop: 'name',
            sortable: true,
            rules: [
              {
                required: true,
                message: '请输入枚举项名',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '枚举值',
            prop: 'value',
            sortable: true,
            rules: [
              {
                required: true,
                message: '请输入枚举值',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '描述',
            prop: 'description',
            sortable: true,
          },
        ]
      },
      rules: {
        id: [
          {required: true, message: '请输入枚举项名', trigger: 'blur'},
          {validator: this.validateEnglishOnly, trigger: 'blur'}
        ],
      },
      form: {
        id: '',
        name: '',
        enumValueDataType: 'String',
        length: 50
      },
      dialogLoading: false,
      dialogVisible: false,
      tableData: [],
      option: {
        ...basicOption,
        calcHeight: -60,
        searchMenuSpan: 8,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        column: [
          {
            label: '枚举名称',
            prop: 'id',
            sortable: true,
            search:true
          },
          {
            label: '标签',
            prop: 'name',
            sortable: true,
          },
          {
            label: '返回类型',
            prop: 'enumValueDataTypeText',
            sortable: true,
          }
        ]
      },
      tableLoading: false,
      selectList: [],
      searchParams:{}
    }
  },
  methods: {
    //表格查询请求
    getTableList() {
      this.tableLoading = true;
      getEnumTypeList(this.searchParams).then(res => {
        const data = res.data.data;
        this.tableData = data;
        this.tableLoading = false;
      }).catch(err => {
        this.$message.error(err)
      });
    },
    // è¡¨æ ¼å¤´éƒ¨åˆ·æ–°
    handleRefresh() {
      this.getTableList();
    },
    // æœç´¢
    handleSearch(params,done) {
      this.searchParams = {
        enumName:params.id
      };
      this.getTableList()
      done();
    },
    // é‡ç½®æœç´¢æ¡ä»¶
    handleReset() {
      this.searchParams = {};
      this.getTableList();
    },
    // é€‰æ‹©æ¡†
    selectChange(row) {
      this.selectList = row;
    },
    // ç‚¹å‡»è¡Œ
    rowClickHandler(row) {
      this.$refs.userCrud.toggleRowSelection(row);
    },
    // å…³é—­å¯¹è¯æ¡†
    dialogClose() {
      this.dialogData = [];
      this.form = {
        id: '',
        name: '',
        enumValueDataType: 'String',
        length: 50
      }
    },
    // åˆ›å»ºæŒ‰é’®ç‚¹å‡»
    rowSaveHandlerClick() {
      this.dialogType = 'add';
      this.dialogVisible = true;
      this.dialogData = [];
      this.form = {
        id: '',
        name: '',
        enumValueDataType: 'String',
        length: 50
      }
    },
    // ç¼–辑按钮点击
    editBtnClick(row) {
      this.dialogType = 'edit';
      const {id, name, length, enumValueDataType} = row;
      this.form = {id, name, length, enumValueDataType};
      this.dialogData = row.items;
      this.dialogVisible = true;
      this.editRow = row;
      console.log(row);
    },
    // åˆ é™¤æŒ‰é’®ç‚¹å‡»
    rowDeleteHandler(row) {
      let params = {
        oid: row.oid,
        name: row.id,
        ts: row.ts
      }
      let data = [params];
      deleteEnumTypes(data).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
        }
      })
    },
    // å¤šé€‰åˆ é™¤
    allDelHandler() {
      let data = this.selectList.map(item => {
        return{
          oid: item.oid,
          name: item.id,
          ts: item.ts
        }
      })
      deleteEnumTypes(data).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
        }
      })
    },
    // å¯¹è¯æ¡†æžšä¸¾ä¿å­˜
    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;
          }
        })
        // åˆ¤æ–­æ˜¯å¦æ˜¯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 (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();
          }
        })
      }
    },
    // æžšä¸¾é¡¹æ–°å¢ž
    rowSaveDialogHandler(row, done, loading) {
      const status = this.dialogData.some(item => item.name === row.name);
      if (status) {
        this.$message.error('枚举项名称不能重复添加!')
        loading();
      } else {
        if (this.form.enumValueDataType === "Integer") {
          let numValue = parseInt(row.value);
          // åˆ¤æ–­åŽŸå§‹å­—ç¬¦ä¸²æ˜¯å¦åŒ…å«éžæ•°å­—å­—ç¬¦
          if ((isNaN(numValue) || !Number.isInteger(numValue)) || !/^\-?\d+$/.test(row.value)) {
            // åˆ¤æ–­ numValue æ˜¯å¦æ˜¯ NaN æˆ–者不是Integer类型
            this.$message.error('枚举值必须是Integer类型');
            return loading();
          }
        }
        if (row.value.length > this.form.num) {
          this.$message.error('枚举值超过最大长度!')
          return loading();
        }
        this.dialogData.push(row);
        done();
      }
    },
    // æžšä¸¾é¡¹ä¿®æ”¹
    rowUpdateDialogHandler(row, index, done, loading) {
      if (this.form.enumValueDataType === "Integer") {
        let numValue = parseInt(row.value);
        // åˆ¤æ–­åŽŸå§‹å­—ç¬¦ä¸²æ˜¯å¦åŒ…å«éžæ•°å­—å­—ç¬¦
        if ((isNaN(numValue) || !Number.isInteger(numValue)) || !/^\-?\d+$/.test(row.value)) {
          // åˆ¤æ–­ numValue æ˜¯å¦æ˜¯ NaN æˆ–者不是Integer类型
          this.$message.error('枚举值必须是Integer类型');
          return loading();
        }
      }
      if (row.value.length > this.form.length) {
        this.$message.error('枚举值超过最大长度!')
        return loading();
      }
      this.dialogData.splice(index, 1, row);
      done();
    },
    // æžšä¸¾é¡¹åˆ é™¤
    rowDeleteDialogHandler(row, index) {
      this.dialogData.splice(index, 1);
    },
    // åªèƒ½è¾“入英文正则校验
    validateEnglishOnly(rule, value, callback) {
      if (!value) {
        return callback(new Error('请输入枚举项名'));
      }
      if (!/^[A-Za-z]+$/.test(value)) {
        return callback(new Error('只能输入英文字母'));
      }
      callback(); // éªŒè¯é€šè¿‡
    },
    // æŸ¥çœ‹ä½¿ç”¨èŒƒå›´
    chekView(){
      if(this.selectList.length <= 0 ){
        this.$message.warning('请至少选择一条数据');
        return;
      }
      if(this.selectList.length >1 ){
        this.$message.warning('只能选择一条数据进行查看');
        return;
      }
      getUsedEnumList({enumName:this.selectList[0].id}).then(res => {
        if(res.data.code === 200){
          this.checkViewVisible = true;
          this.checkViewData = res.data.data;
          this.checkViewDataSearch = res.data.data;
        }
      })
    },
    // æŸ¥çœ‹ä½¿ç”¨èŒƒå›´æŸ¥è¯¢
    checkHandleSearch(params, done) {
      const { source } = params;
      if(!params.source) {
        this.checkViewData = this.checkViewDataSearch;
        return done();
      };
      this.checkViewData = this.checkViewData.filter(item => {
        return item.source && item.source.includes(source);
      });
      done();
    },
    // æŸ¥çœ‹ä½¿ç”¨èŒƒå›´é‡ç½®
    checkHandleReset(){
      this.checkViewData = this.checkViewDataSearch;
    },
    // å¯¼å‡º
    downloadHandler(){
      if(this.selectList.length <= 0 ){
        this.$message.warning('请至少选择一条数据进行导出');
        return;
      }
      let enumNames = this.selectList.map(item => item.id).join(',');
      download({enumNames:enumNames}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      }).catch(err => {
        this.$message.error(err);
      })
    },
    // ä¸‹è½½å¯¼å…¥æ¨¡æ¿
    downloadTemplateHandler(){
      downloadEnumTemplate().then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('下载成功');
      }).catch(err => {
        this.$message.error(err);
      })
    },
    uploadUser(){
      this.$refs.upload.visible = true;
    }
  }
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/option.js
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/lifeCycle/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>生命周期</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>链接类型</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/statusPool/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>状态池</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>版本管理</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>业务类型查询</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>链接类型查询</p>
</template>
<script>
export default {
  name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <p>查询模板定义</p>
</template>
<script>
export default {
name: "index"
}
</script>
<style scoped>
</style>
Source/plt-web/plt-web-ui/src/views/system/user/index.vue
@@ -494,7 +494,7 @@
      download().then(res => {
        console.log(res);
        func.downloadFileByBlobHandler(res);
        this.$message.success('下载成功')
        this.$message.success('下载成功');
      }).catch(err => {
        this.$message.error(err);
      })
@@ -508,7 +508,7 @@
    // åˆ†é…éƒ¨é—¨
    departmentHandler() {
      if (this.selectList.length <= 0) {
        this.$message.warning('清先选择人员再进行操作!')
        this.$message.warning('清先选择人员再进行操作!');
        return;
      }
      this.departStatus = 'default'; // åŒºåˆ†ä¸åŒæ–¹å¼æ‰“开部门对话框
Source/plt-web/plt-web-ui/src/views/system/user/option.js
@@ -7,7 +7,7 @@
    rules: [
      {
        required: true,
        message: '请输入姓名',
        message: '请输入账号',
        trigger: 'blur'
      }
    ]