guanqb
2024-01-29 bf45ce8559383eb2c940affc6296c4c156ecf5e2
src/views/system/user.vue
@@ -27,12 +27,12 @@
                            @click="handleReset">密码重置
                        </el-button>
                        <!-- <el-button type="info"
                       size="small"
                       plain
                       v-if="userInfo.role_name.includes('admin')"
                       icon="el-icon-setting"
                       @click="handlePlatform">平台配置
            </el-button> -->
                         size="small"
                         plain
                         v-if="userInfo.role_name.includes('admin')"
                         icon="el-icon-setting"
                         @click="handlePlatform">平台配置
              </el-button> -->
                        <el-button type="info" size="small" plain v-if="userInfo.role_name.includes('admin')"
                            icon="el-icon-coordinate" @click="handleLock">账号解封
                        </el-button>
@@ -77,34 +77,34 @@
                    </avue-form>
                </el-dialog>
                <!-- <el-dialog title="用户平台配置"
                   append-to-body
                   :visible.sync="platformBox">
          <avue-crud :option="platformOption"
                     :table-loading="platformLoading"
                     :data="platformData"
                     ref="platformCrud"
                     v-model="platformForm"
                     :before-open="platformBeforeOpen"
                     :page.sync="platformPage"
                     :permission="platformPermissionList"
                     @row-update="platformRowUpdate"
                     @search-change="platformSearchChange"
                     @search-reset="platformSearchReset"
                     @selection-change="platformSelectionChange"
                     @current-change="platformCurrentChange"
                     @size-change="platformSizeChange"
                     @refresh-change="platformRefreshChange"
                     @on-load="platformOnLoad">
            <template slot-scope="{row}"
                      slot="tenantName">
              <el-tag>{{row.tenantName}}</el-tag>
            </template>
            <template slot-scope="{row}"
                      slot="userTypeName">
              <el-tag>{{row.userTypeName}}</el-tag>
            </template>
          </avue-crud>
        </el-dialog> -->
                     append-to-body
                     :visible.sync="platformBox">
            <avue-crud :option="platformOption"
                       :table-loading="platformLoading"
                       :data="platformData"
                       ref="platformCrud"
                       v-model="platformForm"
                       :before-open="platformBeforeOpen"
                       :page.sync="platformPage"
                       :permission="platformPermissionList"
                       @row-update="platformRowUpdate"
                       @search-change="platformSearchChange"
                       @search-reset="platformSearchReset"
                       @selection-change="platformSelectionChange"
                       @current-change="platformCurrentChange"
                       @size-change="platformSizeChange"
                       @refresh-change="platformRefreshChange"
                       @on-load="platformOnLoad">
              <template slot-scope="{row}"
                        slot="tenantName">
                <el-tag>{{row.tenantName}}</el-tag>
              </template>
              <template slot-scope="{row}"
                        slot="userTypeName">
                <el-tag>{{row.userTypeName}}</el-tag>
              </template>
            </avue-crud>
          </el-dialog> -->
            </basic-container>
        </el-col>
    </el-row>
@@ -120,17 +120,35 @@
    updatePlatform,
    add,
    grant,
    resetPassword, unlock
    resetPassword,
    unlock
} from "@/api/system/user"
import { exportBlob } from "@/api/common"
import { getDeptTree, getDeptLazyTree } from "@/api/system/dept"
import { getRoleTree } from "@/api/system/role"
import { getPostList } from "@/api/system/post"
import { mapGetters } from "vuex"
import {
    exportBlob
} from "@/api/common"
import {
    getDeptTree,
    getDeptLazyTree
} from "@/api/system/dept"
import {
    getRoleTree
} from "@/api/system/role"
import {
    getPostList
} from "@/api/system/post"
import {
    mapGetters
} from "vuex"
import website from '@/config/website'
import { getToken } from '@/util/auth'
import { downloadXls } from "@/util/util"
import { dateNow } from "@/util/date"
import {
    getToken
} from '@/util/auth'
import {
    downloadXls
} from "@/util/util"
import {
    dateNow
} from "@/util/date"
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import func from "@/util/func"
@@ -222,37 +240,37 @@
                viewBtn: true,
                dialogType: 'drawer',
                dialogClickModal: false,
                column: [
                    {
                        label: "登录账号",
                        prop: "account",
                        search: true,
                        display: false
                    },
                    // {
                    //   label: "所属租户",
                    //   prop: "tenantName",
                    //   slot: true,
                    //   display: false
                    // },
                    {
                        label: "用户姓名",
                        prop: "realName",
                        search: true,
                        display: false
                    },
                    {
                        label: "所属角色",
                        prop: "roleName",
                        slot: true,
                        display: false
                    },
                    {
                        label: "所属部门",
                        prop: "deptName",
                        slot: true,
                        display: false
                    },
                column: [{
                    label: "登录账号",
                    prop: "account",
                    search: true,
                    searchLabelWidth: 76,
                    display: false
                },
                // {
                //   label: "所属租户",
                //   prop: "tenantName",
                //   slot: true,
                //   display: false
                // },
                {
                    label: "用户姓名",
                    prop: "realName",
                    search: true,
                    display: false
                },
                {
                    label: "所属角色",
                    prop: "roleName",
                    slot: true,
                    display: false
                },
                {
                    label: "所属部门",
                    prop: "deptName",
                    slot: true,
                    display: false
                },
                    // {
                    //   label: "用户平台",
                    //   prop: "userTypeName",
@@ -279,213 +297,220 @@
                    //   }]
                    // },
                ],
                group: [
                    {
                        label: '基础信息',
                        prop: 'baseInfo',
                        icon: 'el-icon-user-solid',
                        column: [
                            // {
                            //   label: "所属租户",
                            //   prop: "tenantId",
                            //   type: "tree",
                            //   dicUrl: "/api/blade-system/tenant/select",
                            //   props: {
                            //     label: "tenantName",
                            //     value: "tenantId"
                            //   },
                            //   hide: !website.tenantMode,
                            //   addDisplay: website.tenantMode,
                            //   editDisplay: website.tenantMode,
                            //   viewDisplay: website.tenantMode,
                            //   rules: [{
                            //     required: true,
                            //     message: "请输入所属租户",
                            //     trigger: "click"
                            //   }],
                            //   span: 24,
                            // },
                            {
                                label: "登录账号",
                                prop: "account",
                                rules: [{
                                    required: true,
                                    message: "请输入登录账号",
                                    trigger: "blur"
                                }],
                            },
                            // {
                            //   label: "用户平台",
                            //   type: "select",
                            //   dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
                            //   props: {
                            //     label: "dictValue",
                            //     value: "dictKey"
                            //   },
                            //   dataType: "number",
                            //   slot: true,
                            //   prop: "userType",
                            //   rules: [{
                            //     required: true,
                            //     message: "请选择用户平台",
                            //     trigger: "blur"
                            //   }]
                            // },
                            {
                                label: '密码',
                                prop: 'password',
                                hide: true,
                                editDisplay: false,
                                viewDisplay: false,
                                rules: [{ required: true, validator: validatePass, trigger: 'blur' }]
                            },
                            {
                                label: '确认密码',
                                prop: 'password2',
                                hide: true,
                                editDisplay: false,
                                viewDisplay: false,
                                rules: [{ required: true, validator: validatePass2, trigger: 'blur' }]
                            },
                        ]
                group: [{
                    label: '基础信息',
                    prop: 'baseInfo',
                    icon: 'el-icon-user-solid',
                    column: [
                        // {
                        //   label: "所属租户",
                        //   prop: "tenantId",
                        //   type: "tree",
                        //   dicUrl: "/api/blade-system/tenant/select",
                        //   props: {
                        //     label: "tenantName",
                        //     value: "tenantId"
                        //   },
                        //   hide: !website.tenantMode,
                        //   addDisplay: website.tenantMode,
                        //   editDisplay: website.tenantMode,
                        //   viewDisplay: website.tenantMode,
                        //   rules: [{
                        //     required: true,
                        //     message: "请输入所属租户",
                        //     trigger: "click"
                        //   }],
                        //   span: 24,
                        // },
                        {
                            label: "登录账号",
                            prop: "account",
                            rules: [{
                                required: true,
                                message: "请输入登录账号",
                                trigger: "blur"
                            }],
                        },
                        // {
                        //   label: "用户平台",
                        //   type: "select",
                        //   dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
                        //   props: {
                        //     label: "dictValue",
                        //     value: "dictKey"
                        //   },
                        //   dataType: "number",
                        //   slot: true,
                        //   prop: "userType",
                        //   rules: [{
                        //     required: true,
                        //     message: "请选择用户平台",
                        //     trigger: "blur"
                        //   }]
                        // },
                        {
                            label: '密码',
                            prop: 'password',
                            hide: true,
                            editDisplay: false,
                            viewDisplay: false,
                            rules: [{
                                required: true,
                                validator: validatePass,
                                trigger: 'blur'
                            }]
                        },
                        {
                            label: '确认密码',
                            prop: 'password2',
                            hide: true,
                            editDisplay: false,
                            viewDisplay: false,
                            rules: [{
                                required: true,
                                validator: validatePass2,
                                trigger: 'blur'
                            }]
                        },
                    ]
                },
                {
                    label: '详细信息',
                    prop: 'detailInfo',
                    icon: 'el-icon-s-order',
                    column: [{
                        label: "用户昵称",
                        prop: "name",
                        hide: true,
                        rules: [{
                            required: true,
                            message: "请输入用户昵称",
                            trigger: "blur"
                        }]
                    },
                    {
                        label: '详细信息',
                        prop: 'detailInfo',
                        icon: 'el-icon-s-order',
                        column: [
                            {
                                label: "用户昵称",
                                prop: "name",
                                hide: true,
                                rules: [{
                                    required: true,
                                    message: "请输入用户昵称",
                                    trigger: "blur"
                                }]
                            },
                            {
                                label: "用户姓名",
                                prop: "realName",
                                rules: [{
                                    required: true,
                                    message: "请输入用户姓名",
                                    trigger: "blur"
                                }, {
                                    min: 2,
                                    max: 5,
                                    message: '姓名长度在2到5个字符'
                                }]
                            },
                            {
                                label: "手机号码",
                                prop: "phone",
                                overHidden: true
                            },
                            {
                                label: "电子邮箱",
                                prop: "email",
                                hide: true,
                                overHidden: true
                            },
                            {
                                label: "用户性别",
                                prop: "sex",
                                type: "select",
                                dicData: [
                                    {
                                        label: "男",
                                        value: 1
                                    },
                                    {
                                        label: "女",
                                        value: 2
                                    },
                                    {
                                        label: "未知",
                                        value: 3
                                    }
                                ],
                                hide: true
                            },
                            {
                                label: "用户生日",
                                type: "date",
                                prop: "birthday",
                                format: "yyyy-MM-dd hh:mm:ss",
                                valueFormat: "yyyy-MM-dd hh:mm:ss",
                                hide: true
                            },
                            {
                                label: "账号状态",
                                prop: "statusName",
                                hide: true,
                                display: false
                            }
                        ]
                        label: "用户姓名",
                        prop: "realName",
                        rules: [{
                            required: true,
                            message: "请输入用户姓名",
                            trigger: "blur"
                        }, {
                            min: 2,
                            max: 5,
                            message: '姓名长度在2到5个字符'
                        }]
                    },
                    {
                        label: '职责信息',
                        prop: 'dutyInfo',
                        icon: 'el-icon-s-custom',
                        column: [
                            // {
                            //   label: "用户编号",
                            //   prop: "code",
                            // },
                            {
                                label: "所属角色",
                                prop: "roleId",
                                multiple: true,
                                type: "tree",
                                dicData: [],
                                props: {
                                    label: "title"
                                },
                                checkStrictly: true,
                                slot: true,
                                rules: [{
                                    required: true,
                                    message: "请选择所属角色",
                                    trigger: "click"
                                }]
                            },
                            {
                                label: "所属部门",
                                prop: "deptId",
                                type: "tree",
                                // multiple: true,
                                dicData: [],
                                props: {
                                    label: "title"
                                },
                                checkStrictly: true,
                                slot: true,
                                span: 12,
                                rules: [{
                                    required: true,
                                    message: "请选择所属部门",
                                    trigger: "click"
                                }]
                            },
                            // {
                            //   label: "所属岗位",
                            //   prop: "postId",
                            //   type: "tree",
                            //   multiple: true,
                            //   dicData: [],
                            //   props: {
                            //     label: "postName",
                            //     value: "id"
                            //   },
                            //   rules: [{
                            //     required: true,
                            //     message: "请选择所属岗位",
                            //     trigger: "click"
                            //   }],
                            // },
                        ]
                        label: "手机号码",
                        prop: "phone",
                        overHidden: true
                    },
                    {
                        label: "电子邮箱",
                        prop: "email",
                        hide: true,
                        overHidden: true
                    },
                    {
                        label: "用户性别",
                        prop: "sex",
                        type: "select",
                        dicData: [{
                            label: "男",
                            value: 1
                        },
                        {
                            label: "女",
                            value: 2
                        },
                        {
                            label: "未知",
                            value: 3
                        }
                        ],
                        hide: true
                    },
                    {
                        label: "用户生日",
                        type: "date",
                        prop: "birthday",
                        format: "yyyy-MM-dd hh:mm:ss",
                        valueFormat: "yyyy-MM-dd hh:mm:ss",
                        hide: true
                    },
                    {
                        label: "账号状态",
                        prop: "statusName",
                        hide: true,
                        display: false
                    }
                    ]
                },
                {
                    label: '职责信息',
                    prop: 'dutyInfo',
                    icon: 'el-icon-s-custom',
                    column: [
                        // {
                        //   label: "用户编号",
                        //   prop: "code",
                        // },
                        {
                            label: "所属角色",
                            prop: "roleId",
                            type: "tree",
                            multiple: true,
                            checkStrictly: true,
                            leafOnly: false,
                            dicData: [],
                            props: {
                                label: "title"
                            },
                            rules: [{
                                required: true,
                                message: "请选择所属角色",
                                trigger: "click"
                            }]
                        },
                        {
                            label: "所属部门",
                            prop: "deptId",
                            type: "tree",
                            // multiple: true,
                            dicData: [],
                            dataType: "string",
                            props: {
                                label: "title",
                                value: "id"
                            },
                            // checkStrictly: true,
                            slot: true,
                            span: 12,
                            rules: [{
                                required: true,
                                message: "请选择所属部门",
                                trigger: "click"
                            }]
                        },
                        // {
                        //   label: "所属岗位",
                        //   prop: "postId",
                        //   type: "tree",
                        //   multiple: true,
                        //   dicData: [],
                        //   props: {
                        //     label: "postName",
                        //     value: "id"
                        //   },
                        //   rules: [{
                        //     required: true,
                        //     message: "请选择所属岗位",
                        //     trigger: "click"
                        //   }],
                        // },
                    ]
                },
                ]
            },
            data: [],
@@ -504,112 +529,107 @@
                dialogClickModal: false,
                menuWidth: 120,
                editBtnText: '配置',
                column: [
                    {
                        label: "登录账号",
                        prop: "account",
                        search: true,
                        display: false
                column: [{
                    label: "登录账号",
                    prop: "account",
                    search: true,
                    display: false
                },
                {
                    label: "所属租户",
                    prop: "tenantName",
                    slot: true,
                    display: false
                },
                {
                    label: "用户姓名",
                    prop: "realName",
                    search: true,
                    display: false
                },
                {
                    label: "用户平台",
                    prop: "userTypeName",
                    slot: true,
                    display: false
                },
                {
                    label: "用户平台",
                    type: "select",
                    dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
                    props: {
                        label: "dictValue",
                        value: "dictKey"
                    },
                    {
                        label: "所属租户",
                        prop: "tenantName",
                        slot: true,
                        display: false
                    },
                    {
                        label: "用户姓名",
                        prop: "realName",
                        search: true,
                        display: false
                    },
                    {
                        label: "用户平台",
                        prop: "userTypeName",
                        slot: true,
                        display: false
                    },
                    {
                        label: "用户平台",
                        type: "select",
                        dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
                        props: {
                            label: "dictValue",
                            value: "dictKey"
                        },
                        dataType: "number",
                        search: true,
                        hide: true,
                        display: false,
                        prop: "userType",
                        rules: [{
                            required: true,
                            message: "请选择用户平台",
                            trigger: "blur"
                        }]
                    },
                    {
                        label: "用户拓展",
                        prop: "userExt",
                        type: "textarea",
                        minRows: 8,
                        span: 24,
                        overHidden: true,
                        row: true,
                        hide: true,
                    },
                    dataType: "number",
                    search: true,
                    hide: true,
                    display: false,
                    prop: "userType",
                    rules: [{
                        required: true,
                        message: "请选择用户平台",
                        trigger: "blur"
                    }]
                },
                {
                    label: "用户拓展",
                    prop: "userExt",
                    type: "textarea",
                    minRows: 8,
                    span: 24,
                    overHidden: true,
                    row: true,
                    hide: true,
                },
                ],
            },
            excelForm: {},
            excelOption: {
                submitBtn: false,
                emptyBtn: false,
                column: [
                    {
                        label: '模板上传',
                        prop: 'excelFile',
                        type: 'upload',
                        drag: true,
                        loadText: '模板上传中,请稍等',
                        span: 24,
                        propsHttp: {
                            res: 'data'
                        },
                        tip: '请上传 .xls,.xlsx 标准格式文件',
                        action: "/api/blade-system/user/import-user"
                column: [{
                    label: '模板上传',
                    prop: 'excelFile',
                    type: 'upload',
                    drag: true,
                    loadText: '模板上传中,请稍等',
                    span: 24,
                    propsHttp: {
                        res: 'data'
                    },
                    tip: '请上传 .xls,.xlsx 标准格式文件',
                    action: "/api/blade-system/user/import-user"
                },
                {
                    label: "数据覆盖",
                    prop: "isCovered",
                    type: "switch",
                    align: "center",
                    width: 80,
                    dicData: [{
                        label: "否",
                        value: 0
                    },
                    {
                        label: "数据覆盖",
                        prop: "isCovered",
                        type: "switch",
                        align: "center",
                        width: 80,
                        dicData: [
                            {
                                label: "否",
                                value: 0
                            },
                            {
                                label: "是",
                                value: 1
                            }
                        ],
                        value: 0,
                        slot: true,
                        rules: [
                            {
                                required: true,
                                message: "请选择是否覆盖",
                                trigger: "blur"
                            }
                        ]
                    },
                    {
                        label: '模板下载',
                        prop: 'excelTemplate',
                        formslot: true,
                        span: 24,
                        label: "是",
                        value: 1
                    }
                    ],
                    value: 0,
                    slot: true,
                    rules: [{
                        required: true,
                        message: "请选择是否覆盖",
                        trigger: "blur"
                    }]
                },
                {
                    label: '模板下载',
                    prop: 'excelTemplate',
                    formslot: true,
                    span: 24,
                }
                ]
            }
        }
@@ -698,7 +718,7 @@
            row['userType'] = 1
            row.deptId = func.join(row.deptId)
            row.roleId = func.join(row.roleId)
            // row.postId = func.join(row.postId);
            row.postId = func.join(row.postId)
            add(row).then(() => {
                this.initFlag = false
                this.onLoad(this.page)
@@ -717,7 +737,7 @@
            row['userType'] = 1
            row.deptId = func.join(row.deptId)
            row.roleId = func.join(row.roleId)
            // row.postId = func.join(row.postId);
            row.postId = func.join(row.postId)
            update(row).then(() => {
                this.initFlag = false
                this.onLoad(this.page)
@@ -864,7 +884,9 @@
                type: "warning"
            }).then(() => {
                NProgress.start()
                exportBlob(`/api/blade-system/user/export-user?${this.website.tokenHeader}=${getToken()}&account=${account}&realName=${realName}`).then(res => {
                exportBlob(
                    `/api/blade-system/user/export-user?${this.website.tokenHeader}=${getToken()}&account=${account}&realName=${realName}`
                ).then(res => {
                    downloadXls(res.data, `用户数据表${dateNow()}.xlsx`)
                    NProgress.done()
                })
@@ -985,4 +1007,4 @@
.box .el-scrollbar__wrap {
    overflow: scroll;
}
</style>
</style>