ludc
2024-07-12 c89223e74b0a00094639c24bd16c7f3995632f5c
Merge remote-tracking branch 'origin/master'
已修改11个文件
646 ■■■■■ 文件已修改
Source/plt-web/plt-web-ui/src/api/system/password/api.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/actions/base/startWorkFlow.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/page/index/top/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/page/index/top/top-menu.vue 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/department/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/password/index.vue 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/role/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/system/user/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/system/password/api.js
@@ -11,3 +11,31 @@
    }
  });
}
// 删除
export function deleteDep(params) {
  return request({
    url: "/api/passwordStrategyQueryController/delPasswordStrateg",
    method: "delete",
    params
  });
}
// 添加
export function addDept(params) {
  return request({
    url: "/api/passwordStrategyQueryController/addPasswordStrateg",
    method: "post",
    data:params
  });
}
// 编辑
export function updatePasswordStrateg(params) {
  return request({
    url: "/api/passwordStrategyQueryController/updatePasswordStrateg",
    method: "put",
    data:params
  });
}
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue
@@ -2,7 +2,6 @@
  <el-dialog
    v-dialogDrag
    :close-on-click-modal="false"
    :destroy-on-close="true"
    :title="title"
    :visible.sync="visible"
    append-to-body="true"
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue
@@ -2,7 +2,6 @@
  <el-dialog
    v-dialogDrag
    :close-on-click-modal="false"
    :destroy-on-close="true"
    :title="title"
    :visible.sync="visible"
    width="40%"
Source/plt-web/plt-web-ui/src/components/actions/base/startWorkFlow.vue
@@ -1,7 +1,6 @@
<template>
  <el-dialog v-dialogDrag
             :close-on-click-modal="false"
             :destroy-on-close="true"
             :visible.sync="visible"
             :width="width"
             append-to-body="true"
Source/plt-web/plt-web-ui/src/components/actions/base/uploadFile.vue
@@ -2,7 +2,6 @@
  <el-dialog
    v-dialogDrag
    :close-on-click-modal="false"
    :destroy-on-close="true"
    :visible.sync="visible"
    :width="width"
    append-to-body
Source/plt-web/plt-web-ui/src/page/index/top/index.vue
@@ -1,255 +1,318 @@
<template>
  <div class="avue-top">
    <div class="top-bar__left">
      <div class="avue-breadcrumb"
      <div v-if="showCollapse"
           :class="[{ 'avue-breadcrumb--active': isCollapse }]"
           v-if="showCollapse">
           class="avue-breadcrumb">
        <i class="icon-navicon"
           @click="setCollapse"></i>
      </div>
    </div>
    <div class="top-bar__title">
      <div class="top-bar__item top-bar__item--show"
           v-if="showMenu">
      <div v-if="showMenu"
           class="top-bar__item top-bar__item--show">
        <top-menu ref="topMenu"></top-menu>
      </div>
      <span class="top-bar__item"
            v-if="showSearch">
      <span v-if="showSearch"
            class="top-bar__item">
        <top-search></top-search>
      </span>
    </div>
    <div class="top-bar__right">
      <el-tooltip v-if="showColor"
                  effect="dark"
                  :content="$t('navbar.color')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item">
          <top-color></top-color>
        </div>
      </el-tooltip>
      <el-tooltip v-if="showDebug"
                  effect="dark"
                  :content="logsFlag?$t('navbar.bug'):logsLen+$t('navbar.bugs')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item">
          <top-logs></top-logs>
        </div>
      </el-tooltip>
      <el-tooltip v-if="showLock"
                  effect="dark"
                  :content="$t('navbar.lock')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item">
          <top-lock></top-lock>
        </div>
      </el-tooltip>
      <el-tooltip v-if="showTheme"
                  effect="dark"
                  :content="$t('navbar.theme')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item top-bar__item--show">
          <top-theme></top-theme>
        </div>
      </el-tooltip>
      <el-tooltip effect="dark"
                  :content="$t('navbar.notice')"
      <el-tooltip :content="$t('navbar.notice')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item top-bar__item--show">
          <top-notice></top-notice>
        </div>
      </el-tooltip>
      <el-tooltip effect="dark"
                  :content="$t('navbar.language')"
      <el-tooltip :content="$t('navbar.language')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item top-bar__item--show">
          <top-lang></top-lang>
        </div>
      </el-tooltip>
      <el-tooltip v-if="showFullScren"
                  effect="dark"
                  :content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')"
                  effect="dark"
                  placement="bottom">
        <div class="top-bar__item">
          <i :class="isFullScren?'icon-tuichuquanping':'icon-quanping'"
             @click="handleScreen"></i>
        </div>
      </el-tooltip>
      <img class="top-bar__img"
           :src="userInfo.avatar">
      <img :src="userInfo.avatar"
           class="top-bar__img">
      <el-dropdown>
        <span class="el-dropdown-link">
          {{userInfo.userName}}
          {{ userInfo.userName }}
          <i class="el-icon-arrow-down el-icon--right"></i>
        </span>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item>
            <router-link to="/">{{$t('navbar.dashboard')}}</router-link>
            <router-link to="/">{{ $t('navbar.dashboard') }}</router-link>
          </el-dropdown-item>
          <el-dropdown-item>
            <router-link to="/info/index">{{$t('navbar.userinfo')}}</router-link>
          <el-dropdown-item @click.native="changePasswordHandler">
            <!--            <router-link to="/info/index">{{ $t('navbar.userinfo') }}</router-link>-->
            修改密码
          </el-dropdown-item>
          <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept"
                            >{{$t('navbar.switchDept')}}
          >{{ $t('navbar.switchDept') }}
          </el-dropdown-item>
          <el-dropdown-item @click.native="logout"
                            divided>{{$t('navbar.logOut')}}
          <el-dropdown-item divided
                            @click.native="logout">{{ $t('navbar.logOut') }}
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      <el-dialog title="用户信息选择"
      <el-dialog :visible.sync="userBox"
                 append-to-body
                 :visible.sync="userBox"
                 title="用户信息选择"
                 width="350px">
        <avue-form ref="form" :option="userOption" v-model="userForm" @submit="submitSwitch"/>
        <avue-form ref="form" v-model="userForm" :option="userOption" @submit="submitSwitch"/>
      </el-dialog>
      <!-- 修改密码对话框     -->
      <el-dialog
        v-dialogDrag
        :visible.sync="passwordVisible"
        append-to-body="true"
        class="avue-dialog"
        title="修改密码"
        width="50%">
        <avue-form ref="form" v-model="passwordForm" :option="passwordOption" @submit="submitSwitch"/>
      </el-dialog>
    </div>
  </div>
</template>
<script>
  import {resetRouter} from '@/router/router'
  import {mapGetters, mapState} from "vuex";
  import {fullscreenToggel, listenfullscreen} from "@/util/util";
  import topLock from "./top-lock";
  import topMenu from "./top-menu";
  import topSearch from "./top-search";
  import topTheme from "./top-theme";
  import topLogs from "./top-logs";
  import topColor from "./top-color";
  import topNotice from './top-notice'
  import topLang from "./top-lang";
import {resetRouter} from '@/router/router'
import {mapGetters, mapState} from "vuex";
import {fullscreenToggel, listenfullscreen} from "@/util/util";
import topLock from "./top-lock";
import topMenu from "./top-menu";
import topSearch from "./top-search";
import topTheme from "./top-theme";
import topLogs from "./top-logs";
import topColor from "./top-color";
import topNotice from './top-notice'
import topLang from "./top-lang";
  export default {
    components: {
      topLock,
      topMenu,
      topSearch,
      topTheme,
      topLogs,
      topColor,
      topNotice,
      topLang
    },
    name: "top",
    data() {
      return {
        userBox: false,
        userForm: {
          deptId: '',
          roleId: ''
        },
        userOption: {
          labelWidth: 70,
          submitBtn: true,
          emptyBtn: false,
          submitText: '切换',
          column: [
            {
              label: '部门',
              prop: 'deptId',
              type: 'select',
              props: {
                label: 'deptName',
                value: 'id'
              },
              dicUrl: '/api/blade-system/dept/select',
              span: 24,
              display: false,
              rules: [{
export default {
  components: {
    topLock,
    topMenu,
    topSearch,
    topTheme,
    topLogs,
    topColor,
    topNotice,
    topLang
  },
  name: "top",
  data() {
    return {
      passwordVisible: false,
      passwordForm: {},
      passwordOption: {
        submitText:'保存',
        column: [
          {
            label: '登陆密码',
            prop: 'input',
            span: 24,
            labelWidth:"15%",
            rules: [
              {
                required: true,
                message: "请选择部门",
                trigger: "blur"
              }],
            },
            {
              label: '角色',
              prop: 'roleId',
              type: 'select',
              props: {
                label: 'roleName',
                value: 'id'
              },
              dicUrl: '/api/blade-system/role/select',
              span: 24,
              display: false,
              rules: [{
                message: '请输入登陆密码',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '新登陆密码',
            prop: 'input1',
            span: 24,
            labelWidth:"15%",
            rules: [
              {
                required: true,
                message: "请选择角色",
                trigger: "blur"
              }],
                message: '请输入新登陆密码',
                trigger: 'blur'
              }
            ]
          },
          {
            label: '新密码登陆确认',
            prop: 'input2',
            span: 24,
            labelWidth:"15%",
            rules: [
              {
                required: true,
                message: '请确认登陆密码',
                trigger: 'blur'
              }
            ]
          }
        ]
      },
      userBox: false,
      userForm: {
        deptId: '',
        roleId: ''
      },
      userOption: {
        labelWidth: 70,
        submitBtn: true,
        emptyBtn: false,
        submitText: '切换',
        column: [
          {
            label: '部门',
            prop: 'deptId',
            type: 'select',
            props: {
              label: 'deptName',
              value: 'id'
            },
          ]
        }
      };
    },
    filters: {},
    created() {
    },
    mounted() {
      listenfullscreen(this.setScreen);
    },
    computed: {
      ...mapState({
        showDebug: state => state.common.showDebug,
        showTheme: state => state.common.showTheme,
        showLock: state => state.common.showLock,
        showFullScren: state => state.common.showFullScren,
        showCollapse: state => state.common.showCollapse,
        showSearch: state => state.common.showSearch,
        showMenu: state => state.common.showMenu,
        showColor: state => state.common.showColor
      }),
      ...mapGetters([
        "userInfo",
        "isFullScren",
        "tagWel",
        "tagList",
        "isCollapse",
        "tag",
        "logsLen",
        "logsFlag"
      ])
    },
    methods: {
      handleScreen() {
        fullscreenToggel();
      },
      setCollapse() {
        this.$store.commit("SET_COLLAPSE");
      },
      setScreen() {
        this.$store.commit("SET_FULLSCREN");
      },
      switchDept() {
        const userId = this.userInfo.user_id;
        const deptColumn = this.findObject(this.userOption.column, "deptId");
        deptColumn.dicUrl = `/api/blade-system/dept/select?userId=${userId}`;
        deptColumn.display = true;
        const roleColumn = this.findObject(this.userOption.column, "roleId");
        roleColumn.dicUrl = `/api/blade-system/role/select?userId=${userId}`;
        roleColumn.display = true;
        this.userBox = true;
      },
      submitSwitch (form, done) {
        this.$store.dispatch("refreshToken", form).then(() => {
          this.userBox = false;
          this.$router.push({path: "/"});
        })
        done();
      },
      logout() {
        this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
          confirmButtonText: this.$t("submitText"),
          cancelButtonText: this.$t("cancelText"),
          type: "warning"
        }).then(() => {
          this.$store.dispatch("LogOut").then(() => {
            resetRouter();
            this.$router.push({path: "/login"});
          });
        });
            dicUrl: '/api/blade-system/dept/select',
            span: 24,
            display: false,
            rules: [{
              required: true,
              message: "请选择部门",
              trigger: "blur"
            }],
          },
          {
            label: '角色',
            prop: 'roleId',
            type: 'select',
            props: {
              label: 'roleName',
              value: 'id'
            },
            dicUrl: '/api/blade-system/role/select',
            span: 24,
            display: false,
            rules: [{
              required: true,
              message: "请选择角色",
              trigger: "blur"
            }],
          },
        ]
      }
    };
  },
  filters: {},
  created() {
  },
  mounted() {
    listenfullscreen(this.setScreen);
  },
  computed: {
    ...mapState({
      showDebug: state => state.common.showDebug,
      showTheme: state => state.common.showTheme,
      showLock: state => state.common.showLock,
      showFullScren: state => state.common.showFullScren,
      showCollapse: state => state.common.showCollapse,
      showSearch: state => state.common.showSearch,
      showMenu: state => state.common.showMenu,
      showColor: state => state.common.showColor
    }),
    ...mapGetters([
      "userInfo",
      "isFullScren",
      "tagWel",
      "tagList",
      "isCollapse",
      "tag",
      "logsLen",
      "logsFlag"
    ])
  },
  methods: {
    // 修改密码
    changePasswordHandler() {
      console.log('123');
      this.passwordVisible = true;
    },
    handleScreen() {
      fullscreenToggel();
    },
    setCollapse() {
      this.$store.commit("SET_COLLAPSE");
    },
    setScreen() {
      this.$store.commit("SET_FULLSCREN");
    },
    switchDept() {
      const userId = this.userInfo.user_id;
      const deptColumn = this.findObject(this.userOption.column, "deptId");
      deptColumn.dicUrl = `/api/blade-system/dept/select?userId=${userId}`;
      deptColumn.display = true;
      const roleColumn = this.findObject(this.userOption.column, "roleId");
      roleColumn.dicUrl = `/api/blade-system/role/select?userId=${userId}`;
      roleColumn.display = true;
      this.userBox = true;
    },
    submitSwitch(form, done) {
      this.$store.dispatch("refreshToken", form).then(() => {
        this.userBox = false;
        this.$router.push({path: "/"});
      })
      done();
    },
    logout() {
      this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
        confirmButtonText: this.$t("submitText"),
        cancelButtonText: this.$t("cancelText"),
        type: "warning"
      }).then(() => {
        this.$store.dispatch("LogOut").then(() => {
          resetRouter();
          this.$router.push({path: "/login"});
        });
      });
    }
  };
  }
};
</script>
<style lang="scss" scoped>
Source/plt-web/plt-web-ui/src/page/index/top/top-menu.vue
@@ -3,17 +3,17 @@
    <el-menu :default-active="activeIndex"
             mode="horizontal"
             text-color="#333">
      <el-menu-item index="0" @click.native="openHome(itemHome)" key="0">
      <el-menu-item key="0" index="0" @click.native="openHome(itemHome)">
        <template slot="title">
          <i :class="itemHome.source"></i>
          <span>{{generateTitle(itemHome)}}</span>
          <span>{{ generateTitle(itemHome) }}</span>
        </template>
      </el-menu-item>
      <template v-for="(item,index) in items">
        <el-menu-item :index="item.id+''" @click.native="openMenu(item)" :key="index">
        <el-menu-item :key="index" :index="item.id+''" @click.native="openMenu(item)">
          <template slot="title">
            <i :class="item.source" style="padding-right: 5px;"></i>
            <span>{{generateTitle(item)}}</span>
            <span>{{ generateTitle(item) }}</span>
          </template>
        </el-menu-item>
      </template>
@@ -22,48 +22,48 @@
</template>
<script>
  import {mapGetters} from "vuex";
import {mapGetters} from "vuex";
  export default {
    name: "top-menu",
    data() {
      return {
        itemHome: {
          name: '首页',
          source: 'el-icon-menu',
        },
        activeIndex: "0",
        items: [],
      };
export default {
  name: "top-menu",
  data() {
    return {
      itemHome: {
        name: '首页',
        source: 'el-icon-menu',
      },
      activeIndex: "0",
      items: [],
    };
  },
  inject: ["index"],
  created() {
    this.getMenu();
  },
  computed: {
    ...mapGetters(["tagCurrent", "menu"])
  },
  methods: {
    openHome(itemHome) {
      this.index.openMenu(itemHome);
      this.$router.push({
        path: this.$router.$avueRouter.getPath({name: itemHome.name, src: ''}, {})
      });
    },
    inject: ["index"],
    created() {
      this.getMenu();
    openMenu(item) {
      this.index.openMenu(item)
    },
    computed: {
      ...mapGetters(["tagCurrent", "menu"])
    getMenu() {
      /*this.$store.dispatch("GetTopMenu").then(res => {
        this.items = res;
      });*/
    },
    methods: {
      openHome(itemHome) {
        this.index.openMenu(itemHome);
        this.$router.push({
          path: this.$router.$avueRouter.getPath({name: itemHome.name, src: ''}, {})
        });
      },
      openMenu(item) {
        this.index.openMenu(item)
      },
      getMenu() {
        /*this.$store.dispatch("GetTopMenu").then(res => {
          this.items = res;
        });*/
      },
      generateTitle(item) {
        return this.$router.$avueRouter.generateTitle(
          item.name,
          (item.meta || {}).i18n
        );
      },
    }
  };
    generateTitle(item) {
      return this.$router.$avueRouter.generateTitle(
        item.name,
        (item.meta || {}).i18n
      );
    },
  }
};
</script>
Source/plt-web/plt-web-ui/src/views/system/department/index.vue
@@ -37,7 +37,6 @@
    <el-dialog
      v-dialogDrag
      v-loading="statisticsLoading"
      :destroy-on-close="true"
      :visible.sync="statisticsVisible"
      append-to-body="true"
      class="avue-dialog"
Source/plt-web/plt-web-ui/src/views/system/password/index.vue
@@ -2,18 +2,17 @@
  <basic-container>
    <avue-crud
      ref="passWordCrud"
      v-model="form"
      :data="tableData"
      :option="option"
      :page.sync="page"
      :table-loading="tableLoading"
      v-model="form"
      @on-load="getTableList"
      @refresh-change="handleRefresh"
      @size-change="sizeChange"
      @current-change="currentChange"
      @row-save="rowSaveHandler"
      @row-update="rowUpdateHandler"
      @row-del="rowDeleteHandler"
    >
      <template slot="menu" slot-scope="{ row, index }">
        <el-button
@@ -36,7 +35,7 @@
      <template slot="name" slot-scope="{row}">
        <el-tag>{{row.name}}</el-tag>
        <el-tag>{{ row.name }}</el-tag>
      </template>
      <template slot="defaultFlag" slot-scope="{row}">
        <el-tag v-if="row.defaultFlag" type="success">是</el-tag>
@@ -48,22 +47,23 @@
</template>
<script>
import {refDataGrid} from "@/api/system/password/api"
import {refDataGrid, deleteDep, addDept, updatePasswordStrateg} from "@/api/system/password/api"
import basicOption from "@/util/basic-option";
import {column} from "@/views/system/password/option";
import Vue from "vue";
export default {
  name: "index",
  data(){
    return{
      form:{},
      tableData:[],
      option:{
  data() {
    return {
      form: {},
      tableData: [],
      option: {
        ...basicOption,
        selection:false,
        calcHeight:-60,
        menuWidth:150,
        column:[
        selection: false,
        calcHeight: -60,
        menuWidth: 150,
        editBtn: false,
        delBtn: false,
        column: [
          {
            label: '策略名称',
            prop: 'name',
@@ -90,7 +90,7 @@
                  callback(new Error('请输入密码最小长度'));
                } else if (/[^\d]/g.test(value)) {
                  callback(new Error('密码最小长度的输入类型只能为数字类型'));
                } else if ( this.minValue >=  this.maxValue &&  this.maxValue != 0) {
                } else if (this.minValue >= this.maxValue && this.maxValue != 0) {
                  callback(new Error('密码最小长度不能大于密码最大长度'))
                } else {
                  callback();
@@ -111,7 +111,7 @@
                this.maxValue = value * 1
                if (value == "") {
                  callback(new Error('请输入密码最大长度'));
                } else if ( this.maxValue <=  this.minValue) {
                } else if (this.maxValue <= this.minValue) {
                  callback(new Error('密码最大长度不能小于密码最大长度'));
                } else if (/[^\d]/g.test(value)) {
                  callback(new Error('密码最大长度的输入类型只能为数字类型'));
@@ -288,6 +288,7 @@
            prop: 'defaultFlag',
            type: 'switch',
            labelWidth: "30%",
            value: 0,
            dicData: [{
              label: '否',
              value: 0
@@ -304,24 +305,23 @@
        total: 0,
        pageSizes: [10, 30, 50, 100],
      },
      tableLoading:false,
      checkboxlength: "", //添加存放多选的变量,用于下拉菜单的禁用效果和必填种类是否大于组合方式然后提示用户重新选择
      selectlength: 0,    //这个是下拉菜单的数据变量
      checkboxlist: "" ,  //这个是用于防止change时间冒泡,出现两次弹窗定义的变量
      checkboxNumber: "", //用于首次点击编辑,判断组合方式是否小于必填种类的变量
      selectNumber: "",   //这个也是存放多选的变量,效果一样,只是用作在编辑模块
      tableLoading: false,
      checkboxlength: "", // 添加存放多选的变量,用于下拉菜单的禁用效果和必填种类是否大于组合方式然后提示用户重新选择
      selectlength: 0,    // 下拉菜单的数据变量
      checkboxlist: "",  // 用于防止change时间冒泡,出现两次弹窗定义的变量
      checkboxNumber: "", // 用于首次点击编辑,判断组合方式是否小于必填种类的变量
      selectNumber: "",   // 存放多选的变量,效果一样,只是用作在编辑模块
      checkboxedit: "",   // 用于判断是否是编辑
      editFlag: false,
      minValue:"", // 最小长度value
      maxValue:""  // 最大长度value
      minValue: "",        // 最小长度value
      maxValue: ""         // 最大长度value
    }
  },
  methods:{
  methods: {
    // 表格初始化请求
    getTableList() {
      this.tableLoading = true;
      refDataGrid(this.page.currentPage, this.page.pageSize).then(res =>{
        console.log(res);
      refDataGrid(this.page.currentPage, this.page.pageSize).then(res => {
        this.tableData = res.data.data;
        this.page.total = res.data.total;
        this.tableLoading = false;
@@ -329,27 +329,38 @@
    },
    // 表格头部刷新
    handleRefresh(){
    handleRefresh() {
      this.getTableList();
    },
    //  条数
    sizeChange(val){
    sizeChange(val) {
      this.page.pageSize = val;
    },
    // 页码
    currentChange(val){
    currentChange(val) {
      this.page.currentPage = val;
    },
    // 添加
    rowSaveHandler(){
      console.log(this.form.requireCharCount);
    rowSaveHandler(row, done, loading) {
      row.combinations = row.requireCharType.join(',');
      delete row.requireCharType;
      addDept(row).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
          done()
        }
      }).catch(err => {
        loading()
        console.log(err);
      })
    },
    // 编辑按钮
    handleEdit(row,index){
    handleEdit(row, index) {
      this.$refs.passWordCrud.rowEdit(row, index);
      this.editFlag = true;
      this.checkboxNumber = row.requireCharType.split(",");
@@ -357,22 +368,48 @@
    },
    // 修改
    rowUpdateHandler(){
    },
    // 删除按钮
    handleDel(){
    rowUpdateHandler(row, index, done,loading) {
      row.combinations = row.requireCharType;
      delete row.requireCharType;
      updatePasswordStrateg(row).then(res => {
        if (res.data.code === 200) {
          this.$message.success(res.data.obj);
          this.getTableList();
          done()
        }
      }).catch(err => {
        loading()
        console.log(err);
      })
    },
    // 删除
    rowDeleteHandler(){
    handleDel(row, index) {
      let params = {
        pwdIds: row.oid
      }
      this.$confirm('您确定要删除当前的密码策略吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteDep(params).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTableList();
          }
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // 必填种类changge事件
    handleSelectChange(val){
    handleSelectChange(val) {
      this.selectlength = val.value;
    },
@@ -430,7 +467,7 @@
      }
    },
    // 循环找到对应必填种类禁用选项
    // 过滤找到对应必填种类禁用选项
    setDisabled(arr, indices) {
      arr.dicData.forEach((item, index) => {
        item.disabled = !indices.includes(index);
@@ -441,8 +478,8 @@
}
</script>
<style scoped lang="scss">
.avue-form__group--flex{
<style lang="scss" scoped>
.avue-form__group--flex {
  padding-bottom: 25px !important;
}
Source/plt-web/plt-web-ui/src/views/system/role/index.vue
@@ -40,7 +40,6 @@
    <el-dialog
      v-dialogDrag
      v-loading="statisticsLoading"
      :destroy-on-close="true"
      :visible.sync="statisticsVisible"
      append-to-body="true"
      class="avue-dialog"
Source/plt-web/plt-web-ui/src/views/system/user/index.vue
@@ -77,7 +77,6 @@
    <el-dialog
      v-dialogDrag
      v-loading="pwdLoading"
      :destroy-on-close="true"
      :visible.sync="pwdVisible"
      append-to-body="true"
      class="avue-dialog"
@@ -106,7 +105,6 @@
    <el-dialog
      v-dialogDrag
      v-loading="departLoading"
      :destroy-on-close="true"
      :visible.sync="departVisible"
      append-to-body="true"
      class="avue-dialog"