init project

This commit is contained in:
Timi
2026-08-01 18:01:23 +08:00
parent 286fa1ba56
commit 11c48bf00c
107 changed files with 19350 additions and 1 deletions
+147
View File
@@ -0,0 +1,147 @@
<template>
<div v-can="savePermissionCode" class="user-edit">
<t-form class="form" label-align="left">
<t-form-item label="姓名">
<t-input v-model.trim="formModel.name" placeholder="姓名" borderless />
</t-form-item>
<t-form-item v-if="isCreateMode" label="手机号">
<t-input v-model.trim="formModel.mobile" placeholder="手机号" borderless />
</t-form-item>
<t-form-item v-if="isCreateMode" label="密码">
<t-input v-model.trim="formModel.password" type="password" placeholder="密码" borderless />
</t-form-item>
</t-form>
<t-button class="save" theme="primary" :loading="isSaving" @click="saveUser">保存</t-button>
</div>
</template>
<script setup lang="ts">
import { Toast } from "tdesign-mobile-vue";
import GaoUserAPI from "@/api/GaoUserAPI";
import type { GaoUser } from "@/types/GaoUser";
import { gaoPermissionCodes } from "@/utils/gaoPermission";
defineOptions({
name: "UserEdit"
});
const route = useRoute();
const router = useRouter();
const currentGaoUser = ref<GaoUser>();
const isSaving = ref(false);
const formModel = reactive({
id: "",
userId: "",
name: "",
mobile: "",
password: ""
});
const isCreateMode = computed(() => !String(route.params.id || ""));
const savePermissionCode = computed(() => isCreateMode.value ? gaoPermissionCodes.user.create : gaoPermissionCodes.user.update);
async function fillForm(): Promise<void> {
const routeId = String(route.params.id || "");
if (routeId) {
const current = await GaoUserAPI.detail(routeId);
currentGaoUser.value = current;
Object.assign(formModel, {
id: current.id,
userId: current.userId || "",
name: current.user?.nick || current.user?.name || "",
mobile: current.user?.phoneNo || "",
password: ""
});
return;
}
Object.assign(formModel, {
id: "",
userId: "",
name: "",
mobile: "",
password: ""
});
}
async function saveUser(): Promise<void> {
if (!formModel.name) {
Toast({
theme: "warning",
direction: "row",
message: "请填写姓名"
});
return;
}
if (isCreateMode.value && !formModel.password) {
Toast({
theme: "warning",
direction: "row",
message: "请填写密码"
});
return;
}
isSaving.value = true;
try {
const payload: GaoUser = {
id: formModel.id || undefined,
userId: formModel.userId || undefined,
enabled: currentGaoUser.value?.enabled ?? true,
remark: currentGaoUser.value?.remark || "",
user: {
id: formModel.userId || undefined,
name: formModel.name,
nick: formModel.name,
phoneNo: formModel.mobile || undefined,
password: isCreateMode.value ? formModel.password : undefined
}
};
const saved = isCreateMode.value ? await GaoUserAPI.create(payload) : await GaoUserAPI.update(payload);
Toast({
theme: "success",
direction: "row",
message: "用户已保存"
});
await router.push(`/management/users/${saved.id}`);
} finally {
isSaving.value = false;
}
}
onMounted(async () => {
try {
await fillForm();
} catch {
Toast({
theme: "error",
direction: "row",
message: "用户数据加载失败"
});
}
});
</script>
<style scoped lang="less">
.user-edit {
padding: calc(var(--app-nav-height) + 1rem) 0 4rem 0;
.form {
border-radius: 1rem;
}
.save {
left: 1rem;
right: 1rem;
bottom: calc(.75rem + env(safe-area-inset-bottom, 0));
position: fixed;
}
}
:global(html.theme-dark) {
.user-edit {
:deep(.form-item .t-form__label) {
color: #94a3b8;
}
}
}
</style>