YZProjectCloud/yanzhu-ui-vue3/src/views/system/user/index.vue

760 lines
35 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-row :gutter="20">
<!--部门数据-->
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="Search"
style="margin-bottom: 20px" />
</div>
<div class="head-container">
<el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }"
:expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" node-key="id"
highlight-current accordion :default-expanded-keys="defaultEK" @node-click="handleNodeClick" />
</div>
</el-col>
<!--用户数据-->
<el-col :span="20" :xs="24">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="用户名称" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入用户名称" clearable style="width: 240px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
@keyup.enter="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 sys_normal_disable" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" style="width: 308px;">
<el-date-picker v-model="dateRange" 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="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @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="Plus" @click="handleAdd"
v-hasPermi="['system:user:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:user:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:user:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="Upload" @click="handleImport"
v-hasPermi="['system:user:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['system:user:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></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" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="登录账号" align="center" key="userName" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" />
<el-table-column label="用户名称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
:show-overflow-tooltip="true" />
<el-table-column label="所属部门" align="center" key="deptName" prop="dept.deptName"
v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="用户类型" align="center" v-if="columns[4].visible">
<template #default="scope">
<dict-tag :options="sys_user_type" :value="scope.row.userType" />
</template>
</el-table-column>
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber"
v-if="columns[5].visible" width="120" />
<el-table-column label="人员岗位" align="center" prop="craftPost">
<template #default="scope">
{{ getWorkType(scope.row.workType) }}
</template>
</el-table-column>
<el-table-column label="用户状态" align="center" key="status" v-if="columns[6].visible">
<template #default="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[7].visible" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top" v-if="scope.row.userId !== 1">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.userId !== 1">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']"></el-button>
</el-tooltip>
<el-tooltip content="重置密码" placement="top" v-if="scope.row.userId !== 1">
<el-button link type="primary" icon="Key" @click="handleResetPwd(scope.row)"
v-hasPermi="['system:user:resetPwd']"></el-button>
</el-tooltip>
<el-tooltip content="分配角色" placement="top" v-if="scope.row.userId !== 1">
<el-button link type="primary" icon="CircleCheck" @click="handleAuthRole(scope.row)"
v-hasPermi="['system:user:edit']"></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-col>
</el-row>
<!-- 添加或修改用户配置对话框 -->
<el-dialog :title="title" v-model="open" width="880px" append-to-body>
<el-form :model="form" :rules="rules" ref="userRef" label-width="88px">
<el-row>
<el-col :span="24">
<el-form-item label="所属部门" prop="deptId">
<el-tree-select ref="selTreeDept" v-if="data.mode == 'add'" v-model="form.deptId" :data="deptOptions"
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
placeholder="请选择所属部门" check-strictly style="width:100%" @change="v=>handleChangeDept(v)" />
<el-tag type="primary" v-else>{{ form.dept?.deptName }}</el-tag>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户姓名" maxlength="30" style="width: 150px;" />
<!--
<el-button v-if="data.mode == 'add' && !data.editUser" type="primary" style="margin-left: 10px;"
@click="doQueryUserByName">查询</el-button>
<el-button v-if="data.editUser" type="success" style="margin-left: 10px;"
@click="doCleanEditData">清除</el-button>-->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户类型" prop="userType">
<el-select v-model="form.userType" placeholder="请选择用户类型" style="width: 100%"
@change="doRoleChange">
<el-option v-for="dict in sys_user_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" :disabled="form.userId || data.editUser" placeholder="请输入手机号码"
maxlength="11" style="width: 150px;" autocomplete="new-password" disableautocomplete />
<el-button v-if="data.mode == 'add' && !data.editUser" type="primary" style="margin-left: 10px;"
@click="doQueryUser">查询</el-button>
<el-button v-if="data.editUser" type="success" style="margin-left: 10px;"
@click="doCleanEditData">清除</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="登录密码" prop="password">
<el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20"
:disabled="form.userId" :show-password="!form.userId" autocomplete="new-password"
disableautocomplete />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择用户性别" style="width:100%">
<el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户岗位" prop="workType">
<el-select v-model="form.workType" v-if="form.userType == '00'" placeholder="请选择用户岗位"
style="width:100%">
<el-option v-for="item in data.sysWorkTypes" :key="item.value" :label="item.label"
:value="item.value"></el-option>
</el-select>
<el-select v-model="form.userWorkType" v-if="form.userType != '00'" style="width:40%"
@change="doWorkTypeChange">
<el-option v-for="item in data.prjWorkCategories" :key="item" :label="item"
:value="item"></el-option>
</el-select>
<el-select v-model="form.workType" v-if="form.userType != '00'" placeholder="请选择用户岗位"
style="width:calc(60% - 12px);margin-left:10px;">
<el-option v-for="item in data.prjWorkTypes" :key="item.value" :label="item.label"
:value="item.value"></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" multiple placeholder="请选择用户角色" style="width:100%">
<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-col :span="24" v-if="form.userType == '99'">
<el-form-item label="证件号码" prop="cardCode">
<el-input v-model="form.cardCode" placeholder="请输入证件号码" maxlength="18" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="form.userType == '99'">
<el-form-item label="入场近照" prop="avatar">
<image-upload v-model="form.avatar" :limit="1" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="data.loading">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload ref="uploadRef" :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>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<template #tip>
<div class="el-upload__tip text-center">
<div class="el-upload__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>
</template>
</el-upload>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="User">
import { getToken } from "@/utils/auth";
import { getDeptRole } from "@/api/system/role";
import {
changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, selectByPhone, deptTreeSelect, getUserByName
} from "@/api/system/user";
import { onMounted } from "vue";
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_user_type, sys_normal_disable, sys_user_sex, user_work_type } = proxy.useDict("sys_user_type", "sys_normal_disable", "sys_user_sex", "user_work_type");
const userList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const dateRange = ref([]);
const deptName = ref("");
const deptOptions = ref(undefined);
const initPassword = ref(undefined);
const postOptions = ref([]);
const roleOptions = ref([]);
const selTreeDept = ref();
const defaultEK = ref([100]);
/*** */
const upload = reactive({
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData"
});
//
const columns = ref([
{ key: 0, label: ``, visible: false },
{ key: 1, label: ``, visible: true },
{ key: 2, label: ``, visible: true },
{ key: 3, label: ``, visible: true },
{ key: 4, label: ``, visible: true },
{ key: 5, label: ``, visible: true },
{ key: 6, label: ``, visible: true },
{ key: 7, label: ``, visible: true }
]);
const data = reactive({
loading: false,
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
nickName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
},
rules: {
deptId: [{ required: true, message: "", trigger: "change" }],
userName: [{ required: false, message: "", trigger: "blur" }, { min: 2, max: 20, message: " 2 20 ", trigger: "blur" }],
nickName: [{ required: true, message: "", trigger: "blur" }],
userType: [{ required: true, message: "", trigger: "change" }],
workType: [{ required: true, message: "", trigger: "change" }],
cardCode: [{ required: true, message: "", trigger: "blur" }],
avatar: [{ required: true, message: "", trigger: "change" }],
roleIds: [{ required: true, message: "", trigger: "change" }],
password: [{ required: true, message: "", trigger: "blur" }, { min: 5, max: 20, message: " 5 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" }],
},
editUser: null,
mode: '',
sysWorkTypes: [], //
prjWorkTypeObj: {},
prjWorkCategories: [],//
prjWorkTypes: [],//
});
const { queryParams, form, rules } = toRefs(data);
/** */
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
/** 根据名称筛选部门树 */
watch(deptName, val => {
proxy.$refs["deptTreeRef"].filter(val);
});
/** 查询部门下拉树结构 */
function getDeptTree() {
deptTreeSelect().then(response => {
deptOptions.value = response.data;
defaultEK.value.push(response.data[0].id);
getUserWorkType();
});
};
//用于用户增加的查询
function doQueryUser() {
selectByPhone(form.value.phonenumber).then(d => {
{
if (!d.data) {
proxy.$modal.msgError("未找到数据!")
}
data.editUser = d.data || null;
showEditUserData();
}
});
}
function doWorkTypeChange() {
data.prjWorkTypes = data.prjWorkTypeObj[form.value.userWorkType]
}
function doQueryUserByName() {
getUserByName(form.value.nickName).then(d => {
if (!d.data) {
proxy.$modal.msgError("未找到数据!")
}
data.editUser = d.data || null
showEditUserData();
});
}
function showEditUserData() {
let old = data.editUser
if (old) {
form.value.nickName = old.nickName;
form.value.phonenumber = old.phonenumber;
form.value.sex = old.sex;
form.value.cardCode = old.cardCode;
form.value.avatar = old.avatar;
} else {
form.value.nickName = "";
form.value.phonenumber = "";
form.value.sex = "";
form.value.cardCode = "";
form.value.avatar = "";
}
}
function doCleanEditData() {
data.editUser = null;
showEditUserData();
}
function doRoleChange() {
if (data.mode == 'add') {
if (form.value.userType == 99) {
data.rules = {
deptId: [{ required: true, message: "所属单位不能为空", trigger: "change" }],
userName: [{ required: false, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 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" }],
cardCode: [{ required: true, message: "证件号码不能为空", trigger: "blur" }],
avatar: [{ required: true, message: "入场近照不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
}
} else {
data.rules = {
deptId: [{ required: true, message: "所属单位不能为空", trigger: "change" }],
userName: [{ required: false, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 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" }]
}
}
form.value.workType = '';
}
else {
if (form.value.userType == 99) {
data.rules = {
userName: [{ required: false, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
cardCode: [{ required: true, message: "证件号码不能为空", trigger: "blur" }],
avatar: [{ required: true, message: "入场近照不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
}
} else {
data.rules = {
userName: [{ required: false, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
}
}
}
}
/** 查询用户列表 */
function getList() {
loading.value = true;
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
loading.value = false;
userList.value = res.rows;
total.value = res.total;
});
};
/** 节点单击事件 */
function handleNodeClick(data) {
queryParams.value.deptId = data.id;
handleQuery();
};
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
function resetQuery() {
dateRange.value = [];
proxy.resetForm("queryRef");
queryParams.value.deptId = undefined;
proxy.$refs.deptTreeRef.setCurrentKey(null);
handleQuery();
};
/** 删除按钮操作 */
function handleDelete(row) {
const userIds = row.userId || ids.value;
proxy.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
return delUser(userIds);
}).then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
}).catch(() => { });
};
/** 导出按钮操作 */
function handleExport() {
proxy.download("system/user/export", {
...queryParams.value,
}, `user_${new Date().getTime()}.xlsx`);
};
/** 用户状态修改 */
function handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
proxy.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
return changeUserStatus(row.userId, row.status);
}).then(() => {
proxy.$modal.msgSuccess(text + "成功");
}).catch(function () {
row.status = row.status === "0" ? "1" : "0";
});
};
/** 更多操作 */
function handleCommand(command, row) {
switch (command) {
case "handleResetPwd":
handleResetPwd(row);
break;
case "handleAuthRole":
handleAuthRole(row);
break;
default:
break;
}
};
/** 跳转角色分配 */
function handleAuthRole(row) {
const userId = row.userId;
router.push("/system/user-auth/role/" + userId);
};
/** 重置密码按钮操作 */
function handleResetPwd(row) {
proxy.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
proxy.$modal.msgSuccess("修改成功,新密码是:" + value);
});
}).catch(() => { });
};
/** 选择条数 */
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.userId);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 导入按钮操作 */
function handleImport() {
upload.title = "用户导入";
upload.open = true;
};
/** 下载模板操作 */
function importTemplate() {
proxy.download("system/user/importTemplate", {
}, `user_template_${new Date().getTime()}.xlsx`);
};
/**文件上传中处理 */
const handleFileUploadProgress = (event, file, fileList) => {
upload.isUploading = true;
};
/** 文件上传成功处理 */
const handleFileSuccess = (response, file, fileList) => {
upload.open = false;
upload.isUploading = false;
proxy.$refs["uploadRef"].handleRemove(file);
proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
getList();
};
/** 提交上传文件 */
function submitFileForm() {
proxy.$refs["uploadRef"].submit();
};
/** 重置操作表单 */
function reset() {
form.value = {
userId: undefined,
deptId: undefined,
userName: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
postIds: [],
roleIds: [],
userType: '00',
userWorkType: undefined,
workType: undefined,
};
form.value.userWorkType = data.prjWorkCategories[0];
data.prjWorkTypes = data.prjWorkTypeObj[form.value.userWorkType];
proxy.resetForm("userRef");
data.mode = ''
};
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
};
/** 新增按钮操作 */
function handleAdd() {
reset();
getUser().then(response => {
data.rules = {
deptId: [{ required: true, message: "所属单位不能为空", trigger: "change" }],
userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 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" }]
}
roleOptions.value = [];
postOptions.value = response.posts;
open.value = true;
title.value = "添加用户";
form.value.password = initPassword.value;
data.mode = 'add'
});
};
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const userId = row.userId || ids.value;
getUser(userId).then(response => {
data.rules = {
workType: [{ required: true, message: "用户岗位不能为空", trigger: "change" }],
userType: [{ required: true, message: "用户类型不能为空", trigger: "change" }],
roleIds: [{ required: true, message: "用户角色不能为空", trigger: "change" }],
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
}
form.value = response.data;
postOptions.value = response.posts;
form.value.postIds = response.postIds;
form.value.roleIds = response.roleIds;
form.value.workType = form.value.workType ? "" + form.value.workType : "";
if (form.value.userType == '99') {
let tmps = user_work_type.value.filter(d => d.value == form.value.workType);
if (tmps.length > 0) {
form.value.userWorkType = tmps[0].remark;
data.prjWorkTypes = data.prjWorkTypeObj[form.value.userWorkType];
}
}
open.value = true;
title.value = "修改用户";
form.value.password = "";
data.mode = 'edit'
let oldRoleIds=form.value.roleIds
handleChangeDept(form.value.deptId,()=>{
form.value.roleIds=oldRoleIds;
});
});
};
function getWorkType(wt) {
if (wt) {
let tmps = user_work_type.value.filter(d => d.value == wt);
if (tmps.length > 0) {
return tmps[0].remark ? tmps[0].remark + " - " + tmps[0].label : tmps[0].label;
}
}
return "";
}
/** 根据单位选择角色 */
function handleChangeDept(value,cb) {
form.value.roleIds = [];
getDeptRole(value).then(response => {
roleOptions.value = response.data;
cb && cb();
});
}
const getCompId = () => {
const getCompId = n => {
if (n.data.data.deptType == 2) {
return n.data.id
} else {
let pnode = node.parent;
if (!pnode) {
return ""
} else {
return getCompId(pnode);
}
}
}
let ndData = selTreeDept.value.getCurrentNode();
let node = selTreeDept.value.getNode(ndData.id);
let compId = getCompId(node);
return compId;
}
/** 提交按钮 */
function submitForm() {
data.loading = true;
proxy.$refs["userRef"].validate(valid => {
if (valid) {
if (form.value.userId != undefined) {
updateUser(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
data.mode = ""
data.loading = false;
});
} else {
addUser(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
data.mode = ""
data.loading = false;
});
}
} else {
data.loading = false;
}
});
};
function getUserWorkType() {
data.sysWorkTypes = user_work_type.value.filter(d => d.elTagClass == "系统人员");
let obj = {};
user_work_type.value.filter(d => d.elTagClass == "项目人员").forEach(d => {
let bigType = d.remark;
d.value = "" + d.value;
if (!obj[bigType]) {
obj[bigType] = [];
data.prjWorkCategories.push(bigType);
}
obj[bigType].push(d);
});
data.prjWorkTypeObj = obj;
}
getDeptTree();
getList();
</script>