index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <route lang="json">
  2. {
  3. "style": {
  4. "navigationBarTitleText": "个人信息",
  5. "navigationBarBackgroundColor": "#ffffff"
  6. }
  7. }
  8. </route>
  9. <script setup lang="ts">
  10. import {
  11. getDesignerBasicInfo,
  12. getDesignerExtraEvents,
  13. getDesignerFamilyInfo,
  14. saveDesignerFamilyInfo,
  15. } from '../../../../core/libs/agent-requests'
  16. import { messages } from '../../../../core/libs/messages'
  17. import { omit } from 'radash'
  18. import BottomAppBar from '@/components/bottom-app-bar.vue'
  19. import { renders } from '../../../../core/libs/renders'
  20. import DataRender from '@/components/data-render.vue'
  21. import PageHelperEvo from '@/components/page-helper-evo.vue'
  22. import { DataFormSchema } from '../../../../components/data-form'
  23. import { DesignerFamilyInfo } from '@designer-hub/app/src/core/libs/models'
  24. import DataForm from '@/components/data-form.vue'
  25. import { requestToast } from '@designer-hub/app/src/core/utils/common'
  26. import { ComponentExposed } from 'vue-component-type-helpers'
  27. const tab = ref('basic')
  28. // 基础信息 家庭信息 奖项信息 销售信息 游学/活动信息
  29. const tabs = [
  30. { label: '基础信息', value: 'basic' },
  31. { label: '家庭信息', value: 'family' },
  32. { label: '奖项信息', value: 'award' },
  33. { label: '销售信息', value: 'sale' },
  34. { label: '游学/活动信息', value: 'activity' },
  35. { label: '其他活动信息', value: 'events' },
  36. ]
  37. const id = ref()
  38. const { data: basicData, run: setBasicData } = useRequest(() => getDesignerBasicInfo(id.value))
  39. const query = computed(() => ({ userId: id.value }))
  40. const eventsQuery = computed(() => ({ type: '3' }))
  41. const actionSheetStatus = ref(false)
  42. const schema = ref<DataFormSchema>()
  43. const formData = ref({})
  44. const submitType = ref<'family'>()
  45. const familyPageRef = ref<ComponentExposed<typeof PageHelperEvo>>()
  46. // const {} = useRequest()
  47. const handleEditBasicInfo = async () => {
  48. await uni.navigateTo({ url: `/pages/designer/archives/basic-info/index?id=${id.value}` })
  49. }
  50. const handleAddFamilyInfo = async () => {
  51. submitType.value = 'family'
  52. const familySchema: DataFormSchema<Omit<DesignerFamilyInfo, 'userId' | 'createTime' | 'id'>> = {
  53. familyRelation: {
  54. type: 'TextField',
  55. label: messages.objects.designerFamilyInfo.familyRelation,
  56. },
  57. familyName: {
  58. type: 'TextField',
  59. label: messages.objects.designerFamilyInfo.familyName,
  60. },
  61. familySex: {
  62. type: 'Radio',
  63. label: messages.objects.designerFamilyInfo.familySex,
  64. props: {
  65. columns: [
  66. { label: '男', value: '1' },
  67. { label: '女', value: '2' },
  68. ],
  69. },
  70. },
  71. familyBirthday: {
  72. type: 'TextField',
  73. label: messages.objects.designerFamilyInfo.familyBirthday,
  74. },
  75. familyInterset: {
  76. type: 'TextField',
  77. label: messages.objects.designerFamilyInfo.familyInterset,
  78. },
  79. familyOccupation: {
  80. type: 'TextField',
  81. label: messages.objects.designerFamilyInfo.familyOccupation,
  82. },
  83. }
  84. schema.value = familySchema
  85. actionSheetStatus.value = true
  86. }
  87. const handleSubmit = async () => {
  88. switch (submitType.value) {
  89. case 'family': {
  90. const { code } = await requestToast(
  91. () => saveDesignerFamilyInfo({ ...formData.value, userId: id.value }),
  92. {
  93. success: true,
  94. successTitle: '保存成功',
  95. },
  96. )
  97. if (code === 0) {
  98. actionSheetStatus.value = false
  99. familyPageRef.value?.reload()
  100. }
  101. break
  102. }
  103. default:
  104. break
  105. }
  106. }
  107. onLoad(async (query: { id: string }) => {
  108. id.value = query.id
  109. await setBasicData()
  110. })
  111. </script>
  112. <template>
  113. <div class="flex-grow bg-white">
  114. <wd-tabs v-model="tab" :swipeable="true" :slidable-num="4">
  115. <template v-for="(it, index) in tabs" :key="index">
  116. <wd-tab :title="it.label" :name="it.value"></wd-tab>
  117. </template>
  118. </wd-tabs>
  119. <div class="flex flex-col px-5 gap-5">
  120. <template v-if="tab === 'basic'">
  121. <template
  122. v-for="([key, value], index) in Object.entries(omit(basicData, ['id', 'userId']))"
  123. :key="index"
  124. >
  125. <div class="flex items-center justify-between">
  126. <div class="text-black/40 text-base font-normal font-['PingFang SC'] leading-none">
  127. {{ messages.objects.designerBasiceInfo[key] }}
  128. </div>
  129. <DataRender v-bind="renders.designerBasiceInfo[key](value)"></DataRender>
  130. </div>
  131. <!-- <SectionHeading size="base" :title="messages.objects.designerBasiceInfo[key]">
  132. <template #append>
  133. <DataRender v-bind="renders.designerBasiceInfo[key](value)"></DataRender>
  134. </template>
  135. </SectionHeading> -->
  136. <div class="w-full h-.25 bg-[#f4f4f4]"></div>
  137. </template>
  138. </template>
  139. <template v-if="tab === 'family'">
  140. <PageHelperEvo ref="familyPageRef" :request="getDesignerFamilyInfo" :query="query">
  141. <template #default="{ source }">
  142. <template v-for="(it, index) in source.list" :key="index">
  143. <div>{{ it }}</div>
  144. </template>
  145. </template>
  146. </PageHelperEvo>
  147. </template>
  148. <template v-if="tab === 'events'">
  149. <PageHelperEvo :request="getDesignerExtraEvents" :query="eventsQuery">
  150. <template #default="{ source }">
  151. <template v-for="(it, index) in source.list" :key="index">
  152. <div>{{ it }}</div>
  153. </template>
  154. </template>
  155. </PageHelperEvo>
  156. </template>
  157. </div>
  158. <BottomAppBar fixed placeholder>
  159. <wd-button v-if="tab === 'basic'" block :round="false" @click="handleEditBasicInfo">
  160. 编辑
  161. </wd-button>
  162. <wd-button v-if="tab === 'family'" block :round="false" @click="handleAddFamilyInfo">
  163. 新增
  164. </wd-button>
  165. </BottomAppBar>
  166. <wd-action-sheet v-model="actionSheetStatus">
  167. <div class="p-4">
  168. <DataForm :schema="schema" :direction="'horizontal'" v-model="formData"></DataForm>
  169. <wd-button :round="false" block @click="handleSubmit">提交</wd-button>
  170. </div>
  171. </wd-action-sheet>
  172. </div>
  173. </template>