fix: 🐛 修复已知问题
This commit is contained in:
@@ -31,6 +31,12 @@
|
|||||||
"ignoreUnits": ["rpx"]
|
"ignoreUnits": ["rpx"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"selector-type-no-unknown": [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
"ignoreTypes": ["page"]
|
||||||
|
}
|
||||||
|
],
|
||||||
"selector-pseudo-class-no-unknown": [
|
"selector-pseudo-class-no-unknown": [
|
||||||
true,
|
true,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,4 +10,8 @@ onHide(() => {
|
|||||||
console.log("App Hide");
|
console.log("App Hide");
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped></style>
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: #f8f8f8;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ const gridList = reactive([
|
|||||||
url: "/pages/work/user/index",
|
url: "/pages/work/user/index",
|
||||||
prem: "sys:user:query",
|
prem: "sys:user:query",
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
icon: "/static/icons/role.png",
|
icon: "/static/icons/role.png",
|
||||||
title: "角色管理",
|
title: "角色管理",
|
||||||
|
|||||||
@@ -2,13 +2,7 @@
|
|||||||
<view class="log">
|
<view class="log">
|
||||||
<!-- 筛选 -->
|
<!-- 筛选 -->
|
||||||
<wd-drop-menu close-on-click-modal class="mb-20rpx">
|
<wd-drop-menu close-on-click-modal class="mb-20rpx">
|
||||||
<wd-drop-menu-item
|
<wd-drop-menu-item ref="dropMenu" title="筛选" icon="filter" icon-size="18px">
|
||||||
ref="dropMenu"
|
|
||||||
title="筛选"
|
|
||||||
icon="filter"
|
|
||||||
icon-size="18px"
|
|
||||||
@opened="handleOpened"
|
|
||||||
>
|
|
||||||
<view>
|
<view>
|
||||||
<wd-input
|
<wd-input
|
||||||
v-model="queryParams.keywords"
|
v-model="queryParams.keywords"
|
||||||
@@ -243,13 +237,6 @@ function getDetail(item: LogPageVO) {
|
|||||||
detailShow.value = true;
|
detailShow.value = true;
|
||||||
logDetail.value = item;
|
logDetail.value = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 返回
|
|
||||||
*/
|
|
||||||
function back() {
|
|
||||||
uni.navigateBack();
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="user">
|
<view class="user">
|
||||||
<!-- 筛选 -->
|
<!-- 排序筛选 -->
|
||||||
<wd-drop-menu>
|
<wd-drop-menu>
|
||||||
<wd-drop-menu-item v-model="sortValue" :options="sortOptions" @change="handleSortChange" />
|
<wd-drop-menu-item v-model="sortValue" :options="sortOptions" @change="handleSortChange" />
|
||||||
<wd-drop-menu-item ref="dropMenuRef" title="筛选">
|
<wd-drop-menu-item ref="dropMenuRef" title="筛选">
|
||||||
@@ -8,10 +8,13 @@
|
|||||||
<wd-input
|
<wd-input
|
||||||
v-model="queryParams.keywords"
|
v-model="queryParams.keywords"
|
||||||
label="关键字"
|
label="关键字"
|
||||||
type="text"
|
placeholder="用户名/昵称/手机号"
|
||||||
placeholder="请输入关键字"
|
|
||||||
/>
|
/>
|
||||||
<wd-datetime-picker v-model="daterange" label="创建时间" />
|
<wd-datetime-picker v-model="createTimeRange" type="date" label="创建时间" />
|
||||||
|
<view class="flex-between py-2">
|
||||||
|
<wd-button class="w-20%" type="info" @click="hendleResetQuery">重置</wd-button>
|
||||||
|
<wd-button class="w-70%" @click="handleQuery">确定</wd-button>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</wd-drop-menu-item>
|
</wd-drop-menu-item>
|
||||||
</wd-drop-menu>
|
</wd-drop-menu>
|
||||||
@@ -25,12 +28,11 @@
|
|||||||
<view class="font-bold">
|
<view class="font-bold">
|
||||||
{{ item.nickname }}
|
{{ item.nickname }}
|
||||||
<wd-icon v-if="item.gender == 1" name="gender-male" class="color-#4D80F0" />
|
<wd-icon v-if="item.gender == 1" name="gender-male" class="color-#4D80F0" />
|
||||||
<wd-icon v-else-if="item.gender == 2" name="gender-female" class="color-#fa4350" />
|
<wd-icon v-else-if="item.gender == 2" name="gender-female" class="color-#FA4350" />
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-1"><wd-text :text="item.deptName" size="12px" /></view>
|
<view class="mt-1"><wd-text :text="item.deptName" size="12px" /></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view>
|
<view>
|
||||||
<wd-tag v-if="item.status === 1" type="success" plain>正常</wd-tag>
|
<wd-tag v-if="item.status === 1" type="success" plain>正常</wd-tag>
|
||||||
<wd-tag v-else-if="item.status === 0" plain>禁用</wd-tag>
|
<wd-tag v-else-if="item.status === 0" plain>禁用</wd-tag>
|
||||||
@@ -61,33 +63,28 @@
|
|||||||
</template>
|
</template>
|
||||||
</wd-card>
|
</wd-card>
|
||||||
|
|
||||||
<wd-loadmore :state="state" @reload="loadmore" />
|
<wd-loadmore v-if="total > 0" :state="state" @reload="loadmore" />
|
||||||
<wd-message-box />
|
<wd-message-box />
|
||||||
|
|
||||||
<wd-popup v-model="dialog.visible" position="bottom">
|
<wd-popup v-model="dialog.visible" position="bottom">
|
||||||
<wd-form ref="userFormRef" :model="formData" :rules="rules">
|
<wd-form ref="userFormRef" :model="formData" :rules="rules">
|
||||||
<wd-cell-group border>
|
<wd-cell-group border>
|
||||||
<wd-input v-model="formData.username" label="用户名" :readonly="!formData.id" required />
|
<wd-input v-model="formData.username" label="用户名" :readonly="!formData.id" required />
|
||||||
|
|
||||||
<wd-input v-model="formData.nickname" label="昵称" required />
|
<wd-input v-model="formData.nickname" label="昵称" required />
|
||||||
|
|
||||||
<wd-select-picker
|
<wd-select-picker
|
||||||
v-model="formData.roleIds"
|
v-model="formData.roleIds"
|
||||||
label="角色"
|
label="角色"
|
||||||
:columns="roleOptions"
|
:columns="roleOptions"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<vut-picker
|
<vut-picker
|
||||||
v-model="formData.deptId"
|
v-model="formData.deptId"
|
||||||
v-model:data="deptOptions"
|
v-model:data="deptOptions"
|
||||||
label="部门"
|
label="部门"
|
||||||
:required="true"
|
:required="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<wd-input v-model="formData.mobile" label="手机号" prop="mobile" />
|
<wd-input v-model="formData.mobile" label="手机号" prop="mobile" />
|
||||||
|
|
||||||
<wd-input v-model="formData.email" label="邮箱" prop="email" />
|
<wd-input v-model="formData.email" label="邮箱" prop="email" />
|
||||||
|
|
||||||
<wd-cell title="状态">
|
<wd-cell title="状态">
|
||||||
<wd-switch v-model="formData.status" :active-value="1" :inactive-value="0" required />
|
<wd-switch v-model="formData.status" :active-value="1" :inactive-value="0" required />
|
||||||
</wd-cell>
|
</wd-cell>
|
||||||
@@ -103,44 +100,68 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { LoadMoreState } from "wot-design-uni/components/wd-loadmore/types";
|
import { LoadMoreState } from "wot-design-uni/components/wd-loadmore/types";
|
||||||
import { FormRules } from "wot-design-uni/components/wd-form/types";
|
import { FormRules } from "wot-design-uni/components/wd-form/types";
|
||||||
|
import { useMessage } from "wot-design-uni";
|
||||||
|
import { dayjs } from "wot-design-uni";
|
||||||
|
|
||||||
import UserAPI, { type UserPageQuery, UserPageVO, UserForm } from "@/api/system/user";
|
import UserAPI, { type UserPageQuery, UserPageVO, UserForm } from "@/api/system/user";
|
||||||
import RoleAPI from "@/api/system/role";
|
import RoleAPI from "@/api/system/role";
|
||||||
import DeptAPI from "@/api/system/dept";
|
import DeptAPI from "@/api/system/dept";
|
||||||
|
|
||||||
import VutPicker from "@/components/VutPicker.vue";
|
import VutPicker from "@/components/VutPicker.vue";
|
||||||
|
|
||||||
import { useMessage } from "wot-design-uni";
|
|
||||||
|
|
||||||
const message = useMessage();
|
const message = useMessage();
|
||||||
|
// 加载状态 loading, finished:, error
|
||||||
const state = ref<LoadMoreState>("loading"); // 加载状态 loading, finished:, error
|
const state = ref<LoadMoreState>("loading");
|
||||||
const dataList = ref<UserPageVO[]>([]);
|
const dataList = ref<UserPageVO[]>([]);
|
||||||
|
|
||||||
|
const sortValue = ref(1);
|
||||||
|
const sortOptions = ref<Record<string, any>[]>([
|
||||||
|
{ label: "最近创建", value: 1 },
|
||||||
|
{ label: "最近更新", value: 2 },
|
||||||
|
]);
|
||||||
|
|
||||||
const queryParams: UserPageQuery = {
|
const queryParams: UserPageQuery = {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
const daterange = ref<any[]>(["", Date.now()]);
|
const createTimeRange = ref<any[]>([, Date.now()]);
|
||||||
|
|
||||||
|
const dropMenuRef = ref();
|
||||||
|
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
|
|
||||||
const dialog = reactive({
|
const dialog = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const formData = reactive<UserForm>({
|
const formData = reactive<UserForm>({
|
||||||
roleIds: [],
|
roleIds: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const userFormRef = ref();
|
||||||
|
const roleOptions = ref<Record<string, any>[]>([]);
|
||||||
|
const deptOptions = ref<OptionType[]>([]);
|
||||||
|
|
||||||
const rules: FormRules = {
|
const rules: FormRules = {
|
||||||
username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
username: [{ required: true, message: "请输入用户名" }],
|
||||||
nickname: [{ required: true, message: "请输入昵称", trigger: "blur" }],
|
nickname: [{ required: true, message: "请输入昵称" }],
|
||||||
roleIds: [{ required: true, message: "请选择角色", trigger: "blur" }],
|
roleIds: [{ required: true, message: "请选择角色" }],
|
||||||
deptId: [{ required: true, message: "请选择部门", trigger: "blur" }],
|
deptId: [{ required: true, message: "请选择部门" }],
|
||||||
status: [{ required: true, message: "请选择状态", trigger: "blur" }],
|
status: [{ required: true, message: "请选择状态" }],
|
||||||
mobile: [
|
mobile: [
|
||||||
{ required: false, pattern: /^1[3456789]\d{9}$/, message: "手机号格式不正确", trigger: "blur" },
|
{
|
||||||
|
required: false,
|
||||||
|
message: "手机号格式不正确",
|
||||||
|
validator: (value) => {
|
||||||
|
if (!value) {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
if (!/^1[3456789]\d{9}$/.test(value)) {
|
||||||
|
return Promise.reject("手机号格式不正确");
|
||||||
|
} else {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
email: [
|
email: [
|
||||||
{
|
{
|
||||||
@@ -160,24 +181,10 @@ const rules: FormRules = {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
const userFormRef = ref();
|
|
||||||
const roleOptions = ref<Record<string, any>[]>([]);
|
|
||||||
const deptOptions = ref<OptionType[]>([]);
|
|
||||||
|
|
||||||
const sortValue = ref(1);
|
|
||||||
|
|
||||||
const sortOptions = ref<Record<string, any>[]>([
|
|
||||||
{ label: "最近创建", value: 1 },
|
|
||||||
{ label: "最近更新", value: 2 },
|
|
||||||
]);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 排序改变
|
* 排序改变
|
||||||
*/
|
*/
|
||||||
const handleSortChange = ({ value }: { value: number }) => {
|
const handleSortChange = ({ value }: { value: number }) => {
|
||||||
console.log("排序", value);
|
|
||||||
queryParams.pageNum = 1;
|
|
||||||
|
|
||||||
if (value === 1) {
|
if (value === 1) {
|
||||||
queryParams.field = "create_time";
|
queryParams.field = "create_time";
|
||||||
queryParams.direction = "DESC";
|
queryParams.direction = "DESC";
|
||||||
@@ -185,17 +192,34 @@ const handleSortChange = ({ value }: { value: number }) => {
|
|||||||
queryParams.field = "update_time";
|
queryParams.field = "update_time";
|
||||||
queryParams.direction = "DESC";
|
queryParams.direction = "DESC";
|
||||||
}
|
}
|
||||||
|
handleQuery();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询
|
||||||
|
*/
|
||||||
|
const handleQuery = () => {
|
||||||
|
dropMenuRef.value?.close();
|
||||||
|
queryParams.pageNum = 1;
|
||||||
|
|
||||||
|
queryParams.createTime = [
|
||||||
|
createTimeRange.value[0] ? dayjs(createTimeRange.value[0]).format("YYYY-MM-DD") : "",
|
||||||
|
createTimeRange.value[1] ? dayjs(createTimeRange.value[1]).format("YYYY-MM-DD") : "",
|
||||||
|
];
|
||||||
|
console.log(queryParams.createTime);
|
||||||
loadmore();
|
loadmore();
|
||||||
};
|
};
|
||||||
|
|
||||||
onReachBottom(() => {
|
/**
|
||||||
if (queryParams.pageNum * queryParams.pageSize < total.value) {
|
* 重置查询
|
||||||
loadmore();
|
*/
|
||||||
} else if (queryParams.pageNum * queryParams.pageSize >= total.value) {
|
const hendleResetQuery = () => {
|
||||||
state.value = "finished";
|
dropMenuRef.value?.close();
|
||||||
}
|
queryParams.pageNum = 1;
|
||||||
});
|
queryParams.keywords = "";
|
||||||
|
createTimeRange.value = ["", Date.now()];
|
||||||
|
loadmore();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载更多
|
* 加载更多
|
||||||
@@ -213,31 +237,13 @@ function loadmore() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 加载角色下拉项
|
|
||||||
*/
|
|
||||||
async function loadRoleOptions() {
|
|
||||||
RoleAPI.getOptions().then((data) => {
|
|
||||||
roleOptions.value = data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加载部门下拉项
|
|
||||||
*/
|
|
||||||
async function loadDeptOptions() {
|
|
||||||
DeptAPI.getOptions().then((data) => {
|
|
||||||
deptOptions.value = data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开弹窗
|
* 打开弹窗
|
||||||
*/
|
*/
|
||||||
async function handleOpenDialog(id?: number) {
|
async function handleOpenDialog(id?: number) {
|
||||||
dialog.visible = true;
|
dialog.visible = true;
|
||||||
await loadRoleOptions();
|
roleOptions.value = await RoleAPI.getOptions();
|
||||||
await loadDeptOptions();
|
deptOptions.value = await DeptAPI.getOptions();
|
||||||
if (id) {
|
if (id) {
|
||||||
UserAPI.getFormData(id).then((data) => {
|
UserAPI.getFormData(id).then((data) => {
|
||||||
Object.assign(formData, { ...data });
|
Object.assign(formData, { ...data });
|
||||||
@@ -249,7 +255,6 @@ async function handleOpenDialog(id?: number) {
|
|||||||
* 提交保存
|
* 提交保存
|
||||||
*/
|
*/
|
||||||
function handleSubmit() {
|
function handleSubmit() {
|
||||||
console.log("提交", formData);
|
|
||||||
userFormRef.value.validate().then(({ valid }: { valid: boolean }) => {
|
userFormRef.value.validate().then(({ valid }: { valid: boolean }) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const userId = formData.id;
|
const userId = formData.id;
|
||||||
@@ -257,15 +262,13 @@ function handleSubmit() {
|
|||||||
UserAPI.update(userId, formData).then(() => {
|
UserAPI.update(userId, formData).then(() => {
|
||||||
message.show("修改成功");
|
message.show("修改成功");
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
queryParams.pageNum = 1;
|
handleQuery();
|
||||||
loadmore();
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
UserAPI.add(formData).then(() => {
|
UserAPI.add(formData).then(() => {
|
||||||
message.show("添加成功");
|
message.show("添加成功");
|
||||||
dialog.visible = false;
|
dialog.visible = false;
|
||||||
queryParams.pageNum = 1;
|
handleQuery();
|
||||||
loadmore();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,44 +289,36 @@ function handleDelete(id: number) {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
UserAPI.deleteByIds(id + "").then(() => {
|
UserAPI.deleteByIds(id + "").then(() => {
|
||||||
message.show("删除成功");
|
message.show("删除成功");
|
||||||
queryParams.pageNum = 1;
|
handleQuery();
|
||||||
loadmore();
|
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
console.log("点击了取消按钮");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 监听下拉菜单打开事件
|
||||||
|
onReachBottom(() => {
|
||||||
|
if (queryParams.pageNum * queryParams.pageSize < total.value) {
|
||||||
|
loadmore();
|
||||||
|
} else if (queryParams.pageNum * queryParams.pageSize >= total.value) {
|
||||||
|
state.value = "finished";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 页面加载时执行查询
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
loadmore();
|
handleQuery();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
/* stylelint-disable selector-type-no-unknown */
|
|
||||||
page {
|
|
||||||
background: #f8f8f8;
|
|
||||||
}
|
|
||||||
/* stylelint-enable selector-type-no-unknown */
|
|
||||||
|
|
||||||
.custom-class {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: col;
|
|
||||||
align-items: center;
|
|
||||||
width: 230rpx;
|
|
||||||
height: 80rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.user-card {
|
.user-card {
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
:deep(.wd-cell__wrapper) {
|
:deep(.wd-cell__wrapper) {
|
||||||
padding: 8rpx 0;
|
padding: 4rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.wd-cell) {
|
:deep(.wd-cell) {
|
||||||
padding-right: 10rpx;
|
padding-right: 10rpx;
|
||||||
background: #f5f5f5;
|
background: #f8f8f8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user