gangyj 3 年之前
父节点
当前提交
c0f5596898
共有 3 个文件被更改,包括 302 次插入29 次删除
  1. 12 1
      src/api/manager/wbstree.js
  2. 26 0
      src/styles/common.scss
  3. 264 28
      src/views/manager/wbsinfo/edit.vue

+ 12 - 1
src/api/manager/wbstree.js

@@ -12,7 +12,7 @@ export const getList = (current, size, params) => {
   })
 }
 
-export const getLazytree = (wbsId,parentId,params) => {
+export const getLazytree = (wbsId,parentId,tenantId,params) => {
   return request({
     url: '/api/blade-manager/wbsTree/lazy-tree',
     method: 'get',
@@ -20,6 +20,7 @@ export const getLazytree = (wbsId,parentId,params) => {
       ...params,
       wbsId,
       parentId,
+      tenantId,
     }
   })
 }
@@ -81,4 +82,14 @@ export const selectByNodeTable = (id, params) => {
     }
   })
 }
+export const saveFormAndElement = (formElementDTO, params) => {
+  return request({
+    url: '/blade-manager/wbsTree/saveFormAndElement',
+    method: 'post',
+    params: {
+      ...params,
+      formElementDTO
+    }
+  })
+}
 

+ 26 - 0
src/styles/common.scss

@@ -41,6 +41,18 @@ a{
 .w-100p{width: 100%;}
 .h-100p{height: 100%;}
 
+.mg-l-10{margin-left: 10px;}
+.mg-t-10{margin-top: 10px;}
+.mg-r-10{margin-right: 10px;}
+.mg-b-10{margin-bottom: 10px;}
+.mg-10{margin: 10px;}
+
+.pd-l-10{padding-left: 10px;}
+.pd-t-10{padding-top: 10px;}
+.pd-r-10{padding-right: 10px;}
+.pd-b-10{padding-bottom: 10px;}
+.pd-10{padding: 10px;}
+
 .mg-l-20{margin-left: 20px;}
 .mg-t-20{margin-top: 20px;}
 .mg-r-20{margin-right: 20px;}
@@ -55,8 +67,22 @@ a{
 
 .bgc-f6{background-color: #f6f6f6;}
 .normal-black{color: #606266;}
+.border-grey{
+  border-color: rgb(187, 187, 187);
+  border-width: 1px;
+  border-style: solid;
+}
 
 .font-s-12{font-size: 12px;}
+.font-c-warning{color: rgb(240, 99, 10);}
+
+.text-icon{
+  padding:0px;
+  font-size: 18px;
+}
+.text-icon-danger.el-button--text{
+  color: #f56c6c;
+}
 
 .custom-tree-node {
   flex: 1;

+ 264 - 28
src/views/manager/wbsinfo/edit.vue

@@ -10,8 +10,8 @@
         <el-tree
           class="filter-tree" lazy
           :load="loadNode" @node-click="getNodeDetail"
-          :props="defaultProps"
-           highlight-current
+          :props="defaultProps" :expand-on-click-node="false"
+           highlight-current node-key="id"
           :filter-node-method="filterNode"
           ref="tree">
           <span class="custom-tree-node" slot-scope="{ node, data }">
@@ -25,7 +25,7 @@
                   <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(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>
@@ -38,17 +38,38 @@
           <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="deptCategory" :formatter="formatCat" label="节点类型" width="180"></el-table-column>
             <el-table-column align="center" prop="parentName" label="上级节点"></el-table-column>
           </el-table>
+          <p>
+            <span>当前已创建的元素表</span>
+            <el-button @click="showFormElement" type="text" icon="el-icon-circle-plus-outline" class="text-icon mg-l-10"></el-button>
+            <el-button type="text" icon="el-icon-document-copy" class="text-icon"></el-button>
+          </p>
+          <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="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>
         <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 align="center" prop="tableOwner" label="所属方"></el-table-column>
             <el-table-column label="操作">
               <template slot-scope="scope">
                 <el-button
@@ -65,7 +86,7 @@
       </div>
     </div>
 
-    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" append-to-body>
+    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" :rules="rules" 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>
@@ -84,20 +105,24 @@
         <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>
+        <template v-if="nodeDetail.deptCategory == 6">
+          <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>
+        </template>
+        <el-form-item label="内业资料类型">
+          <el-select v-model="nodeDetail.majorDataType" placeholder="请选择" class="w-100p">
+            <el-option v-for="item in majorDataTypeList" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+          </el-select>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -105,11 +130,96 @@
         <el-button type="primary" @click="saveNode">确 定</el-button>
       </span>
     </el-dialog>
+
+    <el-dialog title="创建新的元素表" :visible.sync="eleVisible" :rules="eleRules" width="50%" append-to-body>
+      <el-form ref="eleDialog" :model="eleForm" label-width="110px">
+        <el-form-item label="节点名称">
+          <el-input v-model="eleForm.deptName"></el-input>
+        </el-form-item>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="表类型">
+              <el-select v-model="eleForm.tableType" placeholder="请选择" class="w-100p">
+                <el-option v-for="item in tableTypelist" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="所属方">
+              <el-select v-model="eleForm.tableOwner" placeholder="请选择" class="w-100p">
+                <el-option  :key="1" label="施工"  :value="1"></el-option>
+                <el-option  :key="2" label="监理"  :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="flex jc-sb">
+        <div></div>
+        <div>
+          <el-link type="primary">快捷导入</el-link>
+          <el-link type="primary" class="mg-l-20">下载导入模版</el-link>
+        </div>
+      </div>
+      <div class="border-grey">
+        <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
+        <el-table :data="eleForm.elementList" border style="width: 100%" height="400px">
+            <el-table-column align="center" type="index" width="50"></el-table-column>
+            <el-table-column align="center" prop="eName" label="元素名称" >
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.eName" size="small" placeholder="请输入内容"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" prop="eType" label="数据类型" width="120">
+              <template slot-scope="scope">
+                <el-select v-model="scope.row.eType" size="small" placeholder="请选择">
+                  <el-option v-for="item in dataTypeList" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+                </el-select>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" prop="eLength" label="长度" width="120">
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
+              <template slot-scope="scope">
+                <div class="flex">
+                  <el-select v-model="scope.row.allow" size="small" placeholder="请选择" style="width:50px">
+                    <el-option :key="1" label="≥" value="≥"></el-option>
+                    <el-option :key="2" label="≤" value="≤"></el-option>
+                    <el-option :key="3" label="±" value="±"></el-option>
+                    <el-option :key="4" label="【】" value="【】"></el-option>
+                  </el-select>
+                  <el-input v-model="scope.row.deviation" size="small" placeholder="请输入内容"></el-input>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
+              <template slot-scope="scope">
+                <el-input v-model="scope.row.eInspectionMethod" size="small" placeholder="请输入内容"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="80">
+              <template slot="header">
+                <el-button @click="addEleRow" type="text" icon="el-icon-circle-plus-outline" class="text-icon"></el-button>
+              </template>
+              <template slot-scope="scope">
+                <el-button icon="el-icon-remove-outline" type="text" @click="delEleRow(scope.$index)" class="text-icon text-icon-danger"></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="eleVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveFormAndElementHandle">确 定</el-button>
+      </span>
+    </el-dialog>
   </basic-container>
 </template>
 
 <script>
-  import {getLazytree,getDetail,update,selectByNodeTable} from "@/api/manager/wbstree";
+  import {getLazytree,getDetail,update,selectByNodeTable,saveFormAndElement} from "@/api/manager/wbstree";
   import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
   export default {
@@ -133,6 +243,23 @@
 
         dialogVisible:false,
         deptCategorylist:[],
+        majorDataTypeList:[],
+        rules:{
+          deptName: [
+            { required: true, message: '请输入节点名称', trigger: 'blur' },
+          ],
+          deptCategory:[
+            { required: true, message: '请选择节点类型', trigger: 'change' }
+          ]
+        },
+
+        eleVisible:false,
+        tableTypelist:[],
+        dataTypeList:[],
+        eleForm:{
+          elementList:[],
+        },
+        eleRules:{},
       };
     },
     computed: {
@@ -154,13 +281,16 @@
     methods: {
       init(){
         this.id = this.$route.params.id;
+        this.getDeptCategorylist();
+        this.getTableTypelist();
+        this.getDataTypelist();
       },
       loadNode(node, resolve){
         let pid = 0;
         if (node.level != 0) {
           pid = node.data.id
         }
-        getLazytree(this.id ,pid).then((res)=>{
+        getLazytree(this.id ,pid,this.userInfo.tenantId).then((res)=>{
           return resolve(res.data.data);
         })
       },
@@ -181,6 +311,32 @@
       },
 
       saveNode(){
+        this.$refs['nodeDetail'].validate((valid) => {
+          if (valid) {
+            if(this.leftType == 1){
+              this.addNode();
+            }else if(this.leftType == 2){
+              this.updateNode();
+            }
+          } else {
+            console.log('error submit!!');
+            return false;
+          }
+        });
+      },
+      addNode(){
+        update(this.nodeDetail).then(()=>{
+          getLazytree(this.id ,this.nodeDetail.parentId).then((res)=>{
+            this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId,res.data.data)
+          })
+          this.dialogVisible = false;
+          this.$message({
+            type: "success",
+            message: "新增成功!"
+          });
+        })
+      },
+      updateNode(){
         update(this.nodeDetail).then(()=>{
           let node = this.tableData[0];
           node.deptName = this.nodeDetail.deptName;
@@ -189,20 +345,18 @@
           this.dialogVisible = false;
           this.$message({
             type: "success",
-            message: "操作成功!"
+            message: "修改成功!"
           });
         })
       },
-      addNode(){
-
-      },
 
       setLeftType(type,data,node){
         this.leftType = type;
         this.curTreeData = data;
+        this.$refs.tree.setCurrentKey(data.id);
 
         if(this.leftType == 1 || this.leftType == 2){
-          this.getDeptCategorylist();
+          this.getMajorDataTypeList();
           this.dialogVisible = true;
         }
 
@@ -221,6 +375,9 @@
           }else{
             this.nodeDetail = Object.assign({},res.data.data);
           }
+          this.nodeDetail.type = 1;//	'1'节点 '2'表单
+          this.nodeDetail.wbsId = this.id;
+          this.nodeDetail.tenantId = this.userInfo.tenantId
         })
         if(this.leftType == 4){
           selectByNodeTable(data.id).then((res)=>{
@@ -230,6 +387,32 @@
         
       },
 
+      showFormElement(){
+        if(!this.nodeDetail.id){
+          this.$message({
+            type: "warning",
+            message: "请先选择在哪个节点下创建表"
+          });
+          return;
+        }
+        this.eleVisible = true;
+      },
+
+      addEleRow(){
+        this.eleForm.elementList.push({});
+      },
+      delEleRow(index){
+        this.eleForm.elementList.splice(index,1);
+      },
+      saveFormAndElementHandle(){
+        this.eleForm.wbsId = this.id;
+        this.eleForm.tenantId = this.userInfo.tenantId;
+        this.eleForm.type = 2;//	'1'节点 '2'表单
+        saveFormAndElement().then((res)=>{
+          console.log(res)
+        })
+      },
+
       getDeptCategorylist(){
         if(this.deptCategorylist.length >1){
           return;
@@ -237,9 +420,62 @@
         getDictionary({
           code:'wbs_node_type'
         }).then((res)=>{
+          res.data.data.forEach(element => {
+            element.dictKey = Number(element.dictKey)
+          });
           this.deptCategorylist = res.data.data;
         })
       },
+      getMajorDataTypeList(){
+        if(this.majorDataTypeList.length >1){
+          return;
+        }
+        getDictionary({
+          code:'major_data_type'
+        }).then((res)=>{
+          res.data.data.forEach(element => {
+            element.dictKey = Number(element.dictKey)
+          });
+          this.majorDataTypeList = res.data.data;
+        })
+      },
+
+      getTableTypelist(){
+        if(this.tableTypelist.length >1){
+          return;
+        }
+        getDictionary({
+          code:'table_type'
+        }).then((res)=>{
+          res.data.data.forEach(element => {
+            element.dictKey = Number(element.dictKey)
+          });
+          this.tableTypelist = res.data.data;
+        })
+      },
+      getDataTypelist(){
+        if(this.dataTypeList.length >1){
+          return;
+        }
+        getDictionary({
+          code:'data_type'
+        }).then((res)=>{
+          res.data.data.forEach(element => {
+            element.dictKey = Number(element.dictKey)
+          });
+          this.dataTypeList = res.data.data;
+        })
+      },
+
+      formatCat(row, column, cellValue){
+        for (let i = 0; i < this.deptCategorylist.length; i++) {
+          if(this.deptCategorylist[i].dictKey == cellValue){
+            return this.deptCategorylist[i].dictValue
+          }
+        }
+        return cellValue;
+        //console.log(cellValue)
+      },
 
       filterNode(value, data) {
         if (!value) return true;