|
@@ -59,7 +59,7 @@
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
<el-card shadow="never">
|
|
<el-card shadow="never">
|
|
<el-scrollbar style="height: 460px">
|
|
<el-scrollbar style="height: 460px">
|
|
- <el-tree
|
|
|
|
|
|
+ <!-- <el-tree
|
|
class="filter-tree"
|
|
class="filter-tree"
|
|
lazy
|
|
lazy
|
|
:load="loadNode"
|
|
:load="loadNode"
|
|
@@ -70,6 +70,18 @@
|
|
node-key="id"
|
|
node-key="id"
|
|
ref="tree"
|
|
ref="tree"
|
|
>
|
|
>
|
|
|
|
+ </el-tree> -->
|
|
|
|
+ <el-tree
|
|
|
|
+ class="filter-tree"
|
|
|
|
+ :data="treeData"
|
|
|
|
+ :default-expanded-keys="defaultExpanded"
|
|
|
|
+ @node-click="getNodeDetail"
|
|
|
|
+ :props="defaultProps"
|
|
|
|
+ :expand-on-click-node="false"
|
|
|
|
+ highlight-current
|
|
|
|
+ node-key="id"
|
|
|
|
+ ref="tree"
|
|
|
|
+ >
|
|
</el-tree>
|
|
</el-tree>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
</el-card>
|
|
</el-card>
|
|
@@ -154,7 +166,7 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="text-align-c">
|
|
<div class="text-align-c">
|
|
- <el-button type="warning">取消</el-button>
|
|
|
|
|
|
+ <el-button type="warning" @click="$router.back()">取消</el-button>
|
|
<el-button type="primary" @click="saveFormula">保存</el-button>
|
|
<el-button type="primary" @click="saveFormula">保存</el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -170,8 +182,8 @@
|
|
<div class="flex flex-d-c">
|
|
<div class="flex flex-d-c">
|
|
<component ref="dynamiccomponent" v-bind:is="componentMap[item.name]" :formulainfo="item" :curele="equationSelectEle" :formulamap="formulaMap" class="flex1"></component>
|
|
<component ref="dynamiccomponent" v-bind:is="componentMap[item.name]" :formulainfo="item" :curele="equationSelectEle" :formulamap="formulaMap" class="flex1"></component>
|
|
<div v-show="item.showSelectEle">
|
|
<div v-show="item.showSelectEle">
|
|
- <el-select v-model="eleTableId" @change="getTableEleComp" placeholder="请选择元素表" style="width:100%">
|
|
|
|
- <el-option v-for="item in eleTableList" :key="item.id" :label="item.tableName" :value="item.id"></el-option>
|
|
|
|
|
|
+ <el-select v-model="eleTableIdComp" @change="getTableEleComp" placeholder="请选择元素表" style="width:100%">
|
|
|
|
+ <el-option v-for="item in eleTableListComp" :key="item.id" :label="item.tableName" :value="item.id"></el-option>
|
|
</el-select>
|
|
</el-select>
|
|
<div class="mg-t-10 mg-b-10 no-mb-col" style="width:900px">
|
|
<div class="mg-t-10 mg-b-10 no-mb-col" style="width:900px">
|
|
<el-scrollbar style="max-height: 210px;min-height:100px">
|
|
<el-scrollbar style="max-height: 210px;min-height:100px">
|
|
@@ -191,9 +203,9 @@
|
|
<el-scrollbar style="height: 460px">
|
|
<el-scrollbar style="height: 460px">
|
|
<el-tree
|
|
<el-tree
|
|
class="filter-tree"
|
|
class="filter-tree"
|
|
- lazy
|
|
|
|
- :load="loadNode"
|
|
|
|
- @node-click="getNodeDetail"
|
|
|
|
|
|
+ :data="treeData"
|
|
|
|
+ :default-expanded-keys="defaultExpanded"
|
|
|
|
+ @node-click="getNodeDetailComp"
|
|
:props="defaultProps"
|
|
:props="defaultProps"
|
|
:expand-on-click-node="false"
|
|
:expand-on-click-node="false"
|
|
highlight-current
|
|
highlight-current
|
|
@@ -217,7 +229,7 @@
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
- <el-dialog title="选择元素" :visible.sync="chooseEleVisible" width="800px" append-to-body :close-on-click-modal="false">
|
|
|
|
|
|
+ <el-dialog title="选择元素" :visible.sync="chooseEleVisible" width="70%" append-to-body :close-on-click-modal="false">
|
|
<div>
|
|
<div>
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
@@ -225,8 +237,8 @@
|
|
<el-scrollbar style="height: 460px">
|
|
<el-scrollbar style="height: 460px">
|
|
<el-tree
|
|
<el-tree
|
|
class="filter-tree"
|
|
class="filter-tree"
|
|
- lazy
|
|
|
|
- :load="loadNode"
|
|
|
|
|
|
+ :data="treeData"
|
|
|
|
+ :default-expanded-keys="defaultExpanded"
|
|
@node-click="getNodeDetail"
|
|
@node-click="getNodeDetail"
|
|
:props="defaultProps"
|
|
:props="defaultProps"
|
|
:expand-on-click-node="false"
|
|
:expand-on-click-node="false"
|
|
@@ -266,11 +278,12 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import { getLazytree,selectByNodeTable,selectFormElements} from "@/api/manager/wbstree";
|
|
|
|
-import { getProjectList } from "@/api/manager/projectinfo";
|
|
|
|
|
|
+import { getLazytree,selectByNodeTable,selectFormElements,getAlltree} from "@/api/manager/wbstree";
|
|
|
|
+import { getProjectList,findProjectTree } from "@/api/manager/projectinfo";
|
|
import { findContractByProjectId } from "@/api/manager/contractinfo";
|
|
import { findContractByProjectId } from "@/api/manager/contractinfo";
|
|
import { getDetail as getEleDeatil } from "@/api/manager/wbsformelement";
|
|
import { getDetail as getEleDeatil } from "@/api/manager/wbsformelement";
|
|
import { getTypeMap,saveFormula,formulaDetail,updateFormula } from "@/api/formula/formula";
|
|
import { getTypeMap,saveFormula,formulaDetail,updateFormula } from "@/api/formula/formula";
|
|
|
|
+import { findNodeTableByCondition } from "@/api/manager/wbsprivate";
|
|
import {mapGetters} from "vuex";
|
|
import {mapGetters} from "vuex";
|
|
|
|
|
|
import formulaItem from "./component/formulaItem"
|
|
import formulaItem from "./component/formulaItem"
|
|
@@ -303,8 +316,13 @@ export default {
|
|
return {
|
|
return {
|
|
wbsid: "", //从哪个wbs树过来的
|
|
wbsid: "", //从哪个wbs树过来的
|
|
eleid: "", //元素id
|
|
eleid: "", //元素id
|
|
|
|
+ nodeid:'',//所在树节点id
|
|
|
|
+ pid:'',//项目id 私有树才有
|
|
formulaid:'',
|
|
formulaid:'',
|
|
|
|
|
|
|
|
+ treeData:[],//树节点
|
|
|
|
+ defaultExpanded:[],//默认展开节点
|
|
|
|
+
|
|
isRetain: false, //是否保留小数
|
|
isRetain: false, //是否保留小数
|
|
retainNum: 2, //保留几位小数
|
|
retainNum: 2, //保留几位小数
|
|
formulaList:{},
|
|
formulaList:{},
|
|
@@ -354,7 +372,10 @@ export default {
|
|
'数组转字符串':"datas-join",
|
|
'数组转字符串':"datas-join",
|
|
'判断':'ifelse'
|
|
'判断':'ifelse'
|
|
},
|
|
},
|
|
- eleListComp:[],
|
|
|
|
|
|
+
|
|
|
|
+ eleListComp:[],//方法下面元素列表
|
|
|
|
+ eleTableListComp:[],//方法下面元素表列表
|
|
|
|
+ eleTableIdComp:'',//方法下面元素表id
|
|
};
|
|
};
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
@@ -389,17 +410,34 @@ export default {
|
|
created() {
|
|
created() {
|
|
this.wbsid = this.$route.query.wbsid;
|
|
this.wbsid = this.$route.query.wbsid;
|
|
this.eleid = this.$route.query.eleid;
|
|
this.eleid = this.$route.query.eleid;
|
|
|
|
+ this.nodeid = this.$route.query.nodeid;
|
|
|
|
+ this.pid = this.$route.query.projectid;//项目id 私有树才有
|
|
this.init();
|
|
this.init();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
async init() {
|
|
async init() {
|
|
this.getEleDeatil();
|
|
this.getEleDeatil();
|
|
this.getProjectList();
|
|
this.getProjectList();
|
|
|
|
+ this.geTreeData();
|
|
await this.getTypeMap();
|
|
await this.getTypeMap();
|
|
|
|
|
|
this.formulaStringToArray();
|
|
this.formulaStringToArray();
|
|
},
|
|
},
|
|
|
|
|
|
|
|
+ geTreeData(){
|
|
|
|
+ if(this.pid){
|
|
|
|
+ findProjectTree(this.pid, this.wbsid).then((res) => {
|
|
|
|
+ this.treeData = res.data.data;
|
|
|
|
+ this.defaultExpanded = [this.nodeid];
|
|
|
|
+ })
|
|
|
|
+ }else{
|
|
|
|
+ getAlltree(this.userInfo.tenant_id, 1, this.wbsid).then((res) => {
|
|
|
|
+ this.treeData = res.data.data;
|
|
|
|
+ this.defaultExpanded = [this.nodeid];
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+
|
|
//懒加载树
|
|
//懒加载树
|
|
loadNode(node, resolve) {
|
|
loadNode(node, resolve) {
|
|
let pid = 0;
|
|
let pid = 0;
|
|
@@ -479,6 +517,35 @@ export default {
|
|
//console.log(value)
|
|
//console.log(value)
|
|
//console.log(item)
|
|
//console.log(item)
|
|
if(value){
|
|
if(value){
|
|
|
|
+ //简单语法判断
|
|
|
|
+ if(this.selectEleFormula.length != 0){
|
|
|
|
+ let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
|
+ if(lastEle.type == 'Element'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "元素无法连续出现在元素后面"
|
|
|
|
+ });
|
|
|
|
+ item.checked = false;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(lastEle.type == 'Text'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "元素无法连续出现在输入值后面"
|
|
|
|
+ });
|
|
|
|
+ item.checked = false;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(lastEle.type == 'Brackets' && lastEle.name == ')'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "元素无法连续出现在右括号后面"
|
|
|
|
+ });
|
|
|
|
+ item.checked = false;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
this.eleAddFormulaHandle(item);
|
|
this.eleAddFormulaHandle(item);
|
|
}else{
|
|
}else{
|
|
let index = -1;
|
|
let index = -1;
|
|
@@ -512,6 +579,32 @@ export default {
|
|
children:[],
|
|
children:[],
|
|
})
|
|
})
|
|
}else if(ele.template && ele.example){
|
|
}else if(ele.template && ele.example){
|
|
|
|
+
|
|
|
|
+ //简单语法判断
|
|
|
|
+ if(this.selectEleFormula.length == 0){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "公式开头不能是运算符号"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }else{
|
|
|
|
+ let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
|
+ if(lastEle.type == 'Operator'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "运算符号无法连续出现在运算符号后面"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(lastEle.type == 'Brackets' && lastEle.name == '('){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "运算符号无法连续出现在左括号后面"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
//运算符号
|
|
//运算符号
|
|
this.selectEleFormula.push({
|
|
this.selectEleFormula.push({
|
|
type:'Operator',
|
|
type:'Operator',
|
|
@@ -558,6 +651,32 @@ export default {
|
|
},
|
|
},
|
|
//添加输入值
|
|
//添加输入值
|
|
addTextHandle(){
|
|
addTextHandle(){
|
|
|
|
+ //简单语法判断
|
|
|
|
+ if(this.selectEleFormula.length != 0){
|
|
|
|
+ let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
|
+ if(lastEle.type == 'Element'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "输入值无法连续出现在元素后面"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(lastEle.type == 'Text'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "输入值无法连续出现在输入值后面"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if(lastEle.type == 'Brackets' && lastEle.name == ')'){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "输入值无法连续出现在右括号后面"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
this.eleAddFormulaHandle({
|
|
this.eleAddFormulaHandle({
|
|
type:'Text',
|
|
type:'Text',
|
|
name:this.inputText
|
|
name:this.inputText
|
|
@@ -599,6 +718,27 @@ export default {
|
|
|
|
|
|
//赋值给等号右边的数组
|
|
//赋值给等号右边的数组
|
|
operationHandle(){
|
|
operationHandle(){
|
|
|
|
+ //检测左右括号数量是否相等
|
|
|
|
+ let lBracketNum = 0;
|
|
|
|
+ let rBracketNum = 0;
|
|
|
|
+ this.selectEleFormula.forEach((ele)=>{
|
|
|
|
+ if(ele.type == 'Brackets'){
|
|
|
|
+ if(ele.name == '('){
|
|
|
|
+ lBracketNum++;
|
|
|
|
+ }else if(ele.name == ')'){
|
|
|
|
+ rBracketNum++;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ if(lBracketNum != rBracketNum){
|
|
|
|
+ this.$message({
|
|
|
|
+ type: "warning",
|
|
|
|
+ message: "左右括号数量不相等,请先检查是否正确"
|
|
|
|
+ });
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
this.processFormula = JSON.parse(JSON.stringify(this.selectEleFormula));
|
|
this.processFormula = JSON.parse(JSON.stringify(this.selectEleFormula));
|
|
this.operationVisible = false;
|
|
this.operationVisible = false;
|
|
},
|
|
},
|
|
@@ -785,18 +925,39 @@ export default {
|
|
//设置动态组件里面的元素
|
|
//设置动态组件里面的元素
|
|
setComponentEle(value,item,index){
|
|
setComponentEle(value,item,index){
|
|
if(value){
|
|
if(value){
|
|
|
|
+ //console.log(this.$refs.dynamiccomponent[index])
|
|
this.$refs.dynamiccomponent[index].setELe(item);
|
|
this.$refs.dynamiccomponent[index].setELe(item);
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
|
|
getNodeDetail(data) {
|
|
getNodeDetail(data) {
|
|
- selectByNodeTable(data.id).then((res)=>{
|
|
|
|
- if(res.data.data.length){
|
|
|
|
- this.eleTableList = res.data.data;
|
|
|
|
- }else{
|
|
|
|
- this.eleTableList = [];
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
|
|
+ if(this.pid){
|
|
|
|
+ findNodeTableByCondition(data.id, this.pid, this.wbsid).then((res) => {
|
|
|
|
+ if(res.data.data.length){
|
|
|
|
+ this.eleTableList = res.data.data;
|
|
|
|
+
|
|
|
|
+ this.eleTableId = this.eleTableList[0].id;
|
|
|
|
+ this.getTableEle(this.eleTableId);
|
|
|
|
+ }else{
|
|
|
|
+ this.eleTableList = [];
|
|
|
|
+ this.eleTableId = '';
|
|
|
|
+ this.eleList = [];
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }else{
|
|
|
|
+ selectByNodeTable(data.id).then((res)=>{
|
|
|
|
+ if(res.data.data.length){
|
|
|
|
+ this.eleTableList = res.data.data;
|
|
|
|
+
|
|
|
|
+ this.eleTableId = this.eleTableList[0].id;
|
|
|
|
+ this.getTableEle(this.eleTableId);
|
|
|
|
+ }else{
|
|
|
|
+ this.eleTableList = [];
|
|
|
|
+ this.eleTableId = '';
|
|
|
|
+ this.eleList = [];
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
},
|
|
},
|
|
|
|
|
|
getEleDeatil(){
|
|
getEleDeatil(){
|
|
@@ -818,7 +979,39 @@ export default {
|
|
this.eleList = res.data.data;
|
|
this.eleList = res.data.data;
|
|
})
|
|
})
|
|
},
|
|
},
|
|
|
|
+
|
|
|
|
+ //方法下面的点击树节点
|
|
|
|
+ getNodeDetailComp(data) {
|
|
|
|
+ if(this.pid){
|
|
|
|
+ findNodeTableByCondition(data.id, this.pid, this.wbsid).then((res) => {
|
|
|
|
+ if(res.data.data.length){
|
|
|
|
+ this.eleTableListComp = res.data.data;
|
|
|
|
+
|
|
|
|
+ this.eleTableIdComp = this.eleTableListComp[0].id;
|
|
|
|
+ this.getTableEleComp(this.eleTableIdComp);
|
|
|
|
+ }else{
|
|
|
|
+ this.eleTableListComp = [];
|
|
|
|
+ this.eleTableIdComp = '';
|
|
|
|
+ this.eleListComp = [];
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }else{
|
|
|
|
+ selectByNodeTable(data.id).then((res)=>{
|
|
|
|
+ if(res.data.data.length){
|
|
|
|
+ this.eleTableListComp = res.data.data;
|
|
|
|
+
|
|
|
|
+ this.eleTableIdComp = this.eleTableListComp[0].id;
|
|
|
|
+ this.getTableEleComp(this.eleTableIdComp);
|
|
|
|
+ }else{
|
|
|
|
+ this.eleTableListComp = [];
|
|
|
|
+ this.eleTableIdComp = '';
|
|
|
|
+ this.eleListComp = [];
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
|
|
|
|
+ //方法下面的查询元素
|
|
getTableEleComp(tableId){
|
|
getTableEleComp(tableId){
|
|
selectFormElements(tableId).then((res)=>{
|
|
selectFormElements(tableId).then((res)=>{
|
|
this.eleListComp = res.data.data;
|
|
this.eleListComp = res.data.data;
|