baseInfo.tsx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import { defineComponent, onMounted, reactive, ref, watch } from 'vue';
  2. import styles from '../index.module.less';
  3. import {
  4. NImage,
  5. NForm,
  6. NFormItem,
  7. NInput,
  8. NGrid,
  9. NGi,
  10. NButton,
  11. NSelect,
  12. NSpace,
  13. SelectOption,
  14. useMessage,
  15. NModal,
  16. NCalendar,
  17. NCascader
  18. } from 'naive-ui';
  19. import headerD from '../images/headerD.png';
  20. import defultHeade from '@/components/layout/images/teacherIcon.png';
  21. import maleIcon from '../images/maleIcon.png';
  22. import femaleIcon from '../images/femaleIcon.png';
  23. import { useUserStore } from '/src/store/modules/users';
  24. import { api_teacherUpdate } from '/src/api/user';
  25. import { resetStudentInfo } from '../api';
  26. import UploadFile from '/src/components/upload-file';
  27. import {
  28. getgradeNumList,
  29. classArray
  30. } from '@/views/classList/contants';
  31. export default defineComponent({
  32. name: 'setting-personInfo',
  33. props: {
  34. studentInfo: {
  35. type: Object,
  36. default: () => ({
  37. nickname: '',
  38. currentGradeNum: '',
  39. gender: null,
  40. phone: '',
  41. id: '',
  42. currentClass: ''
  43. })
  44. }
  45. },
  46. setup(props) {
  47. const message = useMessage();
  48. const userStore = useUserStore();
  49. const formOptions = reactive({
  50. sexs: [
  51. { label: '男', value: 1, class: 'option' },
  52. { label: '女', value: 0, class: 'option' }
  53. ] as SelectOption[],
  54. areaList: [] as any[]
  55. });
  56. const formRef = ref();
  57. const studentForm = reactive({
  58. nickname: props.studentInfo.nickname as any,
  59. phone: props.studentInfo.phone,
  60. gender: props.studentInfo.gender,
  61. id: props.studentInfo.id,
  62. currentGradeNum: props.studentInfo.currentGradeNum,
  63. currentClass: props.studentInfo.currentClass
  64. });
  65. const gradeNumList = ref(getgradeNumList())
  66. const classArrayRef = ref([...classArray] as any)
  67. const data = reactive({
  68. disabled: true,
  69. openChangePwd: false,
  70. uploadShow: true
  71. });
  72. watch(
  73. () => props.studentInfo,
  74. val => {
  75. studentForm.nickname = val.nickname as any;
  76. studentForm.phone = val.phone;
  77. studentForm.gender = val.gender;
  78. studentForm.id = val.id;
  79. studentForm.currentGradeNum = val.currentGradeNum;
  80. studentForm.currentClass = val.currentClass;
  81. }
  82. );
  83. // onMounted(() => {});
  84. const handleSave = () => {
  85. formRef.value.validate(async (err: any) => {
  86. if (err) {
  87. return;
  88. }
  89. await resetStudentInfo({ ...props.studentInfo, ...studentForm });
  90. data.disabled = true;
  91. message.success('修改成功');
  92. });
  93. };
  94. const cancel = () => {
  95. studentForm.nickname = props.studentInfo.nickname;
  96. studentForm.phone = props.studentInfo.phone;
  97. studentForm.gender = props.studentInfo.gender;
  98. studentForm.currentGradeNum = props.studentInfo.currentGradeNum;
  99. studentForm.currentClass = props.studentInfo.currentClass;
  100. data.disabled = true;
  101. };
  102. return () => (
  103. <div class={styles.infoWrap}>
  104. <div class={styles.setInfo}>
  105. <NForm ref={formRef} model={studentForm} disabled={data.disabled}>
  106. <NGrid cols={4} x-gap="100">
  107. <NGi>
  108. <NFormItem
  109. label="姓名"
  110. path="nickname"
  111. rule={{
  112. required: true,
  113. message: '请填写老师姓名',
  114. trigger: 'blur'
  115. }}>
  116. <NInput
  117. bordered={!data.disabled}
  118. placeholder="请填写老师姓名"
  119. v-model:value={studentForm.nickname}></NInput>
  120. </NFormItem>
  121. </NGi>
  122. <NGi>
  123. <NFormItem
  124. label="手机号"
  125. path="phone"
  126. rule={[
  127. {
  128. required: true,
  129. message: '请填写老师手机号',
  130. trigger: 'blur'
  131. },
  132. {
  133. pattern: /^1[3456789]\d{9}$/,
  134. message: '手机号格式不正确',
  135. trigger: 'blur'
  136. }
  137. ]}>
  138. <NInput
  139. bordered={!data.disabled}
  140. placeholder="请填写老师手机号"
  141. v-model:value={studentForm.phone}></NInput>
  142. </NFormItem>
  143. </NGi>
  144. <NGi>
  145. <NFormItem label="性别" path="sex">
  146. <NSelect
  147. bordered={!data.disabled}
  148. class={styles.select}
  149. showArrow={!data.disabled}
  150. placeholder="请选择性别"
  151. options={formOptions.sexs}
  152. v-model:value={studentForm.gender}
  153. />
  154. </NFormItem>
  155. </NGi>
  156. <NGi>
  157. <NFormItem label="年级" path="">
  158. <NSelect
  159. bordered={!data.disabled}
  160. class={styles.select}
  161. showArrow={!data.disabled}
  162. placeholder="请选择年级"
  163. options={gradeNumList.value as any}
  164. v-model:value={studentForm.currentGradeNum}
  165. />
  166. </NFormItem>
  167. </NGi>
  168. <NGi>
  169. <NFormItem label="班级" path="">
  170. <NSelect
  171. bordered={!data.disabled}
  172. class={styles.select}
  173. showArrow={!data.disabled}
  174. placeholder="请选择班级"
  175. options={classArrayRef.value}
  176. v-model:value={studentForm.currentClass}
  177. />
  178. </NFormItem>
  179. </NGi>
  180. </NGrid>
  181. </NForm>
  182. </div>
  183. {data.disabled ? (
  184. <NSpace class={styles.btnList} align="center" justify="end">
  185. <NButton
  186. class={styles.btn}
  187. color="#f24433"
  188. onClick={() => (data.disabled = false)}>
  189. 修改信息
  190. </NButton>
  191. </NSpace>
  192. ) : (
  193. <NSpace class={styles.btnList} align="center" justify="end">
  194. <NButton class={styles.btn} onClick={() => cancel()}>
  195. 取消
  196. </NButton>
  197. <NButton
  198. class={styles.btn}
  199. type="primary"
  200. onClick={() => handleSave()}>
  201. 完成
  202. </NButton>
  203. </NSpace>
  204. )}
  205. </div>
  206. );
  207. }
  208. });