123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- import {
- NButton,
- NForm,
- NFormItem,
- NInput,
- NSelect,
- NSpace,
- NSpin,
- useMessage
- } from 'naive-ui';
- import { defineComponent, onMounted, reactive, ref } from 'vue';
- import styles from './index.module.less';
- import { gradeToCN } from '/src/utils/contants';
- import { classGroupList } from '/src/views/home/api';
- import { resetStudentInfo } from '../../api';
- import { classArray, getgradeNumList } from '/src/views/classList/contants';
- export default defineComponent({
- name: 'update-student',
- props: {
- row: {
- type: Object,
- default: () => ({})
- }
- },
- emits: ['close', 'confirm'],
- setup(props, { emit }) {
- const message = useMessage();
- const state = reactive({
- uploading: false,
- gradeList: [] as any,
- classList: [] as any
- });
- const forms = reactive({
- phone: null,
- nickname: null,
- gender: null,
- currentGradeNum: null,
- currentClass: null as any
- });
- const gradeNumList = ref(getgradeNumList());
- const classArrayRef = ref([...classArray] as any);
- const formsRef = ref();
- const onSubmit = async () => {
- formsRef.value?.validate(async (err: any) => {
- if (err) {
- return;
- }
- state.uploading = true;
- try {
- await resetStudentInfo({
- ...forms,
- id: props.row.id,
- schoolId: props.row.schoolId,
- tenantId: props.row.tenantId
- });
- message.success('修改成功');
- emit('confirm');
- emit('close');
- } catch {
- //
- }
- state.uploading = false;
- });
- };
- onMounted(async () => {
- const row = props.row;
- if (row.id) {
- forms.nickname = row.nickname;
- forms.phone = row.phone;
- forms.gender = row.gender;
- forms.currentGradeNum = row.currentGradeNum;
- forms.currentClass = row.currentClass;
- }
- if (forms.currentGradeNum) {
- const index = gradeNumList.value.findIndex(
- (item: any) => item.value === forms.currentGradeNum
- );
- if (index === -1) {
- forms.currentGradeNum = null;
- }
- }
- });
- const onlyAllowNumber = (value: string) => !value || /^\d+$/.test(value);
- return () => (
- <div class={styles.updateStudentContainer}>
- <NForm
- ref={formsRef}
- model={forms}
- labelAlign="right"
- labelWidth={'auto'}
- labelPlacement="left">
- <NFormItem
- label="姓名"
- path="nickname"
- rule={{
- required: true,
- message: '请填写学生姓名',
- trigger: 'blur'
- }}>
- <NInput
- maxlength={15}
- placeholder="请填写学生姓名"
- v-model:value={forms.nickname}></NInput>
- </NFormItem>
- <NFormItem
- label="手机号"
- path="phone"
- rule={[
- {
- required: true,
- message: '请填写学生手机号',
- trigger: 'blur'
- },
- {
- pattern: /^1[3456789]\d{9}$/,
- message: '手机号格式不正确',
- trigger: 'blur'
- }
- ]}>
- <NInput
- maxlength={11}
- allowInput={onlyAllowNumber}
- placeholder="请填写学生手机号"
- v-model:value={forms.phone}></NInput>
- </NFormItem>
- <NFormItem
- label="性别"
- path="gender"
- rule={[
- {
- required: true,
- message: '请选择性别',
- trigger: 'blur',
- type: 'number'
- }
- ]}>
- <NSelect
- class={styles.select}
- clearable
- filterable
- placeholder="请选择性别"
- options={[
- { label: '男', value: 1 },
- { label: '女', value: 0 }
- ]}
- v-model:value={forms.gender}
- />
- </NFormItem>
- <NFormItem
- label="年级"
- path="currentGradeNum"
- rule={[
- {
- required: true,
- message: '请选择年级',
- trigger: 'change',
- type: 'number'
- }
- ]}>
- <NSelect
- v-model:value={forms.currentGradeNum}
- placeholder="请选择年级"
- options={gradeNumList.value as any}
- clearable
- filterable
- />
- </NFormItem>
- <NFormItem
- label="班级"
- path="currentClass"
- rule={[
- {
- required: true,
- message: '请选择班级',
- trigger: 'change',
- type: 'number'
- }
- ]}>
- <NSelect
- filterable
- v-model:value={forms.currentClass}
- placeholder="请选择班级"
- clearable
- options={classArrayRef.value as any}
- />
- </NFormItem>
- <NSpace class={styles.updateBtnGroup}>
- <NButton strong type="default" round onClick={() => emit('close')}>
- 取消
- </NButton>
- <NButton
- strong
- type="primary"
- round
- disabled={state.uploading}
- loading={state.uploading}
- onClick={onSubmit}>
- 确认
- </NButton>
- </NSpace>
- </NForm>
- </div>
- );
- }
- });
|