田源
2024-08-23 aa6ff1fab7bbfaaaa771c87eda6f716b300f4dc5
管理功能模块 && 业务功能模块
已删除4个文件
已重命名2个文件
已添加4个文件
1198 ■■■■■ 文件已修改
Bin/jre-linux/lib/security/trusted.libraries 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/systemModel/mangeModel/api.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModule/businessModel/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModule/mangeModel/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/systemModule/operateType/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Bin/jre-linux/lib/security/trusted.libraries
Source/plt-web/plt-web-ui/src/api/systemModel/mangeModel/api.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
import request from '@/router/axios';
// åˆ—表查询
export function getSysModelTreeMenuByPID(params) {
  return request({
    url: "/api/hmSysModConfigController/getSysModelTreeMenuByPID",
    method: "get",
    params
  });
}
// æ–°å¢ž
export function addModel(params) {
  return request({
    url: "/api/hmSysModConfigController/addModel",
    method: "post",
    data:params
  });
}
// ä¿®æ”¹
export function updateModel(params) {
  return request({
    url: "/api/hmSysModConfigController/updateModel",
    method: "put",
    data:params
  });
}
// åˆ é™¤
export function delModule(params) {
  return request({
    url: "/api/hmSysModConfigController/delModule",
    method: "delete",
    data:params
  });
}
// å¯¼å‡ºsql
export function exportFunctionSql (params) {
  return request({
    url: '/api/hmSysModConfigController/exportFunctionSql',
    method: 'get',
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
    params
  })
}
// å¢žåŠ æ“ä½œç±»åž‹
export function addOperationType(data) {
  return request({
    url: "/api/hmSysModConfigController/addOperationType",
    method: "post",
    data
  });
}
Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,456 @@
<template>
  <el-container>
    <el-aside>
      <basic-container>
        <div style="max-height: calc(100vh - 170px);overflow: auto">
          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
          <span slot-scope="{ node, data }" class="el-tree-node__label">
           <span style="font-size: 15px">
              <i class="el-icon-s-promotion"></i>
                {{ (node || {}).label }}
            </span>
          </span>
          </avue-tree>
        </div>
      </basic-container>
    </el-aside>
    <el-main>
      <basic-container>
        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
          <span v-if="form.childType !== 0">
            <el-form-item label="模块名:">
            <el-input v-model="form.name" placeholder="请输入模块名"></el-input>
          </el-form-item>
          <el-form-item label="模块别名:">
            <el-input v-model="form.alias" placeholder="模块别名用来记录日志使用"></el-input>
          </el-form-item>
                <el-form-item label="C/S:">
            <el-input v-model="form.pathC" :rows="3" placeholder="请输入C/S路径" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="B/S:">
            <el-input v-model="form.path" :rows="3" placeholder="请输入B/S路径" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label=".NET:">
            <el-input v-model="form.resourceDotNet" :rows="3" placeholder="请输入.NET" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="Mobile:">
            <el-input v-model="form.resourceMobile" :rows="3" placeholder="请输入Mobile" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="序号:">
            <el-input v-model="form.sort" placeholder="数字,描述该模块在其父模块下的显示顺序"></el-input>
          </el-form-item>
          <el-form-item label="简图:">
            <el-input v-model="form.source"></el-input>
          </el-form-item>
          <el-form-item label="描述:">
            <el-input v-model="form.remark" :rows="3" placeholder="请输入描述" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="是否有效:">
            <el-switch
              v-model="form.isValid"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
            <el-link :underline="false" style="margin-left: 20px" type="danger">不生效(不选择)时,该模块在功能模块授权里不显示</el-link>
          </el-form-item>
          </span>
          <span v-if="form.childType === 0">
            <el-form-item label="名称:">
            <el-input v-model="form.name" :disabled="form.childType === 0" placeholder="请输入名称"></el-input>
            </el-form-item>
            <el-form-item label="标识:">
            <el-input v-model="form.code" :disabled="form.childType === 0" placeholder="请输入标识"></el-input>
            </el-form-item>
            <el-form-item label="别名:">
            <el-input v-model="form.alias" placeholder="请输入别名"></el-input>
            </el-form-item>
            <el-form-item label="编号:">
            <el-input v-model="form.sort" :disabled="form.childType === 0" placeholder="请输入编号"></el-input>
            </el-form-item>
            <el-form-item label="描述:">
            <el-input v-model="form.remark" :disabled="form.childType === 0" placeholder="请输入描述"></el-input>
            </el-form-item>
            <el-form-item label="是否有效:">
            <el-switch
              v-model="form.isValid"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
          </el-form-item>
          </span>
        </el-form>
        <div v-if="form.childType && form.childType !== 0" class="btnBox">
          <el-button v-if="!addStatus" :disabled="mangeShowBtn ? false : !childTypeBtn" icon="el-icon-plus" plain
                     size="small"
                     type="primary" @click="addClickHandler">增加
          </el-button>
          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="addSaveClickHandler">保存
          </el-button>
          <el-button v-if="!editStatus" :disabled="mangeShowBtn" icon="el-icon-edit" plain size="small" type="primary"
                     @click="editClickHandler">修改
          </el-button>
          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="editSaveClickHandler">保存
          </el-button>
          <el-button :disabled="mangeShowBtn" icon="el-icon-close" plain size="small" type="danger"
                     @click="delClickHandler">删除
          </el-button>
          <el-button :disabled="mangeShowBtn ? true : childTypeBtn" icon="el-icon-circle-plus-outline" plain
                     size="small"
                     type="primary" @click="addMethodsClickHandler">增加操作类型
          </el-button>
          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
                     type="danger"
                     @click="addClickHandler">删除非系统模块
          </el-button>
          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
                     type="danger"
                     @click="addClickHandler">删除业务模块
          </el-button>
          <el-button :disabled="!mangeShowBtn" icon="el-icon-upload2" plain size="small" type="primary"
                     @click="upLoadClickHandler">导入
          </el-button>
          <el-button :disabled="!mangeShowBtn" icon="el-icon-download" plain size="small" type="primary"
                     @click="exportClickHandler">导出
          </el-button>
          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="sqlClickExportClick">导出sql
          </el-button>
        </div>
        <div v-if="form.childType === 0" class="btnBox">
          <el-button icon="el-icon-edit" plain size="small" type="primary">修改别名
          </el-button>
          <el-button icon="el-icon-close" plain size="small" type="danger">删除
          </el-button>
        </div>
      </basic-container>
    </el-main>
    <el-dialog
      v-dialogDrag
      :visible.sync="methodsVisble"
      append-to-body="true"
      class="avue-dialog"
      title="操作分类"
      width="60%"
    >
      <avue-crud
        ref="methodsCrud"
        :data="methodsData"
        :option="methodsOption"
        :table-loading="methodsLoading"
        @row-click="rowMethodsClickHandler"
        @selection-change="selectMethodsChange">
      </avue-crud>
      <span slot="footer" class="dialog-footer">
         <el-button @click="methodsVisble = false">取 æ¶ˆ</el-button>
         <el-button type="primary" @click="methodsSaveClickHandler">保 å­˜</el-button>
        </span>
    </el-dialog>
  </el-container>
</template>
<script>
//管理功能模块
import {
  getSysModelTreeMenuByPID,
  addModel,
  updateModel,
  delModule,
  exportFunctionSql,
  addOperationType
} from "@/api/systemModel/mangeModel/api"
import func from "@/util/func";
import basicOption from "@/util/basic-option";
export default {
  name: "index",
  data() {
    return {
      lastIndex: null,
      methodsList: [],
      methodsData: [],
      methodsOption: {
        ...basicOption,
        addBtn: false,
        menu: false,
        height: 500,
        column: [
          {
            label: '操作分类',
            prop: 'name',
            sortable: true,
          }
        ]
      },
      methodsLoading: false,
      methodsVisble: false,
      defalutName: ['name', 'alias', 'pathC', 'path', 'resourceDotNet', 'resourceMobile', 'sort', 'source', 'remark', 'code'],
      refresh: Math.random(),
      addStatus: false,
      editStatus: false,
      nodeRow: {},
      form: {},
      treeData: [],
      treeOption: {
        height: 'auto',
        menu: false,
        addBtn: false,
        defaultExpandAll: false,
        props: {
          label: 'name',
          value: 'id',
          children: 'children',
        },
        lazy: true,
        treeLoad: (node, resolve) => {
          const params = {
            parentId: node.level === 0 ? "modelManagmentNode" : node.data.id,
            modeType: node.level === 0 ? "firstNode" : node.data.modeType,
          }
          getSysModelTreeMenuByPID(params).then(res => {
            resolve(res.data.data.map(item => {
              return {
                ...item,
                id: item.id,
                name: item.name,
                leaf: !item.hasChildren
              }
            }))
          })
        }
      },
    }
  },
  created() {
  },
  computed: {
    /**
     * childType
     * ä¸º-1   å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * ä¸ä¸º-1 éšè— åˆ é™¤éžç³»ç»Ÿæ¨¡å— åˆ é™¤ä¸šåŠ¡æ¨¡å—
     * ä¸º1时 ç¦ç”¨æ“ä½œç±»åž‹ã€å¯¼å…¥ã€å¯¼å‡º
     * ä¸º2时 ç¦ç”¨å¢žåŠ  å¯¼å…¥ å¯¼å‡º
     * mangeShowBtn ä¸º true è¯´æ˜Žæ˜¯é¡¶å±‚节点 å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * @returns {Number}
     */
    mangeShowBtn() {
      return this.form.childType === -1;
    },
    childTypeBtn() {
      return this.form.childType === 1;
    }
  },
  methods: {
    // æ ‘行点击
    nodeClick(row) {
      console.log(row.childType);
      this.form = {...row};
      this.nodeRow = {...row};
      this.addStatus = false;
      this.editStatus = false;
    },
    // æ–°å¢žæŒ‰é’®
    addClickHandler() {
      this.resetFormValue();
      this.addStatus = true;
      this.editStatus = false;
    },
    // æ¸…空表单绑定值
    resetFormValue() {
      this.defalutName.forEach(key => {
        this.form[key] = null;
      })
      this.form.isValid = false;
    },
    // æ–°å¢žä¿å­˜æŒ‰é’®
    addSaveClickHandler() {
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        return
      }
      if (this.form.pathC && this.form.pathC.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        return
      }
      this.form.parentId = this.form.id;
      addModel(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.addStatus = false;
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
        }
      })
    },
    // ä¿®æ”¹æŒ‰é’®
    editClickHandler() {
      console.log(this.form);
      this.editStatus = true;
      this.addStatus = false;
    },
    // ä¿®æ”¹ä¿å­˜
    editSaveClickHandler() {
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        return
      }
      if (this.form.pathC && this.form.pathC.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        return
      }
      updateModel(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.editStatus = false;
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
        }
      })
    },
    // åˆ é™¤æŒ‰é’®
    delClickHandler() {
      this.$confirm('您确定要删除所选择的数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delModule(this.form).then(res => {
          console.log(res);
          if (res.data.code === 200) {
            this.$message.success(res.data.msg);
            this.resetFormValue();
            this.addStatus = false;
            this.editStatus = false;
            this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // å¯¼å‡ºsql
    sqlClickExportClick() {
      exportFunctionSql({isFunction: true}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      }).catch(err => {
        this.$message.error(err);
      });
    },
    // æ“ä½œåˆ†ç±»å¤šé€‰
    selectMethodsChange(list) {
      this.methodsList = list;
    },
    // å¢žåŠ æ“ä½œç±»åž‹
    addMethodsClickHandler() {
      this.methodsLoading = true;
      getSysModelTreeMenuByPID({parentId: 'sysOptionNode'}).then(res => {
        if (res.data.code === 200) {
          this.methodsVisble = true;
          const data = res.data.data[0].children;
          this.methodsData = data;
          this.methodsLoading = false;
        }
      })
    },
    // å¢žåŠ æ“ä½œç±»åž‹ä¿å­˜
    methodsSaveClickHandler() {
      let list = this.methodsList.map(item => {
        return {
          funcId: this.nodeRow.id,
          operId: item.id,
          operName: item.name,
          operIndentify: item.code,
          operAlias: item.alias,
          operDesc: item.remark
        }
      })
      addOperationType(list).then(res => {
        console.log(res)
        if (res.data.code === 200) {
          this.methodsVisble = false;
          this.$message.success(res.data.msg);
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
          this.resetFormValue();
          this.form.childType = null;
        }
      })
    },
    // ç‚¹å‡»è¡Œ
    rowMethodsClickHandler(row) {
      func.rowClickHandler(
        row,
        this.$refs.methodsCrud,
        this.lastIndex,
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.methodsList = [];
        }
      );
    },
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .el-form-item .el-select {
    width: 100%;
  }
}
.btnBox {
  display: flex;
  justify-content: center;
}
</style>
Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,456 @@
<template>
  <el-container>
    <el-aside>
      <basic-container>
        <div style="max-height: calc(100vh - 170px);overflow: auto">
          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
          <span slot-scope="{ node, data }" class="el-tree-node__label">
           <span style="font-size: 15px">
              <i class="el-icon-s-promotion"></i>
                {{ (node || {}).label }}
            </span>
          </span>
          </avue-tree>
        </div>
      </basic-container>
    </el-aside>
    <el-main>
      <basic-container>
        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
          <span v-if="form.childType !== 0">
            <el-form-item label="模块名:">
            <el-input v-model="form.name" placeholder="请输入模块名"></el-input>
          </el-form-item>
          <el-form-item label="模块别名:">
            <el-input v-model="form.alias" placeholder="模块别名用来记录日志使用"></el-input>
          </el-form-item>
                <el-form-item label="C/S:">
            <el-input v-model="form.pathC" :rows="3" placeholder="请输入C/S路径" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="B/S:">
            <el-input v-model="form.path" :rows="3" placeholder="请输入B/S路径" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label=".NET:">
            <el-input v-model="form.resourceDotNet" :rows="3" placeholder="请输入.NET" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="Mobile:">
            <el-input v-model="form.resourceMobile" :rows="3" placeholder="请输入Mobile" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="序号:">
            <el-input v-model="form.sort" placeholder="数字,描述该模块在其父模块下的显示顺序"></el-input>
          </el-form-item>
          <el-form-item label="简图:">
            <el-input v-model="form.source"></el-input>
          </el-form-item>
          <el-form-item label="描述:">
            <el-input v-model="form.remark" :rows="3" placeholder="请输入描述" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="是否有效:">
            <el-switch
              v-model="form.isValid"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
            <el-link :underline="false" style="margin-left: 20px" type="danger">不生效(不选择)时,该模块在功能模块授权里不显示</el-link>
          </el-form-item>
          </span>
          <span v-if="form.childType === 0">
            <el-form-item label="名称:">
            <el-input v-model="form.name" :disabled="form.childType === 0" placeholder="请输入名称"></el-input>
            </el-form-item>
            <el-form-item label="标识:">
            <el-input v-model="form.code" :disabled="form.childType === 0" placeholder="请输入标识"></el-input>
            </el-form-item>
            <el-form-item label="别名:">
            <el-input v-model="form.alias" placeholder="请输入别名"></el-input>
            </el-form-item>
            <el-form-item label="编号:">
            <el-input v-model="form.sort" :disabled="form.childType === 0" placeholder="请输入编号"></el-input>
            </el-form-item>
            <el-form-item label="描述:">
            <el-input v-model="form.remark" :disabled="form.childType === 0" placeholder="请输入描述"></el-input>
            </el-form-item>
            <el-form-item label="是否有效:">
            <el-switch
              v-model="form.isValid"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
          </el-form-item>
          </span>
        </el-form>
        <div v-if="form.childType && form.childType !== 0" class="btnBox">
          <el-button v-if="!addStatus" :disabled="mangeShowBtn ? false : !childTypeBtn" icon="el-icon-plus" plain
                     size="small"
                     type="primary" @click="addClickHandler">增加
          </el-button>
          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="addSaveClickHandler">保存
          </el-button>
          <el-button v-if="!editStatus" :disabled="mangeShowBtn" icon="el-icon-edit" plain size="small" type="primary"
                     @click="editClickHandler">修改
          </el-button>
          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="editSaveClickHandler">保存
          </el-button>
          <el-button :disabled="mangeShowBtn" icon="el-icon-close" plain size="small" type="danger"
                     @click="delClickHandler">删除
          </el-button>
          <el-button :disabled="mangeShowBtn ? true : childTypeBtn" icon="el-icon-circle-plus-outline" plain
                     size="small"
                     type="primary" @click="addMethodsClickHandler">增加操作类型
          </el-button>
          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
                     type="danger"
                     @click="addClickHandler">删除非系统模块
          </el-button>
          <el-button v-if="this.form.childType ? mangeShowBtn :true" icon="el-icon-circle-close" plain size="small"
                     type="danger"
                     @click="addClickHandler">删除业务模块
          </el-button>
          <el-button :disabled="!mangeShowBtn" icon="el-icon-upload2" plain size="small" type="primary"
                     @click="upLoadClickHandler">导入
          </el-button>
          <el-button :disabled="!mangeShowBtn" icon="el-icon-download" plain size="small" type="primary"
                     @click="exportClickHandler">导出
          </el-button>
          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="sqlClickExportClick">导出sql
          </el-button>
        </div>
        <div v-if="form.childType === 0" class="btnBox">
          <el-button icon="el-icon-edit" plain size="small" type="primary">修改别名
          </el-button>
          <el-button icon="el-icon-close" plain size="small" type="danger">删除
          </el-button>
        </div>
      </basic-container>
    </el-main>
    <el-dialog
      v-dialogDrag
      :visible.sync="methodsVisble"
      append-to-body="true"
      class="avue-dialog"
      title="操作分类"
      width="60%"
    >
      <avue-crud
        ref="methodsCrud"
        :data="methodsData"
        :option="methodsOption"
        :table-loading="methodsLoading"
        @row-click="rowMethodsClickHandler"
        @selection-change="selectMethodsChange">
      </avue-crud>
      <span slot="footer" class="dialog-footer">
         <el-button @click="methodsVisble = false">取 æ¶ˆ</el-button>
         <el-button type="primary" @click="methodsSaveClickHandler">保 å­˜</el-button>
        </span>
    </el-dialog>
  </el-container>
</template>
<script>
//管理功能模块
import {
  getSysModelTreeMenuByPID,
  addModel,
  updateModel,
  delModule,
  exportFunctionSql,
  addOperationType
} from "@/api/systemModel/mangeModel/api"
import func from "@/util/func";
import basicOption from "@/util/basic-option";
export default {
  name: "index",
  data() {
    return {
      lastIndex: null,
      methodsList: [],
      methodsData: [],
      methodsOption: {
        ...basicOption,
        addBtn: false,
        menu: false,
        height: 500,
        column: [
          {
            label: '操作分类',
            prop: 'name',
            sortable: true,
          }
        ]
      },
      methodsLoading: false,
      methodsVisble: false,
      defalutName: ['name', 'alias', 'pathC', 'path', 'resourceDotNet', 'resourceMobile', 'sort', 'source', 'remark', 'code'],
      refresh: Math.random(),
      addStatus: false,
      editStatus: false,
      nodeRow: {},
      form: {},
      treeData: [],
      treeOption: {
        height: 'auto',
        menu: false,
        addBtn: false,
        defaultExpandAll: false,
        props: {
          label: 'name',
          value: 'id',
          children: 'children',
        },
        lazy: true,
        treeLoad: (node, resolve) => {
          const params = {
            parentId: node.level === 0 ? "systemManagmentNode" : node.data.id,
            modeType: node.level === 0 ? "firstNode" : node.data.modeType,
          }
          getSysModelTreeMenuByPID(params).then(res => {
            resolve(res.data.data.map(item => {
              return {
                ...item,
                id: item.id,
                name: item.name,
                leaf: !item.hasChildren
              }
            }))
          })
        }
      },
    }
  },
  created() {
  },
  computed: {
    /**
     * childType
     * ä¸º-1   å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * ä¸ä¸º-1 éšè— åˆ é™¤éžç³»ç»Ÿæ¨¡å— åˆ é™¤ä¸šåŠ¡æ¨¡å—
     * ä¸º1时 ç¦ç”¨æ“ä½œç±»åž‹ã€å¯¼å…¥ã€å¯¼å‡º
     * ä¸º2时 ç¦ç”¨å¢žåŠ  å¯¼å…¥ å¯¼å‡º
     * mangeShowBtn ä¸º true è¯´æ˜Žæ˜¯é¡¶å±‚节点 å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * @returns {Number}
     */
    mangeShowBtn() {
      return this.form.childType === -1;
    },
    childTypeBtn() {
      return this.form.childType === 1;
    }
  },
  methods: {
    // æ ‘行点击
    nodeClick(row) {
      console.log(row.childType);
      this.form = {...row};
      this.nodeRow = {...row};
      this.addStatus = false;
      this.editStatus = false;
    },
    // æ–°å¢žæŒ‰é’®
    addClickHandler() {
      this.resetFormValue();
      this.addStatus = true;
      this.editStatus = false;
    },
    // æ¸…空表单绑定值
    resetFormValue() {
      this.defalutName.forEach(key => {
        this.form[key] = null;
      })
      this.form.isValid = false;
    },
    // æ–°å¢žä¿å­˜æŒ‰é’®
    addSaveClickHandler() {
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        return
      }
      if (this.form.pathC && this.form.pathC.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        return
      }
      this.form.parentId = this.form.id;
      addModel(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.addStatus = false;
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
        }
      })
    },
    // ä¿®æ”¹æŒ‰é’®
    editClickHandler() {
      console.log(this.form);
      this.editStatus = true;
      this.addStatus = false;
    },
    // ä¿®æ”¹ä¿å­˜
    editSaveClickHandler() {
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        return
      }
      if (this.form.pathC && this.form.pathC.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        return
      }
      updateModel(this.form).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.editStatus = false;
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
        }
      })
    },
    // åˆ é™¤æŒ‰é’®
    delClickHandler() {
      this.$confirm('您确定要删除所选择的数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delModule(this.form).then(res => {
          console.log(res);
          if (res.data.code === 200) {
            this.$message.success(res.data.msg);
            this.resetFormValue();
            this.addStatus = false;
            this.editStatus = false;
            this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // å¯¼å‡ºsql
    sqlClickExportClick() {
      exportFunctionSql({isFunction: true}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      }).catch(err => {
        this.$message.error(err);
      });
    },
    // æ“ä½œåˆ†ç±»å¤šé€‰
    selectMethodsChange(list) {
      this.methodsList = list;
    },
    // å¢žåŠ æ“ä½œç±»åž‹
    addMethodsClickHandler() {
      this.methodsLoading = true;
      getSysModelTreeMenuByPID({parentId: 'sysOptionNode'}).then(res => {
        if (res.data.code === 200) {
          this.methodsVisble = true;
          const data = res.data.data[0].children;
          this.methodsData = data;
          this.methodsLoading = false;
        }
      })
    },
    // å¢žåŠ æ“ä½œç±»åž‹ä¿å­˜
    methodsSaveClickHandler() {
      let list = this.methodsList.map(item => {
        return {
          funcId: this.nodeRow.id,
          operId: item.id,
          operName: item.name,
          operIndentify: item.code,
          operAlias: item.alias,
          operDesc: item.remark
        }
      })
      addOperationType(list).then(res => {
        console.log(res)
        if (res.data.code === 200) {
          this.methodsVisble = false;
          this.$message.success(res.data.msg);
          this.refresh = Math.random(); // åˆ·æ–°å·¦ä¾§æ ‘
          this.resetFormValue();
          this.form.childType = null;
        }
      })
    },
    // ç‚¹å‡»è¡Œ
    rowMethodsClickHandler(row) {
      func.rowClickHandler(
        row,
        this.$refs.methodsCrud,
        this.lastIndex,
        (newIndex) => {
          this.lastIndex = newIndex;
        },
        () => {
          this.methodsList = [];
        }
      );
    },
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .el-form-item .el-select {
    width: 100%;
  }
}
.btnBox {
  display: flex;
  justify-content: center;
}
</style>
Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
<template>
  <el-container>
    <el-aside>
      <basic-container>
        <div style="max-height: calc(100vh - 170px);overflow: auto">
          <avue-tree ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
          <span slot-scope="{ node, data }" class="el-tree-node__label">
           <span style="font-size: 15px">
              <i class="el-icon-s-promotion"></i>
                {{ (node || {}).label }}
            </span>
          </span>
          </avue-tree>
        </div>
      </basic-container>
    </el-aside>
    <el-main>
      <basic-container>
        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
          <el-form-item label="名称:">
            <el-input v-model="form.name" placeholder="请输入名称"></el-input>
          </el-form-item>
          <el-form-item label="标识:">
            <el-input v-model="form.code" placeholder="请输入标识"></el-input>
          </el-form-item>
          <el-form-item label="别名:">
            <el-input v-model="form.alias" placeholder="请输入别名"></el-input>
          </el-form-item>
          <el-form-item label="编号:">
            <el-input v-model="form.sort" placeholder="请输入编号"></el-input>
          </el-form-item>
          <el-form-item label="描述:">
            <el-input v-model="form.remark" placeholder="请输入描述"></el-input>
          </el-form-item>
        </el-form>
        <div class="btnBox">
          <el-button v-if="!addStatus" :disabled="mangeShowBtn ? false : !childTypeBtn" icon="el-icon-plus" plain
                     size="small"
                     type="primary" @click="addClickHandler">增加
          </el-button>
          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="addSaveClickHandler">保存
          </el-button>
          <el-button :disabled="mangeShowBtn" icon="el-icon-edit" plain size="small" type="primary"
                     @click="addClickHandler">修改
          </el-button>
          <el-button :disabled="mangeShowBtn" icon="el-icon-close" plain size="small" type="danger"
                     @click="addClickHandler">删除
          </el-button>
          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">导入sql
          </el-button>
        </div>
      </basic-container>
    </el-main>
  </el-container>
</template>
<script>
//管理功能模块
import {getSysModelTreeMenuByPID, addModel} from "@/api/systemModel/mangeModel/api"
export default {
  name: "index",
  data() {
    return {
      addStatus: false,
      nodeRow: {},
      form: {},
      treeData: [],
      treeOption: {
        height: 'auto',
        menu: false,
        addBtn: false,
        defaultExpandAll: false,
        props: {
          label: 'name',
          value: 'id',
          children: 'children',
        },
        lazy: true,
        treeLoad: (node, resolve) => {
          const params = {
            parentId: node.level === 0 ? "operateNode" : node.data.id,
            modeType: node.level === 0 ? "firstNode" : node.data.modeType,
          }
          getSysModelTreeMenuByPID(params).then(res => {
            resolve(res.data.data.map(item => {
              return {
                ...item,
                id: item.id,
                name: item.name,
                leaf: !item.hasChildren
              }
            }))
          })
        }
      },
    }
  },
  created() {
  },
  computed: {
    /**
     * childType
     * ä¸º-1   å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * ä¸ä¸º-1 éšè— åˆ é™¤éžç³»ç»Ÿæ¨¡å— åˆ é™¤ä¸šåŠ¡æ¨¡å—
     * ä¸º1时 ç¦ç”¨æ“ä½œç±»åž‹ã€å¯¼å…¥ã€å¯¼å‡º
     * ä¸º2时 ç¦ç”¨å¢žåŠ  å¯¼å…¥ å¯¼å‡º
     * mangeShowBtn ä¸º true è¯´æ˜Žæ˜¯é¡¶å±‚节点 å…¨éƒ¨æŒ‰é’®å±•示 ç¦ç”¨ä¿®æ”¹ åˆ é™¤ å¢žåŠ æ“ä½œç±»åž‹
     * @returns {Number}
     */
    mangeShowBtn() {
      return this.form.childType === -1;
    },
    childTypeBtn() {
      return this.form.childType === 1;
    }
  },
  methods: {
    // æ ‘行点击
    nodeClick(row) {
      console.log(row);
      this.form = {...row};
      this.nodeRow = {...row};
      this.addStatus = false;
    },
    // æ–°å¢žæŒ‰é’®
    addClickHandler() {
      for (const key in this.form) {
        if (this.form.hasOwnProperty(key)) {
          this.form[key] = null;
        }
      }
      this.addStatus = true;
    },
    // ä¿å­˜æŒ‰é’®
    addSaveClickHandler() {
      console.log(this.form)
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        return
      }
      if (this.form.pathc && this.form.pathc.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        return
      }
      console.log(this.nodeRow);
      this.form.parentId = this.nodeRow.id;
      this.form.modeType = this.nodeRow.modeType;
      addModel(this.form).then(res => {
        console.log(res)
        this.addStatus = false;
      })
    }
  }
}
</script>
<style lang="scss" scoped>
::v-deep {
  .el-form-item .el-select {
    width: 100%;
  }
}
.btnBox {
  display: flex;
  justify-content: center;
}
</style>
Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue
Source/plt-web/plt-web-ui/src/views/systemModel/systemMonitor/index.vue
Source/plt-web/plt-web-ui/src/views/systemModule/businessModel/index.vue
ÎļþÒÑɾ³ý
Source/plt-web/plt-web-ui/src/views/systemModule/mangeModel/index.vue
ÎļþÒÑɾ³ý
Source/plt-web/plt-web-ui/src/views/systemModule/operateType/index.vue
ÎļþÒÑɾ³ý