ludc
2023-06-13 729db9dd93f8884a8f1f0b32a4462708f858ea9b
代码整合
已修改29个文件
已重命名1个文件
已添加7个文件
3042 ■■■■ 文件已修改
Source/UBCS-WEB/public/src/option/user/info.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/omd/status.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/refer/table.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/template/flowpath.js 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/template/templateAttr.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/TemplatePro.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/attrCrud.vue 489 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 369 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/template/FlowPath.vue 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/template/Stage.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/template/TableTransfer.vue 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/option/user/info.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/flow/flowPath.vue 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/status.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/ILinkTypeClient.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/ILinkTypeFallback.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/LinkTypeClient.java 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/更改过的jar包(有更新).zip 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/public/src/option/user/info.js
@@ -45,7 +45,7 @@
      }]
    },
    {
      label: '修改密码',
      label: '',
      prop: 'password',
      column: [{
        label: '原密码',
Source/UBCS-WEB/src/api/omd/status.js
@@ -72,4 +72,14 @@
            pageSize
        }
    })
}
}
export const getApplyRange = (id) => {
  return request({
    url: '/api/ubcs-omd/status/get-apply-range',
    method: 'get',
    params: {
      id
    }
  })
}
Source/UBCS-WEB/src/api/refer/table.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
import request from "@/router/axios";
export const getList = (params,page, limit, url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params,
      page,
      limit,
    }
  })
}
export const getLazyList = (params,url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params
    }
  })
}
export const getTableDefinedUrl = (params,url) => {
  return request({
    url: url,
    method: 'get',
    params: {
      ...params
    }
  })
}
Source/UBCS-WEB/src/api/template/flowpath.js
@@ -2,25 +2,65 @@
// æ¨¡æ¿æµç¨‹åˆ—表
export const getFlowpathList = (params) => {
    return request({
      url: '/api/ubcs-flow/processTS/tlist',
      method: 'get',
      params: params
    })
  }
  // æ¨¡æ¿æµç¨‹èŽ·å–é€‰é¡¹
  return request({
    url: '/api/ubcs-flow/processTS/tlist',
    method: 'get',
    params: params
  })
}
// æ¨¡æ¿æµç¨‹èŽ·å–é€‰é¡¹
export const getStartList = () => {
    return request({
      url: '/api/ubcs-flow/work/start-list',
      method: 'get',
      params: {mode:'1',current:1,size:100}
    })
  }
    // æ¨¡æ¿æµç¨‹æ–°å¢ž
  return request({
    url: '/api/ubcs-flow/work/start-list',
    method: 'get',
    params: { mode: '1', current: 1, size: 100 }
  })
}
// æ¨¡æ¿æµç¨‹æ–°å¢ž
export const flowpathSave = (params) => {
    return request({
      url: '/api/ubcs-flow/processTS/tsou',
      method: 'post',
      data: params
    })
  }
  return request({
    url: '/api/ubcs-flow/processTS/tsou',
    method: 'post',
    data: params
  })
}
// æ¨¡æ¿æµç¨‹åˆ é™¤
export const flowpathDelete = (params) => {
  return request({
    url: '/api/ubcs-flow/processTS/dt',
    method: 'delete',
    params: params
  })
}
// æ¨¡æ¿é˜¶æ®µåˆ—表
export const stagelist = (params) => {
  return request({
    url: '/api/ubcs-flow/processTS/sslist',
    method: 'get',
    params: params
  })
}
// å±žæ€§åˆ—表
export const attributeList = (params) => {
  return request({
    url: '/api/ubcs-code/codeTempPhaseController/gridUnUsedAttribute',
    method: 'get',
    params: params
  })
}
// å±žæ€§åˆ—表左侧
export const attributeListRight = (params) => {
  return request({
    url: '/api/ubcs-flow/processTS/ssslist',
    method: 'get',
    params: params
  })
}
// æ¨¡æ¿é˜¶æ®µåˆ—表
export const attributeSave = (params) => {
  return request({
    url: '/api/ubcs-flow/processTS/sasou',
    method: 'post',
    data: params
  })
}
Source/UBCS-WEB/src/api/template/templateAttr.js
@@ -148,3 +148,29 @@
    }
  })
}
// ä¿å­˜æŽ¥å£
export const  batchAddSave = (data) =>{
  return request({
    url:'/api/ubcs-code/codeClassifyTempAttrController/batchAddSave',
    method: 'post',
    data:data
  })
}
//同步到其他模板
export const  copyto = (data) =>{
  return request({
    url:'/api/ubcs-code/codeClassifyTempAttrController/copyto',
    method: 'post',
    data:data
  })
}
//编码申请预览
export const  getFormDefineByTemplate = (params) =>{
  return request({
    url:'/api/ubcs-code/mdmEngineController/getFormDefineByTemplateOid',
    method: 'get',
    params:{
      ...params
    }
  })
}
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -558,7 +558,7 @@
          maxlength: formItem.maxlength,
          filterable: true,
          referConfig:formItem.type=='refer'?{
            title:formItem.text,
            title:formItem.text ,
            showField:formItem.showField || formItem.field,
            field: formItem.field,
            placeholder: formItem.inputTip,
Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
@@ -2,10 +2,15 @@
  <basic-container>
    <avue-tabs :option="Taboption" @change="handleChange"></avue-tabs>
    <span v-if="type.prop==='tab1'">
      <attrCrud :ProData="ProData" :crudOid="crudOid" :crudArray="crudArray" :Formlist="Formlist"></attrCrud>
      <attrCrud :ProData="ProData" :crudOid="crudOid" :crudArray="crudArray" :Formlist="Formlist" :codeClassifyOid="codeClassifyOid"></attrCrud>
    </span>
    <span v-else-if="type.prop==='tab2'">模板流程</span>
    <span v-else-if="type.prop==='tab3'">模板阶段</span>
    <span v-else-if="type.prop==='tab2'">
       <FlowPath code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></FlowPath>
    </span>
    <span v-else-if="type.prop==='tab3'">
<!--          <stage :visible.sync="visibleStage" code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></stage>-->
    </span>
  </basic-container>
</template>
@@ -13,7 +18,7 @@
<script>
export default {
  name: "TemplatePro.vue",
  props: ['ProData','crudOid','crudArray','Formlist'],
  props: ['ProData','crudOid','crudArray','Formlist','codeClassifyOid'],
  data: function () {
    return {
      type: {},
Source/UBCS-WEB/src/components/Tree/attrCrud.vue
@@ -1,10 +1,10 @@
<template>
  <avue-crud :data="ProData" :option="option" @sort-change="sortChange" @row-update="addUpdate"
             @cell-click="handleRowClick" @select="selectHandle">
             @cell-click="handleRowClick" @select="selectHandle" @row-del="CrudRowDel">
    <template slot="menuLeft">
      <el-button v-if="attrEditVisible == false" size="small" type="primary" @click="busineHandle">+ æ·»åŠ  {{msg}}</el-button>
      <el-dialog :visible.sync="addVisible" append-to-body title="从业务类型中选择属性">
        <avue-crud :data="businessData" :option="businessOption">
      <el-button v-if="attrEditVisible == false && attrFlagChiledren==false" size="small" type="primary" @click="busineHandle">+ æ·»åŠ  {{msg}}</el-button>
      <el-dialog :visible.sync="addVisible" append-to-body title="从业务类型中选择属性" >
        <avue-crud :data="businessData" :option="businessOption" @select="businessSelect">
          <template slot="menuLeft">
            <div style="display: flex;">
              <el-select>
@@ -18,24 +18,24 @@
          </template>
        </avue-crud>
       <div style="display: flex;justify-content: flex-end;margin-top: 15px">
         <el-button size="small" type="primary">保存</el-button>
         <el-button size="small" type="primary" @click="busineAddHandle">保存</el-button>
         <el-button size="small" type="primary">取消</el-button>
       </div>
      </el-dialog>
    </template>
    <!--        å…¨å±ç¼–辑-->
    <template slot="menuLeft">
      <el-button v-if="attrEditVisible == false" size="small" @click="attrEditVisible=true">全屏编辑</el-button>
      <!--      <el-button @click.native="attrEditVisible=false" size="small">退出全屏编辑</el-button>-->
      <el-button v-if=" attrEditVisible == false && attrFlagChiledren==false" size="small" @click="fullscreenHandle">全屏编辑</el-button>
<!--      <el-button v-if="attrFlagChiledren !=false" size="small" plain type="success" @click="escEdit">退出全屏编辑</el-button>-->
      <el-dialog :visible.sync="attrEditVisible" append-to-body fullscreen="true">
        <attrCrud></attrCrud>
       <attrCrud :ProData="this.ProData" :attrFlagChiledren="this.attrFlag"></attrCrud>
      </el-dialog>
    </template>
<!--    ç»„合规则-->
    <template slot="menuLeft">
      <el-button size="small" @click="isShowformulaEdit = true">组合规则</el-button>
        <formula-editor :visible.sync="isShowformulaEdit" :systemVariableTableData="systemVariableTableData" :thisSceneTableData="thisSceneTableData">\
        </formula-editor>
      <el-button size="small" @click="isShowformulaEdit=true">组合规则</el-button>
        <formula-editor :visible.sync="isShowformulaEdit" :systemVariableTableData="systemVariableTableData" :thisSceneTableData="thisSceneTableData"></formula-editor>
    </template>
    <!--        éªŒè¯è§„则-->
    <template slot="menuLeft">
@@ -83,16 +83,24 @@
    </template>
    <!--        å±žæ€§åˆ†ç»„-->
    <template slot="menuLeft">
      <el-button icon="el-icon-menu" size="small" @click="attrVisible=true">属性分组</el-button>
      <el-button icon="el-icon-menu" size="small" @click="attrVisibleHandle">属性分组</el-button>
      <el-dialog :visible.sync="attrVisible" append-to-body style="width: 800px; left:30vw;top: 10vh ;"
                 title="输入分组的名称">
        <avue-form :option="attrOption"></avue-form>
        <el-form ref="form"  label-width="70px">
          <el-form-item label="属性分组">
            <el-input v-model="attrModel"></el-input>
          </el-form-item>
            <div style="display: flex;justify-content: flex-end">
              <el-button type="primary" @click="attrHandle" size="small">提交</el-button>
              <el-button size="small" @click="attrRemove">清空</el-button>
            </div>
        </el-form>
      </el-dialog>
    </template>
    <!--        åˆ†ç±»æ³¨å…¥-->
    <template slot="menuLeft">
      <el-button icon="el-icon-magic-stick" size="small" @click="injectVisible=true">分类注入</el-button>
      <el-button icon="el-icon-magic-stick" size="small" @click="injectBtn">分类注入</el-button>
      <el-dialog :visible.sync="injectVisible" append-to-body class="mydialog"
                 style="width: 1400px; left:14vw ;top: 10vh;" title="分类注入">
        <div class="injectBox">
@@ -102,38 +110,63 @@
            <br/>4:层级必须是大于0的整数值
          </div>
          <div style="padding-top: 15px;padding-left: 35px">
            <avue-form :option="injectOption" @reset-change="injectHandleReset">
              <template slot="menuForm">
                <el-button icon="el-icon-user" @click="injectRemove">取消</el-button>
              </template>
            </avue-form>
            <el-form ref="injectForm"  label-width="80px">
              <el-form-item label="注入类型">
                <el-radio-group v-model="injectOption.type">
                  <el-radio label="分类名称"></el-radio>
                  <el-radio label="分类代号"></el-radio>
                </el-radio-group>
              </el-form-item>
              <el-form-item label="层级设置">
                <el-radio-group v-model="injectOption.set">
                  <el-radio label="最小层"></el-radio>
                  <el-radio label="指定层"></el-radio>
                  <el-input-number v-model="injectOption.injectNum" controls-position="right"  :min="0" :max="10" v-if="this.injectOption.set == '指定层'"></el-input-number>
                </el-radio-group>
              </el-form-item>
              <el-form-item label="可修改">
                <el-radio-group v-model="injectOption.change">
                  <el-radio label="是"></el-radio>
                  <el-radio label="否"></el-radio>
                </el-radio-group>
              </el-form-item>
            </el-form>
          </div>
        </div>
        <div style="display: flex;justify-content: flex-end">
          <el-button size="small" type="primary" @click="injectAddHandle">确定</el-button>
          <el-button size="small" @click="injectHandleReset">清除内容</el-button>
          <el-button size="small" @click="injectRemove">取消</el-button>
        </div>
      </el-dialog>
    </template>
    <!--        æžšä¸¾æ³¨å…¥-->
    <template slot="menuLeft">
      <el-button size="small" @click="enumVisible=true">枚举注入</el-button>
      <el-button size="small" @click="enmuVisHandle">枚举注入</el-button>
      <el-dialog :visible.sync="enumVisible" append-to-body title="枚举注入">
        <!-- æ¸²æŸ“表格及按钮 -->
        <!-- æ¸²æŸ“表格及按钮 -->
        <div>
          <el-button icon="el-icon-plus" type="primary" @click="addRow">新增</el-button>
          <el-table :data="tableData" style="width: 100%" @cell-click="handleCellClick" @cell-dblclick="dbclick">
          <el-table :data="tableData" style="width: 100%" @cell-click="handleCellClick" @selection-change="handleSelectionChange">
            <!-- æ¸²æŸ“表格列及传参 -->
            <el-table-column label="序号" type="index"></el-table-column>
            <el-table-column label="选项值" prop="name">
            <el-table-column
              type="selection"
              width="55">
            </el-table-column>
            <el-table-column label="选项值" prop="key">
              <template slot-scope="{ row }">
                <!-- ç¼–辑和展示逻辑 -->
                <el-input v-if="editingRow === row && editShow == 'name'" v-model="row.name" @blur="saveRow"></el-input>
                <span v-else>{{ row.name }}</span>
                <el-input v-if="editingRow === row && editShow == 'key'" v-model="row.key" @blur="saveRow"></el-input>
                <span v-else>{{ row.key }}</span>
              </template>
            </el-table-column>
            <el-table-column label="选项中文标签" prop="age">
            <el-table-column label="选项中文标签" prop="value">
              <template slot-scope="{ row }">
                <!-- ç¼–辑和展示逻辑 -->
                <el-input v-if="editingRow === row && editShow == 'age'" v-model="row.age" @blur="saveRow"></el-input>
                <span v-else>{{ row.age }}</span>
                <el-input v-if="editingRow === row && editShow == 'value'" v-model="row.value" @blur="saveRow"></el-input>
                <span v-else>{{ row.value }}</span>
              </template>
            </el-table-column>
            <el-table-column fixed="right" label="操作" width="120">
@@ -146,7 +179,7 @@
          </el-table>
          <template>
            <div style="display: flex;justify-content: right;margin-top: 15px">
              <el-button type="primary"  size="small">保存</el-button>
              <el-button type="primary"  size="small" @click="enumAddHandle">保存</el-button>
              <el-button size="small" @click="enumVisible=false">取消</el-button>
            </div>
          </template>
@@ -166,7 +199,7 @@
          </template>
        </avue-crud>
        <div style="display: flex ;padding-top: 18px;justify-content: right">
          <el-button size="small" type="primary">确定</el-button>
          <el-button size="small" type="primary" @click="CascadeAddHandle">确定</el-button>
          <el-button size="small" style="margin-left: 10px" @click="casRemove">清除内容</el-button>
          <el-button size="small" style="margin-left: 10px" @click="CascadeVisible=false">取消</el-button>
        </div>
@@ -182,26 +215,71 @@
    </template>
    <!--    åˆ é™¤-->
    <template slot="menuLeft">
      <el-button size="small">删除</el-button>
      <el-button size="small" @click="CrudRemove">删除</el-button>
    </template>
    <!--    é‡ç½®-->
    <template slot="menuLeft">
      <el-button size="small">重置</el-button>
      <el-button size="small" @click="reset">重置</el-button>
    </template>
    <!--    åŒæ­¥åˆ°å…¶ä»–模板-->
    <template slot="menuLeft">
      <el-button size="small" style="margin-top: 10px">同步到其他模板</el-button>
      <el-button size="small" style="margin-top: 10px" @click="syncHandle">同步到其他模板</el-button>
    </template>
<!--    ç¼–码申请预览-->
    <template slot="menuLeft">
      <el-button size="small" style="margin-top: 10px" @click="applicationHandle">编码申请预览</el-button>
        <FormTemplateDialog
          :visible.sync="addvisible"
          :type="add"
          :templateOid="this.crudOid"
          :codeClassifyOid="this.codeClassifyOid"
        >
        </FormTemplateDialog>
    </template>
  </avue-crud>
</template>
<script>
import {AttrByBtm,gridCodeClassifyTemplateAttr} from '@/api/template/templateAttr'
import {AttrByBtm,gridCodeClassifyTemplateAttr,batchAddSave,copyto} from '@/api/template/templateAttr'
export default {
  name: "attrCrud .vue",
  props: ['ProData','crudOid','crudArray','Formlist'],
  // props: ['ProData','crudOid','crudArray','Formlist','codeClassifyOid'],
  props:{
    ProData:{
      type:Array,
    },
    crudOid:{
      type:String,
      default:''
    },
    crudArray:{
      type:Array,
    },
    Formlist:{
      type:Array,
    },
    codeClassifyOid:{
      type:String,
      default:''
    },
    attrFlagChiledren:{
      type:Boolean,
      default:false
    },
  },
  data() {
    return {
      attrFlag:false,
      //编码申请预览option
      applicationoption:{
        column:[]
      },
      // ç¼–码申请预览data
      applicationData:[],
      //业务类型单选数组
      busineSelectList:[],
      //业务类型添加数据
      busineAddList:{},
      //表格单选数组
      CrudSelect:[],
      //表格oid
@@ -573,6 +651,8 @@
      editShow: "",
      //枚举注入
      enumVisible: false,
      //枚举注入多选保存数组
      enumRow:[],
      // åˆ†ç±»æ³¨å…¥å¼¹å‡ºæ¡†
      injectVisible: false,
      // æ·»åŠ å¼¹å‡ºæ¡†
@@ -581,67 +661,19 @@
      rulesVisible: false,
      //属性分组弹出框
      attrVisible: false,
      //属性分组option
      attrOption: {
        column: [
          {
            label: "属性分组",
            span: 24,
            prop: "attrIN"
          }
        ]
      },
      //属性分组输入框
      attrModel:"",
      //当前单选模板属性
      attrRow:{},
      //编码申请预览弹出框
      addvisible:false,
      //分类注入option
      injectOption: {
        column: [
          {
            label: "注入类型",
            type: 'radio',
            prop: "injection",
            span: 24,
            value: 0,
            dicData: [
              {
                label: '分类名称',
                value: 0
              }, {
                label: '分类代号',
                value: 1
              },
            ]
          },
          {
            label: "层级设置",
            type: 'radio',
            prop: "Level",
            span: 24,
            value: 0,
            dicData: [
              {
                label: '最小层',
                value: 0
              }, {
                label: '指定层',
                value: 1
              },
            ]
          },
          {
            label: "可修改",
            type: 'radio',
            prop: "revise",
            value: 0,
            dicData: [
              {
                label: '是',
                value: 0
              }, {
                label: '否',
                value: 1
              },
            ]
          }
        ]
        type:"分类名称",
        set:"最小层",
        change:"是",
        //分类注入计数器
        injectNum:0,
      },
      // å±žæ€§éªŒè¯è¾“入框
      RulesForm: {
@@ -682,6 +714,8 @@
        border: true,
        addBtn: false,
        menu:false,
        selection:true,
        height:500,
        column: [
          {
            label: "属性英文名称",
@@ -731,26 +765,6 @@
      },
      //模板属性
      data: [
        {
          id: "测试一",
          name: "测试name1",
          attributegroup: "测试一",
          attributeDataTypeText: "测试一",
        },
        {
          id: "测试二",
          name: "测试name2",
          attributegroup: "测试二",
          attributeDataTypeText: "测试二"
        },
        {
          id: "测试三",
          name: "测试name3",
          attributegroup: "测试三",
          attributeDataTypeText: "测试三",
          keyattrflag: false
        }
      ],
      // å½“前行
      rowList: [],
@@ -791,7 +805,7 @@
          },
          {
            label: "属性分组",
            prop: "attributegroup",
            prop: "attributeGroup",
            cell: false,
            sortable: true,
            width: 125,
@@ -811,101 +825,101 @@
          },
          {
            label: "关键属性",
            prop: "keyattrflag",
            prop: "keyAttrFlag",
            cell: false,
            type: "switch",
          },
          {
            label: "查询属性",
            prop: "queryattrflag",
            prop: "queryAttrFlag",
            cell: false,
          },
          {
            label: "高级查询属性",
            prop: "seniorqueryattrflag",
            prop: "seniorQueryAttrFlag",
            width: 95,
            cell: false,
          },
          {
            label: "相似查询属性",
            prop: "samerepeatattrflag",
            prop: "sameRepeatAttrFlag",
            width: 95,
            cell: false,
          },
          {
            label: "必输",
            prop: "requireflag",
            prop: "requireFlag",
            cell: false,
          },
          {
            label: "表单显示",
            prop: "formdisplayflag",
            prop: "formDisplayFlag",
            cell: false,
          },
          {
            label: "列表显示",
            prop: "tabledisplayflag",
            prop: "tableDisplayFlag",
            cell: false,
          },
          {
            label: "只读",
            prop: "readonlyflag",
            prop: "readonlyFlag",
            cell: false,
          },
          {
            label: "列表排序",
            prop: "sortattrflag",
            prop: "sortAttrFlag",
            cell: false,
          },
          {
            label: "多行文本",
            prop: "textareaflag",
            prop: "textareaFlag",
            cell: false,
          },
          {
            label: "默认值",
            prop: "defaultvalue",
            prop: "defaultValue",
            sortable: true,
            cell: false,
            width: 95,
          },
          {
            label: "前缀",
            prop: "prefixvalue",
            prop: "prefixValue",
            sortable: true,
            cell: false,
          },
          {
            label: "后缀",
            prop: "suffixvalue",
            prop: "suffixValue",
            sortable: true,
            cell: false,
          },
          {
            label: "组合规则",
            prop: "componentrule",
            prop: "componentRule",
            sortable: true,
            cell: false,
            width: 105,
          },
          {
            label: "验证规则",
            prop: "verifyrule",
            prop: "verifyRule",
            sortable: true,
            cell: false,
            width: 105,
          },
          {
            label: "时间格式",
            prop: "codedateformat",
            prop: "codeDateFormat",
            sortable: true,
            width: 105,
            cell: false,
          },
          {
            label: "分类注入",
            prop: "classifyinvokelevel",
            prop: "classifyInvokeLevel",
            cell: false,
          },
          {
@@ -942,61 +956,110 @@
          },
          {
            label: "表单显示样式",
            prop: "formdisplaystyle",
            prop: "formDisplayStyle",
            width: 105,
            cell: false,
          },
          {
            label: "表格显示样式",
            prop: "tabledisplaystyle",
            prop: "tableDisplayStyle",
            width: 105,
            cell: false,
          },
          {
            label: "表单超链接",
            prop: "formhref",
            prop: "formHref",
            width: 95,
            cell: false,
          },
          {
            label: "表格超链接",
            prop: "tablehref",
            prop: "tableHref",
            width: 95,
            cell: false,
          },
          {
            label: "表格显示js",
            prop: "tabledisplayjs",
            prop: "tableDisplayJs",
            width: 95,
            cell: false,
          },
          {
            label: "长度",
            prop: "controllength",
            prop: "controlLength",
            cell: false,
          },
          {
            label: "小数精度",
            prop: "precisionlength",
            prop: "precisionLength",
            cell: false,
          },
          {
            label: "取值范围",
            prop: "valuearea",
            prop: "valueArea",
            sortable: true,
            cell: false,
            width: 105,
          },
        ],
        List:[]
      }
    }
  },
  mounted() {
    console.log(this.attrEditVisible)
    console.log(this.ProData)
  },
  created() {
  },
  methods: {
    //属性分组按钮
    attrVisibleHandle(){
      if(this.CrudSelect.length>1){
        this.$message.warning('只能选择一条模板属性')
      }else if(this.CrudSelect<1){
        this.$message.warning('请选择一条模板属性')
      }else if(this.CrudSelect.length === 1){
        this.attrVisible=true;
      }
    },
    //属性分组提交
    attrHandle(){
      this.$set(this.attrRow,'attributeGroup',this.attrModel)
      this.attrModel=""
      this.attrVisible=false
    },
    //属性分组清空
    attrRemove(){
      this.attrModel=""
    },
    //表格数据
    CrudRend(){
      if(this.crudOid != ''){
        gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.crudOid}).then(res => {
          this.ProData = res.data.data;
        }).catch(res => {
          this.$message.error(res)
        })
      }
    },
    //业务类型保存
    busineAddHandle(){
      if(this.busineSelectList.length>1){
        this.$message.warning('请选择一条业务类型数据')
      }else {
        this.$set(this.busineAddList,'classifytemplateoid',this.crudOid)
        this.$set(this.busineAddList,'oid','')
        this.ProData.push(JSON.parse(JSON.stringify(this.busineAddList)))
        console.log(this.busineAddList)
        this.addVisible=false;
        console.log('prodata',this.ProData)
      }
    },
    //业务类型单选
    businessSelect(selection,row){
      this.busineSelectList=selection
      this.busineAddList=row
    },
    // ä»Žä¸šåŠ¡ç±»åž‹ä¸­é€‰æ‹©æ•°æ®
    busineHandle(){
      if(this.crudArray.length<1){
@@ -1009,36 +1072,42 @@
        })
      }
    },
    // çº§è”属性
    // çº§è”属性按钮
    CascadeHandle(){
      if(this.CrudSelect.length >0){
      if(this.CrudSelect.length >1){
       this.$message.warning('只能选择一条模板属性')
      }else if(this.CrudSelect.length<1){
        this.$message.warning('请选择一条模板属性')
      }else if(this.CrudSelect.length === 1){
        this.CascadeVisible=true;
        gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid,
          'conditionMap[oid_notequal]':this.CrudOid
        }).then(res=>{
         this.CascadeData=res.data.data
          this.CascadeData=res.data.data;
        })
      }else {
        this.$message.warning('请选择一条模板属性')
      }
    },
    //表格单选
    selectHandle(selection,row){
      this.CrudOid=row.oid;
      this.CrudSelect=selection
      this.CrudSelect=selection;
      this.attrRow=row;
      console.log(selection.length)
    },
    //保存
    addsHandler(){
      batchAddSave(this.ProData).then(res=>{
        console.log(res)
        this.$message.success('保存成功')
      })
    },
    // screenEdit(){
    //   debugger
    //   this.attrEditVisible=true;
    // },
    // outEdit(){
    //   debugger
    //   this.attrEditVisible=false;
    // },
    //级联保存
    CascadeAddHandle(){
      let CascadeString="";
      CascadeString=this.attrRow.id+(this.attrRow.name);
      this.$set(this.attrRow,'parentCode',CascadeString)
      this.CascadeVisible=false;
    },
    //级联属性清除
    casRemove() {
      this.selectRow = ""
@@ -1047,14 +1116,13 @@
    CascaderowClick(row) {
      this.selectRow = row.$index
      console.log(row)
      this.$message.success('选择序号' + row.$index)
    },
    // æžšä¸¾æ³¨å…¥æ·»åŠ ä¸€è¡Œç©ºæ•°æ®
    addRow() {
      this.tableData.push({
        name: "",
        age: ""
      });
      this.tableData.push(JSON.parse(JSON.stringify({
        key: "",
        value: ""
      })));
    },
    // æžšä¸¾æ³¨å…¥ç›‘听单元格点击事件并存储正在编辑的行
    handleCellClick(row, column) {
@@ -1065,6 +1133,31 @@
    enumDeleteRow(row) {
      console.log(row)
      this.tableData.splice(row, 1)
    },
    //枚举注入按钮
    enmuVisHandle(){
      if(this.CrudSelect.length>1){
        this.$message.warning('只能选择一条模板属性')
      }else if(this.CrudSelect<1){
        this.$message.warning('请选择一条模板属性')
      }else if(this.CrudSelect.length === 1){
        this.enumVisible=true;
      }
    },
    //枚举注入多选框
    handleSelectionChange(row){
      console.log(row)
      this.enumRow=JSON.parse(JSON.stringify(row));
    },
    //枚举注入保存
    enumAddHandle(){
      console.log(this.enumRow)
      if(this.enumRow.length<1){
        this.$message.warning('请至少选择一条数据')
      }else {
        this.$set(this.attrRow,'enumString',this.enumRow);
        this.enumVisible=false;
      }
    },
    // å°†æ­£åœ¨ç¼–辑的行的状态变为 null ï¼Œå³é€€å‡ºç¼–辑状态
    saveRow() {
@@ -1087,9 +1180,27 @@
    rulesExamine() {
    },
    //点击分类注入按钮
    injectBtn(){
      if(this.CrudSelect.length>1){
        this.$message.warning('只能选择一条模板数据')
      }else if(this.CrudSelect.length<1){
        this.$message.warning('请选择一条模板数据')
      }else if(this.CrudSelect.length === 1){
        this.injectVisible=true
      }
    },
    //分类注入保存
    injectAddHandle(){
      this.$set(this.attrRow,'classifyInvokeLevel',this.injectOption);
      this.injectVisible=false
    },
    //分类注入清空
    injectHandleReset() {
      console.log("清空")
      this.injectOption.type="";
      this.injectOption.set="";
      this.injectOption.change="";
      this.injectOption.injectNum="";
    },
    // åˆ†ç±»æ³¨å…¥å–消
    injectRemove() {
@@ -1129,6 +1240,56 @@
      //加上done关闭保存后不可编辑的状态
      done()
    },
    //表格操作栏删除
    CrudRowDel(row){
      this.ProData.splice(row.$index,1)
    },
    //表格删除
    CrudRemove(){
      this.ProData.splice(this.attrRow.$index,1)
    },
    //表格重置
    reset(){
      this.CrudRend()
    },
    //同步到其他模板
    syncHandle(){
      if(this.CrudSelect.length>1){
        this.$message.warning('只能选择一条模板属性数据')
      }else if(this.CrudSelect.length<1){
        this.$message.warning('请选择一条模板属性数据')
      }else if(this.CrudSelect.length === 1){
        copyto({oid:this.attrRow.oid}).then(res=>{
          this.$message.success('同步成功')
        })
      }
    },
    //编码申请预览
    applicationHandle(){
      this.addvisible=true;
      console.log('temp',this.crudOid)
      console.log('code',this.codeClassifyOid)
      // getFormDefineByTemplate({templateOid:this.crudOid,codeClassifyOid:this.codeClassifyOid}).then(res=>{
      //   console.log(res)
      // })
    },
    //全屏编辑
    fullscreenHandle(){
      if(this.crudArray.length<1){
        this.$message.warning('请选择一个模板')
      }else {
        this.attrEditVisible=true;
        this.attrFlag=true;
        console.log(this.attrEditVisible)
      }
    },
    //退出全屏编辑
    escEdit(){
      this.attrFlagChiledren=false;
      this.attrEditVisible=false;
      console.log(this.attrEditVisible)
    },
    // æŽ’序
    sortChange(val) {
      console.log(val)
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -169,7 +169,7 @@
          </avue-crud>
          </basic-container>
          <templatePro :ProData="this.ProData" :crudOid="this.crudOid" :crudArray="this.crudArray" :Formlist="this.Formlist"></templatePro>
          <templatePro :ProData="this.ProData" :crudOid="this.crudOid" :crudArray="this.crudArray" :Formlist="this.Formlist" :codeClassifyOid="this.codeClassifyOid"></templatePro>
        </span>
      </basic-container>
    </el-main>
@@ -437,8 +437,14 @@
  methods: {
    //行单选事件
    selectHandle(selection,row){
      this.crudOid=row.oid
      this.crudArray=selection
      this.crudOid=row.oid;
      this.crudArray=selection;
      gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid}).then(res => {
        this.ProData = res.data.data;
        console.log(this.ProData)
      }).catch(res => {
        this.$message.error(res)
      })
    },
    //分类树数据处理
    getAttr() {
@@ -634,6 +640,7 @@
      //定义一个模板属性id,数据是模板管理表格里面的oid
      this.nodeClickList = data
      console.log(data.oid)
      this.ProData=[]
      try {
        await TreeObjcet(data.oid).then(res => {
          this.FlagObj = res.data.data
@@ -648,14 +655,6 @@
              return item.codeclassifyoid == this.nodeClickList.oid
            }
          })
          if(this.Formlist.length >0){
            gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid}).then(res => {
              this.ProData = res.data.data;
              console.log(this.ProData)
            }).catch(res => {
              this.$message.error(res)
            })
          }
        }).catch(res => {
          console.log(res)
        })
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -1,14 +1,13 @@
<template>
  <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferTree>
  <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferTable>
  <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :referConfig="referConfig"></vciWebReferDefalut>
  <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTree>
  <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTable>
  <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferDefalut>
</template>
<script>
import vciWebReferTree from "./vciWebReferTree.vue";
import vciWebReferTable from "./vciWebReferTable.vue";
import vciWebReferDefalut from "./vciWebReferTable.vue";
import {validatenull} from "@/util/validate";
import vciWebReferDefalut from "./vciWebReferDefalut.vue";
export default {
  name: "vciWebRefer",
  props: ["referConfig","value","text"],
@@ -16,20 +15,17 @@
  data() {
    return {
      refertype: this.referConfig.options.type,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      emitData:{}
      emitData:{},
      title:''
    };
  },
  created() {
  created() {},
  mounted() {
    var title = this.referConfig.title || '';
    title = title.replace(":", "");
    if (title) {
      title = validatenull(this.referConfig.title) ? ('为【' + title + '】选取值') : this.referConfig.title;
    } else {
      title = validatenull(this.referConfig.title) ? ('为【' + this.referConfig.showField + '】选取值') : this.referConfig.title;
    }
    this.referConfig.title = title;
    this.referConfig.isMuti = this.isMuti;
    title = title ? ('为【' + title + '】选取值') : ('为【' + this.referConfig.showField + '】选取值');
    this.title=title;
  },
  methods: {
    setValue(value) {
@@ -45,9 +41,6 @@
        this.$emit("setReferValue", newV);
      },
    }
  },
  mounted() {
  }
}
</script>
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,289 @@
<template>
  <div>
    <el-dialog :title="title"
               v-dialogDrag append-to-body="true"
               :visible.sync="visible"
               top="0"
               class="avue-dialog avue-dialog--top"
               :width="referConfig.options.width|| '80%'">
      <avue-crud :option="option"
                 :table-loading="loading"
                 :data="data"
                 :page.sync="page"
                 v-model="value"
                 ref="referDefalutCrud"
                 @search-change="searchChange"
                 @search-reset="searchReset"
                 @selection-change="selectionChange"
                 @current-change="currentChange"
                 @size-change="sizeChange"
                 @refresh-change="refreshChange"
                 @on-load="onLoad">
      </avue-crud>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <el-button @click="visible=false">取 æ¶ˆ</el-button>
        <el-button @click="setValue" type="primary">ç¡® å®š</el-button>
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
</template>
<script>
import { validatenull } from "@/util/validate";
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferDefalut",
  props:["referConfig","value","text","title"],
  data() {
    return {
      visible: false,
      options: this.referConfig.options,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
      },
      url: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferDataGrid',
      tableDefinedUrl:'',//平台表格地址
      copyParam: ['referBo', 'textField', 'valueField', 'displayTable', 'whereSql',  'queryScheme'],
      query: {},
      loading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      data:this.referConfig.options.data || [],
      selectionList: [],
      option: {
        addBtn: false,
        height: this.referConfig.options.height ? this.referConfig.options.height : 475,
        calcHeight: 30,
        tip: false,
        menu:false,
        searchShow: true,
        searchMenuSpan: 6,
        searchLabelWidth: 90,
        border: true,
        index: true,
        selection: true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        column: []
      }
    };
  },
  created() {
    this.getParams();
    console.log('referConfig:')
    console.log(this.referConfig)
  },
  mounted() {
  },
  computed:{
    valueInfo:function (){
      return this.text ? ("已设置的值为[" + this.text + "]"): '未设置值'
    }
  },
  methods: {
    getParams:function () {
      var queryParams = {};
      if (this.options.extraParams) {
        queryParams = this.options.extraParams;
      }
      if (this.options.useFormKey && this.options.formValues) {
        //使用表单上的字段来过滤
        queryParams['conditionMap["' + (this.options.paramForFormKey ? this.options.paramForFormKey : this.options.useFormKey) + '"]'] = this.options.formValues[this.options.useFormKey];
      }
      if (this.options.where) {
        for (var key in this.options.where) {
          queryParams['conditionMap["' + key + '"]'] = this.options.where[key];//新
        }
      }
      for (var i = 0; i < this.copyParam.length; i++) {
        queryParams[this.copyParam[i]] = this.options[this.copyParam[i]];
      }
      queryParams["isMuti"] = this.isMuti;
      queryParams.muti = this.isMuti;
      if (!queryParams['referBo']) {
        queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      }
      queryParams['referType'] = queryParams['referBo']
      if (this.options.remoteSort && this.options.initSort) {
        queryParams['order'] = this.options.initSort.type;//方法
        queryParams['sort'] = this.options.initSort.field;//字段
      }
      if (this.options.conditionParams) {
        //说明是扩展属性
        for (var key in this.options.conditionParams) {
          queryParams['conditionMap["' + key + '"]'] = this.options.conditionParams[key];//新的方式
        }
      }
      if (this.options.sourceDataParams) {
        //说明是扩展属性
        for (var key in this.options.sourceDataParams) {
          if (key && key.constructor === Object) return;
          queryParams['sourceData["' + key + '"]'] = this.options.sourceDataParams[key];//新的方式
        }
      }
      if (this.options.replaceParams) {
        //说明是扩展属性
        for (var key in this.options.replaceParams) {
          if (key && key.constructor === Object) return;
          queryParams['replaceMap["' + key + '"]'] = this.options.replaceParams[key];//新的方式
        }
      }
      var paramsData = {};
      //为了处理单引号和双引号的
      if (queryParams) {
        for (var key in queryParams) {
          paramsData[key.replace(/"/g, "'")] = queryParams[key];
        }
      }
      if (!this.options.tableConfig || !this.options.tableConfig.cols || this.options.tableConfig.cols.length == 0) {
        this.option.column = [{
          prop: 'id',
          label: '英文名称',
          sort: true,
          width: 150,
          search: true
        }, {
          prop: 'name',
          label: '中文名称',
          sort: true,
          width: 150,
          search: true
        }, {
          prop: 'description',
          label: '描述',
          width: 250
        }, {
          prop: 'secretGradeText',
          label: '密级',
          width: 60,
          hidden: (!this.controllerSecret)
        }];
      } else {
        this.option.column = this.options.tableConfig.cols.map(item => {
          if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
            return {
              ...item,
              label: item.title,
              prop: item.field,
              search: true
            }
          }
        })
      }
      if (!paramsData) {
        paramsData = {
          currentUserReferModelKey: this.options.currentUserReferModelKey,
          currentUserReferMethodKey: this.options.currentUserReferMethodKey
        };
      } else {
        paramsData['currentUserReferModelKey'] = this.options.currentUserReferModelKey;
        paramsData['currentUserReferMethodKey'] = this.options.currentUserReferMethodKey;
      }
      this.params = paramsData;
    },
    setValue(){
      if(this.selectionList.length==0){
        this.$message.error( '没有选择数据');
        return false;
      }else if(this.selectionList.length>1 && !this.isMuti){
        this.$message.error( '每次只能选择一条数据');
        return false;
      }
      var value = [];
      var text = [];
      var isMutiValue = (this.props.value.indexOf(",")>-1);
      var isMutiRaw = (this.props.label.indexOf(",")>-1);
      var _that=this
      this.selectionList.forEach((item,_index) =>{
        if(isMutiValue){
          var valueFieldArray = _that.props.value.split(",");
          valueFieldArray.forEach((_indexField,_itemField)=>{
            value.push( item[_itemField] + (_that.referConfig.valueSep?_that.referConfig.valueSep:' '));
          })
        }else {
          value.push(item[_that.props.value]);
        }
        if(isMutiRaw) {
          var rawFieldArray = _that.props.label.split(",");
          rawFieldArray.forEach((_indexField,_itemField)=>{
            text.push(item[_itemField] + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          })
        }else{
          text.push(item[_that.props.label]);
        }
      })
      this.value=value.join(',');
      this.text=text.join(',')
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList});
      this.visible=false;
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    currentChange(currentPage){
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize){
      this.page.pageSize = pageSize;
    },
    selectionChange(list) {
      if (!this.isMuti && list.length > 1) {
        const nowVal = list.shift();
        this.$refs.referCrud.toggleRowSelection(nowVal, false);
      }
      this.selectionList = list
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.referCrud.toggleSelection();
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = this.params) {
      if(this.url){
        this.loading = true;
        getList(Object.assign(params, this.query),page.currentPage, page.pageSize, this.url).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  }
}
</script>
<style scoped>
.valueInfo{
  float: left;
  border: 1px solid #E9E7E7;
  display: inline-block;
  vertical-align: middle;
  padding: 9px 15px;
  line-height: 1;
}
</style>
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -1,71 +1,350 @@
<template>
  <avue-input-table :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="placeholder" ></avue-input-table>
  <div>
    <el-dialog :title="title"
               v-dialogDrag append-to-body="true"
               :visible.sync="visible"
               top="0"
               class="avue-dialog avue-dialog--top"
               :width="referConfig.options.width|| '80%'">
      <avue-crud :option="option"
                 :table-loading="loading"
                 :data="data"
                 :page.sync="page"
                 v-model="value"
                 ref="referCrud"
                 @search-change="searchChange"
                 @search-reset="searchReset"
                 @selection-change="selectionChange"
                 @current-change="currentChange"
                 @size-change="sizeChange"
                 @refresh-change="refreshChange"
                 @on-load="onLoad">
      </avue-crud>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <el-button @click="visible=false">取 æ¶ˆ</el-button>
        <el-button @click="setValue" type="primary">ç¡® å®š</el-button>
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
</template>
<script>
import { validatenull } from "@/util/validate";
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferTable",
  props:["referConfig","value"],
  props:["referConfig","value","text","title"],
  data() {
    return {
      placeholder:this.referConfig.placeholder || '请选择数据',
      column:{
        children:{
          border: true,
          column: [{
            label: '姓名',
            width: 120,
            search:true,
            prop: 'name'
          }, {
            label: '性别',
            search:true,
            prop: 'sex'
          }],
        },
      },
      visible: false,
      options: this.referConfig.options,
      isMuti: ("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
      },
      url: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferDataGrid',
      tableDefinedUrl:'',//平台表格地址
      copyParam: ['referBo', 'textField', 'valueField', 'displayTable', 'whereSql',  'queryScheme'],
      query: {},
      loading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      data:this.referConfig.options.data || [],
      selectionList: [],
      objTree: {//用于表格树,目前还没加上使用
        keyId: 'oid',//树形id字段名称
        keyPid: 'parentSaleProduct',//树形父id字段名称
        title: 'id',//以树形式显示的字段
        defaultShow: false//默认折叠
      },
      option: {
        addBtn: false,
        height: this.referConfig.options.height ? this.referConfig.options.height : 475,
        calcHeight: 30,
        tip: false,
        menu:false,
        searchShow: true,
        searchMenuSpan: 6,
        searchLabelWidth: 90,
        border: true,
        index: true,
        selection: true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        column: []
      }
    };
  },
  created() {
    this.getParams();
    console.log('referConfig:')
    console.log(this.referConfig)
  },
  mounted() {
  },
  computed:{
    valueInfo:function (){
      return this.text ? ("已设置的值为[" + this.text + "]"): '未设置值'
    }
  },
  methods: {
    onLoad({page, value, data}, callback) {
      //首次加载去查询对应的值
      if (value) {
        this.$message.success('首次查询' + value)
        callback({
          id: '0',
          name: '张三',
          sex: '男'
        })
        return
    getParams:function (){
      var queryParams = {};
      if(this.options.extraParams){
        queryParams = this.options.extraParams;
      }
      if (data) {
        this.$message.success('搜索查询参数' + JSON.stringify(data))
      if(this.options.useFormKey && this.options.formValues){
        //使用表单上的字段来过滤
        queryParams['conditionMap["' + (this.options.paramForFormKey?this.options.paramForFormKey:this.options.useFormKey)  + '"]'] = this.options.formValues[this.options.useFormKey];
      }
      if (page) {
        this.$message.success('分页参数' + JSON.stringify(page))
      if(this.options.where ) {
        for (var key in this.options.where) {
          queryParams['conditionMap["' + key + '"]'] = this.options.where[key];//新
        }
      }
      //分页查询信息
      callback({
        total: 2,
        data: [{
          id: '0',
          name: '张三',
          sex: '男'
        }, {
          id: '1',
          name: '李四',
          sex: '女'
        }]
      for(var i= 0 ; i < this.copyParam.length ; i ++){
        queryParams[this.copyParam[i]] = this.options[this.copyParam[i]];
      }
      queryParams["isMuti"]=this.isMuti;
      queryParams.muti =this.isMuti;
      if(!queryParams['referBo']){
        queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      }
      queryParams['referType']= queryParams['referBo']
      if (this.options.remoteSort && this.options.initSort) {
        queryParams['order'] = this.options.initSort.type;//方法
        queryParams['sort'] = this.options.initSort.field;//字段
      }
      if (this.options.conditionParams) {
        //说明是扩展属性
        for (var key in this.options.conditionParams) {
          queryParams['conditionMap["' + key + '"]'] = this.options.conditionParams[key];//新的方式
        }
      }
      if (this.options.sourceDataParams) {
        //说明是扩展属性
        for (var key in this.options.sourceDataParams) {
          if (key && key.constructor === Object) return;
          queryParams['sourceData["' + key + '"]'] = this.options.sourceDataParams[key];//新的方式
        }
      }
      if (this.options.replaceParams) {
        //说明是扩展属性
        for (var key in this.options.replaceParams) {
          if (key && key.constructor === Object) return;
          queryParams['replaceMap["' + key + '"]'] = this.options.replaceParams[key];//新的方式
        }
      }
      var paramsData = {};
      //为了处理单引号和双引号的
      if(queryParams){
        for (var key in queryParams){
          paramsData[key.replace(/"/g, "'")] = queryParams[key];
        }
      }
      if(this.options.displayTable){
        //说明是使用平台的表格
        getTableDefinedUrl({btmType:(this.options.referBo||this.options.referType),code:this.options.displayTable,isMuti:this.isMuti},this.tableDefinedUrl).then(result => {
          if(result.success){
            var queryScheme = result.querySchema;
            if(!validatenull(queryScheme) && validatenull(this.options.queryScheme)){
              this.options.queryScheme = queryScheme;
            }
            paramsData['queryScheme'] = this.options.queryScheme;
            if(result.showIndex){
              this.option.index = true;
            }
            if(result.showCheckbox){
              this.option.selection = true
            }
            var referColumn = "";
            if(result.columns){
              this.option.column= result.columns.map(item => {
                if(item.field.indexOf(".")>-1){
                  referColumn += item.field + ",";
                  item.field = item.field.replace(".","_");
                }
                if(!validatenull(item.enumCode)) {
                  //是枚举的内容
                  item.type = 'select';
                  item.dicUrl = "/api/ubcs-omd/enum/dictionary?code=" + item.enumCode;
                  item.dicData = item.enumMap;
                  item.dataType = "String";
                  item.search = true;
                  item.props = {
                    label: "itemName",
                    value: "itemValue"
                  };
                  item.rules = [{
                    required: true,
                    message: "请输入" + item.field,
                    trigger: "blur"
                  }];
                  /*item.formatter=function(d,thisItem){
                    var vciWebComboxStore = layui.vciWebComboxStore;
                    return vciWebComboxStore.getComboxText(thisItem.enumCode,d[thisItem.field]);
                  };*/
                }
                return {
                  ...item,
                  label: item.title,
                  prop: item.field,
                  search: true
                }
              })
            }
            paramsData['referColumn'] = referColumn;
            if(result.limit>0){
              this.page.pageSize = result.limit;
              this.page.currentPage=1
            }
            if(this.options.isTreeGrid){
              //表格树加上配置
            }
            this.params=paramsData;
          }else{
            this.$message.error(result.msg);
          }
        });
      }else{
        //说明是自定义的表格
        var tableConfig = this.options.tableConfig;
        if(!tableConfig){
          this.$message.error( '没有定义参照的表格配置');
        }
        this.page.pageSize=tableConfig.page.limit || 10;
        if(!paramsData){
          paramsData = {
            currentUserReferModelKey:this.options.currentUserReferModelKey,
            currentUserReferMethodKey:this.options.currentUserReferMethodKey
          };
        }else{
          paramsData['currentUserReferModelKey'] = this.options.currentUserReferModelKey;
          paramsData['currentUserReferMethodKey'] = this.options.currentUserReferMethodKey;
        }
        if(this.options.tableConfig && this.options.tableConfig.cols && this.options.tableConfig.cols.length>0) {
          //说明传递了的
          this.option.column= this.options.tableConfig.cols.map(item => {
            if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
              return {
                ...item,
                label: item.title,
                prop: item.field,
                formatter:item.template,
                search: true
              }
            }
          })
        }
        if(this.options.isTreeGrid){
          //表格树加上配置
        }
      }
      this.params=paramsData;
    },
    setValue(){
      if(this.selectionList.length==0){
        this.$message.error( '没有选择数据');
        return false;
      }else if(this.selectionList.length>1 && !this.isMuti){
        this.$message.error( '每次只能选择一条数据');
        return false;
      }
      var value = [];
      var text = [];
      var isMutiValue = (this.props.value.indexOf(",")>-1);
      var isMutiRaw = (this.props.label.indexOf(",")>-1);
      var _that=this
      this.selectionList.forEach((item,_index) =>{
        if(isMutiValue){
          var valueFieldArray = _that.props.value.split(",");
          valueFieldArray.forEach((_indexField,_itemField)=>{
            value.push( item[_itemField] + (_that.referConfig.valueSep?_that.referConfig.valueSep:' '));
          })
        }else {
          value.push(item[_that.props.value]);
        }
        if(isMutiRaw) {
          var rawFieldArray = _that.props.label.split(",");
          rawFieldArray.forEach((_indexField,_itemField)=>{
            text.push(item[_itemField] + (_that.referConfig.textSep?_that.referConfig.textSep:' ')) ;
          })
        }else{
          text.push(item[_that.props.label]);
        }
      })
      this.value=value.join(',');
      this.text=text.join(',')
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList});
      this.visible=false;
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    currentChange(currentPage){
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize){
      this.page.pageSize = pageSize;
    },
    selectionChange(list) {
      if (!this.isMuti && list.length > 1) {
        const nowVal = list.shift();
        this.$refs.referCrud.toggleRowSelection(nowVal, false);
      }
      this.selectionList = list
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.referCrud.toggleSelection();
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params = this.params) {
      if(this.url){
        this.loading = true;
        getList(Object.assign(params, this.query),page.currentPage, page.pageSize, this.url).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  }
}
</script>
<style scoped>
.valueInfo{
  float: left;
  border: 1px solid #E9E7E7;
  display: inline-block;
  vertical-align: middle;
  padding: 9px 15px;
  line-height: 1;
}
</style>
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -1,27 +1,31 @@
<template>
  <avue-input-tree ref="referTree" :props="props" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :leaf-only="!referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="placeholder" :dic="treeData"></avue-input-tree>
  <avue-input-tree ref="referTree" :props="props" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :checked="checked" :leaf-only="referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="title" :dic="treeData"></avue-input-tree>
</template>
<script>
import {getTree,getLazyTree} from "@/api/refer/tree";
import {validatenull} from "@/util/validate";
export default {
  name: "vciWebReferTree",
  props:["referConfig","value","text"],
  props:["referConfig","value","text","title"],
  data() {
    return {
      options: this.referConfig.options,
      lazy: this.referConfig.options.loadType == 'node',
      isMuti: this.referConfig.isMuti,
      placeholder: this.referConfig.placeholder || '请选择内容',
      isMuti:("true" == this.referConfig.options.isMuti || this.referConfig.options.isMuti == true || this.referConfig.options.muti == true) ? true : false,
      props: {
        value: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        label: this.referConfig.textField || this.referConfig.options.textField || "name"
        //value:"value",
        //label:"title"
        value: 'oid',
        label: "name"
      },
      treeUrl: this.referConfig.options.url || '/api/ubcs-code/codeClassify/treeCodeClassify',
      config:{
        valueField: this.referConfig.valueField || this.referConfig.options.valueField || 'oid',
        textField:this.referConfig.textField || this.referConfig.options.textField || "name",
        textSep:this.referConfig.textSep || ' '
      },
      treeUrl: this.referConfig.options.url || '/api/ubcs-code/mdmEngineController/defaultReferTree',
      treeData: [],
      selectionList: [],
      currentNode:{},
      params: {},
      loadType: {'all': 'all', 'node': 'node'},
@@ -42,6 +46,7 @@
      }
    }
  },
  computed:{},
  methods: {
    getParams:function (){
      var queryParams = {};
@@ -56,10 +61,10 @@
        }
      }
      queryParams['referBo'] = this.options['referBo'] || this.options['referType'];
      queryParams['referType']= queryParams['referBo']
      queryParams['selectAllLevel'] = (this.options.loadType == this.loadType.all?true:false);//true时后台会报错
      if(queryParams.isMuti =="true"){
        queryParams.muti =true;
      }
      queryParams.muti =this.isMuti;
      if(queryParams.isQueryAllColumn =="true"){
        queryParams.isQueryAllColumn = true;
      }
@@ -143,16 +148,45 @@
        }))
      });
    },
    nodeClick(data){
      //不要用watch监听value值,会找不到text
      this.value=data[this.props.value];
      this.text=data[this.props.label];
      this.currentNode=data;
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.currentNode});
    nodeClick(data, node, nodeComp){
      if(!this.isMuti) {
        this.setValue({checkedNodes:[data]})
      }
     },
    checked(checkedNode, checkedData) {
      this.setValue(checkedData)
    },
    setValue:function (checkedData){
      var value = [];
      var text = [];
      const textSep =this.config.textSep;
      for(var j =0;j<checkedData.checkedNodes.length;j++){
        const item=checkedData.checkedNodes[j];
        var v=this.config.valueField.indexOf("attribute.")>=0?item.attributes[this.config.valueField.replace("attribute.","")]:(item.attributes[this.config.valueField] || item[this.config.valueField])
        value.push(v);
        var tempRaw = [];
        var textFieldArray = this.config.textField.split(",");
        for (var i = 0; i < textFieldArray.length; i++) {//显示的字段可能有多个
          if (!validatenull(textFieldArray[i])) {
            var t=textFieldArray[i].indexOf("attribute.")>=0?item.attributes[textFieldArray[i].replace("attribute.","")]:(item.attributes[textFieldArray[i]] || item[textFieldArray[i]])
            tempRaw.push(t);
          }
        }
        text.push(tempRaw.join(textSep));
      }
      this.value = value.join(',');
      this.text = text.join(',')
      this.$emit("setValue", {
        field: this.referConfig.field,
        showField: this.referConfig.showField,
        value: this.value,
        text: this.text || '',
        isTreeMuti:this.isMuti,
        rawData: checkedData.checkedNodes
      });
    }
  },
  watch:{
  }
  watch:{}
}
</script>
Source/UBCS-WEB/src/components/template/FlowPath.vue
@@ -1,32 +1,18 @@
<template>
    <el-dialog title="模板流程" width="90%" append-to-body="true" :visible.sync="dialogVisible">
        <avue-crud ref="crud" :table-loading="loading" :data="data" v-model="form" :option="option" :page.sync="page"
            :search.sync="search" @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete"
            @row-update="handleEdit" @refresh-change="handleRefresh" @size-change="handleSizePage"
            @current-change="handleCurrentPage" @selection-change="selectionChange" @row-click="handleRowClick">
            <template slot="menuLeft">
                <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">删 é™¤
                </el-button>
            </template>
            <template slot="search" slot-scope="{row,size}">
                <el-input :placeholder="`请输入${selectValue === 'id' ? '系统编号' : '系统名称'}并按回车查询`" :size="size"
                    style="width:300px;margin-left: 10px;" v-model="search[selectValue]" clearable
                    @keyup.enter.native="handleEnter" @clear="handleClear"></el-input>
            </template>
            @current-change="handleCurrentPage">
        </avue-crud>
    </el-dialog>
</template>
<script>
import { getFlowpathList, getStartList, flowpathSave } from '@/api/template/flowpath.js'
import { getFlowpathList, getStartList, flowpathSave, flowpathDelete } from '@/api/template/flowpath.js'
export default {
    name: 'FlowPath',
    props: {
        // æ˜¯å¦æ‰“å¼€
        visible: {
            typeof: Boolean,
            default: false
        },
        code: {
            typeof: String,
            required: true,
@@ -34,16 +20,10 @@
        }
    },
    watch: {
        visible(n) {
            this.dialogVisible = n;
        },
        dialogVisible(n) {
            this.$emit('update:visible', n)
        },
    },
    data() {
        return {
            dialogVisible: this.visible,
            loading: false,
            page: {
                currentPage: 1,
@@ -69,7 +49,6 @@
                    prop: 'id,name,description,version',
                    order: 'descending'
                },
                selection: true,
                column: [
                    {
                        label: '模板key',
@@ -89,7 +68,7 @@
                        nodeClick: (data) => {
                            console.log(data)
                            // èŠ‚ç‚¹ç‚¹å‡»çš„æ—¶å€™ä¼šèŽ·å–åˆ°æ•°æ®
                            this.form.modeName = data.name
                            this.form.modelName = data.name
                        }
                    }, {
                        label: '模板名称',
@@ -136,20 +115,20 @@
            console.log(this.search)
            const { pageSize, currentPage } = this.page
            let param = { size: pageSize, current: currentPage }
            const response = await getFlowpathList({ ...param, ...this.search })
            const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
            if (response.status === 200) {
                console.log(response)
                this.loading = false
                const data = response.data.data
                this.data = data.records
                this.page.total = data.total
            }else this.loading = false
            } else this.loading = false
        },
        // æ–°å¢ž
        async handleSave(row, done, loading) {
            console.log(row)
            const response = await flowpathSave({...row,...{templateId:this.code}})
            if(response.status ===200){
            const response = await flowpathSave({ ...row, ...{ templateId: this.code } })
            if (response.status === 200) {
                loading()
                console.log(response)
                this.$message({
@@ -164,9 +143,9 @@
        // ç¼–辑
        async handleEdit(row, index, done, loading) {
            console.log(row)
            const {modelName,modelKey,buttonTypeKey,id} = row
            let param = {modelName,modelKey,buttonTypeKey,id}
            const response = await flowpathSave({...param,...{templateId:this.code}})
            const { modelName, modelKey, buttonTypeKey, id } = row
            let param = { modelName, modelKey, buttonTypeKey, id }
            const response = await flowpathSave({ ...param, ...{ templateId: this.code } })
            if (response.status === 200) {
                loading()
                this.$message({
@@ -180,20 +159,27 @@
        },
        // åˆ é™¤å•条
        handleDelete(row) {
            const { oid } = row
        },
        // å¤šæ¡æ•°æ®åˆ é™¤
        handleDeleteByIds() {
            console.log(row)
            const { id } = row
            this.deleteSysInfo({ id: id })
        },
        // åˆ é™¤æŽ¥å£
        deleteSysInfo(param) {
            this.$confirm('是否确定删除选择的集成系统?', '提示', {
            this.$confirm('是否确定删除选择的模板流程?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(async () => {
                // æŽ¥å£
                const response = await flowpathDelete(param)
                if (response.status === 200) {
                    console.log(response)
                    this.$message({
                        type: 'success',
                        message: '删除成功!'
                    });
                    this.getDataList()
                }
            })
        },
        // enter搜索
@@ -215,15 +201,6 @@
        handleCurrentPage(event) {
            this.page.currentPage = event
        },
        // ç‚¹å‡»é€‰æ‹©
        handleRowClick(row) {
            this.$refs.crud.toggleRowSelection(row, true)
        },
        // å¤šé€‰
        selectionChange(list) {
            console.log(list)
        },
    }
}
</script>
</script>
Source/UBCS-WEB/src/components/template/Stage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,259 @@
<template>
    <el-dialog title="模板阶段" width="90%" append-to-body="true" :visible.sync="dialogVisible">
        <avue-crud ref="crud" :table-loading="loading" :data="data" :option="option" :page.sync="page"
            @on-load="getDataList" @size-change="handleSizePage" @current-change="handleCurrentPage"
            @row-click="handleRowClick">
            <template slot-scope="{type,size,row,index}" slot="menu">
                <el-button icon="el-icon-check" :size="size" :type="type"
                    @click="handleMaintenance(row, index)">维护</el-button>
            </template>
        </avue-crud>
        <el-dialog title="模板阶段" width="50%" append-to-body="true" :visible.sync="dialogNode">
            <avue-crud ref="crud" :table-loading="loading" :data="stageData" :option="stageOption" @on-load="getStagelist"
                @row-click="handleRowStageClick">
                <template slot-scope="{type,size,row,index}" slot="menu">
                    <el-button icon="el-icon-check" :size="size" :type="type"
                        @click="handleMaintenanceTransfer(row, index)">维护</el-button>
                </template>
            </avue-crud>
        </el-dialog>
        <table-transfer :visible.sync="dialogTransfer" v-model="listVal" :dataList="tableData" :columns="columns"
            keyName="oid" @save="handleSave"></table-transfer>
    </el-dialog>
</template>
<script>
import { getFlowpathList, stagelist, attributeListRight, attributeList, attributeSave } from '@/api/template/flowpath.js'
import TableTransfer from '@/components/template/TableTransfer'
export default {
    name: 'Stage',
    components: {
        TableTransfer
    },
    props: {
        // æ˜¯å¦æ‰“å¼€
        visible: {
            typeof: Boolean,
            default: false
        },
        code: {
            typeof: String,
            required: true,
            default: ""
        }
    },
    watch: {
        visible(n) {
            this.dialogVisible = n;
        },
        dialogVisible(n) {
            this.$emit('update:visible', n)
        },
    },
    computed: {
        tableData() {
            return this.setTable()
        },
        listVal() {
            let data = this.setTable()
            let newdata = data.map(item => {
                return item.checked ? item.oid : undefined
            })
            console.log(newdata.filter(item => item))
            return newdata.filter(item => item)
        }
    },
    data() {
        const options = {
            height: "auto",
            border: true,
            addBtn: false,
            align: 'center',
            menuAlign: 'center',
            index: true,
            searchMenuSpan: 8,
            searchBtn: false,
            emptyBtn: false,
            columnBtn: false,
            delBtn: false,
            refreshBtn: false,
            header: false,
            editBtn: false,
        }
        return {
            list: [],
            listRight: [],
            dialogVisible: this.visible,
            dialogTransfer: false,
            dialogNode: false,
            visibleTable: false,
            loading: false,
            page: {
                currentPage: 1,
                pageSize: 10,
                total: 0
            },
            modelKey: '',
            data: [],
            stageData: [],
            saveParam: {},
            columns: [
                {
                    key: "oid",
                    label: "oid",
                    visible: false,
                },
                {
                    key: "id",
                    label: "属性编号",
                    visible: true,
                },
                {
                    key: "name",
                    label: "属性名称",
                    visible: true,
                },
                {
                    key: "attributeGroup",
                    label: "属性分组",
                    visible: true,
                },
            ],
            option: {
                ...options,
                column: [
                    { label: '模板编号', prop: 'modelKey' },
                    { label: '模板名称', prop: 'modelName' },
                    { label: '描述', prop: 'buttonTypeValue' },
                ]
            },
            stageOption: {
                ...options,
                column: [
                    { label: '阶段编号', prop: 'taskId' },
                    { label: '阶段名称', prop: 'taskName' },
                ]
            },
        }
    },
    mounted() {
        this.getAttributeList()
    },
    methods: {
        setTable() {
            return this.list.map(item => {
                if (this.listRight.length !== 0) {
                    this.listRight.forEach(element => {
                        if (item.id === element.attrId) item.checked = true
                    });
                }
                return item
            })
        },
        // èŽ·å–åˆ—è¡¨
        async getDataList() {
            this.loading = false
            const { pageSize, currentPage } = this.page
            let param = { size: pageSize, current: currentPage }
            const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
            if (response.status === 200) {
                console.log(response)
                this.loading = false
                const data = response.data.data
                this.data = data.records
                this.page.total = data.total
            } else this.loading = false
        },
        // èŽ·å–é˜¶æ®µåˆ—è¡¨
        async getStagelist() {
            this.loading = false
            console.log(this.modelKey)
            const response = await stagelist({ modelKey: this.modelKey })
            if (response.status === 200) {
                this.loading = false
                console.log(response.data)
                this.stageData = response.data.data
            } else this.loading = false
        },
        // èŽ·å–å…¨éƒ¨å±žæ€§
        async getAttributeList() {
            const response = await attributeList({ 'conditionMap[classifyTemplateOid]': this.code })
            if (response.status === 200) {
                const data = response.data.data
                this.list = data.records.map(item => {
                    const { oid, id, name, attributeGroup } = item
                    return { oid, id, name, attributeGroup, ...{ checked: false } }
                })
            }
        },
        // èŽ·å–å·²ä¿å­˜å±žæ€§
        async getAttributeListRight() {
            const response = await attributeListRight({ templateId: this.code, modelKey: this.modelKey, taskId: this.saveParam.taskId })
            if (response.status === 200) {
                let data = response.data.data
                data = data.map(item => {
                    const { attrId, attrName, attrGroup } = item
                    return { attrId, attrName, attrGroup }
                })
                this.listRight = data
            }
        },
        // ç»´æŠ¤
        handleMaintenance(row) {
            console.log(row)
            this.dialogNode = true
            this.saveParam.modelKey = row.modelKey
        },
        handleMaintenanceTransfer(row) {
            console.log(row)
            this.dialogTransfer = true
            this.saveParam.taskId = row.taskId
            this.saveParam.taskName = row.taskName
            this.getAttributeListRight()
        },
        handleSizePage(event) {
            this.page.pageSize = event
        },
        handleCurrentPage(event) {
            this.page.currentPage = event
        },
        handleRowClick(row) {
            console.log(row)
            this.modelKey = row.modelKey
            this.saveParam.modelKey = row.modelKey
            this.dialogNode = true
        },
        handleRowStageClick(row) {
            this.dialogTransfer = true
            this.saveParam.taskId = row.taskId
            this.saveParam.taskName = row.taskName
            this.getAttributeListRight()
        },
        async handleSave(event) {
            console.log(event)
            const data = event.map(item => {
                const { id, name, attributeGroup } = item
                return { attrId: id, attrName: name, attrGroup: attributeGroup }
            })
            let param = {
                templateId: this.code,
                processStageAttr: data,
                ...this.saveParam
            }
            console.log(this.saveParam)
            console.log(data)
            const response = await attributeSave(param)
            if (response.status === 200) {
                // loading()
                console.log(response)
                this.$message({
                    type: 'success',
                    message: '新增数据成功!'
                })
                // done()
                // this.getDataList()
            }
        }
    }
}
</script>
Source/UBCS-WEB/src/components/template/TableTransfer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,322 @@
<template>
    <el-dialog :title="title" width="70%" append-to-body="true" :visible.sync="dialogVisible">
        <el-row :gutter="20">
            <el-col :span="11">
                <el-card class="box-card">
                    <div slot="header" class="clearfix">
                        <span>初始数据</span>
                        <el-input class="input" v-if="showSearch" v-model="searchLeft" placeholder="请输入搜索内容"
                            @keyup.enter.native="handleEnter"></el-input>
                    </div>
                    <el-table ref="transferLeftTable" :data="leftData" height="500" highlight-current-row
                        tooltip-effect="dark" @selection-change="handleLeftSelectionChange" @row-click="handleLeftRowClick">
                        <el-table-column type="selection" width="50" align="center" fixed="left" :selectable="selectable" />
                        <div v-for="(item, index) in columns" :key="index">
                            <el-table-column v-if="item.visible" :label="item.label" align="center" :prop="item.key" />
                        </div>
                    </el-table>
                </el-card>
            </el-col>
            <el-col :span="2" class="btns" :style="{ height: '500px' }">
                <el-button class="btn" :disabled="leftMultiple" type="primary" icon="el-icon-arrow-right"
                    @click="moveToRight" circle></el-button>
                <el-button class="btn" :disabled="rightMultiple" type="primary" @click="moveToLeft"
                    icon="el-icon-arrow-left" circle></el-button>
            </el-col>
            <el-col :span="11">
                <el-card class="box-card">
                    <div slot="header" class="clearfix">
                        <span>改变数据</span>
                        <el-input class="input" v-if="showSearch" v-model="searchRight" placeholder="请输入搜索内容"></el-input>
                    </div>
                    <el-table ref="transferRightTable" :data="rightData" height="500" highlight-current-row
                        tooltip-effect="dark" @selection-change="handleRightSelectionChange"
                        @row-click="handleRightRowClick">
                        <el-table-column type="selection" width="50" align="center" fixed="left" />
                        <div v-for="(item, index) in columns" :key="index">
                            <el-table-column v-if="item.visible" :label="item.label" align="center" :prop="item.key" />
                        </div>
                    </el-table>
                </el-card>
            </el-col>
        </el-row>
        <div slot="footer" class="dialog-footer">
            <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
            <el-button type="primary" @click="tableTransferSave">保存</el-button>
        </div>
    </el-dialog>
</template>
<script>
export default {
    name: 'TableTransfer',
    model: {
        prop: "value",
        event: "change",
    },
    props: {
        // æ˜¯å¦æ‰“å¼€
        visible: {
            typeof: Boolean,
            default: false
        },
        title: {
            typeof: String,
            default: '模板阶段维护'
        },
        //绑定数据
        value: {
            type: Array,
            default: () => {
                return [];
            },
        },
        //主键key值
        keyName: {
            type: String,
            default: "id",
        },
        columns: {
            type: Array,
            default: () => {
                return [];
            },
        },
        dataList: {
            type: Array,
            default: () => {
                return [];
            },
        },
        /**
         * æ˜¯å¦æ˜¾ç¤ºæœç´¢æ¡†
         */
        showSearch: {
            type: Boolean,
            default: true,
        },
    },
    watch: {
        visible(n) {
            this.dialogVisible = n;
        },
        dialogVisible(n) {
            this.$emit('update:visible', n)
        },
        searchLeft: {
            handler: function () {
                this.handleQueryLeft();
            },
            deep: true,
        },
        searchRight: {
            handler: function () {
                this.handleQueryRight();
            },
            deep: true,
        },
        dataList: {
            handler(data) {
                console.log(data)
            },
            deep: true,
        }
    },
    data() {
        return {
            dialogVisible: this.visible,
            searchLeft: "",
            leftIds: [],
            leftMultiple: true,
            leftDataList: [],
            leftData: [],
            searchRight: "",
            rightIds: [],
            rightMultiple: true,
            rightDataList: [],
            rightData: [],
        }
    },
    mounted() {
        this.init();
    },
    methods: {
        selectable(row, index) {
            console.log(row)
            return row.checked === false //为true的时候可以选,为false则不可选择
        },
        init() {
            this.rightIds = this.value;
            console.log(this.rightIds)
            for (let i = 0; i < this.dataList.length; i++) {
                if (this.value.some((item) => item == this.dataList[i][this.keyName])) {
                    this.rightDataList.push(this.dataList[i]);
                } else {
                    this.leftDataList.push(this.dataList[i]);
                }
            }
            this.leftData = [...this.leftDataList];
            this.rightData = [...this.rightDataList];
        },
        // left多选框选中数据
        handleLeftSelectionChange(selection) {
            this.leftIds = selection.map((item) => item[this.keyName]);
            this.leftMultiple = !selection.length;
        },
        // right多选框选中数据
        handleRightSelectionChange(selection) {
            this.rightIds = selection.map((item) => item[this.keyName]);
            this.rightMultiple = !selection.length;
        },
        // æŒ‰é’®ç‚¹å‡»
        moveToRight() {
            for (let i = 0; i < this.leftDataList.length; i++) {
                let a = this.leftIds.findIndex(
                    (item) => item == this.leftDataList[i][this.keyName]
                );
                console.log(a)
                if (a !== -1) {
                    this.rightDataList.push(this.leftDataList[i]);
                    // this.leftDataList[i].checked = true
                    // this.$refs.transferLeftTable.toggleRowSelection(this.leftDataList[i],true)
                    this.$delete(this.leftDataList, i);
                    i--;
                }
            }
            // let obj = {}
            // let filterright = this.rightDataList.reduce((cur, next) => {
            //     obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
            //     return cur;
            // }, [])
            // console.log('filterright', filterright)
            this.leftData = this.setData(this.leftDataList, this.searchLeft);
            this.rightData = this.setData(this.rightDataList, this.searchRight);
            this.$emit(
                "change",
                this.rightDataList.map((item) => item[this.keyName])
            );
        },
        // æŒ‰é’®ç‚¹å‡»
        moveToLeft() {
            for (let i = 0; i < this.rightDataList.length; i++) {
                let a = this.rightIds.findIndex(
                    (item) => item == this.rightDataList[i][this.keyName]
                );
                if (a !== -1) {
                    this.leftDataList.push(this.rightDataList[i]);
                    this.$delete(this.rightDataList, i);
                    i--;
                }
            }
            // let obj = {}
            // let filterleft = this.leftDataList.reduce((cur, next) => {
            //     obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
            //     return cur;
            // }, [])
            // console.log('filterright', filterleft)
            this.leftData = this.setData(this.leftDataList, this.searchLeft);
            this.rightData = this.setData(this.rightDataList, this.searchRight);
            this.$emit(
                "change",
                this.rightDataList.map((item) => item[this.keyName])
            );
        },
        handleQueryLeft() {
            this.leftData = this.setData(this.leftDataList, this.searchLeft);
        },
        handleQueryRight() {
            this.rightData = this.setData(this.rightDataList, this.searchRight);
        },
        // å•选
        handleLeftRowClick(row) {
            if (this.leftData) {
                this.$refs.transferLeftTable.toggleRowSelection(row)
            } else {
                this.$refs.transferLeftTable.clearSelection()
            }
        },
        // å•选
        handleRightRowClick(row) {
            if (this.rightData) {
                this.$refs.transferRightTable.toggleRowSelection(row)
            } else {
                this.$refs.transferRightTable.clearSelection()
            }
        },
        setData(dataList, search) {
            if (search != null || search != "") {
                let list = [];
                for (let i = 0; i < dataList.length; i++) {
                    if (
                        this.columns.some((item) =>
                            dataList[i][item.key].toLowerCase().includes(search.toLowerCase())
                        )
                    ) {
                        list.push(dataList[i]);
                    }
                }
                return list;
            } else {
                return dataList;
            }
        },
        change(val) {
            console.log(val);
            console.log(this.value)
        },
        done() {
            this.dialogVisible = false
        },
        tableTransferSave() {
            this.$emit('save', this.rightData)
            this.leftData = [...this.rightData, ...this.leftData]
            this.leftDataList = [...this.rightDataList, ...this.leftDataList]
            this.rightDataList = []
            this.rightData = []
        }
    },
}
</script>
<style lang="scss" scoped>
::v-deep(.el-col>.el-card >.el-card__header) {
    background: #fff
}
.box-card {
    background: #fff;
}
.clearfix {
    display: -webkit-box;
    display: flex;
    display: -ms-flexbox;
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    justify-content: space-between;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
}
.input {
    float: right;
    padding: 3px 0;
    max-width: 400px;
}
.btns {
    display: flex;
    align-items: center;
    flex-direction: column;
    justify-content: center;
    .btn {
        margin: 20px 0;
    }
}
</style>
Source/UBCS-WEB/src/main.js
@@ -48,9 +48,12 @@
import FormTemplateDialog from "@/components/FormTemplate/index"
import linkTypeAdd from "@/views/modeling/LinkTypeAdd"
import MasterTree from "@/components/Master/MasterTree";
import FlowPath from "@/components/template/FlowPath";
import Stage from "@/components/template/Stage";
// å°†å·¥å…·å‡½æ•°æ·»åŠ åˆ°å…¨å±€
import utilFunc from './util/func'
import flowPath from "@/views/flow/flowPath";
Vue.prototype.$utilFunc = utilFunc
// æ³¨å†Œå…¨å±€crud驱动
window.$crudCommon = crudCommon;
@@ -97,6 +100,8 @@
Vue.component('FormTemplateDialog',FormTemplateDialog)
Vue.component('LinkTypeAdd',linkTypeAdd)
Vue.component('MasterTree',MasterTree)
Vue.component('FlowPath',FlowPath)
Vue.component('Stage',Stage)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/option/user/info.js
@@ -45,7 +45,7 @@
      }]
    },
    {
      label: '修改密码',
      label: '',
      prop: 'password',
      column: [{
        label: '原密码',
Source/UBCS-WEB/src/views/flow/flowPath.vue
@@ -2,31 +2,82 @@
    <div>
        <el-button @click="outerVisible = true">流程测试</el-button>
        <el-button @click="visibleFlow = true">模板流程</el-button>
        <el-button @click="visibleStage = true">模板阶段</el-button>
        <el-button @click="visibleTable = true">table穿梭框</el-button>
        <flow-business :visible.sync="outerVisible"></flow-business>
        <flow-path :visible.sync="visibleFlow" code="A12826E4-2B66-6D56-DE30-92BB1D7F607F"></flow-path>
        <flow-path :visible.sync="visibleFlow" code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></flow-path>
        <stage :visible.sync="visibleStage" code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></stage>
        <table-transfer :visible.sync="visibleTable" v-model="value" :dataList="list" :columns="columns" keyName="id"
            @change="change"></table-transfer>
    </div>
</template>
<script>
import FlowBusiness from '@/components/template/Business'
import FlowPath from '@/components/template/FlowPath'
import Stage from '@/components/template/Stage'
import TableTransfer from '@/components/template/TableTransfer'
export default {
    components:{
    components: {
        FlowBusiness,
        FlowPath
        FlowPath,
        Stage,
        TableTransfer
    },
    data() {
        const getTables = () => {
            let data = []
            for (let i = 0; i < 5; i++) {
                let item = {
                    id: `${i+1}`,
                    name: 'name',
                    address: '集团码',
                    data:'',
                    checked:false,
                }
                data.push(item)
            }
            return data
        }
        return {
            list: getTables(),
            value: [],
            outerVisible: false,
            visibleFlow: false,
            visibleStage: false,
            visibleTable: false,
            columns: [
                {
                    key: "id",
                    label: "id",
                    visible: false,
                },
                {
                    key: "name",
                    label: "属性编号",
                    visible: true,
                },
                {
                    key: "address",
                    label: "属性名称",
                    visible: true,
                },
                {
                    key: "address",
                    label: "属性分组",
                    visible: true,
                },
            ],
        }
    },
    methods: {
        change(val) {
            console.log(val);
            console.log(this.value)
        },
    }
}
</script>
<style lang="scss" scoped>
</style>
<style lang="scss" scoped></style>
Source/UBCS-WEB/src/views/modeling/status.vue
@@ -11,36 +11,41 @@
                 @row-del="rowDel"
                 @refresh-change="refreshChange"
                 @search-reset="searchChange"
                 @search-change="searchChange">
                 @search-change="searchChange"
                 @row-click="rowClick">
        <template slot="menuLeft">
          <el-tooltip class="item" effect="dark" content="查找状态池使用范围" placement="top">
          <el-tooltip class="item" effect="dark" content="查找状态使用范围" placement="top">
            <el-button size="small"
                       plain
                       type="primary"
                       icon="el-icon-zoom-in"
                       @click="handleSearch">查看使用范围
                       @click="applyRangeSearch">查看使用范围
            </el-button>
          </el-tooltip>
        </template>>
        </template>
        <template slot="radio"
                  slot-scope="{row}">
          <el-radio v-model="selectRow"
                    :label="row.$index">&nbsp;
          </el-radio>
        </template>
      </avue-crud>
      <el-dialog title="查看使用范围"
                 append-to-body
                 :visible.sync="packageSearchBox"
                 width="1200px">
        <versionpackage></versionpackage>
      </el-dialog>
      <versionpackage :rangeData="applyRangeData" ref="applyRange"></versionpackage>
    </basic-container>
  </template>
  <script>
  import { getPage,add,update,remove } from '../../api/omd/status';
  import { getPage,add,update,remove,getApplyRange } from '../../api/omd/status';
  export default {
    name: "status",
    data(){
      return {
        //查看使用范围
        packageSearchBox:false,
        // ç‚¹å‡»æ•°æ®
        selectRow: '',
        selectRowData: {},
        //分页数据
        page: {
          pageSize: 10,
@@ -56,7 +61,14 @@
          border: true,
          index: true,
          searchMenuSpan:5,
          highlightCurrentRow: true,
          stripe:true,
          column:[
            {
              label: '',
              prop: 'radio',
              width: 120
            },
            {
              label:'英文名称',
              prop: 'id',
@@ -73,12 +85,28 @@
              type:'textarea'
            }
          ]
        }
        },
        applyRangeData: []
      }
    },
    methods:{
      handleSearch(){
        // this.packageSearchBox=true
      rowClick(row){
        this.selectRow = row.$index;
        this.selectRowData = row;
      },
      applyRangeSearch(){
        if (!this.selectRow && this.selectRow != 0){
          console.log(this.selectRow);
          this.$message({
            type:"warning",
            message: "请先选择属性"
          })
        }
        getApplyRange(this.selectRowData.id).then(res => {
          this.applyRangeData = res.data.data;
          this.$refs.applyRange.rangeData = this.applyRangeData;
          this.$refs.applyRange.showDialog = true;
        })
      },
      getList() {
        this.loading = true;
@@ -134,8 +162,7 @@
    }
  }
  </script>
  <style scoped>
  </style>
Source/UBCS-WEB/vue.config.js
@@ -26,17 +26,16 @@
    proxy: {
      '/api': {
        //本地服务接口地址
        target: 'http://localhost:37000',
        //  target: 'http://localhost:37000',
         target: 'http://localhost:37000',
        // target: 'http://192.168.1.51:37000',
        // target: 'http://192.168.3.7:37000',
        // target: 'http://192.168.1.46:37000',
        // target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        // target: 'http://localhost:37000',
        //   target: 'http://localhost:37000',
        // target: 'http://192.168.1.63:37000',
        // target: 'http://192.168.3.7:37000',
        //target: 'http://192.168.3.7:37000',
        // target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        //target: 'http://192.168.1.51:37000/',
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
        ws: true,
Source/UBCS/ubcs-service-api/ubcs-dict-api/src/main/java/com/vci/ubcs/system/feign/IDictBizClient.java
@@ -34,7 +34,7 @@
 * @author Chill
 */
@FeignClient(
    value = AppConstant.APPLICATION_NAME_OMD,
    value = AppConstant.APPLICATION_SYSTEM_NAME,
    fallback = IDictBizClientFallback.class
)
public interface IDictBizClient {
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeClient.java
@@ -18,6 +18,7 @@
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.vo.AttributeVO;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
@@ -41,6 +42,8 @@
    String GET_BY_ID = API_PREFIX + "/attribute/get-by-id";
    String GET_LIST = API_PREFIX + "/attribute/get-list";
    String GET_ALL = API_PREFIX + "/attribute/get-all";
    /**
     * èŽ·å–å…ƒæ•°æ®å¯¹è±¡
@@ -57,4 +60,11 @@
     */
    @GetMapping(GET_LIST)
    R<List<Attribute>> getList(@RequestParam("key") String key);
    /**
     * èŽ·å–å…¨éƒ¨å±žæ€§
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @GetMapping(GET_ALL)
    R<List<AttributeVO>> getAll();
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IAttributeFallback.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.omd.feign;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.vo.AttributeVO;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Component;
@@ -39,5 +40,13 @@
        return R.fail("获取数据失败");
    }
    /**
     * æŒ‰é¢†åŸŸèŽ·å–å…¨éƒ¨å±žæ€§
     *
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<List<AttributeVO>> getAll() {
        return R.fail("获取数据失败");
    }
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
@@ -50,11 +50,11 @@
     */
    String GET_BY_OIDS = API_PREFIX + "/btm-type/get-by-oids";
    String GET_DEFAULT_ATTR_BY_BTM_ID = API_PREFIX + "/btm-attribute/get-default-attr-by-btm-id";
    String GET_DEFAULT_ATTR_BY_BTM_ID = API_PREFIX + "/btm-type/get-default-attr-by-btm-id";
    String GET_ALL_ATTR_BY_BTM_ID = API_PREFIX + "/btm-attribute/get-all-attr-by-btm-id";
    String GET_ALL_ATTR_BY_BTM_ID = API_PREFIX + "/btm-type/get-all-attr-by-btm-id";
    String GET_ALL_ATTR_BY_BTM_OID = API_PREFIX + "/btm-attribute/get-all-attr-by-btm-oid";
    String GET_ALL_ATTR_BY_BTM_OID = API_PREFIX + "/btm-type/get-all-attr-by-btm-oid";
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹è¯¦æƒ…ä¿¡æ¯
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/ILinkTypeClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
package com.vci.ubcs.omd.feign;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * Description: é“¾æŽ¥ç±»åž‹Feign接口
 *
 * @author LiHang
 * @date 2023/6/13
 */
@FeignClient(
    value = AppConstant.APPLICATION_NAME_OMD,
    fallback = ILinkTypeFallback.class
)
public interface ILinkTypeClient {
    /**
     * å‰ç¼€
     */
    String API_PREFIX = "/client";
    /**
     * åˆ†é¡µå‚照查询
     */
    String GET_REF_PAGE =API_PREFIX + "/link-type/get-ref-page";
    /**
     * å‚照列表查询无分页
     */
    String GET_REF = API_PREFIX + "/link-type/get-ref";
    /**
     * å‚照明细
     */
    String GET_DETAIL = API_PREFIX + "/link-type/get-detail";
    /**
     * è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢
     */
    String GET_BY_IDS = API_PREFIX + "/link-type/get-by-ids";
    /**
     * ä¸»é”®æ‰¹é‡æŸ¥è¯¢
     */
    String GET_BY_OIDS = API_PREFIX + "/link-type/get-by-oids";
    /**
     * æŒ‰é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°èŽ·å–é»˜è®¤å­—æ®µ
     */
    String GET_DEFAULT_ATTR_BY_LINK_ID = API_PREFIX + "/link-type/get-default-attr-by-link-id";
    /**
     * æŒ‰é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°èŽ·å–å…¨éƒ¨å­—æ®µ
     */
    String GET_ALL_ATTR_BY_LINK_ID = API_PREFIX + "/link-type/get-all-attr-by-link-id";
    /**
     * æŒ‰é“¾æŽ¥ç±»åž‹ä¸»é”®èŽ·å–å…¨éƒ¨å­—æ®µ
     */
    String GET_ALL_ATTR_BY_LINK_OID = API_PREFIX + "/link-type/get-all-attr-by-link-oid";
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹è¯¦æƒ…ä¿¡æ¯
     *
     * @param oid ä¸»é”®
     * @return ä¸šåŠ¡ç±»åž‹è¯¦æƒ…ä¿¡æ¯
     */
    @GetMapping(GET_DETAIL)
    R<LinkTypeVO> getDetail(@RequestParam("oid") String oid);
    /**
     * å‚照列表查询
     *
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @PostMapping(GET_REF_PAGE)
    R<Page<LinkTypeVO>> getRefPage(@RequestBody BaseQueryObject baseQueryObject);
    /**
     * å‚照列表查询
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @PostMapping(GET_REF)
    R<List<LinkTypeVO>> getRef(@RequestBody BaseQueryObject baseQueryObject);
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢å¯¹è±¡
     * @param ids å¯¹è±¡è‹±æ–‡åç§° ä½†æ˜¯ä¸èƒ½è¶…过1000
     * @return ä¸šåŠ¡å¯¹è±¡
     */
    @PostMapping(GET_BY_IDS)
    R<List<LinkTypeVO>> selectByIdCollection(@RequestBody List<String> ids);
    /**
     * æ‰¹é‡æ ¹æ®ä¸»é”®èŽ·å–ä¸šåŠ¡ç±»åž‹
     * @param pkLinkTypeCollection ä¸šåŠ¡ç±»åž‹ä¸»é”®é›†åˆ
     * @return ä¸šåŠ¡ç±»åž‹åˆ—è¡¨ï¼Œå¦‚æžœæœ‰ä¸å­˜åœ¨çš„ä¸ä¼šè¿”å›žï¼Œå…¨éƒ¨ä¸å­˜åœ¨çš„åˆ™è¿”å›žç©ºåˆ—è¡¨
     */
    @PostMapping(GET_BY_OIDS)
    R<List<LinkTypeVO>> listLinkTypeByOidCollection(@RequestBody List<String> pkLinkTypeCollection);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œåªæœ‰é»˜è®¤å­—æ®µ
     *
     * @param linkTypeId ä¸šåŠ¡ç±»åž‹id
     * @return é»˜è®¤å­—段属性
     */
    @GetMapping(GET_DEFAULT_ATTR_BY_LINK_ID)
    R<LinkTypeVO> getDefaultAttrByLinkId(@RequestParam("linkTypeId") String linkTypeId);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeId ä¸šåŠ¡ç±»åž‹id
     * @return æ‰€æœ‰å­—段
     */
    @GetMapping(GET_ALL_ATTR_BY_LINK_ID)
    R<LinkTypeVO> getAllAttributeByLinkId(@RequestParam("linkTypeId") String linkTypeId);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeOid ä¸šåŠ¡ç±»åž‹ä¸»é”®
     * @return æ‰€æœ‰å­—段
     */
    @GetMapping(GET_ALL_ATTR_BY_LINK_OID)
    R<LinkTypeVO> getAllAttributeByLinkOid(@RequestParam("linkTypeOid") String linkTypeOid);
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/ILinkTypeFallback.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.vci.ubcs.omd.feign;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import org.springblade.core.tool.api.R;
import java.util.List;
/**
 * Description: é“¾æŽ¥ç±»åž‹feign失败的配置类
 *
 * @author LiHang
 * @date 2023/6/13
 */
public class ILinkTypeFallback implements ILinkTypeClient{
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹è¯¦æƒ…ä¿¡æ¯
     *
     * @param oid ä¸»é”®
     * @return ä¸šåŠ¡ç±»åž‹è¯¦æƒ…ä¿¡æ¯
     */
    @Override
    public R<LinkTypeVO> getDetail(String oid) {
        return R.fail("获取数据失败");
    }
    /**
     * å‚照列表查询
     *
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<Page<LinkTypeVO>> getRefPage(BaseQueryObject baseQueryObject) {
        return R.fail("获取数据失败");
    }
    /**
     * å‚照列表查询
     *
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<List<LinkTypeVO>> getRef(BaseQueryObject baseQueryObject) {
        return R.fail("获取数据失败");
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢å¯¹è±¡
     *
     * @param ids å¯¹è±¡è‹±æ–‡åç§° ä½†æ˜¯ä¸èƒ½è¶…过1000
     * @return ä¸šåŠ¡å¯¹è±¡
     */
    @Override
    public R<List<LinkTypeVO>> selectByIdCollection(List<String> ids) {
        return R.fail("获取数据失败");
    }
    /**
     * æ‰¹é‡æ ¹æ®ä¸»é”®èŽ·å–ä¸šåŠ¡ç±»åž‹
     *
     * @param pkLinkTypeCollection ä¸šåŠ¡ç±»åž‹ä¸»é”®é›†åˆ
     * @return ä¸šåŠ¡ç±»åž‹åˆ—è¡¨ï¼Œå¦‚æžœæœ‰ä¸å­˜åœ¨çš„ä¸ä¼šè¿”å›žï¼Œå…¨éƒ¨ä¸å­˜åœ¨çš„åˆ™è¿”å›žç©ºåˆ—è¡¨
     */
    @Override
    public R<List<LinkTypeVO>> listLinkTypeByOidCollection(List<String> pkLinkTypeCollection) {
        return R.fail("获取数据失败");
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œåªæœ‰é»˜è®¤å­—æ®µ
     *
     * @param linkTypeId ä¸šåŠ¡ç±»åž‹id
     * @return é»˜è®¤å­—段属性
     */
    @Override
    public R<LinkTypeVO> getDefaultAttrByLinkId(String linkTypeId) {
        return R.fail("获取数据失败");
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeId ä¸šåŠ¡ç±»åž‹id
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public R<LinkTypeVO> getAllAttributeByLinkId(String linkTypeId) {
        return R.fail("获取数据失败");
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeOid ä¸šåŠ¡ç±»åž‹ä¸»é”®
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public R<LinkTypeVO> getAllAttributeByLinkOid(String linkTypeOid) {
        return R.fail("获取数据失败");
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -31,7 +31,8 @@
     * @param mapList éœ€è¦æ’入的所有记录
     * @return æ’入成功的条数
     */
    Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList);/**
    Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList);
    /**
     * ä¼ å…¥è¡¨åï¼Œmap,list<map>完成批量更新操作
     * @param tableName è¡¨å
     * @param mapList éœ€è¦æ›´æ–°çš„æ‰€æœ‰è®°å½•
@@ -40,4 +41,12 @@
    @InterceptorIgnore(tenantLine = "true")
    Integer updateBatchByBaseModel(String tableName,List<Map<String,String>> mapList);
    /**
     * ä¼ å…¥è¡¨åï¼Œmap,oids完成批量删除操作
     * @param tableName è¡¨å
     * @param oids éœ€è¦åˆ é™¤çš„æ‰€æœ‰è®°å½•
     * @return åˆ é™¤æˆåŠŸçš„æ¡æ•°
     */
    Integer deleteByTaleAndOid(String tableName,String oids);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -377,7 +377,7 @@
     * @param baseModels      å¤„理数据
     * @return å¤„理成功数据条数
     */
    Integer insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception;
    Integer insertBatchByType(String btmType, List<BaseModel> baseModels);
    /**
     * ä¼ å…¥ä¸šåŠ¡ç±»åž‹ä»¥åŠç›¸oid集合查询数据进行返回
     *
@@ -385,7 +385,7 @@
     * @param oids      éœ€è¦æŸ¥è¯¢çš„oid集合 é€—号分开
     * @return æŸ¥è¯¢å‡ºçš„æ•°æ®
     */
    List<BaseModel> selectByTypeAndOid(String btmType, String oids) throws IllegalAccessException, NoSuchFieldException, InstantiationException, InvocationTargetException, IntrospectionException, SQLException;
    List<BaseModel> selectByTypeAndOid(String btmType, String oids) ;
    /**
     * ä¼ å…¥ä¸šåŠ¡ç±»åž‹ä»¥åŠç›¸å…³æ•°æ®è¿›è¡Œæ‰¹é‡æ›´æ–°æ“ä½œ
     *
@@ -393,6 +393,6 @@
     * @param baseModels      å¤„理数据
     * @return å¤„理状态
     */
    R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) throws Exception;
    R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -89,7 +89,7 @@
    private CodeClassifyTemplateButtonServiceImpl codeTempbuttonServiceImpl;
    @Autowired(required = false)
    private ICodeClassifyProcessTempService codeClsflowtempServiceImpl;
//    @Autowired(required = false)
    //    @Autowired(required = false)
//    private CodeClsflowtempMapper codeClsflowtempMapper;
    @Autowired(required = false)
    private CodeTemplatePhaseMapper codeTempphaseMapper;
@@ -493,34 +493,34 @@
//            ClientBusinessObject clientBusinessObject_template_insert = null;
//        try {
//            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
            codeCls_template_insert.setOid(VciBaseUtil.getPk());
            codeCls_template_insert.setRevisionOid(VciBaseUtil.getPk());
            codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
            codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
            codeCls_template_insert.setLastR(String.valueOf(1));
            codeCls_template_insert.setFirstR(String.valueOf(0));
            codeCls_template_insert.setFirstV(String.valueOf(1));
            codeCls_template_insert.setLastV(String.valueOf(1));
            codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
            codeCls_template_insert.setCreateTime(new Date());
            codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
            codeCls_template_insert.setLastModifyTime(new Date());
            codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
            codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
            Map rvObj = baseMapper.getNextRevision(codeCls_template.getNameOid());
            codeCls_template_insert.setRevisionSeq(Integer.parseInt(rvObj.get("REVISIONSEQ").toString()));
            codeCls_template_insert.setRevisionValue(rvObj.get("REVISIONVAL").toString());
        codeCls_template_insert.setOid(VciBaseUtil.getPk());
        codeCls_template_insert.setRevisionOid(VciBaseUtil.getPk());
        codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
        codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
        codeCls_template_insert.setLastR(String.valueOf(1));
        codeCls_template_insert.setFirstR(String.valueOf(0));
        codeCls_template_insert.setFirstV(String.valueOf(1));
        codeCls_template_insert.setLastV(String.valueOf(1));
        codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
        codeCls_template_insert.setCreateTime(new Date());
        codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
        codeCls_template_insert.setLastModifyTime(new Date());
        codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
        codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
        Map rvObj = baseMapper.getNextRevision(codeCls_template.getNameOid());
        codeCls_template_insert.setRevisionSeq(Integer.parseInt(rvObj.get("REVISIONSEQ").toString()));
        codeCls_template_insert.setRevisionValue(rvObj.get("REVISIONVAL").toString());
//            VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
            codeCls_template_insert.setVersionSeq(Integer.parseInt(rvObj.get("VERSIONSEQ").toString()));
            codeCls_template_insert.setVersionValue(rvObj.get("VERSIONVAL").toString());
            codeCls_template_insert.setLctid(codeCls_template.getLctid());
            codeCls_template_insert.setLcStatus("Editing");
            codeCls_template_insert.setId(codeCls_template.getId());
            codeCls_template_insert.setName(codeCls_template.getName());
            codeCls_template_insert.setDescription(codeCls_template.getDescription());
            codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
        codeCls_template_insert.setVersionSeq(Integer.parseInt(rvObj.get("VERSIONSEQ").toString()));
        codeCls_template_insert.setVersionValue(rvObj.get("VERSIONVAL").toString());
        codeCls_template_insert.setLctid(codeCls_template.getLctid());
        codeCls_template_insert.setLcStatus("Editing");
        codeCls_template_insert.setId(codeCls_template.getId());
        codeCls_template_insert.setName(codeCls_template.getName());
        codeCls_template_insert.setDescription(codeCls_template.getDescription());
        codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
//            codeCls_template_insert.setCheckinBy(userName);
            codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
        codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
//        }catch (VCIError e){
//            e.printStackTrace();
//            logger.error("===============>分类模板-升版复制出错oid: "+templateOldOid+",mes"+e.error_message);
@@ -919,6 +919,13 @@
    @Override
    public R<CodeClassifyTemplateVO> addSave(CodeClassifyTemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"需要添加的数据对象");
        QueryWrapper<CodeClassifyTemplate> wrapper = new QueryWrapper<>();
        wrapper.eq("CODECLASSIFYOID",codeClassifyTemplateDTO.getCodeclassifyoid());
        Long aLong = baseMapper.selectCount(wrapper);
        if(aLong > 0){
            return R.fail("该分类下已有子模版,无法新增,仅能进行升版操作!");
        }
        //将DTO转换为DO
        CodeClassifyTemplate codeClassifyTemplateDO = new CodeClassifyTemplate();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
@@ -937,7 +944,7 @@
        codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
        codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
        codeClassifyTemplateDO.setTs(new Date());
        codeClassifyTemplateDO.setOwner(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setOwner(String.valueOf(AuthUtil.getUser().getUserId()));
        codeClassifyTemplateDO.setLctid("codeClsTempLc");
        codeClassifyTemplateDO.setVersionValue("1");
        codeClassifyTemplateDO.setVersionSeq(1);
@@ -946,8 +953,8 @@
        codeClassifyTemplateDO.setVersionRule("0");
        codeClassifyTemplateDO.setRevisionRule("numberversionrule");
        codeClassifyTemplateDO.setLastModifyTime(new Date());
        codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setCreator(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        codeClassifyTemplateDO.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
        codeClassifyTemplateDO.setCreateTime(new Date());
        codeClassifyTemplateDO.setLastV("1");
        codeClassifyTemplateDO.setLastR("1");
@@ -1043,7 +1050,7 @@
//            condition.put("ts",codeClassifyTemplateDOCopyFromDTO.getTs());
            CodeClassifyTemplate detail = baseMapper
                .selectById(codeClassifyTemplateDOCopyFromDTO.getOid());
    //        boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOListemplateDOCopyFromDTO);
            //        boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOListemplateDOCopyFromDTO);
            if(detail.getTs().compareTo(codeClassifyTemplateDOCopyFromDTO.getTs()) != 0){//不是最新的不让改
                return R.fail("当前数据不是最新,请刷新后再修改!");
            }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -8,6 +8,7 @@
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
@@ -57,6 +58,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
@@ -327,6 +329,7 @@
     *
     * @param baseModelDTO æ•°æ®ä¼ è¾“对象
     */
    @Transactional
    @Override
    public void changeStatus(BaseModelDTO baseModelDTO) {
        VciBaseUtil.alertNotNull(baseModelDTO, "数据信息", baseModelDTO.getOid(), "主键", baseModelDTO.getBtmname(), "业务类型", baseModelDTO.getLcStatus(), "目标状态");
@@ -337,6 +340,14 @@
        wrapper.eq("BTMNAME",baseModelDTO.getBtmname());
        wrapper.in("OID",oids);
        // TODO å¾…完善
        //插个点 ä¸šåŠ¡ç±»åž‹å®ŒæˆåŽéœ€è¦ä¿®æ”¹
//        QueryWrapper<BtmTypeVO> wrapper = new QueryWrapper<>();
        List<BaseModel> baseModels = new ArrayList<>();
        baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
        if(baseModels.size() == 0){
            throw new VciBaseException("未查询到相关数据。");
        }
        // å¾…完善
        List<BtmTypeVO> cboList =  null;  // btmTypeClient.selectList(wrapper);
        //还需要修改allCode的生命周期
//        Map<String, String> conditionMap = new HashMap<>();
@@ -349,6 +360,9 @@
//        List<ClientBusinessObject> codeCbos = boService.queryCBO(MdmBtmTypeConstant.CODE_ALL_CODE, conditionMap);
        // å›žæ”¶éœ€è¦ä¸šåŠ¡æ•°æ®åˆ é™¤
        if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname()));
//            String referTable = listR.getData().get(0).getTableName();
            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(),VciBaseUtil.toInSql(baseModelDTO.getOid()));
            // BatchCBO batchCBO = new BatchCBO();
            // batchCBO.getDeleteCbos().addAll(cboList);
@@ -357,8 +371,16 @@
            //boService.persistenceBatch(batchCBO);
        } else {
            for (BaseModel baseModel : baseModels) {
                baseModel.setLcStatus(baseModelDTO.getLcStatus());
            }
            updateBatchByBaseModel(baseModelDTO.getBtmname(),baseModels);
            // lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
        }
        for (CodeAllCode codeCbo : codeCbos) {
            codeCbo.setLcStatus(baseModelDTO.getLcStatus());
        }
        codeAllCodeService.updateBatchById(codeCbos);
        // lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
    }
@@ -625,9 +647,10 @@
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
        if (!CollectionUtils.isEmpty(conditionMap)) {
            //表需要改
//            final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
            final String[] sql = {"select count(*) from pl_code_wupin t where 1 = 1 "};
            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmtypeid()));
//                String referTable = VciBaseUtil.getTableName(referVO.getReferType());
            final String[] sql = {"select count(*) from "+ listR.getData().get(0).getTableName() +" t where 1 = 1 "};
            conditionMap.forEach((key, value) -> {
                sql[0] += " and " + key + " = " + value;
            });
@@ -1408,31 +1431,45 @@
        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
        List<Map<String, String>> dataList = new ArrayList<>();
//        if (!CollectionUtils.isEmpty(maps)) {
//            maps.stream().forEach(map -> {
//                Map<String, String> data = new HashMap<>();
//                map.forEach((key, value) -> {
//                    data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
//                });
//                dataList.add(data);
//            });
//        }
//        dataGrid.setData(dataList);
        if (!CollectionUtils.isEmpty(maps)) {
            wrapperData(maps, templateVO, sqlBO.getSelectFieldList(), false);
            maps.stream().forEach(map -> {
                Map<String, String> data = new HashMap<>();
                for (String s : map.keySet()) {
                    data.put(s.toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
                }
//                map.forEach((key, value) -> {
//                    data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
//                });
                for (String s : map.keySet()) {
                    data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
                }
                dataList.add(data);
            });
            dataGrid.setData(dataList);
            dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString()));
            wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), false);
//            maps.stream().forEach(map -> {
//                Map<String, String> data = new HashMap<>();
////                map.forEach((key, value) -> {
////                    data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
////                });
//                for (String s : map.keySet()) {
//                    data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
//                }
//                dataList.add(data);
//            });
        }
//        dataGrid.setData(dataList);
//        if (!CollectionUtils.isEmpty(maps)) {
//            wrapperData(maps, templateVO, sqlBO.getSelectFieldList(), false);
//            maps.stream().forEach(map -> {
//                Map<String, String> data = new HashMap<>();
////                map.forEach((key, value) -> {
////                    data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value));
////                });
//                for (String s : map.keySet()) {
//                    data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s)));
//                }
//                dataList.add(data);
//            });
        dataGrid.setData(dataList);
        dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString()));
//        }
        return dataGrid;
    }
@@ -1708,9 +1745,7 @@
            }
            whereSql += " and ( t.secretGrade <= " + userSecret + ") ";
        }
        //要改,表明获取有问题
//        String tableName = VciBaseUtil.getTableName(btmType);
//        String tableName = "pl_code_wupin";
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
//                String referTable = VciBaseUtil.getTableName(referVO.getReferType());
        String tableName = listR.getData().get(0).getTableName();
@@ -2158,15 +2193,18 @@
        //pageHelper.addDefaultDesc("createTime");
        pageHelper.addDefaultDesc("id");
        if (!classifyService.checkHasChild(codeClassifyOid)) {
            conditionMap.put(CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
            conditionMap.put("t."+CODE_CLASSIFY_OID_FIELD, codeClassifyOid);
        } else {
            //表需要改
//            conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
            conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from pl_code_classify where lcstatus='" + FrameWorkDefaultValueConstant.FRAMEWORK_DATA_ENABLED +
                "' start with parentCodeClassifyOid = '" + codeClassifyOid + "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
            conditionMap.put("t."+CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from "+
                btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY))
                    .getData().get(0).getTableName() +" where lcstatus='" + FrameWorkDefaultValueConstant
                .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid +
                "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
        }
        conditionMap.put("lastr", "1");
        conditionMap.put("lastv", "1");
        conditionMap.put("t.lastr", "1");
        conditionMap.put("t.lastv", "1");
        return queryGrid(btmTypeId, templateVO, conditionMap, pageHelper);
//        List<String> selectFieldList = templateVO.getAttributes().stream().map(CodeClassifyTemplateAttrVO::getId).collect(Collectors.toList());
//        //参照让平台直接查询就行
@@ -3002,7 +3040,7 @@
     * @return å¤„理成功数据条数
     */
    @Override
    public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) throws Exception {
    public Integer insertBatchByType(String btmType, List<BaseModel> baseModels) {
        //使用传入的业务类型查询表
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
        if(listR.getData().size() == 0){
@@ -3028,7 +3066,7 @@
     * @return æŸ¥è¯¢å‡ºçš„æ•°æ®
     */
    @Override
    public List<BaseModel> selectByTypeAndOid(String btmType, String oids) throws IllegalAccessException, NoSuchFieldException, InstantiationException, InvocationTargetException, IntrospectionException, SQLException {
    public List<BaseModel> selectByTypeAndOid(String btmType, String oids)  {
        //使用传入的业务类型查询表
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
@@ -3041,38 +3079,42 @@
        List<BaseModel> baseModels = new ArrayList<>();
        //将查询到的数据转换为basemodel,使用的反射方式来进行创建的
        for (Map map : maps) {
            Object obj = BaseModel.class.newInstance();
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                Method setter = property.getWriteMethod();
                if (setter != null) {
                    //oracle的时间为TIMESTAMP的,需要进行转换成data,否则将报错
                    if(map.get(property.getName().toUpperCase()) instanceof TIMESTAMP){
                        LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
                        ZoneId zoneId = ZoneId.systemDefault();
                        ZonedDateTime zdt = localDateTime.atZone(zoneId);
                        Date date = Date.from(zdt.toInstant());
                        setter.invoke(obj,date);
                        map.remove(property.getName().toUpperCase());
                    } //oracle的数字为BigDecimal的,需要进行转换成Integer,否则将报错
                    else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
                        && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())){
                        setter.invoke(obj, ((BigDecimal)map.get(property.getName().toUpperCase())).intValue());
                        map.remove(property.getName().toUpperCase());
                    }else if(map.get(property.getName().toUpperCase()) != null){
                        setter.invoke(obj, map.get(property.getName().toUpperCase()));
                        map.remove(property.getName().toUpperCase());
        try{
            for (Map map : maps) {
                Object obj = BaseModel.class.newInstance();
                BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                for (PropertyDescriptor property : propertyDescriptors) {
                    Method setter = property.getWriteMethod();
                    if (setter != null) {
                        //oracle的时间为TIMESTAMP的,需要进行转换成data,否则将报错
                        if(map.get(property.getName().toUpperCase()) instanceof TIMESTAMP){
                            LocalDateTime localDateTime = ((TIMESTAMP) map.get(property.getName().toUpperCase())).toLocalDateTime();
                            ZoneId zoneId = ZoneId.systemDefault();
                            ZonedDateTime zdt = localDateTime.atZone(zoneId);
                            Date date = Date.from(zdt.toInstant());
                            setter.invoke(obj,date);
                            map.remove(property.getName().toUpperCase());
                        } //oracle的数字为BigDecimal的,需要进行转换成Integer,否则将报错
                        else if (map.get(property.getName().toUpperCase()) instanceof BigDecimal
                            && ("Integer").equals(setter.getParameterTypes()[0].getSimpleName())){
                            setter.invoke(obj, ((BigDecimal)map.get(property.getName().toUpperCase())).intValue());
                            map.remove(property.getName().toUpperCase());
                        }else if(map.get(property.getName().toUpperCase()) != null){
                            setter.invoke(obj, map.get(property.getName().toUpperCase()));
                            map.remove(property.getName().toUpperCase());
                        }
                    }
                }
            }
            for (Object key : map.keySet()) {
                map.put(key,String.valueOf(map.get(key)));
            }
                for (Object key : map.keySet()) {
                    map.put(key,String.valueOf(map.get(key)));
                }
            ((BaseModel) obj).setData(map);
            baseModels.add((BaseModel) obj);
                ((BaseModel) obj).setData(map);
                baseModels.add((BaseModel) obj);
            }
        }catch (Exception e){
            throw new VciBaseException("查询失败:" + e.getMessage());
        }
        return baseModels;
    }
@@ -3148,7 +3190,7 @@
     * @return å¤„理状态
     */
    @Override
    public R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) throws Exception {
    public R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) {
        //使用传入的业务类型查询表
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType));
        if(listR.getData().size() == 0){
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -41,6 +41,10 @@
        </foreach>
    </insert>
    <insert id="deleteByTaleAndOid" >
        delete from ${tableName} where oid in (${oids})
    </insert>
    <update  id="updateBatchByBaseModel"  parameterType="java.util.List" >
        BEGIN
        <foreach collection="mapList" item="columnMap" index="index" separator=";">
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java
@@ -1,7 +1,11 @@
package com.vci.ubcs.omd.feign;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.wrapper.AttributeWrapper;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.tenant.annotation.NonDS;
@@ -40,4 +44,16 @@
        condition.put("key",key);
        return R.data(service.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getId)));
    }
    /**
     * æŒ‰é¢†åŸŸèŽ·å–å…¨éƒ¨å±žæ€§
     *
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    @GetMapping(GET_ALL)
    public R<List<AttributeVO>> getAll() {
        List<AttributeVO> voList = AttributeWrapper.build().listEntityVO(service.list());
        return R.data(voList);
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/LinkTypeClient.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,183 @@
package com.vci.ubcs.omd.feign;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.service.ILinkTypeService;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.omd.wrapper.LinkTypeWrapper;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.*;
/**
 * Description: é“¾æŽ¥ç±»åž‹Feign实现类
 *
 * @author LiHang
 * @date 2023/6/13
 */
@ApiIgnore()
@RestController
@AllArgsConstructor
public class LinkTypeClient implements ILinkTypeClient{
    private final ILinkTypeService linkTypeService;
    private final String DOMAIN = "domain";
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹è¯¦æƒ…ä¿¡æ¯
     *
     * @param oid ä¸»é”®
     * @return é“¾æŽ¥ç±»åž‹è¯¦æƒ…信息
     */
    @Override
    public R<LinkTypeVO> getDetail(String oid) {
        LinkTypeVO vo = linkTypeService.getLinkTypeByOid(oid);
        return R.data(vo);
    }
    /**
     * å‚照列表查询
     *
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<Page<LinkTypeVO>> getRefPage(BaseQueryObject baseQueryObject) {
        Map<String, String> conditionMap = baseQueryObject.getConditionMap();
        if (conditionMap == null){
            conditionMap = new HashMap<>(16);
        }
        if (!conditionMap.containsKey(DOMAIN)){
            return R.fail("领域值不能为空");
        }
        PageHelper pageHelper = baseQueryObject.getPageHelper();
        if (pageHelper == null){
            pageHelper = new PageHelper(-1);
        }
        String domainValue = conditionMap.get(DOMAIN);
        VciBaseUtil.alertNotNull(domainValue,"领域值");
        conditionMap.remove(DOMAIN);
        LinkType queryObj = new LinkType();
        BeanMap.create(queryObj).putAll(conditionMap);
        Query query = new Query();
        query.setSize(pageHelper.getLimit());
        query.setCurrent(pageHelper.getPage());
        IPage<LinkType> page = linkTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(queryObj).lambda().eq(LinkType::getDomain, domainValue).orderByAsc(LinkType::getId));
        Page<LinkTypeVO> pageVO = new Page<>();
        BeanUtil.copy(page,pageVO);
        pageVO.setRecords(LinkTypeWrapper.build().listEntityVO(page.getRecords(),null));
        R<Page<LinkTypeVO>> r = R.data(pageVO);
        r.setSuccess(true);
        return r;
    }
    /**
     * å‚照列表查询
     *
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶å¯¹è±¡
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<List<LinkTypeVO>> getRef(BaseQueryObject baseQueryObject) {
        Map<String, String> conditionMap = baseQueryObject.getConditionMap();
        if (conditionMap == null){
            conditionMap = new HashMap<>(16);
        }
        if (!conditionMap.containsKey(DOMAIN)){
            return R.fail("领域值不能为空");
        }
        PageHelper pageHelper = baseQueryObject.getPageHelper();
        if (pageHelper == null){
            pageHelper = new PageHelper(-1);
        }
        String domainValue = conditionMap.get(DOMAIN);
        VciBaseUtil.alertNotNull(domainValue,"领域值");
        conditionMap.remove(DOMAIN);
        LinkType queryObj = new LinkType();
        BeanMap.create(queryObj).putAll(conditionMap);
        List<LinkType> doList = linkTypeService.list(Condition.getQueryWrapper(queryObj).lambda().eq(LinkType::getDomain, domainValue).orderByAsc(LinkType::getId));
        return R.data(LinkTypeWrapper.build().listEntityVO(doList,null));
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢å¯¹è±¡
     *
     * @param ids å¯¹è±¡è‹±æ–‡åç§° ä½†æ˜¯ä¸èƒ½è¶…过1000
     * @return ä¸šåŠ¡å¯¹è±¡
     */
    @Override
    public R<List<LinkTypeVO>> selectByIdCollection(List<String> ids) {
        Func.requireNotNull(ids,"链接类型英文名称");
        List<LinkTypeVO> voList = LinkTypeWrapper.build().listEntityVO(
            Optional.ofNullable(linkTypeService.list(
                    Wrappers.<LinkType>query().lambda().in(LinkType::getId, ids)
                )
            ).orElseGet(ArrayList::new),null
        );
        return R.data(voList);
    }
    /**
     * æ‰¹é‡æ ¹æ®ä¸»é”®èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param pkLinkTypeCollection é“¾æŽ¥ç±»åž‹ä¸»é”®é›†åˆ
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     */
    @Override
    public R<List<LinkTypeVO>> listLinkTypeByOidCollection(List<String> pkLinkTypeCollection) {
        Func.requireNotNull(pkLinkTypeCollection,"链接类型主键");
        List<LinkTypeVO> voList = LinkTypeWrapper.build().listEntityVO(
            Optional.ofNullable(linkTypeService.list(
                    Wrappers.<LinkType>query().lambda().in(LinkType::getOid, pkLinkTypeCollection)
                )
            ).orElseGet(ArrayList::new),null
        );
        return R.data(voList);
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œåªæœ‰é»˜è®¤å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹ID
     * @return é»˜è®¤å­—段属性
     */
    @Override
    public R<LinkTypeVO> getDefaultAttrByLinkId(String linkTypeId) {
        return R.data(linkTypeService.getLinkTypeDefaultAttrById(linkTypeId));
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹id
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public R<LinkTypeVO> getAllAttributeByLinkId(String linkTypeId) {
        return R.data(linkTypeService.getLinkTypeAllAttrById(linkTypeId));
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeOid é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public R<LinkTypeVO> getAllAttributeByLinkOid(String linkTypeOid) {
        return R.data(linkTypeService.getLinkTypeAllAttrByOid(linkTypeOid));
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeService.java
@@ -8,6 +8,7 @@
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import org.springblade.core.mp.base.BaseService;
import java.util.Collection;
import java.util.List;
@@ -20,7 +21,7 @@
 * @author LiHang
 * @date 2023/5/24
 */
public interface ILinkTypeService extends IService<LinkType> {
public interface ILinkTypeService extends BaseService<LinkType> {
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹åˆ—è¡¨
@@ -209,4 +210,28 @@
     * @return æŸ¥è¯¢ç»“æžœ
     */
    List<BtmTreeVO> treeDomain();
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œåªæœ‰é»˜è®¤å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹id
     * @return é»˜è®¤å­—段属性
     */
    LinkTypeVO getLinkTypeDefaultAttrById(String linkTypeId);
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹id
     * @return æ‰€æœ‰å­—段
     */
    LinkTypeVO getLinkTypeAllAttrById(String linkTypeId);
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeOid é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return æ‰€æœ‰å­—段
     */
    LinkTypeVO getLinkTypeAllAttrByOid(String linkTypeOid);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
@@ -45,6 +45,7 @@
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotEmpty;
import java.util.*;
import java.util.stream.Collectors;
@@ -901,4 +902,56 @@
            throw new RuntimeException(e);
        }
    }
    @Override
    public boolean deleteLogic(@NotEmpty List<Long> ids) {
        return false;
    }
    @Override
    public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
        return false;
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œåªæœ‰é»˜è®¤å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹id
     * @return é»˜è®¤å­—段属性
     */
    @Override
    public LinkTypeVO getLinkTypeDefaultAttrById(String linkTypeId) {
        LinkTypeVO vo = getLinkTypeById(linkTypeId);
        List<LinkTypeAttributeVO> attributes = linkTypeAttributeService.getDefaultAttributes(vo);
        vo.setAttributes(attributes);
        return vo;
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeId é“¾æŽ¥ç±»åž‹id
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public LinkTypeVO getLinkTypeAllAttrById(String linkTypeId) {
        LinkTypeVO vo = getLinkTypeById(linkTypeId);
        List<LinkTypeAttributeVO> attributes = linkTypeAttributeService.getAllAttributes(vo);
        vo.setAttributes(attributes);
        return vo;
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹ï¼Œæœ‰æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeOid é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return æ‰€æœ‰å­—段
     */
    @Override
    public LinkTypeVO getLinkTypeAllAttrByOid(String linkTypeOid) {
        LinkTypeVO vo = getLinkTypeByOid(linkTypeOid);
        List<LinkTypeAttributeVO> attributes = linkTypeAttributeService.getAllAttributes(vo);
        vo.setAttributes(attributes);
        return vo;
    }
}
Source/¸ü¸Ä¹ýµÄjar°ü£¨ÓиüУ©.zip
Binary files differ