This commit is contained in:
xyc 2025-08-04 14:26:35 +08:00
parent 5e848771f9
commit 8460e2b6bd
3 changed files with 285 additions and 128 deletions

View File

@ -1,5 +1,4 @@
<template>
<!-- 对话框(添加 / 修改) -->
<el-drawer
title="选择用户"
@ -7,65 +6,127 @@
:visible.sync="drawVisible"
@close="cancelForm"
>
<div style="padding: 0 10px;margin-bottom: 70px">
<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="mobile">
<el-input v-model="queryParams.mobile" placeholder="请输入手机号码" clearable style="width: 240px"
@keyup.enter.native="handleQuery"/>
</el-form-item>
<div style="padding: 0 10px; margin-bottom: 70px">
<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="mobile">
<el-input
v-model="queryParams.mobile"
placeholder="请输入手机号码"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="formLoading"
:data="list"
:stripe="true"
@select="selectRow"
@select-all="handleSelectAll">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="用户编号" align="center" key="id" prop="id" 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="mobile" prop="mobile" v-if="columns[4].visible" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<el-table
v-loading="formLoading"
:data="list"
:stripe="true"
@select="selectRow"
@select-all="handleSelectAll"
>
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column
label="用户编号"
align="center"
key="id"
prop="id"
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="mobile"
prop="mobile"
v-if="columns[4].visible"
width="120"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
v-if="columns[6].visible"
width="160"
>
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
<!-- 弹窗 -->
<el-dialog title="选择岗位" v-model="showSlect" width="60%" destroy-on-close>
<element-form ref="form" :model="form" :rules="rules">
<el-form-item label="岗位" prop="postId">
<el-select multiple v-model="form.roleIds" placeholder="请选择岗位">
<el-option v-for="item in postOptions" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</element-form>
</el-dialog>
<div style="position: absolute;bottom: 0;width: 100%;right: 0;padding: 5px 20px 0;z-index: 999;background: white;text-align: right">
<div
style="
position: absolute;
bottom: 0;
width: 100%;
right: 0;
padding: 5px 20px 0;
z-index: 999;
background: white;
text-align: right;
"
>
<div class="demo-drawer__footer">
<el-button @click="cancelForm"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
@ -76,18 +137,21 @@
</template>
<script>
import { listUser } from "@/api/system/user";
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
import * as WorkerApi from "@/api/repair/repairworker";
import { getTenantId } from "@/utils/auth";
import {
listUser
} from "@/api/system/user";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import * as WorkerApi from '@/api/repair/repairworker';
import {getTenantId} from "@/utils/auth";
import {addUser, listSelectUser, permissionAssign} from "./api/staff";
addUser,
listSelectUser,
permissionAssign,
listRole,
getPost,
} from "./api/staff";
import ElementForm from "@/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue";
export default {
name: "ChooseCouponDraw",
components: {ElementForm},
name: "ChooseUserDraw",
components: { ElementForm },
data() {
return {
//
@ -106,33 +170,43 @@ export default {
total: 0,
//
list: [],
form: {
form: {},
//
roleForm: {},
//
roleRules: {
roleIds: [
{ required: true, message: "请选择至少一个角色", trigger: "change" },
],
},
//
roleOptions: [],
rules: {
username: [
{required: true, message: "员工名称不能为空", trigger: "blur"}
{ required: true, message: "员工名称不能为空", trigger: "blur" },
],
nickname: [
{required: true, message: "员工昵称不能为空", trigger: "blur"}
{ required: true, message: "员工昵称不能为空", trigger: "blur" },
],
password: [
{required: true, message: "员工密码不能为空", trigger: "blur"}
{ required: true, message: "员工密码不能为空", trigger: "blur" },
],
email: [
{
type: "email",
message: "'请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
trigger: ["blur", "change"],
},
],
mobile: [
{
required: true,
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
pattern:
/^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
trigger: "blur",
},
],
},
multipleSelection: [],
//
@ -144,7 +218,7 @@ export default {
status: undefined,
deptId: undefined,
createTime: [],
tenantId: getTenantId()
tenantId: getTenantId(),
},
//
columns: [
@ -154,73 +228,91 @@ export default {
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
{ key: 6, label: `创建时间`, visible: true }
{ key: 6, label: `创建时间`, visible: true },
],
//
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
sexDictDatas: getDictDatas(DICT_TYPE.SYSTEM_USER_SEX),
};
},
methods: {
/** 打开弹窗 */
async open(multipleSelection) {
this.drawVisible = true;
this.formLoading = true;
this.reset();
try {
const res = await listSelectUser(this.queryParams);
this.list = res.data.list;
this.total = res.data.total;
if (multipleSelection){
this.multipleSelection = JSON.parse(JSON.stringify(multipleSelection))
this.defaultChecked(multipleSelection)
//
const userRes = await listSelectUser(this.queryParams);
this.list = userRes.data.list;
this.total = userRes.data.total;
//
const roleRes = await getPost();
this.roleOptions = roleRes.data;
if (multipleSelection) {
this.multipleSelection = JSON.parse(
JSON.stringify(multipleSelection)
);
this.defaultChecked(multipleSelection);
}
} finally {
this.formLoading = false;
}
},
//
async getRoleList() {
try {
const res = await listRole();
this.roleOptions = res.data;
} catch (error) {
this.$message.error("获取角色列表失败: " + error.message);
}
},
/**选中*/
selectRow(val, row) {
//
let selectBool = val.length && val.indexOf(row) !== -1
let selectBool = val.length && val.indexOf(row) !== -1;
if (!selectBool) {
//
this.multipleSelection.forEach((item, i) => {
if (item.id == row.id) {
this.multipleSelection.splice(i, 1)
this.multipleSelection.splice(i, 1);
}
})
});
} else {
//
this.multipleSelection.push(row)
this.multipleSelection.push(row);
}
},
/**全选*/
handleSelectAll(val) {
if (val.length == this.list.length) { //
this.multipleSelection = this.multipleSelection.concat(val)
if (val.length == this.list.length) {
//
this.multipleSelection = this.multipleSelection.concat(val);
//
let obj = {}
let result = []
this.multipleSelection.forEach(item => {
let obj = {};
let result = [];
this.multipleSelection.forEach((item) => {
if (!obj[item.id]) {
result.push(item)
obj[item.id] = true
result.push(item);
obj[item.id] = true;
}
})
this.multipleSelection = result
} else { //
this.list.forEach(item => {
});
this.multipleSelection = result;
} else {
//
this.list.forEach((item) => {
this.multipleSelection.forEach((multItem, i) => {
if (item.id == multItem.id) {
this.multipleSelection.splice(i, 1)
this.multipleSelection.splice(i, 1);
}
})
})
});
});
}
},
@ -229,29 +321,29 @@ export default {
const that = this;
this.$nextTick(() => {
that.list.forEach((v, i) => {
multipleSelection.map(item => {
multipleSelection.map((item) => {
if (item.id === v.id) {
that.$refs.multipleTable.toggleRowSelection(v, true);
}
})
});
});
});
},
cancelForm() {
this.drawVisible = false
this.drawVisible = false;
},
/** 查询列表 */
async getList() {
try {
this.formLoading = true
this.formLoading = true;
const res = await listSelectUser(this.queryParams);
this.list = res.data.list;
this.total = res.data.total;
// this.defaultChecked(this.multipleSelection)
} finally {
this.formLoading = false
this.formLoading = false;
}
},
/** 搜索按钮操作 */
@ -273,21 +365,22 @@ export default {
type: null,
carModel: null,
outRule: null,
tenantId: getTenantId()
}
tenantId: getTenantId(),
};
},
/** 提交按钮 */
async submitForm() {
this.showSlect = true
console.log('提交的数据',this.multipleSelection)
// const data = {
// adminUsers : this.multipleSelection
// }
// await permissionAssign(data);
// this.$modal.msgSuccess("");
// this.$emit('success', this.multipleSelection)
/** 提交按钮 - 显示角色选择 */
submitForm() {
if (this.multipleSelection.length === 0) {
this.$message.warning("请先选择用户");
return;
}
//
this.$emit("success", this.multipleSelection);
this.drawVisible = false;
},
}
},
};
</script>

View File

@ -36,7 +36,7 @@ export function getDriverLicenseType(userId) {
// 新增用户
export function addUser(data) {
return request({
url: '/system/user/create',
url: '/base/repair-staff',
method: 'post',
data: data
})
@ -71,7 +71,7 @@ export function updateUser(data) {
// 删除用户
export function delUser(userId) {
return request({
url: '/inspectionStaff/delete?id=' + userId,
url: '/base/repair-staff/deleteStaff?id=' + userId,
method: 'delete'
})
}
@ -173,7 +173,7 @@ export function importTemplate() {
// 查询用户列表
export function listSelectUser(query) {
return request({
url: '/inspectionStaff/listSelectUser',
url: '/base/repair-staff/listSelectUser',
method: 'get',
params: query
})

View File

@ -40,10 +40,10 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增
</el-button>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="chooseUser">选择员工
</el-button>
@ -271,6 +271,31 @@
</div>
</el-dialog>
<!-- 角色选择弹窗 -->
<el-dialog
title="选择角色"
:visible.sync="showSlect"
z-index="3000"
width="40%"
>
<el-form ref="roleForm" :model="roleForm" :rules="roleRules">
<el-form-item label="角色" prop="roleIds">
<el-select v-model="roleForm.roleIds" multiple placeholder="请选择角色">
<el-option
v-for="item in postOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="showSlect = false">取消</el-button>
<el-button type="primary" @click="submitRoleForm">确定</el-button>
</div>
</el-dialog>
<!-- 员工导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
@ -365,7 +390,7 @@
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<ChooseUserDraw ref="chooseUserRef" @success="getList"></ChooseUserDraw>
<ChooseUserDraw ref="chooseUserRef" @success="handleUserSelectSuccess"></ChooseUserDraw>
</div>
</template>
@ -384,7 +409,7 @@ import {
} from "./api/staff";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import ChooseUserDraw from "@/views/inspection/staff/ChooseUserDraw";
import ChooseUserDraw from "./ChooseUserDraw";
import {listSimpleDepts} from "@/api/system/dept";
import {listSimplePosts} from "@/api/system/post";
@ -406,6 +431,7 @@ export default {
loading: true,
//
exportLoading: false,
showSlect: false,
//
showSearch: true,
//
@ -456,6 +482,9 @@ export default {
//
url: process.env.VUE_APP_BASE_API + '/admin-api/inspectionStaff/import'
},
multipleSelection:[],
//
roleForm: {},
//
imageUpload: {
//
@ -489,6 +518,12 @@ export default {
{key: 5, label: `状态`, visible: false},
{key: 6, label: `创建时间`, visible: true}
],
//
roleRules: {
roleIds: [
{ required: true, message: "请选择至少一个角色", trigger: "change" },
],
},
//
rules: {
username: [
@ -538,6 +573,7 @@ export default {
this.getList();
// this.getTreeselect();
this.getDriverLicenseType();
this.getPostsByDeptId();
// this.getConfigKey("sys.user.init-password").then(response => {
// this.initPassword = response.msg;
// });
@ -572,6 +608,35 @@ export default {
}
);
},
handleUserSelectSuccess(selectedUsers) {
console.log("选择的用户", selectedUsers);
this.multipleSelection = selectedUsers;
//
this.showSlect = true;
},
/** 提交角色选择 */
async submitRoleForm() {
this.$refs.roleForm.validate(async (valid) => {
if (valid) {
try {
//
const data = {
repairStaffs: this.multipleSelection,
roleIds: this.roleForm.roleIds,
};
console.log("提交的数据:", data);
// API
await addUser(data);
this.$message.success("保存成功");
//
this.showSlect = false;
this.getList()
} catch (error) {
this.$message.error("保存失败: " + error.message);
}
}
});
},
/**
* 选择用户
**/
@ -669,7 +734,6 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getPostsByDeptId();
const id = row.id;
this.isInsert = false;
getUser(id).then(response => {