ludc
2023-11-12 fa58b2d4afe13cd5aba50490b809c389f080f724
Merge remote-tracking branch 'origin/master'
已修改12个文件
已添加7个文件
1272 ■■■■■ 文件已修改
Source/UBCS-WEB/src/components/BatchImport/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 674 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/PasswordManagement/passwords.vue 219 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/UIFormItemVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeSerialAlgorithmService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -290,10 +290,12 @@
    },
    onError(err) {
      this.pageLoading.close();
      console.log('onError')
    },
    uploadChange(file) {
      if (file.status === "success" || file.status === "error") {
        this.pageLoading.close();
        console.log('uploadChange')
      }
    },
  },
Source/UBCS-WEB/src/views/code/code.vue
@@ -37,104 +37,104 @@
        <!-- è¡¨æ ¼å†…操作按钮 -->
        <template slot="menu" slot-scope="scope">
          <el-button v-if="permissionList.editBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
            icon="el-icon-edit"
            plain
            size="small"
            type="text"
            @click="openEdit(scope.row)"
            >编 è¾‘
                     icon="el-icon-edit"
                     plain
                     size="small"
                     type="text"
                     @click="openEdit(scope.row)"
          >编 è¾‘
          </el-button>
          <el-button v-if="permissionList.releaseBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
            :loading="releadDisabled"
            icon="el-icon-position"
            plain
            size="small"
            type="text"
            @click="enableOrDeactivatse(scope.row.oid, 'release')"
            >发 å¸ƒ
                     :loading="releadDisabled"
                     icon="el-icon-position"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'release')"
          >发 å¸ƒ
          </el-button>
          <el-button v-if="permissionList.deactivateBtn && (scope.row.lcStatus == 'Released' ? true : false)"
            icon="el-icon-video-pause"
            plain
            size="small"
            type="text"
            @click="enableOrDeactivatse(scope.row.oid, 'disable')"
            >停 ç”¨
                     icon="el-icon-video-pause"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'disable')"
          >停 ç”¨
          </el-button>
          <el-button v-if="permissionList.enableBtn && (scope.row.lcStatus == 'Disabled' ? true : false)"
            icon="el-icon-video-play"
            plain
            size="small"
            type="text"
            @click="enableOrDeactivatse(scope.row.oid, 'enable')"
            >启 ç”¨
                     icon="el-icon-video-play"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'enable')"
          >启 ç”¨
          </el-button>
        </template>
        <!-- è¡¨æ ¼ä¸Šæ–¹æŒ‰é’®åŒºåŸŸ -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button v-if="permissionList.rulDelBtn"
            icon="el-icon-delete"
            plain
            size="small"
            type="danger"
            @click="handleDelete"
                     icon="el-icon-delete"
                     plain
                     size="small"
                     type="danger"
                     @click="handleDelete"
          >
            åˆ  é™¤
          </el-button>
          <el-button v-if="permissionList.advancedQueryBtn"
            icon="el-icon-search"
            plain
            size="small"
            type="primary"
            @click="openAdvancedQuery('codeRule')">
                     icon="el-icon-search"
                     plain
                     size="small"
                     type="primary"
                     @click="openAdvancedQuery('codeRule')">
            é«˜çº§æŸ¥è¯¢
          </el-button>
          <el-button v-if="permissionList.cloneBtn"
            icon="icon-kelong"
            plain
            size="small"
            @click="openCodeRuleDialog"
                     icon="icon-kelong"
                     plain
                     size="small"
                     @click="openCodeRuleDialog"
          >
            å…‹ éš†
          </el-button>
          <el-button v-if="permissionList.otherCloneBtn"
            icon="icon-lianjiekelong"
            plain
            size="small"
            style="font-size: 12px"
            @click="openOtherCodeRuleDialog"
                     icon="icon-lianjiekelong"
                     plain
                     size="small"
                     style="font-size: 12px"
                     @click="openOtherCodeRuleDialog"
          >
            ä»Žå…¶ä»–规则中克隆码段
          </el-button>
          <el-button v-if="permissionList.usescopeBtn"
            icon="el-icon-s-help"
            plain
            size="small"
            @click="handleRange"
                     icon="el-icon-s-help"
                     plain
                     size="small"
                     @click="handleRange"
          >
            ä½¿ç”¨èŒƒå›´
          </el-button>
          <el-button v-if="permissionList.clearBtn"
            icon="icon-qingkong"
            plain
            size="small"
            @click="clearAllCodeSec"
                     icon="icon-qingkong"
                     plain
                     size="small"
                     @click="clearAllCodeSec"
          >
            æ¸…空码值
          </el-button>
          <el-button  v-if="permissionList.escapeOwnerBtn"
            icon="el-icon-guide"
            plain
            size="small"
            @click="escapeOwner"
          <el-button v-if="permissionList.escapeOwnerBtn"
                     icon="el-icon-guide"
                     plain
                     size="small"
                     @click="escapeOwner"
          >
            è½¬ç§»æ‰€æœ‰è€…
          </el-button>
          <el-button  v-if="permissionList.maxSerialnumBtn"
            icon="el-icon-data-analysis"
            plain
            size="small"
            @click="maxSerialNum"
          <el-button v-if="permissionList.maxSerialnumBtn"
                     icon="el-icon-data-analysis"
                     plain
                     size="small"
                     @click="maxSerialNum"
          >
            æœ€å¤§æµæ°´å·
          </el-button>
@@ -173,15 +173,15 @@
    <!-- ç¼–码规则,克隆对话框 -->
    <clone-rule-dialog
      :visible.sync="cloneSettingBox"
      :ruleData="selectionList[0]"
      :visible.sync="cloneSettingBox"
      @refreshRuleTable="onLoad">
    </clone-rule-dialog>
    <!-- ç¼–码规则,从其他规则克隆对话框 -->
    <clone-other-basic-sec-dialog
      :visible.sync="cloneOtherCodeRuleSettingBox"
      :quiltCloneCodeRule="selectionList[0]"
      :visible.sync="cloneOtherCodeRuleSettingBox"
      @refreshRuleTable="onLoad">
    </clone-other-basic-sec-dialog>
@@ -189,9 +189,9 @@
    <el-dialog
      :visible.sync="escapeOwnerVisible"
      append-to-body
      class="avue-dialog avue-dialog--top"
      title="转移所有者"
      width="30%"
      class= "avue-dialog avue-dialog--top"
    >
      <el-select v-model="ruleOwner" class="selects" placeholder="请选择">
        <el-option
@@ -241,75 +241,76 @@
        <!-- åŸºç¡€ç æ®µè¡¨æ ¼å†…操作按钮 -->
        <template slot="menu" slot-scope="scope">
          <el-button v-if="basicPermissionList.viewBtn && currentRuleLcStatus != 'Editing'"
            icon="el-icon-view"
            plain
            size="small"
            type="text"
            @click="openBasicDialog('view', scope.row)"
            >查看
                     icon="el-icon-view"
                     plain
                     size="small"
                     type="text"
                     @click="openBasicDialog('view', scope.row)"
          >查看
          </el-button>
          <el-button v-if="basicPermissionList.editBtn && currentRuleLcStatus === 'Editing'"
            icon="el-icon-edit"
            plain
            size="small"
            type="text"
            @click="openBasicDialog('edit', scope.row)"
            >编辑
                     icon="el-icon-edit"
                     plain
                     size="small"
                     type="text"
                     @click="openBasicDialog('edit', scope.row)"
          >编辑
          </el-button>
          <el-button v-if="basicPermissionList.basicMgrBtn && (scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec')"
          <el-button
            v-if="basicPermissionList.basicMgrBtn && (scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec')"
            icon="el-icon-setting"
            plain
            size="small"
            type="text"
            @click="openBasicSecCodeValueMgr(scope.row)"
            >码值管理
          >码值管理
          </el-button>
          <el-button v-if="basicPermissionList.basicMoveupBtn && scope.row.orderNum > 1"
            icon="el-icon-arrow-up"
            plain
            size="small"
            type="text"
            @click="upOrderNum(scope.row)"
            >上移
                     icon="el-icon-arrow-up"
                     plain
                     size="small"
                     type="text"
                     @click="upOrderNum(scope.row)"
          >上移
          </el-button>
          <el-button v-if="basicPermissionList.basicDownBtn"
            icon="el-icon-arrow-down"
            plain
            size="small"
            type="text"
            @click="downOrderNum(scope.row)"
            >下移
                     icon="el-icon-arrow-down"
                     plain
                     size="small"
                     type="text"
                     @click="downOrderNum(scope.row)"
          >下移
          </el-button>
        </template>
        <!-- åŸºç¡€ç æ®µè¡¨æ ¼å·¦ä¸Šæ–¹æŒ‰é’®åŒºåŸŸ -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button v-if="basicPermissionList.addBtn"
            :disabled="selectionList.length <= 0"
            icon="el-icon-plus"
            size="small"
            type="primary"
            @click="openAddBasicCodeSec"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-plus"
                     size="small"
                     type="primary"
                     @click="openAddBasicCodeSec"
          >
            æ–° å¢ž
          </el-button>
          <el-button v-if="basicPermissionList.basicDelBtn"
            :disabled="selectionList.length <= 0"
            icon="el-icon-delete"
            plain
            size="small"
            type="danger"
            @click="deleteBasicCode(scope.row)"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-delete"
                     plain
                     size="small"
                     type="danger"
                     @click="deleteBasicCode(scope.row)"
          >
            åˆ  é™¤
          </el-button>
          <el-button  v-if="basicPermissionList.basicAdvancedQueryBtn"
            :disabled="selectionList.length <= 0"
            icon="el-icon-search"
            plain
            size="small"
            type="primary"
            @click="openAdvancedQuery('codeBasicSec')"
          <el-button v-if="basicPermissionList.basicAdvancedQueryBtn"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-search"
                     plain
                     size="small"
                     type="primary"
                     @click="openAdvancedQuery('codeBasicSec')"
          >
            é«˜çº§æŸ¥è¯¢
          </el-button>
@@ -362,7 +363,7 @@
                size="mini"
                type="primary"
                @click="codeClassifyValueOpetion('up')"
                >上移
              >上移
              </el-button>
              <el-button
                class="button"
@@ -370,7 +371,7 @@
                size="mini"
                type="primary"
                @click="codeClassifyValueOpetion('down')"
                >下移
              >下移
              </el-button>
            </div>
          </basic-container>
@@ -407,7 +408,7 @@
                size="mini"
                type="primary"
                @click="addCodeSecValue('codeclassifyvaluesec')"
                >添加
              >添加
              </el-button>
              <el-button
                :disabled="selectedFixedOrCodeclassifyValue == ''"
@@ -417,7 +418,7 @@
                size="mini"
                type="success"
                @click="editCodeSecValue('codeclassifyvaluesec')"
                >修改
              >修改
              </el-button>
              <el-button
                :disabled="selectedFixedOrCodeclassifyValue == ''"
@@ -426,7 +427,7 @@
                size="mini"
                type="danger"
                @click="delCodeSecValue('codeclassifyvaluesec')"
                >删除
              >删除
              </el-button>
              <el-button
                class="button"
@@ -435,7 +436,7 @@
                size="mini"
                type="warning"
                @click="clearFixedOrClassifyForm('codeclassifyvaluesec')"
                >取消
              >取消
              </el-button>
            </div>
          </basic-container>
@@ -464,21 +465,21 @@
                    size="mini"
                    type="text"
                    @click="codeFixedValueOpetion('up', scope.row)"
                    >上移
                  >上移
                  </el-button>
                  <el-button
                    icon="el-icon-arrow-down"
                    size="mini"
                    type="text"
                    @click="codeFixedValueOpetion('down', scope.row)"
                    >下移
                  >下移
                  </el-button>
                  <el-button
                    icon="el-icon-minus"
                    size="mini"
                    type="text"
                    @click="codeFixedValueOpetion('remove', scope.row)"
                    >移除
                  >移除
                  </el-button>
                </template>
              </avue-crud>
@@ -490,7 +491,7 @@
                size="mini"
                type="primary"
                @click="saveCodeFixedOrClassifyValueOption('fixedValue')"
                >保存
              >保存
              </el-button>
            </div>
          </basic-container>
@@ -534,7 +535,7 @@
                size="mini"
                type="primary"
                @click="addCodeSecValue('codefixedsec')"
                >添加
              >添加
              </el-button>
              <el-button
                :disabled="selectedFixedOrCodeclassifyValue == ''"
@@ -544,7 +545,7 @@
                size="mini"
                type="success"
                @click="editCodeSecValue('codefixedsec')"
                >修改
              >修改
              </el-button>
              <el-button
                :disabled="selectedFixedOrCodeclassifyValue == ''"
@@ -553,7 +554,7 @@
                size="mini"
                type="danger"
                @click="delCodeSecValue('codefixedsec')"
                >删除
              >删除
              </el-button>
              <el-button
                class="button"
@@ -562,7 +563,7 @@
                size="mini"
                type="warning"
                @click="clearFixedOrClassifyForm('codefixedsec')"
                >取消
              >取消
              </el-button>
            </div>
          </basic-container>
@@ -879,10 +880,23 @@
                :label-width="rightFormLabelWidth"
                label="自定义的流水算法:"
              >
                <el-input
                  v-model="form.customCodeSerialClass"
                  :readonly="basicSecOnlyRead"
                ></el-input>
                  <template>
                      <vciWebRefer
                        ref="refer"
                        :referConfig="this.referConfig || {}"
                        :display="true"
                        :value="form.customCodeSerialClass"
                        :text="form.customCodeSerialClass"
                        @setReferValue="setReferValue"
                      ></vciWebRefer>
<!--                                    <el-input-->
<!--                                      v-model="form.customCodeSerialClass"-->
<!--                                      :readonly="basicSecOnlyRead"-->
<!--                                      @focus="streamFocusHandler"-->
<!--                                    ></el-input>-->
                  </template>
              </el-form-item>
            </div>
            <!-- å±‚级码段 -->
@@ -1147,9 +1161,10 @@
      <div slot="footer" class="dialog-footer">
        <el-button
          :disabled="!showbtn"
          type="primary"
          :loading="isLoadingSecCodeAddBtn"
          @click="saveOrEditBasicCode">保 å­˜</el-button>
          type="primary"
          @click="saveOrEditBasicCode">保 å­˜
        </el-button>
        <el-button @click="addBasicCodeSettingBox = false">取 æ¶ˆ</el-button>
      </div>
@@ -1246,11 +1261,13 @@
        </avue-crud>
        <div slot="footer" class="dialog-footer">
          <el-button type="primary" @click="saveSelectedParentClassify"
            >保 å­˜</el-button
          >保 å­˜
          </el-button
          >
          <el-button
            @click="parentClsfyParams.isShowParentClassifySettingBox = false"
            >取 æ¶ˆ</el-button
          >取 æ¶ˆ
          </el-button
          >
        </div>
      </el-dialog>
@@ -1271,6 +1288,10 @@
      >
      </refer-config-dialog>
    </el-dialog>
    <!--    è‡ªå®šä¹‰æµæ°´å‚照组件-->
  </basic-container>
</template>
@@ -1295,7 +1316,7 @@
  addSave,
  refDataGridClassifySec,
} from "@/api/code/codebasic";
import { listClassifyLinkAttr } from "@/api/code/codeclassify";
import {listClassifyLinkAttr} from "@/api/code/codeclassify";
import {
  gridCodeFixedValue,
  addSaveCodeFixedValue,
@@ -1310,8 +1331,8 @@
  deleteCodeClassifyValue,
  saveCodeClassifyValueOrder,
} from "@/api/code/codeClassifyValue";
import { getDictionary } from "@/api/omd/enum";
import { getDictionaryBiz } from "@/api/system/dictbiz";
import {getDictionary} from "@/api/omd/enum";
import {getDictionaryBiz} from "@/api/system/dictbiz";
import optionBasic from "@/const/code/codebasic";
import optionRule from "@/const/code/mdmrule";
import attrOption from "@/const/code/selectAttrOptionDialog";
@@ -1319,15 +1340,49 @@
import classisyValueTreeOption from "@/const/code/classisyValueTreeDialog";
import parentClassifyParentOption from "@/const/code/parentClassifyParentOptionDialog";
import fixedValueOption from "@/const/code/fixedValueMgrDialog";
import { mapGetters } from "vuex";
import { getByRoleUserList } from "@/api/system/user";
import {mapGetters} from "vuex";
import {getByRoleUserList} from "@/api/system/user";
import func from "@/util/func";
import secTypeEnum from '@/enumpack/CodeSecTypeEnum';
import vciWebRefer from "../../components/refer/vciWebRefer";
export default {
  components: { vciWebRefer },
  data() {
    return {
      crudOption:{...optionRule},
      referConfig:{
        title: '自定义流水参照',
        showField: 'customCodeSerialClass',
        field: 'customCodeSerialClass',
        fieldMap:  {},
        placeholder:'请选择自定义流水',
        options:   {
          // è®¾ç½®é»˜è®¤çš„属性
          url: 'api/ubcs-code/codeSerialAlgorithmController/gridCodeSerialAlgorithm',
          valueField:'classFullName',
          textField:'classFullName',
          isMuti: false,
          type: "grid",
          method: 'get',
          tableConfig: {
            page: {
              limit: 15,
              page: 1
            },
            cols: [
              {title: '算法编号', field: 'id', width: 200},
              {title: '算法名称', field: 'name', width: 150},
              {title: '类全路径', field: 'classFullName', width: 300},
              {title: '描述', field: 'description'}
            ],
            queryColumns: [
              // {field: 'id', title: '算法编号'},
              // {field: 'name', title: '算法名称'}
            ]
          }
        }
      },
      crudOption: {...optionRule},
      ruleForm: {},
      query: {},
      loading: true,
@@ -1599,7 +1654,7 @@
        editBtn: this.vaildData(this.permission.code_rule.code_rule_edit, false),
        deactivateBtn: this.vaildData(this.permission.code_rule.code_rule_deactivate, false),
        enableBtn: this.vaildData(this.permission.code_rule.code_rule_enable, false),
        releaseBtn: this.vaildData(this.permission.code_rule.    code_rule_release, false),
        releaseBtn: this.vaildData(this.permission.code_rule.code_rule_release, false),
        advancedQueryBtn: this.vaildData(this.permission.code_rule.code_rule_advanced_query, false),
        cloneBtn: this.vaildData(this.permission.code_rule.code_rule_clone, false),
        otherCloneBtn: this.vaildData(this.permission.code_rule.code_rule_other_clone, false),
@@ -1610,11 +1665,11 @@
      };
    },
    basicPermissionList() {
      return{
      return {
        // åŸºç¡€ç æ®µç›¸å…³æŒ‰é’®
        addBtn: this.vaildData(this.permission.code_rule.code_basic_add, false),
        editBtn: this.vaildData(this.permission.code_rule.code_basic_edit, false),
        viewBtn: this.vaildData(this.permission.code_rule.    code_basic_view, false),
        viewBtn: this.vaildData(this.permission.code_rule.code_basic_view, false),
        basicDelBtn: this.vaildData(this.permission.code_rule.code_basic_delete, false),
        basicAdvancedQueryBtn: this.vaildData(this.permission.code_rule.code_basic_advanced_query, false),
        basicMgrBtn: this.vaildData(this.permission.code_rule.code_basic_mgr, false),
@@ -1645,7 +1700,10 @@
    localStorage.removeItem('codeGetValueType');
  },
  methods: {
    //自定义流水失焦
    setReferValue(data){
      console.log(data)
    },
    /** è½¬ç§»è§„则所有者对话框 */
    escapeOwner() {
      if (this.selectionList.length === 0) {
@@ -1884,7 +1942,7 @@
    /** åŠ è½½å›ºå®šç æ®µç å€¼è¡¨æ•°æ®*/
    loadFixedValueTableData(row) {
      this.fixedValueOptionLoading = true;
      gridCodeFixedValue(1, -1, { codeFixedSecOid: row.oid }).then((res) => {
      gridCodeFixedValue(1, -1, {codeFixedSecOid: row.oid}).then((res) => {
        this.fixedValueData = res.data.data.records;
        this.fixedValueOptionLoading = false;
      });
@@ -1988,7 +2046,7 @@
          description: this.codeFixdForm.description,
          id: this.codeFixdForm.id,
          codeFixedSecOid:
            this.selectedFixedOrCodeclassifyValue.codefixedsecoid,
          this.selectedFixedOrCodeclassifyValue.codefixedsecoid,
        };
        editCodeFixedValue(editData).then(
          () => {
@@ -2409,7 +2467,7 @@
    },
    /** ä¿®æ”¹è§„则状态:启用、停用、发布 */
    updateStatus(oid, update) {
      updateStatus({ oid: oid, ts: new Date().getTime, update: update }).then(
      updateStatus({oid: oid, ts: new Date().getTime, update: update}).then(
        () => {
          this.releadDisabled = false;
          this.onLoad(this.page);
@@ -2433,7 +2491,7 @@
            //console.log(res)
            if (res.data.data.success) {
              this.updateStatus(oid, update);
            }else {
            } else {
              this.$confirm(res.data.data.msg, "提示", {
                distinguishCancelAndClose: true,
                confirmButtonText: "继续发布",
@@ -2495,7 +2553,7 @@
      })
        .then(() => {
          let ts = new Date(currentData.ts).getTime();
          return clearAllCode({ oid: currentData.oid, ts: ts });
          return clearAllCode({oid: currentData.oid, ts: ts});
        })
        .then(() => {
          this.this.onLoad(this.page);
@@ -2557,7 +2615,7 @@
          // åªæ”¯æŒæ¯æ¬¡å•条记录删除
          let oid = this.selectionList[0].oid;
          let ts = new Date(this.selectionList[0].ts).getTime();
          return remove({ oid: oid, ts: ts });
          return remove({oid: oid, ts: ts});
        })
        .then(() => {
          this.onLoad(this.page);
@@ -2640,7 +2698,7 @@
      gridCodeRule(
        page.currentPage,
        page.pageSize,
        Object.assign({},params,this.query),
        Object.assign({}, params, this.query),
      ).then((res) => {
        //console.log(res.data);
        const data = res.data.data;
@@ -2751,8 +2809,8 @@
        let oldBasicSec = this.selectionBasicList.at(-1);
        let secType = this.form.secType;
        Vue.set(this.form, 'isClearValue', false);
        if((oldBasicSec.secType == "codefixedsec" || oldBasicSec.secType === "codeclassifysec") && oldBasicSec.secType != secType){
          await this.$confirm("码段类型由【"+oldBasicSec.secTypeText+"】,修改为"+"【"+secTypeEnum.getTextByValue(secType)+"】,请问是否需要清空关联的码值?", "提示", {
        if ((oldBasicSec.secType == "codefixedsec" || oldBasicSec.secType === "codeclassifysec") && oldBasicSec.secType != secType) {
          await this.$confirm("码段类型由【" + oldBasicSec.secTypeText + "】,修改为" + "【" + secTypeEnum.getTextByValue(secType) + "】,请问是否需要清空关联的码值?", "提示", {
            distinguishCancelAndClose: true,
            closeOnClickModal: false,
            confirmButtonText: "清空码值",
@@ -3001,7 +3059,7 @@
      })
        .then(() => {
          let ts = new Date(this.selectionBasicList[0].ts).getTime();
          return deleteData({ oid: oid, ts: ts });
          return deleteData({oid: oid, ts: ts});
        })
        .then(() => {
          this.loadBasic({
@@ -3025,7 +3083,7 @@
        //存储当前关联的编码规则相关信息
        this.currentCodeRuleOid = row.oid;
        this.currentRuleLcStatus = row.lcStatus;
        this.sendGridCodeBasicSec({ pkCodeRule: row.oid }, false);
        this.sendGridCodeBasicSec({pkCodeRule: row.oid}, false);
      }
    },
    /** å‘送加载基础码段的请求*/
@@ -3082,7 +3140,7 @@
    },
    basicSearchReset() {
      this.sendGridCodeBasicSec(
        { pkCodeRule: this.selectionList[this.selectionList.length - 1].oid },
        {pkCodeRule: this.selectionList[this.selectionList.length - 1].oid},
        false
      );
    },
@@ -3126,7 +3184,7 @@
        return;
      }
      downOrderNum(row.oid).then(() => {
        this.loadBasic({ oid: codeRuleOid });
        this.loadBasic({oid: codeRuleOid});
        this.$message({
          type: "success",
          message: "操作成功!",
@@ -3218,19 +3276,19 @@
        this.loadCodeSecType();
      }
      this.form = {
        oid: row !=null ? row.oid:this.form.oid,
        id: row != null ? row.id:this.form.id, //编号,
        name: row != null ? row.name:this.form.name, //名称
        secType: row != null ?  row.secType:this.form.secType, //码段类型
        description:  row != null ? row.description:this.form.description, //描述
        serialDependFlag: this.isNullJsonBoolean(row,this.form, 'serialDependFlag'), //是否流水依赖
        serialDependOrder:  row !=null ? row.serialDependOrder:this.form.serialDependOrder, //流水依赖顺序
        oid: row != null ? row.oid : this.form.oid,
        id: row != null ? row.id : this.form.id, //编号,
        name: row != null ? row.name : this.form.name, //名称
        secType: row != null ? row.secType : this.form.secType, //码段类型
        description: row != null ? row.description : this.form.description, //描述
        serialDependFlag: this.isNullJsonBoolean(row, this.form, 'serialDependFlag'), //是否流水依赖
        serialDependOrder: row != null ? row.serialDependOrder : this.form.serialDependOrder, //流水依赖顺序
        nullableFlag: this.isNullJsonBoolean(row, this.form, 'nullableFlag'), //是否为空
        displayFlag: this.isNullJsonBoolean(row, this.form, 'displayFlag'),
        componentCodeFlag: this.isNullJsonBoolean(row, this.form, 'componentCodeFlag'), //是否参与编码
        pkCodeRule:  row != null ? row.pkCodeRule:this.form.pkCodeRule, //所属编码规则
        prefixCode: row != null ? row.prefixCode:this.form.prefixCode, //前缀
        suffixCode: row!= null ? row.suffixCode:this.form.suffixCode, //后缀
        pkCodeRule: row != null ? row.pkCodeRule : this.form.pkCodeRule, //所属编码规则
        prefixCode: row != null ? row.prefixCode : this.form.prefixCode, //前缀
        suffixCode: row != null ? row.suffixCode : this.form.suffixCode, //后缀
      };
      if (this.form.secType === "codefixedsec") {
        //固定码段
@@ -3274,8 +3332,8 @@
            row != null && row.serialStart != "" ? row.serialStart : 1, //流水号起始值
          serialStep: row != null && row.serialStep != "" ? row.serialStep : 1, //流水的步长
          codeFillType: row != null && row.codeFillType != ""
              ? row.codeFillType
              : "code_fill_left", //编码补位方式
            ? row.codeFillType
            : "code_fill_left", //编码补位方式
          // codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,    //补位时的字符,选中的下拉框的下标
          codeFillSeparator:
            row != null && row.codeFillSeparator != ""
@@ -3288,8 +3346,8 @@
          codeFillFlag:
            row != null && row.codeFillFlag != ""
              ? row.codeFillFlag == "true"
                ? true
                : false
              ? true
              : false
              : false, //流水是否补码
          customCodeSerialClass:
            row != null && row.customCodeSerialClass != ""
@@ -3352,8 +3410,8 @@
          matchClassifyValueFlag:
            row != null && row.matchClassifyValueFlag != ""
              ? row.matchClassifyValueFlag == "true"
                ? true
                : false
              ? true
              : false
              : false, //是否自动匹配值
          parentClassifySecOid:
            row != null && row.parentClassifySecOid != ""
@@ -3385,19 +3443,19 @@
      }
    },
    // åˆ¤æ–­Boolean值是否为空,并且对str类型布尔值进行转换
    isNullJsonBoolean(row,form,attr) {
        //console.log(row[attr],form[attr]);
        if(row != null){
          return JSON.parse(row[attr]);
        }else {
          return form[attr];
        }
    isNullJsonBoolean(row, form, attr) {
      //console.log(row[attr],form[attr]);
      if (row != null) {
        return JSON.parse(row[attr]);
      } else {
        return form[attr];
      }
    },
    /** ç¬¬ä¸€æ¬¡è¯·æ±‚的枚举数据放缓存*/
    getLocalStorageEnum(enumKey) {
      let enumCach = JSON.parse(localStorage.getItem(enumKey));
      if (enumCach == null) {
        getDictionary({ code: enumKey }).then((res) => {
        getDictionary({code: enumKey}).then((res) => {
          enumCach = res.data.data;
          localStorage.setItem(enumKey, JSON.stringify(res.data.data));
        });
@@ -3428,7 +3486,7 @@
    loadCodeFillSeparator() {
      //let enumCach = JSON.parse(localStorage.getItem("codeFillSeparator"));
      //if (enumCach == null) {
      getDictionaryBiz({code:"codeFillSeparator"}).then((res) => {
      getDictionaryBiz({code: "codeFillSeparator"}).then((res) => {
        this.enumParam.codeFillSeparator = res.data.data;
        //console.log(this.enumParam.codeFillSeparator);
        localStorage.setItem(
@@ -3453,7 +3511,7 @@
        this.$message.warning("请选择一条编码规则!");
        return;
      }
      if(this.selectionList.length> 1){
      if (this.selectionList.length > 1) {
        this.$message.warning("只能选择一条编码规则!");
        return;
      }
@@ -3465,155 +3523,155 @@
</script>
<style>
  [class^="icon-"] {
    font-size: 12px !important;
  }
[class^="icon-"] {
  font-size: 12px !important;
}
  .code-rule-crud > .avue-crud__search,
  .code-basic-crud > .avue-crud__search {
    margin-bottom: -15px;
  }
.code-rule-crud > .avue-crud__search,
.code-basic-crud > .avue-crud__search {
  margin-bottom: -15px;
}
  .clone-input-textarea > .el-form-item__content {
    width: 495px;
  }
.clone-input-textarea > .el-form-item__content {
  width: 495px;
}
  .clone-avue-crud > .el-card > .el-card__body > .avue-crud__menu {
    display: none !important;
  }
.clone-avue-crud > .el-card > .el-card__body > .avue-crud__menu {
  display: none !important;
}
  .fixed-avue-crud > .el-card > .el-card__body > .avue-crud__menu {
    display: none !important;
  }
.fixed-avue-crud > .el-card > .el-card__body > .avue-crud__menu {
  display: none !important;
}
  .other-clone-codebasic-crud > .el-card > .el-card__body > .avue-crud__menu {
    display: none !important;
  }
.other-clone-codebasic-crud > .el-card > .el-card__body > .avue-crud__menu {
  display: none !important;
}
  .other-clone-coderule-crud > .el-card > .el-card__body > .avue-crud__menu {
    display: none !important;
  }
.other-clone-coderule-crud > .el-card > .el-card__body > .avue-crud__menu {
  display: none !important;
}
  .el-table--small .el-table__cell {
    padding: 3px 0;
  }
.el-table--small .el-table__cell {
  padding: 3px 0;
}
  .classify_value_box > .el-scrollbar {
    height: 95%;
  }
.classify_value_box > .el-scrollbar {
  height: 95%;
}
  .basic-container > .el-card > .el-card__body {
    margin: -10px 0;
  }
.basic-container > .el-card > .el-card__body {
  margin: -10px 0;
}
  .code-basicsec-container {
    padding: 1px 6px;
  }
.code-basicsec-container {
  padding: 1px 6px;
}
  .horizontal-line {
    /* margin-top: 19px !important; */
    margin-bottom: -20px !important;
    width: 100%;
    height: 2px;
  }
.horizontal-line {
  /* margin-top: 19px !important; */
  margin-bottom: -20px !important;
  width: 100%;
  height: 2px;
}
  .el-card__body > .treeBox {
    height: 56vh;
  }
.el-card__body > .treeBox {
  height: 56vh;
}
  .el-col-5 > .box {
    height: 56vh;
  }
.el-col-5 > .box {
  height: 56vh;
}
  .operator_,
  filter,
  .layui-btn {
    width: 60px;
  }
.operator_,
filter,
.layui-btn {
  width: 60px;
}
  .left > .el-form-item > .el-form-item__content > .el-input-number {
    width: 120px;
  }
.left > .el-form-item > .el-form-item__content > .el-input-number {
  width: 120px;
}
  .left
    > .el-form-item
    > .el-form-item__content
    > .el-input-number
    > .el-input
    > .el-input__inner {
    width: 120px;
  }
.left
> .el-form-item
> .el-form-item__content
> .el-input-number
> .el-input
> .el-input__inner {
  width: 120px;
}
  .el-col > .el-card > .el-card__header {
    background: rgb(213 231 239);
    border-radius: inherit;
  }
.el-col > .el-card > .el-card__header {
  background: rgb(213 231 239);
  border-radius: inherit;
}
  /** æ–°å¢žç æ®µ */
  .add-basicsec-dialog > .el-dialog > .el-dialog__body {
    padding: 20px 20px 4px;
    margin-bottom: 30px;
  }
/** æ–°å¢žç æ®µ */
.add-basicsec-dialog > .el-dialog > .el-dialog__body {
  padding: 20px 20px 4px;
  margin-bottom: 30px;
}
  .add-basicsec-total {
    width: 100%;
    height: 500px;
  }
.add-basicsec-total {
  width: 100%;
  height: 500px;
}
  .add-basicsec-total .el-input__inner,
  .add-basicsec-total .el-textarea__inner {
    width: 220px;
  }
.add-basicsec-total .el-input__inner,
.add-basicsec-total .el-textarea__inner {
  width: 220px;
}
  .add-basicsec-total > .add-basicsec-form {
    display: flex;
    flex-direction: row;
    width: 100%;
.add-basicsec-total > .add-basicsec-form {
  display: flex;
  flex-direction: row;
  width: 100%;
  height: 100%;
  align-items: center;
  justify-content: space-around;
}
.add-basicsec-form > .el-divider--vertical {
  width: 2px;
  height: 78%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.left {
  /* float: left; */
  width: 45%;
  height: 100%;
}
.right {
  /* float: right; */
  margin-right: 2vw;
  height: 100%;
  width: auto;
}
.add-basicsec-form > .left > .el-form-item,
.add-basicsec-form > .right > div > .el-form-item {
  margin-bottom: 12px;
}
/* å¯¹è¯æ¡†åº•部按钮边框样式 */
.el-dialog__footer {
  /* width: 100%; */
  border-top: 1px solid #e9e7e7;
  padding: 5px 10px 10px;
}
.seloption {
  margin-left: 10px;
}
/* .code-total > .basic-container__card {
    height: 100%;
    align-items: center;
    justify-content: space-around;
  }
  .add-basicsec-form > .el-divider--vertical {
    width: 2px;
    height: 78%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
  .left {
    /* float: left; */
    width: 45%;
    height: 100%;
  }
  .right {
    /* float: right; */
    margin-right: 2vw;
    height: 100%;
    width: auto;
  }
  .add-basicsec-form > .left > .el-form-item,
  .add-basicsec-form > .right > div > .el-form-item{
    margin-bottom: 12px;
  }
  /* å¯¹è¯æ¡†åº•部按钮边框样式 */
  .el-dialog__footer {
    /* width: 100%; */
    border-top: 1px solid #e9e7e7;
    padding: 5px 10px 10px;
  }
  .seloption {
    margin-left: 10px;
  }
  /* .code-total > .basic-container__card {
      height: 100%;
    } */
  } */
</style>
Source/UBCS-WEB/src/views/system/PasswordManagement/passwords.vue
@@ -42,85 +42,11 @@
export default {
  name: "passwords.vue",
  data() {
    // æœ€å°é•¿åº¦æ­£åˆ™ç»‘定值
    let validatePass=""
    //最大长度正则绑定值
    let validatePass1=""
    //过期时间正则绑定值
    let validatePass2=""
    //提醒时间正则绑定值
    let validatePass3=""
    //锁定次数正则绑定值
    let validatePass4=""
    //锁定时间正则绑定值
    let validatePass5=""
    //最小长度绑定value
    let values=""
    //最大长度绑定value
    let values1=""
    //最小长度正则方法
    validatePass = (rule, value,callback) => {
     values=value*1
      if(value == ""){
        callback(new Error('请输入密码最小长度'));
      // }else if(values >= values1*1){
      //   callback(new Error('密码最小长度不能大于密码最大长度'));
      }else if(/[^\d]/g.test(value)){
        callback(new Error('密码最小长度的输入类型只能为数字类型'));
      }else {
        callback();
      }
    };
    //最大长度正则方法
    validatePass1= (rule, value,callback) =>{
      values1=value*1
     if(value == ""){
        callback(new Error('请输入密码最大长度'));
      }else if(values1 <= values){
       callback(new Error('密码最大长度不能小于密码最大长度'));
     }else if(/[^\d]/g.test(value)){
       callback(new Error('密码最大长度的输入类型只能为数字类型'));
     }else {
       callback();
     }
    };
    validatePass2 = (rule, value,callback) => {
      if(value == ""){
        callback(new Error('请输入过期时间'));
      }else if(/[^\d]/g.test(value)){
        callback(new Error('过期时间的输入类型只能为数字类型'));
      }else {
        callback();
      }
    };
    validatePass3 = (rule, value,callback) => {
      if(value == ""){
        callback(new Error('请输入过期时间'));
      }else if(/[^\d]/g.test(value)){
        callback(new Error('过期时间的输入类型只能为数字类型'));
      }else {
        callback();
      }
    };
    validatePass4 = (rule, value,callback) => {
      if(value == ""){
        callback(new Error('请输入锁定次数'));
      }else if(/[^\d]/g.test(value)){
        callback(new Error('锁定次数的输入类型只能为数字类型'));
      }else {
        callback();
      }
    };
    validatePass5 = (rule, value,callback) => {
      if(value == ""){
        callback(new Error('请输入锁定时间'));
      }else if(/[^\d]/g.test(value)){
        callback(new Error('锁定时间的输入类型只能为数字类型'));
      }else {
        callback();
      }
    };
    return {
      //最小长度绑定value
      values:"",
      //最大长度绑定value
      values1:"",
      form:{},
      page: {
        pageSize: 10,
@@ -195,7 +121,18 @@
              labelWidth:"22%",
              rules: [{
                required: true,
                validator:this.validatePass,
                validator:(rule, value,callback)=>{
                  this.values=value*1
                  if(value == ""){
                    callback(new Error('请输入密码最小长度'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('密码最小长度的输入类型只能为数字类型'));
                  }else if(this.values >= this.values1 && this.values1 != 0){
                    callback(new Error('密码最小长度不能大于密码最大长度'))
                  }else {
                    callback();
                  }
                },
                trigger: 'blur'
              }]
            },
@@ -206,7 +143,18 @@
              labelWidth:"25%",
              rules: [{
                required: true,
                validator:this.validatePass1,
                validator:(rule, value,callback) =>{
                  this.values1=value*1
                  if(value == ""){
                    callback(new Error('请输入密码最大长度'));
                  }else if(this.values1 <= this.values){
                    callback(new Error('密码最大长度不能小于密码最大长度'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('密码最大长度的输入类型只能为数字类型'));
                  }else {
                    callback();
                  }
                },
                trigger: 'change'
              }]
            },
@@ -280,7 +228,15 @@
              labelWidth:"22%",
              rules: [{
                required: true,
                validator:this.validatePass2,
                validator: (rule, value,callback) => {
                  if(value == ""){
                    callback(new Error('请输入过期时间'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('过期时间的输入类型只能为数字类型'));
                  }else {
                    callback();
                  }
                },
                trigger: 'blur'
              }]
            },
@@ -291,7 +247,15 @@
              labelWidth:"25%",
              rules: [{
                required: true,
                validator:this.validatePass3,
                validator:(rule, value,callback) => {
                  if(value == ""){
                    callback(new Error('请输入过期时间'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('过期时间的输入类型只能为数字类型'));
                  }else {
                    callback();
                  }
                },
                trigger: 'blur'
              }]
            },
@@ -302,7 +266,15 @@
              labelWidth:"22%",
              rules: [{
                required: true,
                validator:this.validatePass4,
                validator:(rule, value,callback) => {
                  if(value == ""){
                    callback(new Error('请输入锁定次数'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('锁定次数的输入类型只能为数字类型'));
                  }else {
                    callback();
                  }
                },
                trigger: 'blur'
              }]
            },
@@ -313,7 +285,15 @@
              labelWidth:"25%",
              rules: [{
                required: true,
                validator:this.validatePass5,
                validator:(rule, value,callback) => {
                  if(value == ""){
                    callback(new Error('请输入锁定时间'));
                  }else if(/[^\d]/g.test(value)){
                    callback(new Error('锁定时间的输入类型只能为数字类型'));
                  }else {
                    callback();
                  }
                },
                trigger: 'blur'
              }]
            },
@@ -350,41 +330,72 @@
      this.selectlength=val
    },
    handleCheckboxChange(val) {
      // console.log("val",val);
      const arr = this.option.column[5];
      if(val){
        this.checkboxlength = val.value;
        return
      }
      // console.log("this.checkboxlength",this.checkboxlength);
      this.checkboxlength = val.value;
      this.checkboxedit = this.checkboxlength.toString().split(",");
      if (val.value != undefined && val.value != null) {
        if (this.checkboxlist == val.value) {
      if (val.value !== undefined && val.value !== null) {
        if (this.checkboxlist === val.value) {
          return;
        } else {
          this.checkboxlist = val.value;
          if (
            this.selectlength.value >= val.value.length &&
            this.selectlength.value > val.value.length &&
            val.value.length > 0
          ) {
            this.showMessage("必填种类不能大于组合方法,请重新选择!");
            this.showWarningMessage();
          } else if (
            this.selectlength.value >= this.checkboxedit.length &&
            this.selectlength.value > this.checkboxedit.length &&
            this.checkboxedit.length > 0
          ) {
            this.showMessage("必填种类不能大于组合方法,请重新选择!");
            this.showWarningMessage();
          }
        }
      }
      const disabledCount = Math.min(this.checkboxedit.length, 4);
      for (let i = 0; i < arr.dicData.length; i++) {
        arr.dicData[i].disabled = i >= disabledCount;
      if (val.value !== undefined && val.value !== null) {
        if (val.value.length === 1) {
          this.setDisabled(arr, [0]);
        } else if (val.value.length === 2) {
          this.setDisabled(arr, [0, 1]);
        } else if (val.value.length === 3) {
          this.setDisabled(arr, [0, 1, 2]);
        } else if (val.value.length === 4) {
          this.setDisabled(arr, [0, 1, 2, 3]);
        } else if (val.value.length === 0) {
          this.setDisabled(arr, [-1]);
        }
      } else if (this.checkboxNumber.length !== 0) {
        this.setDisabled(arr, [0, 1, 2, 3]);
      }
      if (this.editFlag == true) {
        const disabledCount = Math.min(this.checkboxedit.length, 4);
        for (let i = 0; i < arr.dicData.length; i++) {
          arr.dicData[i].disabled = i >= disabledCount;
      if (this.editFlag) {
        if (this.checkboxedit.length === 1) {
          this.setDisabled(arr, [0]);
        } else if (this.checkboxedit.length === 2) {
          this.setDisabled(arr, [0, 1]);
        } else if (this.checkboxedit.length === 3) {
          this.setDisabled(arr, [0, 1, 2]);
        } else if (this.checkboxedit.length === 4) {
          this.setDisabled(arr, [0, 1, 2, 3]);
        } else if (this.checkboxedit.length === 0) {
          this.setDisabled(arr, [-1]);
        }
      }
    },
    setDisabled(arr, indices) {
      arr.dicData.forEach((item, index) => {
        item.disabled = !indices.includes(index);
      });
    },
    showWarningMessage() {
      this.$message({
        message: '必填种类不能大于组合方法,请重新选择!',
        type: 'warning',
        showClose: true,
      });
    },
    rowDel(row){
      this.$confirm("确定将选择数据删除?", {
@@ -432,7 +443,7 @@
      this.editFlag=true;
      this.checkboxNumber=row.combinationIds.split(",")
      this.selectNumber=row.requiredType
        if(this.checkboxNumber.length<=this.selectNumber){
        if(this.checkboxNumber.length < this.selectNumber){
          this.$message({
            type:"warning",
            message:"必填种类不能大于组合方法,请重新选择!"
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
@@ -193,6 +193,11 @@
    private String customCodeSerialClass;
    /**
     * è‡ªå®šä¹‰çš„æµæ°´ç®—法类
     */
    private String customCodeSerialClassText;
    /**
     * æ˜¯å¦è‡ªåŠ¨åŒ¹é…åˆ†ç±»å€¼
     */
    private String matchClassifyValueFlag;
@@ -661,6 +666,14 @@
        this.referCodeClassifyOidName = referCodeClassifyOidName;
    }
    public String getCustomCodeSerialClassText() {
        return customCodeSerialClassText;
    }
    public void setCustomCodeSerialClassText(String customCodeSerialClassText) {
        this.customCodeSerialClassText = customCodeSerialClassText;
    }
    @Override
    public String toString() {
        return "CodeBasicSecDTO{" +
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeBasicSec.java
@@ -237,6 +237,12 @@
     */
    private String customCodeSerialClass;
    /**
     * è‡ªå®šä¹‰çš„æµæ°´ç®—法类
     */
    private String customCodeSerialClassText;
    /**
     * æ˜¯å¦è‡ªåŠ¨åŒ¹é…åˆ†ç±»å€¼
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
@@ -200,6 +200,11 @@
    private String customCodeSerialClass;
    /**
     * è‡ªå®šä¹‰çš„æµæ°´ç®—法类
     */
    private String customCodeSerialClassText;
    /**
     * æ˜¯å¦è‡ªåŠ¨åŒ¹é…åˆ†ç±»å€¼
     */
    private String matchClassifyValueFlag;
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeSerialAlgorithmVO.java
@@ -1,11 +1,13 @@
package com.vci.ubcs.code.vo.pagemodel;
import com.vci.ubcs.starter.revision.model.BaseModel;
/**
 * æµæ°´ç®—法类的显示信息
 * @author weidy
 * @date 2022-2-17
 */
public class CodeSerialAlgorithmVO implements java.io.Serializable{
public class CodeSerialAlgorithmVO extends BaseModel {
    /**
     * ç®—法编号
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/UIFormItemVO.java
@@ -3,6 +3,7 @@
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -136,6 +137,10 @@
     * è¾“入提示
     */
    private String inputTip;
    /**
     * å…¶å®ƒå±žæ€§éƒ½å¯ä»¥å¾€é‡Œé¢æ”¾
     */
    private Map<String, String> addField = new HashMap<>();
    public boolean isKeyAttr() {
        return keyAttr;
@@ -329,6 +334,14 @@
        this.selectLibFlag = selectLibFlag;
    }
    public Map<String, String> getAddField() {
        return addField;
    }
    public void setAddField(Map<String, String> addField) {
        this.addField = addField;
    }
    @Override
    public String toString() {
        return "UIFormItemVO{" +
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/poi/util/ExcelUtil.java
@@ -943,7 +943,7 @@
                                    Map<Integer, String> rowDataMap = new HashMap();
                                    for(int columnIndex = 0; columnIndex < rowDataSet.getLastCellNum(); ++columnIndex) {
                                    for(int columnIndex = 0; columnIndex < sheetDataSet.getColName().size(); ++columnIndex) {
                                        Cell cell = rowDataSet.getCell(columnIndex);
                                        Object value = getCellValue(cell, evaluator);
                                        String title = colsNameIndexMap.containsKey(columnIndex) ? (String)colsNameIndexMap.get(columnIndex) : "";
@@ -1025,14 +1025,17 @@
                                            } else {
                                                rowDataMap.put(columnIndex, VciBaseUtil.getStringValueFromObject(value));
                                            }
                                        } else if (!isDataSet && thisField != null && excelColumn != null) {
                                            if (!excelColumn.nullable()) {
                                                throw new VciBaseException("cellValueCanNotNull", new String[]{title, rowIndex + 1 + ""});
                                            }
                                        } else {
                                            if (!isDataSet && thisField != null && excelColumn != null) {
                                                if (!excelColumn.nullable()) {
                                                    throw new VciBaseException("cellValueCanNotNull", new String[]{title, rowIndex + 1 + ""});
                                                }
                                            if (StringUtil.isNotBlank(excelColumn.regExg())) {
                                                throw new VciBaseException("cellValueCanNotNullForReg", new String[]{title, rowIndex + 1 + ""});
                                                if (StringUtil.isNotBlank(excelColumn.regExg())) {
                                                    throw new VciBaseException("cellValueCanNotNullForReg", new String[]{title, rowIndex + 1 + ""});
                                                }
                                            }
                                            rowDataMap.put(columnIndex, VciBaseUtil.getStringValueFromObject(value));
                                        }
                                    }
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -1438,7 +1438,61 @@
        return sb.toString();
    }
    public static String intToRomans(int num) {
    public static String convertArabicToRoman(int num) {
        int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<values.length;i++){
            while(num>=values[i]){
                num=num-values[i];
                sb.append(romans[i]);
            }
        }
        return sb.toString();
    }
    /**
     * æŠŠç½—马数字转换为阿拉伯数字
     * @param m
     * @return
     */
    public static int convertRomanToArabic(String m) {
        int graph[] = new int[400];
        graph['I'] = 1;
        graph['V'] = 5;
        graph['X'] = 10;
        graph['L'] = 50;
        graph['C'] = 100;
        graph['D'] = 500;
        graph['M'] = 1000;
        char[] num = m.toCharArray();
        int sum = graph[num[0]];
        for (int i = 0; i < num.length - 1; i++) {
            if (graph[num[i]] >= graph[num[i + 1]]) {
                sum += graph[num[i + 1]];
            } else {
                sum = sum + graph[num[i + 1]] - 2 * graph[num[i]];
            }
        }
        return sum;
    }
    /***
     * æ ¡éªŒæ˜¯å¦æ˜¯ç½—马数字
     * @param s
     * @return
     */
    public static boolean isRoman(String s) {
        // æ£€æŸ¥è¾“入的字符串是否为空
        if (s == null || s.length() == 0) {
            return false;
        }
        // å°†è¾“入的字符串转换为大写字母
        s = s.toUpperCase();
        // è¿”回结果
        Pattern pattern = Pattern.compile("^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$");
        return pattern.matcher(s ).matches();
    }
    public static String intToRomanTwo(int num) {
        String M[] = {"", "M", "MM", "MMM"};
        String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomRomanSerialAlgorithmExample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.vci.ubcs.code.algorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import java.util.List;
/****
 * è‡ªå®šä¹‰ç½—马流水算法自定义类
 */
@MdmSerialAlgorithm(text = "自定义罗马流水",description = "自定义罗马流水算法")
public class CustomRomanSerialAlgorithmExample {
    /**
     * ç”Ÿæˆç½—马流水号的方法
     * @return æµæ°´å·çš„信息
     */
    @MdmSerialAlgorithmMethod
    public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){
        //将数字流水转为罗马流水
        String romanValue=VciBaseUtil.convertArabicToRoman(5);
        //将罗马流水转为数字流水
        int arabicValue=VciBaseUtil.convertRomanToArabic(romanValue);
        return "";
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/algorithm/CustomSerialAlgorithmExample.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.vci.ubcs.code.algorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithmMethod;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
import java.util.List;
/**
 * æµæ°´ç®—法的示例
 */
@MdmSerialAlgorithm(text = "流水算法的示例",description = "请不要使用这个类,这个类只是示例,用于查看如何编写流水算法")
public class CustomSerialAlgorithmExample {
    /**
     * ç”Ÿæˆæµæ°´å·çš„æ–¹æ³•
     * @return æµæ°´å·çš„信息
     */
    @MdmSerialAlgorithmMethod
    public String serialGenerate(BaseModel data, CodeRuleVO codeRuleVO, List<CodeOrderSecDTO> secDTOList){
        return "";
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithm.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.vci.ubcs.code.annotation;
import org.springframework.stereotype.Component;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * è‡ªå®šä¹‰æµæ°´ç®—法的注解
 *    @author xiejun
  * @date 2023-11-09
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface MdmSerialAlgorithm {
    /**
     * å€¼ï¼Œå®žé™…就是这个注解所在的类的全路径
     * @return å€¼
     */
    String value() default "";
    /**
     * äº‹ä»¶çš„名称
     * @return äº‹ä»¶åç§°
     */
    String text();
    /**
     * æè¿°
     * @return æè¿°
     */
    String description() default "";
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/annotation/MdmSerialAlgorithmMethod.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.vci.ubcs.code.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * è‡ªå®šä¹‰æµæ°´ç®—法处理方法的注解
 * @author xiejun
 * @date 2023-11-09
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MdmSerialAlgorithmMethod {
    /**
     * å€¼
     * @return å€¼
     */
    String value() default "";
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplySwingController.java
@@ -83,13 +83,19 @@
    /**
     * ä½¿ç”¨æ¨¡æ¿çš„主键获取表单的定义
     * @param codeClassifyOid ä½¿ç”¨æ¨¡æ¿çš„分类主键
     * @param map ä¼ çš„æ•°æ®
     * @return UI相关的信息(仅包含表单)
     */
    @GetMapping("/getFormDefineByTemplateOid")
    public MdmUIInfoVO getFormDefineByTemplateOid(String codeClassifyOid){
        CodeClassifyTemplateVO usedTemplateByClassifyOid = mdmEngineService.getUsedTemplateByClassifyOid(codeClassifyOid);
        return mdmEngineService.getFormDefineByTemplateOid(usedTemplateByClassifyOid.getOid(),codeClassifyOid);
    @RequestMapping("/getFormDefineByTemplateOid")
    public MdmUIInfoVO getFormDefineByTemplateOid(@RequestParam Map<String,String> map){
//        CodeClassifyTemplateVO usedTemplateByClassifyOid = mdmEngineService.getUsedTemplateByClassifyOid(codeClassifyOid);
        CodeClassifyTemplateVO usedTemplateByClassifyOid = mdmEngineService.getUsedTemplateByClassifyOid(map.get("codeClassifyOid"));
        MdmUIInfoVO formDefineByTemplate = mdmEngineService.getFormDefineByTemplateOid(usedTemplateByClassifyOid.getOid(), map.get("codeClassifyOid"));
        for (UIFormItemVO item : formDefineByTemplate.getFormDefineVO().getItems()) {
            if(map.get(item.getField()) != null){
                item.getAddField().put("defaultValue",map.get(item.getField()));
            }
        }return formDefineByTemplate;
    }
    /**
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSerialAlgorithmController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.vo.pagemodel.CodeAllCodeVO;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.vci.ubcs.code.service.ICodeSerialAlgorithmService;
/**
 * å…¨éƒ¨ç å€¼ æŽ§åˆ¶å™¨
 *
 * @author ludc
 * @since 2023-04-03
 */
@RestController
@AllArgsConstructor
@RequestMapping("/codeSerialAlgorithmController")
@Api(value = "自定义流水", tags = "自定义流水算法")
public class CodeSerialAlgorithmController extends BladeController {
    /**
     * ç®—法服务
     */
    @Autowired
    private ICodeSerialAlgorithmService algorithmService;
    /**
     * ç®—法的列表
     * @return ç®—法的信息
     */
    @GetMapping("/gridCodeSerialAlgorithm")
    public R<IPage<CodeSerialAlgorithmVO>> gridCodeSerialAlgorithm(){
        IPage<CodeSerialAlgorithmVO> pages= algorithmService.gridSerialAlgorithm();
        return R.data(pages);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeSerialAlgorithmService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.vci.ubcs.code.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import org.springblade.core.tool.api.R;
/**
 * æµæ°´ç®—法类
 * @author weidy
 * @date 2022-2-17
 */
public interface ICodeSerialAlgorithmService {
    /**
     * èŽ·å–æµæ°´ç®—æ³•çš„åˆ—è¡¨
     * @return æµæ°´ç®—法的信息
     */
    IPage<CodeSerialAlgorithmVO>  gridSerialAlgorithm();
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeSerialAlgorithmServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.vci.ubcs.code.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.annotation.MdmSerialAlgorithm;
import com.vci.ubcs.code.service.ICodeSerialAlgorithmService;
import com.vci.ubcs.code.vo.pagemodel.CodeSerialAlgorithmVO;
import com.vci.ubcs.starter.web.util.ApplicationContextProvider;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springframework.aop.framework.Advised;
import org.springframework.aop.support.AopUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * æµæ°´ç®—法的服务
 * @author weidy
 * @date 2022-2-17
 */
@Service
public class CodeSerialAlgorithmServiceImpl implements ICodeSerialAlgorithmService {
    /**
     * èŽ·å–æµæ°´ç®—æ³•çš„åˆ—è¡¨
     *
     * @return æµæ°´ç®—法的信息
     */
    @Override
    public IPage<CodeSerialAlgorithmVO> gridSerialAlgorithm() {
        //使用主键去扫描
        String[] beanNames = ApplicationContextProvider.getApplicationContext().getBeanNamesForAnnotation(MdmSerialAlgorithm.class);
        List<CodeSerialAlgorithmVO> voList = new ArrayList<>();
        if(beanNames!=null && beanNames.length>0){
            for(String beanName : beanNames){
                Object bean = ApplicationContextProvider.getApplicationContext().getBean(beanName);
                if(bean!=null){
                    CodeSerialAlgorithmVO algorithmVO = new CodeSerialAlgorithmVO();
                    //Advised advised = (Advised)bean;
                    Class<?> targetClass = AopUtils.getTargetClass(bean);
                    //Class<?> targetClass = advised.getTargetSource().getTargetClass();
                    algorithmVO.setClassFullName(targetClass.getName());
                    MdmSerialAlgorithm serialAlgorithm = targetClass.getDeclaredAnnotation(MdmSerialAlgorithm.class);
                    if(serialAlgorithm==null){
                        serialAlgorithm = targetClass.getAnnotation(MdmSerialAlgorithm.class);
                    }
                    if(serialAlgorithm !=null) {
                        algorithmVO.setName(serialAlgorithm.text());
                        algorithmVO.setDescription(serialAlgorithm.description());
                        algorithmVO.setId(serialAlgorithm.value());
                        if(StringUtils.isBlank(algorithmVO.getId())){
                            algorithmVO.setId(beanName);
                        }
                        voList.add(algorithmVO);
                    }
                }
            }
        }
        Query query=new Query();
        IPage<CodeSerialAlgorithmVO> queryIPage =Condition.getPage(query);
        queryIPage.setRecords(voList);
        return queryIPage;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
@@ -55,6 +55,7 @@
        <result property="codeFillLimit" column="CODEFILLLIMIT" jdbcType="INTEGER"/>
        <result property="codeFillFlag" column="CODEFILLFLAG" jdbcType="VARCHAR"/>
        <result property="customCodeSerialClass" column="CUSTOMCODESERIALCLASS" jdbcType="VARCHAR"/>
        <result property="customCodeSerialClassText" column="CUSTOMCODESERIALCLASSTEXT" jdbcType="VARCHAR"/>
        <result property="matchClassifyValueFlag" column="MATCHCLASSIFYVALUEFLAG" jdbcType="VARCHAR"/>
        <result property="parentClassifySecOid" column="PARENTCLASSIFYSECOID" jdbcType="VARCHAR"/>
        <result property="parentClassifySecText" column="b__name" jdbcType="VARCHAR"/>
@@ -123,6 +124,7 @@
            PL_CODE_BASICSEC.codelevelvalue,
            PL_CODE_BASICSEC.codefilllength,
            PL_CODE_BASICSEC.customcodeserialclass,
            PL_CODE_BASICSEC.customCodeSerialClassText,
            PL_CODE_BASICSEC.matchclassifyvalueflag,
            PL_CODE_BASICSEC.sectype,
            PL_CODE_BASICSEC.pkcoderule,