ludc
2023-04-26 7f0570d20aac189f1b170942bd7100b281a1c824
Source/UBCS-WEB/src/views/code/code.vue
@@ -5,52 +5,52 @@
    <basic-container>
      <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">编码规则</p>
      <avue-crud :option="optionRule"
                :table-loading="loading"
                :data="data"
                :page.sync="page"
                :permission="permissionList"
                v-model="form"
                ref="crud"
                :before-open="beforeOpen"
                @cell-click="loadBasic"
                @row-update="rowUpdate"
                @row-save="rowSave"
                @search-change="searchChange"
                @search-reset="searchReset"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
                @on-load="onLoad">
        :table-loading="loading"
        :data="data"
        :page.sync="page"
        :permission="permissionList"
        v-model="ruleForm"
        ref="crud"
        :before-open="beforeOpen"
        @row-click="codeRuleRowClick"
        @row-update="rowUpdate"
        @row-save="rowSave"
        @search-change="searchChange"
        @search-reset="searchReset"
        @selection-change="selectionChange"
        @current-change="currentChange"
        @size-change="sizeChange"
        @refresh-change="refreshChange"
        @on-load="onLoad">
        <!-- 表格内操作按钮 -->
        <template slot="menu" slot-scope="scope">
          <el-button type="text"
                    size="small"
                    icon="el-icon-edit"
                    v-show="scope.row.lcStatus=='Editing' ? true:false"
                    plain
                    @click="openEdit(scope.row)">编 辑
              size="small"
              icon="el-icon-edit"
              v-show="scope.row.lcStatus=='Editing' ? true:false"
              plain
              @click="openEdit(scope.row)">编 辑
          </el-button>
          <el-button type="text"
                    size="small"
                    icon="el-icon-position"
                    v-show="scope.row.lcStatus=='Editing' ? true:false"
                    plain
                    @click="enableOrDeactivatse(scope.row.oid,'release')">发 布
            size="small"
            icon="el-icon-position"
            v-show="scope.row.lcStatus=='Editing' ? true:false"
            plain
            @click="enableOrDeactivatse(scope.row.oid,'release')">发 布
          </el-button>
          <el-button type="text"
                    size="small"
                    v-show="scope.row.lcStatus=='Released' ? true:false"
                    icon="el-icon-video-pause"
                    plain
                    @click="enableOrDeactivatse(scope.row.oid,'disable')">停 用
            size="small"
            v-show="scope.row.lcStatus=='Released' ? true:false"
            icon="el-icon-video-pause"
            plain
            @click="enableOrDeactivatse(scope.row.oid,'disable')">停 用
          </el-button>
          <el-button type="text"
                    size="small"
                    v-show="scope.row.lcStatus=='Disabled' ? true:false"
                    icon="el-icon-video-play"
                    plain
                    @click="enableOrDeactivatse(scope.row.oid,'enable')">启 用
            size="small"
            v-show="scope.row.lcStatus=='Disabled' ? true:false"
            icon="el-icon-video-play"
            plain
            @click="enableOrDeactivatse(scope.row.oid,'enable')">启 用
          </el-button>
        </template>
        <!-- 表格左上方按钮区域 -->
@@ -86,110 +86,798 @@
      </avue-crud>
    </basic-container>
    <!-- 对话框 -->
    <!-- 编码规则相关对话框 -->
    <el-dialog title="编码规则使用范围"
                append-to-body
                :visible.sync="codeRangeSettingBox"
                width="800px">
        append-to-body
        :visible.sync="codeRangeSettingBox"
        width="800px">
      <avue-crud
              :option="dialogeOption"
              :table-loading="dialogLoading"
              :data="useRangeData"
              @refresh-change="refreshUseRangeChange"></avue-crud>
        :option="dialogeOption"
        :table-loading="dialogLoading"
        :data="useRangeData"
        @refresh-change="refreshUseRangeChange">
      </avue-crud>
    </el-dialog>
    <!-- 克隆对话框 -->
    <!--  编码规则相关克隆对话框 -->
    <el-dialog title="克隆编码规则"
                append-to-body
                :visible.sync="cloneSettingBox"
                width="800px">
      append-to-body
      :visible.sync="cloneSettingBox"
      width="800px">
      <clone-code></clone-code>
    </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"
      <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">码段管理</p>
      <avue-crud :option="optionBasic"
        ref="crudBasic"
        :table-loading="loadingBasic"
        :data="basicData"
        :permission="permissionList"
        @selection-change="selectionBasicChange"
        @refresh-change="refreshChangeBasicSec">
        <!-- 基础码段表格内操作按钮 -->
        <template slot="menu" slot-scope="scope">
      <!-- 基础码段表格内操作按钮 -->
      <template slot="menu" slot-scope="scope">
        <el-button
          type="text"
          size="small"
          icon="el-icon-view"
          v-show="currentRuleLcStatus != 'Editing'"
          plain
          @click="openBasicDialog('view',scope.row)">查看
        </el-button>
        <el-button
          type="text"
          size="small"
          icon="el-icon-edit"
          v-show="currentRuleLcStatus === 'Editing'"
          plain
          @click="openBasicDialog('edit',scope.row)">编辑
        </el-button>
        <el-button
          type="text"
          size="small"
          icon="el-icon-setting"
          v-show="scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec'"
          plain
          @click="openBasicSecCodeValueMgr(scope.row)">码值管理
        </el-button>
        <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>
          <el-button type="text"
                    size="small"
                    icon="icon-shangyi"
                    v-show="scope.row.lcStatus != 'Editing' ? true:false"
                    plain
                    @click="openEdit(scope.row)">查 看
          </el-button>
      <!-- 基础码段表格左上方按钮区域 -->
      <template slot="menuLeft" slot-scope="scope">
        <el-button type="primary"
                  size="small"
                  icon="el-icon-plus"
                  @click="addBasicCodeSec">新 增
        </el-button>
        <el-button type="danger"
                  size="small"
                  icon="el-icon-delete"
                  plain
                  @click="deleteBasicCode(scope.row)">删 除
        </el-button>
      </template>
          <el-button type="text"
                    size="small"
                    icon="icon-shangyi"
                    v-show="scope.row.lcStatus == 'Editing' ? true:false"
                    plain
                    @click="openEdit(scope.row)">编 辑
          </el-button>
          <el-button type="text"
                    size="small"
                    icon="icon-shangyi"
                    v-show="scope.row.secType == 'codeclassifysec' || scope.row.secType == 'codefixedsec' ? true:false"
                    plain
                    @click="openEdit(scope.row)">码值管理
          </el-button>
          <el-button type="text"
                    size="small"
                    icon="icon-shangyi"
                    v-show="scope.row.orderNum > 1 ? true:false"
                    plain
                    @click="upOrderNum(scope.row)">上 移
          </el-button>
          <el-button type="text"
                    size="small"
                    icon="icon-xiayi"
                    plain
                    @click="downOrderNum(scope.row)">下 移
          </el-button>
        </template>
        <!-- 基础码段表格左上方按钮区域 -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button type="primary"
                    size="small"
                    icon="el-icon-plus"
                    @click="addBasicCodeSec">新 增
          </el-button>
          <el-button type="danger"
                    size="small"
                    icon="el-icon-delete"
                    plain
                    @click="deleteBasicCode(scope.row)">删 除
          </el-button>
        </template>
    </avue-crud>
      </avue-crud>
    </basic-container>
     <!-- 基础编码规则对话框 @closed="closeRefresh"-->
     <el-dialog title="添加码段信息"
                    append-to-body
                    :visible.sync="addBasicCodeSettingBox"
                    width="780px"
                    style=" margin-top: -8vh;"
                    destroy-on-close>
        <add-basic-code ref='addBasicChild'></add-basic-code>
      <!-- 码段码值管理对话框 -->
      <el-dialog title="码段码值管理"
        :visible.sync="isShowBasicSecCodeValueMgr"
        :width="isShowFixedForm ? '68vw':'50vw'"
        append-to-body
        style="height: 116vh; margin-top: -10vh;"
        @close="clearFixedOrClassifyForm('close')"
        destroy-on-close>
        <!-- 分类码段码值管理 -->
        <el-row v-show="!isShowFixedForm">
          <el-col :span="11">
            <basic-container>
              <div class="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"
                        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>
              </div>
            </basic-container>
          </el-col>
          <el-col :span="13">
            <basic-container>
              <div class="box" style="height:65vh; margin-bottom:-40px">
                <el-form>
                  <el-form-item label="码值:" :label-width="50" required>
                    <el-input style="width: 18vw" v-model="codeClassifyForm.id"></el-input>
                  </el-form-item >
                  <el-form-item label="名称:" :label-width="50" required>
                    <el-input style="width: 18vw" v-model="codeClassifyForm.name"></el-input>
                  </el-form-item>
                </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>
              </div>
            </basic-container>
          </el-col>
        </el-row>
        <!-- 固定码段码值管理 -->
        <el-row v-show="isShowFixedForm">
          <el-col :span="15">
            <basic-container>
              <div class="box fixedbox" style="height:65vh; margin-bottom:-40px">
                <avue-crud
                  ref="crudFixedValue"
                  :data="fixedValueData"
                  :option="fixedValueOption"
                  :table-loading="fixedValueOptionLoading"
                  @row-click="selectedCodeValueRow">
                  <!-- 表格内按钮配置 -->
                  <template slot="menu" slot-scope="scope">
                    <el-button size="mini" type="text" icon="el-icon-arrow-up" @click="codeFixedValueOpetion('up',scope.row)">上移</el-button>
                    <el-button size="mini" type="text" icon="el-icon-arrow-down" @click="codeFixedValueOpetion('down',scope.row)">下移</el-button>
                    <el-button size="mini" type="text"icon="el-icon-minus" @click="codeFixedValueOpetion('remove',scope.row)">移除</el-button>
                  </template>
                </avue-crud>
              </div>
              <div style="margin-top:20px;">
                <el-button size="mini" type="primary" icon="el-icon-success" class="button" @click="saveCodeFixedValueOption">保存</el-button>
              </div>
            </basic-container>
          </el-col>
          <el-col :span="9">
            <basic-container>
              <div class="box" style="height: 65vh; margin-bottom:-40px; overflow:hidden;" >
                <div style="overflow-y:auto;height: 60vh;">
                  <el-form>
                    <el-form-item label="码值:" label-width="54px" required>
                      <el-input style="width: 19.5vw" v-model="codeFixdForm.id"></el-input>
                    </el-form-item >
                    <el-form-item label="描述:">
                      <el-input type="textarea" style="width: 20vw; "v-model="codeFixdForm.description"></el-input>
                    </el-form-item>
                  </el-form>
                </div>
              </div>
              <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
                <el-button :disabled="selectedFixedOrCodeclassifyValue!=''" size="mini" type="primary" icon="el-icon-circle-plus" class="button" @click="addCodeSecValue('codefixedsec')">添加</el-button>
                <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="success" plain plain icon="el-icon-edit-outline" class="button" @click="editCodeSecValue('codefixedsec')">修改</el-button>
                <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="danger" icon="el-icon-close" class="button"  @click="delCodeSecValue('codefixedsec')">删除</el-button>
                <el-button size="mini" type="warning" plain icon="el-icon-close" class="button" @click = "clearFixedOrClassifyForm('codefixedsec')">取消</el-button>
              </div>
            </basic-container>
          </el-col>
        </el-row>
      </el-dialog>
     <!-- 基础码段新增相关对话框 -->
     <el-dialog :title="basicSecDialogTitle"
        :visible.sync="addBasicCodeSettingBox"
        width="60vw"
        append-to-body
        style="height: 115vh; margin-top: -13vh; overflow: hidden"
        destroy-on-close
        @close="clearBasicAddForm">
        <!--  第一层对话框,添加码段信息对话框中的内容 -->
        <div class="total" style="overflow-y: auto; height: 70vh">
          <el-form :model="form" :rules="formRules" ref="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>
              <el-form-item label="码段名称:" :label-width="leftFormLabelWidth" required prop="name">
                <el-input v-model="form.name" :readonly="basicSecOnlyRead"></el-input>
              </el-form-item>
              <el-form-item label="码段类型" :label-width="leftFormLabelWidth" required prop="secType">
                <el-select v-model="form.secType" placeholder="请选择" @change="changeSectypeFormItems(null)" :disabled="basicSecOnlyRead">
                  <el-option
                    v-for="item in sectypeList"
                    :key="item.dictValue"
                    :label="item.dictValue"
                    :value="item.dictKey">
                  </el-option>
                </el-select>
              </el-form-item>
              <el-form-item label="描述:" :label-width="leftFormLabelWidth">
                <el-input type="textarea" v-model="form.description" :readonly="basicSecOnlyRead"></el-input>
              </el-form-item>
              <el-form-item label="是否流水依赖:" :label-width="leftFormLabelWidth">
                <el-switch v-model="form.serialDependFlag" :disabled="basicSecOnlyRead"></el-switch>
                <el-input-number v-show="form.serialDependFlag" v-model="form.serialDependOrder" controls-position="right" :readonly="basicSecOnlyRead"></el-input-number>
              </el-form-item>
              <el-form-item label="是否为空:" :label-width="leftFormLabelWidth">
                <el-switch v-model="form.nullableFlag"  :disabled="basicSecOnlyRead"></el-switch>
              </el-form-item>
            </span>
            <el-divider direction="vertical"></el-divider>
            <span class="right">
              <!-- 固定码段 -->
              <div v-show="form.secType==='codefixedsec' ? true:false">
                <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required prop="codeSecLengthType">
                  <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                    v-for="item in codeSecLengthType"
                    :key="item.dictValue"
                    :label="item.dictValue"
                    :value="item.dictKey">
                  </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>
              </div>
              <!-- 属性码段 -->
              <div v-show="form.secType==='codeattrsec' ? true:false">
                <el-form-item label="属性:" :label-width="rightFormLabelWidth" required prop="referAttributeName">
                  <el-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                    v-model="form.referAttributeName"
                    @focus="openAttrSelectOrGetValue('attr')"
                    :disabled="basicSecOnlyRead">
                    <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('attr')" style="cursor: pointer;"></i>
                  </el-input>
                </el-form-item>
                <el-form-item label="属性所在分类:" :label-width="rightFormLabelWidth">
                  <el-input
                    v-model="form.referCodeClassifyOidName"
                    disabled>
                </el-input>
                </el-form-item>
                <el-form-item label="取值规则:" :label-width="rightFormLabelWidth">
                  <el-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                    v-model="form.getValueClass"
                    :disabled="basicSecOnlyRead"
                    @focus="openAttrSelectOrGetValue('value')">
                    <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('value')" style="margin-right: 5px;cursor: pointer;"></i>
                  </el-input>
                </el-form-item>
              </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>
                <el-form-item label="流水号的起始值:" :label-width="rightFormLabelWidth" prop="serialStart">
                  <el-input v-model="form.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>
                <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required prop="codeFillType">
                  <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option label="左补位" value="codeattrsec"
                        v-for="item in codeFillType"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                    </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-option
                        v-for="item in codeFillSeparator"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                    </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>
                <el-form-item label="流水上限:" :label-width="rightFormLabelWidth" required prop="codeFillLimit">
                  <el-input v-model="form.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>
                </el-form-item>
                <el-form-item label="自定义的流水算法:" :label-width="rightFormLabelWidth">
                  <el-input v-model="form.customCodeSerialClass" :readonly="basicSecOnlyRead"></el-input>
                </el-form-item>
              </div>
              <!-- 层级码段 -->
              <div v-show="form.secType==='codelevelsec' ? true:false">
                <el-form-item label="层级类型:" :label-width="rightFormLabelWidth" required prop="codeLevelType">
                  <el-select v-model="form.codeLevelType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeLevelType"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                      </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>
                <el-form-item label="字符截取类型:" :label-width="rightFormLabelWidth" required prop="valueCutType">
                  <el-select v-model="form.valueCutType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                      v-for="item in codeCutType"
                      :key="item.dictValue"
                      :label="item.dictValue"
                      :value="item.dictKey">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="取值类型:" :label-width="rightFormLabelWidth">
                  <el-select v-model="form.codeGetValueType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                      v-for="item in codeGetValueType"
                      :key="item.dictValue"
                      :label="item.dictValue"
                      :value="item.dictKey">
                    </el-option>
                  </el-select>
                </el-form-item>
              </div>
              <!-- 引用码段 -->
              <div v-show="form.secType==='coderefersec' ? true:false">
                <el-form-item label="参照引用的业务类型:" label-width="152px" required prop="referBtmId">
                  <el-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                    v-model="form.referBtmId"
                    @focus="openAttrSelectOrGetValue('referBtmId')"
                    :disabled="basicSecOnlyRead">
                    <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-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                    v-model="form.referConfig"
                    @focus="openAttrSelectOrGetValue('referConfig')"
                    :disabled="basicSecOnlyRead">
                    <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('referConfig')" style="margin-right: 5px;cursor: pointer;"></i>
                  </el-input>
                </el-form-item>
              </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>
              </div>
              <!-- 分类码段 -->
              <div v-show="form.secType==='codeclassifysec' ? true:false">
                <el-form-item label="码段长度类型:" :label-width="rightFormLabelWidth" required prop="codeSecLengthType">
                  <el-select v-model="form.codeSecLengthType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeSecLengthType"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                    </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>
                <el-form-item label="是否自动分配分类值:" :label-width="rightFormLabelWidth">
                  <el-switch v-model="form.matchClassifyValueFlag" :disabled="basicSecOnlyRead"></el-switch>
                </el-form-item>
                <el-form-item label="父分类码段:" :label-width="rightFormLabelWidth">
                  <el-input
                    placeholder="请选择"
                    prefix-icon="el-icon-search"
                    readonly="true"
                    v-model="form.parentClassifySecOid"
                    @focus="openAttrSelectOrGetValue('parentClassifySecOid')"
                    :disabled="basicSecOnlyRead">
                    <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('parentClassifySecOid')" style="margin-right: 5px;cursor: pointer;"></i>
                  </el-input>
                </el-form-item>
              </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>
                <el-form-item label="编码补位方式:" :label-width="rightFormLabelWidth" required prop="codeFillType">
                  <el-select v-model="form.codeFillType" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeFillType"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="补位时的字符:" :label-width="rightFormLabelWidth">
                  <el-select v-model="form.codeFillSeparatorSelect" placeholder="请选择" :disabled="basicSecOnlyRead">
                    <el-option
                        v-for="item in codeFillSeparator"
                        :key="item.dictValue"
                        :label="item.dictValue"
                        :value="item.dictKey">
                    </el-option>
                  </el-select>
                </el-form-item>
              </div>
            </span>
          </el-form>
        </div>
        <!-- 第一层对话框的按钮和,线条 -->
        <el-divider direction="horizontal"></el-divider>
        <div slot="footer" class="dialog-footer">
          <el-button @click="addBasicCodeSettingBox = false">取 消</el-button>
          <el-button type="primary" @click="saveBasicCode">保 存</el-button>
          <el-button @click="addBasicCodeSettingBox = false" v-show="showbtn">取 消</el-button>
          <el-button type="primary" @click="saveOrEditBasicCode" v-show="showbtn">保 存</el-button>
        </div>
        <!--  第二层对话框,属性码段,属性选择弹窗 -->
        <el-dialog title="为【属性】选取值"
          append-to-body
          :visible.sync="isShowSelectAttrOption"
          width="78%"
          style="height: 100%; margin-top: -8vh; overflow: hidden">
          <div style="overflow-y: auto; height: 60vh">
            <el-row>
              <!-- 左侧主题库分类树 -->
              <el-col :span="5">
                <div class="box">
                  <el-scrollbar style="height: auto; border-bottom-right-radius:8px ">
                    <basic-container>
                      <div class="abox">
                        <avue-tree :data="attrClassifyTreeData" :option="treeOption" @node-click="nodeClick"/>
                      </div>
                    </basic-container>
                  </el-scrollbar>
                </div>
              </el-col>
              <!-- 右侧表格显示区域 -->
              <el-col span="19">
                <basic-container>
                  <div class="bbox">
                  <avue-crud
                    :data="selectattrData"
                    :option="attrOption"
                    :table-loading="selectAttrOptionLoading"
                    @search-change="selectAttrOptionSearchChange"
                    @search-reset="searchAttrReset"
                    @selection-change="selectionChangeAttr">
                  </avue-crud>
                  </div>
                </basic-container>
              </el-col>
            </el-row>
          </div>
          <div slot="footer" class="dialog-footer">
            <el-button @click="isShowSelectAttrOption = false">取 消</el-button>
            <el-button type="primary" @click="selectedListClassifyLinkAttr">确 定</el-button>
          </div>
        </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>
        <!-- 第二层对话框,为【父分类码段】选取值弹窗 -->
        <el-dialog title="为【父分类码段】选取值"
          append-to-body
          :visible.sync="isShowParentClassifyOption"
          width="65%"
          style="height: 150vh; margin-top: -13vh;"
          destroy-on-close>
          <avue-crud
            :page.sync="parentClassifyDataPage"
            ref="crudParentClassify"
            :option="parentClassifyParentOption"
            :table-loading="classifyDialogLoading"
            :data="parentClassifyData"
            @refresh-change="refreshParentClassifyDataChange"
            @search-change="parentClassifySearchChange"
            @search-reset="parentClassifySearchReset"
            @selection-change="parentClassifySelectionChange"
            @current-change="parentClassifyCurrentChange"
            @size-change="parentClassifySizeChange"
            @on-load="parentClassifyOnLoad">
          </avue-crud>
          <div slot="footer" class="dialog-footer">
            <el-button @click="isShowParentClassifyOption = false">取 消</el-button>
            <el-button type="primary" @click="saveSelectedParentClassify">保 存</el-button>
          </div>
        </el-dialog>
        <!-- 第二层对话框,为【参照引用的业务类型】选取值弹窗 -->
        <el-dialog title="为【参照引用的业务类型】选取值"
          append-to-body
          :visible.sync="isShowSelectReferBtmOption"
          width="65%"
          style="height: 150vh; margin-top: -13vh;"
          destroy-on-close>
          <avue-crud
            :page.sync="referBtmDataPage"
            ref="crudReferBtm"
            :option="referBtmOption"
            :table-loading="referBtmDialogLoading"
            :data="referBtmData"
            @refresh-change="referBtmDataChange"
            @search-change="referBtmSearchChange"
            @search-reset="referBtmSearchReset"
            @selection-change="referBtmSelectionChange"
            @current-change="referBtmCurrentChange"
            @size-change="referBtmSizeChange"
            @on-load="referBtmOnLoad">
          </avue-crud>
          <div slot="footer" class="dialog-footer">
            <el-button @click="isShowSelectReferBtmOption = false">取 消</el-button>
            <el-button type="primary" @click="saveSelectedreferBtm">保 存</el-button>
          </div>
        </el-dialog>
      </el-dialog>
  </basic-container>
@@ -198,15 +886,35 @@
<script>
  import { gridCodeRule, getDetail, add, update, remove, listUseRange, updateStatus } from "@/api/code/mdmrule";
  import { gridCodeBasicSec, downOrderNum, upOrderNum, deleteData, editSave, getObjectByOid, listDataByOids, refDataGrid} from "@/api/code/codebasic";
  import {
    gridCodeBasicSec,
    downOrderNum,
    upOrderNum,
    deleteData,
    editSave,
    getObjectByOid,
    listDataByOids,
    refDataGrid,
    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 optionBasic from "@/const/code/codebasic";
  import optionRule from "@/const/code/mdmrule";
  import attrOption from "@/const/code/selectAttrOptionDialog";
  import treeOption from "@/const/code/classifyTreeOptionDialog";
  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 {
    data() {
      return {
        form: {},
        ruleForm: {},
        query: {},
        loading: true,
        currentCodeRuleOid: '',
@@ -216,55 +924,556 @@
          total: 0
        },
        selectionList: [],
        //编码规则表格配置
        /*编码规则表格配置*/
        optionRule: optionRule,
        data: [],
        currentRuleLcStatus: '',
        /*克隆按钮对话框控制*/
        cloneSettingBox: false,
        optionBasic: optionBasic,
        optionBasic: optionBasic,
        /*使用范围对话框显示控制*/
        codeRangeSettingBox: false,
        useRangeData: [],
        dialogLoading: true,
        /*使用范围对话框配置*/
        dialogeOption: {
          height: 'auto',
          calcHeight: 30,
          tip: false,
          searchShow: false,
          searchMenuSpan: 6,
          border: true,
          index: true,
          disablePage:false,
          viewBtn: false,
          addBtn: false,
          menu: false,
          selection: false,
          dialogClickModal: false,
          align: 'center',
          dialogWidth: 400,
          column: [
            {
              label: "分类编号",
              prop: "id",
              span: 24
            },
            {
              label: "分类名称",
              prop: "name",
              span: 24,
            }
          ]
        },
        //基础码段展示
        /*基础码段相关数据*/
        basicData:[],
        loadingBasic: true,
        selectionBasicList: [],
        addBasicCodeSettingBox: false,
        /*使用范围对话框控制*/
        codeRangeSettingBox: false,
        useRangeData: [],
        dialogLoading: true,
        /*使用范围对话框*/
        dialogeOption: {
        height: 'auto',
        calcHeight: 30,
        tip: false,
        searchShow: false,
        searchMenuSpan: 6,
        border: true,
        index: true,
        disablePage:false,
        viewBtn: false,
        addBtn: false,
        menu: false,
        selection: false,
        dialogClickModal: false,
        align: 'center',
        dialogWidth: 400,
        column: [
          {
            label: "分类编号",
            prop: "id",
            span: 24
        showbtn: false, //基础码段新增是否显示基础码段
        basicSecDialogTitle: '', //基础码段第一层对话框标题
        basicSecOnlyRead: false, //新增基础码段表单是否只读
        /** 码值管理相关数据 */
        isShowBasicSecCodeValueMgr: false, //码段码值管理对话框
        codefixedsecOrCodeclassifysecOid: '', //存放基础码段点击码值管理时的当前行id,用于保存码值时使用
        selectedFixedOrCodeclassifyValue: '', //当前选中的码值数据
        //固定码段码值表单
        codeFixdForm: {
          codeFixedSecOid: "",
          description: "",
          id: "",
        },
        isShowFixedForm: true, //true显示固定码段码值管理界面,false显示分类码段码值管理界面
        fixedValueData: [], //固定码段码值表格数据
        fixedValueOption: fixedValueOption, //表格配置
        fixedValueOptionLoading: false,  //加载表格的动态效果
        fixedValueSelectList: [],  //固定码段码值当前选中的行
        //分类码段码值表单
        codeClassifyForm: {
          codeclassifysecoid: "",
          id: "",
          name: "",
          oid: "",
          parentclassifyvalueoid: "",
        },
        /* 为属性选取值窗口显示打开控制变量 */
        isShowSelectAttrOption: false,
        /* 为属性选值左侧树数据 */
        attrClassifyTreeData: [],
        treeOption: treeOption,
        currentSelectTreeData: '', //当前选中的树节点
        /* 为属性选值右侧表格相关数据 */
        attrOption: attrOption,
        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',
          },
          {
            label: "分类名称",
            prop: "name",
            span: 24,
            "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'
          },
        ],
        //本场景变量
        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, //父分类码段对话框显示控制
        classifyDialogLoading: true, //表格数据加载提示
        parentClassifyParentOption: parentClassifyParentOption,  //表格配置
        parentClassifyData: [], //表格数据
        //分页参数配置
        parentClassifyDataPage: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        parentClassifyQuery: {}, //查询条件
        parentClassifySelectionList: [], //当前选中行
        /** 参照引用的业务类型对话框相关数据 */
        isShowSelectReferBtmOption: false,   //对话框显示控制
        referBtmDialogLoading: true,   //表格数据加载提示
        referBtmDataPage: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        referBtmOption: referBtmOption, //表格配置
        referBtmData: [], //表格数据
        referBtmQuery: {}, //查询条件
        referBtmSelectionList: [], //当前选中行
        /** 基础码段新增表单 */
        form: {
          id: '', //编号
          name: '', //名称
          secType: 'codefixedsec', //码段类型
          description: '', //描述
          serialDependFlag: false, //是否流水依赖
          serialDependOrder: '', //流水依赖顺序
          nullableFlag: false, //是否为空
          displayFlag: false, //
          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' },
          ],
        },
        //枚举和可输可选查询
        sectypeList:[],    //码段类型
        codeSecLengthType:[],  //码段长度类型
        codeFillType:[],   //编码补位方式
        codeFillSeparator:[], //补位时的字符,可输可选内容
        codeLevelType:[],     //层级类型
        codeCutType:[],       //字符截取类型
        codeGetValueType:[],  //取值类型
        //表单元素标签宽度
        leftFormLabelWidth: '110px',
        rightFormLabelWidth: '150px',
      };
    },
    computed: {
@@ -279,7 +1488,388 @@
      },
    },
    methods: {
      /** 选中参照引用的业务类型,第二层嵌套对话框,及其相关方法  */
      saveSelectedreferBtm(){
        if(this.referBtmSelectionList.length != 1){
          this.$message.warning("只能选择一条数据!");
          return false;
        }
        //调用子组件并传递当前选中的参数值,实现回显
        this.form.referBtmId = this.referBtmSelectionList[0].id;
        this.form.referBtmName = this.referBtmSelectionList[0].name;
        //清空当前选中的行
        this.referBtmSelectionClear();
        this.isShowSelectReferBtmOption = false;
      },
      referBtmSearchReset() {
        this.referBtmQuery = {};
        this.referBtmOnLoad(this.referBtmDataPage);
      },
      referBtmSearchChange(params, done) {
        this.referBtmQuery = params;
        this.referBtmDataPage.currentPage = 1;
        this.referBtmOnLoad(this.page, params);
        done();
      },
      referBtmSelectionChange(list) {
        //console.log(list);
        this.referBtmSelectionList = list;
      },
      referBtmSelectionClear() {
        this.referBtmSelectionList = [];
        this.$refs.crudReferBtm.toggleSelection();
      },
      referBtmCurrentChange(currentPage){
        this.referBtmDataPage.currentPage = currentPage;
      },
      referBtmSizeChange(pageSize){
        this.referBtmDataPage.pageSize = pageSize;
      },
      refreshReferBtmDataChange() {
        this.referBtmOnLoad(this.referBtmDataPage, this.referBtmQuery);
      },
      //加载中参照引用的业务类型的数据
      referBtmOnLoad(page, params = {}) {
        this.referBtmDialogLoading = true;
        let oid = this.selectionList.length==0 ?  this.form.pkCodeRule:this.selectionList[0].oid;
        Object.assign(params,{pkCodeRule:oid})
        //接口还未提供,待更改
        refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
          //console.log(res.data);
          const data = res.data.data;
          this.referBtmDataPage.total = data.total;
          this.referBtmData = data.records;
          this.referBtmDialogLoading = false;
          this.referBtmSelectionClear();
        });
      },
      /** 父分类选择对话框,第二层嵌套对话框,及其相关方法 */
      // 保存当前父分类码段的选中行,并进行子组件回显
      saveSelectedParentClassify(){
        //console.log(this.parentClassifySelectionList.length);
        if(this.parentClassifySelectionList.length != 1){
          this.$message.warning("只能选择一条数据!");
          return false;
        }
        //调用子组件并传递当前选中的参数值,实现回显
        this.form.parentClassifySecOid = this.parentClassifySelectionList[0].id;
        this.form.parentClassifySecText = this.parentClassifySelectionList[0].name;
        //清空当前选中的行
        this.parentClassifySelectionClear();
        this.isShowParentClassifyOption = false;
      },
      parentClassifySearchReset() {
        this.parentClassifyQuery = {};
        this.parentClassifyOnLoad(this.parentClassifyDataPage);
      },
      parentClassifySearchChange(params, done) {
        this.parentClassifyQuery = params;
        this.parentClassifyDataPage.currentPage = 1;
        this.parentClassifyOnLoad(this.page, params);
        done();
      },
      parentClassifySelectionChange(list) {
        //console.log(this.parentClassifyCurrentChange);
        this.parentClassifySelectionList = list;
      },
      parentClassifySelectionClear() {
        this.parentClassifySelectionList = [];
        this.$refs.crudParentClassify.toggleSelection();
      },
      parentClassifyCurrentChange(currentPage){
        this.parentClassifyDataPage.currentPage = currentPage;
      },
      parentClassifySizeChange(pageSize){
        this.parentClassifyDataPage.pageSize = pageSize;
      },
      refreshParentClassifyDataChange() {
        this.parentClassifyOnLoad(this.parentClassifyDataPage, this.parentClassifyQuery);
      },
      parentClassifyOnLoad(page, params = {}) {
        this.classifyDialogLoading = true;
        let oid = this.selectionList.length==0 ? this.form.pkCodeRule:this.selectionList[0].oid;
        Object.assign(params,{pkCodeRule:oid})
        refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
          //console.log(res.data);
          const data = res.data.data;
          this.parentClassifyDataPage.total = data.total;
          this.parentClassifyData = data.records;
          this.classifyDialogLoading = false;
          this.parentClassifySelectionClear();
        });
      },
      /** 打开公式编辑框,第二层嵌套对话框,及其相关方法 */
      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
      nodeClick(data) {
        this.currentSelectTreeData = data;
        this.loadlistClassifyLinkAttr()
      },
      // 加载分类连接属性表格数据
      loadlistClassifyLinkAttr(){
        this.selectAttrOptionLoading = true;
        listClassifyLinkAttr({"page": 1,"limit": -1,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}).then(res=>{
         //console.log(res.data.data);
         //造假数据
         let dataInfo =[
          {"id":"address","name":"会议室地址","oid":"058D840D-1010-A7DE-7C52-B39C03CE89C1","attrLength":"150","description":"","attributeDataTypeText":"字符串"},
          {"id":"businesslicensetype","name":"营业执照类型","oid":"BDAC6D3E-1827-35A0-F3CA-0E58A43F6A07","attrLength":"255","description":"营业执照类型","attributeDataTypeText":"字符串"},
          {"id":"certificatenumber","name":"保密证编号","oid":"E2BC8332-A721-3713-26C3-C9F6340C2C1D","attrLength":"255","description":"保密证编号","attributeDataTypeText":"字符串"},
        ]
        this.selectattrData = dataInfo;
        this.selectAttrOptionLoading = false;
        })
      },
      // 点击搜索后触发该事件
      selectAttrOptionSearchChange(params, done) {
        this.query = params;
        console.log(params);  //这儿需要改
        this.loadlistClassifyLinkAttr({"page":1,"limit":-1 ,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid});
        done();
      },
      // 属性取值当前选中行发生变化时触发
      selectionChangeAttr(list){
        this.selectionChangeAttrList = list;
      },
      // 重置位属性选取值表格的搜索框之后的回调
      searchAttrReset() {
        this.loadlistClassifyLinkAttr()
      },
      // 为属性选取值之后的回显
      selectedListClassifyLinkAttr(){
        if(this.selectionChangeAttrList.length != 1){
          this.$message.warning("只能选择一条数据!");
          return false;
        }
        //调用子组件并传递当前选中的参数值,实现回显
        this.form = Object.assign({}, this.form, {
          referAttributeId:this.selectionChangeAttrList[0].id,
          referAttributeName:this.selectionChangeAttrList[0].name,
          referCodeClassifyOid: this.currentSelectTreeData.key,
          referCodeClassifyOidName: this.currentSelectTreeData.title,
        })
        this.isShowSelectAttrOption = false;
      },
      /** 基础码段表中的码值管理的相关方法 */
      // 码值管理弹窗控制
      openBasicSecCodeValueMgr(row){
        //当前为固定码段码值管理码值管理
        if(row.secType === "codefixedsec"){
          this.isShowFixedForm = true;
          this.loadFixedValueTableData(row);
        }else{
          //分类码段
          this.isShowFixedForm = false;
        }
        this.codefixedsecOrCodeclassifysecOid = row.oid;
        this.isShowBasicSecCodeValueMgr = true;
      },
      //加载固定码段码值表数据
      loadFixedValueTableData(row){
        this.fixedValueOptionLoading = true;
        gridCodeFixedValue(1, -1, {"codeFixedSecOid":row.oid}).then(res=>{
          this.fixedValueData = res.data.data.records;
          //console.log(this.fixedValueData);
          this.fixedValueOptionLoading = false;
        })
      },
      //加载分类码段码值管理页面tree数据
      //单击固定码段的码值表中行时触发的事件
      selectedCodeValueRow(row){
        //console.log(row);
        this.selectedFixedOrCodeclassifyValue = row;
        this.codeFixdForm.id = row.id;
        this.codeFixdForm.description = row.description;
        this.codeFixdForm.codeFixedSecOid = row.codefixedsecoid;
      },
      //新增码值
      addCodeSecValue(condition){
        if(condition === "codefixedsec"){
          if(this.codeFixdForm.id.trim() == ''){
            this.$message.warning("码值不能为空!");
            return;
          }
          this.codeFixdForm.codeFixedSecOid = this.codefixedsecOrCodeclassifysecOid;
          addSaveCodeFixedValue(this.codeFixdForm).then(() => {
            this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid});
            this.clearFixedOrClassifyForm('codefixedsec');
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          }, error => {
            window.console.log(error);
          });
        }else {
        }
      },
      // 清空码值表单
      clearFixedOrClassifyForm(condition){
        //点击取消时清空表单与当前选中的码值,并禁用按钮
        this.selectedFixedOrCodeclassifyValue = '';
        if(condition === "close"){
          this.codeFixdForm.id = '';
        }
        if(condition === "codefixedsec" || condition === "close"){
          this.codeFixdForm.description = '';
          this.codeFixdForm.codeFixedSecOid = '';
        }else {
          this.codeClassifyForm = '';
        }
      },
      //修改码值
      editCodeSecValue(condition){
        if(condition=='codefixedsec'){
          //以前是直接把当前选中行的所有数据都进行提交,但其实只需要传输一些比要参数即可,这儿做了修改,需要穿其他参数的请自行添加
          let editData = {
           "oid": this.selectedFixedOrCodeclassifyValue.oid,
           "ts": new Date().getTime(),
           "description": this.codeFixdForm.description,
           "id": this.codeFixdForm.id,
           "codeFixedSecOid":  this.selectedFixedOrCodeclassifyValue.codefixedsecoid
          }
          editCodeFixedValue(editData).then(() => {
              this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid})
              this.$message({
                type: "success",
                message: "操作成功!"
              });
            }, error => {
              window.console.log(error);
          });
        }else {
        }
      },
      //删除码值
      delCodeSecValue(condition){
        //固定码段码值删除
        if(condition == 'codefixedsec'){
          console.log(this.selectedFixedOrCodeclassifyValue.oid);
          this.$confirm("是否删除这条数据?如果被引用将不能被删除!", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
          })
          .then(() => {
            let ts = new Date(this.selectedFixedOrCodeclassifyValue.ts).getTime();
            return deleteCodeFixedValue({"oid": this.selectedFixedOrCodeclassifyValue.oid,"ts": ts});
          })
          .then(() => {
            this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid})
            this.clearFixedOrClassifyForm('codefixedsec');
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
        }else{
          //分类码段码值删除
          this.selectedFixedOrCodeclassifyValue = '';
        }
      },
      //对码值表进行:上移、下移、移除操作
      codeFixedValueOpetion(condition,row){
        //console.log(this.fixedValueData[row.$index].orderNum);
        const index = row.$index;
        if(condition == 'up'){
          //对ordeNum排序字段进行调整
          this.fixedValueData[index].orderNum = this.fixedValueData[index].orderNum-1
          this.fixedValueData[index-1].orderNum = this.fixedValueData[index].orderNum+1
          //当下标减去1小于0或者orderNum字段减去1小于0的时候不执行上移操作
          if(index-1<0 || this.fixedValueData[row.$index].orderNum-1<0){
            return;
          }
          //调整数组值顺序
          let tempOption = this.fixedValueData[index-1];
          this.$set(this.fixedValueData, index - 1, this.fixedValueData[index])
          this.$set(this.fixedValueData, index , tempOption)
          //console.log(this.fixedValueData);
        }else if(condition == 'down'){
          //对ordeNum排序字段进行调整
          this.fixedValueData[index].orderNum = this.fixedValueData[index].orderNum+1
          this.fixedValueData[index+1].orderNum = this.fixedValueData[index].orderNum-1
          //调整数组值顺序
          let tempOption = this.fixedValueData[index+1];
          this.$set(this.fixedValueData, index + 1, this.fixedValueData[index]);
          this.$set(this.fixedValueData, index, tempOption)
        }else {
          for(let i=index+1; i<this.fixedValueData.length-1; i++){
            //console.log(this.fixedValueData[i].orderNum);
            this.fixedValueData[i].orderNum = this.fixedValueData[i].orderNum-1;
            //console.log(this.fixedValueData[i].orderNum);
          }
          this.$delete(this.fixedValueData, index);
        }
        //console.log(this.fixedValueData);
      },
      //保存对固定码段码值的操作
      saveCodeFixedValueOption(){
        let data = {
          "codeFixedSecOid": this.codefixedsecOrCodeclassifysecOid,
          "dtoList": JSON.stringify(this.fixedValueData),
        }
        saveOrder(data).then(() => {
          this.$message({
            type: "success",
            message: "保存成功!"
          });
          }, error => {
            window.console.log(error);
        });
      },
      /** 基础码段相关方法 */
      //防止打开过编辑窗口之后表单中存在值,所以需要清空之后初始化form表单
      clearBasicAddForm(){
        this.form = '';
        this.form = {
          secType:'codefixedsec'
        };
        this.changeSectypeFormItems(null);
      },
      // 打开新增窗口
      addBasicCodeSec(){
        if(!this.tipsMessage(this.selectionList)){
@@ -289,21 +1879,66 @@
          this.$message.warning('编码规则状态不是"编辑中",不允许编辑码段!');
          return;
        }
        this.openBasicDialog('add',null);
        this.loadCodeSecType();
      },
      //打开新增或编辑基础码段对话框
      openBasicDialog(condition,row){
        //console.log(row);
        if(condition == 'add') {
          this.basicSecDialogTitle = '添加码段信息';
          this.showbtn = true;
          this.basicSecOnlyRead = false;
        }else if(condition == 'edit'){
          if(this.selectionList.length!=1){
            this.$message.warning('请选择一条编码规则数据!');
            return;
          }
          this.basicSecDialogTitle = '修改码段信息';
          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.addBasicCodeSettingBox = true;
        this.$nextTick(() => {
          this.$refs.addBasicChild.loadCodeSecType();
        })
      },
      // 新增基础码段
      saveBasicCode(){
        if(this.selectionList[0].oid == null){
      saveOrEditBasicCode(){
        if(this.selectionList[0].oid == null ||  this.selectionList[0].oid == ''){
          this.$message.warning('缺失必要参数,请重新选择编码规则后重试!');
          return;
        }
        this.form.pkCodeRule = this.selectionList[0].oid;
        //console.log(this.form);
        if(this.form.oid == '' || this.form.oid == null){
           addSave(this.form).then(() => {
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            }, error => {
              window.console.log(error);
          });
        }else{
          editSave(this.form).then(() => {
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            }, error => {
              window.console.log(error);
          });
        }
        this.$refs.addBasicChild.addSave(this.selectionList[0].oid);
        // 关闭窗口
        this.addBasicCodeSettingBox = false
        // 点击新增基础码段之后关闭窗口之后触发重新加载
        // 点击新增基础码段,关闭窗口之后触发重新加载
        this.loadBasic(this.selectionList[0]);
      },
      // 判断数据是否选择以及只能选择单条数据
@@ -326,23 +1961,25 @@
          type: "warning"
        })
        .then(() => {
          let ts = this.selectionBasicList[0].ts;
          let ts = new Date(this.selectionBasicList[0].ts).getTime();
          return deleteData({"oid": oid,"ts": ts});
        })
        .then(() => {
          this.loadBasic({"oid":this.currentCodeRuleOid == null ? this.selectionList[0].oid:this.currentCodeRuleOid});
          this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          //this.$refs.crud.toggleSelection();
          this.$refs.crudBasic.toggleSelection();
        });
      },
      // 点击触发加载基础码段信息
      loadBasic(row){
        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;
          this.basicData = data.records;
@@ -350,6 +1987,7 @@
          this.loadingBasic = false;
        });
      },
      // 基础码段选中时触发
      selectionBasicChange(list) {
        this.selectionBasicList = list;
        //console.log(this.selectionBasicList);
@@ -402,8 +2040,11 @@
      },
      //基础码段查询
      refreshChangeBasicSec(){
        this.loadBasic({"oid":this.currentCodeRuleOid == null ? this.selectionList[0].oid:this.currentCodeRuleOid});
        this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
      },
      /** 编码规则相关方法 */
      // 查询使用范围
      handleRange(){
        if(!this.tipsMessage(this.selectionList)){
@@ -412,6 +2053,7 @@
        this.codeRangeSettingBox = true;
        this.getRangeCodeList()
      },
      //加载使用范围列表
      getRangeCodeList(){        
        this.dialogLoading = true;
        if(this.selectionList[0].oid==null){
@@ -424,8 +2066,15 @@
          this.dialogLoading = false;
        });
      },
      //刷新使用范围列表
      refreshUseRangeChange(){
        this.getRangeCodeList();
      },
      //单击编码规则实现行选择
      codeRuleRowClick (row) {
        //console.log(row);
        this.$refs.crud.toggleRowSelection(row);
        this.loadBasic(row);
      },
      // 启用与停用
      enableOrDeactivatse(oId,update){
@@ -497,7 +2146,7 @@
          .then(() => {
            // 只支持每次单条记录删除
            let oid = this.selectionList[0].oid;
            let ts = this.selectionList[0].ts;
            let ts = new Date(this.selectionList[0].ts).getTime();
            return remove({oid: oid,ts: ts});
          })
          .then(() => {
@@ -512,8 +2161,8 @@
      // 打开修改
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          getDetail(this.form.oid).then(res => {
            this.form = res.data.data;
          getDetail(this.ruleForm.oid).then(res => {
            this.ruleForm = res.data.data;
          });
        }
        done();
@@ -527,11 +2176,15 @@
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      },
      // 编码规则当前选中行变化的时候触发
      selectionChange(list) {
        this.selectionList = list;
        this.$refs.crud.setCurrentRow(this.selectionList [list.length-1]);
        if(this.selectionList.length > 0){
          this.currentCodeRuleOid = this.selectionList [list.length-1];
          this.currentCodeRuleOid = this.selectionList[list.length-1].oid;
          this.currentRuleLcStatus = this.selectionList [list.length-1].lcStatus;
          //console.log(this.currentRuleLcStatus);
          this.loadBasic(this.selectionList[list.length-1]);
        }
      },
@@ -551,17 +2204,216 @@
      onLoad(page, params = {}) {
        this.loading = true;
        gridCodeRule(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          //console.log(res);
          //console.log(res.data);
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.loadBasic(data.records[0])
          this.selectionClear();
          this.loadBasic(this.data[0])
          this.$nextTick(() => {
            this.$refs.crud.toggleRowSelection(this.data[0]);
            this.$refs.crud.setCurrentRow(this.data[0]);
          })
          this.selectionList = data.records[0];
          //this.selectionClear();
        });
      }
      },
      /** 第一层对话框相关方法 */
      // 打开二层弹窗方法
      openAttrSelectOrGetValue(condition){
        if(condition === 'attr'){
          this.isShowSelectAttrOption = true;
        }else if(condition === 'value'){
          this.isShowformulaEdit = true;
        }else if(condition === 'parentClassifySecOid'){
          this.isShowParentClassifyOption = true;
        }else if(condition === 'referBtmId'){
          this.isShowSelectReferBtmOption = true;
        }else if(condition === 'referConfig'){
          //this.$emit('openSelectreferConfig')
        }
      },
      // 点击输入框的×号,清空输入框中的内容
      clearAttrDataByIcon(condition){
        if(condition === 'attr'){
          this.form.referAttributeName = '';
          this.form.referAttributeId = '';
          this.form.referCodeClassifyOid = '';
          this.form.referCodeClassifyOidName = '';
        }else if(condition === 'value'){
          this.form.getValueClass = '';
        }else if(condition === 'parentClassifySecOid'){
          this.form.parentClassifySecOid = '';
        }else if(condition === 'referBtmId'){
          this.form.referBtmId = '';
        }else if(condition === 'referConfig'){
          this.form.referBtmId = '';
        }
      },
      // 码段类型改变时,增加对应的form表单中的属性
      changeSectypeFormItems(row){
        console.log(row);
        if(this.sectypeList.length==0){
          this.loadCodeSecType();
        }
        if(row != null){
          this.form = {};
          this.form = Object.assign({},this.form,{
              oid: row.oid,
              id: row.id, //编号,
              name: row.name,//名称
              secType: row.secType,//码段类型
              description: row.description,//描述
              serialDependFlag: row.serialDependFlag=='true' ?  true:false,//是否流水依赖
              serialDependOrder: row.serialDependOrder,//流水依赖顺序
              nullableFlag: row.nullableFlag=='true' ?  true:false,//是否为空
              displayFlag: row.displayFlag=='true' ?  true:false,
              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, //码段类型
            description: this.form.description, //描述
            serialDependFlag:  this.form.serialDependFlag, //是否流水依赖
            serialDependOrder: this.form.serialDependOrder, //流水依赖顺序
            nullableFlag:  this.form.nullableFlag, //是否为空
            displayFlag:  this.form.displayFlag, //
            componentCodeFlag:  this.form.componentCodeFlag, //是否参与编码
            pkCodeRule: this.form.pkCodeRule, //所属编码规则
          };
          //console.log(this.form);
        }
        if(this.form.secType==='codefixedsec'){
          //固定码段
          this.form = Object.assign({}, this.form,{
            codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',
            codeSecLengthType: row!=null&&row.codeSecLengthType != '' ? row.codeSecLengthType:'code_sec_length_variable'
          });
          this.loadCodeSecLength();
        }else if(this.form.secType==='codeattrsec'){
          //属性码段
          this.form = Object.assign({}, this.form, {
            referCodeClassifyOid: row!=null&&row.referCodeClassifyOid != '' ? row.referCodeClassifyOid:'',     //属性id
            referCodeClassifyOidName: row!=null&&row.referCodeClassifyOidName != '' ? row.referCodeClassifyOidName:'', //属性所在分类
            referAttributeId: row!=null&&row.referAttributeId != '' ? row.referAttributeId:'',    //属性编号
            referAttributeName: row!=null&&row.referAttributeName != '' ? row.referAttributeName:'',   //属性
            getValueClass: row!=null&&row.getValueClass != '' ? row.getValueClass:''         //取值规则
          });
        }else if(this.form.secType==='codeserialsec'){
          //流水码段
          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',   //流水的步长
            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',          //补位时的字符
            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,      //流水是否补码
            customCodeSerialClass: row!=null&&row.customCodeSerialClass != '' ? row.customCodeSerialClass:'',     //自定义流水算法
          });
          this.loadCodeFillType();
          this.loadCodeFillSeparator();
        }else if(this.form.secType==='codelevelsec'){
          //层级码段
          this.form = Object.assign({}, this.form,{
            codeLevelType: row!=null&&row.codeLevelType != '' ? row.codeLevelType:'code_level_min',     //层级类型  枚举查询
            codeLevelValue: row!=null&&row.codeLevelValue != '' ? row.codeLevelValue:'',    //层级的值
            valueCutType: row!=null&&row.valueCutType != '' ? row.valueCutType:'code_cut_none',      //字符截取类型 枚举查询
            valueCutLength: row!=null&&row.valueCutLength != '' ? row.valueCutLength:'',    //
            codeGetValueType: row!=null&&row.codeGetValueType != '' ? row.codeGetValueType:'code_get_value_all_up',  //取值类型 枚举查询
          });
          this.loadCodeLevelType();
          this.loadCodeCutType();
          this.loadCodeGetValueType();
        }else if(this.form.secType==='coderefersec'){
          //引用码段
          this.form = Object.assign({}, this.form,{
            referBtmId: row!=null&&row.referBtmId != '' ? row.referBtmId:'',   //参照引用的业务类型,的id
            referBtmName: row!=null&&row.referBtmName != '' ? row.referBtmName:'', //参照引用的业务类型
            referConfig: row!=null&&row.referConfig != '' ? row.referConfig:'',  //参照配置
          });
        }else if(this.form.secType==='codedatesec'){
          //日期码段
          this.form = Object.assign({}, this.form,{
            codeDateFormatStr:  row!=null&&row.codeDateFormatStr != '' ? row.codeDateFormatStr:'',   //日期格式
          });
        }else if(this.form.secType==='codeclassifysec'){
          //分类码段
          this.form = Object.assign({}, this.form,{
            codeSecLengthType: row!=null&&row.codeSecLengthType != '' ? row.codeSecLengthType:'code_sec_length_variable',    //码段长度类型
            codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',  //码段的长度
            matchClassifyValueFlag: row!=null&&row.matchClassifyValueFlag != '' ? row.matchClassifyValueFlag=='true' ?  true:false :false,  //是否自动匹配值
            parentClassifySecOid: row!=null&&row.parentClassifySecOid != '' ? row.parentClassifySecOid:'',    //父分类码段选中的id
            parentClassifySecText: row!=null&&row.parentClassifySecText != '' ? row.parentClassifySecText:'',  //父分类码段
          });
          this.loadCodeSecLength();
        }else if(this.form.secType==='codevariablesec'){
          //可变码段
          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',  //选中的补位时的字符的下标
            codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'', //补位时的字符,可输可选查询
          });
          this.loadCodeFillType();
          this.loadCodeFillSeparator();
        }
        //console.log(this.form);
      },
      //枚举和可输可选内容查询
      loadCodeSecType(){
        getDictionary({code: "codeBasicSecType"}).then(res=>{
          this.sectypeList = res.data.data;
        })
        this.loadCodeSecLength();
        //console.log(this.sectypeList);
      },
      loadCodeSecLength(){
        getDictionary({code: "codeSecLength"}).then(res=>{
          this.codeSecLengthType = res.data.data;
        })
      },
      loadCodeFillType(){
        getDictionary({code: "codeFillType"}).then(res=>{
          this.codeFillType = res.data.data;
        })
      },
      loadCodeFillSeparator(){
        getDictionary({code: "codeFillSeparator"}).then(res=>{
          this.codeFillSeparator = res.data.data;
        })
      },
      loadCodeLevelType(){
        getDictionary({code: "codeLevelType"}).then(res=>{
          this.codeLevelType = res.data.data;
        })
      },
      loadCodeCutType(){
        getDictionary({code: "codeCutType"}).then(res=>{
          this.codeCutType = res.data.data;
        })
      },
      loadCodeGetValueType(){
        getDictionary({code: "codeGetValueType"}).then(res=>{
          this.codeGetValueType = res.data.data;
          //console.log(this.codeGetValueType);
        })
      },
    }
  };
};
</script>
<style>
@@ -571,7 +2423,95 @@
      margin-bottom: -20px !important;
      height: 2px;
      margin: 0;
      position: fixed;
      width: 57.5vw;
  }
  .el-card__body > .abox {
    height: 50vh;
  }
  .el-col-5 > .box {
    height: 55vh;
  }
  .operator_,filter, .layui-btn{
    width:60px;
  }
  .el-input-number {
    width: 120px;
  }
  .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 {
    background: rgb(213 231 239);
    border-radius: inherit;
  }
  /** 新增码段 */
  .total{
    height: 500px;
    width: 100%;
  }
  .total .el-input__inner,.total .el-textarea__inner {
    width: 220px;
  }
  .el-divider--vertical {
    width: 2px;
    height: 72vh;
    margin: 0 5px;
    position: fixed;
  }
 .left {
    float: left;
    width: 49%;
 }
 .right {
    float: right;
    margin-right: 2.5vw;
    /* width: 40%; */
 }
 .right > .el-form > .el-form-item{
    margin-bottom: 8px;
 }
</style>