修改数据类型.

This commit is contained in:
lijiahang
2023-09-25 16:07:52 +08:00
parent 09610b3c82
commit 3c930a1b8b
12 changed files with 53 additions and 84 deletions

View File

@@ -4,8 +4,8 @@ import axios from 'axios';
* 登陆请求 * 登陆请求
*/ */
export interface LoginRequest { export interface LoginRequest {
username: string; username: string | undefined;
password: string; password: string | undefined;
} }
/** /**

View File

@@ -44,11 +44,10 @@ export interface RoleQueryResponse extends TableData {
name?: string; name?: string;
code?: string; code?: string;
status?: number; status?: number;
// FIXME 恢复 createTime: number;
createTime?: number; updateTime: number;
updateTime?: number; creator: string;
creator?: string; updater: string;
updater?: string;
} }
/** /**

View File

@@ -1,9 +1,10 @@
<template> <template>
<a-select v-model:model-value="value" <a-select v-model:model-value="value as any"
:options="optionData()" :options="optionData()"
:allow-search="true" :allow-search="true"
:multiple="multiple" :multiple="multiple"
:loading="loading" :loading="loading"
:disabled="loading"
:filter-option="filterOption" :filter-option="filterOption"
placeholder="请选择角色" /> placeholder="请选择角色" />
</template> </template>

View File

@@ -38,13 +38,14 @@
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
import { getHostKeyList } from '@/api/asset/host-key'; import { getHostKeyList } from '@/api/asset/host-key';
import { getHostIdentityList } from '@/api/asset/host-identity'; import { getHostIdentityList } from '@/api/asset/host-identity';
import { HostConfigWrapper } from '@/views/asset/host/types/host-config.types';
const { visible, setVisible } = useVisible(); const { visible, setVisible } = useVisible();
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const cacheStore = useCacheStore(); const cacheStore = useCacheStore();
const record = ref(); const record = ref();
const config = ref<Record<string, any>>({ const config = ref<HostConfigWrapper>({
SSH: undefined SSH: undefined
}); });

View File

@@ -128,10 +128,6 @@
</a-space> </a-space>
</div> </div>
</a-spin> </a-spin>
<!-- FIXME -->
{{ formModel }}
<br><br>
{{ content }}
</a-card> </a-card>
</template> </template>
@@ -151,6 +147,7 @@
import HostIdentitySelector from '@/components/asset/host-identity/host-identity-selector.vue'; import HostIdentitySelector from '@/components/asset/host-identity/host-identity-selector.vue';
import { toOptions } from '@/utils/enum'; import { toOptions } from '@/utils/enum';
import { FieldRule, Message } from '@arco-design/web-vue'; import { FieldRule, Message } from '@arco-design/web-vue';
import { RoleUpdateRequest } from '@/api/user/role';
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
@@ -166,7 +163,7 @@
}); });
const formRef = ref(); const formRef = ref();
const formModel = reactive<HostSshConfig>({ const formModel = ref<HostSshConfig>({
username: undefined, username: undefined,
port: undefined, port: undefined,
password: undefined, password: undefined,
@@ -185,8 +182,7 @@
watch(() => props.content, (v: any) => { watch(() => props.content, (v: any) => {
config.value.status = v?.status; config.value.status = v?.status;
config.value.version = v?.version; config.value.version = v?.version;
// FIXME resetConfig();
resetConfig(v.config);
}); });
// 用户名验证 // 用户名验证
@@ -196,7 +192,7 @@
cb('用户名长度不能大于128位'); cb('用户名长度不能大于128位');
return; return;
} }
if (formModel.authType !== AuthTypeEnum.IDENTITY.value && !value) { if (formModel.value.authType !== AuthTypeEnum.IDENTITY.value && !value) {
cb('请输入用户名'); cb('请输入用户名');
return; return;
} }
@@ -210,7 +206,7 @@
cb('密码长度不能大于256位'); cb('密码长度不能大于256位');
return; return;
} }
if (formModel.useNewPassword && !value) { if (formModel.value.useNewPassword && !value) {
cb('请输入密码'); cb('请输入密码');
return; return;
} }
@@ -236,15 +232,9 @@
// 重置配置 // 重置配置
const resetConfig = () => { const resetConfig = () => {
// FIXME formModel.value = Object.assign({}, props.content?.config);
Object.keys(formModel).forEach(k => {
console.log(k, props.content?.config?.hasOwnProperty(k));
if (props.content?.config?.hasOwnProperty(k)) {
formModel[k] = props.content?.config[k];
}
});
// 使用新密码默认为不包含密码 // 使用新密码默认为不包含密码
formModel.useNewPassword = !formModel.hasPassword; formModel.value.useNewPassword = !formModel.value.hasPassword;
}; };
// 保存配置 // 保存配置

View File

@@ -19,9 +19,10 @@ export const AuthTypeEnum = {
/** /**
* 主机所有配置 * 主机所有配置
*/ */
// fixme
export interface HostConfigWrapper { export interface HostConfigWrapper {
SSH: HostSshConfig | unknown; SSH: HostSshConfig | unknown;
[key: string]: unknown;
} }
/** /**

View File

@@ -65,7 +65,7 @@
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const userStore = useUserStore(); const userStore = useUserStore();
const userInfo = reactive({ const userInfo = reactive<LoginRequest>({
username: undefined, username: undefined,
password: undefined, password: undefined,
}); });
@@ -75,14 +75,14 @@
values, values,
}: { }: {
errors: Record<string, ValidatedError> | undefined; errors: Record<string, ValidatedError> | undefined;
values: Record<string, any>; values: LoginRequest;
}) => { }) => {
if (loading.value) return; if (loading.value) return;
if (!errors) { if (!errors) {
setLoading(true); setLoading(true);
try { try {
// 执行登陆 // 执行登陆
await userStore.login(values as LoginRequest); await userStore.login(values);
// 跳转路由 // 跳转路由
const { redirect, ...othersQuery } = router.currentRoute.value.query; const { redirect, ...othersQuery } = router.currentRoute.value.query;
router.push({ router.push({

View File

@@ -57,11 +57,10 @@
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const tree = ref(); const tree = ref();
const roleRecord = ref<RoleQueryResponse>({}); const roleRecord = ref<RoleQueryResponse>({} as RoleQueryResponse);
// 打开新增 // 打开新增
const open = async (record: any) => { const open = async (record: any) => {
// fixme 改成 props
renderRecord(record); renderRecord(record);
setVisible(true); setVisible(true);
try { try {

View File

@@ -139,7 +139,7 @@
const pagination = reactive(defaultPagination()) as PaginationProps; const pagination = reactive(defaultPagination()) as PaginationProps;
const formModel = ref<RoleQueryRequest>({ const formModel = reactive<RoleQueryRequest>({
id: undefined, id: undefined,
name: undefined, name: undefined,
code: undefined, code: undefined,

View File

@@ -21,11 +21,11 @@
:wrapper-col-props="{ span: 18 }"> :wrapper-col-props="{ span: 18 }">
<!-- 用户名 --> <!-- 用户名 -->
<a-form-item field="username" label="用户名"> <a-form-item field="username" label="用户名">
<a-input v-model="formModel.username" :disabled="true" /> <a-input v-model="updateUser.username" :disabled="true" />
</a-form-item> </a-form-item>
<!-- 花名 --> <!-- 花名 -->
<a-form-item field="nickname" label="花名"> <a-form-item field="nickname" label="花名">
<a-input v-model="formModel.nickname" :disabled="true" /> <a-input v-model="updateUser.nickname" :disabled="true" />
</a-form-item> </a-form-item>
<!-- 角色 --> <!-- 角色 -->
<a-form-item field="roles" label="角色"> <a-form-item field="roles" label="角色">
@@ -45,48 +45,38 @@
</script> </script>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref } from 'vue'; import { ref } from 'vue';
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible'; import useVisible from '@/hooks/visible';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import UserRoleSelector from '@/components/user/role/user-role-selector.vue'; import UserRoleSelector from '@/components/user/role/user-role-selector.vue';
import { getRoleList } from '@/api/user/role'; import { getRoleList } from '@/api/user/role';
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
import { getUserRoleIdList, grantUserRole } from '@/api/user/user'; import { getUserRoleIdList, grantUserRole, UserQueryResponse, UserUpdateRequest } from '@/api/user/user';
const { visible, setVisible } = useVisible(); const { visible, setVisible } = useVisible();
const { loading: saveLoading, setLoading: setSaveLoading } = useLoading(); const { loading: saveLoading, setLoading: setSaveLoading } = useLoading();
const { loading: roleLoading, setLoading: setRoleLoading } = useLoading(); const { loading: roleLoading, setLoading: setRoleLoading } = useLoading();
const defaultForm = () => {
return {
id: undefined,
username: undefined,
nickname: undefined,
roleIdList: undefined,
};
};
const formRef = ref(); const formRef = ref();
// fixme const formModel = ref<UserUpdateRequest>({});
const formModel = reactive<Record<string, any>>(defaultForm()); const updateUser = ref<UserQueryResponse>({} as UserQueryResponse);
const cacheStore = useCacheStore(); const cacheStore = useCacheStore();
// 打开 // 打开
const open = (record: any) => { const open = (record: any) => {
renderForm({ ...defaultForm(), ...record }); renderForm(record);
setVisible(true); setVisible(true);
loadRoles(); loadRoles();
}; };
// 渲染表单 // 渲染表单
const renderForm = (record: any) => { const renderForm = (record: any) => {
// fixme updateUser.value = Object.assign({}, record);
Object.keys(formModel).forEach(k => { formModel.value = {
if (record.hasOwnProperty(k)) { id: record.id,
formModel[k] = record[k]; roleIdList: []
} };
});
}; };
// 加载角色 // 加载角色
@@ -99,8 +89,8 @@
cacheStore.set('roles', data); cacheStore.set('roles', data);
} }
// 加载用户角色 // 加载用户角色
const { data: roleIdList } = await getUserRoleIdList(formModel.id); const { data: roleIdList } = await getUserRoleIdList(formModel.value.id as number);
formModel.roleIdList = roleIdList; formModel.value.roleIdList = roleIdList;
} catch (e) { } catch (e) {
} finally { } finally {
setRoleLoading(false); setRoleLoading(false);
@@ -113,10 +103,7 @@
const handlerOk = async () => { const handlerOk = async () => {
setSaveLoading(true); setSaveLoading(true);
try { try {
await grantUserRole({ await grantUserRole(formModel.value);
id: formModel.id,
roleIdList: formModel.roleIdList
});
Message.success('修改成功'); Message.success('修改成功');
// 清空 // 清空
handlerClear(); handlerClear();

View File

@@ -21,11 +21,11 @@
:wrapper-col-props="{ span: 18 }"> :wrapper-col-props="{ span: 18 }">
<!-- 用户名 --> <!-- 用户名 -->
<a-form-item field="username" label="用户名"> <a-form-item field="username" label="用户名">
<a-input v-model="formModel.username" :disabled="true" /> <a-input v-model="updateUser.username" :disabled="true" />
</a-form-item> </a-form-item>
<!-- 花名 --> <!-- 花名 -->
<a-form-item field="nickname" label="花名"> <a-form-item field="nickname" label="花名">
<a-input v-model="formModel.nickname" :disabled="true" /> <a-input v-model="updateUser.nickname" :disabled="true" />
</a-form-item> </a-form-item>
<!-- 密码 --> <!-- 密码 -->
<a-form-item field="password" label="新密码" :rules="password"> <a-form-item field="password" label="新密码" :rules="password">
@@ -43,42 +43,33 @@
</script> </script>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref } from 'vue'; import { ref } from 'vue';
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible'; import useVisible from '@/hooks/visible';
import { password } from '../types/form.rules'; import { password } from '../types/form.rules';
import { resetUserPassword } from '@/api/user/user'; import { resetUserPassword, UserQueryResponse, UserUpdateRequest } from '@/api/user/user';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import { md5 } from '@/utils'; import { md5 } from '@/utils';
const { visible, setVisible } = useVisible(); const { visible, setVisible } = useVisible();
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const defaultForm = () => {
return {
id: undefined,
username: undefined,
nickname: undefined,
password: undefined,
};
};
const formRef = ref(); const formRef = ref();
const formModel = reactive<Record<string, any>>(defaultForm()); const formModel = ref<UserUpdateRequest>({});
const updateUser = ref<UserQueryResponse>({} as UserQueryResponse);
// 打开 // 打开
const open = (record: any) => { const open = (record: any) => {
renderForm({ ...defaultForm(), ...record }); renderForm(record);
setVisible(true); setVisible(true);
}; };
// 渲染表单 // 渲染表单
const renderForm = (record: any) => { const renderForm = (record: any) => {
Object.keys(formModel).forEach(k => { updateUser.value = Object.assign({}, record);
if (record.hasOwnProperty(k)) { formModel.value = {
formModel[k] = record[k]; password: undefined
} };
});
}; };
defineExpose({ open }); defineExpose({ open });
@@ -94,8 +85,8 @@
} }
// 修改 // 修改
await resetUserPassword({ await resetUserPassword({
id: formModel.id, id: updateUser.value.id,
password: md5(formModel.password) password: md5(formModel.value.password as string)
}); });
Message.success('修改成功'); Message.success('修改成功');
// 清空 // 清空

View File

@@ -164,7 +164,7 @@
const pagination = reactive(defaultPagination()) as PaginationProps; const pagination = reactive(defaultPagination()) as PaginationProps;
const formModel = ref<UserQueryRequest>({ const formModel = reactive<UserQueryRequest>({
id: undefined, id: undefined,
username: undefined, username: undefined,
password: undefined, password: undefined,