猫妈狗爸伴宠师小程序前端代码
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.

169 lines
5.6 KiB

2 months ago
  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. <!-- 客服组件 -->
  43. <CustomerService />
  44. </template>
  45. <script setup>
  46. import {ref} from "vue";
  47. import StepsComponent from "../../../components/stepsComponent/index.vue"
  48. import submitBut from "../../../components/submitBut/index.vue"
  49. import modal from "@/plugins/modal";
  50. import {saveBaseInfo} from "../../../api/work/work";
  51. import {getStorage, setStorage} from "../../../utils/auth";
  52. import {getPersonalInfo} from "../../../api/system/user";
  53. import tab from "../../../plugins/tab";
  54. const current = ref(1)
  55. const valForm = ref()
  56. const fileList = ref([])
  57. const model = ref({})
  58. const actions = ref([
  59. {text: '男', value: 1},
  60. {text: '女', value: 2}
  61. ])
  62. const typeData = ref(
  63. [
  64. {value: '1', text: "猫咪"},
  65. {value: '2', text: "狗狗"},
  66. {value: '3', text: "异宠"}
  67. ]
  68. )
  69. const imageStyles = ref({
  70. width: 100,
  71. height: 100,
  72. })
  73. const formData = ref({})
  74. const rules = ref({
  75. name: {rules: [{required: true, errorMessage: '姓名不能为空'}]},
  76. gender: {rules: [{required: true, errorMessage: '请选择宠物性别'}]},
  77. age: {rules: [{required: true, errorMessage: '请输入宠物年龄'}]},
  78. feedingAge: {rules: [{required: true, errorMessage: '请输入养宠经验'}]},
  79. petType: {rules: [{required: true, errorMessage: '请输选择宠物类型'}]},
  80. })
  81. const initForm = () => {
  82. let userInfo = getStorage('userInfo')
  83. formData.value = {
  84. id: userInfo.id,
  85. name: userInfo.name,
  86. gender: userInfo.gender > 0 ? userInfo.gender : null,
  87. age: userInfo.age,
  88. feedingAge: userInfo.feedingAge,
  89. petType: userInfo.petType ? userInfo.petType.split(',') : []
  90. }
  91. console.log(formData.value);
  92. fileList.value = userInfo.petImages ? userInfo.petImages : []
  93. }
  94. initForm()
  95. // 下一步
  96. const handleClick = async () => {
  97. valForm.value.validate().then(async () => {
  98. if (fileList.value.length <= 0) {
  99. modal.msgError("请上传宠物照片")
  100. return
  101. }
  102. await saveBaseInfo({
  103. ...formData.value,
  104. petImages: fileList.value,
  105. petType: formData.value.petType.join(',')
  106. })
  107. getUserInfo()
  108. }).catch(err => {
  109. console.log(err);
  110. })
  111. }
  112. const getUserInfo = async () => {
  113. const {data} = await getPersonalInfo()
  114. setStorage('userInfo', data)
  115. tab.navigateTo("/otherPages/workbenchManage/examNotice/index")
  116. }
  117. // 新增图片
  118. const successUpload = async (event) => {
  119. console.log(event);
  120. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  121. let lists = [].concat(event.tempFiles)
  122. let fileListLen = fileList.value.length
  123. lists.map((item) => {
  124. fileList.value.push({
  125. ...item
  126. })
  127. })
  128. for (let i = 0; i < lists.length; i++) {
  129. const result = await uploadFilePromise(lists[i].url)
  130. let item = fileList.value[fileListLen]
  131. fileList.value.splice(fileListLen, 1, Object.assign(item, {
  132. status: 'success',
  133. message: '',
  134. url: result
  135. }))
  136. fileListLen++
  137. }
  138. }
  139. const uploadFilePromise = (url) => {
  140. return new Promise((resolve, reject) => {
  141. uni.uploadFile({
  142. url: 'https://store-test.catmdogd.com/test-api/h5/oss/upload', // 仅为示例,非真实的接口地址
  143. filePath: url,
  144. name: 'file',
  145. formData: {
  146. user: 'test'
  147. },
  148. success: (res) => {
  149. setTimeout(() => {
  150. if (res && res.data) {
  151. let resData = JSON.parse(res.data);
  152. resolve(resData.url);
  153. }
  154. reject("上传失败");
  155. }, 1000)
  156. }
  157. });
  158. })
  159. }
  160. </script>
  161. <style scoped lang="scss">
  162. @import "index";
  163. </style>