|
@@ -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;
|