对接用户管理

This commit is contained in:
wangchengming 2025-07-02 09:44:12 +08:00
parent f9ef4f5cd3
commit 005a3a8e98
4 changed files with 100 additions and 25 deletions

View File

@ -28,6 +28,7 @@
"js-beautify": "1.14.11",
"js-cookie": "3.0.5",
"jsencrypt": "3.3.2",
"moment": "^2.30.1",
"nprogress": "0.2.0",
"pinia": "2.1.7",
"splitpanes": "3.1.5",

View File

@ -94,6 +94,7 @@ import { getSysSectionPage } from "@/api/system/section"
import { addVehicleModelTraining, getVehicleModelTraining, updateVehicleModelTraining } from "@/api/qualification/vehicleTrain"
const router = useRouter()
const route = useRoute()
const levelList = ref([
{ title: '资质管理', path: '/qualification' },
@ -106,7 +107,7 @@ onMounted(() => {
getBusDependencyData();
getDeptTree();
getSysSectionData();
const id = router.params && router.params.Id
const id = route.params && route.params.Id
if (id) {
ruleForm.value.id = id
getDetailInfo(id)
@ -195,7 +196,7 @@ const selectChanged = (value) => {
//
const getDetailInfo = (id) => {
getVehicleModelTraining(id).thne(res => {
getVehicleModelTraining(id).then(res => {
console.log('详情', res)
if(res.code == 200) ruleForm.value = res.data
})

View File

@ -51,7 +51,7 @@
<el-table-column prop="vehicleModel" label="车型" />
<el-table-column prop="trainingTime" label="培训时间" width="130">
<template #default="scope">
<span v-if="scope.row.trainingTime"> {{ scope.row.trainingTime }}</span>
<span v-if="scope.row.trainingTime"> {{ moment(scope.row.trainingTime).format('YYYY-MM-DD') }}</span>
<span v-else>-</span>
</template>
</el-table-column>
@ -78,7 +78,9 @@ import importIcon from '@/assets/images/ImportIcon.png'
import addIcon from '@/assets/images/addIcon.png'
import { getVehicleTrainingPageList, deleteVehicleModelTraining } from "@/api/qualification/vehicleTrain"
import { getBusDependencyPage } from "@/api/system/dependency"
import moment from 'moment'
const { proxy } = getCurrentInstance()
//
onMounted(() => {
getList();

View File

@ -161,22 +161,20 @@
<el-form :model="form" :rules="rules" ref="userRef" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
<el-form-item label="员工工号" prop="workNo">
<el-input v-model="form.workNo" placeholder="请输入员工工号" @input="handleInput" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<el-tree-select v-model="form.deptId" :data="enabledDeptOptions"
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属部门"
check-strictly />
<el-form-item label="中文姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入中文姓名" maxlength="30" />
</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 label="英文姓名" prop="englishName">
<el-input v-model="form.englishName" placeholder="请输入英文姓名" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -187,13 +185,46 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
<el-form-item v-if="form.userId == undefined" label="登录账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入登录账号" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
<el-form-item v-if="form.userId == undefined" label="登录密码" prop="password">
<el-input v-model="form.password" placeholder="请输入登录密码" type="password" maxlength="20" show-password />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="归属部门" prop="deptId">
<el-tree-select v-model="form.deptId" filterable :data="enabledDeptOptions"
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属部门"
check-strictly />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="科室" prop="sectionId">
<el-select v-model="form.sectionId" filterable placeholder="请选择科室">
<el-option v-for="item in sectionData" :key="item.sectionId" :label="item.sectionName"
:value="item.sectionId" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="属地" prop="dependencyId">
<el-select v-model="form.dependencyId" filterable placeholder="请选择属地">
<el-option v-for="item in busDependencyData" :key="item.id" :label="item.dependencyName"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<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-row>
@ -216,15 +247,15 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple 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-col> -->
<el-col :span="24">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId"
@ -278,10 +309,13 @@
</template>
<script setup name="User">
import { onMounted, ref } from 'vue'
import { getToken } from "@/utils/auth"
import useAppStore from '@/store/modules/app'
import Breadcrumb from '@/components/Breadcrumb'
import { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect } from "@/api/system/user"
import { getSysSectionPage } from "@/api/system/section"
import { getBusDependencyPage } from "@/api/system/dependency"
import { Splitpanes, Pane } from "splitpanes"
import "splitpanes/dist/splitpanes.css"
@ -343,16 +377,51 @@ const data = reactive({
deptId: undefined
},
rules: {
userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }],
email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
workNo: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
nickName: [{ required: true, message: "中文姓名不能为空", trigger: "blur" }, { min: 2, max: 20, message: "中文姓名长度必须介于 2 和 20 之间", trigger: "blur" }],
englishName: [{ required: true, message: "英文姓名不能为空", trigger: "blur" }, { min: 2, max: 20, message: "英文姓名长度必须介于 2 和 20 之间", trigger: "blur" }],
userName: [{ required: true, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "登录账号长度必须介于 2 和 20 之间", trigger: "blur" }],
password: [{ required: true, message: "登录密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "登录密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }],
email: [{ required: true, type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
deptId: [{ required: true, message: "请选择归属部门", trigger: ["change"] }],
sectionId: [{ required: true, message: "请选择科室", trigger: ["change"] }],
dependencyId: [{ required: true, message: "请选择属地", trigger: ["change"] }],
}
})
const { queryParams, form, rules } = toRefs(data)
//
const handleInput = (value) => {
form.value.userName = value
}
//
const sectionData = ref([])
//
const getSysSectionData = () => {
getSysSectionPage({
pageIndex: 1,
pageSize: 100,
}).then(res => {
if (res.code == 200) {
sectionData.value = res.data.list
}
})
}
//
const busDependencyData = ref([])
//
const getBusDependencyData = () => {
getBusDependencyPage({
pageIndex: 1,
pageSize: 100,
}).then(response => {
if (response.code == 200) {
busDependencyData.value = response.data.list
}
})
}
const unfoldFlag = ref(false)
const handleFlod = () => {
@ -606,6 +675,8 @@ function submitForm() {
onMounted(() => {
getDeptTree()
getBusDependencyData();
getSysSectionData();
getList()
proxy.getConfigKey("sys.user.initPassword").then(response => {
initPassword.value = response.msg
@ -623,7 +694,7 @@ onMounted(() => {
margin-bottom: 20px !important;
}
:deep(.el-form-item--label-left .el-form-item__label) {
:deep(.el-form-item__label) {
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 18px;
@ -632,7 +703,7 @@ onMounted(() => {
padding: 0 10px 0 0;
}
:deep(.el-form-item--label-left .el-form-item__content) {
:deep(.el-form-item__content) {
font-family: Arial;
font-weight: 400;
font-size: 18px;