wangting
2025-01-14 fdf13539b4ef7f5fddb3b7335015fb3c34915a8b
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
@@ -2,7 +2,7 @@
  <el-dialog v-dialogDrag
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1600px"
             width="1650px"
             :append-to-body="true"
             class="avue-dialog"
             :destroy-on-close="true"
@@ -46,8 +46,8 @@
            <legend>&nbsp;链接类型候选条件&nbsp;</legend>
            <div>
              查询模板定义
              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="请选择内容" type="tree" :dic="linkQueryDefineDic" style="width:240px"></avue-select>
              <avue-tree style="height: 265px" :data="linkTreeData" :option="treeOption">
              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="请选择内容" type="tree" :dic="linkQueryDefineDic" style="width:245px"></avue-select>
              <avue-tree style="width:335px;height: 268px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
              </avue-tree>
            </div>
          </fieldset>
@@ -55,7 +55,14 @@
        <el-main>
          <fieldset style="margin: 0 10px">
            <legend>&nbsp;查询条件&nbsp;</legend>
            <form-query-dialog style="height: 300px;"></form-query-dialog>
            <form-query-dialog ref="formQuery"
                               style="height: 300px;"
                               :queryCondition="queryCondition"
                               :queryTree="queryTree"
                               :levelFlag.sync="form.levelFlag"
                               :searchColumn="searchColumn"
                               @queryHandler="queryHandler"
            ></form-query-dialog>
          </fieldset>
        </el-main>
        <el-aside style="width:350px">
@@ -63,8 +70,8 @@
            <legend>&nbsp;业务类型候选条件&nbsp;</legend>
            <div>
              查询模板定义
              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="请选择内容" type="tree" :dic="businessQueryDefineDic" style="width: 240px;"></avue-select>
              <avue-tree style="height: 265px" :data="businessTreeData" :option="treeOption">
              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="请选择内容" type="tree" :dic="businessQueryDefineDic" style="width: 245px;"></avue-select>
              <avue-tree style="width:335px;height: 268px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
              </avue-tree>
            </div>
          </fieldset>
@@ -72,7 +79,7 @@
      </el-container>
    </div>
    <div class="dialog-footer avue-dialog__footer">
      <el-button type="primary" plain size="small" @click="submitDialog" >保 存</el-button>
      <el-button type="primary" size="small" @click="submitDialog" >保 存</el-button>
      <el-button size="small" @click="cancelDialog">取 消</el-button>
    </div>
  </el-dialog>
@@ -80,33 +87,44 @@
<script>
import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
import {linkSave,getCriteria} from "@/api/queryTemplate/linkTypeQuery";
import basicOption from "@/util/basic-option";
import {gridTemplate} from "@/api/queryTemplate/queryDefine";
import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
import formQueryDialog from "./formQueryDialog.vue";
export default {
  name: "formDialog",
  components:{formQueryDialog},
  data(){
    return {
      searchColumn: [
        {
          label: 'OID',
          prop: 'OID',
        },
        {
          label: 'CREATOR',
          prop: 'CREATOR'
        },
        {
          label: 'CREATETIME',
          prop: 'CREATETIME'
        },
      ],
      dialog: {
        showDialog: false,
        title: "创建",
        submitTxt: "保存",
        submitIcon: "el-icon-check",
        loading: false,
        type: "add",
      },
      crudDialog: {
        showDialog: false,
        submitTxt: "保存",
        submitIcon: "el-icon-check",
      },
      formItems:[{
        label: '查询模板名称',
        prop: 'qtName',
        type: 'input',
        span:5,
        span:4.5,
        labelWidth: 110,
        rules: [{
          required: true,
          message: "请输入查询模板名称",
@@ -117,8 +135,8 @@
        prop: 'direction',
        type: 'radio',
        value:'positive',
        labelWidth:70,
        span: 3,
        labelWidth:80,
        span: 3.5,
        dicData: [{
          label: '正向',
          value: 'positive'
@@ -131,12 +149,19 @@
        prop: 'btmType',
        type: 'select',
        labelWidth:110,
        clearable:false,
        rules: [{
          required: true,
          message: "请选择业务类型",
          trigger: "blur"
        }],
        dicData: []
      }, {
        label: '版本版次',
        prop: 'version',
        type: 'select',
        span:5,
        span:4,
        labelWidth:110,
        dicData: [{
          label: '当前版本当前版次',
          value: 1
@@ -155,7 +180,7 @@
        label: '查询是否有下级',
        prop: 'queryISLeaf',
        type: 'switch',
        labelWidth:140,
        labelWidth:150,
        dicData: [ {
          label: '否',
          value: false
@@ -168,16 +193,17 @@
        label: '子节点层次数',
        prop: 'level',
        type: 'number',
        span:3,
        labelWidth:130,
        value:1
      }],
      form:{
        btmName:'',
        qtName: '',
        levelFlag:0,//0:普通查询模板; 1:高级查询模板"
        queryTemplate:{}
      },
      //已有排序列表配置
      crudOption: {
        crudOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
@@ -190,7 +216,14 @@
          prop: 'orderField'
        }, {
          label: '排序方式',
          prop: 'orderMode'
          prop: 'orderMode',
          formatter:function (row, value) {
            if (row.orderMode == 'ASC') {
              return '升序'
            }else{
              return '降序'
            }
          }
        }, {
          label: '优先级',
          prop: 'level'
@@ -254,6 +287,18 @@
        menu: false,
        addBtn: false,
        filter:false,
        draggable: true,
        allowDrop: (node) => {
          return false;
        },
        allowDrag: (dropNode) => {
          return true;
        },
        props:{
          label:'name',
          value:'name',
          children:'attrs'
        }
      },
      linkQueryDefineForm:'',//链接类型查询模板定义选中值
      linkQueryDefineDic:[],//链接类型查询模板定义下拉数据
@@ -263,6 +308,11 @@
      businessQueryDefineDic:[],//业务类型查询模板定义下拉数据
      //业务类型查询模板定义选中项属性
      businessTreeData: [],
      //高级查询条件
      queryTree:{},
      //普通查询条件
      queryCondition:[],
    };
  },
  watch: {
@@ -311,14 +361,7 @@
        }
      },
      immediate: true,
    },
    'dialog.type': {
      handler(val) {
        if(val=='edit'){
        }
      },
      immediate: true,
    },
    }
  },
  methods: {
    openDialog(btmName, title, mode, data) {
@@ -329,7 +372,6 @@
      if (data.selectData) {
        this.selectData = data.selectData;
        this.formItems[0].disabled = true
        this.form.qtName = this.selectData.qtName;
        this.form.direction = this.selectData.queryTemplate.direction;
        this.form.btmType = this.selectData.queryTemplate.btmType;
@@ -339,16 +381,22 @@
        if (data.selectData.queryTemplate.orderInfoList && data.selectData.queryTemplate.orderInfoList.length > 0) {
          this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//已有排序
        }
        this.queryCondition=this.selectData.queryTemplate.condition;
        this.queryTree=this.selectData.tree;
        this.form.levelFlag=this.selectData.levelFlag;
      } else {
        this.form.direction='positive';
        this.selectData = {};
        this.orderInfoList = [];
        this.formItems[0].disabled = false;
        this.queryCondition=[];
        this.queryTree={
          connector:'并且',
          child:[]
        };
      }
      this.dialog.showDialog = true;
      this.treeOption.defaultExpandedKeys=[data.treeData.label]
      this.getTemp(data.treeData.label, true)
      this.$nextTick(()=>{
        this.dialog.showDialog = true;
      });
    },
    cancelDialog() {
      this.dialog.loading = false;
@@ -357,37 +405,20 @@
        this.form = {
          btmName: '',
          qtName: '',
          levelFlag:0,
          queryTemplate: {}
        };
        this.orderInfoList =[];
        this.$refs.form.clearValidate();
        this.businessQueryDefineForm='';
        this.linkQueryDefineForm='';
        this.$refs.form.clearValidate();
      });
    },
    submitDialog() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          let formData={
            btmName:this.form.btmName,
            qtName:this.form.qtName,
            queryTemplate:{
              btmType:this.form.btmType,
              clauseList:['*'],
              direction:this.form.direction,
              id:this.form.qtName,
              level:this.form.level,
              linkType:this.form.btmName,
              orderInfoList:this.orderInfoList,
              queryISLeaf:this.form.queryISLeaf,
              recReturnMode:1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
              rightFlag:true,
              secretFlag:true,
              type:'link',
              version:this.form.version
            }
          }
          formData.condition=[]
          const formData=this.initFormData();
          console.log(formData)
          linkSave(formData).then(res => {
            if (res.data.success) {
              this.$message.success("保存成功");
@@ -399,6 +430,60 @@
          return false;
        }
      });
    },
    initFormData() {
      let formData = {
        btmName: this.form.btmName,
        qtName: this.form.qtName,
        levelFlag: this.form.levelFlag,
        queryTemplate: {
          btmType: this.form.btmType,
          clauseList: ['*'],
          direction: this.form.direction,
          id: this.form.qtName,
          level: this.form.level,
          linkType: this.form.btmName,
          orderInfoList: this.orderInfoList,
          queryISLeaf: this.form.queryISLeaf,
          recReturnMode: 1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
          rightFlag: true,
          secretFlag: true,
          type: 'link',
          version: this.form.version
        }
      }
      if (formData.levelFlag == 1) {
        //高级
        let that = this;
        function initValue(nodeChild) {
          let children = [];
          if (nodeChild) {
            nodeChild.forEach((item, index) => {
              if (item.label != '并且' && item.label != '或者') {
                children.push(item.label);
              } else {
                children.push({
                  connector: item.label,
                  child: initValue(item.children)
                })
              }
            })
          }
          return children;
        }
        let treeData = {
          connector: this.$refs.formQuery.treeData[0].label
        };
        if (this.$refs.formQuery.treeData[0].children) {
          treeData.child = initValue(this.$refs.formQuery.treeData[0].children);
        }
        formData.tree = treeData
      }
      formData.condition = this.$refs.formQuery.conditionList;
      return formData;
    },
    getFormData(form) {
      this.form = form;
@@ -458,7 +543,7 @@
    //获取查询模板定义下拉
    getTemp(btmName,linkFlag) {
      if (btmName) {
        gridTemplate({btmName: btmName, linkFlag: linkFlag}).then(res => {
        queryTemplateListByAttr({btmName: btmName, linkFlag: linkFlag,direction:linkFlag?null:this.form.direction}).then(res => {
          const data = res.data.data.map(item => {
            item.label = item.name + '-' + (item.linkTypeName || item.btmName);
            item.value = item.name;
@@ -476,45 +561,66 @@
    },
    linkQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.abNames.map(item => {
          return {
            label: item,
            value: item
          };
        });
        this.linkTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
        this.linkTreeData = [ data.item]
      }
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.abNames.map(item => {
          return {
            label: item,
            value: item
          };
        });
        this.businessTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
        this.businessTreeData = [ data.item]
      }
    }
    },
    // 开始拖拽树节点事件
    handleDragStart(node, ev) {
      // 使用 setData 方法设置数据
      ev.dataTransfer.setData('item', JSON.stringify(node.data));
      if(this.form.levelFlag==1){
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-start', ev,{node:this.$refs.formQuery.initItem(node)});
      }
    },
    handleDragEnd(draggingNode,endNode,position,ev){
      if(this.form.levelFlag==1) {
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-end', ev);
      }
    },
    //查询
    queryHandler(){
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$refs.formQuery.queryResultDialog.loading=true;
          const formData=this.initFormData();
          getCriteria(formData).then(res => {
            if (res.data.success) {
              const data = res.data.data;
              const result = data.map(item => {
                const filteredAttrs = item.hisAttrValList.filter(attr =>
                  attr.attrName === "OID" || attr.attrName === "CREATOR" || attr.attrName === "CREATETIME"
                );
                const newObj = filteredAttrs.reduce((acc, attr) => {
                  acc[attr.attrName] = attr.attrVal;
                  return acc;
                }, {});
                return newObj;
              });
              this.$refs.formQuery.resultData = result;
              this.$refs.formQuery.queryResultDialog.showDialog = true;
              this.$refs.formQuery.queryResultDialog.loading = false;
            }
          });
        } else {
          return false;
        }
      });
    },
  },
}
</script>
<style scoped>
fieldset {
  border-radius: 5px;
  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  padding: 10px 6px;
  box-sizing: border-box;
  margin: 0;
  border: 1px solid #EBEEF5;
}