personInfo.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { defineComponent, reactive, ref } 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. } from 'naive-ui';
  16. import headerD from '@/views/home/images/headerD.png';
  17. import defultHeade from '@/components/layout/images/teacherIcon.png';
  18. import femaleIcon from '../images/femaleIcon.png';
  19. import maleIcon from '../images/maleIcon.png';
  20. import { state } from '/src/state';
  21. import { useUserStore } from '/src/store/modules/users';
  22. import { api_teacherUpdate } from '/src/api/user';
  23. export default defineComponent({
  24. name: 'setting-personInfo',
  25. setup(props, { emit, attrs }) {
  26. const message = useMessage();
  27. const userStore = useUserStore();
  28. const formOptions = reactive({
  29. sexs: [
  30. { label: '男', value: 1, class: 'option' },
  31. { label: '女', value: 0, class: 'option' }
  32. ] as SelectOption[]
  33. });
  34. const formRef = ref();
  35. const teacherForm = reactive({
  36. nickname: userStore.info.nickname,
  37. phone: userStore.info.phone,
  38. gender: userStore.info.gender,
  39. schoolId: userStore.info.schoolInfos?.[0]?.id,
  40. tenantId: userStore.info.schoolInfos?.[0]?.tenantId,
  41. id: userStore.info.id
  42. });
  43. const data = reactive({
  44. disabled: true
  45. });
  46. const handleSave = () => {
  47. formRef.value.validate(async (err: any) => {
  48. if (err) {
  49. return;
  50. }
  51. await api_teacherUpdate(teacherForm);
  52. console.log(teacherForm);
  53. userStore.getInfo();
  54. data.disabled = true;
  55. message.success('修改成功');
  56. });
  57. };
  58. return () => (
  59. <div class={styles.infoWrap}>
  60. <div class={styles.teacherInfoWrap}>
  61. <div class={styles.teacherHeadWrap}>
  62. <NImage
  63. previewDisabled
  64. class={styles.headerD}
  65. src={headerD}></NImage>
  66. <NImage
  67. previewDisabled
  68. class={styles.defultHeade}
  69. src={defultHeade}></NImage>
  70. </div>
  71. <div class={styles.headerInfo}>
  72. <p class={styles.headerTitle}>
  73. 张晚意
  74. <NImage
  75. previewDisabled
  76. class={styles.sexIcon}
  77. src={maleIcon}></NImage>
  78. </p>
  79. <p class={styles.headerSubTitle}>武汉小学 | 音乐老师</p>
  80. </div>
  81. </div>
  82. <div class={styles.setInfo}>
  83. <NForm ref={formRef} model={teacherForm} disabled={data.disabled}>
  84. <NGrid cols={3} x-gap="100">
  85. <NGi>
  86. <NFormItem
  87. label="姓名"
  88. path="nickname"
  89. rule={{
  90. required: true,
  91. message: '请填写老师姓名',
  92. trigger: 'blur'
  93. }}>
  94. <NInput
  95. placeholder="请填写老师姓名"
  96. v-model:value={teacherForm.nickname}></NInput>
  97. </NFormItem>
  98. </NGi>
  99. <NGi>
  100. <NFormItem
  101. label="手机号"
  102. path="phone"
  103. rule={[
  104. {
  105. required: true,
  106. message: '请填写老师手机号',
  107. trigger: 'blur'
  108. },
  109. {
  110. pattern: /^1[3456789]\d{9}$/,
  111. message: '手机号格式不正确',
  112. trigger: 'blur'
  113. }
  114. ]}>
  115. <NInput
  116. placeholder="请填写老师手机号"
  117. v-model:value={teacherForm.phone}></NInput>
  118. </NFormItem>
  119. </NGi>
  120. <NGi>
  121. <NFormItem label="性别" path="sex">
  122. <NSelect
  123. showArrow={!data.disabled}
  124. placeholder="请选择性别"
  125. options={formOptions.sexs}
  126. v-model:value={teacherForm.gender}
  127. />
  128. </NFormItem>
  129. </NGi>
  130. </NGrid>
  131. </NForm>
  132. </div>
  133. {data.disabled ? (
  134. <NSpace class={styles.btnList} align="center" justify="end">
  135. <NButton class={styles.btn} color="#198cfe">
  136. 修改密码
  137. </NButton>
  138. <NButton
  139. class={styles.btn}
  140. color="#f24433"
  141. onClick={() => (data.disabled = false)}>
  142. 修改信息
  143. </NButton>
  144. </NSpace>
  145. ) : (
  146. <NSpace class={styles.btnList} align="center" justify="end">
  147. <NButton class={styles.btn} onClick={() => (data.disabled = true)}>
  148. 取消
  149. </NButton>
  150. <NButton
  151. class={styles.btn}
  152. type="primary"
  153. onClick={() => handleSave()}>
  154. 完成
  155. </NButton>
  156. </NSpace>
  157. )}
  158. </div>
  159. );
  160. }
  161. });