wangting
2024-12-27 bce5128f2b33735774e0777b00bca4ca4a61962a
Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue
@@ -2,11 +2,12 @@
  <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">
        <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 :name="data.icon"></icon-show>
                {{ (node || {}).label }}
            </span>
          </span>
@@ -17,40 +18,54 @@
    <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
        <div v-if="nodeRow.childType === 0 || nodeRow.childType === -1" class="btnBox">
          <el-button v-if="!addStatus && !editStatus" :disabled="nodeRow.childType === 0" 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 v-if="!addStatus && !editStatus" :disabled="nodeRow.childType === -1" icon="el-icon-edit" plain
                     size="small" type="primary"
                     @click="editClickHandler">修改
          </el-button>
          <el-button :disabled="mangeShowBtn" icon="el-icon-close" plain size="small" type="danger"
                     @click="addClickHandler">删除
          <el-button v-if="editStatus" icon="el-icon-check" plain size="small"
                     type="success" @click="editSaveClickHandler">保存
          </el-button>
          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">导入sql
          <el-button v-if="addStatus || editStatus" icon="el-icon-close" plain size="small"
                     type="danger" @click="addStatus=false;editStatus=false;">取消
          </el-button>
          <el-button v-if="!addStatus && !editStatus" :disabled="nodeRow.childType === -1" icon="el-icon-close" plain
                     size="small" type="danger"
                     @click="delClickHandler">删除
          </el-button>
          <el-button v-if="!addStatus && !editStatus" icon="el-icon-upload2" plain size="small" type="primary"
                     @click="sqlClickExportClick">导出sql
          </el-button>
        </div>
        <el-form ref="form" :model="form" label-width="85px" style="max-height: calc(100vh - 180px);overflow: auto;">
          <el-form-item label="名称:">
            <el-input v-model="form.name" :disabled="!editStatus && !addStatus" placeholder="请输入名称"></el-input>
          </el-form-item>
          <el-form-item label="标识:">
            <el-input v-model.trim="form.code" :disabled="!editStatus && !addStatus" placeholder="请输入标识"></el-input>
          </el-form-item>
          <el-form-item label="别名:">
            <el-input v-model="form.alias" :disabled="!editStatus && !addStatus" placeholder="请输入别名"></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-number v-model="form.sort" :disabled="!editStatus && !addStatus" :max="9999" :min="0"
                             label="顺序"></el-input-number>
          </el-form-item>
          <el-form-item label="描述:">
            <el-input v-model="form.remark" :disabled="!editStatus && !addStatus" placeholder="请输入描述"></el-input>
          </el-form-item>
        </el-form>
      </basic-container>
    </el-main>
  </el-container>
@@ -58,14 +73,19 @@
<script>
//管理功能模块
import {getSysModelTreeMenuByPID, addModel} from "@/api/systemModel/mangeModel/api"
import {exportFunctionSql, getSysModelTreeMenuByPID} from "@/api/systemModel/mangeModel/api"
import {addOperationType, updateOperationType, delOperationType} from "@/api/systemModel/operateType/api"
import func from "@/util/func";
export default {
  name: "index",
  data() {
    return {
      refresh: Math.random(),
      editStatus: false,
      addStatus: false,
      nodeRow: {},
      currentClickNode: {},
      form: {},
      treeData: [],
      treeOption: {
@@ -82,7 +102,7 @@
        treeLoad: (node, resolve) => {
          const params = {
            parentId: node.level === 0 ? "operateNode" : node.data.id,
            modeType: node.level === 0 ? "firstNode" : node.data.modeType,
            modeType: node.level === 0 ? 'firstNode' : "",
          }
          getSysModelTreeMenuByPID(params).then(res => {
            resolve(res.data.data.map(item => {
@@ -90,7 +110,8 @@
                ...item,
                id: item.id,
                name: item.name,
                leaf: !item.hasChildren
                leaf: !item.hasChildren,
                icon: item.source || 'iconoir:home'
              }
            }))
          })
@@ -100,76 +121,183 @@
  },
  created() {
  },
  computed: {
    /**
     * childType
     * 为-1   全部按钮展示 禁用修改 删除 增加操作类型
     * 不为-1 隐藏 删除非系统模块 删除业务模块
     * 为1时 禁用操作类型、导入、导出
     * 为2时 禁用增加 导入 导出
     * mangeShowBtn 为 true 说明是顶层节点 全部按钮展示 禁用修改 删除 增加操作类型
     * @returns {Number}
     */
    mangeShowBtn() {
      return this.form.childType === -1;
    },
    childTypeBtn() {
      return this.form.childType === 1;
    }
  },
  computed: {},
  methods: {
    // 树行点击
    nodeClick(row) {
      console.log(row);
    nodeClick(row, node) {
      this.form = {...row};
      this.nodeRow = {...row};
      this.currentClickNode = node;
      this.addStatus = false;
      this.editStatus = false;
    },
    // 清空表单绑定值
    resetFormValue() {
      this.form = {};
      this.refresh = Math.random(); // 刷新左侧树
    },
    // 新增按钮
    addClickHandler() {
      for (const key in this.form) {
        if (this.form.hasOwnProperty(key)) {
          this.form[key] = null;
        }
      }
      this.form = {};
      this.addStatus = true;
      this.editStatus = false;
    },
    // 保存按钮
    addSaveClickHandler() {
      console.log(this.form)
      if (!this.form.name) {
        this.$message.error('模块名不能为空');
        this.$message.error('名称不能为空');
        return
      }
      if (!this.form.code) {
        this.$message.error('标识不能为空');
        return
      }
      if (!this.form.alias) {
        this.$message.error('别名不能为空');
        return
      }
      if (!this.form.sort) {
        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!');
      if (this.form.alias && this.form.alias.length > 255) {
        this.$message.error('别名长度不能超过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;
      const params = {
        name: this.form.name,
        identify: this.form.code,
        alias: this.form.alias,
        desc: this.form.remark,
        seq: this.form.sort
      }
      addOperationType(params).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.handleRefreshTree('add');
          this.addStatus = false;
        }
      })
    },
    // 修改按钮
    editClickHandler() {
      this.addStatus = false;
      this.editStatus = true;
    },
    // 修改保存
    editSaveClickHandler() {
      console.log(this.form);
      if (!this.form.name) {
        this.$message.error('名称不能为空');
        return
      }
      if (!this.form.code) {
        this.$message.error('标识不能为空');
        return
      }
      if (!this.form.alias) {
        this.$message.error('别名不能为空');
        return
      }
      if (this.form.sort == null || this.form.sort === '' || this.form.sort === undefined) {
        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.alias && this.form.alias.length > 255) {
        this.$message.error('别名长度不能超过255!');
        return
      }
      const params = {
        id: this.form.id,
        name: this.form.name,
        identify: this.form.code,
        alias: this.form.alias,
        desc: this.form.remark,
        seq: this.form.sort
      }
      updateOperationType(params).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
          this.handleRefreshTree('edit');
          this.editStatus = false;
        }
      })
    },
    // 删除
    delClickHandler() {
      this.$confirm('您确定要删除所选择的数据吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delOperationType(this.form).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.msg);
            this.handleRefreshTree('del')
            this.addStatus = false;
            this.editStatus = false;
            this.nodeRow = {};
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // 导出sql
    sqlClickExportClick() {
      exportFunctionSql({isFunction: false}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      });
    },
    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();
          if (type === 'edit') {
            this.$refs.tree.setCurrentKey(null);
          } else {
            this.$refs.tree.setCurrentNode(this.nodeRow);
          }
        } else {
          this.refresh = Math.random(); // 刷新左侧树
        }
      }
    }
  }
}
@@ -184,6 +312,7 @@
.btnBox {
  display: flex;
  justify-content: center;
  justify-content: left;
  margin-bottom: 15px;
}
</style>