猫妈狗爸伴宠师小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
5.5 KiB

  1. <template>
  2. <view class="pd20">
  3. <steps-component :current="0"/>
  4. <view class="cell-box">
  5. <uni-section title="宠物基本信息" type="line">
  6. <view class="example">
  7. <!-- 基础表单校验 -->
  8. <uni-forms ref="valForm" :rules="rules" :modelValue="formData" label-width="100px">
  9. <uni-forms-item label="姓名" required name="name">
  10. <uni-easyinput v-model="formData.name" placeholder="请输入姓名" :inputBorder="false"/>
  11. </uni-forms-item>
  12. <uni-forms-item label="性别" required name="gender">
  13. <uni-data-checkbox selectedColor="#FFBF60" v-model="formData.gender" :localdata="actions"/>
  14. </uni-forms-item>
  15. <uni-forms-item label="年龄" required name="age">
  16. <uni-easyinput v-model="formData.age" placeholder="请输入年龄" :inputBorder="false"/>
  17. </uni-forms-item>
  18. <uni-forms-item label="养宠经验" name="feedingAge">
  19. <uni-easyinput type="number" v-model="formData.feedingAge" placeholder="请输入养宠经验"
  20. :inputBorder="false">
  21. <template #right>
  22. <view></view>
  23. </template>
  24. </uni-easyinput>
  25. </uni-forms-item>
  26. <uni-forms-item label="宠物类型" name="petType" required>
  27. <uni-data-checkbox selectedColor="#FFBF60" multiple v-model="formData.petType"
  28. :localdata="typeData"></uni-data-checkbox>
  29. </uni-forms-item>
  30. </uni-forms>
  31. </view>
  32. </uni-section>
  33. <view class="personal-pet-info-title border-bottom ">
  34. <view class="mb20">爱宠图片</view>
  35. <view class="font24" style="color: #999999">请上传3~6张个人所养宠物的照片并保证和上面选择的宠物相同</view>
  36. </view>
  37. <uni-file-picker v-model="fileList" @select="successUpload" limit="6" title="最多选择6张图片"
  38. :image-styles="imageStyles"></uni-file-picker>
  39. </view>
  40. </view>
  41. <submitBut text="下一步" @click="handleClick"></submitBut>
  42. </template>
  43. <script setup>
  44. import {ref} from "vue";
  45. import StepsComponent from "../../../components/stepsComponent/index.vue"
  46. import submitBut from "../../../components/submitBut/index.vue"
  47. import modal from "@/plugins/modal";
  48. import {saveBaseInfo} from "../../../api/work/work";
  49. import {getStorage, setStorage} from "../../../utils/auth";
  50. import {getPersonalInfo} from "../../../api/system/user";
  51. import tab from "../../../plugins/tab";
  52. const current = ref(1)
  53. const valForm = ref()
  54. const fileList = ref([])
  55. const model = ref({})
  56. const actions = ref([
  57. {text: '男', value: 1},
  58. {text: '女', value: 2}
  59. ])
  60. const typeData = ref(
  61. [
  62. {value: '1', text: "猫咪"},
  63. {value: '2', text: "狗狗"},
  64. {value: '3', text: "异宠"}
  65. ]
  66. )
  67. const imageStyles = ref({
  68. width: 100,
  69. height: 100,
  70. })
  71. const formData = ref({})
  72. const rules = ref({
  73. name: {rules: [{required: true, errorMessage: '姓名不能为空'}]},
  74. gender: {rules: [{required: true, errorMessage: '请选择宠物性别'}]},
  75. age: {rules: [{required: true, errorMessage: '请输入宠物年龄'}]},
  76. feedingAge: {rules: [{required: true, errorMessage: '请输入养宠经验'}]},
  77. petType: {rules: [{required: true, errorMessage: '请输选择宠物类型'}]},
  78. })
  79. const initForm = () => {
  80. let userInfo = getStorage('userInfo')
  81. formData.value = {
  82. id: userInfo.id,
  83. name: userInfo.name,
  84. gender: userInfo.gender > 0 ? userInfo.gender : null,
  85. age: userInfo.age,
  86. feedingAge: userInfo.feedingAge,
  87. petType: userInfo.petType ? userInfo.petType.split(',') : []
  88. }
  89. console.log(formData.value);
  90. fileList.value = userInfo.petImages ? userInfo.petImages : []
  91. }
  92. initForm()
  93. // 下一步
  94. const handleClick = async () => {
  95. valForm.value.validate().then(async () => {
  96. if (fileList.value.length <= 0) {
  97. modal.msgError("请上传宠物照片")
  98. return
  99. }
  100. await saveBaseInfo({
  101. ...formData.value,
  102. petImages: fileList.value,
  103. petType: formData.value.petType.join(',')
  104. })
  105. getUserInfo()
  106. }).catch(err => {
  107. console.log(err);
  108. })
  109. }
  110. const getUserInfo = async () => {
  111. const {data} = await getPersonalInfo()
  112. setStorage('userInfo', data)
  113. tab.navigateTo("/otherPages/workbenchManage/examNotice/index")
  114. }
  115. // 新增图片
  116. const successUpload = async (event) => {
  117. console.log(event);
  118. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  119. let lists = [].concat(event.tempFiles)
  120. let fileListLen = fileList.value.length
  121. lists.map((item) => {
  122. fileList.value.push({
  123. ...item
  124. })
  125. })
  126. for (let i = 0; i < lists.length; i++) {
  127. const result = await uploadFilePromise(lists[i].url)
  128. let item = fileList.value[fileListLen]
  129. fileList.value.splice(fileListLen, 1, Object.assign(item, {
  130. status: 'success',
  131. message: '',
  132. url: result
  133. }))
  134. fileListLen++
  135. }
  136. }
  137. const uploadFilePromise = (url) => {
  138. return new Promise((resolve, reject) => {
  139. uni.uploadFile({
  140. url: 'https://store-test.catmdogd.com/test-api/h5/oss/upload', // 仅为示例,非真实的接口地址
  141. filePath: url,
  142. name: 'file',
  143. formData: {
  144. user: 'test'
  145. },
  146. success: (res) => {
  147. setTimeout(() => {
  148. if (res && res.data) {
  149. let resData = JSON.parse(res.data);
  150. resolve(resData.url);
  151. }
  152. reject("上传失败");
  153. }, 1000)
  154. }
  155. });
  156. })
  157. }
  158. </script>
  159. <style scoped lang="scss">
  160. @import "index";
  161. </style>