环卫车小程序前端代码
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.

421 lines
14 KiB

4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
3 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
3 months ago
4 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
3 months ago
4 months ago
3 months ago
3 months ago
3 months ago
3 months ago
4 months ago
3 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
3 months ago
4 months ago
  1. <template>
  2. <view>
  3. <view class="se-w-vw-100 se-h-500">
  4. <u-swiper :radius="0" :list="detail.images" :height="250" :autoplay="false"></u-swiper>
  5. </view>
  6. <view class="se-py-20 se-flex se-bgc-white">
  7. <view class="se-w-vw-90 se-pl-30">
  8. <view class=" se-c-black se-fw-6 se-fs-32">
  9. {{detail.goodsName}}
  10. </view>
  11. <view class="se-display-ib se-c-red se-fs-32 se-br-8 se-px-10 se-py-5">
  12. {{detail.price | getPersonAuthentication}}<text class="se-fs-24"></text><text class="se-fs-24" v-if="detail.categoryoneName=='环卫设备及配件'">/</text>
  13. </view>
  14. </view>
  15. <view class="se-pr-30 se-flex se-flex-v-c">
  16. <text v-if="detail.categoryoneName==`环卫设备及配件`">销售量{{detail.views}}+</text>
  17. <text v-else>浏览量{{detail.views}}+</text>
  18. <!-- <button style="justify-content: center;" class="se-w-140 se-flex se-flex-ai-c se-h-60 se-lh-60 se-fs-22 se-bgc-green se-c-white se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">
  19. <uv-icon name="share" color="#fff"></uv-icon>
  20. <text class="se-fs-20 se-pl-5">分享</text>
  21. </button> -->
  22. </view>
  23. </view>
  24. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ff-cw se-fs-24">
  25. <view class="se-flex se-flex-ai-c">
  26. <text>型号:</text>
  27. <view class="se-tag">
  28. {{detail.model}}
  29. </view>
  30. </view>
  31. <view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.categoryoneName!='环卫设备及配件'">
  32. <text>品牌名:</text>
  33. <view class="se-tag">
  34. {{detail.brand}}
  35. </view>
  36. </view>
  37. <view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.categoryoneName!='环卫设备及配件'">
  38. <text>公里数:</text>
  39. <view class="se-tag">
  40. {{detail.mileage}}公里
  41. </view>
  42. </view>
  43. <view class="se-flex se-flex-ai-c se-pt-10" v-if="detail.categoryoneName!='环卫设备及配件'">
  44. <text>时间:</text>
  45. <view class="se-tag">
  46. {{detail.goodsTime}}
  47. </view>
  48. </view>
  49. </view>
  50. <template v-if="detail.imageFronts && detail.imageFronts.length>0 && detail.categoryoneName!='环卫设备及配件'">
  51. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
  52. <text>车辆照片:</text>
  53. </view>
  54. <view class="se-flex se-m-20" style="flex-wrap: wrap;">
  55. <image v-for="(items,indexs) in detail.imageFronts" :key="indexs" @click="previewImage(detail.imageFronts,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
  56. </view>
  57. </template>
  58. <template v-if="detail.imageBacks && detail.imageBacks.length>0 && detail.categoryoneName!='环卫设备及配件'">
  59. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
  60. <text>车辆照片:</text>
  61. </view>
  62. <view class="se-flex se-m-20" style="flex-wrap: wrap;">
  63. <image v-for="(items,indexs) in detail.imageBacks" :key="indexs" @click="previewImage(detail.imageBacks,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
  64. </view>
  65. </template>
  66. <template v-if="detail.imageLefts && detail.imageLefts.length>0 && detail.categoryoneName!='环卫设备及配件'">
  67. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
  68. <text>车辆照片:</text>
  69. </view>
  70. <view class="se-flex se-m-20" style="flex-wrap: wrap;">
  71. <image v-for="(items,indexs) in detail.imageLefts" :key="indexs" @click="previewImage(detail.imageLefts,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
  72. </view>
  73. </template>
  74. <template v-if="detail.imageRights && detail.imageRights.length>0 && detail.categoryoneName!='环卫设备及配件'">
  75. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
  76. <text>车辆照片:</text>
  77. </view>
  78. <view class="se-flex se-m-20" style="flex-wrap: wrap;">
  79. <image v-for="(items,indexs) in detail.imageRights" :key="indexs" @click="previewImage(detail.imageRights,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
  80. </view>
  81. </template>
  82. <template v-if="detail.imageCabs && detail.imageCabs.length>0 && detail.categoryoneName!='环卫设备及配件'">
  83. <view class="se-mt-20 se-bgc-white se-px-20 se-py-10 se-ta-l se-c-black se-py-20 se-flex se-flex-ai-c se-fs-24">
  84. <text>车辆照片驾驶室:</text>
  85. </view>
  86. <view class="se-flex se-m-20" style="flex-wrap: wrap;">
  87. <image v-for="(items,indexs) in detail.imageCabs" :key="indexs" @click="previewImage(detail.imageCabs,items)" class="se-w-220 se-h-180 se-bgc-f5 se-br-5 se-mr-10 se-mb-10" :src="items" mode=""></image>
  88. </view>
  89. </template>
  90. <view class="se-pt-20">
  91. <view class="se-p-20 se-c-black se-fs-28">
  92. 产品参数
  93. </view>
  94. <view class="se-p-20 se-pb-200">
  95. <u-parse :content="detail.detail"></u-parse>
  96. </view>
  97. </view>
  98. <view class="se-pos-fixed se-bgc-white se-b-ts se-w-vw-100 se-h-160" style="bottom: 0px;left: 0rpx;">
  99. <view class=" se-flex se-flex-h-sb se-py-20">
  100. <button style="justify-content: center;" class="default-btn se-w-140 se-flex se-flex-v-c se-fs-22 se-c-black se-py-0 se-br-30 se-px-20 se-m-0" open-type="share">
  101. <u-icon name="share" color="#000"></u-icon>
  102. <text class="se-fs-20 se-pl-5 se-c-black">分享</text>
  103. </button>
  104. <view class="se-flex se-flex-ai-c se-px-40 se-py-20">
  105. <view @click="onCustomerService()" class="se-flex se-flex-ai-c se-px-60 se-h-60 se-c-green se-fs-24 se-c-black se-b" style="border-radius: 30rpx 0 0 30rpx;">
  106. 联系电话
  107. </view>
  108. <view @click="open()" class="se-flex se-flex-ai-c se-px-60 se-h-60 se-bgc-green se-fs-24 se-c-white se-b" style="border-radius: 0 30rpx 30rpx 0;">
  109. 预约看车
  110. </view>
  111. </view>
  112. </view>
  113. </view>
  114. <u-popup :show="show" @close="close" @open="open">
  115. <u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
  116. <view class="se-bgc-white se-pt-40 se-pb-80" style="border-radius: 10px 10px 0 0;">
  117. <view class="se-px-40 se-py-20 se-c-black se-fs-30 se-fw-6">
  118. 预约租车
  119. </view>
  120. <view class="se-px-20 se-pb-20 se-mx-20 se-bgc-white se-br-20">
  121. <u-form-item class="se-py-20" label="联系姓名" prop="name" borderBottom>
  122. <u--input v-model="form.name" border="none" placeholder="请输入联系姓名"></u--input>
  123. </u-form-item>
  124. <u-form-item class="se-py-20" label="联系电话" prop="mobile" borderBottom>
  125. <u--input v-model="form.mobile" type="number" border="none" placeholder="请输入联系电话"></u--input>
  126. </u-form-item>
  127. <u-form-item label="所在地区" prop="area" @click="handleAreaChange()">
  128. <u--input readonly v-model="form.address" placeholder="请选择地址" border="bottom"></u--input>
  129. <u-icon slot="right" name="arrow-right"></u-icon>
  130. </u-form-item>
  131. <!-- <u-form-item class="se-py-20" label="所在地区" prop="address" borderBottom>
  132. <u--input v-model="form.address" type="text" border="none" placeholder="请输入所在地区"></u--input>
  133. </u-form-item> -->
  134. <u-form-item>
  135. <view @click="submit"
  136. class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-green">
  137. <text>确认</text>
  138. </view>
  139. </u-form-item>
  140. </view>
  141. </view>
  142. </u--form>
  143. </u-popup>
  144. </view>
  145. </template>
  146. <script>
  147. import { queryGoodsById,addOrder } from "@/common/api.js"
  148. import QQMapWX from "@/util/qqmap-wx-jssdk.min.js"
  149. export default{
  150. data(){
  151. return{
  152. show:false,
  153. list:[
  154. // 'https://cdn.uviewui.com/uview/swiper/swiper1.png',
  155. // 'https://cdn.uviewui.com/uview/swiper/swiper2.png',
  156. // 'https://cdn.uviewui.com/uview/swiper/swiper3.png',
  157. ],
  158. form:{
  159. name:"",
  160. mobile:"",
  161. address: '',
  162. latitude:"",
  163. longitude:"",
  164. },
  165. rules:{
  166. name: [
  167. {
  168. required: true,
  169. message: '请输入联系姓名',
  170. trigger: ['blur', 'change']
  171. }
  172. ],
  173. mobile:[
  174. {
  175. required: true,
  176. message: '请输入联系电话',
  177. trigger: ['blur', 'change']
  178. }
  179. ],
  180. address: [
  181. {
  182. required: true,
  183. message: '请选择地址',
  184. trigger: ['blur', 'change']
  185. }
  186. ]
  187. },
  188. id:null,
  189. detail:{}
  190. }
  191. },
  192. onLoad(options) {
  193. //#ifdef MP-WEIXIN
  194. wx.showShareMenu({
  195. withShareTicket: true,
  196. menus: ['shareAppMessage', 'shareTimeline']
  197. });
  198. //#endif
  199. this.id = options.goodsId
  200. if(options.shareId){
  201. uni.setStorageSync('shareId',options.shareId)
  202. }
  203. this.onDetail()
  204. },
  205. onShareTimeline(){
  206. let share = {
  207. title:this.detail.goodsName,
  208. path:"/pages_subpack/detail/index?id="+this.id+"&shareId="+uni.getStorageSync('userInfo').id,
  209. imageUrl:this.list[0].url,
  210. success:(res) => {
  211. console.info(res)
  212. },
  213. fail:(err)=>{
  214. console.info(err)
  215. }
  216. }
  217. console.info(share)
  218. return share
  219. },
  220. onShareAppMessage(options) {
  221. console.info(options)
  222. let share = {
  223. title:this.detail.goodsName,
  224. path:"/pages_subpack/detail/index?goodsId="+this.id+"&shareId="+uni.getStorageSync('userInfo').id,
  225. imageUrl:this.list[0].url,
  226. success:(res) => {
  227. console.info(res)
  228. },
  229. fail:(err)=>{
  230. console.info(err)
  231. }
  232. }
  233. console.info(share)
  234. return share
  235. },
  236. filters:{
  237. getPersonAuthentication(price){
  238. let companyAuthenticationStatus = uni.getStorageSync("companyAuthenticationStatus")
  239. if(companyAuthenticationStatus==1){
  240. return price
  241. }
  242. let personAuthenticationStatus =uni.getStorageSync("personAuthenticationStatus")
  243. if (personAuthenticationStatus != 1){
  244. return '***';
  245. }
  246. return price
  247. }
  248. },
  249. methods:{
  250. previewImage(urls, current) {
  251. uni.previewImage({
  252. urls: urls, // 需要预览的图片 HTTP 链接列表
  253. current: current // 当前显示图片的链接,不填则默认为 urls 的第一张
  254. });
  255. },
  256. onDetail(){
  257. let that = this
  258. queryGoodsById({goodsId:that.id}).then(response=>{
  259. console.info("queryGoodsById",response)
  260. let items = response.result
  261. if(items.image){
  262. items.image.split(',').forEach(item=>{
  263. that.list.push({
  264. url: item,
  265. type: 'image'
  266. })
  267. })
  268. }
  269. if(items.image){
  270. items.images = items.image.split(',')
  271. }else{
  272. items.images = []
  273. }
  274. if(items.imageBack){
  275. items.imageBacks = items.imageBack.split(',')
  276. }else{
  277. items.imageBacks = []
  278. }
  279. if(items.imageCab){
  280. items.imageCabs = items.imageCab.split(',')
  281. }else{
  282. items.imageCabs = []
  283. }
  284. if(items.imageFront){
  285. items.imageFronts = items.imageFront.split(',')
  286. }else{
  287. items.imageFronts = []
  288. }
  289. if(items.imageLeft){
  290. items.imageLefts = items.imageLeft.split(',')
  291. }else{
  292. items.imageLefts = []
  293. }
  294. if(items.imageRight){
  295. items.imageRights = items.imageRight.split(',')
  296. }else{
  297. items.imageRights = []
  298. }
  299. that.detail = items
  300. }).catch(error=>{
  301. })
  302. },
  303. submit() {
  304. this.$refs.uForm.validate().then(res => {
  305. // uni.$u.toast('校验通过')
  306. this.onAddOrder()
  307. }).catch(errors => {
  308. })
  309. },
  310. onAddOrder(){
  311. let that = this
  312. let params ={
  313. goodsId:that.detail.id,
  314. area:that.form.address,
  315. name:that.form.name,
  316. phone:that.form.mobile,
  317. typeId:that.detail.cartypeId
  318. }
  319. addOrder(params).then(response=>{
  320. uni.$u.toast(response.message)
  321. that.close()
  322. uni.navigateTo({
  323. url:"/pages_subpack/success/index"
  324. })
  325. }).catch(error=>{
  326. })
  327. },
  328. onCustomerService(){
  329. let that = this
  330. // let obj = that.$utils.getkeyContent('phone')
  331. if (uni.canIUse('makePhoneCall')) {
  332. uni.makePhoneCall({
  333. phoneNumber:String(that.detail.phone),
  334. success: function () {
  335. console.log('拨打电话成功');
  336. },
  337. fail: function () {
  338. console.log('拨打电话失败');
  339. }
  340. });
  341. } else {
  342. console.log('你的设备不支持拨打电话功能');
  343. }
  344. },
  345. open() {
  346. this.show = true
  347. },
  348. close() {
  349. this.show = false
  350. },
  351. handleAreaChange(){
  352. const that = this;
  353. wx.chooseLocation({
  354. // type: 'wgs84',
  355. success: function (res) {
  356. const qqmapsdk = new QQMapWX({
  357. key: 'TT7BZ-Z3LW4-KOAUB-KWHOA-SBJJ6-Y5B6R' // 必填
  358. });
  359. uni.showLoading({
  360. title:"获取中...."
  361. })
  362. qqmapsdk.reverseGeocoder({
  363. location: {
  364. latitude: res.latitude,
  365. longitude: res.longitude
  366. },
  367. success: function(response) {
  368. console.log('逆地理编码结果:', response);
  369. uni.hideLoading()
  370. that.form.longitude = response.result.location.lng
  371. that.form.latitude = response.result.location.lat
  372. that.form.address = response.result.address
  373. },
  374. fail: function(error) {
  375. uni.hideLoading()
  376. console.error('逆地理编码失败:', error);
  377. }
  378. });
  379. }
  380. })
  381. // this.$refs.citySelectRef.open()
  382. },
  383. }
  384. }
  385. </script>
  386. <style>
  387. page{
  388. background-color: #f5f5f5;
  389. }
  390. </style>
  391. <style lang="scss" scoped>
  392. .default-btn{
  393. background-color: transparent;
  394. }
  395. .default-btn::after{
  396. content: "";
  397. border: none;
  398. }
  399. .se-tag{
  400. padding: 5rpx 20rpx;
  401. background: #fff2df;
  402. border-radius: 4rpx;
  403. border: 2rpx solid rgba(0,0,0,0.00);
  404. font-family: PingFang SC, PingFang SC-Bold;
  405. font-weight: 700;
  406. text-align: center;
  407. color: #fab143;
  408. margin-left: 10rpx;
  409. font-size: 22rpx;
  410. }
  411. .se-tag:first-child{
  412. margin-left: 0rpx;
  413. }
  414. </style>