gangyj 3 år sedan
förälder
incheckning
64ef504012
4 ändrade filer med 317 tillägg och 1 borttagningar
  1. 34 0
      src/api/manager/wbstree.js
  2. 13 0
      src/router/views/index.js
  3. 11 1
      src/views/manager/wbsinfo.vue
  4. 259 0
      src/views/manager/wbsinfo/edit.vue

+ 34 - 0
src/api/manager/wbstree.js

@@ -12,6 +12,29 @@ export const getList = (current, size, params) => {
   })
 }
 
+export const getLazytree = (wbsId,parentId,params) => {
+  return request({
+    url: '/api/blade-manager/wbsTree/lazy-tree',
+    method: 'get',
+    params: {
+      ...params,
+      wbsId,
+      parentId,
+    }
+  })
+}
+
+export const getAlltree = (tenantId,params) => {
+  return request({
+    url: '/api/blade-manager/wbsTree/tree',
+    method: 'get',
+    params: {
+      ...params,
+      tenantId,
+    }
+  })
+}
+
 export const getDetail = (id) => {
   return request({
     url: '/api/blade-manager/wbsTree/detail',
@@ -48,3 +71,14 @@ export const update = (row) => {
   })
 }
 
+export const selectByNodeTable = (id, params) => {
+  return request({
+    url: '/blade-manager/wbsTree/selectByNodeTable',
+    method: 'get',
+    params: {
+      ...params,
+      id
+    }
+  })
+}
+

+ 13 - 0
src/router/views/index.js

@@ -103,4 +103,17 @@ export default [{
     component: () =>
       import( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
   }]
+},{
+  path: '/wbs',
+  component: Layout,
+  redirect: '/wbs/edit',
+  children: [{
+    path: 'edit/:id',
+    name: '编辑WBS树',
+    meta: {
+      i18n: 'edit'
+    },
+    component: () =>
+      import( /* webpackChunkName: "views" */ '@/views/manager/wbsinfo/edit')
+  }]
 }]

+ 11 - 1
src/views/manager/wbsinfo.vue

@@ -27,6 +27,9 @@
                    @click="handleDelete">删 除
         </el-button>
       </template>
+      <template slot-scope="{row,index}" slot="menu">
+        <el-button type="text" icon="el-icon-edit" size="mini" v-if="permission.wbsinfo_tree_edit" @click="toEdit(row,index)">编辑wbs库</el-button>
+      </template>
     </avue-crud>
   </basic-container>
 </template>
@@ -42,12 +45,13 @@
         query: {},
         loading: true,
         page: {
-          pageSize: 10,
+          pageSize: 20,
           currentPage: 1,
           total: 0
         },
         selectionList: [],
         option: {
+          menuWidth:300,
           height:'auto',
           calcHeight: 30,
           tip: false,
@@ -80,6 +84,7 @@
             {
               label: "wsb属性",
               prop: "wbsType",
+              hide:true,
               rules: [{
                 required: true,
                 message: "请输入wsb属性",
@@ -227,6 +232,11 @@
           this.loading = false;
           this.selectionClear();
         });
+      },
+
+      toEdit(row){
+        //console.log(row,index);
+        this.$router.push('/wbs/edit/'+row.id);
       }
     }
   };

+ 259 - 0
src/views/manager/wbsinfo/edit.vue

@@ -0,0 +1,259 @@
+<template>
+  <basic-container>
+    <div class="flex">
+      <div class="flex1 mg-r-20">
+        <p>工程节点信息</p>
+        <div class="flex">
+          <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input>
+          <el-button type="info" class="mg-l-20">导入划分</el-button>
+        </div>
+        <el-tree
+          class="filter-tree" lazy
+          :load="loadNode" @node-click="getNodeDetail"
+          :props="defaultProps"
+           highlight-current
+          :filter-node-method="filterNode"
+          ref="tree">
+          <span class="custom-tree-node" slot-scope="{ node, data }">
+            <span>
+              {{ node.label }}
+              <el-dropdown @click="command=>{setLeftType(command,data)}">
+                <el-button
+                  type="text" icon="el-icon-more" class="normal-black">
+                </el-button>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item @click.native="setLeftType(1,data,node)" icon="el-icon-circle-plus-outline">新增子级</el-dropdown-item>
+                  <el-dropdown-item @click.native="setLeftType(2,data,node)" icon="el-icon-edit">编辑节点</el-dropdown-item>
+                  <el-dropdown-item @click.native="setLeftType(3,data,node)" icon="el-icon-document-copy">复制节点</el-dropdown-item>
+                  <el-dropdown-item @click.native="setLeftType(4,data,node)" icon="iconfont hcicon-danganziliao-biaogetianxie" class="font-s-12">表单设置</el-dropdown-item>
+                  <el-dropdown-item @click.native="setLeftType(5,data,node)" icon="el-icon-coin">元素设置</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
+            </span>
+          </span>
+        </el-tree>
+      </div>
+      <div class="flex1">
+        <template v-if="leftType==2 || leftType==1">
+          <p>节点信息</p>
+          <el-table :data="tableData" border style="width: 100%">
+            <el-table-column align="center" prop="deptName" label="当前节点" ></el-table-column>
+            <el-table-column align="center" prop="deptCategory" label="节点类型" width="180"></el-table-column>
+            <el-table-column align="center" prop="parentName" label="上级节点"></el-table-column>
+          </el-table>
+        </template>
+        <template v-if="leftType==4">
+          <el-table :data="formData" border style="width: 100%">
+            <el-table-column align="center" prop="tableName" label="表单名称" ></el-table-column>
+            <el-table-column align="center" prop="tableType" label="表单类型"></el-table-column>
+            <el-table-column align="center" prop="elementTotal" label="元素总量"></el-table-column>
+            <el-table-column align="center" prop="isCreateTable" label="是否创建表"></el-table-column>
+            <el-table-column align="center" prop="tableName" label="所属方"></el-table-column>
+            <el-table-column label="操作">
+              <template slot-scope="scope">
+                <el-button
+                  size="mini"
+                  @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
+                <el-button
+                  size="mini"
+                  type="danger"
+                  @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+      </div>
+    </div>
+
+    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" append-to-body>
+      <el-form ref="nodeDetail" :model="nodeDetail" label-width="110px">
+        <el-form-item label="节点名称">
+          <el-input v-model="nodeDetail.deptName"></el-input>
+        </el-form-item>
+        <el-form-item label="上级节点">
+          <el-input v-model="nodeDetail.parentName" disabled></el-input>
+        </el-form-item>
+        <el-form-item label="节点类型">
+          <el-select v-model="nodeDetail.deptCategory" placeholder="请选择" class="w-100p">
+            <el-option v-for="item in deptCategorylist" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="划分编号">
+          <el-input v-model="nodeDetail.partitionCode"></el-input>
+        </el-form-item>
+        <el-form-item label="唯一编码">
+          <el-input v-model="nodeDetail.uniqueCode"></el-input>
+        </el-form-item>
+        <el-form-item label="是否有混凝土">
+          <el-radio-group v-model="nodeDetail.isConcrete" size="small">
+            <el-radio :label="0" border>无</el-radio>
+            <el-radio :label="1" border>有</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="是否试验节点">
+          <el-radio-group v-model="nodeDetail.isExpernode" size="small">
+            <el-radio :label="0" border>否</el-radio>
+            <el-radio :label="1" border>是</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="试验节点">
+          <el-input v-model="nodeDetail.remark" type="textarea"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveNode">确 定</el-button>
+      </span>
+    </el-dialog>
+  </basic-container>
+</template>
+
+<script>
+  import {getLazytree,getDetail,update,selectByNodeTable} from "@/api/manager/wbstree";
+  import {getDictionary} from "@/api/system/dict";
+  import {mapGetters} from "vuex";
+  export default {
+    data() {
+      return {
+        id:'',
+        filterText:'',
+        treeData:[],
+        defaultProps: {
+          children: 'children',
+          label: 'title',
+          isLeaf: function(data){
+            return !data.hasChildren;
+          }
+        },
+        leftType:2,
+        curTreeData:{},
+        tableData:[],
+        nodeDetail:{},
+        formData:[],
+
+        dialogVisible:false,
+        deptCategorylist:[],
+      };
+    },
+    computed: {
+      ...mapGetters(["userInfo"]),
+
+      dialogTitle:function(){
+        let text = '节点';
+        if(this.leftType == 1){
+          text = '新增'+text;
+        }else if(this.leftType == 2){
+          text = '编辑'+text;
+        }
+        return text;
+      },
+    },
+    created() {
+      this.init();
+    },
+    methods: {
+      init(){
+        this.id = this.$route.params.id;
+      },
+      loadNode(node, resolve){
+        let pid = 0;
+        if (node.level != 0) {
+          pid = node.data.id
+        }
+        getLazytree(this.id ,pid).then((res)=>{
+          return resolve(res.data.data);
+        })
+      },
+
+      getNodeDetail(data,node){
+        //console.log(data,node,ref)
+        let parentName = '';
+        if(node.parent.data){
+          parentName = node.parent.data.title;
+        }
+        this.curTreeData = data;
+        this.curTreeData.parentName = parentName;
+        getDetail(data.id).then((res)=>{
+          res.data.data.parentName = parentName;
+          this.tableData = [res.data.data];
+          this.nodeDetail = Object.assign({},res.data.data);
+        })
+      },
+
+      saveNode(){
+        update(this.nodeDetail).then(()=>{
+          let node = this.tableData[0];
+          node.deptName = this.nodeDetail.deptName;
+          node.deptCategory = this.nodeDetail.deptCategory;
+          this.curTreeData.title = this.nodeDetail.deptName;
+          this.dialogVisible = false;
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        })
+      },
+      addNode(){
+
+      },
+
+      setLeftType(type,data,node){
+        this.leftType = type;
+        this.curTreeData = data;
+
+        if(this.leftType == 1 || this.leftType == 2){
+          this.getDeptCategorylist();
+          this.dialogVisible = true;
+        }
+
+        getDetail(data.id).then((res)=>{
+          let parentName = '';
+          if(node.parent.data){
+            parentName = node.parent.data.title;
+          }
+          res.data.data.parentName = parentName;
+          this.tableData = [res.data.data];
+          if(this.leftType == 1){
+            this.nodeDetail = {
+              parentId:res.data.data.id,
+              parentName:parentName
+            };
+          }else{
+            this.nodeDetail = Object.assign({},res.data.data);
+          }
+        })
+        if(this.leftType == 4){
+          selectByNodeTable(data.id).then((res)=>{
+            console.log(res)
+          })
+        }
+        
+      },
+
+      getDeptCategorylist(){
+        if(this.deptCategorylist.length >1){
+          return;
+        }
+        getDictionary({
+          code:'wbs_node_type'
+        }).then((res)=>{
+          this.deptCategorylist = res.data.data;
+        })
+      },
+
+      filterNode(value, data) {
+        if (!value) return true;
+        return data.label.indexOf(value) !== -1;
+      }
+    }
+  };
+</script>
+
+<style scoped lang="scss">
+  .font-s-12 /deep/ .iconfont{
+    font-size: 12px;
+  }
+  .el-popper[x-placement^=bottom]{
+    margin-top: -6px;
+  }
+</style>