ludc
2023-08-24 56c45e1f4be85d6bbfb3a03437021c6742b32ad9
Source/UBCS-WEB/src/views/docking/infoForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,632 @@
<template>
  <el-container>
    <el-dialog title="系统集成基础信息" v-dialogDrag :visible.sync="showSubmitDialog" class="avue-dialog avue-dialog--top" append-to-body @close="closeSubmitDialog" width="1000px"
               style="height: 110vh;" top="-5%">
      <el-form ref="form" :model="formData" show-message="true" inline size="medium" label-suffix=":"
               class="dockingForm" :rules="rules" status-icon="true">
        <el-form-item label="接口类型" prop="dataFlowType">
          <el-select v-model="formData.dataFlowType" placeholder="请选择" @change="dataFlowTypeChange">
            <el-option v-for="item in dataFlowTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="formData.dataFlowType=='push'?'推送类型':'接受类型'" prop="pushType">
          <el-select v-model="formData.pushType" placeholder="请选择" @change="pushTypeChange">
            <el-option v-for="item in pushTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="参数类型" prop="paramType">
          <el-select v-model="formData.paramType" placeholder="请选择">
            <el-option v-for="item in paramTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="返回值类型" prop="returnType">
          <el-select v-model="formData.returnType" placeholder="请选择">
            <el-option v-for="item in returnTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <div v-if="formData.dataFlowType=='push'">
          <el-form-item  label="分类选择" prop="classifyName">
            <vciWebRefer
              :referConfig="{
                  title: '分类选择',
                  showField: 'classifyName',
                  field: 'classifyOid',
                  fieldMap:{'classifyId':'id'},
                  placeholder: '请选择分类选择',
                  options: {isMuti: false, type: 'tree', url: 'api/ubcs-code/codeClassify/treeCodeClassify'},
                }"
              :value="formData.classifyOid"
              :text="formData.classifyName"
              :disabled="false"
              :display="true"
              @setReferValue="setReferValue"
            ></vciWebRefer>
          </el-form-item>
          <el-form-item label="集成系统" prop="targetSystemName">
            <vciWebRefer
              :referConfig="{
                  title: '集成系统',
                  showField: 'targetSystemName',
                  field: 'targetSystemOid',
                  fieldMap:{'targetSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/dockingManagement/gridDockingSystem'},
                }"
              :value="formData.targetSystemOid"
              :text="formData.targetSystemName"
              :disabled="false"
              :display="true"
              @setReferValue="setReferValue"
            ></vciWebRefer>
          </el-form-item>
        </div>
        <div v-else>
          <el-form-item  label="分类选择" prop="classifyName" style="display: none">
          </el-form-item>
          <el-form-item label="集成系统" prop="sourceSystemName">
            <vciWebRefer
              :referConfig="{
                  title: '集成系统',
                  showField: 'sourceSystemName',
                  field: 'sourceSystemOid',
                  fieldMap:{'sourceSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/dockingManagement/gridDockingSystem'},
                }"
              :value="formData.sourceSystemOid"
              :text="formData.sourceSystemName"
              :disabled="false"
              :display="true"
              @setReferValue="setReferValue"
            ></vciWebRefer>
          </el-form-item>
        </div>
        <el-form-item label="接口方式" prop="interfaceType">
          <el-select v-model="formData.interfaceType" clearable placeholder="请选择">
            <el-option v-for="item in interfaceTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="formData.pushType=='1'" label="是否推送集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item v-if="formData.pushType=='3'" label="是否申请集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item  v-if="formData.pushType=='4'" label="是否维护集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item  v-if="formData.pushType=='7'" label="是否查询集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item label="系统描述"  style="width: 850px;">
          <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 5}" v-model="formData.description" style="width: 740px;"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='http'" label="请求方式" prop="requestMethod">
          <el-select v-model="formData.requestMethod" placeholder="请选择">
            <el-option v-for="item in requestMethodList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService' || formData.interfaceType=='http'" label="请求地址" prop="requestUrl">
          <el-input v-model="formData.requestUrl" type="text"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="接口函数" prop="interfaceFunction">
          <el-input v-model="formData.interfaceFunction"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="命名空间" prop="nameSpace">
          <el-input v-model="formData.nameSpace"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="soapAction" prop="soapAction">
          <el-input v-model="formData.soapAction" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="参数名称" prop="targName">
          <el-input v-model="formData.targName" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="cxfaxis" prop="cxfaxis">
          <el-input v-model="formData.cxfaxis" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='classPath'" label="类路径" prop="classPath">
          <el-input v-model="formData.classPath" ></el-input>
        </el-form-item>
        <el-tabs v-model="activeName" @tab-click="tabClick">
          <el-tab-pane label="参数对象" name="paramTab">
            <avue-crud :option="param.option"
                       :data="formData.sysIntParamVOs"
                       v-model="formData.sysIntParamVOs"
                       ref="paramcrud">
              <template slot="menuLeft">
                <el-button type="primary"
                           size="small"
                           plain
                           icon="el-icon-plus"
                           @click="handleParamAdd">添加行
                </el-button>
              </template>
              <template slot="menu" slot-scope="{row,index}">
                <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="handleParamEditClick(row,index)">编辑
                </el-button>
                <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit" @click="handleParamDel(row,index)">移除
                </el-button>
                <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="handleParamEditSave(row,index)">
                  ä¿å­˜
                </el-button>
              </template>
            </avue-crud>
          </el-tab-pane>
          <el-tab-pane label="header对象" name="headerTab">
            <avue-crud :option="header.option"
                       :data="formData.sysIntHeaderVOs"
                       v-model="formData.sysIntHeaderVOs"
                       ref="headercrud">
              <template slot="menuLeft">
                <el-button type="primary"
                           size="small"
                           plain
                           icon="el-icon-plus"
                           @click="handleHeaderAdd">添加行
                </el-button>
              </template>
              <template slot="menu" slot-scope="{row,index}">
                <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="handleHeaderEditClick(row,index)">编辑
                </el-button>
                <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit"  @click="handleHeaderDel(row,index)">移除
                </el-button>
                <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="handleHeaderEditSave(row,index)">
                  ä¿å­˜
                </el-button>
              </template>
            </avue-crud>
          </el-tab-pane>
        </el-tabs>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitAttribute">确定</el-button>
        <el-button @click="cancelSubmit">取消</el-button>
      </div>
    </el-dialog>
  </el-container>
</template>
<script>
import { validatenull } from "@/util/validate";
import { getDictionary, getParentList } from '@/api/omd/enum'
import {add,edit} from "@/api/docking/info"
import vciWebRefer from "@/components/refer/vciWebRefer.vue";
export default {
  name: 'infoForm',
  props: {
    formData: {
      type: Object,
      default:{
        sysIntParamVOs:[],
        sysIntHeaderVOs:[]
      }
    },
  },
  components: { vciWebRefer },
  data() {
    return {
      showSubmitDialog: false,
      //接口类型下拉
      interfaceTypeList: [{
        label: 'webService', value: 'webService'
      }, {
        label: '类路径', value: 'classPath'
      }, {
        label: 'Http', value: 'http'
      }],
      //参数类型下拉
      paramTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      //返回值类型下拉
      returnTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      dataFlowTypeList: [{
        label: '推送', value: 'push'
      }, {
        label: '接受', value: 'accept'
      }],
      //推送类型
      pushTypeList: [{value: '1', label: '数据推送'},
        {value: '2', label: '分类推送'}],
      //请求方式
      requestMethodList: [{key: 'post', value: 'post'},
        {key: 'get', value: 'get'},
        {key: 'delete', value: 'delete'},
        {key: 'put', value: 'put'}],
      // é»˜è®¤çš„页签
      activeName: 'paramTab',
      // è¡¨å•校验规则
      rules: {
        paramType: [
          {required: true, message: '请选择参数类型', trigger: 'blur'}
        ],
        returnType: [
          {required: true, message: '请选择返回值类型', trigger: 'blur'}
        ],
        dataFlowType: [
          {required: true, message: '请选择', trigger: 'change'}
        ],
        pushType: [
          {required: true, message: '请选择推送类型', trigger: 'blur'}
        ],
        classifyName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        sourceSystemName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        targetSystemName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        classPath: [
          {required: true, message: '请输入类路径', trigger: 'blur'}
        ],
        requestMethod: [
          {required: true, message: '请选择请求方式', trigger: 'blur'}
        ],
        requestUrl: [
          {required: true, message: '请输入请求地址', trigger: 'blur'}
        ],
        interfaceFunction: [
          {required: true, message: '请输入接口函数', trigger: 'blur'}
        ],
        nameSpace: [
          {required: true, message: '请输入命名空间', trigger: 'blur'}
        ],
        soapAction: [
          {required: true, message: '请输入soapAction', trigger: 'blur'}
        ],
        targName: [
          {required: true, message: '请输入参数名称', trigger: 'blur'}
        ],
        cxfaxis: [
          {required: true, message: '请输入cxfaxis', trigger: 'blur'}
        ]
      },
      // è¡¨æ ¼é…ç½®
      param: {
        option: {
          height: 200,
          index: true,
          addBtn: false,
          viewBtn: false,
          delBtn: false,
          editBtn: false,
          refreshBtn: false,
          columnBtn: false,
          border: true,
          menuWidth: 150,
          searchShowBtn: false,
          align: 'center',
          column: [{
            label: '参数名',
            prop: 'paramKey',
            cell: true
          }, {
            label: '参数值',
            prop: 'paramValue',
            cell: true
          }, {
            label: '是否使用',
            prop: 'usedFlag',
            formatter: function (row, column) {
              return row.usedFlag == 'true' || row.usedFlag == '1' ? '是' : '否'
            },
            width: 150,
            type: 'switch',
            cell: true
          }]
        },
        selectRow: {}
      },
      // æžšä¸¾å‚照表格配置
      header: {
        option: {
          height: 200,
          index: true,
          addBtn: false,
          viewBtn: false,
          delBtn: false,
          editBtn: false,
          refreshBtn: false,
          columnBtn: false,
          border: true,
          menuWidth: 150,
          searchShowBtn: false,
          align: 'center',
          column: [{
            label: '头参数名称',
            prop: 'headerKey',
            cell: true
          }, {
            label: '头参数值',
            prop: 'headerValue',
            cell: true
          }, {
            label: '是否使用',
            prop: 'usedFlag',
            formatter: function (row, column) {
              return row.usedFlag == 'true' || row.usedFlag == '1' ? '是' : '否'
            },
            width: 150,
            type: 'switch',
            cell: true
          }],
          // é€‰å®šè¡Œ
          selectRow: ''
        },
        dictEnums: []
      }
    }
  },
  created() {
    //this.geDictData('interfaceType', this.interfaceTypeList)
  },
  mounted(){
    if (!this.formData.sysIntParamVOs) {
      this.formData.sysIntParamVOs = [];
    }
    if (!this.formData.sysIntHeaderVOs) {
      this.formData.sysIntHeaderVOs = [];
    }
    if(this.formData.dataFlowType=='accept'){
      this.pushTypeList=[
        {value: '3', label: '编码申请'},
        {value: '4', label: '编码更改(状态、回收)'},
        {value: '5', label: '分类查询'},
        {value: '6', label: '含规则信息的分类查询'},
        {value: '7', label: '数据查询'}]
      this.formData.pushType=''
      this.formData.targetSystemName='编码系统';
      this.formData.targetSystemOid='code00000001';
      this.formData.targetSystemId='CODE';
      this.formData.sourceSystemName='';
      this.formData.sourceSystemOid='';
      this.formData.sourceSystemId='';
    }else {
      this.pushTypeList=[{value: '1', label: '数据推送'},
        {value: '2', label: '分类推送'}]
      this.formData.pushType='1' ;
      this.formData.sourceSystemName='编码系统';
      this.formData.sourceSystemOid='code00000001';
      this.formData.sourceSystemId='CODE';
      this.formData.targetSystemName='';
      this.formData.targetSystemOid='';
      this.formData.targetSystemId='';
    }
  },
  methods: {
    closeSubmitDialog() {
      this.resetForm();
      this.showSubmitDialog = false;
    },
    resetForm() {
      this.formData = {
        sysIntParamVOs: [],
        sysIntHeaderVOs: []
      };
      this.$refs.form.resetFields();
    },
    setReferValue(data) {
      if (data.field) {
        this.formData[data.field] = data.value || "";
        this.formData[data.showField] = data.text || "";
      }
      if (data.fieldMap) {
        //说明需要映射
        for (let key in data.fieldMap) {
          let mapFields = data.fieldMap[key].split(",");
          let value = [];
          data.rawData.forEach(_item => {
            var temp;
            if (!_item.attributes) {
              _item.attributes = _item;
            }
            if (mapFields.length == 1) {
              var mapField = mapFields[0];
              if (mapField.indexOf("attribute.") > -1) {
                temp = _item['attributes'][mapField.subString("attribute.".length)];
              } else {
                temp = _item['attributes'][mapField] || _item[mapField];
              }
            } else {
              //有多个
              var mutiTemp = [];
              layui.each(mapFields, function (_indexField, _itemField) {
                if (_itemField.indexOf("attribute.") > -1) {
                  mutiTemp.push(_item['attributes'][_itemField.subString("attribute.".length)]);
                } else {
                  mutiTemp.push(_item['attributes'][_itemField] || _item[_itemField]);
                }
              });
              temp = mutiTemp.join(' ');
            }
            if (temp != null && temp != '') {
              value.push(temp);
            }
          })
          this.formData[key] = value.join(',');
        }
      }
    },
    submitAttribute() {
      const that = this;
      let pass=true
      if(this.formData.dataFlowType=='push' && (validatenull(this.formData.classifyName)||validatenull(this.formData.targetSystemName))){
        that.$message.error('必填项不能为空');
        pass=false
        return;
      }
      if(this.formData.dataFlowType=='accept' && (validatenull(this.formData.sourceSystemName))){
        that.$message.error('集成系统不能为空');
        pass=false
        return;
      }
      this.$refs.form.validateField(['paramType','returnType','dataFlowType','pushType','classPath','requestMethod','requestUrl',
        'interfaceFunction','nameSpace','soapAction','targName','cxfaxis'],function (errormsg, field) {
        if (errormsg) {
          pass=false
        }
      })
      this.$nextTick(function (){
        if(pass){
          that.formData.sysIntParamDTOs=this.formData.sysIntParamVOs.map(item=>{
            return {
              ...item,
              ordernNo:item.$index
            }
          })
          that.formData.sysIntHeaderDTOS=this.formData.sysIntHeaderVOs.map(item=>{
            return {
              ...item,
              ordernNo:item.$index
            }
          })
          add(that.formData).then(res => {
            that.$message.success("保存成功");
            that.showSubmitDialog = false;
            this.formData = {
              sysIntParamVOs: [],
              sysIntHeaderVOs: []
            };
            that.$emit('refreshTable');
          });
        }
      })
    },
    cancelSubmit() {
      this.closeSubmitDialog();
    },
    // å¼‚步获取字典数据
    geDictData(dictKey, list) {
      getDictionary({code: dictKey}).then((res) => {
        if (res.data && res.data.code === 200) {
          let dictData = (res.data.data || []).map((itm) => {
            itm.value = itm.dictValue;
            itm.key = itm.dictKey;
            return itm;
          });
          list = dictData;
        }
      });
    },
    dataFlowTypeChange(value){
      if(value=='push'){
        this.pushTypeList=[{value: '1', label: '数据推送'},
          {value: '2', label: '分类推送'}]
        this.formData.pushType='1';
        this.formData.sourceSystemName='编码系统';
        this.formData.sourceSystemOid='code00000001';
        this.formData.sourceSystemId='CODE';
        this.formData.targetSystemName='';
        this.formData.targetSystemOid='';
        this.formData.targetSystemId='';
      }else if(value=='accept'){
        this.pushTypeList=[
          {value: '3', label: '编码申请'},
          {value: '4', label: '编码更改(状态、回收)'},
          {value: '5', label: '分类查询'},
          {value: '6', label: '含规则信息的分类查询'},
          {value: '7', label: '数据查询'}]
        this.formData.pushType='';
        this.formData.targetSystemName='编码系统';
        this.formData.targetSystemOid='code00000001';
        this.formData.targetSystemId='CODE';
        this.formData.sourceSystemName='';
        this.formData.sourceSystemOid='';
        this.formData.sourceSystemId='';
      }else{
        this.pushTypeList=[];
      }
      this.$refs.form.clearValidate()
    },
    pushTypeChange(value){
      this.$refs.form.clearValidate()
    },
    tabClick(tab) {
      if (tab.name === 'paramTab') {
        this.$nextTick(function (){
          this.$refs.paramcrud.doLayout()
        })
      } else {
        this.$nextTick(function (){
          this.$refs.headercrud.doLayout()
        })
      }
    },
    handleParamAdd() {
      this.formData.sysIntParamVOs.push({
        usedFlag: true,
        $cellEdit:true
      })
      this.$nextTick(function (){
        this.$refs.paramcrud.doLayout()
      })
    },
    handleParamEditClick(row){
      row.$cellEdit = true;
    },
    handleParamDel(row,index){
      this.formData.sysIntParamVOs.splice(index, 1);
    },
    // åˆ—表编辑保存
    handleParamEditSave(row,index) {
      row.$cellEdit = false;
    },
    handleHeaderAdd() {
      this.formData.sysIntHeaderVOs.push({
        usedFlag: true,
        $cellEdit:true
      })
      this.$nextTick(function (){
        this.$refs.headercrud.doLayout()
      })
    },
    handleHeaderEditClick(row){
      row.$cellEdit = true;
    },
    handleHeaderDel(row,index){
      this.formData.sysIntHeaderVOs.splice(index, 1);
    },
    // åˆ—表编辑保存
    handleHeaderEditSave(row,index) {
      row.$cellEdit = false;
    }
  }
}
</script>
<style>
.btmTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
  display: none !important;
}
.enumTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
  display: none !important;
}
.dockingForm .el-form-item__label{width: 130px;}
.dockingForm .el-form-item__content,.dockingForm .el-form-item__content .el-input>.el-input__inner,.dockingForm .el-input-number--medium {
  width: 300px !important;
}
.dockingForm .cell .el-form-item__content,.dockingForm .cell .el-form-item__content .el-input>.el-input__inner{
  width :100% !important;
}
</style>