田源
2024-07-19 5a2640dd5dca57ac826c78deedf07b5a805e2012
对象建模 所有功能处理以及对对象建模下bs端菜单进行配置
已修改2个文件
已删除1个文件
已重命名1个文件
已添加10个文件
1035 ■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/api/modeling/enumType/api.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modeling/enumType/index.vue 303 ●●●●● 补丁 | 查看 | 原始文档 | 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/api/modeling/enumType/api.js
@@ -8,3 +8,62 @@
    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/views/modeling/enumType/index.vue
ÎļþÒÑɾ³ý
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'; // åŒºåˆ†ä¸åŒæ–¹å¼æ‰“开部门对话框