run-errands.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <view class="flex-common-css iPhone-bottom box-border-box p-24">
  3. <Nav title="跑腿代拿" leftIconColor="#333" titleColor="#333"></Nav>
  4. <scroll-view :scroll-y="true" class="scroll-view-css">
  5. <view class="box-border-box mb-20">
  6. <uni-swiper-dot :info="bannerList" mode="dot" :dotsStyles="dotStyle" :current="current">
  7. <swiper class="swiper" @change="change" :autoplay='true' :circular='true' interval="4000">
  8. <swiper-item v-for="(item,i) in bannerList" :key="i">
  9. <image class="swiper-item" :src="item.image" mode="aspectFill">
  10. </image>
  11. </swiper-item>
  12. </swiper>
  13. </uni-swiper-dot>
  14. </view>
  15. <view class="align-items-center p-16 box-border-box b-rad-20 bgc-f mb-20">
  16. <view class="flex-1 flex-direction align-items-center b-rad-20 ptb-15" v-for="(item,index) in serveData"
  17. :key="index" @click="serveClick(item)"
  18. :class="formData.errands_id === item.errands_id?'bgc-BCEAFF':'bgc-f'">
  19. <image class="item-img mb-8 b-rad-16" :src="item.img" mode=""></image>
  20. <view class="text-align-center fs-26">
  21. {{item.name}}
  22. </view>
  23. </view>
  24. </view>
  25. <view class="form-box bgc-f b-rad-16 p-20 box-border-box">
  26. <view class="align-items-flex-start mb-20">
  27. <view class="fs-26 fc-3 mr-20 flex-shrink0 pt-15">
  28. <text class="fc-ff3939">*</text>服务描述 :
  29. </view>
  30. <view class="textarea-box flex-1 bgc-F6F6F6 b-rad-16">
  31. <textarea class="textarea" v-model="formData.serve_desc" maxlength='100' :placeholder="errandsData.desc" />
  32. </view>
  33. </view>
  34. <view class="align-items-flex-start mb-20">
  35. <view class="fs-26 fc-3 mr-20 flex-shrink0 pt-15">
  36. 图片介绍 :
  37. </view>
  38. <view class="up-img-box align-items-center flex-wrap-wrap">
  39. <view class="up-img" v-for="(item, index) in formData.images" :key="index">
  40. <image class="img" :src="item" mode="aspectFill"></image>
  41. <uni-icons @click="deleteImg(index)" class="delete-icons" color="#000" type="clear"
  42. size="20"></uni-icons>
  43. </view>
  44. <view @click="upImg" v-if="formData.images.length<= 5"
  45. class="add-img-box flex-direction flex-justify-center align-items-center bgc-F6F6F6">
  46. <image class="add-img" src="@/static/img/my/sc.png" mode=""></image>
  47. <view class="fs-20 fc-9">
  48. 上传照片
  49. </view>
  50. <view class="fs-20 fc-9">
  51. (最多6张)
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <view class="align-items-flex-start mb-20" v-if="errandsData.errands_id != 2">
  57. <view class="fs-26 fc-3 mr-20 flex-shrink0 pt-15">
  58. <text class="fc-ff3939">*</text>服务地址 :
  59. </view>
  60. <view class="textarea-box flex-1 bgc-F6F6F6 b-rad-16">
  61. <textarea class="textarea" v-model="formData.serve_address" maxlength='100' :placeholder="errandsData.add_str" />
  62. </view>
  63. </view>
  64. </view>
  65. </scroll-view>
  66. </view>
  67. </template>
  68. <script>
  69. import {
  70. errandsBanner,
  71. errandsServe
  72. } from "@/api/errands.js"
  73. import tools from '@/service/tools';
  74. import {
  75. upLoadingFileOss
  76. } from "@/service/upLoadingFile.js"
  77. export default {
  78. components: {},
  79. data() {
  80. return {
  81. bannerList: [],
  82. dotStyle: {
  83. width: 6,
  84. bottom: 6,
  85. backgroundColor: 'rgba(51, 51, 51,0.3)',
  86. border: '1px rgba(0,0,0,0) solid',
  87. color: '#fff',
  88. selectedBackgroundColor: 'rgba(79, 179, 239,0.9)',
  89. selectedBorder: '1px rgba(0,0,0,0) solid'
  90. },
  91. current: 0,
  92. serveData: [], // 类型
  93. errandsData: {}, // 类型对应的数据
  94. formData: {
  95. errands_id: 0,
  96. serve_desc: '',
  97. images: []
  98. }
  99. };
  100. },
  101. onLoad(data) {},
  102. mounted() {
  103. this.getBanner()
  104. this.getErrandsServe()
  105. },
  106. methods: {
  107. deleteImg(index) {
  108. this.formData.images.splice(index, 1)
  109. },
  110. upImg() {
  111. uni.chooseImage({
  112. count: 6,
  113. sizeType: ["compressed", "camera"],
  114. sourceType: ["album", "camera"],
  115. success: (res) => {
  116. res.tempFiles.forEach((file) => {
  117. this.uploadingFile(file);
  118. })
  119. }
  120. })
  121. },
  122. uploadingFile(file) {
  123. upLoadingFileOss(file.path).then((res) => {
  124. if (res) {
  125. this.formData.images.push(res)
  126. } else {
  127. tools.error('图片上传失败')
  128. }
  129. })
  130. },
  131. serveClick(item) {
  132. if (this.formData.errands_id === item.errands_id) {
  133. return
  134. }
  135. this.formData.errands_id = item.errands_id
  136. this.errandsData = item
  137. },
  138. getBanner() {
  139. errandsBanner().then((res) => {
  140. if (res.code === 1) {
  141. this.bannerList = res.data;
  142. }
  143. })
  144. },
  145. getErrandsServe() {
  146. errandsServe().then((res) => {
  147. if (res.code === 1) {
  148. this.serveData = res.data
  149. this.formData.errands_id = this.serveData[0].errands_id
  150. this.errandsData = this.serveData[0]
  151. }
  152. })
  153. },
  154. change(e) {
  155. this.current = e.detail.current
  156. },
  157. },
  158. }
  159. </script>
  160. <style lang="scss" scoped>
  161. .swiper {
  162. width: 702rpx;
  163. height: 280rpx;
  164. border-radius: 20rpx;
  165. .swiper-item {
  166. width: 702rpx;
  167. height: 280rpx;
  168. border-radius: 20rpx;
  169. }
  170. }
  171. .item-img {
  172. width: 60rpx;
  173. height: 60rpx;
  174. }
  175. .up-img {
  176. width: 150rpx;
  177. height: 150rpx;
  178. margin: 0 8rpx 8rpx 0;
  179. position: relative;
  180. .img {
  181. width: 100%;
  182. height: 100%;
  183. border-radius: 10rpx;
  184. }
  185. .delete-icons {
  186. position: absolute;
  187. right: 0;
  188. top: 0;
  189. }
  190. }
  191. .textarea-box {
  192. height: 200rpx;
  193. }
  194. .textarea {
  195. width: 100%;
  196. height: 100%;
  197. padding: 20rpx;
  198. box-sizing: border-box;
  199. }
  200. .add-img-box {
  201. width: 150rpx;
  202. height: 150rpx;
  203. border: 1px dashed #666;
  204. .add-img {
  205. width: 36rpx;
  206. height: 36rpx;
  207. }
  208. }
  209. </style>