submitOrder.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <template>
  2. <view>
  3. <network-error />
  4. <u-notice-bar mode="horizontal"
  5. :list="['虚假填写信息将被列入黑名单,永久不得参加活动']"></u-notice-bar>
  6. <view class="main">
  7. <view class="item u-flex u-row-left u-border-bottom">
  8. <view class="label u-flex label-w">
  9. <view class="icon-bt"></view>
  10. <view>外卖订单编号</view>
  11. </view>
  12. <input v-model="form.ordersn"
  13. placeholder="请输入订单编号" />
  14. </view>
  15. <view class="item u-flex u-row-left u-border-bottom">
  16. <view class="label u-flex label-w">
  17. <view class="icon-bt"></view>
  18. <view>实际支付金额</view>
  19. </view>
  20. <input v-model="form.real_pay_price"
  21. type="digit"
  22. placeholder="请输入实际支付金额" />
  23. </view>
  24. <view class="item u-flex u-row-left u-border-bottom">
  25. <view class="label u-flex label-w">
  26. <view class="icon-bt"></view>
  27. <view>手机号</view>
  28. </view>
  29. <input v-model="form.contact_phone"
  30. type="number"
  31. placeholder="请输入手机号" />
  32. </view>
  33. <view class="item u-flex u-row-left u-border-bottom">
  34. <view class="label u-flex label-w">
  35. <view class="icon-bt"></view>
  36. <view>支付宝账号</view>
  37. </view>
  38. <input v-model="userInfo.alipay_account"
  39. placeholder="请完善支付宝账号"
  40. :disabled="true" />
  41. </view>
  42. <view class="item u-flex u-row-left u-border-bottom">
  43. <view class="label u-flex label-w">
  44. <view class="icon-bt"></view>
  45. <view>真实姓名</view>
  46. </view>
  47. <input v-model="userInfo.alipay_username"
  48. placeholder="请完善支付宝真实姓名"
  49. :disabled="true" />
  50. </view>
  51. <view class="item u-border-bottom">
  52. <view class="label u-flex">
  53. <view class="icon-bt"></view>
  54. <view>订单截图<span class="u-content-color u-font-30 line-42">(含店名与实付金额)</span></view>
  55. </view>
  56. <view class="u-flex u-flex-wrap u-p-t-40">
  57. <block v-for="(item, index) in imgList1"
  58. :key="index">
  59. <view class="u-rela img-item">
  60. <image :src="item.url | imgFilter(4)"
  61. mode="aspectFill"
  62. @click="lookImg(imgList1, index)"></image>
  63. <view class="icon-del-red-wh icon-del-red"
  64. @click="delImg(index, 1)"></view>
  65. </view>
  66. </block>
  67. <view class="upload icon-upload-bg"
  68. @click="uploadImg(1)"></view>
  69. </view>
  70. </view>
  71. <view class="item u-border-bottom">
  72. <view class="label u-flex">
  73. <view class="icon-bt"></view>
  74. <view>订单截图<span class="u-content-color u-font-30 line-42">(含下单时间与订单号)</span></view>
  75. </view>
  76. <view class="u-flex u-flex-wrap u-p-t-40">
  77. <block v-for="(item, index) in imgList2"
  78. :key="index">
  79. <view class="u-rela img-item">
  80. <image :src="item.url | imgFilter(4)"
  81. mode="aspectFill"
  82. @click="lookImg(imgList2, index)"></image>
  83. <view class="icon-del-red-wh icon-del-red"
  84. @click="delImg(index, 2)"></view>
  85. </view>
  86. </block>
  87. <view class="upload icon-upload-bg"
  88. @click="uploadImg(2)"></view>
  89. </view>
  90. </view>
  91. <view class="item u-border-bottom">
  92. <view class="label u-flex">
  93. <view class="icon-bt"></view>
  94. <view>评价截图<span class="u-content-color u-font-30 line-42">(需上传评价截图)</span>
  95. <span class="rule u-m-l-32"
  96. @click="toRule">评价规则</span>
  97. </view>
  98. </view>
  99. <view class="u-flex u-flex-wrap u-p-t-40">
  100. <block v-for="(item, index) in imgList3"
  101. :key="index">
  102. <view class="u-rela img-item">
  103. <image :src="item.url | imgFilter(4)"
  104. mode="aspectFill"
  105. @click="lookImg(imgList3, index)"></image>
  106. <view class="icon-del-red-wh icon-del-red"
  107. @click="delImg(index, 3)"></view>
  108. </view>
  109. </block>
  110. <view class="upload icon-upload-bg"
  111. @click="uploadImg(3)"></view>
  112. </view>
  113. </view>
  114. <view class="item u-border-bottom">
  115. <view class="label u-flex">
  116. <view class="icon-bt"></view>
  117. <view>门店搜索结果页截图<span class="u-content-color u-font-30 line-42">(截图需包含当前门店)</span>
  118. </view>
  119. </view>
  120. <view class="u-flex u-flex-wrap u-p-t-40">
  121. <block v-for="(item, index) in imgList4"
  122. :key="index">
  123. <view class="u-rela img-item">
  124. <image :src="item.url | imgFilter(4)"
  125. mode="aspectFill"
  126. @click="lookImg(imgList4, index)"></image>
  127. <view class="icon-del-red-wh icon-del-red"
  128. @click="delImg(index, 4)"></view>
  129. </view>
  130. </block>
  131. <view class="upload icon-upload-bg"
  132. @click="uploadImg(4)"></view>
  133. </view>
  134. </view>
  135. </view>
  136. <button class="sub u-m-t-12"
  137. :disabled="disabledBtn"
  138. @click="submit">提交</button>
  139. </view>
  140. </template>
  141. <script>
  142. import upload from '@/utils/uploadImg'
  143. import dealImgUrl from '@/utils/dealImgUrl'
  144. import { submitOrderInfo } from '@/api/userApi'
  145. export default {
  146. data () {
  147. return {
  148. activityId: '',
  149. form: {
  150. id: '',
  151. ordersn: '',
  152. contact_phone: '',
  153. real_pay_price: '',
  154. img_items: []
  155. },
  156. imgList1: [], // 订单截图(含店名与实付金额)
  157. imgList2: [], // 订单截图(含下单时间与订单号)
  158. imgList3: [], // 评价截图(需上传评价截图)
  159. imgList4: [] // 搜索结果截图
  160. }
  161. },
  162. computed: {
  163. userInfo () {
  164. console.log(this.$store.state.userInfo)
  165. return this.$store.state.userInfo
  166. },
  167. disabledBtn () {
  168. if (!this.imgList4.length) {
  169. return true
  170. } else if (!this.imgList3.length) {
  171. return true
  172. } else if (!this.imgList2.length) {
  173. return true
  174. } else if (!this.imgList1.length) {
  175. return true
  176. } else if (!this.form.real_pay_price) {
  177. return true
  178. } else if (!this.form.contact_phone) {
  179. return true
  180. } else if (!this.form.ordersn) {
  181. return true
  182. } else {
  183. return false
  184. }
  185. }
  186. },
  187. onLoad (options) {
  188. this.activityId = options.activityId
  189. this.form.id = options.userActivityId
  190. },
  191. methods: {
  192. // 提交订单信息
  193. async submitForm () {
  194. const params = JSON.parse(JSON.stringify(this.form))
  195. params.real_pay_price = params.real_pay_price * 100
  196. const { code, msg } = await submitOrderInfo(params)
  197. if (code === 200) {
  198. uni.navigateTo({
  199. url: `/pagesSub/order/submitOutcome?id=${this.activityId}`
  200. })
  201. } else {
  202. uni.showToast({
  203. title: msg,
  204. icon: 'none'
  205. })
  206. }
  207. },
  208. // 上传图片
  209. async uploadImg (type) {
  210. const imgs = await upload(9)
  211. if (type === 1) {
  212. this.imgList1 = this.imgList1.concat(imgs)
  213. } else if (type === 2) {
  214. this.imgList2 = this.imgList2.concat(imgs)
  215. } else if (type === 3) {
  216. this.imgList3 = this.imgList3.concat(imgs)
  217. } else if (type === 4) {
  218. this.imgList4 = this.imgList4.concat(imgs)
  219. }
  220. },
  221. delImg (index, type) {
  222. if (type === 1) {
  223. this.imgList1.splice(index, 1)
  224. } else if (type === 2) {
  225. this.imgList2.splice(index, 1)
  226. } else if (type === 3) {
  227. this.imgList3.splice(index, 1)
  228. } else if (type === 4) {
  229. this.imgList4.splice(index, 1)
  230. }
  231. },
  232. // 点击提交
  233. submit () {
  234. const is = /^1(3|4|5|6|7|8|9)\d{9}$/.test(this.form.contact_phone)
  235. if (!is) {
  236. uni.showToast({
  237. title: '请输入正确的手机号!',
  238. icon: 'none'
  239. })
  240. return
  241. }
  242. const imgList1 = this.dealImg(this.imgList1, 1)
  243. const imgList2 = this.dealImg(this.imgList2, 2)
  244. const imgList3 = this.dealImg(this.imgList3, 3)
  245. const imgList4 = this.dealImg(this.imgList4, 4)
  246. this.form.img_items = this.form.img_items.concat(imgList1, imgList2, imgList3, imgList4)
  247. this.submitForm()
  248. },
  249. // 处理上传图片
  250. dealImg (arr, type) {
  251. const imgs = []
  252. arr.forEach(item => {
  253. const imgItem = {
  254. url: item.url,
  255. res_type: type
  256. }
  257. imgs.push(imgItem)
  258. })
  259. return imgs
  260. },
  261. toRule () {
  262. uni.navigateTo({
  263. url: `/pagesSub/order/rule?id=${this.activityId}`
  264. })
  265. },
  266. lookImg (list, index) {
  267. const imgs = list.map(item => {
  268. item.url = dealImgUrl(item.url)
  269. return item.url
  270. })
  271. uni.previewImage({
  272. urls: imgs,
  273. current: index
  274. })
  275. }
  276. }
  277. }
  278. </script>
  279. <style lang="scss" scoped>
  280. .main {
  281. background-color: #fff;
  282. }
  283. .icon-bt {
  284. width: 14px;
  285. height: 14px;
  286. margin-right: 4px;
  287. }
  288. .item {
  289. padding: 32px 32px 32px 24px;
  290. }
  291. .label {
  292. font-size: 30px;
  293. color: $u-main-color;
  294. line-height: 42px;
  295. }
  296. .label-w {
  297. width: 200px;
  298. margin-right: 78px;
  299. }
  300. .sub {
  301. display: flex;
  302. justify-content: center;
  303. align-items: center;
  304. width: 100%;
  305. height: 116px;
  306. border-radius: 0;
  307. background-color: $u-type-primary;
  308. color: #fff;
  309. font-size: 36px;
  310. line-height: 50px;
  311. &::after {
  312. border-color: transparent;
  313. }
  314. }
  315. .img-item image,
  316. .upload {
  317. width: 160px;
  318. height: 160px;
  319. border-radius: 4px;
  320. font-size: 0;
  321. }
  322. .upload {
  323. margin-bottom: 16px;
  324. }
  325. .img-item {
  326. margin-right: 14px;
  327. margin-bottom: 10px;
  328. }
  329. .icon-del-red-wh {
  330. position: absolute;
  331. top: 8px;
  332. right: 8px;
  333. width: 28px;
  334. height: 28px;
  335. }
  336. .rule {
  337. color: $u-type-other;
  338. }
  339. button[disabled] {
  340. color: #f8f9fb;
  341. background-color: #f8bca9;
  342. }
  343. </style>
  344. <style scoped>
  345. .u-notice-bar >>> .u-notice-text {
  346. font-size: 26px;
  347. }
  348. </style>