chore: 🔨 用户管理临时提交

This commit is contained in:
ray
2024-11-15 08:21:50 +08:00
parent 34f230e2ed
commit 18b4fdd74c
7 changed files with 6172 additions and 7498 deletions

View File

@@ -90,6 +90,9 @@
"watch": true, "watch": true,
"watchEffect": true, "watchEffect": true,
"watchPostEffect": true, "watchPostEffect": true,
"watchSyncEffect": true "watchSyncEffect": true,
"DirectiveBinding": true,
"MaybeRef": true,
"MaybeRefOrGetter": true
} }
} }

View File

@@ -116,7 +116,7 @@
"postcss-html": "^1.7.0", "postcss-html": "^1.7.0",
"postcss-scss": "^4.0.9", "postcss-scss": "^4.0.9",
"prettier": "^3.3.3", "prettier": "^3.3.3",
"sass": "^1.79.3", "sass": "1.79.3",
"sass-loader": "^16.0.2", "sass-loader": "^16.0.2",
"stylelint": "^16.9.0", "stylelint": "^16.9.0",
"stylelint-config-html": "^1.1.0", "stylelint-config-html": "^1.1.0",
@@ -133,6 +133,5 @@
"vite": "5.2.8", "vite": "5.2.8",
"vue-eslint-parser": "^9.4.3", "vue-eslint-parser": "^9.4.3",
"vue-tsc": "^1.0.24" "vue-tsc": "^1.0.24"
}, }
"packageManager": "pnpm@9.2.0+sha512.98a80fd11c2e7096747762304106432b3ddc67dcf54b5a8c01c93f68a2cd5e05e6821849522a06fb76284d41a2660d5e334f2ee3bbf29183bf2e739b1dafa771"
} }

13372
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -43,12 +43,6 @@
"navigationBarTitleText": "用户管理" "navigationBarTitleText": "用户管理"
} }
}, },
{
"path": "pages/work/user/edit",
"style": {
"navigationBarTitleText": "编辑用户"
}
},
{ {
"path": "pages/work/log/index", "path": "pages/work/log/index",
"style": { "style": {

View File

@@ -1,13 +0,0 @@
<template>
<view> 编辑用户ID:{{ id }} </view>
</template>
<script lang="ts" setup>
// uniapp 获取url参数 id 不使用vue-router
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
const options = (currentPage as any).options;
const id = ref(options.id);
console.log("ID:", id);
</script>

View File

@@ -8,7 +8,11 @@
<view class="flex items-center"> <view class="flex items-center">
<image class="w-100rpx h-100rpx rounded-full" :src="item.avatar" /> <image class="w-100rpx h-100rpx rounded-full" :src="item.avatar" />
<view class="ml-2"> <view class="ml-2">
<view class="font-bold">{{ item.nickname }}</view> <view class="font-bold">
{{ item.nickname }}
<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" />
</view>
<view class="text-12px mt-1">{{ item.deptName }}</view> <view class="text-12px mt-1">{{ item.deptName }}</view>
</view> </view>
</view> </view>
@@ -16,34 +20,63 @@
</view> </view>
</template> </template>
<view> <view class="flex justify-between">
<view class="flex items-center"> <view>
<wd-icon name="usergroup" size="16" class="mr-1" /> <view class="flex items-center">
<view>{{ item.roleNames }}</view> <wd-icon name="usergroup" size="16" class="mr-1" />
<view>{{ item.roleNames }}</view>
</view>
<view class="flex items-center">
<wd-icon name="mobile" size="16" class="mr-1" />
<view>{{ item.mobile }}</view>
</view>
<view class="flex items-center">
<wd-icon name="mail" size="16" class="mr-1" />
<view>{{ item.email }}</view>
</view>
</view> </view>
<view class="flex items-center"> <view>
<wd-icon name="mobile" size="16" class="mr-1" /> {{ item.status == 1 ? "启用" : "禁用" }}
<view>{{ item.mobile }}</view>
</view>
<view class="flex items-center">
<wd-icon name="mail" size="16" class="mr-1" />
<view>{{ item.email }}</view>
</view> </view>
</view> </view>
<template #footer> <template #footer>
<wd-button size="small" plain>编辑</wd-button> <wd-button size="small" plain @click="handleOpenDialog(item.id)">编辑</wd-button>
<wd-button type="warning" size="small" plain class="ml-2">删除</wd-button> <wd-button type="warning" size="small" plain class="ml-2">删除</wd-button>
</template> </template>
</wd-card> </wd-card>
<wd-loadmore :state="state" @reload="loadmore" /> <wd-loadmore :state="state" @reload="loadmore" />
<wd-popup v-model="dialog.visible" position="bottom" custom-style="min-height: 200px;">
<wd-form :model="formData">
<wd-cell-group>
<wd-cell title="昵称" title-width="200rpx">
<wd-input v-model="formData.nickname" />
</wd-cell>
<wd-cell title="手机号" title-width="200rpx">
<wd-input v-model="formData.mobile" />
</wd-cell>
<wd-cell title="邮箱" title-width="200rpx">
<wd-input v-model="formData.email" />
</wd-cell>
<wd-cell title="状态" title-width="200rpx">
<wd-switch v-model="formData.status" />
</wd-cell>
</wd-cell-group>
</wd-form>
<view class="footer">
<wd-button type="primary" block @click="handleSubmit">提交</wd-button>
</view>
</wd-popup>
</view> </view>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { LoadMoreState } from "wot-design-uni/components/wd-loadmore/types"; import { LoadMoreState } from "wd-design-uni/components/wd-loadmore/types";
import UserAPI, { type UserPageQuery, UserPageVO } from "@/api/system/user"; import UserAPI, { type UserPageQuery, UserPageVO, UserForm } from "@/api/system/user";
const state = ref<LoadMoreState>("loading"); // 加载状态 loading, finished:, error const state = ref<LoadMoreState>("loading"); // 加载状态 loading, finished:, error
const dataList = ref<UserPageVO[]>([]); const dataList = ref<UserPageVO[]>([]);
@@ -55,6 +88,12 @@ const queryParams: UserPageQuery = {
const total = ref(0); // 总数 const total = ref(0); // 总数
const dialog = reactive({
visible: false,
});
const formData = reactive<UserForm>({});
onReachBottom(() => { onReachBottom(() => {
if (queryParams.pageNum * queryParams.pageSize < total.value) { if (queryParams.pageNum * queryParams.pageSize < total.value) {
loadmore(); loadmore();
@@ -83,6 +122,13 @@ function handleSort() {
dataList.value = dataList.value?.reverse(); dataList.value = dataList.value?.reverse();
} }
/**
* 打开弹窗
*/
function handleOpenDialog(id: number) {
dialog.visible = true;
}
function handleEdit(row: UserPageVO) { function handleEdit(row: UserPageVO) {
console.log("编辑", row); console.log("编辑", row);
uni.navigateTo({ uni.navigateTo({
@@ -94,6 +140,10 @@ function handleDelete(row: UserPageVO) {
console.log("删除", row); console.log("删除", row);
} }
function handleSubmit() {
console.log("提交", formData);
}
onLoad(() => { onLoad(() => {
loadmore(); loadmore();
}); });

View File

@@ -6,95 +6,110 @@
// biome-ignore lint: disable // biome-ignore lint: disable
export {} export {}
declare global { declare global {
const EffectScope: typeof import('vue')['EffectScope'] const EffectScope: (typeof import("vue"))["EffectScope"];
const computed: typeof import('vue')['computed'] const computed: (typeof import("vue"))["computed"];
const createApp: typeof import('vue')['createApp'] const createApp: (typeof import("vue"))["createApp"];
const customRef: typeof import('vue')['customRef'] const customRef: (typeof import("vue"))["customRef"];
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] const defineAsyncComponent: (typeof import("vue"))["defineAsyncComponent"];
const defineComponent: typeof import('vue')['defineComponent'] const defineComponent: (typeof import("vue"))["defineComponent"];
const effectScope: typeof import('vue')['effectScope'] const effectScope: (typeof import("vue"))["effectScope"];
const getCurrentInstance: typeof import('vue')['getCurrentInstance'] const getCurrentInstance: (typeof import("vue"))["getCurrentInstance"];
const getCurrentScope: typeof import('vue')['getCurrentScope'] const getCurrentScope: (typeof import("vue"))["getCurrentScope"];
const h: typeof import('vue')['h'] const h: (typeof import("vue"))["h"];
const inject: typeof import('vue')['inject'] const inject: (typeof import("vue"))["inject"];
const isProxy: typeof import('vue')['isProxy'] const isProxy: (typeof import("vue"))["isProxy"];
const isReactive: typeof import('vue')['isReactive'] const isReactive: (typeof import("vue"))["isReactive"];
const isReadonly: typeof import('vue')['isReadonly'] const isReadonly: (typeof import("vue"))["isReadonly"];
const isRef: typeof import('vue')['isRef'] const isRef: (typeof import("vue"))["isRef"];
const markRaw: typeof import('vue')['markRaw'] const markRaw: (typeof import("vue"))["markRaw"];
const nextTick: typeof import('vue')['nextTick'] const nextTick: (typeof import("vue"))["nextTick"];
const onActivated: typeof import('vue')['onActivated'] const onActivated: (typeof import("vue"))["onActivated"];
const onAddToFavorites: typeof import('@dcloudio/uni-app')['onAddToFavorites'] const onAddToFavorites: (typeof import("@dcloudio/uni-app"))["onAddToFavorites"];
const onBackPress: typeof import('@dcloudio/uni-app')['onBackPress'] const onBackPress: (typeof import("@dcloudio/uni-app"))["onBackPress"];
const onBeforeMount: typeof import('vue')['onBeforeMount'] const onBeforeMount: (typeof import("vue"))["onBeforeMount"];
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] const onBeforeRouteLeave: (typeof import("vue-router"))["onBeforeRouteLeave"];
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] const onBeforeRouteUpdate: (typeof import("vue-router"))["onBeforeRouteUpdate"];
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] const onBeforeUnmount: (typeof import("vue"))["onBeforeUnmount"];
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] const onBeforeUpdate: (typeof import("vue"))["onBeforeUpdate"];
const onDeactivated: typeof import('vue')['onDeactivated'] const onDeactivated: (typeof import("vue"))["onDeactivated"];
const onError: typeof import('@dcloudio/uni-app')['onError'] const onError: (typeof import("@dcloudio/uni-app"))["onError"];
const onErrorCaptured: typeof import('vue')['onErrorCaptured'] const onErrorCaptured: (typeof import("vue"))["onErrorCaptured"];
const onHide: typeof import('@dcloudio/uni-app')['onHide'] const onHide: (typeof import("@dcloudio/uni-app"))["onHide"];
const onLaunch: typeof import('@dcloudio/uni-app')['onLaunch'] const onLaunch: (typeof import("@dcloudio/uni-app"))["onLaunch"];
const onLoad: typeof import('@dcloudio/uni-app')['onLoad'] const onLoad: (typeof import("@dcloudio/uni-app"))["onLoad"];
const onMounted: typeof import('vue')['onMounted'] const onMounted: (typeof import("vue"))["onMounted"];
const onNavigationBarButtonTap: typeof import('@dcloudio/uni-app')['onNavigationBarButtonTap'] const onNavigationBarButtonTap: (typeof import("@dcloudio/uni-app"))["onNavigationBarButtonTap"];
const onNavigationBarSearchInputChanged: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputChanged'] const onNavigationBarSearchInputChanged: (typeof import("@dcloudio/uni-app"))["onNavigationBarSearchInputChanged"];
const onNavigationBarSearchInputClicked: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputClicked'] const onNavigationBarSearchInputClicked: (typeof import("@dcloudio/uni-app"))["onNavigationBarSearchInputClicked"];
const onNavigationBarSearchInputConfirmed: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputConfirmed'] const onNavigationBarSearchInputConfirmed: (typeof import("@dcloudio/uni-app"))["onNavigationBarSearchInputConfirmed"];
const onNavigationBarSearchInputFocusChanged: typeof import('@dcloudio/uni-app')['onNavigationBarSearchInputFocusChanged'] const onNavigationBarSearchInputFocusChanged: (typeof import("@dcloudio/uni-app"))["onNavigationBarSearchInputFocusChanged"];
const onPageNotFound: typeof import('@dcloudio/uni-app')['onPageNotFound'] const onPageNotFound: (typeof import("@dcloudio/uni-app"))["onPageNotFound"];
const onPageScroll: typeof import('@dcloudio/uni-app')['onPageScroll'] const onPageScroll: (typeof import("@dcloudio/uni-app"))["onPageScroll"];
const onPullDownRefresh: typeof import('@dcloudio/uni-app')['onPullDownRefresh'] const onPullDownRefresh: (typeof import("@dcloudio/uni-app"))["onPullDownRefresh"];
const onReachBottom: typeof import('@dcloudio/uni-app')['onReachBottom'] const onReachBottom: (typeof import("@dcloudio/uni-app"))["onReachBottom"];
const onReady: typeof import('@dcloudio/uni-app')['onReady'] const onReady: (typeof import("@dcloudio/uni-app"))["onReady"];
const onRenderTracked: typeof import('vue')['onRenderTracked'] const onRenderTracked: (typeof import("vue"))["onRenderTracked"];
const onRenderTriggered: typeof import('vue')['onRenderTriggered'] const onRenderTriggered: (typeof import("vue"))["onRenderTriggered"];
const onResize: typeof import('@dcloudio/uni-app')['onResize'] const onResize: (typeof import("@dcloudio/uni-app"))["onResize"];
const onScopeDispose: typeof import('vue')['onScopeDispose'] const onScopeDispose: (typeof import("vue"))["onScopeDispose"];
const onServerPrefetch: typeof import('vue')['onServerPrefetch'] const onServerPrefetch: (typeof import("vue"))["onServerPrefetch"];
const onShareAppMessage: typeof import('@dcloudio/uni-app')['onShareAppMessage'] const onShareAppMessage: (typeof import("@dcloudio/uni-app"))["onShareAppMessage"];
const onShareTimeline: typeof import('@dcloudio/uni-app')['onShareTimeline'] const onShareTimeline: (typeof import("@dcloudio/uni-app"))["onShareTimeline"];
const onShow: typeof import('@dcloudio/uni-app')['onShow'] const onShow: (typeof import("@dcloudio/uni-app"))["onShow"];
const onTabItemTap: typeof import('@dcloudio/uni-app')['onTabItemTap'] const onTabItemTap: (typeof import("@dcloudio/uni-app"))["onTabItemTap"];
const onThemeChange: typeof import('@dcloudio/uni-app')['onThemeChange'] const onThemeChange: (typeof import("@dcloudio/uni-app"))["onThemeChange"];
const onUnhandledRejection: typeof import('@dcloudio/uni-app')['onUnhandledRejection'] const onUnhandledRejection: (typeof import("@dcloudio/uni-app"))["onUnhandledRejection"];
const onUnload: typeof import('@dcloudio/uni-app')['onUnload'] const onUnload: (typeof import("@dcloudio/uni-app"))["onUnload"];
const onUnmounted: typeof import('vue')['onUnmounted'] const onUnmounted: (typeof import("vue"))["onUnmounted"];
const onUpdated: typeof import('vue')['onUpdated'] const onUpdated: (typeof import("vue"))["onUpdated"];
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] const onWatcherCleanup: (typeof import("vue"))["onWatcherCleanup"];
const provide: typeof import('vue')['provide'] const provide: (typeof import("vue"))["provide"];
const reactive: typeof import('vue')['reactive'] const reactive: (typeof import("vue"))["reactive"];
const readonly: typeof import('vue')['readonly'] const readonly: (typeof import("vue"))["readonly"];
const ref: typeof import('vue')['ref'] const ref: (typeof import("vue"))["ref"];
const resolveComponent: typeof import('vue')['resolveComponent'] const resolveComponent: (typeof import("vue"))["resolveComponent"];
const shallowReactive: typeof import('vue')['shallowReactive'] const shallowReactive: (typeof import("vue"))["shallowReactive"];
const shallowReadonly: typeof import('vue')['shallowReadonly'] const shallowReadonly: (typeof import("vue"))["shallowReadonly"];
const shallowRef: typeof import('vue')['shallowRef'] const shallowRef: (typeof import("vue"))["shallowRef"];
const toRaw: typeof import('vue')['toRaw'] const toRaw: (typeof import("vue"))["toRaw"];
const toRef: typeof import('vue')['toRef'] const toRef: (typeof import("vue"))["toRef"];
const toRefs: typeof import('vue')['toRefs'] const toRefs: (typeof import("vue"))["toRefs"];
const toValue: typeof import('vue')['toValue'] const toValue: (typeof import("vue"))["toValue"];
const triggerRef: typeof import('vue')['triggerRef'] const triggerRef: (typeof import("vue"))["triggerRef"];
const unref: typeof import('vue')['unref'] const unref: (typeof import("vue"))["unref"];
const useAttrs: typeof import('vue')['useAttrs'] const useAttrs: (typeof import("vue"))["useAttrs"];
const useCssModule: typeof import('vue')['useCssModule'] const useCssModule: (typeof import("vue"))["useCssModule"];
const useCssVars: typeof import('vue')['useCssVars'] const useCssVars: (typeof import("vue"))["useCssVars"];
const useId: typeof import('vue')['useId'] const useId: (typeof import("vue"))["useId"];
const useLink: typeof import('vue-router')['useLink'] const useLink: (typeof import("vue-router"))["useLink"];
const useModel: typeof import('vue')['useModel'] const useModel: (typeof import("vue"))["useModel"];
const useRoute: typeof import('vue-router')['useRoute'] const useRoute: (typeof import("vue-router"))["useRoute"];
const useRouter: typeof import('vue-router')['useRouter'] const useRouter: (typeof import("vue-router"))["useRouter"];
const useSlots: typeof import('vue')['useSlots'] const useSlots: (typeof import("vue"))["useSlots"];
const useTemplateRef: typeof import('vue')['useTemplateRef'] const useTemplateRef: (typeof import("vue"))["useTemplateRef"];
const watch: typeof import('vue')['watch'] const watch: (typeof import("vue"))["watch"];
const watchEffect: typeof import('vue')['watchEffect'] const watchEffect: (typeof import("vue"))["watchEffect"];
const watchPostEffect: typeof import('vue')['watchPostEffect'] const watchPostEffect: (typeof import("vue"))["watchPostEffect"];
const watchSyncEffect: typeof import('vue')['watchSyncEffect'] const watchSyncEffect: (typeof import("vue"))["watchSyncEffect"];
} }
// for type re-export // for type re-export
declare global { declare global {
// @ts-ignore // @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' export type {
import('vue') Component,
ComponentPublicInstance,
ComputedRef,
DirectiveBinding,
ExtractDefaultPropTypes,
ExtractPropTypes,
ExtractPublicPropTypes,
InjectionKey,
PropType,
Ref,
MaybeRef,
MaybeRefOrGetter,
VNode,
WritableComputedRef,
} from "vue";
import("vue");
} }