ludc
2023-05-04 7ff176bf622d6a4bad0fb2bdf92f11a79f0dd24a
增加弹窗界面,整合代码
已修改20个文件
已删除1个文件
已添加4个文件
3362 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/code/codeClassifyValue.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/code/codebasic.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue 705 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/cloneOption.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/codebasic.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/mdmrule.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/referBtmDialog.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/addbasiccode.vue 615 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/clonecode.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 1634 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/code/codeClassifyValue.js
@@ -6,7 +6,38 @@
    method: 'get',
    params: {
      ...params,
    }
  })
}
export const addSaveCodeClassifyValue = (codeFixedValueDTO) => {
  return request({
    url: '/api/ubcs-code/codeClassifyValueController/addSave',
    method: 'post',
    data: codeFixedValueDTO
  })
}
export const editCodeClassifyValue = (codeFixedValueDTO) => {
  return request({
    url: '/api/ubcs-code/codeClassifyValueController/editSave',
    method: 'put',
    data: codeFixedValueDTO,
  })
}
export const deleteCodeClassifyValue = (codeFixedValueDTO) => {
  return request({
    url: '/api/ubcs-code/codeClassifyValueController/deleteData',
    method: 'delete',
    data: codeFixedValueDTO,
  })
}
export const saveCodeClassifyValueOrder = (data) => {
  return request({
    url: '/api/ubcs-code/codeClassifyValueController/saveOrder',
    method: 'post',
    data: data,
  })
}
Source/UBCS-WEB/src/api/code/codebasic.js
@@ -80,7 +80,7 @@
    })
}
export const clone = (row) => {
export const cloneCodeBasic = (row) => {
    return request({
      url: '/api/ubcs-code/codeBasicSecController/clone',
      method: 'post',
Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,705 @@
<template>
  <!-- ç¬¬äºŒå±‚对话框,属性码段,公式编辑框弹窗 -->
  <el-dialog
    title="公式编辑框"
    append-to-body
    :visible.sync="isShowformulaEdit"
    @close="closeFormulaEdit"
    width="78%"
    style="height: 150vh; margin-top: -13vh; overflow: hidden">
    <div style="overflow-y: auto; height: 80vh">
      <el-row>
        <!-- å·¦ä¾§å…¬å¼å†…容 -->
        <el-col :span="14" style="overflow: hidden">
          <el-card
            class="box-card"
            style="height: 33vh; overflow-y: auto; overflow-x: auto">
            <div slot="header" class="clearfix">
              <span style="font-size: medium">公式内容</span>
              <el-button
                type="primary"
                size="mini"
                style="float: right"
                @click="saveFormulaContent">
                ç¡®å®š
              </el-button>
              <el-button
                type="warning"
                size="mini"
                style="margin-right: 10px; float: right"
                @click="resetFormulaContent">
                æ¸…空内容
              </el-button>
            </div>
            <div class="text item">
              <el-input
                type="textarea"
                :rows="5"
                style="width: 560px"
                v-model="formulaContent"
              ></el-input>
            </div>
          </el-card>
        </el-col>
        <!-- å³ä¾§è¿ç®—符 -->
        <el-col :span="10">
          <el-card
            class="box-card"
            style="height: 33vh;">
            <div slot="header" class="clearfix">
              <span style="font-size: medium">运算符</span>
            </div>
            <div class="text item">
              <div class="formula-editor">
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '7' })"
                  >
                    7
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '8' })"
                  >
                    8
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '9' })"
                  >
                    9
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '/' })"
                  >
                    /</button
                  ><br />
                </div>
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '4' })"
                  >
                    4
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '5' })"
                  >
                    5
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '6' })"
                  >
                    6
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '*' })"
                  >
                    *</button
                  ><br />
                </div>
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '1' })"
                  >
                    1
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '2' })"
                  >
                    2
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '3' })"
                  >
                    3
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '>' })"
                  >
                    -</button
                  ><br />
                </div>
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '0' })"
                  >
                    0
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '00' })"
                  >
                    00
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '.' })"
                  >
                    .
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '+' })"
                  >
                    +</button
                  ><br />
                </div>
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '->' })"
                  >
                    ->
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '==' })"
                  >
                    ==
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '(' })"
                  >
                    (
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: ')' })"
                  >
                    )</button
                  ><br />
                </div>
                <div class="one">
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '<' })"
                  >
                    &lt;
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '>' })"
                  >
                    &gt;
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '<=' })"
                  >
                    &lt;=
                  </button>
                  <button
                    class="formula-editor-btn-sm"
                    @click="dbClickAddContent({ formula: '>=' })"
                  >
                    &gt;=
                  </button>
                </div>
              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
      <el-row>
        <!-- å·¦ä¾§å…¬å¼é€‰æ‹©åŒºåŸŸ -->
        <el-col :span="14" style="overflow: hidden">
          <el-card
            class="box-card"
            style="height: 40vh; overflow-y: auto; overflow-x: auto"
          >
            <div slot="header" class="clearfix">
              <span style="font-size: medium">公式选择</span>
            </div>
            <div class="text item">
              <el-tabs v-model="activeName">
                <el-tab-pane label="常用" name="first">
                  <el-table
                    :data="commonFormulaTableData"
                    :show-header="false"
                    @row-dblclick="dbClickAddContent"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="300">
                    </el-table-column>
                    <el-table-column prop="desc" width="300"> </el-table-column>
                  </el-table>
                </el-tab-pane>
                <el-tab-pane label="财务" name="second">
                  <el-table
                    :data="financialFormulaTableData"
                    @row-dblclick="dbClickAddContent"
                    :show-header="false"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="300">
                    </el-table-column>
                    <el-table-column prop="desc" width="300"> </el-table-column>
                  </el-table>
                </el-tab-pane>
                <el-tab-pane label="日期" name="third">
                  <el-table
                    :data="dateFormulaTableData"
                    :show-header="false"
                    @row-dblclick="dbClickAddContent"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="300">
                    </el-table-column>
                    <el-table-column prop="desc" width="300"> </el-table-column>
                  </el-table>
                </el-tab-pane>
                <el-tab-pane label="数学" name="fourth">
                  <el-table
                    :data="mathFormulaTableData"
                    :show-header="false"
                    @row-dblclick="dbClickAddContent"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="300">
                    </el-table-column>
                    <el-table-column prop="desc" width="300"> </el-table-column>
                  </el-table>
                </el-tab-pane>
                <el-tab-pane label="其他" name="five">
                  <el-table
                    :data="otherFormulaTableData"
                    @row-dblclick="dbClickAddContent"
                    :show-header="false"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="300">
                    </el-table-column>
                    <el-table-column prop="desc" width="300"> </el-table-column>
                  </el-table>
                </el-tab-pane>
              </el-tabs>
            </div>
          </el-card>
        </el-col>
        <!-- å³ä¾§å˜é‡é€‰æ‹©åŒºåŸŸ -->
        <el-col :span="10" style="overflow: hidden">
          <el-card
            class="box-card"
            style="height: 40vh; overflow-y: auto; overflow-x: auto"
          >
            <div slot="header" class="clearfix">
              <span style="font-size: medium">变量</span>
            </div>
            <div class="text item">
              <el-tabs v-model="activeNameAttr">
                <el-tab-pane label="本场景变量" name="first">
                  <el-table
                    :data="thisSceneTableData"
                    @row-dblclick="dbClickAddContent"
                    :show-header="false"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="40">
                    </el-table-column>
                    <el-table-column prop="desc" width="100"> </el-table-column>
                  </el-table>
                </el-tab-pane>
                <el-tab-pane label="系统变量" name="second">
                  <el-table
                    :data="systemVariableTableData"
                    @row-dblclick="dbClickAddContent"
                    :show-header="false"
                    style="width: 100%"
                  >
                    <el-table-column prop="formula" width="150">
                    </el-table-column>
                    <el-table-column prop="desc" width="150"> </el-table-column>
                  </el-table>
                </el-tab-pane>
              </el-tabs>
            </div>
          </el-card>
        </el-col>
      </el-row>
    </div>
  </el-dialog>
</template>
  <script>
export default {
  name: "formulaEditor",
  props: {
    //本场景变量
    thisSceneTableData: {
      type: Array,
    },
     //系统变量
    systemVariableTableData: {
      type: Array,
    },
  },
  data() {
    return {
      isShowformulaEdit: false, //公式编辑框对话框显示控制
      formulaContent: '', //公式编辑框内容,方便值的回传
      activeName: 'first', //当前活动的tab
      activeNameAttr: 'first', //变量中的当前活动tab
      //常用公式
      commonFormulaTableData: [
      {
          formula: "if(compare,trueResult,falseResult)",
          desc: "如果compare的表达式为true,则执行trueResult的表达式,否则执行flaseResult.例如if(3>2,2*(3+2),3/(2-4)),值等于10",
      },
      {
          formula: "sum(douber1,douber2)",
          desc: "两个格式为douber的参数求和",
      },
      {
          formula: "sub(douber1,douber2)",
          desc: "格式为douber的参数douber1减去格式为douber的参数douber2",
      },
      {
          formula: "mul(douber1,douber2)",
          desc: "两个格式为douber的参数相乘",
      },
      {
          formula: "div(douber1,douber2)",
          desc: "格式为douber的参数douber1除以格式为douber的参数douber2.当douber2等于0的时候,返回0;如果除不尽的时候保留10位小数",
      },
      {
          formula: "mod(int,int)",
          desc: "求余数",
      },
      {
          formula: "toInt(string)",
          desc: "转换为int格式",
      },
      {
          formula: "doubleRound(string,count)",
          desc: "处理douber的小数位数,count表示小数位数",
      },
      {
          formula: "zeroIfNull(value)",
          desc: '如果参数的值为null或者"",将返回0',
      },
      {
          formula: "endsWith(string,str1)",
          desc: "字符串string是不是以str1结尾",
      },
      {
          formula: "startsWith(string,str1)",
          desc: "字符串string是否以str1开头",
      },
      {
          formula: "charAt(string,index)",
          desc: "获取字符串string中第index位置的字符,如果长度小于index,则返回",
      },
      {
          formula: "equalsIgnoreCase(str1,str2)",
          desc: "字符串str1和字符串str2是否相等",
      },
      {
          formula: "indexOf(str1,str2)",
          desc: "字符串str2在字符串str1中首次出现的位置",
      },
      {
          formula: "isEmpty(str1)",
          desc: "参数str1是否为空,其中null这个字符串也表示为空",
      },
      {
          formula: "lastIndexOf(str1,str2)",
          desc: "字符串str2在字符串str1中最后出现的位置",
      },
      {
          formula: "leftStr(str1,index)",
          desc: "获取index位置左侧的所有字符",
      },
      {
          formula: "rightStr(str1,str2)",
          desc: "获取index位置右侧的所有字符",
      },
      {
          formula: "length(str1)",
          desc: "参数str1的长度",
      },
      {
          formula: "mid(str1,start,end)",
          desc: "获取str1的从start到end直接的字符串,出现异常时返回",
      },
      {
          formula: "tolowercase(str1)",
          desc: "将字符串str1转为小写",
      },
      {
          formula: "touppercase(str1)",
          desc: "将字符串str1转为大写",
      },
      {
          formula: "trimzero(str1)",
          desc: "去除字符串str1中的0",
      },
      {
          formula: "MD5(str1)",
          desc: "将字符串进行MD5加密",
      },
      ],
      //财务公式
      financialFormulaTableData: [
      {
          formula: "toChinese(value)",
          desc: "将阿拉伯数字转为为汉字大写方式",
      },
      {
          formula: "getChineseCurrency(value)",
          desc: "将阿拉伯数字转为为汉字金额大写方式,与tochiness的区别是这个会显示元、角、分",
      },
      {
          formula: "setThmark(value)",
          desc: "为参数value设置千分位",
      },
      ],
      //日期公式
      dateFormulaTableData: [
      {
          formula: "compareDate(d1,d2)",
          desc: "对比参数d1,d2的大小。d1,d2为yyyy-MM-dd格式的日期字符串",
      },
      {
          formula: "nowDate()",
          desc: "获取当前日期",
      },
      {
          formula: "chinaDate(d1)",
          desc: "将时间转换为农历,d1是yyyy-MM-dd格式的日期字符串",
      },
      {
          formula: "dateAdd(d1,count)",
          desc: "在d1的基础上添加count天,d1为yyyy-MM-dd HH:mm:ss格式的时间字符串",
      },
      {
          formula: "dateBalanceYear(sourceDate,targetDate,false)",
          desc: '计算相差的年份,比如计算年龄,targetDate为""表示当前时间,第三个参数为true表示有多余的月份或者天数时,就加1;',
      },
      {
          formula: "dateBalanceDay(sourceDate,targetDate)",
          desc: '计算相差的天数,targetDate为""表示当前时间',
      },
      {
          formula: "dateformat(d1,format)<",
          desc: "将当前的日期(时间)字符串转为指定的字符串,如果format的内容有空格,请使用&代替",
      },
      {
          formula: "nowDatetime()",
          desc: "获取当前日期和时间。格式为yyyy-MM-dd HH:mm:ss",
      },
      {
          formula: "dayOf(d1)",
          desc: "获取格式为yyyy-MM-dd的日期的天数",
      },
      {
          formula: "nowMon()",
          desc: "获取当前的月份,格式为MM",
      },
      {
          formula: "monOf(d1)",
          desc: "获取日期d1的月份数",
      },
      {
          formula: "nowTime()",
          desc: "获取当前时间,格式为HH:mm:ss",
      },
      {
          formula: "nowYear()",
          desc: "获取年份,格式为yyyy",
      },
      {
          formula: "yearOf()",
          desc: "获取时间d1的年份",
      },
      ],
      //数学公式
      mathFormulaTableData: [
      {
          formula: "abs(value)",
          desc: "求参数value的绝对值,value必须为数字格式",
      },
      {
          formula: "acos(value)",
          desc: "求参数value的反余弦,value必须为数字格式",
      },
      {
          formula: "asin(value)",
          desc: "求参数value的反正弦,value必须为数字格式",
      },
      {
          formula: "atan(value)",
          desc: "求参数value的反正切,value必须为数字格式",
      },
      {
          formula: "cbrt(value)",
          desc: "求参数value的立方根,value必须为数字格式",
      },
      {
          formula: "ceil(value)",
          desc: "返回不大于参数value的最小整数,例如ceil(1.7)就等于2,value必须为数字格式",
      },
      {
          formula: "cos(value)",
          desc: "求参数value的余弦值,value必须为数字格式",
      },
      {
          formula: "cosh(value)",
          desc: "求参数value的双曲余弦值,value必须为数字格式",
      },
      {
          formula: "exp(n)",
          desc: "欧拉数 e çš„n次幂,n必须为数字格式",
      },
      {
          formula: "floor(n)",
          desc: "欧拉数 e çš„n次幂减1,n必须为数字格式",
      },
      {
          formula: "log(value)",
          desc: "返回不小于参数value的最大整数,例如floor(1.7)等于1,n必须为数字格式",
      },
      {
          formula: "log10(value)",
          desc: "自然对数,value必须为数字格式",
      },
      {
          formula: "log1p(value)",
          desc: "计算底数为 10 çš„对数,value必须为数字格式",
      },
      {
          formula: "random()",
          desc: "返回参数与 1 ä¹‹å’Œçš„自然对数,value必须为数字格式",
      },
      {
          formula: "rint(value)",
          desc: "返回一个伪随机数,该值大于等于 0.0 ä¸”小于 1.0",
      },
      {
          formula: "round(value)",
          desc: "返回其值最接近参数并且是整数的 double å€¼ã€‚如果两个整数的 double å€¼éƒ½åŒæ ·æŽ¥è¿‘,那么结果取偶数。特殊情况是:如果参数值是整数,那么结果就是该参数。如果参数是 NaN æˆ–无穷大或正零或负零,那么结果与参数相同",
      },
      {
          formula: "signum(value)",
          desc: "符号函数;如果参数为 0,则返回 0;如果参数大于 0, åˆ™è¿”回 1.0;如果参数小于 0,则返回 -1.0",
      },
      {
          formula: "sin(value)",
          desc: "求参数value的正弦值,value必须为数字格式",
      },
      {
          formula: "sinh(value)",
          desc: "求参数value的双曲正弦值,value必须为数字格式",
      },
      {
          formula: "tan(value)",
          desc: "求参数value的正切值,value必须为数字格式",
      },
      {
          formula: "tanh(value)",
          desc: "求参数value的双曲正切值,value必须为数字格式",
      },
      {
          formula: "max(v1,v2)",
          desc: "求两个数中的较大的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3.2",
      },
      {
          formula: "min(v1,v2)",
          desc: "求两个数中的较小的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3",
      },
      {
          formula: "sqrt(value)",
          desc: "求平方根",
      },
      ],
      //其他公式
      otherFormulaTableData: [
      {
          formula: "getcolvalue(servername,tablename,fieldname,pkField,pkValue)",
          desc: "查询servername中tablename数据库表中fieldname字段的值,pkfield表示主键的字段名称,pkValue表示主键的值,serverName现在默认为localServer",
      },
      ],
    };
  },
  methods: {
    //双击添加公式内容
    dbClickAddContent(row){
      //console.log(row.formula);
      this.formulaContent = this.formulaContent + row.formula;
    },
    //清空公式内容
    resetFormulaContent(){
      this.formulaContent = '';
    },
    //关闭时清空上次公式内容
    closeFormulaEdit(){
      this.resetFormulaContent();
    },
    //编辑完成公式内容回显并关闭对话框
    saveFormulaContent(){
      //console.log(this.formulaContent);
      if(this.formulaContent.trim == null || this.formulaContent.trim == ''){
          this.$message.warning("公式内容不能为空!");
          return;
      }
      //公式内容回显
      this.$emit('updateFormulaContent', this.formulaContent) // è§¦å‘update:data将子组件值传递给父组件
      this.isShowformulaEdit = false;
    },
  },
};
</script>
<style scoped>
  .formula-editor{
    margin-top: -15px;
    margin-left: 4vw;
    /*设置弹性盒子*/
    display: flex;
    /*子元素以竖列排列,一共有6列*/
    flex-direction:column;
    width: 310px;
    height: 185px;
    /*左右均匀排列*/
    justify-content: space-around;
    /*上下均匀排列*/
    align-items: center;
  }
  .one{
    display: flex;
    /*以行排列*/
    flex-direction: row;
    width: 223px;
    height: 80px;
    justify-content: space-between;
    align-items: center;
    }
  .formula-editor-btn-sm {
    width: 55px;
    height: 29px;
    background: rgb(153, 214, 240);
    border-radius: 10%;
  }
</style>
Source/UBCS-WEB/src/const/code/classifyTreeOptionDialog.js
@@ -6,7 +6,7 @@
    lazy: true,
    treeLoad: function (node, resolve) {
      // const parentId = (node.level === 0) ? 0 : node.data.id;
      treeTopCodeClassify({"queryAllLevel": true,"loadType": "all","multipleSelect": false,}).then( res=> {
      treeTopCodeClassify({"queryAllLevel": true,"loadType": "all","multipleSelect": false}).then( res=> {
        resolve(res.data.map(classifyitem => {
          let item = {
            "hasChildren": false,
Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
@@ -1,43 +1,41 @@
import { treeCodeClassifyValue } from "@/api/code/codeClassifyValue";
export default {
    nodeKey: 'oid',
    border: true,
    lazy: true,
    lazy: false,
    defaultExpandAll: true,
    treeLoad: function (node, resolve) {
      // const parentId = (node.level === 0) ? 0 : node.data.id;
      let condtionData = {
        "queryAllLevel": true,
        "loadType": "all",
        "multipleSelect": false,
        "isMuti": false,
        "isQueryAllColumn": true,
        'conditionMap[codeclassifysecoid]':this.currentSelectTreeData.oid}
      treeCodeClassifyValue().then( res=> {
        console.log(res);
        resolve(res.data.map(classifyitem => {
          let item = {
            "hasChildren": false,
            "oid": classifyitem.oid,
            "key": classifyitem.oid,
            "parentId": 0,
            "title": classifyitem.text,
            "value": classifyitem.oid,
          }
          return {
            ...item,
            leaf: !item.hasChildren
          }
        }))
      });
      // treeCodeClassifyValue(condtionData).then( res=> {
      //   console.log(res);
      //   resolve(res.data.map(classifyValueItem => {
      //     let item = {
      //       "hasChildren": item.children!=null,
      //       "oid": classifyValueItem.oid,
      //       "key": classifyValueItem.oid,
      //       "parentId": classifyValueItem.parentclassifyvalueoid,
      //       "title": classifyValueItem.text,
      //       "value": classifyValueItem.oid,
      //     }
      //     return {
      //       ...item,
      //       leaf: item.hasChildren
      //     }
      //   }))
      // });
    },
    addBtn: false,
    menu: false,
    size: 'small',
    props: {
      labelText: '标题',
      label: 'title',
      value: 'value',
      labelText: 'text',
      label: 'text',
      key: 'oid',
      value: 'oid',
      parentId: 'parentId',
      parentBtmName: 'parentBtmName',
      parentName: 'parentName',
      codeclassifysecoid: 'codeclassifysecoid',
      children: 'children'
    }
}
Source/UBCS-WEB/src/const/code/cloneBasicDialogOption.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
export default {
    height:"190px",
    calcHeight: 30,
    tip: false,
    editBtn: false,
    addBtn: false,
    delBtn: false,
    searchShow: false,
    searchBtn: false,
    searchMenuSpan: 5,
    disablePage: false,
    border: true,
    index: true,
    viewBtn: false,
    selection: true,
    menu: false,
    refreshBtn: false,
    columnBtn: false,
    dialogClickModal: false,
    highlightCurrentRow: true, //行选中时高亮
    column: [
      {
        label: "码段编号",
        prop: "id",
        search: false,
        searchLabelWidth: 80,
        searchSpan: 5,
      },
      {
        label: "码段名称",
        prop: "name",
        search: false,
        searchLabelWidth: 80,
        searchSpan: 5,
      },
      {
        label: "码段描述",
        prop: "description",
        search: false,
        span: 24,
      },
      {
        label: "码段类型",
        prop: "secTypeText",
      }
    ]
}
Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
export default {
    height:"210px",
    calcHeight: 30,
    tip: false,
    editBtn: false,
    addBtn: false,
    delBtn: false,
    searchShow: false,
    searchMenuSpan: 5,
    disablePage: true,
    border: true,
    index: true,
    viewBtn: false,
    selection: true,
    menu: false,
    refreshBtn: false,
    columnBtn: false,
    dialogClickModal: false,
    highlightCurrentRow: true, //行选中时高亮
    column: [
      {
        label: "编号",
        prop: "id",
        search: false,
      },
      {
        label: "名称",
        prop: "name",
        search: false,
      },
      {
        label: "描述",
        prop: "description",
        search: false,
        type: "textarea",
        span: 24,
      },
      {
        label: "状态",
        prop: "lcStatusText",
        search: false,
      },
    ]
  }
Source/UBCS-WEB/src/const/code/cloneOption.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
export default {
    height:'350px',
    calcHeight: 30,
    tip: false,
    editBtn: false,
    addBtn: false,
    delBtn: false,
    searchShow: false,
    searchMenuSpan: 5,
    disablePage: false,
    border: true,
    index: true,
    viewBtn: false,
    selection: false,
    menu:true,
    refreshBtn: false,
    columnBtn: false,
    dialogClickModal: false,
    highlightCurrentRow: true, //行选中时高亮
    column: [
      {
        label: "码段编号",
        prop: "id",
        search: false,
        searchLabelWidth: 80,
        searchSpan: 5,
      },
      {
        label: "码段名称",
        prop: "name",
        search: false,
        searchLabelWidth: 80,
        searchSpan: 5,
      },
      {
        label: "码段描述",
        prop: "description",
        search: false,
        span: 24,
      },
      {
        label: "码段类型",
        prop: "secTypeText",
        search: false,
      }
    ]
}
Source/UBCS-WEB/src/const/code/codebasic.js
@@ -1,6 +1,5 @@
export default {
    height:'auto',
    with: '60%',
    calcHeight: 30,
    tip: false,
    editBtn: false,
@@ -12,6 +11,7 @@
    index: true,
    viewBtn: false,
    selection: true,
    menuWidth:260,
    dialogClickModal: false,
    highlightCurrentRow: true, //行选中时高亮
    column: [
@@ -21,11 +21,6 @@
        search: true,
        searchLabelWidth: 80,
        searchSpan: 5,
        rules: [{
          required: true,
          message: "请输入码段编码",
          trigger: "blur",
        }]
      },
      {
        label: "码段名称",
@@ -33,34 +28,16 @@
        search: true,
        searchLabelWidth: 80,
        searchSpan: 5,
        rules: [{
          required: true,
          message: "请输入码段名称",
          trigger: "blur"
        }]
      },
      {
        label: "码段描述",
        prop: "description",
        search: false,
        type: "textarea",
        span: 24,
        rules: [{
            required: false,
            message: "请输入码段名称",
            trigger: "blur"
        }]
      },
      {
        label: "码段类型",
        prop: "secTypeText",
        search: false,
        type: "select",
        rules: [{
          required: true,
          message: "请选择码段类型",
          trigger: "blur"
        }],
      }
    ]
Source/UBCS-WEB/src/const/code/fixedValueMgrDialog.js
@@ -1,6 +1,6 @@
export default {
    with: '70%',
    height: '55vh',
    //width: '70%',
    height: '60vh',
    calcHeight: 30,
    tip: false,
    editBtn: false,
Source/UBCS-WEB/src/const/code/mdmrule.js
@@ -1,5 +1,5 @@
export default {
  height:"200px",
  height:"220px",
  calcHeight: 30,
  tip: false,
  editBtn:false,
Source/UBCS-WEB/src/const/code/parentClassifyParentOptionDialog.js
@@ -1,5 +1,4 @@
export default {
    with: '60%',
    height: '40vh',
    calcHeight: 30,
    tip: false,
Source/UBCS-WEB/src/const/code/referBtmDialog.js
@@ -1,5 +1,4 @@
export default {
    with: '60%',
    height: '40vh',
    calcHeight: 30,
    tip: false,
Source/UBCS-WEB/src/const/code/selectAttrOptionDialog.js
@@ -1,5 +1,4 @@
export default {
    with: '60%',
    calcHeight: 30,
    tip: false,
    editBtn: false,
Source/UBCS-WEB/src/main.js
@@ -32,10 +32,11 @@
import Torelationpackage from "@/views/modeling/Torelationpackage"
import originalRange from "@/views/modeling/originalRange"
import originalLink from "@/views/modeling/originalLink"
import addBasicCode from './views/code/addbasiccode';
import classifyTrees from "@/components/Tree/classifyTrees"
import classifyTreeform from "@/components/Tree/classifyTreeform"
import TemplatePro from "@/components/Tree/TemplatePro"
import formulaEditor from "@/components/code-dialog-page/formulaEditor"
// æ³¨å†Œå…¨å±€crud驱动
window.$crudCommon = crudCommon;
// åŠ è½½Vue拓展
@@ -64,10 +65,10 @@
Vue.component('Torelationpackage',Torelationpackage)
Vue.component('originalRange',originalRange)
Vue.component('originalLink',originalLink)
Vue.component('addBasicCode',addBasicCode)
Vue.component('classifyTrees',classifyTrees)
Vue.component('classifyTreeform',classifyTreeform)
Vue.component('TemplatePro',TemplatePro)
Vue.component('formulaEditor',formulaEditor)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/views/code/addbasiccode.vue
ÎļþÒÑɾ³ý
Source/UBCS-WEB/src/views/code/clonecode.vue
@@ -1,5 +1,6 @@
<template>
    <avue-crud :option="option"
    <avue-crud
      :option="option"
               :table-loading="loading"
               :data="data"
               :permission="permissionList"
Source/UBCS-WEB/src/views/code/code.vue
@@ -2,9 +2,10 @@
  <basic-container style="height: 350px;">
    <!-- ç¼–码规则信息展示区域 -->
    <basic-container>
      <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">编码规则</p>
      <avue-crud :option="optionRule"
    <basic-container class="code-rule-container">
      <p style="margin-top: -5px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">编码规则</p>
      <avue-crud class="code-rule-crud"
        :option="optionRule"
        :table-loading="loading"
        :data="data"
        :page.sync="page"
@@ -64,13 +65,13 @@
          <el-button size="small"
                    icon="icon-kelong"
                    plain
                    @click="cloneCodeSetting">克 éš†
                    @click="openCodeRuleDialog">克 éš†
          </el-button>
          <el-button size="small"
                    icon="icon-lianjiekelong"
                    style="font-size: 12px;"
                    plain
                    @click="handleDelete">从其他规则中克隆码段
                    @click="openOtherCodeRuleDialog">从其他规则中克隆码段
          </el-button>
          <el-button size="small"
                    icon="el-icon-s-help"
@@ -80,7 +81,7 @@
          <el-button size="small"
                    icon="icon-qingkong"
                    plain
                    @click="handleDelete">清空码值
                    @click="clearAllCodeSec">清空码值
          </el-button>
        </template>
      </avue-crud>
@@ -90,7 +91,8 @@
    <el-dialog title="编码规则使用范围"
        append-to-body
        :visible.sync="codeRangeSettingBox"
        width="800px">
      width="800px"
        style="height: 116vh; margin-top: -10vh;">
      <avue-crud
        :option="dialogeOption" 
        :table-loading="dialogLoading"
@@ -98,18 +100,105 @@
        @refresh-change="refreshUseRangeChange">
      </avue-crud>
    </el-dialog>
    <!--  ç¼–码规则相关克隆对话框 -->
    <!-- ç¼–码规则,克隆对话框 -->
    <el-dialog title="克隆编码规则"
      append-to-body
      :visible.sync="cloneSettingBox"
      width="800px">
      <clone-code></clone-code>
      width="800px"
      style="height: 120vh; margin-top: -14vh; overflow: hidden;">
      <div style="overflow-y: auto; height: 78vh">
        <el-row>
          <el-form ref="form" :model="form" label-width="80px" :inline="true">
            <el-form-item label="编号" required>
              <el-input v-model="cloneCodeRuleForm.id"></el-input>
            </el-form-item>
            <el-form-item label="名称" required>
              <el-input v-model="cloneCodeRuleForm.name"></el-input>
            </el-form-item>
            <el-form-item  label="描述" class="clone-input-textarea">
              <el-input :autosize="{ minRows: 3, maxRows: 5}" type="textarea" v-model="cloneCodeRuleForm.description"></el-input>
            </el-form-item>
          </el-form>
        </el-row>
        <el-row>
          <p style="margin: -3vh 0px 16px 50%; font-weight: 500; font-size: 16px; color: #000;">码段管理</p>
          <avue-crud
            class="clone-avue-crud"
            :option="cloneOption"
            :table-loading="cloneTableLoading"
            :data="cloneData"
            @on-load="cloneDataOnLoad">
            <template slot="menu" slot-scope="scope">
              <el-button
                type="text"
                size="small"
                icon="el-icon-arrow-up"
                v-show="scope.row.orderNum > 1"
                plain
                @click="upOrderNum(scope.row)">上移
              </el-button>
              <el-button
                type="text"
                size="small"
                icon="el-icon-arrow-down"
                plain
                @click="downOrderNum(scope.row)">下移
              </el-button>
            </template>
          </avue-crud>
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer" style="height: 50px; margin-top: -4vh;">
        <el-button @click="cloneSettingBox = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="saveCloneCodeRule">保 å­˜</el-button>
      </div>
    </el-dialog>
    <!-- ç¼–码规则,从其他规则克隆对话框 -->
    <el-dialog title="克隆编码规则的基础信息"
      append-to-body
      :visible.sync="cloneOtherCodeRuleSettingBox"
      width="800px"
      style="height: 150vh; margin-top: -14vh;"
      destroy-on-close>
      <div>
        <el-row>
          <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">编码规则</p>
          <avue-crud
            class="other-clone-coderule-crud"
            :option="cloneCodeRuleOption"
            @row-click="codeOtherCloneRuleRowClick"
            :table-loading="loading"
            :data="data"
            :page.sync="page"
            ref="crudCloneCodeRuleOther"
            @size-change="sizeChange"
            @selection-change="selectionOtherCloneCodeRuleChange"
            @on-load="onLoad">
          </avue-crud>
        </el-row>
        <el-row>
          <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">码段信息</p>
          <avue-crud
            class="other-clone-codebasic-crud"
            :option="cloneBasicOption"
            ref="crudCloneCodeBasicOther"
            :table-loading="loadingBasic"
            :data="basicData"
            @selection-change="selectionOtherCloneCodeBasicChange">
          </avue-crud>
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer" style="height: 50px; margin-top: -4vh;">
        <el-button @click="cloneOtherCodeRuleSettingBox = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="saveOtherCodeBasic">保 å­˜</el-button>
      </div>
    </el-dialog>
    <!-- åŸºç¡€ç æ®µå±•示区域 -->
    <basic-container>
      <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">码段管理</p>
      <avue-crud :option="optionBasic"
    <basic-container class="code-basicsec-container">
      <p style="margin-top: -5px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">码段管理</p>
      <avue-crud  class="code-basic-crud"
        :option="optionBasic"
        ref="crudBasic"
        :table-loading="loadingBasic"
        :data="basicData"
@@ -190,22 +279,22 @@
        <el-row v-show="!isShowFixedForm">
          <el-col :span="11">
            <basic-container>
              <div class="box" style="height:65vh; margin-bottom:-40px">
            <div class="box classify_value_box" style="height:65vh; margin-bottom:-40px">
                <el-scrollbar style="border-bottom-right-radius:8px ">
                  <basic-container>
                    <div class="abox" style="height:54vh">
                      <avue-tree
                        :data="attrClassifyTreeData"
                        :option="treeOption"
                        @node-click="nodeClick"
                      :data="classifyValueTreeData"
                      :option="classisyValueTreeOption"
                      @node-click="classisyValueTreeOnodeClick"
                        style="overflow-y: auto; height: 54vh"/>
                    </div>
                  </basic-container>
                </el-scrollbar>
              </div>
              <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
                <el-button size="mini" type="primary" icon="el-icon-arrow-up" class="button">上移</el-button>
                <el-button size="mini" type="primary" icon="el-icon-arrow-down" class="button">下移</el-button>
              <el-button size="mini" type="primary" icon="el-icon-arrow-up" class="button" @click="codeClassifyValueOpetion('up')">上移</el-button>
              <el-button size="mini" type="primary" icon="el-icon-arrow-down" class="button" @click="codeClassifyValueOpetion('down')">下移</el-button>
              </div>
            </basic-container>
          </el-col>
@@ -222,10 +311,10 @@
                </el-form>
              </div>
              <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
                <el-button size="mini" type="primary" icon="el-icon-circle-plus" class="button">添加</el-button>
                <el-button size="mini" type="success" plain icon="el-icon-edit-outline" class="button">修改</el-button>
                <el-button size="mini" type="danger" icon="el-icon-close" class="button">删除</el-button>
                <el-button size="mini" type="warning" plain icon="el-icon-close" class="button">取消</el-button>
              <el-button size="mini" type="primary" icon="el-icon-circle-plus" class="button" @click="addCodeSecValue('codeclassifyvaluesec')">添加</el-button>
              <el-button :disabled="selectedFixedOrCodeclassifyValue==''"  size="mini" type="success" plain icon="el-icon-edit-outline" class="button"  @click="editCodeSecValue('codeclassifyvaluesec')">修改</el-button>
              <el-button :disabled="selectedFixedOrCodeclassifyValue==''"  size="mini" type="danger" icon="el-icon-close" class="button" @click="delCodeSecValue('codeclassifyvaluesec')">删除</el-button>
              <el-button size="mini" type="warning" plain icon="el-icon-close" class="button" @click = "clearFixedOrClassifyForm('codeclassifyvaluesec')">取消</el-button>
              </div>
            </basic-container>
          </el-col>
@@ -236,6 +325,7 @@
            <basic-container>
              <div class="box fixedbox" style="height:65vh; margin-bottom:-40px">
                <avue-crud
                class="fixed-avue-crud"
                  ref="crudFixedValue"
                  :data="fixedValueData"
                  :option="fixedValueOption"
@@ -250,7 +340,7 @@
                </avue-crud>
              </div>
              <div style="margin-top:20px;">
                <el-button size="mini" type="primary" icon="el-icon-success" class="button" @click="saveCodeFixedValueOption">保存</el-button>
              <el-button size="mini" type="primary" icon="el-icon-success" class="button" @click="saveCodeFixedOrClassifyValueOption('fixedValue')">保存</el-button>
              </div>
            </basic-container>
          </el-col>
@@ -288,19 +378,19 @@
        destroy-on-close
        @close="clearBasicAddForm">
        <!--  ç¬¬ä¸€å±‚对话框,添加码段信息对话框中的内容 -->
        <div class="total" style="overflow-y: auto; height: 70vh">
          <el-form :model="form" :rules="formRules" ref="form" >
        <el-form :model="form">
            <span class="left">
              <el-form-item label="码段编号:" :label-width="leftFormLabelWidth" required prop="id">
                <el-input v-model="form.id" :readonly="basicSecOnlyRead"></el-input>
            <el-form-item label="码段编号:" :label-width="leftFormLabelWidth" required>
              <el-input v-model="form.id" :readonly="basicSecOnlyRead" ref="id"></el-input>
              </el-form-item>
              <el-form-item label="码段名称:" :label-width="leftFormLabelWidth" required prop="name">
                <el-input v-model="form.name" :readonly="basicSecOnlyRead"></el-input>
            <el-form-item label="码段名称:" :label-width="leftFormLabelWidth" required>
              <el-input ref="name"  v-model="form.name" :readonly="basicSecOnlyRead"></el-input>
              </el-form-item>
              <el-form-item label="码段类型" :label-width="leftFormLabelWidth" required prop="secType">
            <el-form-item label="码段类型" :label-width="leftFormLabelWidth" required>
                <el-select v-model="form.secType" placeholder="请选择" @change="changeSectypeFormItems(null)" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in sectypeList"
@@ -328,7 +418,7 @@
            <span class="right">
              <!-- å›ºå®šç æ®µ -->
              <div v-show="form.secType==='codefixedsec' ? true:false">
                <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required prop="codeSecLengthType">
              <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                    v-for="item in codeSecLengthType"
@@ -338,17 +428,18 @@
                  </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required prop="codeSecLength">
                  <el-input v-model="form.codeSecLength" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeSecLength" ref="codeSecLength" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
              </div>
              <!-- å±žæ€§ç æ®µ -->
              <div v-show="form.secType==='codeattrsec' ? true:false">
                <el-form-item label="属性:" :label-width="rightFormLabelWidth" required prop="referAttributeName">
              <el-form-item label="属性:" :label-width="rightFormLabelWidth" required>
                  <el-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                  ref="referAttributeId"
                    v-model="form.referAttributeName"
                    @focus="openAttrSelectOrGetValue('attr')"
                    :disabled="basicSecOnlyRead">
@@ -375,16 +466,16 @@
              </div>
              <!-- æµæ°´ç æ®µ -->
              <div v-show="form.secType==='codeserialsec' ? true:false">
                <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required prop="codeSecLength">
                  <el-input v-model="form.codeSecLength" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeSecLength" ref="seriaCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="流水号的起始值:" :label-width="rightFormLabelWidth" prop="serialStart">
                  <el-input v-model="form.serialStart" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="流水号的起始值:" :label-width="rightFormLabelWidth">
                <el-input v-model.number="form.serialStart" ref="serialStart"  :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="流水的步长:" :label-width="rightFormLabelWidth" prop="serialStep">
                  <el-input v-model="form.serialStep" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="流水的步长:" :label-width="rightFormLabelWidth">
                <el-input v-model.number="form.serialStep" ref="serialStep"  :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required prop="codeFillType">
              <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option label="左补位" value="codeattrsec"
                        v-for="item in codeFillType"
@@ -394,8 +485,8 @@
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth" prop="codeFillSeparatorSelect">
                  <el-select v-model="form.codeFillSeparatorSelect" filterable placeholder="请选择" :disabled="basicSecOnlyRead">
              <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                <el-select v-model="form.codeFillSeparatorSelect" @blur="inputSelectBlur" filterable placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeFillSeparator"
                        :key="item.dictValue"
@@ -404,11 +495,11 @@
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="填充长度:" :label-width="rightFormLabelWidth" required prop="codeFillLength">
                  <el-input v-model="form.codeFillLength" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="填充长度:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeFillLength"  ref="codeFillLength" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="流水上限:" :label-width="rightFormLabelWidth" required prop="codeFillLimit">
                  <el-input v-model="form.codeFillLimit" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="流水上限:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeFillLimit" ref="codeFillLimit" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="流水是否补码:" :label-width="rightFormLabelWidth" required>
                  <el-switch v-model="form.codeFillFlag" :disabled="basicSecOnlyRead"></el-switch>
@@ -419,7 +510,7 @@
              </div>
              <!-- å±‚级码段 -->
              <div v-show="form.secType==='codelevelsec' ? true:false">
                <el-form-item label="层级类型:" :label-width="rightFormLabelWidth" required prop="codeLevelType">
              <el-form-item label="层级类型:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.codeLevelType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeLevelType"
@@ -429,10 +520,10 @@
                      </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="层级的值:" :label-width="rightFormLabelWidth" prop="codeLevelValue">
                  <el-input v-model="form.codeLevelValue" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="层级的值:" :label-width="rightFormLabelWidth">
                <el-input v-model.number="form.codeLevelValue" ref="codeLevelValue"  :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="字符截取类型:" :label-width="rightFormLabelWidth" required prop="valueCutType">
              <el-form-item label="字符截取类型:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.valueCutType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                      v-for="item in codeCutType"
@@ -455,8 +546,9 @@
              </div>
              <!-- å¼•用码段 -->
              <div v-show="form.secType==='coderefersec' ? true:false">
                <el-form-item label="参照引用的业务类型:" label-width="152px" required prop="referBtmId">
              <el-form-item label="参照引用的业务类型:" label-width="152px" required>
                  <el-input
                  ref="referBtmId"
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
@@ -466,8 +558,9 @@
                    <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('referBtmId')" style="margin-right: 5px;cursor: pointer;"></i>
                  </el-input>
                </el-form-item>
                <el-form-item label="参照配置:" label-width="152px" required prop="referConfig">
              <el-form-item label="参照配置:" label-width="152px" required>
                  <el-input
                  ref="referConfig"
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
@@ -480,13 +573,13 @@
              </div>
              <!-- æ—¥æœŸç æ®µ -->
              <div v-show="form.secType==='codedatesec' ? true:false">
                <el-form-item label="日期格式:" :label-width="rightFormLabelWidth" required prop="codeDateFormatStr">
                  <el-input v-model="form.codeDateFormatStr" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="日期格式:" :label-width="rightFormLabelWidth" required>
                <el-input ref="codeDateFormatStr" v-model="form.codeDateFormatStr" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
              </div>
              <!-- åˆ†ç±»ç æ®µ -->
              <div v-show="form.secType==='codeclassifysec' ? true:false">
                <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required prop="codeSecLengthType">
              <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeSecLengthType"
@@ -496,8 +589,8 @@
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required prop="codeSecLength">
                  <el-input v-model="form.codeSecLength" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeSecLength" ref="classCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="是否自动分配分类值:" :label-width="rightFormLabelWidth">
                  <el-switch v-model="form.matchClassifyValueFlag" :disabled="basicSecOnlyRead"></el-switch>
@@ -516,10 +609,10 @@
              </div>
              <!-- å¯å˜ç æ®µ -->
              <div v-show="form.secType==='codevariablesec' ? true:false">
                <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required prop="codeSecLength">
                  <el-input v-model="form.codeSecLength" :readonly="basicSecOnlyRead"></el-input>
              <el-form-item label="码段的长度:" :label-width="rightFormLabelWidth" required>
                <el-input v-model.number="form.codeSecLength" ref="varCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
                <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required prop="codeFillType">
              <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required>
                  <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeFillType"
@@ -530,7 +623,7 @@
                  </el-select>
                </el-form-item>
                <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                  <el-select v-model="form.codeFillSeparatorSelect" placeholder="请选择" :disabled="basicSecOnlyRead">
                <el-select v-model="form.codeFillSeparatorSelect" filterable @blur="inputSelectBlur" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeFillSeparator"
                        :key="item.dictValue"
@@ -597,228 +690,12 @@
          
        </el-dialog>
         <!-- ç¬¬äºŒå±‚对话框,属性码段,公式编辑框弹窗 -->
        <el-dialog title="公式编辑框"
          append-to-body
          :visible.sync="isShowformulaEdit"
          @close="closeFormulaEdit"
          width="78%"
          style="height: 150vh; margin-top: -13vh; overflow: hidden">
          <div style="overflow-y: auto; height: 80vh">
            <el-row>
              <!-- å·¦ä¾§å…¬å¼å†…容 -->
              <el-col :span="14" style="overflow: hidden">
                <el-card class="box-card" style="height: 33vh; overflow-y: auto; overflow-x: auto;">
                    <div slot="header" class="clearfix">
                      <span style="font-size: medium;" >公式内容</span>
                      <el-button type="primary" size="mini" style="float: right;" @click="saveFormulaContent">确定</el-button>
                      <el-button type="warning" size="mini" style="margin-right: 10px; float: right;" @click="resetFormulaContent">清空内容</el-button>
                    </div>
                    <div class="text item">
                      <el-input type="textarea" :rows="5" style="width: 560px;" v-model="formulaContent"></el-input>
                    </div>
                </el-card>
              </el-col>
              <!-- å³ä¾§è¿ç®—符 -->
              <el-col :span="10">
                <el-card class="box-card" style="height: 33vh; overflow-y: auto; overflow-x: auto;">
                  <div slot="header" class="clearfix">
                    <span style="font-size: medium;">运算符</span>
                  </div>
                  <div class="text item">
                    <div class="formula-editor">
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'7'})">7</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'8'})">8</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'9'})">9</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'/'})">/</button><br/>
                      </div>
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'4'})">4</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'5'})">5</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'6'})">6</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'*'})">*</button><br/>
                      </div>
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'1'})">1</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'2'})">2</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'3'})">3</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>'})">-</button><br/>
                      </div>
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'0'})">0</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'00'})">00</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'.'})">.</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'+'})">+</button><br/>
                      </div>
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'->'})">-></button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'=='})">==</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'('})">(</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':')'})">)</button><br/>
                      </div>
                      <div class="one">
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'<'})">&lt;</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>'})">&gt;</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'<='})">&lt;=</button>
                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>='})">&gt;=</button>
                      </div>
                    </div>
                  </div>
                </el-card>
              </el-col>
            </el-row>
            <el-row>
              <!-- å·¦ä¾§å…¬å¼é€‰æ‹©åŒºåŸŸ -->
              <el-col :span="14" style="overflow: hidden">
                <el-card class="box-card" style="height: 40vh; overflow-y: auto; overflow-x: auto;">
                  <div slot="header" class="clearfix">
                    <span style="font-size: medium;">公式选择</span>
                  </div>
                  <div class="text item">
                    <el-tabs v-model="activeName">
                      <el-tab-pane label="常用" name="first">
                        <el-table
                          :data="commonFormulaTableData"
                          :show-header="false"
                          @row-dblclick="dbClickAddContent"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="300">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="300">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                      <el-tab-pane label="财务" name="second">
                        <el-table
                          :data="financialFormulaTableData"
                          @row-dblclick="dbClickAddContent"
                          :show-header="false"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="300">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="300">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                      <el-tab-pane label="日期" name="third">
                        <el-table
                          :data="dateFormulaTableData"
                          :show-header="false"
                          @row-dblclick="dbClickAddContent"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="300">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="300">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                      <el-tab-pane label="数学" name="fourth">
                        <el-table
                          :data="mathFormulaTableData"
                          :show-header="false"
                          @row-dblclick="dbClickAddContent"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="300">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="300">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                      <el-tab-pane label="其他" name="five">
                        <el-table
                          :data="otherFormulaTableData"
                          @row-dblclick="dbClickAddContent"
                          :show-header="false"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="300">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="300">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                    </el-tabs>
                  </div>
                </el-card>
              </el-col>
              <!-- å³ä¾§å˜é‡é€‰æ‹©åŒºåŸŸ -->
              <el-col :span="10" style="overflow: hidden">
                <el-card class="box-card" style="height: 40vh; overflow-y: auto; overflow-x: auto;">
                  <div slot="header" class="clearfix">
                    <span style="font-size: medium;">变量</span>
                  </div>
                  <div class="text item">
                    <el-tabs v-model="activeNameAttr">
                      <el-tab-pane label="本场景变量" name="first">
                        <el-table
                          :data="thisSceneTableData"
                          @row-dblclick="dbClickAddContent"
                          :show-header="false"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="40">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="100">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                      <el-tab-pane label="系统变量" name="second">
                        <el-table
                          :data="systemVariableTableData"
                          @row-dblclick="dbClickAddContent"
                          :show-header="false"
                          style="width: 100%">
                          <el-table-column
                            prop="formula"
                            width="150">
                          </el-table-column>
                          <el-table-column
                            prop="desc"
                            width="150">
                          </el-table-column>
                        </el-table>
                      </el-tab-pane>
                    </el-tabs>
                  </div>
                </el-card>
              </el-col>
            </el-row>
          </div>
        </el-dialog>
        <!-- ç¬¬äºŒå±‚对话框,属性码段,公式编辑框弹窗组件 -->
      <formula-editor ref="formulaEditor"
        @updateFormulaContent="updateFormulaContent"
        :thisSceneTableData="thisSceneTableData"
        :systemVariableTableData="systemVariableTableData">
      </formula-editor>
        <!-- ç¬¬äºŒå±‚对话框,为【父分类码段】选取值弹窗 -->
        <el-dialog title="为【父分类码段】选取值"
@@ -885,30 +762,32 @@
</template>
<script>
  import { gridCodeRule, getDetail, add, update, remove, listUseRange, updateStatus } from "@/api/code/mdmrule";
  import { gridCodeRule, getDetail, add, update, remove, listUseRange, updateStatus,clone,clearAllCode } from "@/api/code/mdmrule";
  import { 
    gridCodeBasicSec, 
    downOrderNum, 
    upOrderNum, 
    deleteData, 
    editSave, 
    getObjectByOid,
    listDataByOids,
    refDataGrid,
    cloneCodeBasic,
    addSave,
    refDataGridClassifySec,
  } from "@/api/code/codebasic";
  import { treeTopCodeClassify, listClassifyLinkAttr } from "@/api/code/codeclassify";
  import { gridCodeFixedValue,addSaveCodeFixedValue,deleteCodeFixedValue,editCodeFixedValue,saveOrder } from "@/api/code/codeFixedValue";
  import { treeCodeClassifyValue } from "@/api/code/codeClassifyValue";
  import { treeCodeClassifyValue,addSaveCodeClassifyValue,editCodeClassifyValue,deleteCodeClassifyValue,saveCodeClassifyValueOrder } from "@/api/code/codeClassifyValue";
  import { getDictionary } from "@/api/omd/dict";
  import optionBasic from "@/const/code/codebasic";
  import cloneOption from "@/const/code/cloneOption";
  import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
  import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption.js";
  import optionRule from "@/const/code/mdmrule";
  import attrOption from "@/const/code/selectAttrOptionDialog";
  import treeOption from "@/const/code/classifyTreeOptionDialog";
  import classisyValueTreeOption from "@/const/code/classisyValueTreeDialog";
  import parentClassifyParentOption from "@/const/code/parentClassifyParentOptionDialog";
  import referBtmOption from "@/const/code/referBtmDialog";
  import fixedValueOption from "@/const/code/fixedValueMgrDialog";
  import { getDictionary } from "@/api/omd/dict";
  import {mapGetters} from "vuex";
export default {
@@ -928,9 +807,22 @@
        optionRule: optionRule,
        data: [],
        currentRuleLcStatus: '',
        /*克隆按钮对话框控制*/
          /*克隆对话框控制变量*/
        cloneSettingBox: false,
        optionBasic: optionBasic,
          cloneTableLoading: false,
          cloneOption: cloneOption,
          cloneData: [],
          cloneCodeRuleForm: {
            id: '',
            name: '',
            description: '',
          },
          /*从其他规则克隆码段*/
          cloneOtherCodeRuleSettingBox: false,
          cloneBasicOption: cloneBasicOption,
          cloneCodeRuleOption: cloneCodeRuleOption,
          selectionOtherCloneCodeBasicList: [], // å½“前选中的基础码段
        /*使用范围对话框显示控制*/
        codeRangeSettingBox: false,
        useRangeData: [],
@@ -967,6 +859,7 @@
        },
        /*基础码段相关数据*/
          optionBasic: optionBasic,
        basicData:[],
        loadingBasic: true,
        selectionBasicList: [],
@@ -994,13 +887,14 @@
        //分类码段码值表单
        codeClassifyForm: {
          codeclassifysecoid: "",
            codeClassifySecOid: "",
          id: "",
          name: "",
          oid: "",
          parentclassifyvalueoid: "",
        },
          classisyValueTreeOption: classisyValueTreeOption, //分类码段树相关配置项
          classifyValueTreeData: [],
          currentSelectTreeData: '', //当前选中的分类码值树节点
        /* ä¸ºå±žæ€§é€‰å–值窗口显示打开控制变量 */
        isShowSelectAttrOption: false,
@@ -1013,351 +907,71 @@
        selectattrData: [],
        selectAttrOptionLoading: false,
        selectionChangeAttrList: [],
        /*公式编辑框对话框相关数据*/
        isShowformulaEdit: false, //公式编辑框对话框显示控制
        formulaContent: '', //公式编辑框内容
        activeName: 'first', //当前活动的tab
        activeNameAttr: 'first', //变量中的当前活动tab
        //常用公式
        commonFormulaTableData: [{
            "formula": 'if(compare,trueResult,falseResult)',
            "desc": '如果compare的表达式为true,则执行trueResult的表达式,否则执行flaseResult.例如if(3>2,2*(3+2),3/(2-4)),值等于10',
          },
          // å±žæ€§ç æ®µï¼Œå…¬å¼ç¼–辑框组件的本场景显示变量、与系统变量
          thisSceneTableData: [
          {
            "formula": 'sum(douber1,douber2)',
            "desc": '两个格式为douber的参数求和',
          },
          {
            "formula": 'sub(douber1,douber2)',
            "desc": '格式为douber的参数douber1减去格式为douber的参数douber2',
          },
          {
            "formula": 'mul(douber1,douber2)',
            "desc": '两个格式为douber的参数相乘',
          },
          {
            "formula": 'div(douber1,douber2)',
            "desc": '格式为douber的参数douber1除以格式为douber的参数douber2.当douber2等于0的时候,返回0;如果除不尽的时候保留10位小数',
          },
          {
            "formula": 'mod(int,int)',
            "desc": '求余数',
          },
          {
            "formula": 'toInt(string)',
            "desc": '转换为int格式',
          },
          {
            "formula": 'doubleRound(string,count)',
            "desc": '处理douber的小数位数,count表示小数位数',
          },
          {
            "formula": 'zeroIfNull(value)',
            "desc": '如果参数的值为null或者"",将返回0',
          },
          {
            "formula": 'endsWith(string,str1)',
            "desc": '字符串string是不是以str1结尾',
          },
          {
            "formula": 'startsWith(string,str1)',
            "desc": '字符串string是否以str1开头',
          },
          {
            "formula": 'charAt(string,index)',
            "desc": '获取字符串string中第index位置的字符,如果长度小于index,则返回',
          },
          {
            "formula": 'equalsIgnoreCase(str1,str2)',
            "desc": '字符串str1和字符串str2是否相等',
          },
          {
            "formula": 'indexOf(str1,str2)',
            "desc": '字符串str2在字符串str1中首次出现的位置',
          },
          {
            "formula": 'isEmpty(str1)',
            "desc": '参数str1是否为空,其中null这个字符串也表示为空',
          },
          {
            "formula": 'lastIndexOf(str1,str2)',
            "desc": '字符串str2在字符串str1中最后出现的位置',
          },
          {
            "formula": 'leftStr(str1,index)',
            "desc": '获取index位置左侧的所有字符',
          },
          {
            "formula": 'rightStr(str1,str2)',
            "desc": '获取index位置右侧的所有字符',
          },
          {
            "formula": 'length(str1)',
            "desc": '参数str1的长度',
          },
          {
            "formula": 'mid(str1,start,end)',
            "desc": '获取str1的从start到end直接的字符串,出现异常时返回',
          },
          {
            "formula": 'tolowercase(str1)',
            "desc": '将字符串str1转为小写',
          },
          {
            "formula": 'touppercase(str1)',
            "desc": '将字符串str1转为大写',
          },
          {
            "formula": 'trimzero(str1)',
            "desc": '去除字符串str1中的0',
          },
          {
            "formula": 'MD5(str1)',
            "desc": '将字符串进行MD5加密',
          },
        ],
       //财务公式
        financialFormulaTableData: [{
            "formula": 'toChinese(value)',
            "desc": '将阿拉伯数字转为为汉字大写方式'
          },
          {
            "formula": 'getChineseCurrency(value)',
            "desc": '将阿拉伯数字转为为汉字金额大写方式,与tochiness的区别是这个会显示元、角、分'
          },
          {
            "formula": 'setThmark(value)',
            "desc": '为参数value设置千分位'
                formula: "${}",
                desc: "",
          }
        ],
        //日期公式
        dateFormulaTableData: [{
            "formula": 'compareDate(d1,d2)',
            "desc": '对比参数d1,d2的大小。d1,d2为yyyy-MM-dd格式的日期字符串'
          systemVariableTableData: [
            {
                formula: "#CURRENTUSER.OID#",
                desc: "当前用户的主键",
          },
          {
            "formula": 'nowDate()',
            "desc": '获取当前日期'
                formula: "#CURRENTUSER.ID#",
                desc: "当前用户的账户",
          },
          {
            "formula": 'chinaDate(d1)',
            "desc": '将时间转换为农历,d1是yyyy-MM-dd格式的日期字符串'
                formula: "#CURRENTTIME#",
                desc: "当前时间",
          },
          {
            "formula": 'dateAdd(d1,count)',
            "desc": '在d1的基础上添加count天,d1为yyyy-MM-dd HH:mm:ss格式的时间字符串'
                formula: "#CURRENTDATE#",
                desc: "当前日期",
          },
          {
            "formula": 'dateBalanceYear(sourceDate,targetDate,false)',
            "desc": '计算相差的年份,比如计算年龄,targetDate为""表示当前时间,第三个参数为true表示有多余的月份或者天数时,就加1;'
                formula: "#CURRENTDATETIME#",
                desc: "当前日期时间",
          },
          {
            "formula": 'dateBalanceDay(sourceDate,targetDate)',
            "desc": '计算相差的天数,targetDate为""表示当前时间'
                formula: "#CURRENTUSER_NAME#",
                desc: "当前用户的姓名",
          },
          {
            "formula": 'dateformat(d1,format)<',
            "desc": '将当前的日期(时间)字符串转为指定的字符串,如果format的内容有空格,请使用&代替'
                formula: "#CURRENTUSER.SECRETGRADE#",
                desc: "当前用户密级",
          },
          {
            "formula": 'nowDatetime()',
            "desc": '获取当前日期和时间。格式为yyyy-MM-dd HH:mm:ss'
                formula: "#CURRENTUSER.IPSECRET#",
                desc: "当前用户的IP密级",
          },
          {
            "formula": 'dayOf(d1)',
            "desc": '获取格式为yyyy-MM-dd的日期的天数'
                formula: "#CURRENTUSER.BUSINESSUNIT#",
                desc: "当前用户所属业务单元",
          },
          {
            "formula": 'nowMon()',
            "desc": '获取当前的月份,格式为MM'
                formula: "#CURRENTUSER.BUSINESSUNITNAME#",
                desc: "当前用户所属业务单元名称",
          },
          {
            "formula": 'monOf(d1)',
            "desc": '获取日期d1的月份数'
                formula: "#CURRENTUSER.GROUPOID#",
                desc: "当前用户的部门主键",
          },
          {
            "formula": 'nowTime()',
            "desc": '获取当前时间,格式为HH:mm:ss'
                formula: "#CURRENTUSER.GROUPNAME#",
                desc: "当前用户所属部门名称",
          },
          {
            "formula": 'nowYear()',
            "desc": '获取年份,格式为yyyy'
                formula: "#CURRENTUSER.EMAIL#",
                desc: "当前用户邮件地址",
          },
          {
            "formula": 'yearOf()',
            "desc": '获取时间d1的年份'
          }
        ],
        //数学公式
        mathFormulaTableData: [{
            "formula": 'abs(value)',
            "desc": '求参数value的绝对值,value必须为数字格式'
          },
          {
            "formula": 'acos(value)',
            "desc": '求参数value的反余弦,value必须为数字格式'
          },
          {
            "formula": 'asin(value)',
            "desc": '求参数value的反正弦,value必须为数字格式'
          },
          {
            "formula": 'atan(value)',
            "desc": '求参数value的反正切,value必须为数字格式'
          },
          {
            "formula": 'cbrt(value)',
            "desc": '求参数value的立方根,value必须为数字格式'
          },
          {
            "formula": 'ceil(value)',
            "desc": '返回不大于参数value的最小整数,例如ceil(1.7)就等于2,value必须为数字格式'
          },
          {
            "formula": 'cos(value)',
            "desc": '求参数value的余弦值,value必须为数字格式'
          },
          {
            "formula": 'cosh(value)',
            "desc": '求参数value的双曲余弦值,value必须为数字格式'
          },
          {
            "formula": 'exp(n)',
            "desc": '欧拉数 e çš„n次幂,n必须为数字格式'
          },
          {
            "formula": 'floor(n)',
            "desc": '欧拉数 e çš„n次幂减1,n必须为数字格式'
          },
          {
            "formula": 'log(value)',
            "desc": '返回不小于参数value的最大整数,例如floor(1.7)等于1,n必须为数字格式'
          },
          {
            "formula": 'log10(value)',
            "desc": '自然对数,value必须为数字格式'
          },
          {
            "formula": 'log1p(value)',
            "desc": '计算底数为 10 çš„对数,value必须为数字格式'
          },
          {
            "formula": 'random()',
            "desc": '返回参数与 1 ä¹‹å’Œçš„自然对数,value必须为数字格式'
          },
          {
            "formula": 'rint(value)',
            "desc": '返回一个伪随机数,该值大于等于 0.0 ä¸”小于 1.0'
          },
          {
            "formula": 'round(value)',
            "desc": '返回其值最接近参数并且是整数的 double å€¼ã€‚如果两个整数的 double å€¼éƒ½åŒæ ·æŽ¥è¿‘,那么结果取偶数。特殊情况是:如果参数值是整数,那么结果就是该参数。如果参数是 NaN æˆ–无穷大或正零或负零,那么结果与参数相同'
          },
          {
            "formula": 'signum(value)',
            "desc": '符号函数;如果参数为 0,则返回 0;如果参数大于 0, åˆ™è¿”回 1.0;如果参数小于 0,则返回 -1.0'
          },
          {
            "formula": 'sin(value)',
            "desc": '求参数value的正弦值,value必须为数字格式'
          },
          {
            "formula": 'sinh(value)',
            "desc": '求参数value的双曲正弦值,value必须为数字格式'
          },
          {
            "formula": 'tan(value)',
            "desc": '求参数value的正切值,value必须为数字格式'
          },
          {
            "formula": 'tanh(value)',
            "desc": '求参数value的双曲正切值,value必须为数字格式'
          },
          {
            "formula": 'max(v1,v2)',
            "desc": '求两个数中的较大的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3.2'
          },
          {
            "formula": 'min(v1,v2)',
            "desc": '求两个数中的较小的值,v1,v2都必须为数字格式,例如max(3.2,3)就等于3'
          },
          {
            "formula": 'sqrt(value)',
            "desc": '求平方根'
                formula: "#CURRENTUSER.ROLENAME#",
                desc: "当前用户所属角色名称",
          },
        ],
        //其他公式
        otherFormulaTableData: [{
            "formula": 'getcolvalue(servername,tablename,fieldname,pkField,pkValue)',
            "desc": '查询servername中tablename数据库表中fieldname字段的值,pkfield表示主键的字段名称,pkValue表示主键的值,serverName现在默认为localServer'
          },
        ],
        //本场景变量
        thisSceneTableData: [{
            "formula": '${}',
            "desc": ' '
          },
        ],
        //系统变量
        systemVariableTableData: [{
            "formula": '#CURRENTUSER.OID#',
            "desc": '当前用户的主键'
          },
          {
            "formula": '#CURRENTUSER.ID#',
            "desc": '当前用户的账户'
          },
          {
            "formula": '#CURRENTTIME#',
            "desc": '当前时间'
          },
          {
            "formula": '#CURRENTDATE#',
            "desc": '当前日期'
          },
          {
            "formula": '#CURRENTDATETIME#',
            "desc": '当前日期时间'
          },
          {
            "formula": '#CURRENTUSER_NAME#',
            "desc": '当前用户的姓名'
          },
          {
            "formula": '#CURRENTUSER.SECRETGRADE#',
            "desc": '当前用户密级'
          },
          {
            "formula": '#CURRENTUSER.IPSECRET#',
            "desc": '当前用户的IP密级'
          },
          {
            "formula": '#CURRENTUSER.BUSINESSUNIT#',
            "desc": '当前用户所属业务单元'
          },
          {
            "formula": '#CURRENTUSER.BUSINESSUNITNAME#',
            "desc": '当前用户所属业务单元名称'
          },
          {
            "formula": '#CURRENTUSER.GROUPOID#',
            "desc": '当前用户的部门主键'
          },
          {
            "formula": '#CURRENTUSER.GROUPNAME#',
            "desc": '当前用户所属部门名称'
          },
          {
            "formula": '#CURRENTUSER.EMAIL#',
            "desc": '当前用户邮件地址'
          },
          {
            "formula": '#CURRENTUSER.ROLENAME#',
            "desc": '当前用户所属角色名称'
          }
        ],
        /* çˆ¶åˆ†ç±»ç æ®µå¯¹è¯æ¡† */
        isShowParentClassifyOption: false, //父分类码段对话框显示控制
@@ -1400,67 +1014,67 @@
          componentCodeFlag: false, //是否参与编码
          pkCodeRule: '', //所属编码规则
        },
        formRules: {
          id: [
            { required: true, message: '请输入码段编号', trigger: 'blur' },
          ],
          name: [
            { required: true, message: '请输入码段名称', trigger: 'blur' },
          ],
          secType: [
            { required: true, message: '请输入码段名称', trigger: 'blur' },
          ],
          codeSecLengthType: [
            { required: true, message: '请选择码段长度类型', trigger: 'change' },
          ],
          codeSecLength: [
            { required: true, message: '请输入码段的长度', trigger: 'blur' },
            { type: 'number', message: '码段的长度必须为数字值'}
          ],
          referAttributeName: [
            { required: true, message: '请选择属性', trigger: 'blur' },
          ],
          serialStart: [
            { type: 'number', message: '码段的长度必须为数字值'}
          ],
          serialStep: [
            { type: 'number', message: '码段的长度必须为数字值'}
          ],
          codeFillType: [
            { required: true, message: '请选择编码补位方式', trigger: 'blur' },
          ],
          // è®¾ç½®è¡¥ä½æ—¶çš„字符,需要自定义方法来做判断
          codeFillSeparatorSelect: [
            { required: true, message: '请输入补位时的字符', trigger: 'blur' },
          ],
          codeFillLength: [
            { required: true, message: '请输入填充长度', trigger: 'blur' },
            { type: 'number', message: '填充长度必须为数字值'}
          ],
          codeFillLimit: [
            { required: true, message: '请输入流水上限', trigger: 'blur' },
            { type: 'number', message: '流水上限必须为数字值'}
          ],
          codeLevelType: [
            { required: true, message: '请选择层级类型', trigger: 'change' },
          ],
          codeLevelValue: [
            { type: 'number', message: '层级的值必须为数字值'}
          ],
          valueCutType: [
            { required: true, message: '请选择字符截取类型', trigger: 'change' },
          ],
          referBtmId: [
            { required: true, message: '请选参照应用的业务类型', trigger: 'change' },
          ],
          referConfig: [
            { required: true, message: '请选择参照配置', trigger: 'change' },
          ],
          codeDateFormatStr: [
            { required: true, message: '请输入日期格式', trigger: 'blur' },
          ],
          // formRules: {
          //   id: [
          //     { required: true, message: '请输入码段编号', trigger: 'blur' },
          //   ],
          //   name: [
          //     { required: true, message: '请输入码段名称', trigger: 'blur' },
          //   ],
          //   secType: [
          //     { required: true, message: '请选中码段类型', trigger: 'change' },
          //   ],
          //   codeSecLengthType: [
          //     { required: true, message: '请选择码段长度类型', trigger: 'change' },
          //   ],
          //   codeSecLength: [
          //     { required: true, message: '请输入码段的长度', trigger: ['blur', 'change']},
          //     { type: 'number', message: '码段的长度必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   referAttributeName: [
          //     { required: true, message: '请选择属性', trigger: 'change' },
          //   ],
          //   serialStart: [
          //     { type: 'number', message: '流水号的起始值必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   serialStep: [
          //     { type: 'number', message: '流水的步长必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeFillType: [
          //     { required: true, message: '请选择编码补位方式', trigger: ['blur', 'change']},
          //   ],
          //   // è®¾ç½®è¡¥ä½æ—¶çš„字符,需要自定义来做判断
          //   codeFillSeparatorSelect: [
          //     { validator: validateCodeFill, trigger: ['blur', 'change'] },
          //   ],
          //   codeFillLength: [
          //     { required: true, message: '请输入填充长度', trigger: ['blur', 'change'] },
          //     { type: 'number', message: '填充长度必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeFillLimit: [
          //     { required: true, message: '请输入流水上限', trigger: ['blur', 'change'] },
          //     { type: 'number', message: '流水上限必须为数字值',trigger: ['blur', 'change']}
          //   ],
          //   codeLevelType: [
          //     { required: true, message: '请选择层级类型', trigger: 'change' },
          //   ],
          //   codeLevelValue: [
          //     { required: false, type: 'number', message: '层级的值必须为数字值', trigger: 'change'}
          //   ],
          //   valueCutType: [
          //     { required: true, message: '请选择字符截取类型', trigger: 'change' },
          //   ],
          //   referBtmId: [
          //     { required: true, message: '请选择参照应用的业务类型', trigger: 'change' },
          //   ],
          //   referConfig: [
          //     { required: true, message: '请选择参照配置', trigger: 'change' },
          //   ],
          //   codeDateFormatStr: [
          //     { required: true, message: '请输入日期格式', trigger: ['blur', 'change'] },
          //   ],
        },
          // },
        //枚举和可输可选查询
        sectypeList:[],    //码段类型
        codeSecLengthType:[],  //码段长度类型
@@ -1488,6 +1102,11 @@
      },
    },
    methods: {
        /* å…¬å¼ç¼–辑框内容改变,子组件编辑完公式之后内容回显时调用 */
        updateFormulaContent(content){
          this.form.getValueClass = content;
        },
      
      /** é€‰ä¸­å‚照引用的业务类型,第二层嵌套对话框,及其相关方法  */
      saveSelectedreferBtm(){
@@ -1547,7 +1166,7 @@
      /** çˆ¶åˆ†ç±»é€‰æ‹©å¯¹è¯æ¡†ï¼Œç¬¬äºŒå±‚嵌套对话框,及其相关方法 */ 
      // ä¿å­˜å½“前父分类码段的选中行,并进行子组件回显
        // ä¿å­˜å½“前父分类码段的选中行,并进行回显
      saveSelectedParentClassify(){
        //console.log(this.parentClassifySelectionList.length);
        if(this.parentClassifySelectionList.length != 1){
@@ -1555,7 +1174,7 @@
          return false;
        }
        //调用子组件并传递当前选中的参数值,实现回显
        this.form.parentClassifySecOid = this.parentClassifySelectionList[0].id;
          this.form.parentClassifySecOid = this.parentClassifySelectionList[0].oid;
        this.form.parentClassifySecText = this.parentClassifySelectionList[0].name;
        //清空当前选中的行
        this.parentClassifySelectionClear();
@@ -1602,35 +1221,6 @@
        });
      },
      
      /** æ‰“开公式编辑框,第二层嵌套对话框,及其相关方法 */
      openformulaEdit(){
        this.isShowformulaEdit = true;
      },
      //双击添加公式内容
      dbClickAddContent(row){
        //console.log(row.formula);
        this.formulaContent = this.formulaContent + row.formula;
      },
      //清空公式内容
      resetFormulaContent(){
        this.formulaContent = '';
      },
      //关闭时清空上次公式内容
      closeFormulaEdit(){
        this.resetFormulaContent();
      },
      //编辑完成公式内容并回显
      saveFormulaContent(){
        //console.log(this.formulaContent);
        if(this.formulaContent.trim == null || this.formulaContent.trim == ''){
          this.$message.warning("公式内容不能为空!");
          return;
        }
        //公式内容回显
        this.form.getValueClass = this.formulaContent;
        this.isShowformulaEdit = false;
      },
      /** æ‰“开属性选取值,第二层嵌套对话框,及其相关方法 */ 
      // èŽ·å–å½“å‰è¢«é€‰ä¸­æ ‘èŠ‚ç‚¹çš„oid
@@ -1695,6 +1285,7 @@
        }else{
          //分类码段
          this.isShowFixedForm = false;
            this.loadClassifyValueData(row);
        }
        this.codefixedsecOrCodeclassifysecOid = row.oid;
        this.isShowBasicSecCodeValueMgr = true;
@@ -1708,8 +1299,6 @@
          this.fixedValueOptionLoading = false;
        })
      },
      //加载分类码段码值管理页面tree数据
      //单击固定码段的码值表中行时触发的事件
      selectedCodeValueRow(row){
        //console.log(row);
@@ -1725,6 +1314,10 @@
            this.$message.warning("码值不能为空!");
            return;
          }
            if(this.codeFixdForm.id.trim().length >= 12 ){
              this.$message.warning("码值长度不能大于12!");
              return;
            }
          this.codeFixdForm.codeFixedSecOid = this.codefixedsecOrCodeclassifysecOid;
          addSaveCodeFixedValue(this.codeFixdForm).then(() => {
            this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid});
@@ -1737,21 +1330,37 @@
            window.console.log(error);
          });
        }else {
            this.codeClassifyForm.codeClassifySecOid = this.codefixedsecOrCodeclassifysecOid;
            console.log(this.codeClassifyForm);
            addSaveCodeClassifyValue(this.codeClassifyForm).then(() => {
              this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid});
              this.clearFixedOrClassifyForm('codeclassifyvaluesec');
              this.$message({
                type: "success",
                message: "操作成功!"
              });
            }, error => {
              this.$confirm(error, {
                confirmButtonText: "确定",
                type: "error",
              })
            });
        }
      },
      // æ¸…空码值表单
      clearFixedOrClassifyForm(condition){
        //点击取消时清空表单与当前选中的码值,并禁用按钮
        this.selectedFixedOrCodeclassifyValue = '';
          //console.log(condition);
        if(condition === "close"){
          this.codeFixdForm.id = '';
            this.codeFixdForm = this.$options.data().codeFixdForm;
            this.codeClassifyForm = this.$options.data().codeClassifyForm;
        }
        if(condition === "codefixedsec" || condition === "close"){
          if(condition === "codefixedsec"){
          this.codeFixdForm.description = '';
          this.codeFixdForm.codeFixedSecOid = '';
        }else {
          this.codeClassifyForm = '';
            this.codeClassifyForm = this.$options.data().codeClassifyForm;
        }
      },
      //修改码值
@@ -1775,7 +1384,16 @@
              window.console.log(error);
          });
        }else {
            this.codeClassifyForm.oid = this.selectedFixedOrCodeclassifyValue.attributes.oid;
            editCodeClassifyValue(this.codeClassifyForm).then(() => {
                this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid})
                this.$message({
                  type: "success",
                  message: "操作成功!"
                });
              }, error => {
                window.console.log(error);
            });
        }
          
      },
@@ -1783,7 +1401,7 @@
      delCodeSecValue(condition){ 
        //固定码段码值删除
        if(condition == 'codefixedsec'){
          console.log(this.selectedFixedOrCodeclassifyValue.oid);
            //console.log(this.selectedFixedOrCodeclassifyValue.oid);
          this.$confirm("是否删除这条数据?如果被引用将不能被删除!", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
@@ -1794,6 +1412,7 @@
            return deleteCodeFixedValue({"oid": this.selectedFixedOrCodeclassifyValue.oid,"ts": ts});
          })
          .then(() => {
              this.selectedFixedOrCodeclassifyValue = '';
            this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid})
            this.clearFixedOrClassifyForm('codefixedsec');
            this.$message({
@@ -1803,12 +1422,28 @@
          });
        }else{
          //分类码段码值删除
            this.$confirm("是否删除这条数据?如果被引用将不能被删除!", {
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning"
            })
            .then(() => {
              let ts = new Date(this.selectedFixedOrCodeclassifyValue.ts).getTime();
              return deleteCodeClassifyValue({"oid": this.selectedFixedOrCodeclassifyValue.oid,"ts": ts});
            })
            .then(() => {
          this.selectedFixedOrCodeclassifyValue = '';
              this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid})
              this.clearFixedOrClassifyForm('codeclassifyvalue');
              this.$message({
                type: "success",
                message: "操作成功!"
              });
            });
        }            
        
      },
      //对码值表进行:上移、下移、移除操作
        //对固定码值表进行:上移、下移、移除操作
      codeFixedValueOpetion(condition,row){
        //console.log(this.fixedValueData[row.$index].orderNum);
        const index = row.$index;
@@ -1844,13 +1479,81 @@
        }
        //console.log(this.fixedValueData);
      },
      //保存对固定码段码值的操作
      saveCodeFixedValueOption(){
        //对分类码值表进行:上移、下移、移除操作
        codeClassifyValueOpetion(condition){
          //此处涉及到深浅拷贝问题,但是执行上下移保存操作之后会重新加载treedata,所以影响不大
          let currentTreeList = this.getCodeClassifyValueTreeData();
          let saveData = [];
          console.log(currentTreeList.treeList);
          if(condition == 'up'){
            if(currentTreeList.index-1>=0){
              // è°ƒæ•´é¡ºåº
              saveData[0] = currentTreeList.treeList[currentTreeList.index].attributes;
              saveData[1] = currentTreeList.treeList[currentTreeList.index-1].attributes;
              saveData[0].orderNum = parseInt(saveData[0].orderNum)-1;
              saveData[1].orderNum = parseInt(saveData[1].orderNum)+1;
              this.saveCodeFixedOrClassifyValueOption('classifyValue',saveData);
            }
          }else{
            if(currentTreeList.index+1<currentTreeList.treeList.length){
              // è°ƒæ•´é¡ºåº
              saveData[0] = currentTreeList.treeList[currentTreeList.index].attributes;
              saveData[1] = currentTreeList.treeList[currentTreeList.index+1].attributes;
              saveData[0].orderNum = parseInt(saveData[0].orderNum)+1;
              saveData[1].orderNum = parseInt(saveData[1].orderNum)-1;
              this.saveCodeFixedOrClassifyValueOption('classifyValue',saveData);
            }
          }
          console.log(saveData);
          console.log(this.classifyValueTreeData);
        },
        //选中被调整顺序的两个树的节点
        getCodeClassifyValueTreeData(){
          const currentNodeTreeData = this.selectedFixedOrCodeclassifyValue;
          /**考虑几种情况,第一种当前上移|下移操作已经是边界,
            ä¸éœ€è¦è¦åšå¤„理,第二种当前为树根节点,第三种当前为叶子节点
          */
          //说明是根节点,直接找再判断是否是边界值
          if(currentNodeTreeData.parentId.trim() == ''){
            return this.findTreeIndex(this.classifyValueTreeData,currentNodeTreeData.oid,true);
          }else{
            //说明不是根节点,先找到父节点再找到子节点,判断是否是边界值
            return this.findTreeIndex(this.classifyValueTreeData,currentNodeTreeData.parentId,false);
          }
        },
        /**
         * æ‰¾å‰ä¸€ä¸ªå’ŒåŽä¸€ä¸ªå…ƒç´ 
         * @treeList æŸ¥æ‰¾çš„æ•°ç»„
         * @conditionOid ç”¨æ¥æŸ¥æ‰¾åˆ¤æ–­çš„æ¡ä»¶
         * @isTreeRoot æ˜¯å¦çˆ¶èŠ‚ç‚¹
         * @rreturn è¿”回相邻的节点
         */
        findTreeIndex(treeList,conditionOid,isTreeRoot){
          for(let index=0;index<treeList.length;index++){
            if(treeList[index].oid==conditionOid){
              if(isTreeRoot){
                let resData = {
                  "index":index,
                  "treeList":treeList,
                }
                return resData;
              }else{
                return this.findTreeIndex(this.classifyValueTreeData[index].children,this.selectedFixedOrCodeclassifyValue.oid,true);
              }
            }
          }
        },
        //上移下移等操作的保存
        saveCodeFixedOrClassifyValueOption(condition,editOrderNumdata){
          //保存对固定码段码值的上移下移移出等操作
          if(condition == "fixedValue"){
        let data = {
          "codeFixedSecOid": this.codefixedsecOrCodeclassifysecOid,
          "dtoList": JSON.stringify(this.fixedValueData),
        }
        saveOrder(data).then(() => {
              //执行完保存之后将当前选中的对象清空
              this.selectedFixedOrCodeclassifyValue = '';
          this.$message({
            type: "success",
            message: "保存成功!"
@@ -1858,17 +1561,56 @@
          }, error => {
            window.console.log(error);
        });
          }else {
            //保存对分类码值码段码值的上移下移移出等操作
            saveCodeClassifyValueOrder({
              "codeClassifySecOid": this.codefixedsecOrCodeclassifysecOid,
              "dtoList": JSON.stringify(editOrderNumdata),
            }).then(() => {
              this.$message({
                type: "success",
                message: "保存成功!"
              });
              }, error => {
                window.console.log(error);
            });
            this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid});
          }
        },
        //分类码值树data加载
        loadClassifyValueData(row){
          //console.log(row);
          let condtionData = {
            "queryAllLevel": true,
            "loadType": "all",
            "multipleSelect": false,
            "isMuti": false,
            "isQueryAllColumn": true,
            'conditionMap[codeclassifysecoid]':row.oid,
          };
          treeCodeClassifyValue(condtionData).then( res=> {
            this.classifyValueTreeData = res.data;
            //console.log(res.data);
          });
        },
        //分类码值树单击时触发的事件
        classisyValueTreeOnodeClick(node){
          //console.log(node);
          this.selectedFixedOrCodeclassifyValue = node;
          this.codeClassifyForm.codeClassifySecOid = node.attributes.codeClassifySecOid;
          this.codeClassifyForm.id = node.attributes.id;
          this.codeClassifyForm.name = node.attributes.name;
          this.codeClassifyForm.parentClassifyValueOid = node.attributes.oid;
          //console.log(this.codeClassifyForm);
      },
      /** åŸºç¡€ç æ®µç›¸å…³æ–¹æ³• */
      //防止打开过编辑窗口之后表单中存在值,所以需要清空之后初始化form表单
        //防止打开过编辑窗口之后表单中存在值,所以需要清空,并初始化form表单属性
      clearBasicAddForm(){
        this.form = '';
        this.form = {
          secType:'codefixedsec'
        };
        this.changeSectypeFormItems(null);
          this.form = this.$options.data().form;;
          // this.changeSectypeFormItems(null);
      },
      // æ‰“开新增窗口
      addBasicCodeSec(){
@@ -1898,25 +1640,24 @@
          this.showbtn = true;
          this.basicSecOnlyRead = false;
          //为form绑定值
          this.changeSectypeFormItems(row);
        }else{
          this.basicSecDialogTitle = '查看码段信息';
          this.showbtn = false;
          this.basicSecOnlyRead = true;
          this.changeSectypeFormItems(row);
        }
        //console.log(this.form);
          this.changeSectypeFormItems(condition == 'add' ? null:row);
        this.addBasicCodeSettingBox = true;
      },
      // æ–°å¢žåŸºç¡€ç æ®µ
      saveOrEditBasicCode(){
        if(this.selectionList[0].oid == null ||  this.selectionList[0].oid == ''){
          this.$message.warning('缺失必要参数,请重新选择编码规则后重试!');
            this.$message.warning('缺失必要参数,请重新选择编码规则后再试!');
          return;
        }        
        this.form.pkCodeRule = this.selectionList[0].oid;
        //console.log(this.form);
        if(this.form.oid == '' || this.form.oid == null){
            if(this.checkForm()){
           addSave(this.form).then(() => {
            this.$message({
              type: "success",
@@ -1925,8 +1666,14 @@
            }, error => {
              window.console.log(error);
          });
              // å…³é—­å¯¹è¯æ¡†
              this.addBasicCodeSettingBox = false
            }
        }else{
          editSave(this.form).then(() => {
               // å…³é—­å¯¹è¯æ¡†
              this.addBasicCodeSettingBox = false
            this.$message({
              type: "success",
              message: "操作成功!"
@@ -1935,11 +1682,183 @@
              window.console.log(error);
          });
        }
        // å…³é—­çª—口
        this.addBasicCodeSettingBox = false
        // ç‚¹å‡»æ–°å¢žåŸºç¡€ç æ®µ,关闭窗口之后触发重新加载
        this.loadBasic(this.selectionList[0]);
        },
        // å› ä¸ºelementui的表单校验设置不上所以采用判断的方式来做表单检验方式
        checkForm(){
          let form = this.form;
          //console.log(form);
          const regNumber = /^[0-9]+\.{0,1}[0-9]*$/; //数字或小数正则校验
          const tipsMsg = "必填项不能为空";
          if(form.id == ''){
            this.$message.warning("(码段编号)"+tipsMsg);
            this.$refs.id.$el.querySelector('input').focus();
            return false;
          }
          if(form.name == ''){
            this.$message.warning("(码段名称)"+tipsMsg);
            this.$refs.name.$el.querySelector('input').focus();
            return false;
          }
          if(form.secType == ''){
            this.$message.warning("(码段类型)"+tipsMsg);
            this.$refs.secType.$el.querySelector('select').focus();
            return false;
          }
          if(form.secType==='codefixedsec'){
            //固定码段
            if(form.codeSecLengthType == ''){
              this.$message.warning("(码段长度类型)"+tipsMsg);
              this.$refs.codeSecLengthType.$el.querySelector('select').focus();
              return false;
            }
            if(form.codeSecLength == ''){
              this.$message.warning("(码段长度)"+tipsMsg);
              this.$refs.codeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeSecLength)){
              this.$message.warning("码段的长度必须为数字值");
              this.$refs.codeSecLength.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codeattrsec'){
            //属性码段
            if(form.referAttributeId == ''){
              this.$message.warning('(属性)'+tipsMsg);
              this.$refs.referAttributeId.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codeserialsec'){
            console.log(form.codeFillType);
            //流水码段
            if(form.codeSecLength == ''){
              this.$message.warning('(码段的长度)'+tipsMsg);
              this.$refs.seriaCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeSecLength)){
              this.$message.warning('码段的长度必须为数字值');
              this.$refs.seriaCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.serialStart)){
              this.$message.warning('流水号的起始值必须为数字值');
              this.$refs.serialStart.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.serialStep)){
              this.$message.warning('流水的步长必须为数字值');
              this.$refs.serialStep.$el.querySelector('input').focus();
              return false;
            }
            if(form.codeFillType == ''){
              this.$message.warning('(编码补位方式)'+tipsMsg);
              return false;
            }
            if(form.codeFillType != '不补位' && form.codeFillSeparatorSelect == ''){
              this.$message.warning('当补位方式为左补位或者右补位的时候,补位字符不能为空');
              return false;
            }
            if(form.codeFillLength == ''){
              this.$message.warning('填充长度不能为空');
              this.$refs.codeFillLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeFillLength)){
              this.$message.warning('填充长度必须为数字值');
              this.$refs.codeFillLength.$el.querySelector('input').focus();
              return false;
            }
            if(form.codeFillLimit == ''){
              this.$message.warning('(流水上限)'+tipsMsg);
              this.$refs.codeFillLimit.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeFillLimit)){
              this.$message.warning('流水上限必须为数字值');
              this.$refs.codeFillLimit.$el.querySelector('input').focus();
              return false;
            }
            if(form.codeFillFlag == ''){
              this.$message.warning('(流水是否补码)'+tipsMsg);
              this.$refs.switch.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codelevelsec'){
            //层级码段
            if(form.codeLevelType == ''){
              this.$message.warning('(层级类型)'+tipsMsg);
              return false;
            }
            if(!regNumber.test(form.codeLevelValue)){
              this.$message.warning('层级的值)只能填写数字');
              this.$refs.codeLevelValue.$el.querySelector('input').focus();
              return false;
            }
            if(form.valueCutType == ''){
              this.$message.warning('(字符截取类型)'+tipsMsg);
              this.$refs.valueCutType.$el.querySelector('select').focus();
              return false;
            }
          }else if(this.form.secType==='coderefersec'){
            //引用码段
            if(form.referBtmId == ''){
              this.$message.warning('(参照引用的业务类型)'+tipsMsg);
              this.$refs.referBtmId.$el.querySelector('input').focus();
              return false;
            }
            if(form.referConfig == ''){
              this.$message.warning('(参照配置)'+tipsMsg);
              this.$refs.referConfig.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codedatesec'){
            //日期码段
            if(form.codeDateFormatStr == ''){
              this.$message.warning('(日期格式)'+tipsMsg);
              this.$refs.codeDateFormatStr.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codeclassifysec'){
            //分类码段
            if(form.codeSecLengthType == ''){
              this.$message.warning('(码段长度类型)'+tipsMsg);
              return false;
            }
            if(form.codeSecLength == ''){
              this.$message.warning('(码段长度)'+tipsMsg);
              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeSecLength)){
              this.$message.warning('码段的长度必须为数字值');
              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
          }else if(this.form.secType==='codevariablesec'){
            //可变码段
            if(form.codeSecLength == ''){
              this.$message.warning('(码段长度)'+tipsMsg);
              this.$refs.varCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(!regNumber.test(form.codeSecLength)){
              this.$message.warning('码段的长度必须为数字值');
              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
              return false;
            }
            if(form.codeFillType == ''){
              this.$message.warning('(编码补位方式)'+tipsMsg);
              return false;
            }
            if(form.codeFillType != '不补位' && form.codeFillSeparatorSelect == ''){
              this.$message.warning('当补位方式为左补位或者右补位的时候,补位字符不能为空');
              return false;
            }
          }
          return true;
      },
      // åˆ¤æ–­æ•°æ®æ˜¯å¦é€‰æ‹©ä»¥åŠåªèƒ½é€‰æ‹©å•条数据
      tipsMessage(list){
@@ -1975,16 +1894,27 @@
      },
      // ç‚¹å‡»è§¦å‘加载基础码段信息
      loadBasic(row){
          if(this.cloneSettingBox){
            this.cloneTableLoading = true;
          }else{
        this.loadingBasic = true;
          }
        //console.log(row.oid);
        //存储当前关联的编码规则相关信息
        this.currentCodeRuleOid = row.oid;
        this.currentRuleLcStatus = row.lcStatus;
        gridCodeBasicSec(1, -1, {"pkCodeRule":row.oid}).then(res => {
          const data = res.data.data;
            // console.log(data);
            if(this.cloneSettingBox){
              this.cloneData = data.records;
              // console.log(tihs.cloneData);
              this.cloneTableLoading = false;
            }else {
          this.basicData = data.records;
          //console.log(this.basicData);
          this.loadingBasic = false;
            }
        });
      },
      // åŸºç¡€ç æ®µé€‰ä¸­æ—¶è§¦å‘
@@ -2072,8 +2002,10 @@
      },
      //单击编码规则实现行选择
      codeRuleRowClick (row) {
        //console.log(row);
        this.$refs.crud.toggleRowSelection(row);
          this.$refs.crud.toggleSelection();
          this.selectionList = row;
          this.$refs.crud.setCurrentRow(row);
          //this.$refs.crud.toggleRowSelection(row); //选中当前行
        this.loadBasic(row);
      },
      // å¯ç”¨ä¸Žåœç”¨
@@ -2088,19 +2020,139 @@
          window.console.log(error);
        });
      },
      // å…‹éš†
      cloneCodeSetting() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据!");
        // æ‰“开编码规则克隆对话框
        openCodeRuleDialog() {
          if (!this.tipsMessage(this.selectionList)) {
          return;
        }
        if (this.selectionList.length > 1) {
          this.cloneSettingBox = true;
          this.cloneCodeRuleForm.id = this.selectionList[0].id;
          this.cloneCodeRuleForm.name = this.selectionList[0].name;
          this.cloneCodeRuleForm.description = this.selectionList[0].description;
          this.loadBasic({"oid": this.selectionList[0].oid});
        },
        // å…‹éš†ç¼–码规则保存功能
        saveCloneCodeRule(){
          let form = this.cloneCodeRuleForm;
          if(form.id.trim()==''){
            this.$message.warning("编号不能为空!");
            return;
          }
          if(form.name.trim()==''){
            this.$message.warning("码值不能为空!");
            return;
          }
          this.selectionList[0].oid = '';
          this.selectionList[0].id = form.id;
          this.selectionList[0].name = form.name;
          this.selectionList[0].description = form.description;
          this.selectionList[0].createTime = new Date().getTime();
          this.selectionList[0].ts = new Date(this.selectionList[0].ts).getTime();
          this.selectionList[0].lcStatus = 'Editing';
          let data = Object.assign({}, this.selectionList[0],{elements:this.cloneData});
          clone(data).then(() => {
            this.cloneSettingBox = false;
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          }, error => {
            window.console.log(error);
          });
          //console.log(data);
        },
        // æ‰“开从其他编码规则中克隆码段对话框
        openOtherCodeRuleDialog(){
          if (!this.tipsMessage(this.selectionList)) {
            return;
          }
          if(this.selectionList[0].lcStatus != 'Editing'){
            this.$message.warning("编码规则已被引用,不允许编辑或删除!");
            return;
          }
          this.cloneOtherCodeRuleSettingBox = true;
        },
        //单击编码规则实现行选择
        codeOtherCloneRuleRowClick (row) {
          this.loadBasic(row);
        },
        // ç¼–码规则当前选中行变化的时候触发
        selectionOtherCloneCodeRuleChange(list) {
          //console.log(list);
          this.selectionOtherCloneCodeRuleList = list;
          if(this.selectionOtherCloneCodeRuleList.length > 0){
            this.loadBasic(this.selectionOtherCloneCodeRuleList[list.length-1]);
          }
        },
        selectionOtherCloneCodeBasicChange(list){
          this.selectionOtherCloneCodeBasicList = list;
        },
         // ä»Žå…¶ä»–编码规则中克隆码段信息
        saveOtherCodeBasic(){
          let oid = this.selectionList[0].oid;
          let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
          if(fromDialogPkCodebasic.length < 0){
            this.$message.warning("请选择码段数据!");
            return;
          }
          let res = fromDialogPkCodebasic.filter((item) => {
            return item.pkCodeRule == oid;
          });
          if(res != ''){
            this.$message.warning("需要克隆的编码规则与被克隆的编码规则相同!");
            return;
          }
          //console.log(res);
          let oidArr = '';
          fromDialogPkCodebasic.forEach((item) =>{
            oidArr = oidArr+","+item.oid;
          })
          let data = {
            "pkCodeRule": oid,
            "oidArr": oidArr,
          }
          //console.log(data);
          cloneCodeBasic(data).then(() => {
            this.cloneOtherCodeRuleSettingBox = false;
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          }, error => {
            window.console.log(error);
          });
        },
        // æ¸…空码值
        clearAllCodeSec(){
          if(this.selectionList.length == 0){
            this.$message.warning("没有选择数据!");
            return;
          }
          if(this.selectionList.length != 1){
          this.$message.warning("每次只能选择一条数据!");
          return;
        }
        localStorage.setItem("cloneOid",this.selectionList[0].oid)
        this.cloneSettingBox = true;
          let currentData = this.selectionList[0];
          this.$confirm("确定要清空码值?如果清空将不能被恢复,请谨慎!", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
            })
            .then(() => {
              let ts = new Date(currentData.ts).getTime();
              return clearAllCode({"oid": currentData.oid,"ts": ts});
            })
            .then(() => {
              this. this.onLoad(this.page);
              this.$message({
                type: "success",
                message: "操作成功!"
              });
            });
      },
      // æ·»åŠ 
      rowSave(row, done, loading) {
        add(row).then(() => {
@@ -2180,6 +2232,7 @@
      // ç¼–码规则当前选中行变化的时候触发
      selectionChange(list) {
        this.selectionList = list;
          //console.log("selectionChange====="+list);
        this.$refs.crud.setCurrentRow(this.selectionList [list.length-1]);
        if(this.selectionList.length > 0){
          this.currentCodeRuleOid = this.selectionList[list.length-1].oid;
@@ -2211,7 +2264,7 @@
          this.loading = false;
          this.loadBasic(this.data[0])
          this.$nextTick(() => {
            this.$refs.crud.toggleRowSelection(this.data[0]);
              //this.$refs.crud.toggleRowSelection(this.data[0]);
            this.$refs.crud.setCurrentRow(this.data[0]);
          })
          this.selectionList = data.records[0];
@@ -2226,7 +2279,8 @@
        if(condition === 'attr'){
          this.isShowSelectAttrOption = true;
        }else if(condition === 'value'){
          this.isShowformulaEdit = true;
            //打开公式编辑框,第二层嵌套对话框
            this.$refs.formulaEditor.isShowformulaEdit = true;
        }else if(condition === 'parentClassifySecOid'){
          this.isShowParentClassifyOption = true;
        }else if(condition === 'referBtmId'){
@@ -2253,16 +2307,20 @@
          this.form.referBtmId = '';
        }
      },
        // è¡¥ä½æ—¶çš„字符,实现可输可选
        inputSelectBlur(e){
          if (e.target.value) {
            this.form.codeFillSeparatorSelect = e.target.value;
          }
        },
      // ç æ®µç±»åž‹æ”¹å˜æ—¶ï¼Œå¢žåŠ å¯¹åº”çš„form表单中的属性
      changeSectypeFormItems(row){     
        console.log(row);
          //console.log(row);
        if(this.sectypeList.length==0){
          this.loadCodeSecType();
        }
        if(row != null){
          this.form = {};
          this.form = Object.assign({},this.form,{
            this.form = {
              oid: row.oid,
              id: row.id, //编号,
              name: row.name,//名称
@@ -2275,10 +2333,8 @@
              componentCodeFlag: row.componentCodeFlag=='true' ?  true:false,//是否参与编码
              pkCodeRule: row.pkCodeRule, //所属编码规则
            }
          );
        }else {
          this.form = {
            oid: this.form.oid,
            id: this.form.id, //编号
            name: this.form.name, //名称
            secType: this.form.secType, //码段类型
@@ -2312,11 +2368,11 @@
          //流水码段
          this.form = Object.assign({}, this.form,{
            codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'', //码段的长度
            serialStart: row!=null&&row.serialStart != '' ? row.serialStart:'1',  //流水号起始值
            serialStep: row!=null&&row.serialStep != '' ? row.serialStep:'1',   //流水的步长
              serialStart: row!=null&&row.serialStart != '' ? row.serialStart:1,  //流水号起始值
              serialStep: row!=null&&row.serialStep != '' ? row.serialStep:1,   //流水的步长
            codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_right', //编码补位方式
            codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:'0',    //补位时的字符,选中的下拉框的下标
            codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'0',          //补位时的字符
              codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,    //补位时的字符,选中的下拉框的下标
              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:0,          //补位时的字符
            codeFillLength: row!=null&&row.codeFillLength != '' ? row.codeFillLength:'',              //填充长度
            codeFillLimit: row!=null&&row.codeFillLimit != '' ? row.codeFillLimit:'',               //流水上限
            codeFillFlag: row!=null&&row.codeFillFlag != '' ? row.codeFillFlag=='true' ?  true:false :false,      //流水是否补码
@@ -2349,6 +2405,7 @@
            codeDateFormatStr:  row!=null&&row.codeDateFormatStr != '' ? row.codeDateFormatStr:'',   //日期格式
          });
        }else if(this.form.secType==='codeclassifysec'){
            //console.log(this.form);
          //分类码段
          this.form = Object.assign({}, this.form,{
            codeSecLengthType: row!=null&&row.codeSecLengthType != '' ? row.codeSecLengthType:'code_sec_length_variable',    //码段长度类型
@@ -2363,7 +2420,7 @@
          this.form = Object.assign({}, this.form,{
            codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',             //码段的长度
            codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_right', //编码部位方式,枚举查询
            codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:'0',  //选中的补位时的字符的下标
              codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,  //选中的补位时的字符的下标
            codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'', //补位时的字符,可输可选查询
          });
          this.loadCodeFillType();
@@ -2411,12 +2468,56 @@
        })
      },
      
    }
};
</script>
<style>
<style scope>
  .code-rule-crud > .avue-crud__search ,.code-basic-crud > .avue-crud__search {
    margin-bottom: -15px;
  }
  .code-rule-crud > .avue-crud__pagination {
    padding: 14px 0 2px 20px;
  }
  .clone-input-textarea > .el-form-item__content {
    width: 495px;
  }
  .clone-avue-crud > .el-card> .el-card__body > .avue-crud__menu {
    display: none!important;
  }
  .fixed-avue-crud > .el-card> .el-card__body > .avue-crud__menu {
    display: none!important;
  }
  .other-clone-codebasic-crud > .el-card> .el-card__body > .avue-crud__menu {
    display: none!important;
  }
  .other-clone-coderule-crud > .el-card> .el-card__body > .avue-crud__menu {
    display: none!important;
  }
  .el-table--small .el-table__cell {
    padding: 3px 0;
  }
  .classify_value_box > .el-scrollbar {
    height: 95%;
  }
  .basic-container > .el-card  > .el-card__body {
    margin: -10px 0;
  }
  .code-basicsec-container{
    padding: 1px 6px;
  }
  .el-divider--horizontal {
      margin-top: 19px !important;
@@ -2445,38 +2546,6 @@
  .el-input-number >.el-input > .el-input__inner {
    width:120px;
  }
  .formula-editor{
    margin-top: -15px;
    margin-left: 2vw;
    /*设置弹性盒子*/
    display: flex;
    /*子元素以竖列排列,一共有6列*/
    flex-direction:column;
    width: 360px;
    height: 285px;
    /*左右均匀排列*/
    justify-content: space-around;
    /*上下均匀排列*/
    align-items: center;
  }
  .one{
    display: flex;
    /*以行排列*/
    flex-direction: row;
    width: 296px;
    height: 60px;
    justify-content: space-between;
    align-items: center;
    }
  .formula-editor-btn-sm {
    width: 72px;
    height: 45px;
    background: rgb(153, 214, 240);
    border-radius: 10%;
  }
  
  .el-col>.el-card > .el-card__header {
@@ -2514,4 +2583,5 @@
    margin-bottom: 8px;
 }
</style>
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -41,7 +41,7 @@
     * nacos dev åœ°å€
     */
    //String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
    String NACOS_DEV_ADDR = "192.168.93.167:38848";
    String NACOS_DEV_ADDR = "192.168.93.183:38848";
    /**
     * nacos prod åœ°å€
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
@@ -19,7 +19,7 @@
    /**
     * åˆ†ç±»ç æ®µä¸»é”®
     */
    private String codeclassifysecoid;
    private String codeClassifySecOid;
    /**
     * åˆ†ç±»ç æ®µä¸»é”®æ˜¾ç¤ºæ–‡æœ¬
@@ -28,26 +28,26 @@
    /**
     * ç å€¼åºå·
     */
    private Integer ordernum;
    private Integer orderNum;
    /**
     * ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    private String parentclassifyvalueoid;
    private String parentClassifyValueOid;
    /**
     * èŽ·å– åˆ†ç±»ç æ®µä¸»é”®
     */
    public String getCodeclassifysecoid (){
        return codeclassifysecoid;
    public String getCodeClassifySecOid (){
        return codeClassifySecOid;
    }
    /**
     * è®¾ç½® åˆ†ç±»ç æ®µä¸»é”®
     */
    public void setCodeclassifysecoid (String codeclassifysecoid){
        this.codeclassifysecoid = codeclassifysecoid;
    public void setCodeClassifySecOid (String codeClassifySecOid){
        this.codeClassifySecOid = codeClassifySecOid;
    }
    /**
@@ -66,39 +66,39 @@
    /**
     * èŽ·å– ç å€¼åºå·
     */
    public Integer getOrdernum (){
        return ordernum;
    public Integer getOrderNum (){
        return orderNum;
    }
    /**
     * è®¾ç½® ç å€¼åºå·
     */
    public void setOrdernum (Integer ordernum){
        this.ordernum = ordernum;
    public void setOrderNum (Integer orderNum){
        this.orderNum = orderNum;
    }
    /**
     * èŽ·å– ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    public String getParentclassifyvalueoid (){
        return parentclassifyvalueoid;
    public String getParentClassifyValueOid (){
        return parentClassifyValueOid;
    }
    /**
     * è®¾ç½® ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    public void setParentclassifyvalueoid (String parentclassifyvalueoid){
        this.parentclassifyvalueoid = parentclassifyvalueoid;
    public void setParentClassifyValueOid (String parentClassifyValueOid){
        this.parentClassifyValueOid = parentClassifyValueOid;
    }
    @Override
    public String toString() {
        return "CodeClassifyValueDTO{" +
        "codeclassifysecoid='" + codeclassifysecoid +"',"+
        "codeClassifySecOid='" + codeClassifySecOid +"',"+
        "codeclassifysecoidName='" + codeclassifysecoidName +"'," +
        "ordernum='" + ordernum +"',"+
        "parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
        "orderNum='" + orderNum +"',"+
        "parentClassifyValueOid='" + parentClassifyValueOid +"',"+
        "}" + super.toString();
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyValueVO.java
@@ -18,7 +18,7 @@
    /**
    * åˆ†ç±»ç æ®µä¸»é”®
    */
    private String codeclassifysecoid;
    private String codeClassifySecOid;
    /**
    * åˆ†ç±»ç æ®µä¸»é”®æ˜¾ç¤ºæ–‡æœ¬
@@ -28,12 +28,12 @@
    /**
    * ç å€¼åºå·
    */
    private Integer ordernum;
    private Integer orderNum;
    /**
    * ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
    */
    private String parentclassifyvalueoid;
    private String parentClassifyValueOid;
    /**
     * åˆ†ç±»ç å€¼ä¸­çš„编号
@@ -48,15 +48,15 @@
    /**
     * èŽ·å– åˆ†ç±»ç æ®µä¸»é”®
     */
    public String getCodeclassifysecoid (){
        return codeclassifysecoid;
    public String getCodeClassifySecOid (){
        return codeClassifySecOid;
    }
    /**
    * è®¾ç½® åˆ†ç±»ç æ®µä¸»é”®
    */
    public void setCodeclassifysecoid (String codeclassifysecoid){
        this.codeclassifysecoid = codeclassifysecoid;
    public void setCodeClassifySecOid (String codeclassifysecoid){
        this.codeClassifySecOid = codeclassifysecoid;
    }
    /**
     * èŽ·å–åˆ†ç±»ç æ®µä¸»é”®æ˜¾ç¤ºæ–‡æœ¬
@@ -74,28 +74,28 @@
    /**
     * èŽ·å– ç å€¼åºå·
     */
    public Integer getOrdernum (){
        return ordernum;
    public Integer getOrderNum (){
        return orderNum;
    }
    /**
    * è®¾ç½® ç å€¼åºå·
    */
    public void setOrdernum (Integer ordernum){
        this.ordernum = ordernum;
    public void setOrderNum (Integer ordernum){
        this.orderNum = ordernum;
    }
    /**
     * èŽ·å– ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    public String getParentclassifyvalueoid (){
        return parentclassifyvalueoid;
    public String getParentClassifyValueOid (){
        return parentClassifyValueOid;
    }
    /**
    * è®¾ç½® ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
    */
    public void setParentclassifyvalueoid (String parentclassifyvalueoid){
        this.parentclassifyvalueoid = parentclassifyvalueoid;
    public void setParentClassifyValueOid (String parentClassifyValueOid){
        this.parentClassifyValueOid = parentClassifyValueOid;
    }
    @Override
@@ -122,10 +122,10 @@
    @Override
    public String toString() {
        return "CodeClassifyValueVO{" +
                "codeclassifysecoid='" + codeclassifysecoid + '\'' +
                "codeClassifySecOid='" + codeClassifySecOid + '\'' +
                ", codeclassifysecoidName='" + codeclassifysecoidName + '\'' +
                ", ordernum=" + ordernum +
                ", parentclassifyvalueoid='" + parentclassifyvalueoid + '\'' +
                ", orderNum=" + orderNum +
                ", parentClassifyValueOid='" + parentClassifyValueOid + '\'' +
                ", id='" + id + '\'' +
                ", name='" + name + '\'' +
                "} " + super.toString();
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -81,7 +81,7 @@
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    @DeleteMapping( "/deleteData")
    public R delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
    public R delCodeClassifyValue(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO) {
        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
    }
@@ -130,7 +130,7 @@
            CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
            dtoList.add(codeFixedValueDTO);
        }
        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
        String codeclassifysecoid = (String) param.get("codeClassifySecOid");
        VciBaseUtil.alertNotNull(dtoList,"码值集合");
        if (CollectionUtils.isEmpty(dtoList)){
            return R.success("");
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -124,8 +124,12 @@
        if (CollectionUtils.isEmpty(deleteList)){
            return true;
        }
        boolean deletFlag = false;
        // 2、再删除基础码段
        boolean deletFlag = codeBasicSecMapper.deleteBatchIds(deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet())) > 0;
        Set<String> basicOids = deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
        if(basicOids.size()>0 || !Func.isEmpty(basicOids)){
            deletFlag = codeBasicSecMapper.deleteBatchIds(basicOids) > 0;
        }
        // 3、再根据删除固定码段,丛查询出来的基础码段中过滤出包含固定码段的记录
        List<CodeBasicSec> fixedSecList = deleteList.stream().filter(sec -> {
            return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
@@ -135,8 +139,11 @@
            Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeFixedValue> fixedValueS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
            Set<String> collectOid = fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet());
            if(collectOid.size()>0 || !Func.isEmpty(collectOid)){
            // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„id执行固定码段执行删除
            deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
                fixedValueMapper.deleteBatchIds(collectOid);
            }
        }
        // 4、再删除分类码段
        List<CodeBasicSec> classifySecList = deleteList.stream().filter(sec -> {
@@ -146,9 +153,12 @@
            // å°†è¦ä½œä¸ºåˆ é™¤æ¡ä»¶çš„值放在一个集合里面
            Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeClassifyValue> fixedValueS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            List<CodeClassifyValue> classifyValues = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„主键id执行固定码段执行删除
            deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
            Set<String> codeclassifyOids = classifyValues.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet());
            if(codeclassifyOids.size()>0 || !Func.isEmpty(codeclassifyOids)){
                fixedValueMapper.deleteBatchIds(codeclassifyOids);
            }
        }
        return deletFlag;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -4,9 +4,11 @@
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.entity.CodeClassifyValue;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
import com.vci.ubcs.code.service.ICodeBasicSecService;
import com.vci.ubcs.code.service.ICodeClassifyValueService;
@@ -19,6 +21,7 @@
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -78,12 +81,13 @@
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"需要添加的数据对象");
        //添加对码值子父级的判断
        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
            String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
            String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentClassifyValueOid())){
            String parentclassifyvalueoid = codeClassifyValueDTO.getParentClassifyValueOid();
            String codeclassifysecoid = codeClassifyValueDTO.getCodeClassifySecOid();
            CodeClassifyValue parentDO = codeClassifyValueMapper.selectById(parentclassifyvalueoid);
            if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
                throw new VciBaseException("不允许在父码值中直接添加子码值");
@@ -92,6 +96,16 @@
        //将DTO转换为DO
        CodeClassifyValue codeClassifyValueDO = new CodeClassifyValue();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
        //填充一些默认值
        codeClassifyValueDO.setOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setRevisionOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setNameOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setBtmname(MdmBtmTypeConstant.CODE_CLASSIFY_VALUE);
        codeClassifyValueDO.setTs(new Date());
        codeClassifyValueDO.setCreateTime(new Date());
        codeClassifyValueDO.setCreator(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifyTime(new Date());
        //查询
        List<CodeClassifyValue> existList = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query()
            .lambda().eq(CodeClassifyValue::getCodeClassifySecOid, codeClassifyValueDO.getCodeClassifySecOid())
@@ -114,6 +128,10 @@
        //将DTO转换为DO
        CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
        revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
        //填充一些默认值
        codeClassifyValueDO.setTs(new Date());
        codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifyTime(new Date());
        boolean resBoolean = codeClassifyValueMapper.updateById(codeClassifyValueDO) > 0;
        return resBoolean;
    }
@@ -203,7 +221,7 @@
        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"分类码段的码值数据对象",codeClassifyValueDTO.getOid(),"分类码段的码值的主键");
        CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
        R baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
        if(baseResult.isSuccess()) {
        if(!baseResult.isSuccess()) {
            //找下级的,这个是可以删除的时候R
            List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
            if (!CollectionUtils.isEmpty(childrenOids)) {
@@ -285,7 +303,7 @@
                    return dto.getOid().equals(value.getOid());
                }).collect(Collectors.toList());
                collect.forEach(ccv -> {
                    ccv.setOrderNum(dto.getOrdernum());
                    ccv.setOrderNum(dto.getOrderNum());
                    ccv.setId(dto.getId());
                    ccv.setName(dto.getName());
                    updateList.add(ccv);
@@ -335,9 +353,8 @@
        List<String> oids = codeBasicSecService.getOidByCodeclassifysecOid(conditionMap.get("codeclassifysecoid"));
        LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
            .lambda().in(CodeClassifyValue::getCodeClassifySecOid,oids)
            .orderByDesc(CodeClassifyValue::getOrderNum);
            .orderByAsc(CodeClassifyValue::getOrderNum);
        return codeClassifyValueMapper.selectList(wrapper);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
@@ -204,7 +204,7 @@
    <select id="getOidByCodeclassifysecOid" resultType="java.lang.String">
        SELECT OID
        FROM PLATFORMBTM_CODEBASICSEC START WITH OID = #{codeClassifySecOid}
        FROM PL_CODE_BASICSEC START WITH OID = #{codeClassifySecOid}
        CONNECT BY PRIOR PARENTCLASSIFYSECOID = OID
    </select>