index.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <template>
  2. <view class="certification-main">
  3. <Step :step="step" />
  4. <view v-if="data.appStatus === '3'" class="certification-error">
  5. 居家陪伴的证件不齐全,审核失败。居家陪伴的证件不齐全,审核失败。居家陪伴的证件不齐全,审核失败。居家陪伴的证件不齐全,审核失败。</view>
  6. <view class="certification-scroll">
  7. <view>
  8. <view class="certification-content">
  9. <!-- 上传资质 -->
  10. <view v-if="[0, 2, 3].includes(step)">
  11. <view class="flex_c_l certification-title"><text class="text-red"
  12. v-if="viewStatus">*</text>{{ viewStatus ? '请选择' : '' }}服务类目:</view>
  13. <!-- 服务类目 -->
  14. <Category :viewStatus="viewStatus" />
  15. </view>
  16. <!-- 填写信息 -->
  17. <view v-if="[1, 2, 3].includes(step)">
  18. <view class="flex_c_l certification-title"><text class="text-red"
  19. v-if="viewStatus">*</text>{{ viewStatus ? '请填写' : '' }}个人信息:</view>
  20. <!-- 请上传个人形象照 -->
  21. <UserA :viewStatus="viewStatus" />
  22. <!-- 个人信息 -->
  23. <Form :viewStatus="viewStatus" />
  24. <!-- 个人简介 -->
  25. <Synopsis :viewStatus="viewStatus" />
  26. </view>
  27. </view>
  28. </view>
  29. </view>
  30. <view class="certification-footer flex_c_c">
  31. <view class="certification-btn-bols flex_c_c btn-p" @click="returnStep" v-if="step === 1">返回</view>
  32. <view :class="step === 1 ? 'certification-btn flex_c_c btn-p ' : 'btn-w certification-btn flex_c_c'"
  33. @click="goNext" v-if="[0, 1].includes(step)">{{step === 0?'下一步':'提交'}}</view>
  34. <view class="btn-w certification-btn flex_c_c" @click="onSubmit" v-if="[2].includes(step)">重新提交</view>
  35. </view>
  36. </view>
  37. </template>
  38. <script setup>
  39. import { computed, ref, reactive, watch } from 'vue';
  40. import { provide, inject } from 'vue'
  41. import { onLoad } from '@dcloudio/uni-app';
  42. import store from '@/store'
  43. import Step from './Step.vue';
  44. import Category from './Category.vue';
  45. import UserA from './UserA.vue';
  46. import Form from './Form.vue';
  47. import Synopsis from './Synopsis.vue';
  48. const step = ref(0);
  49. // true: 显示1、2步骤 false: 2、3步骤(查看)
  50. const viewStatus = computed(() => {
  51. return ![2, 3].includes(step.value)
  52. })
  53. const data = reactive({
  54. //服务
  55. project: [
  56. // {
  57. // id: '13',
  58. // businessName: '居家陪伴',
  59. // parentId: '1',
  60. // isFiles: true,//上传文件
  61. // },
  62. // {
  63. // id: '14',
  64. // businessName: '出行陪伴',
  65. // parentId: '1',
  66. // isFiles: false,//上传文件
  67. // }
  68. ],
  69. // 是否展示资质
  70. whether: '1',
  71. // 请上传个人形象照
  72. volunteerPicture: null,
  73. // name:'陈陈',//姓名
  74. // sex:'1',//性别
  75. // age:'23',//年龄
  76. // phonenumber:'1696601943',//手机号
  77. // code:'',//验证码
  78. // districtName:'重庆市丰都县',//地区
  79. // address:'阿布阿布阿布',//详细地址
  80. // skillDescribe:'我的个人简介呀',//个人简介
  81. // appStatus:'1', //审批状态 1待审批2已通过3已驳回
  82. name: '',//姓名
  83. sex: '',//性别
  84. age: '',//年龄
  85. phonenumber: '',//手机号
  86. code: '',//验证码
  87. skillDescribe: '',//个人简介
  88. appStatus: '1', //审批状态 1待审批2已通过3已驳回
  89. provinceName: '', // 省
  90. provinceCode: '',
  91. provinceInd: 21,
  92. cityName: '', // 市
  93. cityCode: '',
  94. cityInd: 0,
  95. districtName: '',//地区
  96. districtCode: '',
  97. districtInd: 17,
  98. address: '',//详细地址
  99. });
  100. provide('formData', data);
  101. watch(data, (newVal, oldVal) => {
  102. uni.$u.debounce(storageData, 500)
  103. })
  104. const storageData = () => {
  105. console.log('存储数据', data);
  106. store.dispatch('handlerCertificationInfo', data)
  107. }
  108. //服务必选验证
  109. const projectVerify = async () => {
  110. return new Promise((resolve, reject) => {
  111. if (data.project.length === 0) {
  112. reject('请选择服务')
  113. }
  114. // 资质文件必传校验
  115. const verify_data = data.project.filter(item => item.isFiles);
  116. const verify_files = verify_data.filter(item => item.files && item.files.length > 0);
  117. if (verify_data.length !== verify_files.length) {
  118. reject('请上传相关服务的资质证件!')
  119. }
  120. resolve(true)
  121. })
  122. }
  123. //基本信息验证
  124. const userInfoVerify = async () => {
  125. return new Promise((resolve, reject) => {
  126. if(!data.volunteerPicture) reject('请上传头像');
  127. if(data.name.trim().length === 0) reject('请填写姓名');
  128. if(!data.sex) reject('请选择性别');
  129. if(data.phonenumber.trim().length === 0) reject('请填写手机号');
  130. if(data.code.trim().length === 0) reject('请填写短信验证码');
  131. if(data.districtName.trim().length === 0) reject('请选择地区');
  132. if(data.address.trim().length === 0) reject('请填写详细地址');
  133. if(data.skillDescribe.trim().length === 0) reject('请填写个人简介');
  134. resolve(true)
  135. })
  136. }
  137. const goNext = async () => {
  138. try {
  139. if (step.value === 0) {
  140. const verify = await projectVerify();
  141. if (!verify) return;
  142. }
  143. if (step.value === 1) {
  144. const verify = await userInfoVerify();
  145. verify && onSubmit()
  146. return;
  147. }
  148. step.value = step.value + 1;
  149. } catch (error) {
  150. uni.showToast({
  151. title: error,
  152. icon: 'none'
  153. })
  154. console.log("TCL: goNext -> error", error)
  155. }
  156. }
  157. const returnStep = () => {
  158. step.value = 0;
  159. }
  160. const onSubmit = () => {
  161. console.log('提交', data);
  162. }
  163. const getServeDetails = async () => {
  164. // data.appStatus = '2';
  165. // step.value = 3;
  166. }
  167. //选取服务返回
  168. const activeProjectBack = (options) => {
  169. if (options.serves) {
  170. const serves = JSON.parse(decodeURIComponent(options.serves));
  171. Object.assign(data, { project: serves });
  172. }
  173. }
  174. // 初始化数据
  175. const initData = () => {
  176. try {
  177. const initD = store.state.business.certificationInfo;
  178. if (initD) {
  179. Object.assign(data, initD);
  180. }
  181. } catch (error) {
  182. console.log("TCL: initData -> error", error)
  183. }
  184. }
  185. onLoad((options) => {
  186. console.log("TCL: options", options)
  187. initData();
  188. })
  189. getServeDetails();
  190. defineExpose({ activeProjectBack });
  191. </script>
  192. <style lang="scss" scoped>
  193. @import "./index.scss";
  194. </style>