若依前端vue3
1.搜索表单
< el-form :model = " queryParams" ref = " queryRef" :inline = " true" label-width = " 68px" >
< 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>
1 输入框
< el-form-item label = " 用户名称" prop = " userName" >
< el-input
v-model = " queryParams.userName"
placeholder = " 请输入用户名称"
clearable
style = " width : 240px"
@keyup.enter = " handleQuery"
/>
</ el-form-item>
2 下拉框
< 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>
3 时间日期选择器
< 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>
2.新增修改删除按钮
< el-row :gutter = " 10" class = " mb8" >
< el-col :span = " 1.5" >
< el-button
type = " primary"
plain
icon = " Plus"
@click = " handleAdd"
> 新增
</ el-button>
</ el-col>
< el-col :span = " 1.5" >
< el-button
type = " success"
plain
icon = " Edit"
:disabled = " single"
@click = " handleUpdate"
> 修改
</ el-button>
</ el-col>
< el-col :span = " 1.5" >
< el-button
type = " danger"
plain
icon = " Delete"
:disabled = " multiple"
@click = " handleDelete"
> 删除
</ el-button>
</ el-col>
</ el-row>
3.表格数据
< el-table :data = " userList" @selection-change = " handleSelectionChange" >
< el-table-column label = " 操作" align = " center" width = " 150" class-name = " small-padding fixed-width" >
< template #default = " scope" >
< el-button link type = " primary" icon = " Edit" @click = " handleUpdate(scope.row)" > 修改</ el-button>
< el-divider direction = " vertical" > </ el-divider>
< el-button link type = " primary" icon = " Delete" @click = " handleDelete(scope.row)" > 删除</ el-button>
</ template>
</ el-table-column>
</ el-table>
1 普通文本展示
< el-table-column label = " 用户名称" align = " center" key = " userName" prop = " userName" :show-overflow-tooltip = " true" width = " 150" />
2 开关组件展示
< el-table-column label = " 状态" align = " center" key = " status" width = " 100" >
< 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>
3 时间展示
< el-table-column label = " 创建时间" align = " center" prop = " createTime" width = " 160" >
< template #default = " scope" >
< span> {{ parseTime(scope.row.createTime) }}</ span>
</ template>
</ el-table-column>
4.字典标签展示
< el-table-column label = " 公告类型" align = " center" prop = " noticeType" width = " 100" >
< template #default = " scope" >
< dict-tag :options = " sys_notice_type" :value = " scope.row.noticeType" />
</ template>
</ el-table-column>
4.分页组件
< pagination
v-show = " total > 0"
:total = " total"
v-model: page= " queryParams.pageNum"
v-model: limit= " queryParams.pageSize"
@pagination = " getList"
/>
5.添加或修改对话框
< el-dialog :title = " title" v-model = " open" width = " 600px" append-to-body >
< el-form :model = " form" :rules = " rules" ref = " userRef" label-width = " 100px" >
</ el-form>
< template #footer >
< div class = " dialog-footer" >
< el-button type = " primary" @click = " submitForm" > 确 定</ el-button>
< el-button @click = " cancel" > 取 消</ el-button>
</ div>
</ template>
</ el-dialog>
1 普通文本输入框
< el-form-item label = " 用户昵称" prop = " nickName" >
< el-input v-model = " form.nickName" placeholder = " 请输入用户昵称" maxlength = " 30" />
</ el-form-item>
2 普通下拉框
< 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>
3 树形下拉框
< el-form-item label = " 归属部门" prop = " deptId" >
< el-tree-select
v-model = " form.deptId"
:data = " deptOptions"
:props = " { value: 'id', label: 'label', children: 'children' }"
value-key = " id"
placeholder = " 请选择归属部门"
check-strictly
/>
</ el-form-item>
4 单选按钮
< 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>
5 文本域输入框
< el-form-item label = " 备注" >
< el-input v-model = " form.remark" type = " textarea" placeholder = " 请输入内容" > </ el-input>
</ el-form-item>
数据和方法
< script setup>
import { ref, reactive, toRefs, getCurrentInstance} from "vue" ;
import { ElMessage, ElMessageBox} from "element-plus" ;
import {
changeUserStatus,
listUser,
resetUserPwd,
delUser,
getUser,
updateUser,
addUser,
deptTreeSelect
} from "@/api/system/user" ;
const { proxy} = getCurrentInstance ( ) ;
const dateRange = ref ( [ ] ) ;
const sys_normal_disable = ref ( [
{
label : "正常" ,
value : "0"
} ,
{
label : "停用" ,
value : "1"
}
] )
const userList = ref ( [
{
userId : "1" ,
userName : "1" ,
deptId : "1" ,
nickName : "1" ,
password : "1" ,
phonenumber : "1" ,
email : "1" ,
sex : "1" ,
status : "0" ,
remark : "1" ,
postIds : [ ] ,
roleIds : [ ]
}
] ) ;
const ids = ref ( [ ] ) ;
const single = ref ( true ) ;
const multiple = ref ( true ) ;
const total = ref ( 0 ) ;
const open = ref ( false ) ;
const title = ref ( "" ) ;
const deptOptions = ref ( undefined ) ;
const postOptions = ref ( [ ] ) ;
const roleOptions = ref ( [ ] ) ;
const sys_user_sex = ref ( [ ] ) ;
const data = reactive ( {
form : { } ,
queryParams : {
pageNum : 1 ,
pageSize : 10 ,
userName : undefined ,
phonenumber : undefined ,
status : undefined ,
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"
} ] ,
email : [ { type : "email" , message : "请输入正确的邮箱地址" , trigger : [ "blur" , "change" ] } ] ,
phonenumber : [ { pattern : / ^1[3|4|5|6|7|8|9][0-9]\d{8}$ / , message : "请输入正确的手机号码" , trigger : "blur" } ]
}
} ) ;
const { queryParams, form, rules} = toRefs ( data) ;
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 : [ ]
} ;
proxy. resetForm ( "userRef" ) ;
} ;
function handleQuery ( ) {
queryParams. value. pageNum = 1 ;
getList ( ) ;
} ;
function resetQuery ( ) {
dateRange. value = [ ] ;
proxy. resetForm ( "queryRef" ) ;
queryParams. value. deptId = undefined ;
handleQuery ( ) ;
} ;
function handleAdd ( ) {
reset ( ) ;
getUser ( ) . then ( response => {
postOptions. value = response. posts;
roleOptions. value = response. roles;
open. value = true ;
title. value = "添加用户" ;
} ) ;
} ;
function handleUpdate ( row ) {
reset ( ) ;
const userId = row. userId || ids. value;
getUser ( userId) . then ( response => {
form. value = response. data;
postOptions. value = response. posts;
roleOptions. value = response. roles;
form. value. postIds = response. postIds;
form. value. roleIds = response. roleIds;
open. value = true ;
title. value = "修改用户" ;
form. password = "" ;
} ) ;
} ;
function handleDelete ( row ) {
const userIds = row. userId || ids. value;
ElMessageBox. confirm (
'是否确认删除用户编号为"' + userIds + '"的数据项?' ,
"温馨提示" ,
{
confirmButtonText : "确定" ,
cancelButtonText : "取消" ,
type : "warning" ,
}
)
. then ( ( ) => {
delUser ( userIds) . then ( ( ) => {
getList ( ) ;
ElMessage ( {
type : "success" ,
message : "删除成功" ,
} ) ;
} ) ;
} )
. catch ( ( ) => {
ElMessage ( {
type : "error" ,
message : "删除失败" ,
} ) ;
} ) ;
} ;
function handleSelectionChange ( selection ) {
ids. value = selection. map ( item => item. userId) ;
single. value = selection. length != 1 ;
multiple. value = ! selection. length;
} ;
function handleStatusChange ( row ) {
let text = row. status === "0" ? "启用" : "停用" ;
ElMessageBox. confirm (
'确认要"' + text + '""' + row. userName + '"用户吗?' ,
"温馨提示" ,
{
confirmButtonText : "确定" ,
cancelButtonText : "取消" ,
type : "warning" ,
}
)
. then ( ( ) => {
changeUserStatus ( row. userId, row. status) . then ( ( ) => {
ElMessage ( {
type : "success" ,
message : "状态修改成功" ,
} ) ;
} ) ;
} )
. catch ( ( ) => {
row. status = row. status === "0" ? "1" : "0" ;
ElMessage ( {
type : "error" ,
message : "状态修改失败" ,
} ) ;
} ) ;
} ;
function getList ( ) {
listUser ( proxy. addDateRange ( queryParams. value, dateRange. value) ) . then ( res => {
userList. value = res. rows;
total. value = res. total;
} ) ;
} ;
function submitForm ( ) {
proxy. $refs[ "userRef" ] . validate ( valid => {
if ( valid) {
if ( form. value. userId != undefined ) {
updateUser ( form. value) . then ( response => {
ElMessage. success ( "修改成功" )
open. value = false ;
getList ( ) ;
} ) ;
} else {
addUser ( form. value) . then ( response => {
ElMessage. success ( "新增成功" )
open. value = false ;
getList ( ) ;
} ) ;
}
}
} ) ;
} ;
function cancel ( ) {
open. value = false ;
reset ( ) ;
} ;
getList ( ) ;
< / script>