ludc
2025-01-15 c659560c7ee8d8f8278b938421de13bf65d1e1b1
Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue
@@ -1,12 +1,14 @@
<template>
  <el-container>
  <el-container v-loading="createdLoading">
    <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">
        <div style="max-height: calc(100vh - 150px);overflow: auto">
          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" node-key="id"
                     @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>
            <span style="display: flex">
              <icon-show v-if="data.iconType=='svg'" :name="data.icon"></icon-show>
              <i v-else :class="data.icon"></i>
                {{ (node || {}).label }}
            </span>
          </span>
@@ -17,83 +19,15 @@
    <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
        <div v-if="(form.childType || form.childType === 0) && !addStatus && !editStatus && form.category !== 1"
             class="btnBox">
          <el-button :disabled="(mangeShowBtn || form.childType === 0) ? 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"
          <el-button :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">删除
@@ -102,11 +36,11 @@
                     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"
          <el-button v-if=" mangeShowBtn" 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"
          <el-button v-if="mangeShowBtn " icon="el-icon-circle-close" plain size="small"
                     type="danger"
                     @click="addClickHandler">删除业务模块
          </el-button>
@@ -119,12 +53,108 @@
          <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">修改别名
        <div v-else-if="(form.childType || form.childType === 0) && (addStatus || editStatus)" class="btnBox">
          <el-button v-if="addStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="addSaveClickHandler">保存
          </el-button>
          <el-button icon="el-icon-close" plain size="small" type="danger">删除
          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="editSaveClickHandler">保存
          </el-button>
          <el-button icon="el-icon-close" plain size="small"
                     type="danger" @click="addStatus=false;editStatus=false;">取消
          </el-button>
        </div>
        <div v-if="form.category === 1" class="btnBox">
          <el-button icon="el-icon-edit" plain size="small" type="primary" @click="updataAliasClickHandler">修改别名
          </el-button>
          <el-button icon="el-icon-close" plain size="small" type="danger" @click="deleteOperationClickHandler">删除
          </el-button>
        </div>
        <el-form ref="form" :model="form" label-width="100px" size="small"
                 style="max-height: calc(100vh - 200px);overflow: auto;">
          <span v-if="form.category !== 1">
            <el-form-item class="is-required">
              <span slot="label">模块名:</span>
              <el-input v-model="form.name" :disabled="!editStatus && !addStatus" placeholder="请输入模块名"></el-input>
            </el-form-item>
            <el-form-item class="is-required">
              <span slot="label">模块别名:</span>
              <el-input v-model="form.alias" :disabled="!editStatus && !addStatus"  placeholder="请输入模块别名"></el-input>
            </el-form-item>
           <el-form-item class="is-required">
              <span slot="label">序号:</span>
              <el-input-number v-model="form.sort" :disabled="!editStatus && !addStatus"></el-input-number>
              <el-link :underline="false" style="margin-left: 20px" type="danger">数字,描述该模块在其父模块下的显示顺序</el-link>
            </el-form-item>
            <el-form-item v-if="form.functionType === 0" label="C/S:">
            <el-input v-model="form.pathC" :disabled="!editStatus && !addStatus" :rows="2" placeholder="请输入C/S路径"
                      type="textarea"></el-input>
          </el-form-item>
          <el-form-item v-if="form.functionType === 0" label="B/S:">
            <el-input v-model="form.path" :disabled="!editStatus && !addStatus" :rows="2" placeholder="请输入B/S路径"
                      type="textarea"></el-input>
          </el-form-item>
          <el-form-item v-if="form.functionType === 0" label=".NET:">
            <el-input v-model="form.resourceDotNet" :disabled="!editStatus && !addStatus" :rows="2"
                      placeholder="请输入.NET" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="图标:">
              <input-icon v-model="form.source" :disabled="!editStatus && !addStatus" placeholder="请选择图标">
              </input-icon>
          </el-form-item>
          <el-form-item label="描述:">
            <el-input v-model="form.remark" :disabled="!editStatus && !addStatus" :rows="3" placeholder="请输入描述"
                      type="textarea"></el-input>
          </el-form-item>
            <el-form-item label="是否菜单:">
            <el-switch
              v-model="form.functionType"
              :active-value="0"
              :disabled="!editStatus && !addStatus"
              :inactive-value="1"
              active-color="#13ce66"
              inactive-color="#ff4949">
            </el-switch>
          </el-form-item>
          <el-form-item label="是否有效:">
            <el-switch
              v-model="form.isValid"
              :disabled="!editStatus && !addStatus"
              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.category === 1">
            <el-form-item label="名称:" class="is-required">
              <el-input v-model="form.name" :disabled="form.category === 1" placeholder="请输入名称"></el-input>
            </el-form-item>
            <el-form-item label="标识:" class="is-required">
              <el-input v-model="form.code" :disabled="form.category === 1" placeholder="请输入标识"></el-input>
            </el-form-item>
            <el-form-item label="别名:" class="is-required">
              <el-input v-model="form.alias" placeholder="请输入别名"></el-input>
            </el-form-item>
            <el-form-item label="图标:">
              <input-icon v-model="form.source" placeholder="请选择图标">
              </input-icon>
            </el-form-item>
            <el-form-item label="编号:" class="is-required">
              <el-input-number v-model="form.sort" :disabled="form.category === 1" :max="63" :min="1"></el-input-number>
            </el-form-item>
            <el-form-item label="描述:">
              <el-input v-model="form.remark" :disabled="form.category === 1" 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>
      </basic-container>
    </el-main>
    <el-dialog
@@ -133,7 +163,7 @@
      append-to-body="true"
      class="avue-dialog"
      title="操作分类"
      width="60%"
      width="900px"
    >
      <avue-crud
        ref="methodsCrud"
@@ -142,13 +172,15 @@
        :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>
         <el-button @click="methodsVisble = false">取 消</el-button>
        </span>
    </el-dialog>
    <!--导入    -->
    <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" fileName="files" title="导入"
                 @updata="resetFormValue"></upload-file>
  </el-container>
</template>
@@ -160,7 +192,10 @@
  updateModel,
  delModule,
  exportFunctionSql,
  addOperationType
  addOperationType,
  exportModule,
  updateAlias,
  delFuncOperation
} from "@/api/systemModel/mangeModel/api"
import func from "@/util/func";
import basicOption from "@/util/basic-option";
@@ -169,6 +204,10 @@
  name: "index",
  data() {
    return {
      tipList: [],
      upFileType: ['xls', 'xlsx'],
      fileUrl: 'api/hmSysModConfigController/importModule',
      createdLoading: false,
      lastIndex: null,
      methodsList: [],
      methodsData: [],
@@ -177,13 +216,20 @@
        addBtn: false,
        menu: false,
        height: 500,
        column: [
          {
            label: '操作分类',
            prop: 'name',
            sortable: true,
          }
        ]
        header: false,
        column: [{
          label: '名称',
          prop: 'name',
          width:180,
          sortable: true,
        }, {
          label: '标识',
          prop: 'code',
          width:180,
        }, {
          label: '描述',
          prop: 'remark'
        }]
      },
      methodsLoading: false,
      methodsVisble: false,
@@ -192,6 +238,7 @@
      addStatus: false,
      editStatus: false,
      nodeRow: {},
      currentClickNode: null,
      form: {},
      treeData: [],
      treeOption: {
@@ -199,24 +246,26 @@
        menu: false,
        addBtn: false,
        defaultExpandAll: false,
        defaultExpandedKeys:['business'],
        props: {
          label: 'name',
          label: 'label',
          value: 'id',
          children: 'children',
        },
        lazy: true,
        treeLoad: (node, resolve) => {
          const params = {
            parentId: node.level === 0 ? "modelManagmentNode" : node.data.id,
            parentId: node.level === 0 ? "business" : 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
                label: item.category!=1?item.name:item.alias,
                leaf: !item.hasChildren,
                icon: item.source || (node.level === 0?'el-icon-s-home':'el-icon-s-tools'),
                iconType:item.source?'svg':'iconfont'
              }
            }))
          })
@@ -229,6 +278,7 @@
  computed: {
    /**
     * childType
     * 为0 全部按钮展示
     * 为-1   全部按钮展示 禁用修改 删除 增加操作类型
     * 不为-1 隐藏 删除非系统模块 删除业务模块
     * 为1时 禁用操作类型、导入、导出
@@ -245,27 +295,29 @@
  },
  methods: {
    // 树行点击
    nodeClick(row) {
      console.log(row.childType);
    nodeClick(row, node) {
      this.form = {...row};
      this.nodeRow = {...row};
      this.currentClickNode = node;
      this.addStatus = false;
      this.editStatus = false;
    },
    // 新增按钮
    addClickHandler() {
      this.resetFormValue();
      // this.resetFormValue();
      this.defalutName.forEach(key => {
        this.form[key] = null;
      })
      this.form.isValid = true;
      this.addStatus = true;
      this.editStatus = false;
    },
    // 清空表单绑定值
    resetFormValue() {
      this.defalutName.forEach(key => {
        this.form[key] = null;
      })
      this.form.isValid = false;
      this.form = {};
      this.refresh = Math.random(); // 刷新左侧树
    },
    // 新增保存按钮
@@ -274,24 +326,28 @@
        this.$message.error('模块名不能为空');
        return
      }
      if (!this.form.alias) {
        this.$message.error('菜单标识不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        this.$message.error('模块名长度不能超过128!');
        return
      }
      if (this.form.remark && this.form.remark.length > 255) {
        this.$message.error('描述长度超过255!');
        this.$message.error('描述长度不能超过255!');
        return
      }
      if (this.form.resourceDotNet && this.form.resourceDotNet.length > 255) {
        this.$message.error('.NET标识长度不能255!');
        this.$message.error('.NET标识长度不能超过255!');
        return
      }
      if (this.form.pathC && this.form.pathC.length > 255) {
        this.$message.error('C/S标识长度不能255!');
        this.$message.error('C/S标识长度不能超过255!');
        return
      }
      if (this.form.resourceMobile && this.form.resourceMobile.length > 255) {
        this.$message.error('Mobile标识长度不能255!');
        this.$message.error('Mobile标识长度不能超过255!');
        return
      }
      this.form.parentId = this.form.id;
@@ -299,14 +355,15 @@
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.addStatus = false;
          this.refresh = Math.random(); // 刷新左侧树
          // this.resetFormValue();
          this.form.childType = null;
          this.handleRefreshTree('add')
        }
      })
    },
    // 修改按钮
    editClickHandler() {
      console.log(this.form);
      this.editStatus = true;
      this.addStatus = false;
    },
@@ -317,6 +374,10 @@
        this.$message.error('模块名不能为空');
        return
      }
      if (!this.form.alias) {
        this.$message.error('菜单标识不能为空');
        return
      }
      if (this.form.name.length > 128) {
        this.$message.error('模块名长度超过128!');
        return
@@ -337,12 +398,13 @@
        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(); // 刷新左侧树
          // this.resetFormValue();
          this.form.childType = null;
          this.handleRefreshTree('edit')
        }
      })
    },
@@ -355,13 +417,11 @@
        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.handleRefreshTree('del')
            this.addStatus = false;
            this.editStatus = false;
            this.refresh = Math.random(); // 刷新左侧树
          }
        })
      }).catch(() => {
@@ -377,8 +437,6 @@
      exportFunctionSql({isFunction: true}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      }).catch(err => {
        this.$message.error(err);
      });
    },
@@ -390,12 +448,14 @@
    // 增加操作类型
    addMethodsClickHandler() {
      this.methodsLoading = true;
      getSysModelTreeMenuByPID({parentId: 'sysOptionNode'}).then(res => {
        if (res.data.code === 200) {
      getSysModelTreeMenuByPID({parentId: 'operateNode'}).then(res => {
        if (res.data.code === 200 && res.data.data.length > 0) {
          this.methodsVisble = true;
          const data = res.data.data[0].children;
          const data = res.data.data;
          this.methodsData = data;
          this.methodsLoading = false;
        } else {
          this.$message.error('未找到可增加的操作类型');
        }
      })
    },
@@ -413,13 +473,11 @@
        }
      })
      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;
          this.handleRefreshTree('add') // 刷新左侧树
        }
      })
    },
@@ -434,10 +492,86 @@
          this.lastIndex = newIndex;
        },
        () => {
          this.methodsList = [];
          this.methodsList = [row];
        }
      );
    },
    // 修改别名
    updataAliasClickHandler() {
      const params = {
        id: this.form.id,
        isValid: this.form.isValid,
        source:this.form.source,
        alias: this.form.alias
      }
      updateAlias(params).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.handleRefreshTree('edit')
        }
      })
    },
    // 删除模块下关联的操作类型
    deleteOperationClickHandler() {
      this.$confirm('您确定要删除所选择的数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const params = {
          funcId: this.form.funcId,
          operId: this.form.operId
        }
        delFuncOperation(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.msg);
            this.handleRefreshTree('del');
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // 导出
    exportClickHandler() {
      this.createdLoading = true;
      exportModule().then(res => {
        func.downloadFileByBlobHandler(res);
        this.createdLoading = false
        this.$message.success('导出成功');
      });
    },
    // 导入
    upLoadClickHandler() {
      this.$refs.upload.visible = true;
    },
    handleRefreshTree(type) {
      //type:add\edit\del
      if (type == "del") {
        this.$refs.tree.remove(this.currentClickNode);
        this.currentClickNode = null;
        this.form = {};
      } else {
        if (this.currentClickNode) {
          let node = this.currentClickNode.parent;
          node.loaded = false;
          node.expand();
          this.$nextTick(()=>{
            this.$refs.tree.setCurrentKey(this.currentClickNode.data.id);
          });
        } else {
          this.refresh = Math.random(); // 刷新左侧树
        }
      }
    }
  }
}
</script>
@@ -451,6 +585,7 @@
.btnBox {
  display: flex;
  justify-content: center;
  justify-content: left;
  margin-bottom: 15px;
}
</style>