pub_svc_platform_web/src/views/system/user/index.vue

1042 lines
42 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-row :gutter="20">
<splitpanes
:horizontal="this.$store.getters.device === 'mobile'"
class="default-theme"
>
<!--部门数据-->
<pane size="16">
<el-col>
<!-- 使用新的部门树组件 -->
<dept-tree-with-operations
:dept-options="enabledDeptOptions"
:default-props="defaultProps"
@node-click="handleNodeClick"
@dept-added="refreshDeptTree"
@dept-updated="refreshDeptTree"
@dept-deleted="refreshDeptTree"
ref="deptTree"
/>
</el-col>
</pane>
<!--用户数据-->
<pane size="84">
<el-col>
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="用户名称" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
<el-input
v-model="queryParams.phonenumber"
placeholder="请输入手机号码"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="用户状态"
clearable
style="width: 240px"
>
<el-option
v-for="dict in dict.type
.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- 添加角色下拉选择框 -->
<el-form-item label="角色" prop="roleId">
<el-select
v-model="queryParams.roleId"
placeholder="请选择角色"
clearable
style="width: 240px"
>
<el-option
v-for="role in roleOptions"
:key="role.roleId"
:label="role.roleName"
:value="role.roleId"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:user:add']"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:user:edit']"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:user:remove']"
>删除
</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:user:export']"
>导出
</el-button>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="userList"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="50"
align="center"
/>
<el-table-column
label="编号"
align="center"
type="index"
width="50"
/>
<!-- <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns.userId.visible" />-->
<el-table-column
label="用户名称"
align="center"
key="userName"
prop="userName"
v-if="columns.userName.visible"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns.nickName.visible" :show-overflow-tooltip="true" />-->
<el-table-column
label="部门"
align="center"
key="deptName"
prop="dept.deptName"
v-if="columns.deptName.visible"
:show-overflow-tooltip="true"
/>
<el-table-column
label="职位"
align="center"
key="postName"
prop="postName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="角色"
align="center"
key="roleName"
prop="roleName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="手机号码"
align="center"
key="phonenumber"
prop="phonenumber"
v-if="columns.phonenumber.visible"
width="120"
/>
<!-- <el-table-column label="状态" align="center" key="status" v-if="columns.status.visible">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns.createTime.visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>-->
<el-table-column
label="操作"
align="center"
width="260"
class-name="small-padding fixed-width"
>
<template
slot-scope="scope"
v-if="scope.row.userId !== 1"
>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"
>删除
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-key"
@click="handleResetPwd(scope.row)"
v-hasPermi="['system:user:resetPwd']"
>重置密码
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-key"
@click="handleUpdatePwd(scope.row)"
v-hasPermi="['system:user:resetPwd']"
>修改密码
</el-button>
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item>
<el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" v-hasPermi="['system:user:edit']">分配角色</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>-->
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</pane>
</splitpanes>
</el-row>
<!-- 添加或修改用户配置对话框 -->
<el-dialog
:title="title"
:visible.sync="open"
width="600px"
append-to-body
>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户名称" prop="userName">
<el-input
v-model="form.userName"
placeholder="请输入用户名称"
maxlength="30"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门" prop="deptId">
<treeselect
v-model="form.deptId"
:options="enabledDeptOptions"
:show-count="true"
placeholder="请选择部门"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="职位" prop="postIds">
<el-select
v-model="form.postIds"
placeholder="请选择职位"
>
<el-option
v-for="item in postOptions"
:key="item.postId"
:label="item.postName"
:value="item.postId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色" prop="roleIds">
<el-select
v-model="form.roleIds"
placeholder="请选择角色"
>
<el-option
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input
v-model="form.phonenumber"
placeholder="请输入手机号码"
maxlength="11"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="账号权限" prop="permissions">
<el-checkbox-group v-model="form.permissions">
<el-checkbox label="大屏"></el-checkbox>
<el-checkbox label="后台"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog
:title="upload.title"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text"
>将文件拖到此处<em>点击上传</em></div
>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />
是否更新已经存在的用户数据
</div>
<span>仅允许导入xls、xlsx格式文件。</span>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板
</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"
>确 定</el-button
>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listUser,
getUser,
delUser,
addUser,
updateUser,
resetUserPwd,
changeUserStatus,
deptTreeSelect,
} from '@/api/system/user'
import { listRole } from '@/api/system/role' // 导入角色API
import { getToken } from '@/utils/auth'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { Splitpanes, Pane } from 'splitpanes'
import 'splitpanes/dist/splitpanes.css'
// 导入部门树组件
import DeptTreeWithOperations from './dept'
export default {
name: 'User',
dicts: ['sys_normal_disable', 'sys_user_sex'],
components: {
Treeselect,
Splitpanes,
Pane,
DeptTreeWithOperations,
},
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 用户表格数据
userList: null,
// 弹出层标题
title: '',
// 所有部门树选项
deptOptions: undefined,
// 过滤掉已禁用部门树选项
enabledDeptOptions: undefined,
// 是否显示弹出层
open: false,
// 部门名称
deptName: undefined,
// 默认密码
initPassword: undefined,
// 日期范围
dateRange: [],
// 岗位选项
postOptions: [],
// 角色选项
roleOptions: [],
// 表单参数
form: {
permissions: ['大屏'],
},
defaultProps: {
children: 'children',
label: 'label',
},
// 用户导入参数
upload: {
// 是否显示弹出层(用户导入)
open: false,
// 弹出层标题(用户导入)
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + '/system/user/importData',
},
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined,
roleId: undefined,
},
// 用于显示角色名称的变量
roleName: '',
// 列信息
columns: {
userId: { label: '用户编号', visible: true },
userName: { label: '用户名称', visible: true },
nickName: { label: '用户昵称', visible: true },
deptName: { label: '部门', visible: true },
phonenumber: { label: '手机号码', visible: true },
status: { label: '状态', visible: true },
createTime: { label: '创建时间', visible: true },
},
// 表单校验
rules: {
userName: [
{
required: true,
message: '用户名称不能为空',
trigger: 'blur',
},
{
min: 2,
max: 20,
message: '用户名称长度必须介于 2 和 20 之间',
trigger: 'blur',
},
],
/*phonenumber: [
{
required: true,
message: '手机号码不能为空',
trigger: 'blur',
},
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur',
},
],*/
deptId: [
{
required: true,
message: '部门不能为空',
trigger: 'blur',
},
],
postIds: [
{
required: true,
message: '岗位不能为空',
trigger: 'blur',
},
],
roleIds: [
{
required: true,
message: '角色不能为空',
trigger: 'blur',
},
],
permissions: [
{
type: 'array',
required: true,
message: '请至少选择一个权限',
trigger: 'blur',
},
],
},
}
},
watch: {
// 根据名称筛选部门树
deptName(val) {
this.$refs.deptTree.filter(val)
},
// 监听路由变化
$route(to, from) {
this.handleRouteParams()
},
},
created() {
this.getList()
this.getDeptTree()
this.getRoleList().then(() => {
this.handleRouteParams()
})
this.getConfigKey('sys.user.initPassword').then((response) => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(
(response) => {
this.userList = response.rows
this.total = response.total
this.loading = false
},
)
},
/** 获取角色列表 */
getRoleList() {
return listRole({
pageNum: 1,
pageSize: 1000,
}).then((response) => {
this.roleOptions = response.rows
return response
})
},
/** 查询部门下拉树结构 */
getDeptTree() {
deptTreeSelect().then((response) => {
this.deptOptions = response.data
this.enabledDeptOptions = this.filterDisabledDept(
JSON.parse(JSON.stringify(response.data)),
)
// 部门树加载完成后,处理路由参数
this.handleRouteParams()
})
},
// 处理路由参数
handleRouteParams() {
const deptId = this.$route.query.deptId
if (deptId && this.deptOptions && this.deptOptions.length > 0) {
// 设置部门ID查询参数
this.queryParams.deptId = deptId
// 选中对应的部门节点
this.$nextTick(() => {
if (this.$refs.deptTree && this.$refs.deptTree.$refs.tree) {
this.$refs.deptTree.$refs.tree.setCurrentKey(
parseInt(deptId),
)
// 触发节点点击事件,确保查询该部门的用户
const node = this.$refs.deptTree.$refs.tree.getNode(
parseInt(deptId),
)
if (node) {
this.handleNodeClick(node.data)
}
}
})
}
// 处理角色ID参数 - 确保角色选项已加载
const roleId = this.$route.query.roleId
if (roleId && this.roleOptions) {
const roleIdNum = parseInt(roleId)
this.queryParams.roleId = roleIdNum
this.handleQuery()
}
},
// 过滤禁用的部门
filterDisabledDept(deptList) {
return deptList
.filter((dept) => !dept.disabled) // 直接过滤掉禁用的部门
.map((dept) => {
const newDept = { ...dept }
if (newDept.children && newDept.children.length) {
newDept.children = this.filterDisabledDept(
newDept.children,
)
}
// 如果 children 为空数组,干脆删除
if (!newDept.children || newDept.children.length === 0) {
delete newDept.children
}
return newDept
})
},
// 筛选节点
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
// 节点单击事件
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.handleQuery()
},
// 用户状态修改
handleStatusChange(row) {
let text = row.status === '0' ? '启用' : '停用'
this.$modal
.confirm('确认要"' + text + '""' + row.userName + '"用户吗?')
.then(function () {
return changeUserStatus(row.userId, row.status)
})
.then(() => {
this.$modal.msgSuccess(text + '成功')
})
.catch(function () {
row.status = row.status === '0' ? '1' : '0'
})
},
// 取消按钮
cancel() {
this.open = false
this.reset()
},
// 表单重置
reset() {
this.form = {
userId: undefined,
deptId: undefined,
userName: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
email: undefined,
sex: undefined,
status: '0',
remark: undefined,
postIds: [],
roleIds: [],
permissions: ['大屏'],
}
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm('queryForm')
this.queryParams.deptId = undefined
this.queryParams.roleId = undefined
this.roleName = ''
// 清除树节点的选中状态
if (this.$refs.deptTree && this.$refs.deptTree.$refs.tree) {
this.$refs.deptTree.$refs.tree.setCurrentKey(null)
}
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.userId)
this.single = selection.length != 1
this.multiple = !selection.length
},
// 更多操作触发
handleCommand(command, row) {
switch (command) {
case 'handleResetPwd':
this.handleResetPwd(row)
break
case 'handleAuthRole':
this.handleAuthRole(row)
break
default:
break
}
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
getUser().then((response) => {
this.postOptions = response.posts
this.roleOptions = response.roles
this.open = true
this.title = '添加用户'
this.form.password = this.initPassword
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const userId = row.userId || this.ids
getUser(userId).then((response) => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
this.$set(this.form, 'postIds', Number(response.postIds))
this.$set(this.form, 'roleIds', Number(response.roleIds))
// 根据后端返回的权限值设置前端显示
// 大屏权限值为1后台权限值为2
const permissions = []
if (response.data.permissions) {
const permissionArray = response.data.permissions
.split(',')
.map(Number)
if (permissionArray.includes(1)) {
// 检查是否有大屏权限
permissions.push('大屏')
}
if (permissionArray.includes(2)) {
// 检查是否有后台权限
permissions.push('后台')
}
}
this.$set(this.form, 'permissions', permissions)
this.open = true
this.title = '修改用户'
this.form.password = ''
})
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
const value = 'Bonus@admin123'
resetUserPwd(row.userId, value).then((response) => {
this.$modal.msgSuccess('重置成功,新密码是:' + value)
})
/*this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
inputValidator: (value) => {
if (/<|>|"|'|\||\\/.test(value)) {
return "不能包含非法字符:< > \" ' \\\ |"
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})*/
},
handleUpdatePwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: '用户密码长度必须介于 5 和 20 之间',
inputValidator: (value) => {
if (/<|>|"|'|\||\\/.test(value)) {
return '不能包含非法字符:< > " \' \\\ |'
}
if (
!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).*$/.test(
value,
)
) {
return '密码必须包含大写字母、小写字母、数字和特殊符号'
}
},
})
.then(({ value }) => {
resetUserPwd(row.userId, value).then((response) => {
this.$modal.msgSuccess('修改成功,新密码是:' + value)
})
})
.catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function (row) {
const userId = row.userId
this.$router.push('/system/user-auth/role/' + userId)
},
/** 提交按钮 */
submitForm: function () {
this.$refs['form'].validate((valid) => {
if (valid) {
// 保存原始的 postIds 和 roleIds 值
const originalPostIds = this.form.postIds
const originalRoleIds = this.form.roleIds
const originalPermissions = [...this.form.permissions] // 保存原始权限数组
this.form.postIds = Array.isArray(this.form.postIds)
? this.form.postIds
: [this.form.postIds]
this.form.roleIds = Array.isArray(this.form.roleIds)
? this.form.roleIds
: [this.form.roleIds]
// 权限数据处理:根据选中的权限组合传值
// 大屏权限值为1后台权限值为2
const permissionValues = []
if (
this.form.permissions &&
this.form.permissions.includes('大屏')
) {
permissionValues.push(1) // 大屏权限
}
if (
this.form.permissions &&
this.form.permissions.includes('后台')
) {
permissionValues.push(2) // 后台权限
}
// 将数组转换为逗号分隔的字符串
this.form.permissions = permissionValues.join(',')
if (this.form.userId != undefined) {
updateUser(this.form)
.then((response) => {
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
.catch(() => {
// 如果更新失败,恢复原始值
this.form.postIds = originalPostIds
this.form.roleIds = originalRoleIds
this.form.permissions = originalPermissions // 恢复原始权限值
})
} else {
addUser(this.form)
.then((response) => {
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
.catch(() => {
// 如果更新失败,恢复原始值
this.form.postIds = originalPostIds
this.form.roleIds = originalRoleIds
this.form.permissions = originalPermissions // 恢复原始权限值
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal
.confirm('是否确认删除此数据项?')
.then(function () {
return delUser(userIds)
})
.then(() => {
this.getList()
this.$modal.msgSuccess('删除成功')
})
.catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
this.download(
'system/user/export',
{
...this.queryParams,
},
`user_${new Date().getTime()}.xlsx`,
)
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = '用户导入'
this.upload.open = true
},
/** 下载模板操作 */
importTemplate() {
this.download(
'system/user/importTemplate',
{},
`user_template_${new Date().getTime()}.xlsx`,
)
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
'</div>',
'导入结果',
{ dangerouslyUseHTMLString: true },
)
this.getList()
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit()
},
// 刷新部门树
refreshDeptTree() {
this.getDeptTree()
},
},
}
</script>