qualifications_logic.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { submitAudit, uploadFile } from '@/api/fulfiller/app'
  2. export default {
  3. data() {
  4. return {
  5. serviceTypes: [], // 从上一页传递过来的服务类型列表
  6. qualifications: {}, // 存储本地预览路径 { '宠物接送': ['path1', ...], ... }
  7. qualOssIds: {}, // 存储OSS ID { '宠物接送': ['id1', ...], ... }
  8. }
  9. },
  10. onLoad(options) {
  11. if (options.services) {
  12. try {
  13. this.serviceTypes = JSON.parse(decodeURIComponent(options.services));
  14. // 初始化 qualifications 对象(以服务名称为key)
  15. this.serviceTypes.forEach(item => {
  16. this.qualifications[item.name] = this.qualifications[item.name] || [];
  17. this.qualOssIds[item.name] = this.qualOssIds[item.name] || [];
  18. });
  19. } catch (e) {
  20. console.error('Parse services failed', e);
  21. }
  22. }
  23. // 从缓存恢复
  24. this.restoreQualData();
  25. },
  26. methods: {
  27. saveQualData() {
  28. try {
  29. uni.setStorageSync('recruit_qual_data', JSON.stringify({
  30. qualifications: this.qualifications,
  31. qualOssIds: this.qualOssIds
  32. }));
  33. } catch (e) {
  34. console.error('保存资质数据失败', e);
  35. }
  36. },
  37. restoreQualData() {
  38. try {
  39. const saved = uni.getStorageSync('recruit_qual_data');
  40. if (saved) {
  41. const d = JSON.parse(saved);
  42. this.qualifications = d.qualifications || {};
  43. this.qualOssIds = d.qualOssIds || {};
  44. this.$forceUpdate();
  45. }
  46. } catch (e) {
  47. console.error('恢复资质数据失败', e);
  48. }
  49. },
  50. chooseImage(serviceName) {
  51. uni.chooseImage({
  52. count: 9,
  53. sizeType: ['compressed'],
  54. sourceType: ['album', 'camera'],
  55. success: async (res) => {
  56. if (!this.qualifications[serviceName]) {
  57. this.qualifications[serviceName] = [];
  58. this.qualOssIds[serviceName] = [];
  59. }
  60. // 逐个上传到OSS
  61. for (const tempPath of res.tempFilePaths) {
  62. this.qualifications[serviceName].push(tempPath);
  63. this.$forceUpdate();
  64. try {
  65. const uploadRes = await uploadFile(tempPath);
  66. this.qualOssIds[serviceName].push(uploadRes.data.ossId);
  67. this.saveQualData();
  68. } catch (err) {
  69. console.error('上传资质图片失败:', err);
  70. }
  71. }
  72. }
  73. });
  74. },
  75. deleteImage(serviceName, index) {
  76. this.qualifications[serviceName].splice(index, 1);
  77. if (this.qualOssIds[serviceName]) {
  78. this.qualOssIds[serviceName].splice(index, 1);
  79. }
  80. this.saveQualData();
  81. this.$forceUpdate();
  82. },
  83. goBackToForm() {
  84. // 尝试返回填写页
  85. const pages = getCurrentPages();
  86. if (pages.length > 2) {
  87. uni.navigateBack({
  88. delta: 2
  89. });
  90. } else {
  91. // 如果页面栈不够(比如直接进入该页),则重定向
  92. uni.reLaunch({
  93. url: '/pages/recruit/form'
  94. });
  95. }
  96. },
  97. async submit() {
  98. // 收集前面页面暂存在本地的表单数据
  99. let recruitData = {}
  100. try {
  101. const stored = uni.getStorageSync('recruit_form_data')
  102. if (stored) {
  103. recruitData = JSON.parse(stored)
  104. }
  105. } catch (e) {
  106. console.error('读取招募表单数据失败', e)
  107. }
  108. // 收集所有资质图片OSS ID
  109. const allQualOssIds = [];
  110. Object.values(this.qualOssIds).forEach(ids => {
  111. allQualOssIds.push(...ids);
  112. });
  113. // 组装提交数据(匹配 FlfAuditBo 字段)
  114. const auditData = {
  115. name: recruitData.name || '',
  116. phone: recruitData.mobile || '',
  117. password: recruitData.password || '',
  118. gender: recruitData.gender === 1 ? '0' : '1',
  119. birthday: recruitData.birthday || '',
  120. serviceTypes: (recruitData.serviceType || []).join(','), // 逗号分隔的服务类型ID
  121. city: recruitData.areaPath || '',
  122. stationId: recruitData.stationId || null,
  123. realName: recruitData.realName || '',
  124. idCard: recruitData.idNumber || '',
  125. idValidDate: recruitData.expiryDate || '',
  126. idCardFront: recruitData.idCardFrontOssId || null,
  127. idCardBack: recruitData.idCardBackOssId || null,
  128. qualifications: allQualOssIds.join(',') // 逗号分隔的资质图片OSS ID
  129. }
  130. uni.showLoading({ title: '提交中...' })
  131. try {
  132. await submitAudit(auditData)
  133. uni.hideLoading()
  134. const s = encodeURIComponent(recruitData.station || '');
  135. const n = encodeURIComponent(recruitData.name || '');
  136. const p = recruitData.mobile || '';
  137. // 提交完成后清除缓存(因为数据已经传给下一步了)
  138. uni.removeStorageSync('recruit_form_data');
  139. uni.removeStorageSync('recruit_auth_data');
  140. uni.removeStorageSync('recruit_qual_data');
  141. uni.reLaunch({
  142. url: `/pages/recruit/success?station=${s}&name=${n}&phone=${p}`
  143. })
  144. } catch (err) {
  145. uni.hideLoading()
  146. console.error('提交申请失败:', err)
  147. }
  148. }
  149. }
  150. }