|
@@ -1,149 +1,186 @@
|
|
|
<template>
|
|
|
- <n-modal v-model:show="modalVisible" preset="card" :title="title" class="w-700px">
|
|
|
- <n-form ref="formRef" label-placement="left" :label-width="80" :model="formModel" :rules="rules">
|
|
|
- <n-grid :cols="24" :x-gap="18">
|
|
|
- <n-form-item-grid-item :span="12" label="id" path="userName">
|
|
|
- <n-input v-model:value="formModel.userName" />
|
|
|
- </n-form-item-grid-item>
|
|
|
- <n-form-item-grid-item :span="12" label="年龄" path="age">
|
|
|
- <n-input-number v-model:value="formModel.age" clearable />
|
|
|
- </n-form-item-grid-item>
|
|
|
- <n-form-item-grid-item :span="12" label="性别" path="gender">
|
|
|
- <n-radio-group v-model:value="formModel.gender">
|
|
|
- <n-radio v-for="item in genderOptions" :key="item.value" :value="item.value">{{ item.label }}</n-radio>
|
|
|
- </n-radio-group>
|
|
|
- </n-form-item-grid-item>
|
|
|
- <n-form-item-grid-item :span="12" label="手机号" path="phone">
|
|
|
- <n-input v-model:value="formModel.phone" />
|
|
|
- </n-form-item-grid-item>
|
|
|
- <n-form-item-grid-item :span="12" label="邮箱" path="email">
|
|
|
- <n-input v-model:value="formModel.email" />
|
|
|
- </n-form-item-grid-item>
|
|
|
- <n-form-item-grid-item :span="12" label="状态" path="userStatus">
|
|
|
- <n-select v-model:value="formModel.userStatus" :options="userStatusOptions" />
|
|
|
- </n-form-item-grid-item>
|
|
|
- </n-grid>
|
|
|
- <n-space class="w-full pt-16px" :size="24" justify="end">
|
|
|
- <n-button class="w-72px" @click="closeModal">取消</n-button>
|
|
|
- <n-button class="w-72px" type="primary" @click="handleSubmit">确定</n-button>
|
|
|
- </n-space>
|
|
|
- </n-form>
|
|
|
- </n-modal>
|
|
|
+ <n-modal v-model:show="modalVisible" preset="card" :title="title" class="w-700px">
|
|
|
+ <n-form ref="formRef" label-placement="left" :label-width="100" :model="formModel" :rules="rules">
|
|
|
+ <n-grid :cols="24" :x-gap="18">
|
|
|
+ <!-- <n-form-item-grid-item :span="12" label="ID" path="id">
|
|
|
+ <n-input-number v-model:value="formModel.id" />
|
|
|
+ </n-form-item-grid-item> -->
|
|
|
+ <n-form-item-grid-item :span="12" label="学科名称" path="name">
|
|
|
+ <n-input v-model:value="formModel.name" clearable />
|
|
|
+ </n-form-item-grid-item>
|
|
|
+ <!-- <n-form-item-grid-item :span="12" label="创建时间" path="createTime">
|
|
|
+ <n-date-picker v-model:value="timestamp" type="datetime" clearable />
|
|
|
+ <n-input v-model:value="formModel.createTime" />
|
|
|
+ </n-form-item-grid-item> -->
|
|
|
+ <n-form-item-grid-item :span="12" label="学科描述" path="description">
|
|
|
+ <n-input v-model:value="formModel.description" clearable />
|
|
|
+ <!-- <n-radio-group v-model:value="formModel.description">
|
|
|
+ <n-radio v-for="item in genderOptions" :key="item.value" :value="item.value">{{ item.label }}</n-radio>
|
|
|
+ </n-radio-group> -->
|
|
|
+ </n-form-item-grid-item>
|
|
|
+
|
|
|
+ <!-- <n-form-item-grid-item :span="12" label="修改时间" path="email">
|
|
|
+ <n-input />
|
|
|
+ </n-form-item-grid-item> -->
|
|
|
+ <n-form-item-grid-item :span="12" label="创建用户ID" path="createUid">
|
|
|
+ <n-input-number v-model:value="formModel.createUid" />
|
|
|
+ </n-form-item-grid-item>
|
|
|
+ <n-form-item-grid-item :span="12" label="状态" path="disabled">
|
|
|
+ <n-select v-model:value="formModel.disabled" :options="userStatusOptions" />
|
|
|
+ </n-form-item-grid-item>
|
|
|
+ </n-grid>
|
|
|
+ <n-space class="w-full pt-16px" :size="24" justify="end">
|
|
|
+ <n-button class="w-72px" @click="closeModal">取消</n-button>
|
|
|
+ <n-button class="w-72px" type="primary" @click="handleSubmit">确定</n-button>
|
|
|
+ </n-space>
|
|
|
+ </n-form>
|
|
|
+ </n-modal>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
import { ref, computed, reactive, watch } from 'vue';
|
|
|
import type { FormInst, FormItemRule } from 'naive-ui';
|
|
|
-import { genderOptions, userStatusOptions } from '@/constants';
|
|
|
-import { formRules, createRequiredFormRule } from '@/utils';
|
|
|
+import { userStatusOptions } from '@/constants';
|
|
|
+import {createRequiredFormRule } from '@/utils';
|
|
|
+import { addEasEduCategory, AddEasEduCategoryParams } from '~/src/service/api/sort';
|
|
|
+// import {getTableData} from '../index.vue'
|
|
|
+// const timestamp = ref(1483135260000)
|
|
|
+
|
|
|
|
|
|
export interface Props {
|
|
|
- /** 弹窗可见性 */
|
|
|
- visible: boolean;
|
|
|
- /**
|
|
|
- * 弹窗类型
|
|
|
- * add: 新增
|
|
|
- * edit: 编辑
|
|
|
- */
|
|
|
- type?: 'add' | 'edit';
|
|
|
- /** 编辑的表格行数据 */
|
|
|
- editData?: UserManagement.User | null;
|
|
|
+ /** 弹窗可见性 */
|
|
|
+ visible: boolean;
|
|
|
+ /**
|
|
|
+ * 弹窗类型
|
|
|
+ * add: 新增
|
|
|
+ * edit: 编辑
|
|
|
+ * delete : 删除
|
|
|
+ */
|
|
|
+ type?: 'add' | 'edit' ;
|
|
|
+ /** 编辑的表格行数据 */
|
|
|
+ editData?: UserManagement.User | null;
|
|
|
}
|
|
|
|
|
|
export type ModalType = NonNullable<Props['type']>;
|
|
|
|
|
|
-defineOptions({ name: 'TableActionModal' });
|
|
|
+defineOptions({ name: 'TableActionAdd' });
|
|
|
|
|
|
const props = withDefaults(defineProps<Props>(), {
|
|
|
- type: 'add',
|
|
|
- editData: null
|
|
|
+ type: 'add',
|
|
|
+ editData: null,
|
|
|
});
|
|
|
|
|
|
interface Emits {
|
|
|
- (e: 'update:visible', visible: boolean): void;
|
|
|
+ (e: 'update:visible', visible: boolean): void;
|
|
|
}
|
|
|
|
|
|
const emit = defineEmits<Emits>();
|
|
|
|
|
|
const modalVisible = computed({
|
|
|
- get() {
|
|
|
- return props.visible;
|
|
|
- },
|
|
|
- set(visible) {
|
|
|
- emit('update:visible', visible);
|
|
|
- }
|
|
|
+ get() {
|
|
|
+ return props.visible;
|
|
|
+ },
|
|
|
+ set(visible) {
|
|
|
+ emit('update:visible', visible);
|
|
|
+ }
|
|
|
});
|
|
|
const closeModal = () => {
|
|
|
- modalVisible.value = false;
|
|
|
+ modalVisible.value = false;
|
|
|
};
|
|
|
|
|
|
const title = computed(() => {
|
|
|
- const titles: Record<ModalType, string> = {
|
|
|
- add: '添加用户',
|
|
|
- edit: '编辑用户'
|
|
|
- };
|
|
|
- return titles[props.type];
|
|
|
+ const titles: Record<ModalType, string> = {
|
|
|
+ add: '添加用户',
|
|
|
+ edit: '编辑用户',
|
|
|
+ };
|
|
|
+ return titles[props.type];
|
|
|
});
|
|
|
|
|
|
const formRef = ref<HTMLElement & FormInst>();
|
|
|
|
|
|
-type FormModel = Pick<UserManagement.User, 'userName' | 'age' | 'gender' | 'phone' | 'email' | 'userStatus'>;
|
|
|
+type FormModel = Pick<UserManagement.User, | 'name' | 'description' | 'createUid' | 'disabled'>;
|
|
|
|
|
|
const formModel = reactive<FormModel>(createDefaultFormModel());
|
|
|
|
|
|
const rules: Record<keyof FormModel, FormItemRule | FormItemRule[]> = {
|
|
|
- userName: createRequiredFormRule('请输入用户名'),
|
|
|
- age: createRequiredFormRule('请输入年龄'),
|
|
|
- gender: createRequiredFormRule('请选择性别'),
|
|
|
- phone: formRules.phone,
|
|
|
- email: formRules.email,
|
|
|
- userStatus: createRequiredFormRule('请选择用户状态')
|
|
|
+ // id: createRequiredFormRule('请输入用户名'),
|
|
|
+ name: createRequiredFormRule('请输入学科名称'),
|
|
|
+ description: createRequiredFormRule('请进行部门描述'),
|
|
|
+ // createTime:formRules.createTime,
|
|
|
+ createUid: createRequiredFormRule('请输入创建用户ID'),
|
|
|
+ disabled: createRequiredFormRule('请选择用户状态')
|
|
|
+
|
|
|
};
|
|
|
|
|
|
function createDefaultFormModel(): FormModel {
|
|
|
- return {
|
|
|
- userName: '',
|
|
|
- age: null,
|
|
|
- gender: null,
|
|
|
- phone: '',
|
|
|
- email: null,
|
|
|
- userStatus: null
|
|
|
- };
|
|
|
+ return {
|
|
|
+ // id: null,
|
|
|
+ name: '',
|
|
|
+ description: '',
|
|
|
+ // createTime: '',
|
|
|
+ createUid:null,
|
|
|
+ disabled: null,
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
+
|
|
|
function handleUpdateFormModel(model: Partial<FormModel>) {
|
|
|
- Object.assign(formModel, model);
|
|
|
+ Object.assign(formModel, model);
|
|
|
}
|
|
|
|
|
|
function handleUpdateFormModelByModalType() {
|
|
|
- const handlers: Record<ModalType, () => void> = {
|
|
|
- add: () => {
|
|
|
- const defaultFormModel = createDefaultFormModel();
|
|
|
- handleUpdateFormModel(defaultFormModel);
|
|
|
- },
|
|
|
- edit: () => {
|
|
|
- if (props.editData) {
|
|
|
- handleUpdateFormModel(props.editData);
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- handlers[props.type]();
|
|
|
+ const handlers: Record<ModalType, () => void> = {
|
|
|
+ add: () => {
|
|
|
+ const defaultFormModel = createDefaultFormModel();
|
|
|
+ handleUpdateFormModel(defaultFormModel);
|
|
|
+ },
|
|
|
+ edit: () => {
|
|
|
+ if (props.editData) {
|
|
|
+ handleUpdateFormModel(props.editData);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ };
|
|
|
+
|
|
|
+ handlers[props.type]();
|
|
|
}
|
|
|
|
|
|
+// async function handleSubmit() {
|
|
|
+// await formRef.value?.validate();
|
|
|
+// window.$message?.success('新增成功!');
|
|
|
+// closeModal();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
async function handleSubmit() {
|
|
|
await formRef.value?.validate();
|
|
|
- window.$message?.success('新增成功!');
|
|
|
- closeModal();
|
|
|
+ const params: AddEasEduCategoryParams = {
|
|
|
+ // id: formModel.id,
|
|
|
+ name: formModel.name,
|
|
|
+ description: formModel.description,
|
|
|
+ // createTime: formModel.createTime,
|
|
|
+ createUid: formModel.createUid,
|
|
|
+ disabled: formModel.disabled
|
|
|
+ };
|
|
|
+ addEasEduCategory(params)
|
|
|
+ .then(res => {
|
|
|
+ window.$message?.success('新增成功!');
|
|
|
+ closeModal();
|
|
|
+ // getTableData();
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.error(error);
|
|
|
+ window.$message?.error('新增失败!');
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
|
|
|
watch(
|
|
|
- () => props.visible,
|
|
|
- newValue => {
|
|
|
- if (newValue) {
|
|
|
- handleUpdateFormModelByModalType();
|
|
|
- }
|
|
|
- }
|
|
|
+ () => props.visible,
|
|
|
+ newValue => {
|
|
|
+ if (newValue) {
|
|
|
+ handleUpdateFormModelByModalType();
|
|
|
+ }
|
|
|
+ }
|
|
|
);
|
|
|
</script>
|
|
|
|