hanfei 1 ماه پیش
والد
کامیت
ad2e0ea3ac
100فایلهای تغییر یافته به همراه9633 افزوده شده و 37 حذف شده
  1. 5 0
      .idea/.gitignore
  2. 16 0
      XCX-Shop/.hbuilderx/launch.json
  3. 20 2
      XCX-Shop/App.vue
  4. 194 0
      XCX-Shop/common/api.js
  5. 253 0
      XCX-Shop/common/common.js
  6. 8 0
      XCX-Shop/common/config.js
  7. 67 0
      XCX-Shop/common/db.js
  8. 24 0
      XCX-Shop/common/dianji.js
  9. 28 0
      XCX-Shop/components/gaoyia-parse/components/wxParseAudio.vue
  10. 94 0
      XCX-Shop/components/gaoyia-parse/components/wxParseImg.vue
  11. 51 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTable.vue
  12. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate0.vue
  13. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate1.vue
  14. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate10.vue
  15. 82 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate11.vue
  16. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate2.vue
  17. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate3.vue
  18. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate4.vue
  19. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate5.vue
  20. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate6.vue
  21. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate7.vue
  22. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate8.vue
  23. 88 0
      XCX-Shop/components/gaoyia-parse/components/wxParseTemplate9.vue
  24. 15 0
      XCX-Shop/components/gaoyia-parse/components/wxParseVideo.vue
  25. 261 0
      XCX-Shop/components/gaoyia-parse/libs/html2json.js
  26. 156 0
      XCX-Shop/components/gaoyia-parse/libs/htmlparser.js
  27. 195 0
      XCX-Shop/components/gaoyia-parse/libs/wxDiscode.js
  28. 258 0
      XCX-Shop/components/gaoyia-parse/parse.css
  29. 228 0
      XCX-Shop/components/gaoyia-parse/parse.vue
  30. 232 0
      XCX-Shop/components/u-parse/u-parse.css
  31. 22 0
      XCX-Shop/main.js
  32. 10 3
      XCX-Shop/manifest.json
  33. 218 2
      XCX-Shop/pages.json
  34. 99 0
      XCX-Shop/pages/index/active.vue
  35. 327 0
      XCX-Shop/pages/index/basePrice.vue
  36. 533 0
      XCX-Shop/pages/index/buyCar.vue
  37. 217 0
      XCX-Shop/pages/index/buyUsedCar.vue
  38. 160 30
      XCX-Shop/pages/index/index.vue
  39. 131 0
      XCX-Shop/pages/index/newCarDetial.vue
  40. 214 0
      XCX-Shop/pages/index/newCarDetialInfo.vue
  41. 197 0
      XCX-Shop/pages/index/oldCarDetial.vue
  42. 322 0
      XCX-Shop/pages/index/reservationCar.vue
  43. 304 0
      XCX-Shop/pages/index/screen.vue
  44. 268 0
      XCX-Shop/pages/index/sellCar.vue
  45. 105 0
      XCX-Shop/pages/index/storeList.vue
  46. 110 0
      XCX-Shop/pages/login/login.vue
  47. 339 0
      XCX-Shop/pages/serve/detial.vue
  48. 103 0
      XCX-Shop/pages/serve/index.vue
  49. 148 0
      XCX-Shop/pages/shopStore/Address.vue
  50. 268 0
      XCX-Shop/pages/shopStore/determineOrder.vue
  51. 266 0
      XCX-Shop/pages/shopStore/detial.vue
  52. 166 0
      XCX-Shop/pages/shopStore/index.vue
  53. 186 0
      XCX-Shop/pages/shopStore/saveAddress.vue
  54. 135 0
      XCX-Shop/pages/userInfo/TestDrive.vue
  55. 136 0
      XCX-Shop/pages/userInfo/Vehicle.vue
  56. 203 0
      XCX-Shop/pages/userInfo/baoxian.vue
  57. 245 0
      XCX-Shop/pages/userInfo/bindCar.vue
  58. 178 0
      XCX-Shop/pages/userInfo/bindlog.vue
  59. 343 0
      XCX-Shop/pages/userInfo/index.vue
  60. 136 0
      XCX-Shop/pages/userInfo/maintenance.vue
  61. 119 0
      XCX-Shop/pages/userInfo/maintenanceList.vue
  62. 135 0
      XCX-Shop/pages/userInfo/orderList.vue
  63. 135 0
      XCX-Shop/pages/userInfo/replacementlog.vue
  64. BIN
      XCX-Shop/static/Info.png
  65. BIN
      XCX-Shop/static/baoxian.png
  66. BIN
      XCX-Shop/static/bianji.png
  67. BIN
      XCX-Shop/static/biaoqian.png
  68. BIN
      XCX-Shop/static/bindCar.png
  69. BIN
      XCX-Shop/static/buyCar.png
  70. BIN
      XCX-Shop/static/car.png
  71. BIN
      XCX-Shop/static/chahao.png
  72. BIN
      XCX-Shop/static/daohang.png
  73. BIN
      XCX-Shop/static/dianhua.png
  74. BIN
      XCX-Shop/static/dingwei.png
  75. BIN
      XCX-Shop/static/duihao.png
  76. BIN
      XCX-Shop/static/heard.png
  77. BIN
      XCX-Shop/static/latiao.png
  78. BIN
      XCX-Shop/static/liucheng.png
  79. BIN
      XCX-Shop/static/logo.jpg
  80. BIN
      XCX-Shop/static/logo.png
  81. BIN
      XCX-Shop/static/orderlist.png
  82. BIN
      XCX-Shop/static/redcar.png
  83. BIN
      XCX-Shop/static/screen.png
  84. BIN
      XCX-Shop/static/search.png
  85. BIN
      XCX-Shop/static/selectCar.png
  86. BIN
      XCX-Shop/static/selectInfo.png
  87. BIN
      XCX-Shop/static/selectServe.png
  88. BIN
      XCX-Shop/static/selectShop.png
  89. BIN
      XCX-Shop/static/sellCar.png
  90. BIN
      XCX-Shop/static/serve.png
  91. BIN
      XCX-Shop/static/shanchu.png
  92. BIN
      XCX-Shop/static/shangjiantou.png
  93. BIN
      XCX-Shop/static/shop.png
  94. BIN
      XCX-Shop/static/userBaoyang.png
  95. BIN
      XCX-Shop/static/userCar.png
  96. BIN
      XCX-Shop/static/userOrder.png
  97. BIN
      XCX-Shop/static/userYuyue.png
  98. BIN
      XCX-Shop/static/whiteCar.png
  99. BIN
      XCX-Shop/static/wxchat.png
  100. BIN
      XCX-Shop/static/xiajiantou.png

+ 5 - 0
.idea/.gitignore

@@ -0,0 +1,5 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/

+ 16 - 0
XCX-Shop/.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 20 - 2
XCX-Shop/App.vue

@@ -2,16 +2,34 @@
 	export default {
 		onLaunch: function() {
 			console.log('App Launch')
+			this.overShare()
 		},
 		onShow: function() {
 			console.log('App Show')
 		},
 		onHide: function() {
 			console.log('App Hide')
+		},
+
+		methods: {
+			overShare() {
+				uni.onAppRoute((res) => {
+					let pages = getCurrentPages()
+					let view = pages[pages.length - 1]
+					if (view) {
+						uni.showShareMenu({
+							menus: ['shareAppMessage', 'shareTimeline'], //设置分享好友功能 可加上shareTimeline分享到朋友圈
+							success(res) {},
+							fail(e) {}
+						})
+					}
+				})
+			},
 		}
 	}
 </script>
 
-<style>
+<style lang="scss">
+	@import "@/uview-ui/index.scss";
 	/*每个页面公共css */
-</style>
+</style>

+ 194 - 0
XCX-Shop/common/api.js

@@ -0,0 +1,194 @@
+//引入配置文件
+import config from './config.js'
+import * as comon from './common.js' //引入common
+import * as db from './db.js'
+//需要token验证接口
+let retryRequests=[];
+const send = (url,method,data,callback, complete) => {
+	let token = db.get("token");
+	let header={}
+	if(token){
+		 header={
+			'Accept': 'application/json',
+			'Content-Type': 'application/json',
+			'Authorization':db.get('token')
+		}
+	}else{
+		 header={
+			'Accept': 'application/json',
+			'Content-Type': 'application/json',
+		}
+	}
+	uni.request({
+		url:config.apiBaseUrl+url,
+		data:data,
+		header: header,
+		method: method,
+		success: (response) => {
+			if (response.data.code === 40000) {
+				uni.showToast({
+					icon: 'loading',
+					title: response.data.msg ? response.data.msg : "请登录!",
+					success: () => {
+						setTimeout(() => {
+							uni.redirectTo({
+								url: '/pages/my/login'
+							})
+						}, 1500)
+					}
+				});
+				return false;
+			}
+			const result = response.data
+			callback(result);
+			
+		},
+		complete: (response) => {
+			setTimeout(function() {
+				uni.hideLoading();
+			}, 1000)
+			complete ? complete() : "";
+		},
+		fail: (error) => {
+			console.log('2222222',error)
+			uni.showLoading({
+				title: '网络开小差了'
+			});
+			setTimeout(function() {
+				uni.hideLoading();
+			}, 1000)
+			if (error && error.response) {
+				showError(error.response);
+			} else {}
+		},
+	});
+}
+
+ const showError = error => {
+	let errorMsg = ''
+	switch (error.status) {
+		case 400:
+			errorMsg = '请求参数错误'
+			break
+		case 401:
+			errorMsg = '未授权,请登录'
+			break
+		case 403:
+			errorMsg = '跨域拒绝访问'
+			break
+		case 404:
+			errorMsg = `请求地址出错: ${error.config.url}`
+			break
+		case 408:
+			errorMsg = '请求超时'
+			break
+		case 500:
+			errorMsg = '服务器内部错误'
+			break
+		case 501:
+			errorMsg = '服务未实现'
+			break
+		case 502:
+			errorMsg = '网关错误'
+			break
+		case 503:
+			errorMsg = '服务不可用'
+			break
+		case 504:
+			errorMsg = '网关超时'
+			break
+		case 505:
+			errorMsg = 'HTTP版本不受支持'
+			break
+		default:
+			errorMsg = error.msg
+			break
+	}
+	uni.showToast({
+		title: errorMsg,
+		icon: 'none',
+		duration: 1000,
+		complete: function() {
+			setTimeout(function() {
+				uni.hideToast();
+			}, 1000);
+		}
+	});
+}
+
+// 登录
+export const loginApi=(data,callback)=>send('/wechat/code2Session/',"POST",data,callback)
+// 绑定
+export const loginBind=(data,callback)=>send('/wechat/wxbind/','POST',data,callback)
+// 轮播图
+export const getSwiper=(callback)=>send('/wechat/activity/list/','GET','',callback)
+// 轮播图
+export const getNewCar=(is_hot,CarName,callback)=>send(`/wechat/vehicle/list/?is_hot=${is_hot}&name=${CarName}`,'GET','',callback)
+// 买车详情 
+export const getBuyCar=(series_id,callback)=>send(`/wechat/vehicle/models/?series_id=${series_id}`,'GET','',callback)
+//买车详情列表
+export const getBuyCarDetial=(id,callback)=>send(`/wechat/vehicle/model/detail/?id=${id}`,'GET','',callback)
+// 二手车 
+export const getUsedCarList=(name,brand,gearbox,color,displacement,emission,seat_count,oil_type,price_range,mileage__range,years_range,callback)=>send(`/wechat/usedvehicle/list/?name=${name}&brand=${brand}&gearbox=${gearbox}&color=${color}&displacement=${displacement}&emission=${emission}&seat_count=${seat_count}&oil_type=${oil_type}&price_range=${price_range}&mileage__range=${mileage__range}&years_range=${years_range}`,'GET','',callback)
+// 二手车详情
+export const getUsedCarDetial=(id,callback)=>send(`/wechat/usedvehicle/detail/?id=${id}`,'GET','',callback)
+// 门店
+export const getStoreList=(name,callback)=>send(`/wechat/store/list/?name=${name}`,'GET','',callback)
+// 商品列表
+export const getProductList=(name,id,callback)=>send(`/wechat/product/list/?name=${name}&category=${id}`,'GET','',callback)
+// 商品类别
+export const getProductType=(callback)=>send(`/wechat/product/types/`,'GET','',callback) 
+// 商品详情
+export const getProductDetial=(id,callback)=>send(`/wechat/product/detail/?id=${id}`,'GET','',callback)
+// 搜索类型
+export const getSearchType=(callback)=>send(`/wechat/usedvehicle/options/`,'GET','',callback)
+// 询问底价
+export const postAskPrice=(data,callback)=>send(`/wechat/customer/inquiry/`,'POST',data,callback)
+// 添加地址
+export const postAddress=(data,callback)=>send(`/wechat/customer/address/`,'POST',data,callback)
+// 获取地址列表
+export const getAddress=(callback)=>send(`/wechat/customer/address/`,'GET','',callback)
+// 修改地址
+export const postEdimtAddress=(id,data,callback)=>send(`/wechat/customer/address/${id}/addr_update/`,'POST',data,callback)
+// 删除地址
+export const getdeleteAddress=(id,callback)=>send(`/wechat/customer/address/${id}/addr_destroy/`,'GET','',callback)
+// 修改默认选项
+export const getRadio=(id,status,callback)=>send(`/wechat/customer/address/${id}/set_default/?status=${status}`,'GET','',callback)
+// 卖车
+export const postUserdCar=(data,callback)=>send(`/wechat/customer/usedvehicle_estimate/`,'POST', data,callback)
+// 意向门店列表
+export const getBrands=(callback)=>send(`/wechat/customer/usedvehicle/brands/`,'GET','',callback)
+// 预约试驾
+export const postDriveReserve=(data,callback)=>send(`/wechat/customer/drive_reserve/`,'POST',data,callback)
+// 服务类型
+export const getServeType=(callback)=>send(`/wechat/customer/maint_reserve/options/`,'GET','',callback)
+// 预约服务
+export const postreserve=(data,callback)=>send(`/wechat/customer/maint_reserve/`,'POST',data,callback)
+// 下单页面
+export const postshopdetial=(id,callback)=>send(`/wechat/customer/plan_product_order/?id=${id}`,'GET','',callback)
+// 下单
+export const postPlaceOrder=(data,callback)=>send(`/wechat/customer/product_order/add/`,'POST',data,callback)
+// 上传头像
+export const postupUserInfo=(data,callback)=>send(`/wechat/setUserInfo/`,'POST',data,callback)
+// 获取头像信息
+export const getUserInfo=(callback)=>send(`/wechat/info/`,'GET','',callback)
+// 车辆绑定
+export const postBindCar=(data,callback)=>send(`/wechat/customer/vehicle/`,'POST',data,callback)
+// 询价单列表
+export const getInquiry=(callback)=>send(`/wechat/customer/inquiry/`,'GET','',callback)
+// 预约试驾列表
+export const getdriveReserve=(callback)=>send(`/wechat/customer/drive_reserve/`,'GET','',callback)
+// 保养 
+export const getmaintReserve=(callback)=>send(`/wechat/customer/maint_reserve/`,'GET','',callback)
+// 活动
+export const getAction=(id,callback)=>send(`/wechat/activity/detail/?id=${id}`,'GET','',callback)
+// 订单列表
+export const getorderlist=(callback)=>send(`/wechat/customer/product_order/`,'GET','',callback)
+// 置换列表
+export const getUsedvehicleEstimate=(callback)=>send(`/wechat/customer/usedvehicle_estimate/`,'GET', '',callback)
+// 车辆列表
+export const getBindCar=(callback)=>send(`/wechat/customer/vehicle/`,'GET','',callback)
+// 续保咨询
+export const postConsultation=(data,callback)=>send(`/wechat/customer/insur_consultation/`,'POST',data,callback)
+// 维修记录
+export const getMaintenanceLog=(id,callback)=>send(`/wechat/customer/get_maint_order/?id=${id}`,'GET','',callback)

+ 253 - 0
XCX-Shop/common/common.js

@@ -0,0 +1,253 @@
+import * as db from './db.js' //引入common
+import store from '../store/index.js'
+//把obj对象里的值覆盖到newobj里面
+function deepCopy(newobj, obj) {
+	if (typeof obj != 'object') {
+		return obj
+	}
+	for (var attr in obj) {
+		var a = {}
+		if (newobj[attr]) {
+			a = newobj[attr]
+		}
+		newobj[attr] = deepCopy(a, obj[attr])
+	}
+	return newobj
+}
+//操作成功后,的提示信息
+function successToShow(msg, callback = function() {}) {
+	setTimeout(function() {
+		uni.showToast({
+			title: msg,
+			icon: 'success',
+			duration: 1000,
+			success() {
+				setTimeout(function() {
+					callback()
+				}, 500)
+			}
+		})
+	}, 100)
+
+}
+//操作失败的提示信息
+function errorToShow(msg = '操作失败', callback = function() {}) {
+	setTimeout(function() {
+		uni.showToast({
+			title: msg,
+			icon: 'none',
+			duration: 1500,
+			success() {
+				setTimeout(function() {
+					callback()
+				}, 1500)
+			}
+		})
+	}, 100)
+
+}
+//加载显示
+function loadToShow(msg = '加载中') {
+	uni.showToast({
+		title: msg,
+		icon: 'loading'
+	})
+}
+//加载隐藏
+function loadToHide() {
+	uni.hideToast()
+}
+// 提示框
+function modelShow(
+	title = '提示',
+	content = '确认执行此操作吗?',
+	callback = () => {},
+	showCancel = true,
+	cancelText = '取消',
+	confirmText = '确定'
+) {
+	uni.showModal({
+		title: title,
+		content: content,
+		showCancel: showCancel,
+		cancelText: cancelText,
+		confirmText: confirmText,
+		cancelText: cancelText,
+		success: function(res) {
+			if (res.confirm) {
+				// 用户点击确定操作
+				setTimeout(() => {
+					callback()
+				}, 500)
+			} else if (res.cancel) {
+				// 用户取消操作
+			}
+		}
+	})
+}
+
+//时间戳转时间格式
+function timeToDate(date, flag = false) {
+	var date = new Date(date * 1000) //如果date为13位不需要乘1000
+	var Y = date.getFullYear() + '-'
+	var M =
+		(date.getMonth() + 1 < 10 ?
+			'0' + (date.getMonth() + 1) :
+			date.getMonth() + 1) + '-'
+	var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '
+	var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
+	var m =
+		(date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':'
+	var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+	if (flag) {
+		return Y + M + D
+	} else {
+		return Y + M + D + h + m + s
+	}
+}
+
+
+function timeToDateObj(micro_second) {
+	var time = {}
+	// 总秒数
+	var second = Math.floor(micro_second)
+	// 天数
+	time.day = Math.floor(second / 3600 / 24)
+	// 小时
+	time.hour = Math.floor((second / 3600) % 24)
+	// 分钟
+	time.minute = Math.floor((second / 60) % 60)
+	// 秒
+	time.second = Math.floor(second % 60)
+
+	return time
+
+}
+
+//货币格式化
+function formatMoney(number, places, symbol, thousand, decimal) {
+	number = number || 0
+	places = !isNaN((places = Math.abs(places))) ? places : 2
+	symbol = symbol !== undefined ? symbol : '¥'
+	thousand = thousand || ','
+	decimal = decimal || '.'
+	var negative = number < 0 ? '-' : '',
+		i = parseInt((number = Math.abs(+number || 0).toFixed(places)), 10) + '',
+		j = (j = i.length) > 3 ? j % 3 : 0
+	return (
+		symbol +
+		negative +
+		(j ? i.substr(0, j) + thousand : '') +
+		i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + thousand) +
+		(places ?
+			decimal +
+			Math.abs(number - i)
+			.toFixed(places)
+			.slice(2) :
+			'')
+	)
+}
+
+function throttle(fn, context, delay) {
+	clearTimeout(fn.timeoutId)
+	fn.timeoutId = setTimeout(function() {
+		fn.call(context)
+	}, delay)
+}
+
+// 时间格式化输出,如11:03 25:19 每1s都会调用一次
+function dateformat(micro_second) {
+	var time = {}
+	// 总秒数
+	var second = Math.floor(micro_second / 1000) // 天数
+	time.day = PrefixInteger(Math.floor(second / 3600 / 24), 2) // 小时
+	time.hour = PrefixInteger(Math.floor((second / 3600) % 24), 2) // 分钟
+	time.minute = PrefixInteger(Math.floor((second / 60) % 60), 2) // 秒
+	time.second = PrefixInteger(Math.floor(second % 60), 2)
+	return time
+}
+
+//不足位数前面补0
+function PrefixInteger(num, length) {
+	return (Array(length).join('0') + num).slice(-length)
+}
+
+//验证是否是手机号
+function isPhoneNumber(str) {
+	var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
+	if (!myreg.test(str)) {
+		return false
+	} else {
+		return true
+	}
+}
+/**
+ *
+ * 对象参数转为url参数
+ *
+ */
+function builderUrlParams(url, data) {
+	if (typeof url == 'undefined' || url == null || url == '') {
+		return ''
+	}
+	if (typeof data == 'undefined' || data == null || typeof data != 'object') {
+		return ''
+	}
+	url += url.indexOf('?') != -1 ? '' : '?'
+	for (var k in data) {
+		url += (url.indexOf('=') != -1 ? '&' : '') + k + '=' + encodeURI(data[k])
+	}
+	return url
+}
+/**
+ * 使用循环的方式判断一个元素是否存在于一个数组中
+ * @param {Object} arr 数组
+ * @param {Object} value 元素值
+ */
+function isInArray(arr, value) {
+	for (var i = 0; i < arr.length; i++) {
+		if (value === arr[i]) {
+			return true
+		}
+	}
+	return false
+}
+/**
+ * 统一跳转
+ */
+function navigateTo(url) {
+	uni.navigateTo({
+		url: url,
+		animationType: 'pop-in',
+		animationDuration: 300
+	})
+}
+
+/**
+ *  关闭当前页面并跳转
+ */
+function redirectTo(url) {
+	uni.redirectTo({
+		url: url,
+		animationType: 'pop-in',
+		animationDuration: 300
+	})
+}
+export {
+	deepCopy,
+	timeToDate,
+	formatMoney,
+	successToShow,
+	throttle,
+	errorToShow,
+	isPhoneNumber,
+	isInArray,
+	loadToShow,
+	loadToHide,
+	navigateTo,
+	redirectTo,
+	modelShow,
+	builderUrlParams,
+	dateformat,
+	timeToDateObj,
+}

+ 8 - 0
XCX-Shop/common/config.js

@@ -0,0 +1,8 @@
+export default{
+	webUrl: 'https://lshop.zzliaoyuan.com',
+	apiBaseUrl: 'https://lshop.zzliaoyuan.com',
+	apiHomeUrl: 'https://lshop.zzliaoyuan.com',
+	// webUrl: 'http://192.168.2.55:8044',
+	// apiBaseUrl: 'http://192.168.2.55:8044',
+	// apiHomeUrl: 'http://192.168.2.55:8044',
+}

+ 67 - 0
XCX-Shop/common/db.js

@@ -0,0 +1,67 @@
+import * as common from './common.js'
+//取值
+function get(key, sync = true) {
+	try {
+		if (sync) {
+			return uni.getStorageSync(key);
+		} else {
+			let data = '';
+			uni.getStorage({
+				key: key,
+				success: function(res) {
+					data = res.data;
+				}
+			});
+			return data;
+		}
+	} catch (e) {
+		return false;
+	}
+}
+//赋值
+function set(key, value, sync = true) {
+	try {
+		if (sync) {
+			return uni.setStorageSync(key, value);
+		} else {
+			uni.setStorage({
+				key: key,
+				data: value
+			});
+		}
+	} catch (e) {
+
+	}
+}
+//移除
+function del(key, sync = true) {
+	try {
+		if (sync) {
+			return uni.removeStorageSync(key);
+		} else {
+			uni.removeStorage({
+				key: key
+			});
+		}
+	} catch (e) {
+		return false;
+	}
+}
+//清空
+function clear(sync = true) {
+	try {
+		if (sync) {
+			return uni.clearStorageSync();
+		} else {
+			uni.clearStorage();
+		}
+	} catch (e) {
+		return false;
+	}
+}
+export {
+	get,
+	set,
+	del,
+	clear
+}

+ 24 - 0
XCX-Shop/common/dianji.js

@@ -0,0 +1,24 @@
+// 防止处理多次点击
+function noMultipleClicks(methods, info) {
+    // methods是需要点击后需要执行的函数, info是点击需要传的参数
+    let that = this;
+    if (that.noClick) {
+        // 第一次点击
+        that.noClick= false;
+        if(info && info !== '') {
+            // info是执行函数需要传的参数
+            methods(info);
+        } else {
+            methods();
+        }
+        setTimeout(()=> {
+            that.noClick= true;
+        }, 3500)
+    } else {
+        // 这里是重复点击的判断
+    }
+}
+//导出
+export default {
+    noMultipleClicks,//禁止多次点击
+}

+ 28 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseAudio.vue

@@ -0,0 +1,28 @@
+<template>
+	<!-- '<audio/>' 组件不再维护,建议使用能力更强的 'uni.createInnerAudioContext' 接口 有时间再改-->
+  <!--增加audio标签支持-->
+  <audio
+    :id="node.attr.id"
+    :class="node.classStr"
+    :style="node.styleStr"
+    :src="node.attr.src"
+    :loop="node.attr.loop"
+    :poster="node.attr.poster"
+    :name="node.attr.name"
+    :author="node.attr.author"
+    controls></audio>
+</template>
+
+<script>
+export default {
+  name: 'wxParseAudio',
+  props: {
+    node: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+};
+</script>

+ 94 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseImg.vue

@@ -0,0 +1,94 @@
+<template>
+	<image
+		:mode="node.attr.mode"
+		:lazy-load="node.attr.lazyLoad"
+		:class="node.classStr"
+		:style="newStyleStr || node.styleStr"
+		:data-src="node.attr.src"
+		:src="node.attr.src"
+		@tap="wxParseImgTap"
+		@load="wxParseImgLoad"
+	/>
+</template>
+
+<script>
+export default {
+	name: 'wxParseImg',
+	data() {
+		return {
+			newStyleStr: '',
+			preview: true
+		};
+	},
+	inject: ['parseWidth'],
+	mounted() {},
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			}
+		}
+	},
+	
+	methods: {
+		wxParseImgTap(e) {
+			if (!this.preview) return;
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let parent = this.$parent;
+			while (!parent.preview || typeof parent.preview !== 'function') {
+				// TODO 遍历获取父节点执行方法
+				parent = parent.$parent;
+			}
+			parent.preview(src, e);
+		},
+		// 图片视觉宽高计算函数区
+		wxParseImgLoad(e) {
+			const { src } = e.currentTarget.dataset;
+			if (!src) return;
+			let { width, height } = e.mp.detail;
+
+			const recal = this.wxAutoImageCal(width, height);
+
+			const { imageheight, imageWidth } = recal;
+			const { padding, mode } = this.node.attr;//删除padding
+			// const { mode } = this.node.attr;
+
+			const { styleStr } = this.node;
+			const imageHeightStyle = mode === 'widthFix' ? '' : `height: ${imageheight}px;`;
+
+			this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px; padding: 0 ${+padding}px;`;//删除padding
+			// this.newStyleStr = `${styleStr}; ${imageHeightStyle}; width: ${imageWidth}px;`;
+		},
+		// 计算视觉优先的图片宽高
+		wxAutoImageCal(originalWidth, originalHeight) {
+			// 获取图片的原始长宽
+			const windowWidth = this.parseWidth.value;
+			const results = {};
+
+			if (originalWidth < 60 || originalHeight < 60) {
+				const { src } = this.node.attr;
+				let parent = this.$parent;
+				while (!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.removeImageUrl(src);
+				this.preview = false;
+			}
+
+			// 判断按照那种方式进行缩放
+			if (originalWidth > windowWidth) {
+				// 在图片width大于手机屏幕width时候
+				results.imageWidth = windowWidth;
+				results.imageheight = windowWidth * (originalHeight / originalWidth);
+			} else {
+				// 否则展示原来的数据
+				results.imageWidth = originalWidth;
+				results.imageheight = originalHeight;
+			}
+			return results;
+		}
+	}
+};
+</script>

+ 51 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTable.vue

@@ -0,0 +1,51 @@
+<template>
+	<rich-text :nodes="nodes"></rich-text>
+</template>
+
+<script>
+export default {
+	name: 'wxParseTable',
+	props: {
+		node: {
+			type: Object,
+			default() {
+				return {};
+			},
+		},
+	},
+	data() {
+		return {
+			nodes:[]
+		};
+	},
+	mounted() {
+		this.nodes=this.loadNode([this.node]);
+	},
+	methods: {
+		loadNode(node) {
+			let obj = [];
+			for (let children of node) {
+				// console.log(children)
+				if (children.node=='element') {
+					let t = {
+						name:children.tag,
+						attrs: {
+							class: children.classStr,
+							// style: children.styleStr,
+						},
+						children: children.nodes?this.loadNode(children.nodes):[]
+					}
+					
+					obj.push(t)
+				} else if(children.node=='text'){
+					obj.push({
+						type: 'text',
+						text: children.text
+					})
+				}
+			}
+			return obj
+		}
+	}
+};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate0.vue

@@ -0,0 +1,88 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate1';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+
+	export default {
+		name: 'wxParseTemplate0',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;// TODO currentTarget才有dataset
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {// TODO 遍历获取父节点执行方法
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		}
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate1.vue

@@ -0,0 +1,88 @@
+<template>
+	<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate2';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate1',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate10.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate11';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate10',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 82 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate11.vue

@@ -0,0 +1,82 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate11',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate2.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate3';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate2',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate3.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate4';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate3',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate4.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate5';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate4',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate5.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate6';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate5',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate6.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate7';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate6',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate7.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate8';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate7',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate8.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate9';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate8',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 88 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseTemplate9.vue

@@ -0,0 +1,88 @@
+<template>
+		<!--判断是否是标签节点-->
+	<block v-if="node.node == 'element'">
+		<!--button类型-->
+		<button v-if="node.tag == 'button'" type="default" size="mini" :class="node.classStr" :style="node.styleStr">
+			<wx-parse-template :node="node" />
+		</button>
+		
+		<!--a类型-->
+		<view v-else-if="node.tag == 'a'" @click="wxParseATap" :class="node.classStr" :data-href="node.attr.href" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--li类型-->
+		<view v-else-if="node.tag == 'li'" :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+		
+		<!--table类型-->
+		<wx-parse-table v-else-if="node.tag == 'table'" :class="node.classStr" :style="node.styleStr" :node="node" />
+		
+		<!--br类型-->
+		<!-- #ifndef H5 -->
+			<text v-else-if="node.tag == 'br'">\n</text>
+		<!-- #endif -->
+		<!-- #ifdef H5 -->
+			<br v-else-if="node.tag == 'br'">
+		<!-- #endif -->
+		
+		<!--video类型-->
+		<wx-parse-video :node="node" v-else-if="node.tag == 'video'"/>
+	
+		<!--audio类型-->
+		<wx-parse-audio :node="node" v-else-if="node.tag == 'audio'"/>
+	
+		<!--img类型-->
+		<wx-parse-img :node="node" v-else-if="node.tag == 'img'"/>
+	
+		<!--其他标签-->
+		<view v-else :class="node.classStr" :style="node.styleStr">
+			<block v-for="(node, index) of node.nodes" :key="index">
+				<wx-parse-template :node="node" />
+			</block>
+		</view>
+	</block>
+	
+	<!--判断是否是文本节点-->
+	<block v-else-if="node.node == 'text'">{{node.text}}</block>
+</template>
+
+<script>
+	import wxParseTemplate from './wxParseTemplate10';
+	import wxParseImg from './wxParseImg';
+	import wxParseVideo from './wxParseVideo';
+	import wxParseAudio from './wxParseAudio';
+	import wxParseTable from './wxParseTable';
+	
+	export default {
+		name: 'wxParseTemplate9',
+		props: {
+			node: {},
+		},
+		components: {
+			wxParseTemplate,
+			wxParseImg,
+			wxParseVideo,
+			wxParseAudio,
+			wxParseTable
+		},
+		methods: {
+			wxParseATap(e) {
+				const {
+					href
+				} = e.currentTarget.dataset;
+				if (!href) return;
+				let parent = this.$parent;
+				while(!parent.preview || typeof parent.preview !== 'function') {
+					parent = parent.$parent;
+				}
+				parent.navigate(href, e);
+			},
+		},
+	};
+</script>

+ 15 - 0
XCX-Shop/components/gaoyia-parse/components/wxParseVideo.vue

@@ -0,0 +1,15 @@
+<template>
+  <!--增加video标签支持,并循环添加-->
+  <view :class="node.classStr" :style="node.styleStr">
+    <video :class="node.classStr" :style="node.styleStr" class="video-video" :src="node.attr.src" :poster="node.attr.poster"></video>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'wxParseVideo',
+  props: {
+    node: {},
+  },
+};
+</script>

+ 261 - 0
XCX-Shop/components/gaoyia-parse/libs/html2json.js

@@ -0,0 +1,261 @@
+/**
+ * html2Json 改造来自: https://github.com/Jxck/html2json
+ *
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+import wxDiscode from './wxDiscode';
+import HTMLParser from './htmlparser';
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Block Elements - HTML 5
+const block = makeMap('br,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+function removeDOCTYPE(html) {
+  const isDocument = /<body.*>([^]*)<\/body>/.test(html);
+  return isDocument ? RegExp.$1 : html;
+}
+
+function trimHtml(html) {
+  return html
+    .replace(/<!--.*?-->/gi, '')
+    .replace(/\/\*.*?\*\//gi, '')
+    .replace(/[ ]+</gi, '<')
+    .replace(/<script[^]*<\/script>/gi, '')
+    .replace(/<style[^]*<\/style>/gi, '');
+}
+
+function getScreenInfo() {
+  const screen = {};
+  wx.getSystemInfo({
+    success: (res) => {
+      screen.width = res.windowWidth;
+      screen.height = res.windowHeight;
+    },
+  });
+  return screen;
+}
+
+function html2json(html, customHandler, imageProp, host) {
+  // 处理字符串
+  html = removeDOCTYPE(html);
+  html = trimHtml(html);
+  html = wxDiscode.strDiscode(html);
+  // 生成node节点
+  const bufArray = [];
+  const results = {
+    nodes: [],
+    imageUrls: [],
+  };
+
+	const screen = getScreenInfo();
+  function Node(tag) {
+    this.node = 'element';
+    this.tag = tag;
+		
+		this.$screen = screen;
+  }
+
+  HTMLParser(html, {
+    start(tag, attrs, unary) {
+      // node for this element
+      const node = new Node(tag);
+
+      if (bufArray.length !== 0) {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+      }
+
+      if (block[tag]) {
+        node.tagType = 'block';
+      } else if (inline[tag]) {
+        node.tagType = 'inline';
+      } else if (closeSelf[tag]) {
+        node.tagType = 'closeSelf';
+      }
+
+      node.attr = attrs.reduce((pre, attr) => {
+        const { name } = attr;
+        let { value } = attr;
+        if (name === 'class') {
+          node.classStr = value;
+        }
+        // has multi attibutes
+        // make it array of attribute
+        if (name === 'style') {
+          node.styleStr = value;
+        }
+        if (value.match(/ /)) {
+          value = value.split(' ');
+        }
+
+        // if attr already exists
+        // merge it
+        if (pre[name]) {
+          if (Array.isArray(pre[name])) {
+            // already array, push to last
+            pre[name].push(value);
+          } else {
+            // single value, make it array
+            pre[name] = [pre[name], value];
+          }
+        } else {
+          // not exist, put it
+          pre[name] = value;
+        }
+
+        return pre;
+      }, {});
+
+      // 优化样式相关属性
+      if (node.classStr) {
+        node.classStr += ` ${node.tag}`;
+      } else {
+        node.classStr = node.tag;
+      }
+      if (node.tagType === 'inline') {
+        node.classStr += ' inline';
+      }
+
+      // 对img添加额外数据
+      if (node.tag === 'img') {
+        let imgUrl = node.attr.src;
+        imgUrl = wxDiscode.urlToHttpUrl(imgUrl, imageProp.domain);
+        Object.assign(node.attr, imageProp, {
+          src: imgUrl || '',
+        });
+        if (imgUrl) {
+          results.imageUrls.push(imgUrl);
+        }
+      }
+
+      // 处理a标签属性
+      if (node.tag === 'a') {
+        node.attr.href = node.attr.href || '';
+      }
+
+      // 处理font标签样式属性
+      if (node.tag === 'font') {
+        const fontSize = [
+          'x-small',
+          'small',
+          'medium',
+          'large',
+          'x-large',
+          'xx-large',
+          '-webkit-xxx-large',
+        ];
+        const styleAttrs = {
+          color: 'color',
+          face: 'font-family',
+          size: 'font-size',
+        };
+        if (!node.styleStr) node.styleStr = '';
+        Object.keys(styleAttrs).forEach((key) => {
+          if (node.attr[key]) {
+            const value = key === 'size' ? fontSize[node.attr[key] - 1] : node.attr[key];
+            node.styleStr += `${styleAttrs[key]}: ${value};`;
+          }
+        });
+      }
+
+      // 临时记录source资源
+      if (node.tag === 'source') {
+        results.source = node.attr.src;
+      }
+
+      if (customHandler.start) {
+        customHandler.start(node, results);
+      }
+
+      if (unary) {
+        // if this tag doesn't have end tag
+        // like <img src="hoge.png"/>
+        // add to parents
+        const parent = bufArray[0] || results;
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      } else {
+        bufArray.unshift(node);
+      }
+    },
+    end(tag) {
+      // merge into parent tag
+      const node = bufArray.shift();
+      if (node.tag !== tag) {
+        console.error('invalid state: mismatch end tag');
+      }
+
+      // 当有缓存source资源时于于video补上src资源
+      if (node.tag === 'video' && results.source) {
+        node.attr.src = results.source;
+        delete results.source;
+      }
+
+      if (customHandler.end) {
+        customHandler.end(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (!parent.nodes) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+    chars(text) {
+      if (!text.trim()) return;
+
+      const node = {
+        node: 'text',
+        text,
+      };
+
+      if (customHandler.chars) {
+        customHandler.chars(node, results);
+      }
+
+      if (bufArray.length === 0) {
+        results.nodes.push(node);
+      } else {
+        const parent = bufArray[0];
+        if (parent.nodes === undefined) {
+          parent.nodes = [];
+        }
+        parent.nodes.push(node);
+      }
+    },
+  });
+
+  return results;
+}
+
+export default html2json;

+ 156 - 0
XCX-Shop/components/gaoyia-parse/libs/htmlparser.js

@@ -0,0 +1,156 @@
+/**
+ *
+ * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser
+ *
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *               垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+// Regular Expressions for parsing tags and attributes
+
+const startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z0-9_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+const endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+const attr = /([a-zA-Z0-9_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;
+
+function makeMap(str) {
+  const obj = {};
+  const items = str.split(',');
+  for (let i = 0; i < items.length; i += 1) obj[items[i]] = true;
+  return obj;
+}
+
+// Empty Elements - HTML 5
+const empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr');
+
+// Block Elements - HTML 5
+const block = makeMap('address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video');
+
+// Inline Elements - HTML 5
+const inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var');
+
+// Elements that you can, intentionally, leave open
+// (and which close themselves)
+const closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+// Attributes that have their values filled in disabled="disabled"
+const fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
+
+function HTMLParser(html, handler) {
+  let index;
+  let chars;
+  let match;
+  let last = html;
+  const stack = [];
+
+  stack.last = () => stack[stack.length - 1];
+
+  function parseEndTag(tag, tagName) {
+    // If no tag name is provided, clean shop
+    let pos;
+    if (!tagName) {
+      pos = 0;
+    } else {
+      // Find the closest opened tag of the same type
+      tagName = tagName.toLowerCase();
+      for (pos = stack.length - 1; pos >= 0; pos -= 1) {
+        if (stack[pos] === tagName) break;
+      }
+    }
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (let i = stack.length - 1; i >= pos; i -= 1) {
+        if (handler.end) handler.end(stack[i]);
+      }
+
+      // Remove the open elements from the stack
+      stack.length = pos;
+    }
+  }
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = tagName.toLowerCase();
+
+    if (block[tagName]) {
+      while (stack.last() && inline[stack.last()]) {
+        parseEndTag('', stack.last());
+      }
+    }
+
+    if (closeSelf[tagName] && stack.last() === tagName) {
+      parseEndTag('', tagName);
+    }
+
+    unary = empty[tagName] || !!unary;
+
+    if (!unary) stack.push(tagName);
+
+    if (handler.start) {
+      const attrs = [];
+
+      rest.replace(attr, function genAttr(matches, name) {
+        const value = arguments[2] || arguments[3] || arguments[4] || (fillAttrs[name] ? name : '');
+
+        attrs.push({
+          name,
+          value,
+          escaped: value.replace(/(^|[^\\])"/g, '$1\\"'), // "
+        });
+      });
+
+      if (handler.start) {
+        handler.start(tagName, attrs, unary);
+      }
+    }
+  }
+
+  while (html) {
+    chars = true;
+
+    if (html.indexOf('</') === 0) {
+      match = html.match(endTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(endTag, parseEndTag);
+        chars = false;
+      }
+
+      // start tag
+    } else if (html.indexOf('<') === 0) {
+      match = html.match(startTag);
+
+      if (match) {
+        html = html.substring(match[0].length);
+        match[0].replace(startTag, parseStartTag);
+        chars = false;
+      }
+    }
+
+    if (chars) {
+      index = html.indexOf('<');
+      let text = '';
+      while (index === 0) {
+        text += '<';
+        html = html.substring(1);
+        index = html.indexOf('<');
+      }
+      text += index < 0 ? html : html.substring(0, index);
+      html = index < 0 ? '' : html.substring(index);
+
+      if (handler.chars) handler.chars(text);
+    }
+
+    if (html === last) throw new Error(`Parse Error: ${html}`);
+    last = html;
+  }
+
+  // Clean up any remaining tags
+  parseEndTag();
+}
+
+export default HTMLParser;

+ 195 - 0
XCX-Shop/components/gaoyia-parse/libs/wxDiscode.js

@@ -0,0 +1,195 @@
+// HTML 支持的数学符号
+function strNumDiscode(str) {
+  str = str.replace(/&forall;/g, '∀');
+  str = str.replace(/&part;/g, '∂');
+  str = str.replace(/&exist;/g, '∃');
+  str = str.replace(/&empty;/g, '∅');
+  str = str.replace(/&nabla;/g, '∇');
+  str = str.replace(/&isin;/g, '∈');
+  str = str.replace(/&notin;/g, '∉');
+  str = str.replace(/&ni;/g, '∋');
+  str = str.replace(/&prod;/g, '∏');
+  str = str.replace(/&sum;/g, '∑');
+  str = str.replace(/&minus;/g, '−');
+  str = str.replace(/&lowast;/g, '∗');
+  str = str.replace(/&radic;/g, '√');
+  str = str.replace(/&prop;/g, '∝');
+  str = str.replace(/&infin;/g, '∞');
+  str = str.replace(/&ang;/g, '∠');
+  str = str.replace(/&and;/g, '∧');
+  str = str.replace(/&or;/g, '∨');
+  str = str.replace(/&cap;/g, '∩');
+  str = str.replace(/&cup;/g, '∪');
+  str = str.replace(/&int;/g, '∫');
+  str = str.replace(/&there4;/g, '∴');
+  str = str.replace(/&sim;/g, '∼');
+  str = str.replace(/&cong;/g, '≅');
+  str = str.replace(/&asymp;/g, '≈');
+  str = str.replace(/&ne;/g, '≠');
+  str = str.replace(/&le;/g, '≤');
+  str = str.replace(/&ge;/g, '≥');
+  str = str.replace(/&sub;/g, '⊂');
+  str = str.replace(/&sup;/g, '⊃');
+  str = str.replace(/&nsub;/g, '⊄');
+  str = str.replace(/&sube;/g, '⊆');
+  str = str.replace(/&supe;/g, '⊇');
+  str = str.replace(/&oplus;/g, '⊕');
+  str = str.replace(/&otimes;/g, '⊗');
+  str = str.replace(/&perp;/g, '⊥');
+  str = str.replace(/&sdot;/g, '⋅');
+  return str;
+}
+
+// HTML 支持的希腊字母
+function strGreeceDiscode(str) {
+  str = str.replace(/&Alpha;/g, 'Α');
+  str = str.replace(/&Beta;/g, 'Β');
+  str = str.replace(/&Gamma;/g, 'Γ');
+  str = str.replace(/&Delta;/g, 'Δ');
+  str = str.replace(/&Epsilon;/g, 'Ε');
+  str = str.replace(/&Zeta;/g, 'Ζ');
+  str = str.replace(/&Eta;/g, 'Η');
+  str = str.replace(/&Theta;/g, 'Θ');
+  str = str.replace(/&Iota;/g, 'Ι');
+  str = str.replace(/&Kappa;/g, 'Κ');
+  str = str.replace(/&Lambda;/g, 'Λ');
+  str = str.replace(/&Mu;/g, 'Μ');
+  str = str.replace(/&Nu;/g, 'Ν');
+  str = str.replace(/&Xi;/g, 'Ν');
+  str = str.replace(/&Omicron;/g, 'Ο');
+  str = str.replace(/&Pi;/g, 'Π');
+  str = str.replace(/&Rho;/g, 'Ρ');
+  str = str.replace(/&Sigma;/g, 'Σ');
+  str = str.replace(/&Tau;/g, 'Τ');
+  str = str.replace(/&Upsilon;/g, 'Υ');
+  str = str.replace(/&Phi;/g, 'Φ');
+  str = str.replace(/&Chi;/g, 'Χ');
+  str = str.replace(/&Psi;/g, 'Ψ');
+  str = str.replace(/&Omega;/g, 'Ω');
+
+  str = str.replace(/&alpha;/g, 'α');
+  str = str.replace(/&beta;/g, 'β');
+  str = str.replace(/&gamma;/g, 'γ');
+  str = str.replace(/&delta;/g, 'δ');
+  str = str.replace(/&epsilon;/g, 'ε');
+  str = str.replace(/&zeta;/g, 'ζ');
+  str = str.replace(/&eta;/g, 'η');
+  str = str.replace(/&theta;/g, 'θ');
+  str = str.replace(/&iota;/g, 'ι');
+  str = str.replace(/&kappa;/g, 'κ');
+  str = str.replace(/&lambda;/g, 'λ');
+  str = str.replace(/&mu;/g, 'μ');
+  str = str.replace(/&nu;/g, 'ν');
+  str = str.replace(/&xi;/g, 'ξ');
+  str = str.replace(/&omicron;/g, 'ο');
+  str = str.replace(/&pi;/g, 'π');
+  str = str.replace(/&rho;/g, 'ρ');
+  str = str.replace(/&sigmaf;/g, 'ς');
+  str = str.replace(/&sigma;/g, 'σ');
+  str = str.replace(/&tau;/g, 'τ');
+  str = str.replace(/&upsilon;/g, 'υ');
+  str = str.replace(/&phi;/g, 'φ');
+  str = str.replace(/&chi;/g, 'χ');
+  str = str.replace(/&psi;/g, 'ψ');
+  str = str.replace(/&omega;/g, 'ω');
+  str = str.replace(/&thetasym;/g, 'ϑ');
+  str = str.replace(/&upsih;/g, 'ϒ');
+  str = str.replace(/&piv;/g, 'ϖ');
+  str = str.replace(/&middot;/g, '·');
+  return str;
+}
+
+function strcharacterDiscode(str) {
+  // 加入常用解析
+  str = str.replace(/&nbsp;/g, ' ');
+  str = str.replace(/&ensp;/g, ' ');
+  str = str.replace(/&emsp;/g, ' ');
+  str = str.replace(/&quot;/g, "'");
+  str = str.replace(/&amp;/g, '&');
+  str = str.replace(/&lt;/g, '<');
+  str = str.replace(/&gt;/g, '>');
+  str = str.replace(/&#8226;/g, '•');
+
+  return str;
+}
+
+// HTML 支持的其他实体
+function strOtherDiscode(str) {
+  str = str.replace(/&OElig;/g, 'Œ');
+  str = str.replace(/&oelig;/g, 'œ');
+  str = str.replace(/&Scaron;/g, 'Š');
+  str = str.replace(/&scaron;/g, 'š');
+  str = str.replace(/&Yuml;/g, 'Ÿ');
+  str = str.replace(/&fnof;/g, 'ƒ');
+  str = str.replace(/&circ;/g, 'ˆ');
+  str = str.replace(/&tilde;/g, '˜');
+  str = str.replace(/&ensp;/g, '');
+  str = str.replace(/&emsp;/g, '');
+  str = str.replace(/&thinsp;/g, '');
+  str = str.replace(/&zwnj;/g, '');
+  str = str.replace(/&zwj;/g, '');
+  str = str.replace(/&lrm;/g, '');
+  str = str.replace(/&rlm;/g, '');
+  str = str.replace(/&ndash;/g, '–');
+  str = str.replace(/&mdash;/g, '—');
+  str = str.replace(/&lsquo;/g, '‘');
+  str = str.replace(/&rsquo;/g, '’');
+  str = str.replace(/&sbquo;/g, '‚');
+  str = str.replace(/&ldquo;/g, '“');
+  str = str.replace(/&rdquo;/g, '”');
+  str = str.replace(/&bdquo;/g, '„');
+  str = str.replace(/&dagger;/g, '†');
+  str = str.replace(/&Dagger;/g, '‡');
+  str = str.replace(/&bull;/g, '•');
+  str = str.replace(/&hellip;/g, '…');
+  str = str.replace(/&permil;/g, '‰');
+  str = str.replace(/&prime;/g, '′');
+  str = str.replace(/&Prime;/g, '″');
+  str = str.replace(/&lsaquo;/g, '‹');
+  str = str.replace(/&rsaquo;/g, '›');
+  str = str.replace(/&oline;/g, '‾');
+  str = str.replace(/&euro;/g, '€');
+  str = str.replace(/&trade;/g, '™');
+
+  str = str.replace(/&larr;/g, '←');
+  str = str.replace(/&uarr;/g, '↑');
+  str = str.replace(/&rarr;/g, '→');
+  str = str.replace(/&darr;/g, '↓');
+  str = str.replace(/&harr;/g, '↔');
+  str = str.replace(/&crarr;/g, '↵');
+  str = str.replace(/&lceil;/g, '⌈');
+  str = str.replace(/&rceil;/g, '⌉');
+
+  str = str.replace(/&lfloor;/g, '⌊');
+  str = str.replace(/&rfloor;/g, '⌋');
+  str = str.replace(/&loz;/g, '◊');
+  str = str.replace(/&spades;/g, '♠');
+  str = str.replace(/&clubs;/g, '♣');
+  str = str.replace(/&hearts;/g, '♥');
+
+  str = str.replace(/&diams;/g, '♦');
+  str = str.replace(/&#39;/g, "'");
+  return str;
+}
+
+function strDiscode(str) {
+  str = strNumDiscode(str);
+  str = strGreeceDiscode(str);
+  str = strcharacterDiscode(str);
+  str = strOtherDiscode(str);
+  return str;
+}
+
+function urlToHttpUrl(url, domain) {
+  if (/^\/\//.test(url)) {
+    return `https:${url}`;
+  } else if (/^\//.test(url)) {
+    return `https://${domain}${url}`;
+  }
+  return url;
+}
+
+export default {
+  strDiscode,
+  urlToHttpUrl,
+};

+ 258 - 0
XCX-Shop/components/gaoyia-parse/parse.css

@@ -0,0 +1,258 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+/**
+ * 请在全局下引入该文件,@import '/static/wxParse.css';
+ */
+.wxParse {
+	user-select:none;
+	width: 100%;
+	font-family: Helvetica, "PingFangSC", 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;
+	color: #333;
+	line-height: 1.5;
+	font-size: 1em;
+	text-align:justify;/* //左右两端对齐 */
+}
+.wxParse view ,.wxParse uni-view{
+	word-break: break-word;
+}
+.wxParse .p {
+	padding-bottom: 0.5em;
+	clear: both;
+	/* letter-spacing: 0;//字间距 */
+}
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+  display: block;
+}
+
+.wxParse .h1{
+  font-size: 2em;
+  line-height: 1.2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2{
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3{
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4{
+  margin: 1.33em 0;
+}
+.wxParse .h5{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6{
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+
+.wxParse .h1,
+.wxParse .h2,
+.wxParse .h3,
+.wxParse .h4,
+.wxParse .h5,
+.wxParse .h6,
+.wxParse .b,
+.wxParse .strong{
+  font-weight: bolder;
+}
+
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+.wxParse .spaceshow{
+	  white-space: pre;
+}
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16upx;
+  white-space: pre;
+  margin: 1em 0upx;
+  font-size: 24upx;
+}
+.wxParse .code {
+	overflow: auto;
+	padding: 16upx;
+	white-space: pre;
+	margin: 1em 0upx;
+	background: #f5f5f5;
+	font-size: 24upx;
+}
+
+.wxParse .big {
+  font-size: 1.17em;
+}
+
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+
+.wxParse .strong,
+.wxParse .text,
+.wxParse .span,
+.wxParse .s {
+  display: inline;
+}
+
+.wxParse .a {
+  color: deepskyblue;
+}
+
+.wxParse .video {
+  text-align: center;
+  margin: 22upx 0;
+}
+
+.wxParse .video-video {
+  width: 100%;
+}
+.wxParse .uni-image{
+	max-width: 100%;
+}
+.wxParse .img {
+  display: block;
+  max-width: 100%;
+  margin-bottom: 0em;/* //与p标签底部padding同时修改 */
+  overflow: hidden;
+}
+
+.wxParse .blockquote {
+  margin: 10upx 0;
+  padding: 22upx 0 22upx 22upx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6upx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 2em;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+.wxParse .tablebox{
+	overflow: auto;
+	background-color: #f5f5f5;
+	background: #f5f5f5;
+	font-size: 13px;
+	padding: 8px;
+}
+.wxParse .table .table,.wxParse .table{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	/* width: 100%; */
+	overflow: auto;
+	white-space: pre;
+}
+.wxParse .tbody{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* 内边框 */
+	border: 1px solid #dadada;
+}
+.wxParse .table  .thead, .wxParse  .table .tfoot, .wxParse  .table .th{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	background: #ececec;
+	font-weight: 40;
+}
+.wxParse  .table .tr {
+	border-collapse:collapse;
+	box-sizing: border-box;
+	/* border: 2px solid #F0AD4E; */
+	overflow:auto;
+}
+.wxParse  .table .th,
+.wxParse  .table .td{
+	border-collapse:collapse;
+	box-sizing: border-box;
+	border: 2upx solid #dadada;
+	overflow:auto;
+}
+.wxParse .audio, .wxParse .uni-audio-default{
+	display: block;
+}

+ 228 - 0
XCX-Shop/components/gaoyia-parse/parse.vue

@@ -0,0 +1,228 @@
+<!--**
+ * forked from:https://github.com/F-loat/mpvue-wxParse
+ *
+ * github地址: https://github.com/dcloudio/uParse
+ *
+ * for: uni-app框架下 富文本解析
+ * 
+ * 优化 by gaoyia@qq.com  https://github.com/gaoyia/parse
+ */-->
+
+<template>
+	
+	<!--基础元素-->
+	<div class="wxParse" :class="className" :style="'user-select:' + userSelect">
+		<block v-for="(node, index) of nodes" :key="index" v-if="!loading">
+			<wxParseTemplate :node="node" />
+		</block>
+	</div>
+</template>
+
+<script>
+import HtmlToJson from './libs/html2json';
+import wxParseTemplate from './components/wxParseTemplate0';
+
+	
+	export default {
+		name: 'wxParse',
+		props: {
+			// user-select:none;
+			userSelect: {
+				type: String,
+				default: 'text' //none |text| all | element
+			},
+			imgOptions: {
+				type: [Object, Boolean],
+				default: function() {
+					return {
+						loop: false,
+						indicator: 'number',
+						longPressActions: false
+						// longPressActions: {
+						// 	 itemList: ['发送给朋友', '保存图片', '收藏'],
+						// 		success: function (res) {
+						// 			console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
+						// 		},
+						// 		fail: function (res) {
+						// 			console.log(res.errMsg);
+						// 		}    
+						// 	}
+						// }
+					}
+				}
+			},
+			loading: {
+				type: Boolean,
+				default: false
+			},
+			className: {
+				type: String,
+				default: ''
+			},
+			content: {
+				type: String,
+				default: ''
+			},
+			noData: {
+				type: String,
+				default: '<div style="color: red;">数据不能为空</div>'
+			},
+			startHandler: {
+				type: Function,
+				default () {
+					return node => {
+						node.attr.class = null;
+						node.attr.style = null;
+					};
+				}
+			},
+			endHandler: {
+				type: Function,
+				default: null
+			},
+			charsHandler: {
+				type: Function,
+				default: null
+			},
+			imageProp: {
+				type: Object,
+				default () {
+					return {
+						mode: 'aspectFit',
+						padding: 0,
+						lazyLoad: false,
+						domain: ''
+					};
+				}
+			}
+		},
+		components: {
+			wxParseTemplate
+		},
+		data() {
+			return {
+				nodes: {},
+				imageUrls: [],
+				wxParseWidth: {
+					value: 0
+				}
+			};
+		},
+		computed: {},
+		mounted() {
+			this.setHtml()
+		},
+		methods: {
+			setHtml() {
+				this.getWidth().then((data) => {
+					this.wxParseWidth.value = data;
+				})
+				let {
+					content,
+					noData,
+					imageProp,
+					startHandler,
+					endHandler,
+					charsHandler
+				} = this;
+				let parseData = content || noData;
+				let customHandler = {
+					start: startHandler,
+					end: endHandler,
+					chars: charsHandler
+				};
+				let results = HtmlToJson(parseData, customHandler, imageProp, this);
+
+				this.imageUrls = results.imageUrls;
+				// this.nodes = results.nodes;
+				
+				
+				this.nodes = [];
+				results.nodes.forEach((item) => {
+					setTimeout(() => {
+						this.nodes.push(item)
+					}, 0);
+				})
+			},
+			getWidth() {
+				return new Promise((res, rej) => {
+					// #ifndef MP-ALIPAY || MP-BAIDU
+					uni.createSelectorQuery()
+						.in(this)
+						.select('.wxParse')
+						.fields({
+								size: true,
+								scrollOffset: true
+							},
+							data => {
+								res(data.width);
+							}
+						).exec();
+					// #endif
+					// #ifdef MP-BAIDU
+					const query = swan.createSelectorQuery();
+					query.select('.wxParse').boundingClientRect();
+					query.exec(obj => {
+						const rect = obj[0]
+						if (rect) {
+							res(rect.width);
+						}
+					});
+					// #endif
+					// #ifdef MP-ALIPAY
+					my.createSelectorQuery()
+						.select('.wxParse')
+						.boundingClientRect().exec((ret) => {
+							res(ret[0].width);
+						});
+					// #endif
+				});
+			},
+			navigate(href, $event, attr) {
+				console.log(href, attr);
+				this.$emit('navigate', href, $event);
+			},
+			preview(src, $event) {
+				if (!this.imageUrls.length || typeof this.imgOptions === 'boolean') {
+
+				} else {
+					uni.previewImage({
+						current: src,
+						urls: this.imageUrls,
+						loop: this.imgOptions.loop,
+						indicator: this.imgOptions.indicator,
+						longPressActions: this.imgOptions.longPressActions
+					});
+				}
+				this.$emit('preview', src, $event);
+			},
+			removeImageUrl(src) {
+				const {
+					imageUrls
+				} = this;
+				imageUrls.splice(imageUrls.indexOf(src), 1);
+			}
+		},
+		// 父组件中提供
+		provide() {
+			return {
+				parseWidth: this.wxParseWidth,
+				parseSelect: this.userSelect
+				// 提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的属性还是可响应的。
+			};
+		},
+		watch: {
+			content(){
+				this.setHtml()
+			}
+			// content: {
+			// 	handler: function(newVal, oldVal) {
+			// 		if (newVal !== oldVal) {
+			// 			
+			// 		}
+			// 	},
+			// 	deep: true
+			// }
+		}
+	};
+</script>

+ 232 - 0
XCX-Shop/components/u-parse/u-parse.css

@@ -0,0 +1,232 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ *         垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+.wxParse {
+  width: 100%;
+  font-family: Helvetica, sans-serif;
+  font-size: 30upx;
+  color: #666;
+  line-height: 1.8;
+}
+
+.wxParse view {
+  word-break: hyphenate;
+}
+
+.wxParse .inline {
+  display: inline;
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .div {
+  margin: 0;
+  padding: 0;
+}
+
+.wxParse .h1 .text {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+.wxParse .h2 .text {
+  font-size: 1.5em;
+  margin: 0.83em 0;
+}
+.wxParse .h3 .text {
+  font-size: 1.17em;
+  margin: 1em 0;
+}
+.wxParse .h4 .text {
+  margin: 1.33em 0;
+}
+.wxParse .h5 .text {
+  font-size: 0.83em;
+  margin: 1.67em 0;
+}
+.wxParse .h6 .text {
+  font-size: 0.67em;
+  margin: 2.33em 0;
+}
+
+.wxParse .h1 .text,
+.wxParse .h2 .text,
+.wxParse .h3 .text,
+.wxParse .h4 .text,
+.wxParse .h5 .text,
+.wxParse .h6 .text,
+.wxParse .b,
+.wxParse .strong {
+  font-weight: bolder;
+}
+
+
+.wxParse .p {
+  margin: 1em 0;
+}
+
+.wxParse .i,
+.wxParse .cite,
+.wxParse .em,
+.wxParse .var,
+.wxParse .address {
+  font-style: italic;
+}
+
+.wxParse .pre,
+.wxParse .tt,
+.wxParse .code,
+.wxParse .kbd,
+.wxParse .samp {
+  font-family: monospace;
+}
+.wxParse .pre {
+  overflow: auto;
+  background: #f5f5f5;
+  padding: 16upx;
+  white-space: pre;
+  margin: 1em 0upx;
+}
+.wxParse .code {
+  display: inline;
+  background: #f5f5f5;
+}
+
+.wxParse .big {
+  font-size: 1.17em;
+}
+
+.wxParse .small,
+.wxParse .sub,
+.wxParse .sup {
+  font-size: 0.83em;
+}
+
+.wxParse .sub {
+  vertical-align: sub;
+}
+.wxParse .sup {
+  vertical-align: super;
+}
+
+.wxParse .s,
+.wxParse .strike,
+.wxParse .del {
+  text-decoration: line-through;
+}
+
+.wxParse .strong,
+.wxParse .s {
+  display: inline;
+}
+
+.wxParse .a {
+  color: deepskyblue;
+}
+
+.wxParse .video {
+  text-align: center;
+  margin: 22upx 0;
+}
+
+.wxParse .video-video {
+  width: 100%;
+}
+
+.wxParse .img {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  max-width: 100%;
+  overflow: hidden;
+}
+
+.wxParse .blockquote {
+  margin: 10upx 0;
+  padding: 22upx 0 22upx 22upx;
+  font-family: Courier, Calibri, "宋体";
+  background: #f5f5f5;
+  border-left: 6upx solid #dbdbdb;
+}
+.wxParse .blockquote .p {
+  margin: 0;
+}
+
+.wxParse .ul, .wxParse .ol {
+  display: block;
+  margin: 1em 0;
+  padding-left: 33upx;
+}
+.wxParse .ol {
+  list-style-type: disc;
+}
+.wxParse .ol {
+  list-style-type: decimal;
+}
+.wxParse .ol>weixin-parse-template,.wxParse .ul>weixin-parse-template {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+
+.wxParse .ol>.li,.wxParse .ul>.li {
+  display: list-item;
+  align-items: baseline;
+  text-align: match-parent;
+}
+.wxParse .ul .ul, .wxParse .ol .ul {
+  list-style-type: circle;
+}
+.wxParse .ol .ol .ul, .wxParse .ol .ul .ul, .wxParse .ul .ol .ul, .wxParse .ul .ul .ul {
+    list-style-type: square;
+}
+
+.wxParse .u {
+  text-decoration: underline;
+}
+.wxParse .hide {
+  display: none;
+}
+.wxParse .del {
+  display: inline;
+}
+.wxParse .figure {
+  overflow: hidden;
+}
+
+.wxParse .table {
+  width: 100%;
+}
+.wxParse .thead, .wxParse .tfoot, .wxParse .tr {
+  display: flex;
+  flex-direction: row;
+}
+.wxParse .tr {
+  width:100%;
+  display: flex;
+  border-right: 2upx solid #e0e0e0;
+  border-bottom: 2upx solid #e0e0e0;
+}
+.wxParse .th,
+.wxParse .td {
+  display: flex;
+  width: 1276upx;
+  overflow: auto;
+  flex: 1;
+  padding: 11upx;
+  border-left: 2upx solid #e0e0e0;
+}
+.wxParse .td:last {
+  border-top: 2upx solid #e0e0e0;
+}
+.wxParse .th {
+  background: #f0f0f0;
+  border-top: 2upx solid #e0e0e0;
+}

+ 22 - 0
XCX-Shop/main.js

@@ -4,6 +4,28 @@ import App from './App'
 import Vue from 'vue'
 import './uni.promisify.adaptor'
 Vue.config.productionTip = false
+//挂在全局
+import config from './common/config.js'
+Vue.prototype.config=config
+
+import *as Api from './common/api.js'
+Vue.prototype.$api=Api
+
+import *as Db from './common/db.js'
+Vue.prototype.$db=Db
+
+import store from './store/index.js'
+Vue.prototype.$store=store
+
+import * as Common from './common/common.js'
+Vue.prototype.$common=Common
+// import '@*/common/rem.js'
+//配置公共方法
+import common from './common/dianji.js'
+Vue.prototype.$onMultipleClicks=common.noMultipleClicks;
+
+import uView from "uview-ui/index.js"
+Vue.use(uView)
 App.mpType = 'app'
 const app = new Vue({
   ...App

+ 10 - 3
XCX-Shop/manifest.json

@@ -50,11 +50,18 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "",
+        "appid" : "wx14e994b1e9c9afdc",
         "setting" : {
-            "urlCheck" : false
+            "urlCheck" : false,
+            "postcss" : true,
+            "minified" : true
         },
-        "usingComponents" : true
+        "usingComponents" : true,
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "获取当前位置"
+            }
+        }
     },
     "mp-alipay" : {
         "usingComponents" : true

+ 218 - 2
XCX-Shop/pages.json

@@ -3,15 +3,231 @@
 		{
 			"path": "pages/index/index",
 			"style": {
-				"navigationBarTitleText": "uni-app"
+				"navigationBarTitleText": "首页"
+			}
+		},
+		{
+			"path": "pages/serve/index",
+			"style": {
+				"navigationBarTitleText": "服务"
+			}
+		},
+		{
+			"path": "pages/shopStore/index",
+			"style": {
+				"navigationBarTitleText": "商城"
+			}
+		},
+		{
+			"path": "pages/userInfo/index",
+			"style": {
+				"navigationBarTitleText": "个人中心"
+			}
+		},
+		{
+			"path": "pages/index/buyCar",
+			"style": {
+				"navigationBarTitleText": "燎原云保修"
+			}
+		},
+		{
+			"path": "pages/index/sellCar",
+			"style": {
+				"navigationBarTitleText": "爱车估价"
+			}
+		},
+		{
+			"path": "pages/index/buyUsedCar",
+			"style": {
+				"navigationBarTitleText": "买二手车"
+			}
+		},
+		{
+			"path": "pages/index/screen",
+			"style": {
+				"navigationBarTitleText": "筛选"
+			}
+		},
+		{
+			"path": "pages/index/newCarDetial",
+			"style": {
+				"navigationBarTitleText": "车辆详情"
+			}
+		},
+		{
+			"path": "pages/index/oldCarDetial",
+			"style": {
+				"navigationBarTitleText": "车辆详情"
+			}
+		},
+		{
+			"path": "pages/index/reservationCar",
+			"style": {
+				"navigationBarTitleText": "预约试驾"
+			}
+		},
+		{
+			"path": "pages/shopStore/detial",
+			"style": {
+				"navigationBarTitleText": "商品详情"
+			}
+		},
+		{
+			"path": "pages/shopStore/determineOrder",
+			"style": {
+				"navigationBarTitleText": "确认订单"
+			}
+		},
+		{
+			"path": "pages/shopStore/Address",
+			"style": {
+				"navigationBarTitleText": "添加地址"
+			}
+		},
+		{
+			"path": "pages/shopStore/saveAddress",
+			"style": {
+				"navigationBarTitleText": "新增收获地址"
+			}
+		},
+		{
+			"path": "pages/serve/detial",
+			"style": {
+				"navigationBarTitleText": "预约服务"
+			}
+		},
+		{
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "登录"
+			}
+		},
+		{
+			"path": "pages/index/newCarDetialInfo",
+			"style": {
+				"navigationBarTitleText": "品牌选车"
+			}
+		},
+		{
+			"path": "pages/index/basePrice",
+			"style": {
+				"navigationBarTitleText": "询底价"
+			}
+		},
+		{
+			"path": "pages/index/storeList",
+			"style": {
+				"navigationBarTitleText": "门店列表"
+			}
+		},
+		{
+			"path": "pages/userInfo/bindCar",
+			"style": {
+				"navigationBarTitleText": "车辆绑定"
+			}
+		},
+		{
+			"path": "pages/userInfo/orderList",
+			"style": {
+				"navigationBarTitleText": "我的询价单"
+			}
+		},
+		{
+			"path": "pages/userInfo/maintenance",
+			"style": {
+				"navigationBarTitleText": "预约保养"
+			}
+		},
+		{
+			"path": "pages/userInfo/TestDrive",
+			"style": {
+				"navigationBarTitleText": "预约试驾"
+			}
+		},
+		{
+			"path": "pages/index/active",
+			"style": {
+				"navigationBarTitleText": "活动"
+			}
+		},
+		{
+			"path": "pages/userInfo/bindlog",
+			"style": {
+				"navigationBarTitleText": "绑定记录"
+			}
+		},
+		{
+			"path": "pages/userInfo/baoxian",
+			"style": {
+				"navigationBarTitleText": "保险咨询"
+			}
+		},
+		{
+			"path": "pages/userInfo/Vehicle",
+			"style": {
+				"navigationBarTitleText": "订单列表"
+			}
+		},
+		{
+			"path": "pages/userInfo/replacementlog",
+			"style": {
+				"navigationBarTitleText": "车辆置换"
+			}
+		},
+		{
+			"path": "pages/userInfo/maintenanceList",
+			"style": {
+				"navigationBarTitleText": "维修记录"
 			}
 		}
 	],
+	
+	"easycom": {
+		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
+			// "^u-(.*)": "@/uview-ui_2.0.36/components/u-$1/u-$1.vue"
+		},
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
+		"navigationBarTitleText": "许润起亚",
 		"navigationBarBackgroundColor": "#F8F8F8",
 		"backgroundColor": "#F8F8F8"
 	},
+	"tabBar": {
+		"color": "#000000",
+		"selectedColor": "#d3393f",
+		"borderStyle": "black",
+		"iconWidth":"60px",
+		"backgroundColor": "#ffffff",
+		"list": [
+			{
+				"pagePath": "pages/index/index",
+				"iconPath": "./static/car.png",
+				"selectedIconPath": "./static/selectCar.png",
+				"text": "首页",
+				"selectedText":"首页"
+			},
+			{
+				"pagePath": "pages/serve/index",
+				"iconPath": "./static/serve.png",
+				"selectedIconPath": "./static/selectServe.png",
+				"text": "服务",
+				"selectedText":"服务"
+			},
+			{
+				"pagePath": "pages/shopStore/index",
+				"iconPath": "./static/shop.png",
+				"selectedIconPath": "./static/selectShop.png",
+				"text": "商城",
+				"selectedText":"商城"
+			},
+			{
+				"pagePath": "pages/userInfo/index",
+				"iconPath": "./static/Info.png",
+				"selectedIconPath": "./static/selectInfo.png",
+				"text": "个人中心",
+				"selectedText":"个人中心"
+			}
+		]
+		},
 	"uniIdRouter": {}
 }

+ 99 - 0
XCX-Shop/pages/index/active.vue

@@ -0,0 +1,99 @@
+<template>
+	<view class="notice_content">
+		<block v-if="showLoading">
+			<view class="loading_view tc mt100">
+				<icon class="weui-loading f14"></icon>
+				<text class="pl10">加载中...</text>
+			</view>
+		</block>
+		<block v-else>
+			<view class="notcie_title fw8 tc">{{article.title}}</view>
+			<view class="push_time f12 grey tr">{{article.create_time}}</view>
+			<view class="mt10">
+				<uParse :content="article.describe" noData="加载中..."></uParse>
+			</view>
+		</block>
+	</view>
+</template>
+<script>
+	import uParse from '@/components/gaoyia-parse/parse.vue'
+	export default {
+		data() {
+			return {
+				article: {},
+				showLoading: true,
+			}
+		},
+		components: {
+			uParse
+		},
+		onLoad(option) {
+			var id = option.id;
+			if (!id) {
+				uni.showToast({
+					icon: 'none',
+					title: '缺少必有参数',
+					success() {
+						setTimeout(() => {
+							uni.navigateBack({
+								delta: 1
+							})
+						}, 1500)
+					}
+				})
+			}
+			this.getAdetail(id);
+		},
+		onShareAppMessage(res) {
+			if (res.from === 'button') { // 来自页面内分享按钮
+				console.log(res.target)
+			}
+			return {
+				title: this.$config.appShareTitle
+			}
+		},
+		methods: {
+			getAdetail(id) {
+				var that = this;
+				that.$api.getAction(id, res => {
+					if (res.code == 0) {
+						that.showLoading = false;
+						that.article = res.data;
+						console.log(that.article)
+					}
+				})
+			},
+			//预览图片
+			preview(src, e) {
+				uni.previewImage({
+					urls: src,
+				})
+			},
+			navigate(href, e) {}
+		}
+	}
+</script>
+
+<style scoped>
+	.notice_content {
+		padding: 10rpx 20rpx;
+	}
+
+	@import url("@/components/u-parse/u-parse.css");
+
+	.tc {
+		text-align: center;
+	}
+
+	.mt100 {
+		margin-top: 100rpx;
+	}
+
+	.fw8 {
+		font-weight: 800;
+	}
+
+	.tr {
+		text-align: right;
+	}
+</style>

+ 327 - 0
XCX-Shop/pages/index/basePrice.vue

@@ -0,0 +1,327 @@
+<template>
+	<view class="body">
+		<view class="header">
+			<view class="headercon">
+				<view>
+					<p>
+						<image style="width: 20vw; height: 20vw;" :src="detial.img_url.url"></image>
+					</p>
+				</view>
+				<view style="margin-left: 4vw;">
+					<p style="font-weight: 550; font-size: 1rem;">{{detial.series_name}}</p>
+					<p>
+						<span>品牌:</span> <span>{{detial.brand_name}}</span> </p>
+					<view style="display: flex; margin-top: 2vw;">
+					<span>指导价:</span>
+					<span style="color: red;">{{Number(detial.sale_price/10000)}}w</span>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="content">
+			<view class="contentInfo">
+				<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8; margin-top: 2vw;">
+					<view  style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">您的姓名</span>
+							<input type="text"
+							placeholder="姓名"
+							v-model="name"
+							style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+						
+					</view>
+				</view>
+			<!-- 车牌-->
+			<view style=" display: flex; width: 85vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex; align-items: center;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">联系方式</span> <input type="text"
+						placeholder="联系方式"
+						v-model="phone"
+						style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 10vw; " /> </p>
+			<view style="display: flex; align-items: center;">
+			</view>			
+			</view>
+			<!-- 您的城市 -->
+			<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8; " @click="city" >
+				<view  style="display: flex; align-items: center;"><span style="color: red;  line-height: 11vw;"  >*</span> <span
+						<p  style=" margin-left: 1vw;">您的城市</p>
+						<p> <input style="margin-left: 8vw;" v-model="citys" type="text" disabled="true" placeholder="请选择省/市/区"> </p>
+						<p>
+							<image style="width: 5vw; height: 5vw; margin-left: 5vw;" src="../../static/dingwei.png"></image>
+						</p>
+					
+				</view>
+			</view>
+			<!-- 意向稳门店 -->
+			<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;" @click="LikeStore">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">意向门店</span> <input type="text"
+						placeholder="请选择意向门店"
+						v-model="storeName"
+						style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 9vw; " /> </p>
+			</view>
+		<!--  联系人-->
+		<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+			<view style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+					style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">旧车置换</span>
+				<view style=" width: 37vw; margin-left: 9vw; display: flex; align-items: center;">
+					<u-radio-group v-model="CarRadio"  @change="radioGroupChange">
+								<u-radio 
+									@change="radioChange" 
+									active-color="red"
+									v-for="(item, index) in Carlist" :key="index" 
+									:name="item.name"
+									:disabled="item.disabled"
+								>
+									{{item.name}}
+								</u-radio>
+							</u-radio-group>
+				</view>
+			</view>
+		</view>
+		<u-toast ref="uToast" />
+			<!-- button -->
+			<view class="button" @click="submit">提交</view>
+			<u-picker mode="region"  v-model="show" @cancel="cancel" @confirm="confirm"
+				:area-code='["13", "1303", "130304"]'></u-picker>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import UniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue'
+	export default {
+		components: {
+			UniDataSelect
+		},
+		data() {
+			return {
+				value: 0,
+				CarNumber:false,
+				show:false,
+				region:'',
+				storeName:'',
+				storeId:'',
+				name:'匿名',
+				phone:'',
+				citys:'',
+				VehicleSeries:'',
+				selectRadio:'先生',
+				CarRadio:'否',
+				Radios:false,
+				detial:{},
+				id:'',
+				list: [{
+						name: '先生',
+						disabled: false
+					},
+					{
+						name: '女士',
+						disabled: false
+					},
+				],
+				Carlist:[{
+						name: '是',
+						disabled: false
+					},
+					{
+						name: '否',
+						disabled: false
+					}],
+				range: [{
+						value: 0,
+						text: "首保"
+					},
+					{
+						value: 1,
+						text: "定保"
+					},
+					{
+						value: 2,
+						text: "检测"
+					},
+					{
+						value: 3,
+						text: "维修"
+					},
+				],
+				chexi: [{
+						value: 0,
+						text: "首保"
+					},
+					{
+						value: 1,
+						text: "定保"
+					},
+					{
+						value: 2,
+						text: "检测"
+					},
+					{
+						value: 3,
+						text: "维修"
+					},
+				],
+			}
+		},
+		onShow(object){
+			if(object){
+				this.storeName=object.name
+				this.storeId=object.id
+			}
+		},
+		onLoad(option) {
+			if(option.id){
+				this.id=option.id
+				this.getBuyCarDetialInfo(option.id)
+			}
+			if(this.$db.get('tel')){
+				this.phone=this.$db.get('tel')
+			}
+		},
+		methods: {
+			submit(){
+			if(!this.$db.get('token')){
+				uni.navigateTo({
+					url:'/pages/login/login'
+				})
+				return
+			}
+				
+			if(this.phone!=''){
+			this.$api.postAskPrice({model:this.id, shop:this.storeId,name:this.name,tel:this.phone,area:this.citys,displace:this.Radios},res=>{
+				if(res.code==0){
+					this.successToast('提交成功')
+					uni.navigateBack({
+						delta: 1
+					})
+				}else{
+					this.errorToast('请输入必填项')
+				}
+			})	
+			}else{
+				this.errorToast('请输入必填项')
+			}
+			
+			},
+			city() {
+				this.show = true
+			},
+			LikeStore(){
+				uni.navigateTo({
+					url:'/pages/index/storeList'
+				})
+			},
+			getBuyCarDetialInfo(id){
+				this.$api.getBuyCarDetial(id,res=>{
+					if(res.code==0){
+						this.detial=res.data
+					}
+				})
+			},
+			confirm(e) {
+				this.citys=e.province.label+'-'+ e.city.label+'-'+e.area.label
+				console.log("确认", e)
+			},
+			cancel(e) {
+				this.show=false
+				console.log("取消")
+			},
+			radioChange(e){
+			if(e=='是'){
+				this.Radios=true
+			}else{
+					this.Radios=false
+			}
+			},
+			radioGroupChange(e){
+				console.log(e)
+			},
+			checkboxChange(e) {
+				if(this.CarNumber==true){
+					this.CarNumber = false
+				}else{
+					this.CarNumber = true
+				}
+				
+			},
+			change(e) {
+				console.log("e:", e);
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8f8;
+
+		.header {
+			width: 100vw;
+			height: 13vh;
+			background-color: white;
+			box-sizing: border-box;
+			display: flex;
+			flex-direction: column;
+			padding: 2vw;
+
+			.headercon {
+				width: 96vw;
+				height: 13vh;
+				display: flex;
+				padding: 2vw;
+			}
+
+			.headerContent {
+				display: flex;
+				margin-top: 4vw;
+			}
+		}
+
+		.content {
+			width: 100vw;
+			height: 70vh;
+			box-sizing: border-box;
+			padding: 0 2vw;
+			border-radius: 5px;
+			overflow: hidden;
+
+			.contentInfo {
+				width: 96vw;
+				height: 70vh;
+				box-sizing: border-box;
+				padding: 2vw;
+				background-color: white;
+				border-radius: 10px;
+				margin-top: 2vw;
+			}
+		}
+		.button{
+			width: 90vw;
+			height: 10vw;
+			margin-top: 10vw;
+			background-color: red;
+			line-height: 10vw;
+			border-radius: 5vw;
+			color: white;
+			text-align: center;
+		}
+
+	}
+</style>

+ 533 - 0
XCX-Shop/pages/index/buyCar.vue

@@ -0,0 +1,533 @@
+<template>
+	<view class="body">
+		<view class="header">
+			<view style="margin-right: 6vw;" :class=" index==0? 'xuanzhong' : 'Car'" @click="switchTab(0)">新车</view>
+			<view :class=" index==1? 'xuanzhong' : 'Car'" @click="switchTab(1)">二手车</view>
+		</view>
+		<view class="content">
+			<!-- 新车 -->
+			<view class="newCar" v-if="index==0? true : false ">
+				<view class="search">
+					<p>
+						<image style="width: 5vw; height: 5vw; margin-top: 1vw; " src="../../static/search.png"></image>
+					</p>
+					<p style="margin-left: 2vw;"> <input style="font-size: 0.75rem; width: 60vw; height: 10vw;"
+							type="text" name="" v-model="CarName" id="" placeholder="搜索车辆" @blur="searchCar"> </p>
+				</view>
+				<!-- 项 -->
+				<view class="content_up">
+					<view
+						style=" width: 100vw; height: 7vw; font-size: 0.9rem; font-weight: 550; padding-left: 8vw; padding-top: 2vw;">
+						热门车系
+					</view>
+				<view class="content_con">
+					<view class="model" v-for="(item,index) in NewCarList" :key="index"
+						@click="newDetial(item)">
+						<view style="margin-left: 2vw; margin-top: 2vw;">
+							<image style="width: 15vw; height: 15vw;" :src="item.img.url"></image>
+						</view>
+						<view style="margin-top: 5vw; margin-left: 3vw;">
+							<p
+								style="width: 40vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; ">
+								{{item.name}}
+							</p>
+							<p> <span style="font-size: 0.75rem;">指导价:</span> <span
+									style="font-size: 0.75rem; color: red;">{{Number(item.min_price/10000)}}万起</span>
+							</p>
+						</view>
+						<view
+							style="width: 20vw; margin-left: 2vw; margin-top: 6vw; height: 8vw; background-color: #fff5f5; color: red;  text-align: center; font-size: 0.75rem; line-height: 8vw; border-radius: 4vw;">
+							<p>{{item.brand_name}} </p>
+						</view>
+					</view>
+				
+				</view>
+				</view>
+			</view>
+			<!-- 二手车 -->
+			<view class="oldCar" v-if="index==1? true : false ">
+				<view class="search">
+					<p>
+						<image style="width: 5vw; height: 5vw; margin-top: 1vw; " src="../../static/search.png"></image>
+					</p>
+					<p style="margin-left: 2vw;"> <input style="font-size: 0.75rem; width: 60vw; height: 10vw;"
+							type="text" name="" id="" placeholder="搜索车辆"> </p>
+				</view>
+				<!-- 买车/卖车 -->
+				<view style="display: flex; justify-content: space-around; margin-top: 2vw;">
+					<view style="display: flex;" @click="BuyUsedCar">
+						<p style="margin-top:2vw;">
+							<image style="width: 8vw; height: 6vw;" src="../../static/buyCar.png"></image>
+						</p>
+						<p style="font-size: 0.9rem; margin-top: 2vw; margin-left: 2vw;">买二手车 </p>
+						<!-- 	<u-popup :show="show"  mode="top">
+						            <view style="width: 100vw; height: 50vh;">
+						                <text>出淤泥而不染,濯清涟而不妖</text>
+						            </view>
+								</u-popup> -->
+					</view>
+					<view style="display: flex;" @click="sellCar">
+						<p style="margin-top:2vw;">
+							<image style="width: 8vw; height: 6vw;" src="../../static/sellCar.png"></image>
+						</p>
+						<p style="font-size: 0.9rem; margin-top: 2vw; margin-left: 2vw;">卖二手车</p>
+					</view>
+				</view>
+				<!-- 点击筛选 -->
+				<view class="screen">
+					<view style="display: flex;" @click="screen">
+						<p style="font-size: 0.75rem;">筛选</p>
+						<p>
+							<image style="width: 5vw; height: 5vw;" src="../../static/screen.png"></image>
+						</p>
+					</view>
+					<!-- 	<view style="display: flex;">
+						<p style="font-size: 0.75rem;" @click="sortList">默认排序</p>
+						<p v-if="sortHeight<20? true : false ">
+							<image style="width: 5vw; height: 5vw;" src="../../static/xiangxia.png"></image>
+						</p>
+						<view class="sort" :style="{ height:sortHeight +'vw'}">
+							<view v-if="sortHeight>20? true : false ">
+								<p style="font-size: 0.95rem; margin-top: 3vw;">默认排序</p>
+								<p style="font-size: 0.95rem; margin-top: 3vw; ">价格从低到高</p>
+								<p style="font-size: 0.95rem; margin-top: 3vw; ">价格从高到低</p>
+							</view>
+						</view>
+					</view> -->
+					<view style="display: flex;">
+						<p style="font-size: 0.75rem;" @click="brands">品牌</p>
+						<p v-if="brand>20? true : false ">
+							<image style="width: 5vw; height: 5vw;" src="../../static/xiangxia.png"></image>
+						</p>
+						<view class="caragecss" :style="{ height:brand +'vw'}">
+							<view style=" width: 98vw;flex-wrap: wrap; display: flex;" v-if="brand>20? true : false ">
+								<p class="agecss" v-for="(item,index)  in brandList " @click="screenCarList(item,1)">
+									{{item.name}}</p>
+							</view>
+						</view>
+					</view>
+					<view style="display: flex;">
+						<p style="font-size: 0.75rem;" @click="carAges">车龄(年)</p>
+						<p>
+							<image style="width: 5vw; height: 5vw;" src="../../static/xiangxia.png"></image>
+						</p>
+						<view class="caragecss" :style="{ height:carAge +'vw'}">
+							<view style=" width: 98vw; flex-wrap: wrap; display: flex;" v-if="carAge>20? true : false ">
+								<p class="agecss" v-for="(item,index)  in carAgeList " @click="screenCarList(item,2)">
+									{{item.name}}</p>
+							</view>
+						</view>
+					</view>
+					<view style="display: flex;">
+						<p style="font-size: 0.75rem;" @click="mileages">里程(万公里)</p>
+						<p v-if="mileage>20? true : false ">
+							<image style="width: 5vw; height: 5vw;" src="../../static/xiangxia.png"></image>
+						</p>
+						<view class="caragecss" :style="{ height:mileage +'vw'}">
+							<view style=" width: 98vw; flex-wrap: wrap; display: flex;"
+								v-if="mileage>20? true : false ">
+								<p class="agecss" v-for="(item,index)  in mileageList " @click="screenCarList(item,3)">
+									{{item.name}}</p>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 内容 -->
+				<view class="usedCar">
+					<view class="userCarContent">
+						<view class="model" v-for="(item,index) in  userdCar" :key="index"
+							@click="oldCarDetial(item.id)">
+							<view style="margin-left: 2vw; margin-top: 2vw;">
+								<image style="width: 15vw; height: 15vw;" :src="item.picture.url"></image>
+							</view>
+							<view style="margin-top: 5vw; margin-left: 3vw;">
+								<p
+									style="width: 40vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; ">
+									{{item.brand_name}}
+								</p>
+								<p> <span style="font-size: 0.75rem;">指导价:</span> <span
+										style="font-size: 0.75rem; color: red;">{{Number(item.sale_price/10000)}}万起</span>
+								</p>
+							</view>
+							<view
+								style="width: 20vw; margin-left: 2vw; margin-top: 6vw; height: 8vw; background-color: #fff5f5; color: red;  text-align: center; font-size: 0.75rem; line-height: 8vw; border-radius: 4vw;">
+								<p> {{item.status_text}} </p>
+							</view>
+						</view>
+					</view>
+				</view>
+
+			</view>
+
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+		data() {
+			return {
+				show: true,
+				index: 0,
+				sortHeight: 0,
+				brand: 0,
+				carAge: 0,
+				mileage: 0,
+				NewCarList: [],
+				CarName: '',
+				userdname: '',
+				userdCar: [],
+				brandList: [],
+				carAgeList: [{
+						name: '不限',
+						id: ''
+					},
+					{
+						name: '1年内',
+						id: '0,1'
+					},
+					{
+						name: '1-3年',
+						id: '1,3'
+					},
+					{
+						name: '3-5年',
+						id: '3,5'
+					},
+					{
+						name: '5-8年',
+						id: '5,8'
+					},
+					{
+						name: '8-10年',
+						id: '8,10'
+					},
+					{
+						name: '10年以上',
+						id: '10'
+					}
+				],
+				mileageList: [{
+						name: '不限',
+						id: ''
+					},
+					{
+						name: '1万公里以内',
+						id: '0,1'
+					},
+					{
+						name: '1-3万公里',
+						id: '1,3'
+					},
+					{
+						name: '3-6万公里',
+						id: '3,6'
+					},
+					{
+						name: '6-10万公里',
+						id: '6,10'
+					},
+					{
+						name: '10-20万公里',
+						id: '10,20'
+					},
+					{
+						name: '20万公里以上',
+						id: '20'
+					}
+				],
+			}
+		},
+		onLoad(option) {
+			if (option.userdCar) {
+				this.userdCar = JSON.parse(decodeURIComponent(option.userdCar))
+				this.index = 1
+			}
+			this.SearchType()
+			this.getNewCarList(1, '')
+		},
+		methods: {
+			// 二手车列表
+			UsedCarList(name, brand, gearbox, color, displacement, emission, seat_count, oil_type, price_range,
+				mileage__range, years_range) {
+				this.$api.getUsedCarList(name, brand, gearbox, color, displacement, emission, seat_count, oil_type,
+					price_range, mileage__range, years_range, res => {
+						if (res.code == 0) {
+							this.userdCar = res.data
+						}
+					})
+			},
+			screenCarList(item, index) {
+				this.mileage = 0
+				this.brand = 0,
+					this.carAge = 0
+				if (index == 1) {
+					this.UsedCarList(this.userdname, item.id, '', '', '', '', '', '', '', '', '')
+				} else if (2) {
+					this.UsedCarList(this.userdname, '', '', '', '', '', '', '', '', '', item.id)
+				} else if (3) {
+					this.UsedCarList(this.userdname, '', '', '', '', '', '', '', '', item.id, '')
+				}
+			},
+			// 搜索类型
+			SearchType() {
+				this.$api.getSearchType(res => {
+					if (res.code == 0) {
+						this.brandList = res.data.brands
+					}
+				})
+			},
+			searchCar() {
+				this.getNewCarList('', this.CarName)
+			},
+			getNewCarList(is_hot, name) {
+				this.$api.getNewCar(is_hot, name, res => {
+					if (res.code == 0) {
+						this.NewCarList = res.data
+					}
+				})
+			},
+			oldCarDetial(id) {
+				uni.navigateTo({
+					url: '/pages/index/oldCarDetial?id=' + id
+				})
+			},
+			mileages() {
+				if (this.mileage > 1) {
+					this.mileage = 0
+				} else {
+					this.mileage = 50
+					this.sortHeight = 0,
+						this.brand = 0,
+						this.carAge = 0
+				}
+			},
+			carAges() {
+				if (this.carAge > 1) {
+					this.carAge = 0
+				} else {
+					this.carAge = 50
+					this.mileage = 0
+					this.sortHeight = 0,
+						this.brand = 0
+
+				}
+			},
+			sortList() {
+				if (this.sortHeight > 1) {
+					this.sortHeight = 0
+				} else {
+					this.sortHeight = 50
+					this.mileage = 0
+					this.brand = 0,
+						this.carAge = 0
+				}
+			},
+			brands() {
+				if (this.brand > 1) {
+					this.brand = 0
+				} else {
+					this.brand = 80
+					this.mileage = 0
+					this.sortHeight = 0,
+						this.carAge = 0
+				}
+			},
+			switchTab(index) {
+				this.index = index
+				if (index == 1) {
+					this.UsedCarList(this.userdname, '', '', '', '', '', '', '', '', '', '')
+				}
+			},
+			screen() {
+				uni.navigateTo({
+					url: '/pages/index/screen'
+				})
+			},
+			sellCar() {
+				uni.navigateTo({
+					url: '/pages/index/sellCar'
+				})
+			},
+			BuyUsedCar() {
+				uni.navigateTo({
+					url: '/pages/index/buyUsedCar'
+				})
+			},
+			newDetial(item) {
+				uni.navigateTo({
+					url: '/pages/index/newCarDetial?DetialInfo=' + encodeURIComponent(JSON.stringify(item))
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 100vh;
+
+		.sort {
+			z-index: 999;
+			position: absolute;
+			width: 100vw;
+			transition: 0.3s;
+			height: 20vh;
+			top: 43vw;
+			background-color: #f8f8f8;
+			left: 0;
+			box-sizing: border-box;
+			overflow-y: auto;
+			border-radius: 0px 0px 10px 10px;
+		}
+
+		.caragecss {
+			z-index: 999;
+			position: absolute;
+			width: 100vw;
+			transition: 0.3s;
+			height: 20vh;
+			top: 43vw;
+			display: flex;
+			background-color: white;
+			left: 0;
+			box-sizing: border-box;
+			overflow-y: auto;
+			border-radius: 0px 0px 10px 10px;
+			width: 100vw;
+			display: flex;
+			flex-wrap: wrap; // 强制换行
+		}
+
+		.agecss {
+			width: 28vw;
+			height: 8vw;
+			margin-left: 2vw;
+			margin-right: 2vw;
+			font-size: 0.75rem;
+			text-align: center;
+			margin-top: 2vw;
+			background-color: #f8f8f8;
+			border: 1px solid #f8f8f8;
+			line-height: 8vw;
+		}
+
+		.header {
+			display: flex;
+			width: 100vw;
+			height: 11vw;
+			margin-bottom: 1vw;
+			justify-content: center;
+			font-size: 0.8rem;
+			line-height: 10vw;
+			background-color: white;
+
+			.Car {
+				margin-right: 4vw;
+			}
+
+			.xuanzhong {
+				text-align: center;
+				color: red;
+				height: 10vw;
+				width: 13vw;
+				border-bottom: 1px solid red;
+			}
+
+		}
+
+		// 内容
+		.content {
+			.newCar {
+				width: 100vw;
+				height: 93vh;
+				overflow: hidden;
+
+				.search {
+					box-sizing: border-box;
+					padding: 0 4vw;
+					width: 90vw;
+					margin-left: 5vw;
+					height: 12vw;
+					border-radius: 7vw;
+					background-color: #f8f8f8;
+					display: flex;
+					margin-top: 1vw;
+					align-items: center;
+				}
+			}
+
+			.content_up {
+				width: 100vw;
+				height: 93vh;
+
+				.content_con {
+					width: 100vw;
+					height: 80vh;
+					overflow-y: auto;
+					background-color: white;
+					padding: 0 4vw 0 4vw;
+
+					.model {
+						width: 90vw;
+						height: 20vw;
+						display: flex;
+						margin-top: 2vw;
+						background-color: #f8f8f8;
+					}
+				}
+			}
+
+			.oldCar {
+				width: 100vw;
+				height: 93vh;
+				overflow: hidden;
+
+				.search {
+					box-sizing: border-box;
+					padding: 0 4vw;
+					width: 90vw;
+					margin-left: 5vw;
+					height: 12vw;
+					border-radius: 7vw;
+					background-color: #f8f8f8;
+					display: flex;
+					margin-top: 1vw;
+					align-items: center;
+				}
+
+				.screen {
+					width: 100vw;
+					display: flex;
+					margin-top: 1vw;
+					justify-content: space-around;
+				}
+
+				.usedCar {
+					width: 100vw;
+					height: 77vh;
+
+					.userCarContent {
+						width: 100vw;
+						height: 77vh;
+						overflow-y: auto;
+						display: flex;
+						flex-direction: column;
+						box-sizing: border-box;
+						padding-left: 5vw;
+						padding-bottom: 4vw;
+						background-color: #f8f8f8;
+
+						.model {
+							width: 90vw;
+							height: 20vw;
+							display: flex;
+							margin-top: 2vw;
+							background-color: white;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 217 - 0
XCX-Shop/pages/index/buyUsedCar.vue

@@ -0,0 +1,217 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view style="width: 85vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">您的姓名</span> <input type="text"
+						placeholder="请输入姓名"
+						style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 10vw; " /> </p>
+			</view>
+			<view style="width: 85vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+				<view style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">您的性别</span>
+					<view style="display: flex; align-items: center; margin-left: 4vw;">
+						<u-radio-group v-model="selectRadio"  @change="radioGroupChange">
+									<u-radio 
+										@change="radioChange" 
+										active-color="red"
+										v-for="(item, index) in list" :key="index" 
+										:name="item.name"
+										:disabled="item.disabled"
+									>
+										{{item.name}}
+									</u-radio>
+								</u-radio-group>
+					</view>
+				</view>
+			</view>
+			<!-- 意向品牌 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">意向品牌</span> <input type="text"
+						placeholder="请选择你的意向品牌"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; "
+						@focus="searchList" @blur="LoseBlur" /> </p>
+				<p style="display: flex; align-items: center;">
+					<image style="width: 5vw; height: 5vw;" :src="jiantou"> </image>
+				</p>
+				<view style="position: absolute;" class="carModel" v-if="carList">
+					<p  class="carList"> 奥迪A6 </p>
+				</view>
+			</view>
+			<!-- 车龄 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车龄</span> <input type="text"
+						placeholder="请选择你的车龄"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 16vw; "
+						@focus="ageList" @blur="ageBlur" /> </p>
+				<p style="display: flex; align-items: center;">
+					<image style="width: 5vw; height: 5vw;" :src="agejiantou"> </image>
+				</p>
+				<view style="position: absolute;" class="ageModel" v-if="ageShow">
+					<p class="carList" v-for="(item,index) in carage" :key="index" > {{item.age}} </p>
+				</view>
+			</view>
+			<!-- 行驶里程 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">行驶里程</span> <input type="number"
+						placeholder="请输入行驶里程"
+						style="font-size: 0.8rem; width: 48vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+				<p style="display: flex; align-items: center; font-size: 0.85rem;">
+					公里
+				</p>
+			</view>
+			<!-- 行驶里程 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车辆所在地</span> <input type="number"
+						placeholder="请输入车辆所在地"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 5vw; " />
+				</p>
+			</view>
+			<!-- 备注说明 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">备注说明</span> <input type="number"
+						placeholder="留言备注,我们将尽量安排"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 8vw; " />
+				</p>
+			</view>
+			<view class="button" @click="submit">提交</view>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				selectRadio: '先生',
+				carList: false,
+				ageShow:false,
+				carage:[
+					{age:'1年内'},
+					{age:'1-3年'},
+					{age:'3-5年'},
+					{age:'5-8年'},
+					{age:'8-10年'},
+					{age:'10年以上'}
+				],
+				jiantou:'../../static/xiajiantou.png',
+				agejiantou:'../../static/xiajiantou.png',
+				list: [{
+						name: '先生',
+						disabled: false
+					},
+					{
+						name: '女士',
+						disabled: false
+					},
+				]
+			}
+		},
+		methods: {
+			// submit(){
+			// 	this.postUserdCar({},res=>{
+			// 		if(res.code==0){
+						
+			// 		}
+			// 	})
+			// },
+			radioGroupChange(e){
+				console.log(e)
+			},
+			ageList(){
+				this.ageShow=true
+				this.agejiantou='../../static/shangjiantou.png'
+			},
+			ageBlur(){
+				this.ageShow = false
+				this.agejiantou='../../static/xiajiantou.png'
+				
+			},
+			searchList() {
+				this.carList = true
+				this.jiantou='../../static/shangjiantou.png'
+			},
+			LoseBlur(){
+				this.carList = false
+				this.jiantou='../../static/xiajiantou.png'
+				
+			},
+			// 选中某个单选框时,由radio时触发
+			radioChange(e) {
+				console.log(e);
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		display: flex;
+		// flex-direction: column;
+		justify-content: center;
+
+		.content {
+			width: 90vw;
+			height: 65vh;
+			background-color: white;
+			border-radius: 15px;
+			box-sizing: border-box;
+			padding: 2vw;
+
+			.carModel {
+				width: 87vw;
+				height: 80vw;
+				border-radius: 5vw;
+				background-color: white;
+				border: 0.5px solid #dbddbd;
+				top: 33vw;
+				left: 5vw;
+				overflow: auto;
+				z-index: 99;
+			}
+
+			.carList {
+				width: 85vw;
+				line-height: 10vw;
+				font-size: 0.85rem;
+				height: 10vw;
+				border-bottom: 0.5px solid #f8f8f8;
+				color: grey;
+				box-sizing: border-box;
+				padding: 0 4vw;
+			}
+			.ageModel{
+				width: 87vw;
+				height: 80vw;
+				border-radius: 5vw;
+				z-index: 99;
+				background-color: white;
+				border: 0.5px solid #dbddbd;
+				top: 43vw;
+				left: 5vw;
+				text-align: center;
+				overflow: auto;
+			}
+		}
+		.button{
+			width: 85vw;
+			height: 10vw;
+			margin-top: 10vw;
+			background-color: red;
+			line-height: 10vw;
+			border-radius: 5vw;
+			color: white;
+			text-align: center;
+		}
+	}
+</style>

+ 160 - 30
XCX-Shop/pages/index/index.vue

@@ -1,52 +1,182 @@
 <template>
-	<view class="content">
-		<image class="logo" src="/static/logo.png"></image>
-		<view class="text-area">
-			<text class="title">{{title}}</text>
+	<view class="body">
+		<uniSwiperDot :info="info" :current="current" field="content" mode="default" :dots-styles=dotsStyles>
+			<swiper autoplay="true" circular="true" interval="4000" duration="500" class="swiper-box">
+				<swiper-item v-for="(item ,index) in info" :key="index" @click="clickItem(item)">
+					<image class="imagestyle" :src="item.cover.url" mode=""></image>
+				</swiper-item>
+			</swiper>
+		</uniSwiperDot>
+		<view class="content">
+			<view class="RedCar" @click="buyCar">
+				<p
+					style="width: 46vw; text-align: center; color: red; line-height: 10vw; margin-top: 8vw; font-weight: 550;">
+					买车</p>
+				<p style="width: 46vw; text-align: center; color: #e0e0e0e0;"> <span>BUY</span>
+					<sapn>CAR</sapn>
+				</p>
+		<!-- 		<p>
+					<image style="width: 50vw; height: 50vw; margin-top: -7vw; " src="../../static/redcar.png"></image>
+				</p> -->
+			</view>
+			<view class="whiteCar" @click="sellCar">
+				<p style="width: 46vw; text-align: center;  color: blue; margin-top: 10vw; font-weight: 550;">卖车</p>
+				<p style="width: 46vw; text-align: center;  color: #e0e0e0e0; margin-top: 2vw;"> <span>BUY</span>
+					<sapn>CAR</sapn>
+				</p>
+				<!-- <p>
+					<image style="width: 40vw; height: 40vw; margin-top: -3vw; margin-left: 5vw; "
+						src="../../static/whiteCar.png"></image>
+				</p> -->
+			</view>
+		</view>
+		<view class="floot">
+			<view class="model" v-for="(item,index) in NewCarList" :key="index" @click="newDetial(item)">
+				<view style="margin-left: 2vw; margin-top: 2vw;">
+					<image style="width: 15vw; height: 15vw;" :src="item.img.url"></image>
+				</view>
+				<view style="margin-top: 5vw; margin-left: 3vw;">
+					<p
+						style="width: 40vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; ">
+						{{item.name}}
+					</p>
+					<p> <span style="font-size: 0.75rem;">指导价:</span> <span
+							style="font-size: 0.75rem; color: red;">{{Number(item.min_price/10000)}}万起</span>
+					</p>
+				</view>
+				<view
+					style="width: 20vw; margin-left: 2vw; margin-top: 6vw; height: 8vw; background-color: #fff5f5; color: red;  text-align: center; font-size: 0.75rem; line-height: 8vw; border-radius: 4vw;">
+					<p>{{item.brand_name}} </p>
+				</view>
+			</view>
 		</view>
 	</view>
+
 </template>
 
 <script>
+	import uniSwiperDot from '../../uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue'
 	export default {
+		components: {
+			uniSwiperDot
+		},
 		data() {
 			return {
-				title: 'Hello'
+				dotsStyles: {
+					backgroundColor: 'rgba(83, 200, 249,0.3)',
+					border: '1px rgba(83, 200, 249,0.3) solid',
+					color: '#fff',
+					bottom: 2,
+					selectedBackgroundColor: 'white',
+					selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
+				},
+				info: [],
+				NewCarList: []
 			}
 		},
 		onLoad() {
-
+			this.getNewCarList(1, '')
+			this.Swiper()
 		},
 		methods: {
-
+			newDetial(item) {
+				uni.navigateTo({
+					url: '/pages/index/newCarDetial?DetialInfo=' + encodeURIComponent(JSON.stringify(item))
+				})
+			},
+			// 热门车系
+			getNewCarList(is_hot, name) {
+				this.$api.getNewCar(is_hot, name, res => {
+					if (res.code == 0) {
+						this.NewCarList = res.data
+					}
+				})
+			},
+			clickItem(item) {
+				console.log(item)
+				uni.navigateTo({
+					url: '/pages/index/active?id=' + item.id
+				})
+			},
+			Swiper() {
+				this.$api.getSwiper(res => {
+					if (res.code == 0) {
+						this.info = res.data
+					}
+				})
+			},
+			buyCar() {
+				uni.navigateTo({
+					url: "/pages/index/buyCar"
+				})
+			},
+			sellCar() {
+				uni.navigateTo({
+					url: "/pages/index/sellCar"
+				})
+			}
 		}
 	}
 </script>
 
-<style>
-	.content {
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
 
-	.logo {
-		height: 200rpx;
-		width: 200rpx;
-		margin-top: 200rpx;
-		margin-left: auto;
-		margin-right: auto;
-		margin-bottom: 50rpx;
-	}
+		.content {
+			width: 92vw;
+			height: 20vh;
+			margin-left: 4vw;
+			box-sizing: border-box;
+			border-top: 0.5px solid #f6f6f6;
+			border-bottom: 0.5px solid #f6f6f6;
+			display: flex;
+			margin-top: 2vw;
 
-	.text-area {
-		display: flex;
-		justify-content: center;
-	}
+			.RedCar {
+				width: 46vw;
+				border-right: 0.5px solid #f6f6f6;
+			}
+
+			.whiteCar {
+				width: 46vw;
+			}
+
+		}
+
+		.floot {
+			width: 100vw;
+			height: 40vh;
+			overflow-y: auto;
+			box-sizing: border-box;
+			padding:0 4vw ;
+			.model {
+				width: 92vw;
+				height: 20vw;
+				display: flex;
+				margin-top: 2vw;
+				background-color: #f8f8f8;
+			}
+		}
+
+		.imagestyle {
+			margin-top: 0vw;
+			width: 100%;
+			height: 100%;
+		}
+
+		.swiper-box {
+			height: 60vw;
+		}
 
-	.title {
-		font-size: 36rpx;
-		color: #8f8f94;
+		// .swiper-box {
+		// 	height: 40vw;
+		// }
+		// .imagestyle {
+		// 	margin-top: 0vw;
+		// 	width: 100%;
+		// 	height: 100%
+		// }
 	}
-</style>
+</style>

+ 131 - 0
XCX-Shop/pages/index/newCarDetial.vue

@@ -0,0 +1,131 @@
+<template>
+	<view class="body">
+		<view class="hearde">
+			<image   style="width: 100%; height: 100%;" :src="detialId.img.url"></image>
+		</view>
+		<view class="carTitle">
+			<view style="display: flex; margin-top: 2vw;"> <p style="font-weight: 550; font-size: 1.2rem;">{{detialId.name}}</p> <p style="width: 20vw; margin-left: 8vw; height: 7vw; text-align: center; line-height: 7vw; font-size: 0.75rem; background-color: #f8f8f8;">{{detialId.brand_name}}</p> </view> 
+			<p style="margin-top: 2vw;"> <span style="font-size: 0.8rem; color: grey;">厂商指导价</span> <span style="font-size: 0.9rem; font-size: 550; color: red;">¥{{Number(detialId.min_price/10000)}}万</span> </p>
+		</view>
+	<!-- 	<view class="carCon">
+			<p> <span style="color: grey; font-size: 0.8rem;">发动机</span> <span style="margin-left: 15vw; font-size: 0.8rem;">1.4</span> </p>
+			<p> <span style="color: grey; font-size: 0.8rem;">车身结构</span> <span style="margin-left: 12vw; font-size: 0.8rem; ">SUV</span> </p>
+			<p> <span style="color: grey; font-size: 0.8rem;">变速箱 </span> <span style="margin-left: 15vw; font-size: 0.8rem;"> 7档干式双离合 </span> </p>
+		</view> -->
+		<!-- <p style="font-size: 0.85rem; font-weight: 550; margin-top: 2vw; box-sizing: border-box; padding-left: 4vw; "> 2.5L 181马力 L4 </p> -->
+		<view class="carList">
+			<view class="model" @click="goNewCarDetialInfo(item.id)" v-for=" (item,index) in Detial" :key="index">
+				<p style="font-size: 0.9rem; font-weight: 550; margin-top: 2vw;">{{item.name}}</p>
+				<p style="font-size: 0.9rem; font-weight: 550; color: red; margin-top: 2vw;">¥{{item.sale_price}}万</p>
+				<view style="display: flex; "> 
+				<p style="color: grey; font-size: 0.8rem; margin-top: 2vw;">厂家指导价: {{item.price}}万</p>
+				  <p style="  margin-left: 2vw;  width: 23vw; height: 7vw; font-size: 0.8rem; text-align: center; line-height: 7vw; border: 1px solid red; color: red; border-radius: 5px;" @click.stop="reservationCar(item.id)"> 预约试驾</p>
+				  <p style="  margin-left: 2vw; width: 23vw; height: 7vw; font-size: 0.8rem; text-align: center; line-height: 7vw; border: 1px solid red; color: red; border-radius: 5px;" @click.stop="basePrice(item.id)"> 询底价</p>
+				  </view>
+			</view>
+		</view>
+		<view style="position: fixed; display: flex; justify-content: center; align-items: center; top: 65vw; right:-1vw; width: 23vw;height: 9vw; background-color: green; border-radius:20px 10px 0px 20px;" @click="WeCom">
+			<view> <image style="width: 6vw; height: 6vw; margin-top: 2vw;" src="../../static/wxchat.png" mode=""></image> </view>
+			<view style="color: white; font-size: 0.75rem;">点击咨询</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				detialId:'',
+				Detial:[]
+			}
+		},
+		onLoad(option) {
+			if(option.DetialInfo){
+				this.detialId=JSON.parse(decodeURIComponent(option.DetialInfo))
+				console.log(this.detialId)
+				this.getBuyCarDetial(this.detialId.id)
+			}
+		},
+		methods:{
+			WeCom(){
+				console.log('1211')
+				uni.openCustomerServiceChat({
+				  extInfo: {url: 'https://work.weixin.qq.com/kfid/kfc3e7dfd18c794def3'},
+				  corpId: 'wwb8fbacb965f0006c',
+				  success(res) {
+					  console.log(res)
+				  },
+				  fail(res){
+					  console.log('错误',res)
+				  }
+				})
+			},
+			// 询问底价
+			basePrice(id){
+				uni.navigateTo({
+					url:'/pages/index/basePrice?id='+id
+				})
+			},
+			// 获取详情
+			getBuyCarDetial(id){
+				this.$api.getBuyCar(id,res=>{
+					if(res.code==0){
+						this.Detial=res.data
+					}
+				})
+			},
+			reservationCar(id){
+				uni.navigateTo({
+					url:'/pages/index/reservationCar?id='+id
+				})
+			},
+			goNewCarDetialInfo(id){
+				uni.navigateTo({
+					url:'/pages/index/newCarDetialInfo?id='+id
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		.hearde{
+			width: 100vw;
+			height: 30vh;
+		}
+		.carTitle{
+			width: 100vw;
+			height: 11vh;
+			background-color: white;
+			overflow: hidden;
+			box-sizing: border-box;
+			padding-left: 4vw;
+		}
+		.carCon{
+			width: 100vw;
+			height: 10vh;
+			background-color: white;
+			margin-top: 4vw;
+			box-sizing: border-box;
+			padding-left: 4vw;
+		}
+		.carList{
+			width: 100vw;
+			margin-top: 2vw;
+			height: 57vh;
+			overflow-y: auto;
+			background-color: white;
+			.model{
+				overflow: hidden;
+				width: 100vw;
+				height: 25vw;
+				box-sizing: border-box;
+				padding-left: 4vw;
+			}
+		}
+	}
+</style>

+ 214 - 0
XCX-Shop/pages/index/newCarDetialInfo.vue

@@ -0,0 +1,214 @@
+<template>
+	<view class="body">
+		<view class="hearde">
+			<image style="width: 96%; height: 100%;" :src="detial.img_url.url"></image>
+		</view>
+		<view>
+			<view class="contentcon">
+				<p style=" margin-top: 2vw; font-size: 1.3rem; font-weight: 550;">{{detial.name}}</p>
+				<view style="display: flex; margin-top: 2vw;">
+					<view style=" font-size: 1rem; color: #d81e06; font-weight: 550;">¥{{detial.sale_price}}万</view>
+					<view style="display: flex;">
+						<p style="margin-top: 0.5vw;">
+							<image style="width: 4vw; height: 4vw;" src="../../static/biaoqian.png"></image>
+						</p>
+						<p style="font-size: 0.9rem; color: #d81e06;">降价提醒</p>
+					</view>
+				</view>
+				<p style="color: grey; text-decoration: line-through; margin-top: 2vw; font-size: 0.9rem;"> 厂家指导价:
+					{{detial.price}}万 </p>
+			</view>
+		</view>
+		<view class="content">
+			<u-toast ref="uToast" />
+			<u-collapse :item-style="itemStyle" accordion="true" event-type="close" arrow="true" :accordion="accordion">
+				<u-collapse-item title="基本参数">
+					<view class="collapse-item">
+						<view class="parameterDetial">
+							<view class="parameterCon">
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>变速箱</span> <span>{{detial.transmission}}</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>发动机</span> <span>{{detial.engine}}</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>车身结构</span> <span>{{detial.car_body}}</span>
+								</p>
+								<!-- <p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>车辆所在地</span> <span>郑州市</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>出厂日期</span> <span>2020-12-30</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>初上牌时间</span> <span>2021年03月上牌</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>排放标准</span> <span>国六</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>座位数</span> <span>5座</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>燃料类型</span> <span></span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>表显里程</span> <span>5.9万公里</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>车牌号</span> <span>豫A</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>车源编码</span> <span>DS20230315132096</span>
+								</p>
+								<p
+									style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+									<span>过户次数</span> <span>0</span>
+								</p> -->
+
+							</view>
+						</view>
+					</view>
+				</u-collapse-item>
+				<u-collapse-item title="图文介绍">
+					<view class="collapse-item">
+						<view class="images">
+							<image style="width: 96vw; margin-top:margin-top: -2vw;" :src="item.url" v-for="(item,index) in detial.images " :key="index">
+							</image>
+						</view>
+					</view>
+				</u-collapse-item>
+			</u-collapse>
+		</view>
+		<!--  -->
+		<view class="contentName">
+			<view class="PicTile" v-for="(item,index) in detial.stores" :key="index"> 
+				<p>
+					<image style="width: 25vw; height: 25vw;" :src="item.img"></image>
+				</p>
+				<view style="margin-left: 3vw;">
+					<p
+						style=" width: 64vw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 0.9rem; font-weight: 550;">
+						{{item.name}} </p>
+					<p style="margin-top: 2vw;"> <span> 电话:</span> <span>{{item.tel}}</span> </p>
+					<p style=" width: 64vw; display: -webkit-box; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient:vertical; margin-top: 2vw; "> <span>地址:</span> <span
+							style=" margin-left: 2vw;">{{item.addr}}</span> </p>
+				</view>
+			</view>
+		</view>
+		<view style="position: fixed; display: flex; justify-content: center; align-items: center; top: 65vw; right:-1vw; width: 23vw;height: 9vw; background-color: green; border-radius:20px 10px 0px 20px;" @click="WeCom">
+			<view> <image style="width: 6vw; height: 6vw; margin-top: 2vw;" src="../../static/wxchat.png" mode=""></image> </view>
+			<view style="color: white; font-size: 0.75rem;">点击咨询</view>
+		</view>
+	</view>
+</template>
+<script>
+	export default {
+
+		data() {
+			return {
+				dotsStyles: {
+					backgroundColor: 'rgba(83, 200, 249,0.3)',
+					border: '1px rgba(83, 200, 249,0.3) solid',
+					color: '#fff',
+					bottom: 2,
+					selectedBackgroundColor: 'white',
+					selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
+				},
+				detial:{}
+			}
+
+		},
+		onLoad(option) {
+			console.log(option.id)
+			if(option.id){
+					this.getBuyCarDetialInfo(option.id)
+			}
+		},
+		methods: {
+			WeCom(){
+				console.log('1211')
+				uni.openCustomerServiceChat({
+				  extInfo: {url: 'https://work.weixin.qq.com/kfid/kfc3e7dfd18c794def3'},
+				  corpId: 'wwb8fbacb965f0006c',
+				  success(res) {
+					  console.log(res)
+				  },
+				  fail(res){
+					  console.log('错误',res)
+				  }
+				})
+			},
+		getBuyCarDetialInfo(id){
+			this.$api.getBuyCarDetial(id,res=>{
+				if(res.code==0){
+					this.detial=res.data
+				}
+			})
+		}
+		},
+
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #f8f8f8;
+
+		.images {
+			width: 100vw;
+		}
+
+		.hearde {
+			width: 100vw;
+			height: 30vh;
+		}
+
+		.swiper-box {
+			height: 80vw;
+		}
+
+		.imagestyle {
+			margin-top: 0vw;
+			width: 100%;
+			height: 100%
+		}
+
+		.contentName {
+			width: 100vw;
+			height: 70vh;
+			border-radius: 10px 0 10px 0;
+			background-color: #f8f8f8;
+			overflow: hidden;
+
+			.PicTile {
+				width: 96vw;
+				height: 17vh;
+				background-color: white;
+				display: flex;
+				box-sizing: border-box;
+				border-radius: 5px;
+				padding: 3vw;
+				
+			}
+		}
+
+	}
+</style>

+ 197 - 0
XCX-Shop/pages/index/oldCarDetial.vue

@@ -0,0 +1,197 @@
+<template>
+	<view class="body">
+		<view style="7vh">
+			<uniSwiperDot :info="info" :current="current" field="content" mode="default" :dots-styles=dotsStyles>
+				<swiper autoplay="true" circular="true" interval="4000" duration="500" class="swiper-box">
+					<swiper-item v-for="(item ,index) in userDetial.images" :key="index">
+						<image class="imagestyle" :src="item.url" mode=""></image>
+					</swiper-item>
+				</swiper>
+			</uniSwiperDot>
+		</view>
+		<view>
+			<view class="contentcon">
+				<p style=" margin-top: 2vw; font-size: 1.3rem; font-weight: 550;">{{userDetial.brand_name}}</p>
+				<view style="display: flex; margin-top: 2vw;">
+					<view style=" font-size: 1rem; color: #d81e06; font-weight: 550;">¥{{Number(userDetial.sale_price/10000)}}万</view>
+					<view style="display: flex;">
+						<p style="margin-top: 0.5vw;">
+							<image style="width: 4vw; height: 4vw;" src="../../static/biaoqian.png"></image>
+						</p>
+						<p style="font-size: 0.9rem; color: #d81e06;">降价提醒</p>
+					</view>
+				</view>
+				<p style="color: grey; text-decoration: line-through; margin-top: 2vw; font-size: 0.9rem;"> 厂家指导价:
+					{{Number(userDetial.guide_price/10000)}}万 </p>
+			</view>
+		</view>
+		<!-- 基本参数 -->
+		<view class="parameter">
+			<p>基本参数</p>
+			<p>
+				<image style="width: 5vw; height: 5vw;" src="../../static/youjian.png"></image>
+			</p>
+		</view>
+		<view class="parameterDetial">
+			<view class="parameterCon">
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>变速箱类型</span> <span>{{userDetial.gearbox_name}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>车辆颜色</span> <span>{{userDetial.color_name}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>排量</span> <span>{{userDetial.displacement_name}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>车辆所在地</span> <span>{{userDetial.address}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>出厂日期</span> <span>{{userDetial.factory_date}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>初上牌时间</span> <span>{{userDetial.plate_date}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>排放标准</span> <span>{{userDetial.emission_name}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>座位数</span> <span>{{userDetial.seat_count}}座</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>燃料类型</span> <span>{{userDetial.oil_type_name}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>表显里程</span> <span>{{Number(userDetial.mileage/10000)}}万公里</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>车牌号</span> <span>{{userDetial.number}}</span> </p>
+				<p
+					style=" color: grey; display: flex; width: 98vw; height: 10vw; line-height: 10vw; justify-content: space-between; box-sizing: border-box;padding: 0 4vw;">
+					<span>车型</span> <span>{{userDetial.model}}</span> </p>
+			</view>
+		</view>
+		<view style=" z-index: 999; position: fixed; display: flex; justify-content: center; align-items: center; top: 65vw; right:-1vw; width: 23vw;height: 9vw; background-color: green; border-radius:20px 10px 0px 20px;" @click="WeCom">
+			<view> <image style="width: 6vw; height: 6vw; margin-top: 2vw;" src="../../static/wxchat.png" mode=""></image> </view>
+			<view style="color: white; font-size: 0.75rem;">点击咨询</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniSwiperDot from '../../uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue'
+	export default {
+		components: {
+			uniSwiperDot
+		},
+		data() {
+			return {
+				dotsStyles: {
+					backgroundColor: 'rgba(83, 200, 249,0.3)',
+					border: '1px rgba(83, 200, 249,0.3) solid',
+					color: '#fff',
+					bottom: 2,
+					selectedBackgroundColor: 'white',
+					selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
+				},
+				info: [{
+						imgLink: '../../static/che1.jpg'
+					},
+					{
+						imgLink: '../../static/che2.jpg'
+					},
+					{
+						imgLink: '../../static/che3.jpg'
+					}
+				],
+				userDetial:{}
+			}
+		},
+		onLoad(option) {
+			if(option.id){
+				this.getDetialInfo(option.id)
+			}
+		},
+		methods: {
+			WeCom(){
+				console.log('1211')
+				uni.openCustomerServiceChat({
+				  extInfo: {url: 'https://work.weixin.qq.com/kfid/kfc3e7dfd18c794def3'},
+				  corpId: 'wwb8fbacb965f0006c',
+				  success(res) {
+					  console.log(res)
+				  },
+				  fail(res){
+					  console.log('错误',res)
+				  }
+				})
+			},
+			getDetialInfo(id){
+				this.$api.getUsedCarDetial(id,res=>{
+					if(res.code==0){
+						this.userDetial=res.data
+					}
+				})
+			}
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 100vh;
+		margin: 0;
+		background-color: #f8f8f8;
+		padding: 0;
+
+		.swiper-box {
+			height: 80vw;
+		}
+
+		.imagestyle {
+			margin-top: 0vw;
+			width: 100%;
+			height: 100%
+		}
+
+		.contentcon {
+			width: 100vw;
+			position: absolute;
+			top: 77vw;
+			background-color: #fff;
+			box-sizing: border-box;
+			height: 18vh;
+			z-index: 99;
+			border-radius: 10px 10px 10px 10px;
+		}
+
+		.parameter {
+			width: 100vw;
+			font-size: 1.2rem;
+			font-weight: 550;
+			line-height: 10vw;
+			box-sizing: border-box;
+			padding: 0vw 2vw;
+			height: 10vw;
+			display: flex;
+			justify-content: space-between;
+			margin-top: 17vh;
+			background-color: white;
+		}
+
+		.parameterDetial {
+			width: 100vw;
+			height: 60vh;
+			background-color: white;
+			display: flex;
+			justify-content: center;
+
+			.parameterCon {
+				width: 95vw;
+				height: 67vh;
+				background-color: #f8f8f8;
+			}
+		}
+	}
+</style>

+ 322 - 0
XCX-Shop/pages/index/reservationCar.vue

@@ -0,0 +1,322 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view class="heade">
+				欢迎预约试驾,请仔细填写一下信息我们尽快与您联系!
+			</view>
+			<!-- 姓名 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">您的姓名</span> <input type="text"
+						v-model="name"
+						placeholder="请输入你的姓名"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 手机号 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">手机号码</span> <input type="text"
+						placeholder="请输入你的手机号码"
+						v-model="tel"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 意向门店 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;" @click="LikeStore">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">意向门店</span> <input type="text"
+						placeholder="请选择意向门店"
+						v-model="storeName"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 车型 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车型</span> <input type="text"
+						placeholder="请输入预约车型"
+						v-model="model"
+						disabled="true"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 12vw; " />
+				</p>
+			</view>
+			<!-- 上牌日期 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">预约日期</span>
+					<input type="text" placeholder="预约日期"
+					v-model="date"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; "
+						@focus="TimeFocus" />
+				<!-- 	<u-datetime-picker ref="datetimePicker" :formatter="formatter" :show="show" v-model="timeValue" -->
+				<!-- 		@confirm="confirm" @cancel="cancel" mode="date"></u-datetime-picker> -->
+				<u-picker mode="time" :params="params"  v-model="show" @confirm="confirm" @cancel="cancel"></u-picker>
+				</p>
+			</view>
+			<!-- 备注说明 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">备注说明</span> <input type="number"
+						v-model="text"
+						placeholder="请输入备注说明"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 图片上传 -->
+<!-- 			<view class="picture">
+				<view class="front" @click="chooseImageFront">
+					<p v-if="frontImg==''? true : false ">
+						<image style="width: 7vw; height: 7vw;" src="../../static/xiangji.png"></image>
+					</p>
+					<p v-if="frontImg==''? true : false " style="font-size: 0.8rem; color: #d4b9c0;">驾驶证正页拍照</p>
+						<image  v-if="frontImg!=''? true : false " style="width: 100%; height: 100%;" :src="frontImg"></image>
+				</view>
+				<view class="opposite" @click="choosePppositeImg">
+					<p v-if="oppositeImg==''? true : false ">
+						<image style="width: 7vw; height: 7vw;" src="../../static/xiangji.png"></image>
+					</p>
+					<p v-if="oppositeImg==''? true : false " style="font-size: 0.8rem; color: #d4b9c0;">驾驶证副页拍照</p>
+					
+						<image  v-if="oppositeImg!=''? true : false " style="width: 100%; height: 100%;" :src="oppositeImg"></image>
+				</view>
+			</view> -->
+			<!-- 协议 -->
+			<view class="agreement" v-if="rechargeDetial!=''? true :  false  ">
+			<u-checkbox-group>
+				<u-checkbox @change="checkboxChange" v-model="checked" label-disabled="true" shape="circle"
+					active-color="red">代表您已同意</u-checkbox>
+			</u-checkbox-group>
+			<p>代表您已同意</p>
+				<p style="color: red;">《用户协议》,</p>
+				<p style="color: red;">《隐私协议》</p>
+			
+			</view>
+			<!--  提交-->
+			<u-toast ref="uToast" />
+			<view class="button" @click="submit" >提交</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				show: false,
+				time: '',
+				checked: false,
+				timeValue: Number(new Date()),
+				frontImg:'',
+				oppositeImg:'',
+				name:'',
+				tel:'',
+				model:'',
+				date:'',
+				storeName:'',
+				storeId:'',
+				text:'',
+				params: {
+					year: true,
+					month: true,
+					day: true,
+					hour: true,
+					minute: true,
+					second: true
+				},
+			}
+		},
+		onLoad(option) {
+			
+			if(option.id){
+				this.id=option.id
+				this.getBuyCarDetialInfo(option.id)
+			}
+			if(this.$db.get('tel')){
+				this.tel=this.$db.get('tel')
+			}
+			if(this.$db.get('name')){
+				this.name=this.$db.get('name')
+			}
+		},
+		onShow(object) {
+			if(object){
+				this.storeName=object.name
+				this.storeId=object.id
+			}
+		},
+		methods: {
+			// 提交
+			submit(){
+				if(!this.$db.get('token')){
+					uni.navigateTo({
+						url:'/pages/login/login'
+					})
+					return
+				}
+				if(this.checked==true){
+					this.$api.postDriveReserve({shop:this.storeId,name:this.name,tel:this.tel,model:this.modelID,date:this.date,notes:this.text},res=>{
+						if(res.code==0){
+						this.successToast('操作成功')
+						setTimeout(function(){
+						uni.navigateBack({
+							url:1
+						})
+						},1000)
+							
+						}else{
+							this.errorToast('请填写必填项')
+						}
+					})
+				}else{
+					this.errorToast('请勾选协议')
+				}
+				
+			},
+			getBuyCarDetialInfo(id){
+				this.$api.getBuyCarDetial(id,res=>{
+					if(res.code==0){
+						this.model=res.data.series_name
+						this.modelID=res.data.id
+					}
+				})
+			},
+			LikeStore(){
+				uni.navigateTo({
+					url:'/pages/index/storeList'
+				})
+			},
+			checkboxChange(e) {
+				this.checked = e.value
+			},
+			// 选择图片
+			chooseImageFront() {
+				let that =this
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['original', 'compressed'],
+					sourceType: ['album', 'camera'],
+					success(e) {
+					that.frontImg=e.tempFiles[0].path
+						
+					}
+				})
+			},
+			choosePppositeImg(){
+				let that =this
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['original', 'compressed'],
+					sourceType: ['album', 'camera'],
+					success(e) {
+					that.oppositeImg=e.tempFiles[0].path
+					}
+				})
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+			TimeFocus() {
+				this.show = true
+			},
+			// 时间
+			confirm(e) {
+				this.date=e.year+'-'+e.month+'-'+e.day
+			},
+			cancel() {
+				this.show = false
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		display: flex;
+		justify-content: center;
+
+		.content {
+			width: 95vw;
+			height: 80vh;
+			background-color: white;
+			border-radius: 5px;
+			padding: 2vw;
+
+			.heade {
+				width: 95vw;
+				height: 22vw;
+				box-sizing: border-box;
+				text-align: center;
+				padding: 8vw 15vw 5vw 15vw;
+				font-size: 0.9rem;
+				color: gray;
+				border-bottom: 1px solid #f8f8f8;
+				;
+			}
+
+			.picture {
+				width: 95vw;
+				height: 14vh;
+				display: flex;
+				justify-content: space-around;
+				align-items: center;
+
+				.front {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+
+				.opposite {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+			}
+			.agreement {
+				display: flex;
+				font-size: 0.8rem;
+				width: 96vw;
+				justify-content: center;
+				align-items: center;
+				height: 10vh;
+			
+			}
+			.button{
+				width: 85vw;
+				height: 10vw;
+				margin-top: 10vw;
+				background-color: red;
+				line-height: 10vw;
+				border-radius: 5vw;
+				color: white;
+				text-align: center;
+				margin-left: 5vw;
+			}
+		}
+	}
+</style>

+ 304 - 0
XCX-Shop/pages/index/screen.vue

@@ -0,0 +1,304 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<!-- p品牌 -->
+			<view class="price">
+			  <view class="pricecon">品牌</view>
+			  <ul>
+				  <li :class="brandIndex==index? 'cssselect' : '' "  v-for="(item,index) in brand " :key="index"  @click="Clickbran(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 价格 -->
+			<view class="price">
+			  <view class="pricecon">价格</view>
+			  <ul>
+				  <li :class="piceconIndex==index? 'cssselect' : '' "  v-for="(item,index) in priceList " :key="index"  @click="Clickpice(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 变速箱 -->
+			<view class="price">
+			  <view class="pricecon">变速箱</view>
+			  <ul>
+				  <li :class="TransmissionIndex==index? 'cssselect' : '' " v-for="(item,index) in Transmission " :key="index" @click="Clicktransmission(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 里程 -->
+			<view class="price">
+			  <view class="pricecon">里程 (万公里)</view>
+			  <ul>
+				  <li :class="mileageListIndex==index? 'cssselect' : '' "  v-for="(item,index) in mileageList " :key="index" @click="ClickmileageList(item,index)">{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 排量 -->
+			<view class="price">
+			  <view class="pricecon">排量</view>
+			  <ul>
+				  <li :class="displacementIndex==index? 'cssselect' : '' " v-for="(item,index) in displacement " :key="index"  @click="Clickdisplacement(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 排放标准 -->
+			<view class="price">
+			  <view class="pricecon">排量标准</view>
+			  <ul>
+				  <li :class="emissionStandardIndex==index? 'cssselect' : '' " v-for="(item,index) in emissionStandard " :key="index" @click="ClickemissionStandard(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 车辆颜色 -->
+			<view class="price">
+			  <view class="pricecon">车辆颜色</view>
+			  <ul>
+				  <li  :class="VehicleColorIndex==index? 'cssselect' : '' " v-for="(item,index) in VehicleColor " :key="index" @click="ClickVehicleColor(item,index)"  >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 座位 -->
+			<view class="price">
+			  <view class="pricecon">座位数</view>
+			  <ul>
+				  <li  :class="seatsIndex==index? 'cssselect' : '' "  v-for="(item,index) in seats " :key="index"  @click="Clickseats(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+			<!-- 车龄 -->
+			<view class="price">
+			  <view class="pricecon">车龄(年)</view>
+			  <ul>
+				  <li :class="carAgeIndex==index? 'cssselect' : '' " v-for="(item,index) in carAge " :key="index" @click="ClickcarAge(item,index)" >{{item.name}}</li>
+			  </ul>
+			</view>
+		</view>
+		<view class="foot">
+			<view style="width: 20vw; height: 10vw; border-radius: 5px; text-align: center; line-height: 10vw; border: 1px solid lightgray;"> 重置</view>
+			<view class="button" @click="goUserdList">为你找到{{count}}车型</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				selectIndex:'',
+				brandIndex:-1,
+				piceconIndex:-1,
+				mileageListIndex:-1,
+				TransmissionIndex:-1,
+				emissionStandardIndex:-1,
+				VehicleColorIndex:-1,
+				carAgeIndex:-1,
+				seatsIndex:-1,
+				displacementIndex:-1,
+				selected: {}, //选取的分类 ,用对象更方便存取数据
+				brand:[],
+				carbrand:'',//搜索
+				carprice:'',
+				cartransmission:'',
+				carmileage:'',
+				cardisplacement:'',
+				caremission:'',
+				carseat:'',
+				caryear:'',
+				carcolor:'',
+				caryear:'',
+				caroil_type:'',
+				priceList:[
+					{ name:'不限',id:'' },
+					{ name:'三万以下',id:'0,3'  },
+					{ name:'3-5万',id:'3,5'  },
+					{ name:'5-8万',id:'5,8'  },
+					{name:'8-12万',id:'8,12' },
+					{ name:'12-18万',id:'12,18'  },
+					{ name:'18-25万',id:'18,25'  },
+					{name:'25-35万',id:'25,35' },
+					{name:'35-50万',id:'35,50' },
+					{name:'50-70万',id:'50,70' },
+					{name:'70万以上',id:'70' }
+				],
+				produceAge:[],
+				Transmission:[],
+				mileageList:[
+					{name:'不限',id:''},
+					{name:'1万公里以内',id:'0,1'},
+					{name:'1-3万公里',id:'1,3'},
+					{name:'3-6万公里',id:'3,6'},
+					{name:'6-10万公里',id:'6,10'},
+					{name:'10-20万公里',id:'10,20'},
+					{name:'20万公里以上',id:'20'}
+				],
+				displacement:[],
+				emissionStandard:[],
+				dirve:[],
+				VehicleColor:[],
+				seats:[],
+				count:0,
+				userdCar:[],
+				carAge:[
+					{name:'不限',id:''},
+					{name:'1年内',id:'0,1'},
+					{name:'1-3年',id:'1,3'},
+					{name:'3-5年',id:'3,5'},
+					{name:'5-8年',id:'5,8'},
+					{name:'8-10年',id:'8,10'},
+					{name:'10年以上',id:'10'}
+				],
+				fuel:[]
+			}
+		},
+		onLoad() {
+			this.SearchType()
+		},
+		methods:{
+			// 二手车列表
+			UsedCarList(name,brand,gearbox,color,displacement,emission,seat_count,oil_type,price_range,mileage__range,years_range){
+				this.$api.getUsedCarList(name,brand,gearbox,color,displacement,emission,seat_count,oil_type,price_range,mileage__range,years_range,res=>{
+					if(res.code==0){
+						this.count=res.count
+						this.userdCar=res.data
+					}
+				})
+			},
+			// 搜索
+			Clickbran(item,index){
+				this.brandIndex=index
+				this.carbrand=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			//价格
+			Clickpice(item,index){
+					this.piceconIndex=index
+					this.carprice=item.id
+					this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			Clicktransmission(item,index){
+				this.TransmissionIndex=index
+				this.cartransmission=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			// 公里
+			ClickmileageList(item,index){
+					this.mileageListIndex=index
+					this.carmileage=item.id
+					this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			Clickdisplacement(item,index){
+				this.displacementIndex=index
+				this.cardisplacement=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			ClickemissionStandard(item,index){
+				this.emissionStandardIndex=index
+				this.caremission=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			ClickVehicleColor(item,index){
+				this.VehicleColorIndex=index
+				this.carcolor=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			Clickseats(item,index){
+				this.seatsIndex=index
+				this.carseat=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			ClickcarAge(item,index){
+				this.carAgeIndex=index
+				this.caryear=item.id
+				this.UsedCarList('',this.carbrand,this.cartransmission,this.carcolor,this.cardisplacement,this.caremission,this.carseat,this.caroil_type,this.carprice,this.carmileage,this.caryear)
+			},
+			// 搜索跳转
+			goUserdList(){
+				uni.redirectTo({
+					url:'/pages/index/buyCar?userdCar='+encodeURIComponent(JSON.stringify(this.userdCar))
+				})
+			},
+			// 搜索类型
+			SearchType(){
+				this.$api.getSearchType(res=>{
+					if(res.code==0){
+						this.brand=res.data.brands
+						this.Transmission=res.data.gearboxs
+						this.VehicleColor=res.data.colors
+						this.displacement=res.data.displacements
+						this.emissionStandard=res.data.emissions
+						this.seats=res.data.seat_counts
+						this.fuel=res.data.oil_types
+					}
+				})
+			},
+			select(item){
+			 this.$set(this.selected, item.id, !this.selected[item.id]) //动态更新视图数据
+			}
+		}
+	}
+</script>
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 100vh;
+	.content{
+		width: 100vw;
+		height: 90vh;
+		overflow: auto;
+		.price{
+			width: 100vw;
+			overflow: hidden;
+			.pricecon{
+				font-size: 0.9rem;
+				font-weight: 550;
+				width: 80vw;
+				margin-top: 2vw;
+				margin-left: 4vw;
+			}
+			ul{
+				width: 100vw;
+				display: flex;
+				flex-wrap: wrap; // 强制换行
+				li{
+					width: 28vw;
+					height: 8vw;
+					margin-left: 2vw;
+					margin-right: 2vw;
+					font-size: 0.75rem;
+					text-align: center;
+					margin-top: 2vw;
+					background-color: #f8f8f8;
+					border: 1px solid #f8f8f8;
+				    line-height: 8vw;
+				}
+			}
+		}
+	}
+		.cssselect{
+			width: 28vw;
+			height: 8vw;
+			margin-left: 2vw;
+			margin-right: 2vw;
+			font-size: 0.75rem;
+			text-align: center;
+			margin-top: 2vw;
+			line-height: 8vw;
+			background-color: #fcacad;
+			color: red;
+			border: 1px solid red;
+		}
+		.foot{
+			width: 100vw;
+			height: 20vw;
+			border-top: 1px solid lightgray;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			background-color: white;
+			justify-content: space-around;
+			align-items: center;
+		}
+		.button{
+			width: 65vw;
+			height: 10vw;
+			text-align: center;
+			line-height: 10vw;
+			background-color: #f83036;
+			color: white;
+			border-radius: 5px;
+		}
+		
+	}
+</style>

+ 268 - 0
XCX-Shop/pages/index/sellCar.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<!-- 意向品牌 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">我的品牌</span>
+				</p>
+				<view style="margin-left: 8vw; width: 50vw;">
+					<uni-data-select v-model="value" :localdata="range" :clear="false" @change="change"></uni-data-select>
+				</view>
+			</view>
+			<view style="width: 85vw; height: 12vw;  display: flex; border-bottom: 0.5px solid #f8f8f8;" @click="LikeStore">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">意向门店</span> <input type="text"
+						placeholder="请选择意向门店"
+						v-model="storeName"
+						style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 9vw; " /> </p>
+			</view>
+			<!-- 车型 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车型</span> <input type="text"
+						placeholder="车型"
+						v-model="Vehiclemodel"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 16vw; "
+						> </p>
+			</view>
+			<!-- 电话 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">联系方式</span> <input type="text"
+						placeholder="联系方式"
+						v-model="tel"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; "
+						> </p>
+			</view>
+			<!-- 上牌日期 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">上牌日期</span>
+					<input type="text" placeholder="上牌日期"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; "
+						v-model="upcarNumberData" @focus="timeFocus"  />
+					<u-picker mode="time" v-model="show" @confirm="confirm" @cancel="cancel"></u-picker>
+				</p>
+			</view>
+			<!-- 行驶里程 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">行驶里程</span> <input type="Numbber"
+						placeholder="行驶里程"
+						v-model="Mileagevalue"
+						style="font-size: 0.8rem; width: 48vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+				<p style="display: flex; align-items: center; font-size: 0.8rem; color: gray;">
+					万公里
+				</p>
+			</view>
+		
+			<!-- 行驶里程 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;" @click="city">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">所在城市</span> <input type="text"
+						placeholder="所在城市"
+						v-model="areaValue"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+			</view>
+			<!-- 备注说明 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">备注说明</span> <input type="number"
+						v-model="text"
+						placeholder="请输入备注说明"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<view class="button" @click="submit">提交</view>
+			<u-toast ref="uToast" />
+			<u-picker mode="region" v-model="showAred" @cancel="cancelAred" @confirm="confirmAred"
+				:area-code='["13", "1303", "130304"]'></u-picker>
+		</view>
+		<!-- <view>
+			<image src="../../static/liucheng.png"></image>
+		</view> -->
+
+	</view>
+</template>
+
+<script>
+	import uniDataSelect from "@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue"
+	export default {
+		data() {
+			return {
+				value: 0,
+				Vehiclemodel:"",
+				upcarNumberData:null,
+				Mileagevalue:'',
+				storeName:'',
+				storeId:'',
+				areaValue:'',
+				range: [],
+				showAred: false,
+				carList: false,
+				ageShow: false,
+				time: '',
+				tel:'',
+				show: false,
+				timeValue: Number(new Date()),
+				text:'',
+				jiantou: '../../static/xiajiantou.png',
+				agejiantou: '../../static/xiajiantou.png',
+
+			}
+		},
+		onLoad() {
+			this.getBrandsList()
+		},
+		onShow(object) {
+			if(object){
+				this.storeName=object.name
+				this.storeId=object.id
+			}
+			if(this.$db.get('tel')){
+				this.tel=this.$db.get('tel')
+			}
+		},
+		methods: {
+			LikeStore(){
+				uni.navigateTo({
+					url:'/pages/index/storeList'
+				})
+			},
+			submit(){
+				if(!this.$db.get('token')){
+					uni.navigateTo({
+						url:'/pages/login/login'
+					})
+					return
+				}
+				this.$api.postUserdCar({shop:this.storeId,brand:this.value,tel:this.tel, model:this.Vehiclemodel,plate_date:this.upcarNumberData,area:this.areaValue,mileage:this.Mileagevalue,notes:this.text},res=>{
+					if(res.code==0){
+					this.successToast('操作成功')
+					setTimeout(function(){
+					uni.navigateBack({
+						url:1
+					})
+					},1000)
+					}else{
+						this.errorToast('请输入必填项')
+					}
+				})
+			},
+			city() {
+				this.showAred = true
+			},
+			change(e) {
+			this.value=e.id
+			},
+			getBrandsList() {
+				this.$api.getBrands(res => {
+					if (res.code == 0) {
+						this.range = res.data
+					}
+				})
+			},
+			confirmAred(e) {
+				this.areaValue = e.province.label + e.city.label + e.area.label
+			},
+			cancelAred(e) {
+				this.showAred = false
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+			timeFocus() {
+				this.show = true
+			},
+			// 时间
+			confirm(e) {
+				this.upcarNumberData=e.year+'-'+e.month+'-'+e.day
+			},
+			cancel() {
+				this.show = false
+			},
+		
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		display: flex;
+		// flex-direction: column;
+		justify-content: center;
+
+		.content {
+			width: 90vw;
+			height: 50vh;
+			background-color: white;
+			border-radius: 15px;
+			box-sizing: border-box;
+			padding: 2vw;
+
+			.carModel {
+				width: 87vw;
+				height: 80vw;
+				border-radius: 5vw;
+				background-color: white;
+				border: 0.5px solid #dbddbd;
+				top: 14vw;
+				left: 5vw;
+				overflow: auto;
+				z-index: 99;
+			}
+
+			.carList {
+				width: 85vw;
+				line-height: 10vw;
+				font-size: 0.85rem;
+				height: 10vw;
+				border-bottom: 0.5px solid #f8f8f8;
+				color: grey;
+				box-sizing: border-box;
+				padding: 0 4vw;
+			}
+
+			.ageModel {
+				width: 87vw;
+				height: 80vw;
+				border-radius: 5vw;
+				z-index: 99;
+				background-color: white;
+				border: 0.5px solid #dbddbd;
+				top: 43vw;
+				left: 5vw;
+				text-align: center;
+				overflow: auto;
+			}
+		}
+
+		.button {
+			width: 85vw;
+			height: 10vw;
+			margin-top: 10vw;
+			background-color: red;
+			line-height: 10vw;
+			border-radius: 5vw;
+			color: white;
+			text-align: center;
+		}
+	}
+</style>

+ 105 - 0
XCX-Shop/pages/index/storeList.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="body">
+		<view class="search">
+			<p>
+				<image style="width: 5vw; height: 5vw; margin-top: 1vw; " src="../../static/search.png"></image>
+			</p>
+			<p style="margin-left: 2vw;"> <input style="font-size: 0.75rem; width: 60vw; height: 10vw;" v-model="StoreName"
+					type="text" name="" id="" @input="getStore" placeholder="搜索门店"> </p>
+		</view>
+		<view class="content_up">
+			<view
+				style=" width: 100vw; height: 7vw; font-size: 0.9rem; font-weight: 550; padding-left: 8vw; padding-top: 2vw;">
+				热门车系
+			</view>
+			<!-- <scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="refresherTriggered"
+				@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolowerEvent(event)"
+				lower-threshold="100">
+			
+			</scroll-view> -->
+			<view class="content_con">
+				<view class="model" v-for="(item,index) in StoreList " :key="index" @click="goDetial(item)">
+						<view style="display: flex;">
+							<view> <image style="width: 25vw; height: 25vw;" :src="item.img.url" mode=""></image> </view>
+							<view  style="width: 63vw; box-sizing: border-box; padding-left:3vw;">
+								<p style="font-size: 0.9rem; font-weight: 550;">{{item.name}}</p>
+								<view style=" font-size: 0.8rem; margin-top: 2vw;"> <span style="color: #696969;" >主营品牌:</span> <span style="color: #696969;">大众</span> </view>
+								<view style="display: flex; margin-left: -2vw; margin-top: 2vw;">
+									<p> <image style="width: 3vw; height: 3vw;" src="../../static/dingwei.png" mode=""></image> </p>
+								<p style=" width: 60vw; display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical; font-size: 0.75rem; color: #696969;">{{item.addr}}</p>
+								</view>
+							</view>
+						</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+			StoreList:[],
+				StoreName:''
+			}
+		},
+	onLoad() {
+		this.getStore()
+	},
+		methods:{
+			goDetial(item){
+			let pages = getCurrentPages();
+			let prevPage = pages[pages.length - 2]; //上一个页面
+			let object=item
+			prevPage.onShow(object);
+			uni.navigateBack();
+			},
+			getStore(){
+				this.$api.getStoreList(this.StoreName,res=>{
+					this.StoreList=res.data
+			})
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.body{
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		box-sizing: border-box;
+		padding: 0 4vw;
+		overflow: hidden;
+		.search {
+			box-sizing: border-box;
+			padding: 0 4vw;
+			width: 90vw;
+			height: 12vw;
+			border-radius: 7vw;
+			background-color: white;
+			display: flex;
+			margin-top: 1vw;
+			align-items: center;
+		}
+		.content_up {
+			width: 92vw;
+			height: 93vh;
+		
+			.content_con {
+				width: 92vw;
+				height: 92vh;
+		overflow-y: auto;
+			.model{
+				width: 92vw;
+				height: 29vw;
+				background-color: white;
+				box-sizing: border-box;
+				padding: 2vw;
+				border-radius: 5px;
+				margin-top: 1vw;
+			}
+			}
+		}
+	}
+</style>

+ 110 - 0
XCX-Shop/pages/login/login.vue

@@ -0,0 +1,110 @@
+<template>
+	<view class="body">
+		<view class="con">
+			<view class="ImgCon">
+				<view>
+					<image style="width: 20vw; height: 20vw; border-radius: 50%;" src="../../static/logo.jpg" mode="">
+					</image>
+				</view>
+				<view>
+					<p style="font-size: 1.15rem; color: grey; margin-top: 6vw;"> 持之以恒,信守承诺 </p>
+					<p style="font-size: 0.75rem; color: grey; margin-top: 3vw;"> PERSEVERE AND KEEP PROMISE </p>
+				</view>
+			</view>
+			<view style="margin-top: 5vh;">
+				<button
+					style="border-radius:60rpx; width:80vw; height: 80rpx; font-size: 4vw; line-height: 80rpx; padding-right: 10vw;"
+					type="primary" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"
+					hover-class="btn-hover">一键登录</button>
+			</view>
+			<!-- 		<view @click="avatar">123123</view> -->
+		</view>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				data: {
+					code: '',
+				}
+
+			}
+		},
+		onLoad() {
+			let that = this
+			uni.login({
+				provider: 'weixin',
+				success(res) {
+					that.data.code = res.code;
+					console.log(res.code)
+				}
+			})
+			that.getappid()
+		},
+		methods: {
+			//获取appId
+			getappid() {
+				let that = this
+				const res = uni.getAccountInfoSync()
+				that.data.appid = res.miniProgram.appId
+			},
+			getPhoneNumber(e) {
+				console.log(e)
+				let that = this
+				that.$api.loginApi(that.data, res => {
+					if (res.code == 0) {
+						if (res.data.bind == 0) {
+							that.$api.loginBind({
+								encryptedData: e.detail.encryptedData,
+								iv: e.detail.iv,
+								openid: res.data.openid
+							}, res => {
+								if (res.code == 0) {
+									that.$db.set('tel',res.data.tel)
+									that.$db.set('token', res.data.token)
+								uni.navigateBack({
+									delta:1
+								})
+								}
+							})
+						} else {
+							that.$db.set('name',res.data.name)
+							that.$db.set('tel',res.data.tel)
+							that.$db.set('token', res.data.token)
+						uni.navigateBack({
+							delta:1
+						})
+						}
+
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+
+		.con {
+			width: 100vw;
+			height: 40vh;
+
+			.ImgCon {
+				width: 100vw;
+				height: 40vh;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+			}
+		}
+	}
+</style>

+ 339 - 0
XCX-Shop/pages/serve/detial.vue

@@ -0,0 +1,339 @@
+<template>
+	<view class="body">
+		<view class="header">
+			<view class="headercon">
+				<view>
+					<p>
+						<image style="width: 20vw; height: 20vw;" :src="detialInfo.img.url"></image>
+					</p>
+				</view>
+				<view style="margin-left: 4vw;">
+					<p style="font-weight: 550; font-size: 1rem;">{{detialInfo.name}}</p>
+					<p
+						style="font-size: 0.8rem; margin-top: 2vw; text-align: center; width: 15vw; color: #a0dbd9;border: 1px solid #a0dbd9;">
+						取送车</p>
+					<view style="display: flex; margin-top: 2vw;">
+						<p>
+							<image style="width: 5vw; height: 5vw;" src="../../static/duihao.png" mode=""></image>
+						</p>
+						<p style="font-size: 0.75rem; color: #adaebe;"> 洗车 </p>
+						<p style="margin-left: 2vw;">
+							<image style="width: 5vw; height: 5vw;" src="../../static/duihao.png" mode=""></image>
+						</p>
+						<p style="font-size: 0.75rem; color: #adaebe;">WIFI</p>
+						<p style="margin-left: 2vw;">
+							<image style="width: 5vw; height: 5vw;" src="../../static/duihao.png" mode=""></image>
+						</p>
+						<p style="font-size: 0.75rem; color: #adaebe;">客休区</p>
+					</view>
+				</view>
+			</view>
+			<view class="headerContent">
+				<view style="color:#adaebe;">{{detialInfo.addr}}</view>
+				<view style="display: flex;  justify-content: space-around;  width: 30vw;">
+					<!-- 	<view>
+						<p>
+							<image style="width: 6vw; height: 6vw;" src="../../static/daohang.png" mode=""></image>
+						</p>
+						<p style="color: #adaebe;">导航</p>
+					</view> -->
+					<view @click="callPhone">
+						<p>
+							<image style="width: 6vw; height: 6vw;" src="../../static/dianhua.png" mode=""></image>
+						</p>
+						<p style="color: #adaebe;">电话</p>
+					</view>
+
+				</view>
+			</view>
+
+		</view>
+		<view class="content">
+			<view class="contentInfo">
+				<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8; margin-top: 2vw;">
+					<view style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">服务类型</span>
+						<p style="width: 63vw; margin-left: 2vw;"><uni-data-select v-model="value" :localdata="range"
+								@change="Searchchange"></uni-data-select></p>
+
+					</view>
+				</view>
+				<!-- 车系 -->
+				<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8; margin-top: 1vw;">
+					<view style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车辆</span>
+						<p style="width: 63vw; margin-left: 9vw;"><uni-data-select v-model="VehicleSeries"
+								:localdata="chexi" @change="Vehiclechange"></uni-data-select></p>
+
+					</view>
+				</view>
+				<!--  联系人-->
+				<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+					<view style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">联系人</span>
+						<p> <input type="text" placeholder="请输入联系人" v-model="name"
+								style=" width: 30vw; font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 7vw; " />
+						</p>
+						<view style=" width: 37vw; display: flex; align-items: center;">
+							<u-radio-group v-model="selectRadio" @change="radioGroupChange">
+								<u-radio @change="radioChange" active-color="red" v-for="(item, index) in list"
+									:key="index" :name="item.name" :disabled="item.disabled">
+									{{item.name}}
+								</u-radio>
+							</u-radio-group>
+						</view>
+					</view>
+				</view>
+				<!-- 联系电话 -->
+				<view style="width: 90vw; height: 12vw; border-bottom: 0.5px solid #f8f8f8;">
+					<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">联系电话</span> <input
+							type="text" placeholder="请输入联系电话" v-model="phone"
+							style="font-size: 0.8rem; height: 10vw; line-height: 10vw; margin-left: 4vw; " /> </p>
+				</view>
+				<view style="width: 90vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+					<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">预约时间</span>
+						<input type="text" placeholder="预约时间" v-model="date"
+							style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; "
+							@focus="TimeFocus" />
+						<u-picker mode="time" v-model="show" :params="params" @confirm="confirm" @cancel="cancel"></u-picker>
+					</p>
+				</view>
+				<!-- 备注说明 -->
+				<view style="width: 90vw; height: 12vw; display: flex; border-bottom: 0.5px solid #f8f8f8;">
+					<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+							style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">备注说明</span> <input
+							type="text" v-model="text" placeholder="请输入备注说明"
+							style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 4vw; " />
+					</p>
+				</view>
+				<!-- button -->
+				<u-toast ref="uToast" />
+				<view class="button" @click="submit">提交</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import UniDataSelect from '@/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue'
+	export default {
+		components: {
+			UniDataSelect
+		},
+		data() {
+			return {
+				value: 0,
+				show: false,
+				detialInfo: '',
+				CarNumber: '',
+				VehicleSeries: '',
+				phone: '',
+				name: '',
+				text: '',
+				date: null,
+				selectRadio: '先生',
+				list: [{
+						name: '先生',
+						disabled: false
+					},
+					{
+						name: '女士',
+						disabled: false
+					},
+				],
+				range: [],
+				chexi: [],
+				params: {
+					year: true,
+					month: true,
+					day: true,
+					hour: true,
+					minute: true,
+					second: true
+				},
+			}
+		},
+		onLoad(option) {
+			if (option.detialInfo) {
+				this.detialInfo = JSON.parse(decodeURIComponent(option.detialInfo))
+				console.log(this.detialInfo)
+			}
+			if (this.$db.get('name')) {
+				this.name = this.$db.get('name')
+			}
+			if (this.$db.get('tel')) {
+				this.phone = this.$db.get('tel')
+			}
+			this.getserve()
+		},
+		methods: {
+			radioGroupChange(e) {
+				console.log(e)
+			},
+			callPhone() {
+				uni.showModal({
+					title: '联系我们',
+					content: this.detialInfo.tel,
+					confirmText: '确认',
+					success(res) {
+						if (res.confirm) {
+							uni.makePhoneCall({
+								phoneNumber: this.detialInfo.tel, //电话号码
+								success: function(e) {
+									console.log(e);
+								},
+								fail: function(e) {
+									console.log(e);
+								}
+							})
+						}
+					}
+				})
+			},
+			// checkboxChange(e) {
+			// 	if (this.CarNumber == true) {
+			// 		this.CarNumber = false
+			// 	} else {
+			// 		this.CarNumber = true
+			// 	}
+			// },
+			// 服务类型
+			getserve() {
+				this.$api.getServeType(res => {
+					if (res.code == 0) {
+						this.range = res.data.maint_types
+						this.chexi = res.data.vehicles
+					}
+				})
+			},
+			// 提交
+			submit() {
+				if (!this.$db.get('token')) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+				this.$api.postreserve({
+					shop: this.detialInfo.id,
+					name: this.name,
+					tel: this.phone,
+					type: this.value,
+					vehicle: this.VehicleSeries,
+					date: this.date,
+					notes: this.text
+				}, res => {
+					if (res.code == 0) {
+						this.successToast('操作成功')
+						setTimeout(function() {
+							uni.switchTab({
+								url: '/pages/serve/index'
+							})
+						}, 1000)
+
+					} else {
+						this.errorToast('请填写必填项')
+					}
+				})
+			},
+			Searchchange(e) {
+				this.value = e.id
+				console.log("e:", e);
+			},
+			Vehiclechange(e) {
+				this.VehicleSeries = e.id
+				console.log('e', e)
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+			TimeFocus() {
+				this.show = true
+			},
+			// 时间
+			confirm(e) {
+				this.date = e.year + '-' + e.month + '-' + e.day
+			},
+			cancel() {
+				this.show = false
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8f8;
+
+		.header {
+			width: 100vw;
+			height: 27vh;
+			background-color: #ebeff4;
+			box-sizing: border-box;
+			display: flex;
+			flex-direction: column;
+			padding: 2vw;
+
+			.headercon {
+				width: 96vw;
+				height: 13vh;
+				display: flex;
+				border-bottom: 1px solid #e5e8ed;
+			}
+
+			.headerContent {
+				display: flex;
+				margin-top: 4vw;
+				justify-content: space-between;
+			}
+		}
+
+		.content {
+			width: 100vw;
+			height: 70vh;
+			box-sizing: border-box;
+			padding: 0 2vw;
+			border-radius: 5px;
+			overflow: hidden;
+
+			.contentInfo {
+				position: absolute;
+				top: 45vw;
+				width: 96vw;
+				height: 70vh;
+				box-sizing: border-box;
+				padding: 2vw;
+				background-color: white;
+				border-radius: 10px;
+				margin-top: 2vw;
+			}
+		}
+
+		.button {
+			width: 90vw;
+			height: 10vw;
+			margin-top: 10vw;
+			background-color: red;
+			line-height: 10vw;
+			border-radius: 5vw;
+			color: white;
+			text-align: center;
+		}
+
+	}
+</style>

+ 103 - 0
XCX-Shop/pages/serve/index.vue

@@ -0,0 +1,103 @@
+<template>
+	<view class="body">
+		<view class="search">
+			<p>
+				<image style="width: 5vw; height: 5vw; margin-top: 1vw; " src="../../static/search.png"></image>
+			</p>
+			<p style="margin-left: 2vw;"> <input style="font-size: 0.75rem; width: 60vw; height: 10vw;" v-model="StoreName"
+					type="text" name="" id=""  @input="getStore" placeholder="搜索门店"> </p>
+		</view>
+		<view class="content_up">
+			<view
+				style=" width: 100vw; height: 7vw; font-size: 0.9rem; font-weight: 550; padding-left: 8vw; padding-top: 2vw;">
+				门店
+			</view>
+		<!-- 	<scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="refresherTriggered"
+				@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolowerEvent(event)"
+				lower-threshold="100">
+			</scroll-view> -->
+			<view class="content_con">
+				<view class="model" v-for="(item,index) in StoreList " :key="index" @click="goDetial(item)">
+						<view style="display: flex;">
+							<view> <image style="width: 25vw; height: 25vw;" :src="item.img.url" mode=""></image> </view>
+							<view  style="width: 63vw; box-sizing: border-box; padding-left:3vw;">
+								<p style="font-size: 0.9rem; font-weight: 550;">{{item.name}}</p>
+								<view style=" font-size: 0.8rem; margin-top: 2vw;"> <span style="color: #696969;" >主营品牌:</span> <span style="color: #696969;">大众</span> </view>
+								<view style="display: flex; margin-left: -2vw; margin-top: 2vw;">
+									<p> <image style="width: 3vw; height: 3vw;" src="../../static/dingwei.png" mode=""></image> </p>
+								<p style=" width: 60vw; display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical; font-size: 0.75rem; color: #696969;">{{item.addr}}</p>
+								</view>
+							</view>
+						</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+			StoreList:[],
+				StoreName:''
+			}
+		},
+		onTabItemTap(e){
+			this.getStore()
+		},
+		methods:{
+			goDetial(item){
+				uni.navigateTo({
+					url:'/pages/serve/detial?detialInfo='+encodeURIComponent(JSON.stringify(item))
+				})
+			},
+			getStore(){
+				this.$api.getStoreList(this.StoreName,res=>{
+					this.StoreList=res.data
+			})
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.body{
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		box-sizing: border-box;
+		padding: 0 4vw;
+		overflow: hidden;
+		.search {
+			box-sizing: border-box;
+			padding: 0 4vw;
+			width: 90vw;
+			height: 12vw;
+			border-radius: 7vw;
+			background-color: white;
+			display: flex;
+			margin-top: 1vw;
+			align-items: center;
+		}
+		.content_up {
+			width: 92vw;
+			height: 93vh;
+		
+			.content_con {
+				width: 92vw;
+				height: 92vh;
+				overflow-y: auto;
+		
+			.model{
+				width: 92vw;
+				height: 29vw;
+				background-color: white;
+				box-sizing: border-box;
+				padding: 2vw;
+				border-radius: 5px;
+				margin-top: 1vw;
+			}
+			}
+		}
+	}
+</style>

+ 148 - 0
XCX-Shop/pages/shopStore/Address.vue

@@ -0,0 +1,148 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view class="model" v-for="(item,index) in addressList" :key="index" >
+				<view style="font-size: 1rem; font-weight: 550;">{{item.full_addr}}</view>
+				<view style="margin-top: 2vw;"> <span>{{item.name}}</span> <span style="margin-left: 2vw;">{{item.tel}}</span> </view>
+				<view style=" height: 20vw; display: flex; justify-content: space-around; align-items: center; border-top: 1px solid #f8f8f8; margin-top: 4vw;">
+					<view style="display: flex;">
+						<u-checkbox-group>
+							<u-checkbox @change="checkboxChange(item)" v-model="item.default" label-disabled="true" shape="circle"
+								active-color="red"></u-checkbox>
+						</u-checkbox-group>
+						<p style="color: red; margin-left: -4vw; margin-top: -1vw; font-size: 1rem;">已设为默认地址</p>
+					</view>
+					<view style="display: flex;">
+						<p> <image style="width: 5vw; height: 5vw; " src="../../static/bianji.png"></image> </p>
+						<p style="margin-left: 2vw;" @click="Edmit(item)">编辑</p>
+					</view>
+					<view style="display: flex;">
+						<p> <image  style="width: 5vw; height: 5vw; " src="../../static/shanchu.png"></image> </p>
+						<p style="margin-left: 2vw;"  @click="deleteAddress(item)" >删除</p>
+					</view>
+				</view>
+			</view>
+			<!-- <p>暂无收获地址哦~</p> -->
+		</view>
+		<view class="foot">
+			<u-toast ref="uToast" />
+		<view class="button" @click="saveAddress">添加新地址</view>
+		</view>
+	</view>
+</template>
+
+<script >
+	export default{
+		data(){
+			return{
+			checked: false,
+			addressList:[]
+			}
+		},
+		onLoad() {
+			
+		},
+		onShow(){
+			this.getAddressList()
+		},
+		methods:{
+			checkboxChange(item) {
+				console.log(item.default)
+				this.$nextTick(()=>{
+					this.$api.getRadio(item.id,item.default,res=>{
+						if(res.code==0){
+							this.getAddressList()
+						}
+					})
+				})
+		
+			},
+			Edmit(item){
+				uni.navigateTo({
+					url:'/pages/shopStore/saveAddress?addressInfo='+encodeURIComponent(JSON.stringify(item))
+				})
+			},
+			getAddressList(){
+				this.$api.getAddress(res=>{
+					if(res.code==0){
+						this.addressList=res.data
+					}
+				})
+			},
+			saveAddress(){
+				uni.navigateTo({
+					url:'/pages/shopStore/saveAddress'
+				})
+			},
+			deleteAddress(item){
+				this.$api.getdeleteAddress(item.id,res=>{
+					if(res.code==0){
+						this.getAddressList()
+					}else{
+						this.errorToast(res.msg)
+					}
+				})
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body{
+		width: 100vw;
+		height: 100vh;
+		.content{
+			width: 100vw;
+			height: 98vh;
+			background-color: #f8f8f8;
+			box-sizing: border-box;
+			padding:0 5vw;
+			overflow-y: auto;
+			.model{
+				width: 90vw;
+				height: 20vh;
+				border-radius: 5px;
+				background-color: white;
+				box-sizing: border-box;
+				padding: 2vw;
+				margin-top: 2vw;
+			}
+			// display: flex;
+			// justify-content: center;
+			// align-items: center;
+		}
+		.foot{
+			width: 100vw;
+			height: 20vw;
+			border-top: 1px solid lightgray;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+		}
+		.button{
+			width: 90vw;
+			height: 12vw;
+			text-align: center;
+			line-height: 12vw;
+			background-color: #f83036;
+			color: white;
+			border-radius: 32px;
+		}
+	}
+</style>

+ 268 - 0
XCX-Shop/pages/shopStore/determineOrder.vue

@@ -0,0 +1,268 @@
+<template>
+	<view class="body">
+		<view class="header" @click="addressList">
+			<view class="model" v-if="ProductList.address.name? true :false ">
+				<view style="font-size: 1rem; font-weight: 550;">{{ProductList.address.area}} {{ProductList.address.addr}} </view>
+				<view style="margin-top: 2vw;"> <span>{{ProductList.address.name}}</span> <span style="margin-left: 2vw;">{{ProductList.address.tel}}</span> </view>
+			</view>
+			<view   v-if="ProductList.address.name? false : true " >
+				<p style="font-size: 0.75rem; color: grey; ">您还没有收获地址哦~</p>
+				<p
+					style="width: 20vw; height: 8vw; margin-top: 2vw; text-align: center; line-height: 8vw; border-radius: 5px; color: red; border: 1px solid red; background-color:#fff5f5;">
+					添加地址</p>
+			</view>
+		</view>
+		<!--确认订单 -->
+		<view class="content">
+			<view class="shopCon">
+				<p>
+					<image style="width: 25vw; height: 25vw; border-radius: 8px;" :src="ProductList.product.cover.url"></image>
+				</p>
+				<view style="padding-left: 6vw;">
+					<p style="font-size: 1rem; font-weight: 550;">{{ProductList.product.name}}</p>
+					<!-- <p style="font-size: 0.75rem; color: grey; margin-top: 2vw;">五香味45g*7</p> -->
+					<view style=" width: 50vw; display: flex;  margin-top: 2vw; ">
+						<p style="font-size: 1.4rem; font-weight: 550; color: red;">¥{{ProductList.product.price}}</p>
+						<view style=" width: 40vw; display: flex;  margin-left: 8vw;">
+							<p class="minus_quantity" @click="decrease">-</p>
+							<input class="input_quantity" type="number" v-model="quantity" @input="handleInput" />
+							<p class="add_quantity" @click="increase">+</p>
+						</view>
+					</view>
+				</view>
+			</view>
+			<p class="ProductIntroduction"> <span>商品金额</span> <span style="font-weight: 550;">¥{{ Number(ProductList.product.price*quantity) }}</span> </p>
+		<!-- 	<p
+				class="ProductIntroduction">
+				<span>优惠金额</span> <span style="color: red; font-weight: 550;">-¥0</span>
+				 </p> -->
+		<!-- 	<p
+				class="ProductIntroduction">
+				<sapn>恒信豆</sapn> <span style="color: red; font-weight: 550;">-¥0</span></sapn>
+			</p> -->
+		<!-- 	<p
+				class="ProductIntroduction" >
+				<span>运费金额</span>
+				<sapn>¥0</sapn>
+			</p> -->
+		<!-- 	<view
+				class="ProductIntroduction">
+				<span>订单备注</span>
+				<view style="display: flex;">
+					<p
+						style=" width: 50vw; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; text-align: center; font-size: 0.8rem; color: grey; ">
+						{{ProductList.product.notes}}</p>
+					<p>
+						<image style="width: 5vw; height: 5vw; " src="../../static/youjian.png" mode=""></image>
+					</p>
+				</view>
+			</view> -->
+		</view>
+		<!-- 已选择 -->
+			<u-toast ref="uToast" />
+		<view class="foot">
+			<view  style="width: 28vw;">合计: <span style="color: red; font-size: 1.2rem;">¥{{Number(ProductList.product.price*quantity)}}</span> </view>
+			<view class="button" @click="purchase">下单</view>
+		</view>
+			
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				quantity: 1,
+				ProductList:{
+					product:{price:0}
+				},
+			}
+		},
+		onLoad(option) {
+			if(option.storeId){
+				this.storeId=option.storeId
+				this.planProductList(option.storeId)
+			}
+		},
+		onShow(){
+			this.planProductList(this.storeId)
+		},
+		methods: {
+			addressList(){
+				uni.navigateTo({
+					url:'/pages/shopStore/Address'
+				})
+			},
+			// 数据信息
+			planProductList(id){
+				this.$api.postshopdetial(id,res=>{
+					if(res.code==0){
+						this.ProductList=res.data
+					}
+				})
+			},
+			handleInput(event) {
+				const value = parseInt(event.target.value);
+				if (!isNaN(value) && value >= 1) {
+					this.quantity = value;
+				} else {
+					this.quantity = 1;
+				}
+			},
+			increase() {
+				this.quantity++;
+			},
+			decrease() {
+				if (this.quantity > 1) {
+					this.quantity--;
+				}
+			},
+			purchase(){
+				let that=this
+				if(!that.$db.get('token')){
+					uni.navigateTo({
+						url:'/pages/login/login'
+					})
+					return
+				}
+				that.$api.postPlaceOrder({product:that.ProductList.product.id,customer_address:that.ProductList.address.id,count:that.quantity,price:that.ProductList.product.price},res=>{
+					if(res.code==0){
+						uni.requestPayment({
+							provider:'wxpay',
+							timeStamp: res.data.timeStamp,
+							nonceStr: res.data.nonceStr,
+							package: res.data.package,
+							signType: res.data.signType,
+							paySign: res.data.paySign,
+							success: function(e){
+								that.successToast('充值成功')
+								setTimeout(() => {
+									uni.switchTab({
+										url:'/pages/shopStore/index'
+									})
+								}, 1000)
+							},
+							faill:function(e){
+								console.log(e)
+								that.errorToast(e)
+							}
+						})
+					}
+				})
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		box-sizing: border-box;
+		padding: 0 5vw;
+
+		.header {
+			width: 90vw;
+			height: 10vh;
+			background-color: white;
+			border-radius: 10px;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			.model{
+				width: 90vw;
+				height: 10vh;
+				border-radius: 5px;
+				background-color: white;
+				box-sizing: border-box;
+				padding: 2vw;
+			}
+		}
+
+		.content {
+			width: 90vw;
+			height: 30vh;
+			margin-top: 4vw;
+			background-color: white;
+			border-radius: 10px;
+
+			.shopCon {
+				width: 90vw;
+				height: 20vh;
+				display: flex;
+				box-sizing: border-box;
+				padding: 4vw;
+
+				.minus_quantity {
+					border: 1px solid #f8f8f8;
+					text-align: center;
+					width: 20%;
+					background-color: #f8f8f8;
+					margin-right: 2vw;
+
+				}
+
+				.input_quantity {
+					// border-bottom: 1px solid #74bfe7;
+					text-align: center;
+					width: 20%;
+					height: 8vw;
+					background-color: #f8f8f8;
+				}
+
+				.add_quantity {
+					border: 1px solid #f8f8f8;
+					background-color: #f8f8f8;
+					text-align: center;
+					width: 20%;
+					margin-left: 2vw;
+				}
+			}
+
+			.ProductIntroduction {
+				width: 90vw;
+				margin-top: 2vw;
+				box-sizing: border-box;
+				padding: 0 4vw;
+				display: flex;
+				justify-content: space-between;
+			}
+		}
+
+		.foot {
+			width: 90vw;
+			height: 20vw;
+			border-top: 1px solid lightgray;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+		}
+
+		.button {
+			width: 50vw;
+			height: 12vw;
+			text-align: center;
+			line-height: 12vw;
+			background-color: #f83036;
+			color: white;
+			border-radius: 32px;
+		}
+	}
+</style>

+ 266 - 0
XCX-Shop/pages/shopStore/detial.vue

@@ -0,0 +1,266 @@
+<template>
+	<view class="body" >
+		<view class="content"> 
+		<view>
+			<uniSwiperDot :info="info" :current="current" field="content" mode="default" :dots-styles=dotsStyles>
+				<swiper autoplay="true" circular="true" interval="4000" duration="500" class="swiper-box">
+					<swiper-item v-for="(item ,index) in productDetial.Product_images" :key="index" @click="clickItem(item)">
+						<image class="imagestyle" :src="item.url" mode=""></image>
+					</swiper-item>
+				</swiper>
+			</uniSwiperDot>
+		</view>
+		<view class="title">
+			<view class="titleCon">
+				<p> <span style="font-size: 1.5rem; color: red; font-weight: 550; margin-left: 2vw; " >¥{{productDetial.price_f}}</span><!-- <span style="color: grey; margin-left: 2vw; text-decoration: line-through; ">¥85</span> --></p>
+				<p style=" width: 44vw; background-color: #f7f7f7; font-size: 0.75rem; margin-top: 2vw;">{{productDetial.notes}} <!-- <span style="color: red; margin-left: 1vw;" >5%</span> --></p>
+				<p style="font-size: 1.2rem; font-weight: 550; margin-top: 2vw;">{{productDetial.name}}</p>
+		<!-- 		<p style="font-size: 0.75rem; color: grey; text-align: right; margin-top: 2vw;">已售: 59</p> -->
+			</view>
+		</view>
+		<!-- 选项 -->
+		<view class="option">
+			<view class="optionCon">
+			<view style="display: flex; font-size: 1rem; justify-content: space-around; margin-top: 2vw; ">
+				<!-- <p style=" color: grey;">已选</p> <p > 五香味45g*7 </p> <p>x3</p> <p> <image style="width: 6vw; height: 6vw; " src="../../static/youjian.png" mode=""></image> </p> -->
+				 	<u-popup v-model="show" mode="bottom" border-radius="30">
+				 			<view class="contentName">
+								<p style="position: absolute; right: 3vw; top: 3vw;"> <image style="width: 6vw; height: 6vw;" src="../../static/chahao.png"></image> </p>
+								<view class="PicTile">
+								<p> <image style="width: 25vw; height: 25vw;" src="../../static/latiao.png"></image> </p>
+									<view style="margin-left: 3vw;">
+										<p> <span style="color: red; font-size: 1.4rem; font-weight: 550;">¥78</span> <span style=" text-decoration: line-through; color: lightgrey; font-size: 0.75rem; ">¥78</span> </p>
+										<p style="margin-top: 2vw;">库存50件</p>
+										<p style="margin-top: 2vw;"> <span style="color: lightgray;">已选:</span> <span style="color: lightgray; margin-left: 2vw;">五香味45g*7</span> </p>
+									</view>
+								</view>
+								<view class="guige">
+									<view style="font-size: 1.2rem; font-weight: 550; margin-bottom: 3vw;" >规格</view>
+									<view style="width: 100vw; display: flex; flex-wrap: wrap;">
+										<p style="background-color: #fff5f5; padding: 2vw; color: red; border-radius: 20px; font-size: 0.9rem; ">五香味45g*7</p>
+									</view>
+									<view style="display: flex; justify-content: space-between;">
+										<view style="font-size: 1.2rem; font-weight: 550; margin-top: 3vw;">数量</view>
+										<view style=" width: 40vw; display: flex;  margin-left: 8vw;">
+											<p class="minus_quantity" @click="decrease">-</p>
+											<input class="input_quantity" type="number" v-model="quantity" @input="handleInput" />
+											<p class="add_quantity" @click="increase">+</p>
+										</view>
+									</view>
+								</view>
+								<view class="button" style="margin-left: 5vw;"> 确定 </view>
+							</view>
+				 		</u-popup>
+				</view>
+			<view style="display: flex; font-size: 1rem;  margin-top: 2vw; ">
+				<p style=" color: grey; margin-left: 6vw;"> 发货 </p>
+				<p style="margin-left: 10vw;">快递</p>
+			</view>
+			<view style="font-size: 0.9rem; color: grey; margin-left: 24vw;">
+				付款后2个工作日内发货
+			</view>
+			</view>
+		</view>
+		</view>
+		<view class="foot">
+				<view style="width: 20vw; height: 10vw; border-radius: 5px; text-align: center; line-height: 10vw; border: 1px solid lightgray;" @click="WeCom"> 咨询</view>
+			<view class="button" @click="purchase">立即购买</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default{
+		data(){
+			return{
+				quantity: 1,
+				show:false,
+				storeID:'',
+				dotsStyles: {
+					backgroundColor: 'rgba(83, 200, 249,0.3)',
+					border: '1px rgba(83, 200, 249,0.3) solid',
+					color: '#fff',
+					bottom: 2,
+					selectedBackgroundColor: 'white',
+					selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
+				},
+				info: [{
+					imgLink: '../../static/latiao.png'
+				} ],
+				productDetial:{}
+			}
+		},
+		onLoad(option) {
+			if(option.id){
+				this.storeID=option.id
+				this.ProductDetial(option.id)
+			}
+		},
+		methods:{
+			WeCom(){
+				console.log('1211')
+				uni.openCustomerServiceChat({
+				  extInfo: {url: 'https://work.weixin.qq.com/kfid/kfc3e7dfd18c794def3'},
+				  corpId: 'wwb8fbacb965f0006c',
+				  success(res) {
+					  console.log(res)
+				  },
+				  fail(res){
+					  console.log('错误',res)
+				  }
+				})
+			},
+			// 商品详情
+			ProductDetial(id){
+				this.$api.getProductDetial(id,res=>{
+					if(res.code==0){
+						this.productDetial=res.data
+					}
+				})
+			},
+			handleInput(event) {
+				const value = parseInt(event.target.value);
+				if (!isNaN(value) && value >= 1) {
+					this.quantity = value;
+				} else {
+					this.quantity = 1;
+				}
+			},
+			increase() {
+				this.quantity++;
+			},
+			decrease() {
+				if (this.quantity > 1) {
+					this.quantity--;
+				}
+			},
+			purchase(){
+				uni.navigateTo({
+					url:'/pages/shopStore/determineOrder?storeId='+this.storeID
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body{
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		overflow: hidden;
+		.content{
+			width: 100vw;
+			height: 100vh;
+			overflow-y: auto;
+			
+			background-color:#f8f8f8;
+			.swiper-box {
+				height: 80vw;
+			}
+			.imagestyle {
+				width: 100%;
+				height: 100%
+			}
+			.title{
+				width: 100vw;
+				height: 19vh;
+				border-radius: 10px;
+				background-color: #f8f8f8;
+				display: flex;
+				justify-content: center;
+				margin-top: 2vw;
+				.titleCon{
+					box-sizing: border-box;
+					width: 90vw;
+					height: 19vh;
+					padding: 4vw;
+					border-radius: 10px;
+					background-color: white;
+				}
+			}
+			.option{
+				width: 100vw;
+				height: 14vh;
+				margin-top: 2vw;
+				display: flex;
+				justify-content: center;
+				.optionCon{
+				box-sizing: border-box;
+				width: 90vw;
+				height: 11vh;
+				border-radius: 10px;
+				background-color: white;
+				.contentName{
+					width: 100vw;
+					height: 70vh;
+					border-radius: 10px 0 10px 0; 
+					background-color: #f8f8f8;
+					overflow: hidden;
+					.PicTile{
+						width: 100vw;
+						height: 16vh;
+						background-color: white;
+						display: flex;
+						box-sizing: border-box;
+						padding: 3vw;
+					}
+					.guige{
+						width: 100vw;
+						height: 43vh;
+						margin-top: 2vw;
+						background-color: white;
+						box-sizing: border-box;
+						padding: 2vw;
+						.minus_quantity {
+							border: 1px solid #f8f8f8;
+							text-align: center;
+							width: 20%;
+							background-color: #f8f8f8;
+							margin-right: 2vw;
+						
+						}
+						
+						.input_quantity {
+							// border-bottom: 1px solid #74bfe7;
+							text-align: center;
+							width: 20%;
+							height: 8vw;
+							background-color: #f8f8f8;
+						}
+						
+						.add_quantity {
+							border: 1px solid #f8f8f8;
+							background-color: #f8f8f8;
+							text-align: center;
+							width: 20%;
+							margin-left: 2vw;
+						}
+					}
+					
+				}
+				}
+			}
+			
+		}
+		.foot{
+			width: 100vw;
+			height: 20vw;
+			border-top: 1px solid lightgray;
+			position: fixed;
+			bottom: 0;
+			display: flex;
+			justify-content: space-around;
+			align-items: center;
+		}
+		.button{
+			width: 60vw;
+			height: 12vw;
+			text-align: center;
+			line-height: 12vw;
+			background-color: #f83036;
+			color: white;
+			border-radius: 10px;
+		}
+	}
+</style>

+ 166 - 0
XCX-Shop/pages/shopStore/index.vue

@@ -0,0 +1,166 @@
+<template>
+	<view class="body">
+		<view class="search">
+			<p>
+				<image style="width: 5vw; height: 5vw; margin-top: 1vw; " src="../../static/search.png"></image>
+			</p>
+			<p style="margin-left: 2vw;"> <input style="font-size: 0.75rem; width: 60vw; height: 10vw;" type="text"
+				 v-model="productName"	name="" id="" placeholder="搜索你想要的商品" @blur="search"> </p>
+		</view>
+		<!-- 滑动搜索 -->
+		<view class="slideSearch">
+			<p :class="index==int? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(item,int)"  v-for="(item,int) in typeProduct" :key="int" >{{item.name}}</p>
+	<!-- 		<p :class="index==1? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(1)">车载用品</p>
+			<p :class="index==2? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(2)">美容清洗</p>
+			<p :class="index==3? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(3)">运动户外</p>
+			<p :class="index==4? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(4)">智能家电</p>
+			<p :class="index==5? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(5)">科技数码</p>
+			<p :class="index==6? 'xuanzhong' : 'noxuanzhong'" @click="selectInfo(6)">箱包服饰</p> -->
+		</view>
+		<!-- 搜索 -->
+	<!-- 	<scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="refresherTriggered"
+			@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolowerEvent(event)"
+			lower-threshold="100">
+			</scroll-view> -->
+			<view class="content">
+				<view class="model" v-for="(item,index) in productList " :key="index" @click="ShopDetial(item.id)">
+					<p> <image style="width: 45vw; height: 45vw;" :src="item.cover_url.url"></image> </p>
+					<p style="font-size: 1rem; font-weight: 550;">{{item.name}}</p>
+					<p style="font-size: 0.75rem; margin-top: 2vw;"> <span style="font-size: 1rem; color: red;">¥{{item.price_f}}起</span> <!-- <span style="color: grey; text-decoration: line-through;">¥85</span> -->  </p>
+					<!-- <p style="font-size: 0.65rem; margin-top: 1vw; margin-bottom: 2vw;">恒信豆最高可抵实付全额 <span style="color: red; margin-left: 1vw; ">5%</span> </p> -->
+				</view>
+			</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				index: 0,
+				productList:[],
+				productName:'',
+				index:'',
+				typeProduct:[],
+				typeId:''
+			}
+		},
+		onLoad() {
+			
+		},
+		onTabItemTap(e){
+			this.ProductList(this.productName,this.typeId)
+			this.ProductType()
+		},
+		methods: {
+			search(){
+			this.ProductList(this.productName,this.typeId)
+			},
+			// 商品类别
+			ProductType(){
+				this.$api.getProductType(res=>{
+					if(res.code==0){
+						this.typeProduct=res.data
+					}
+				})
+			},
+			selectInfo(item,index) {
+				this.index = index
+				this.ProductList(this.productName,item.id)
+			},
+			ShopDetial(id){
+				uni.navigateTo({
+					url:'/pages/shopStore/detial?id='+id
+				})
+			},
+			// 商品列表
+			ProductList(name,id){
+				this.$api.getProductList(name,id,res=>{
+					if(res.code==0){
+						this.productList=res.data
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: white;
+		overflow: hidden;
+
+		.search {
+			box-sizing: border-box;
+			padding: 0 4vw;
+			width: 90vw;
+			margin-left: 5vw;
+			height: 12vw;
+			border-radius: 7vw;
+			background-color: #f8f8f8;
+			display: flex;
+			margin-top: 1vw;
+			align-items: center;
+		}
+
+		.slideSearch {
+			max-width: 100vw;
+			height: 13vw;
+			margin-top: 2vw;
+			display: flex;
+			white-space: nowrap;
+			/*不允许折行*/
+			overflow-x: auto;
+			/*启动横向滚动条*/
+			align-items: center;
+		}
+		.content{
+			width: 100vw;
+			height: 83vh;
+			display: flex;
+			flex-wrap: wrap; // 强制换行
+			padding:0 2vw;
+			box-sizing: border-box;
+			overflow-y: auto;
+			.model{
+				width: 48vw;
+				// height: 65vw;
+				display: flex;
+				flex-direction: column;
+				// justify-content: center;
+				background-color: white;
+				box-sizing: border-box;
+				padding: 0 2vw;
+				margin-top: 2vw;
+			}
+		}
+
+		.noxuanzhong {
+			width: 20vw;
+			height: 7vw;
+			box-sizing: border-box;
+			padding-left: 2vw;
+			padding-right: 2vw;
+			font-size: 0.8rem;
+			line-height: 7vw;
+			text-align: center;
+		}
+
+		.xuanzhong {
+			width: 20vw;
+			height: 7vw;
+			box-sizing: border-box;
+			padding-left: 2vw;
+			padding-right: 2vw;
+			font-size: 0.8rem;
+			color: red;
+			border-radius: 20px;
+			border: 1px solid red;
+			line-height: 7vw;
+			text-align: center;
+			margin-right: 4vw;
+		}
+	}
+</style>

+ 186 - 0
XCX-Shop/pages/shopStore/saveAddress.vue

@@ -0,0 +1,186 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view style="margin-left: 4vw;">收获地址</view>
+			<view class="model">
+				<p style="margin-left: -4vw;">姓名</p>
+				<p> <input type="text" v-model="name" placeholder="请输入收获人手机号"> </p>
+			</view>
+			<view class="model">
+				<p style="margin-left: -3vw;">手机号</p>
+				<p> <input type="text" v-model="tel" placeholder="请输入收货人手机号"> </p>
+			</view>
+			<view class="model" @click="city">
+				<p style="margin-left: 4vw;">地区</p>
+				<p> <input style="margin-left: 16vw;" v-model="area" type="text" disabled="true" placeholder="请选择省/市/区"> </p>
+				<p>
+					<image style="width: 5vw; height: 5vw;" src="../../static/dingwei.png"></image>
+				</p>
+			</view>
+			<view class="Textmodel">
+				<p style="margin-left: 4vw;">详细地址</p>
+				<p> <textarea
+						style="width: 60vw; height: 15vh; background-color: #f8f8f8; font-size: 0.9rem; padding: 1vw; "
+						type="text" v-model="addr" placeholder="街道门牌,楼道等信息"></textarea> </p>
+			</view>
+		</view>
+		<view class="setaddress">
+			<view>
+				<p style="font-size: 1rem;">设置默认地址</p>
+				<p style="font-size: 0.8rem; color: lightgrey; margin-top: 2vw; ">每次下单会默认推荐使用该地址</p>
+			</view>
+			<view>
+				<u-switch size="40" v-model="checked" @change="change"></u-switch>
+			</view>
+		</view>
+		<view class="button" @click="saveAddress"> 保存 </view>
+		<u-toast ref="uToast" />
+		<u-picker mode="region"  v-model="show" @cancel="cancel" @confirm="confirm"
+			:area-code='["13", "1303", "130304"]'></u-picker>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value: '',
+				show: false,
+				checked: false,
+				name:'',
+				tel:'',
+				area:'',
+				addr:'',
+				default:false,
+				addressInfo:""
+			}
+		},
+		onLoad(option) {
+			if(option.addressInfo){
+				
+				this.addressInfo=JSON.parse(decodeURIComponent(option.addressInfo))
+				console.log('-------',this.addressInfo)
+				this.name=this.addressInfo.name
+				this.tel=this.addressInfo.tel
+				this.area=this.addressInfo.area
+				this.addr=this.addressInfo.addr
+				this.default=this.addressInfo.default
+			}
+		},
+		methods: {
+			change(status) {
+				this.default=status
+			},
+			saveAddress(){
+				if(this.addressInfo!=''){
+					this.$api.postEdimtAddress(this.addressInfo.id,{name:this.name,tel:this.tel,addr:this.addr,area:this.area,default:this.default},res=>{
+						if(res.code==0){
+							this.successToast('操作成功')
+							uni.navigateBack({
+								url:1
+							});
+						}else{
+						this.errorToast(res.msg)	
+						}
+					})
+				}else{
+					this.$api.postAddress({name:this.name,tel:this.tel,addr:this.addr,area:this.area,default:this.default},res=>{
+						if(res.code==0){
+							this.successToast('操作成功')
+							uni.navigateBack({
+								url:1
+							});
+						}else{
+						this.errorToast(res.msg)	
+						}
+					})
+				}
+			
+			},
+			city() {
+				this.show = true
+			},
+			confirm(e) {
+				this.area= e.province.label+e.city.label +e.area.label
+			},
+			cancel(e) {
+				this.show=false
+				console.log("取消")
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		box-sizing: border-box;
+		padding: 0 5vw;
+
+		.content {
+			width: 90vw;
+			height: 50vh;
+			background-color: white;
+			border-radius: 5px;
+			box-sizing: border-box;
+			padding: 3vw;
+
+			.model {
+				width: 84vw;
+				height: 15vw;
+				display: flex;
+				justify-content: space-around;
+				align-items: center;
+				border-bottom: 1px solid #f8f8f8;
+			}
+
+			.Textmodel {
+				width: 84vw;
+				height: 30vh;
+				display: flex;
+				justify-content: space-around;
+				border-bottom: 1px solid #f8f8f8;
+			}
+		}
+
+		.button {
+			width: 90vw;
+			height: 12vw;
+			text-align: center;
+			line-height: 12vw;
+			background-color: #f83036;
+			color: white;
+			border-radius: 32px;
+			margin-top: 5vw;
+		}
+
+		.setaddress {
+			width: 90vw;
+			height: 10vh;
+			background-color: white;
+			border-radius: 5px;
+			margin-top: 2vw;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			box-sizing: border-box;
+			padding: 0 2vw;
+		}
+	}
+</style>

+ 135 - 0
XCX-Shop/pages/userInfo/TestDrive.vue

@@ -0,0 +1,135 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+		           <view >
+					<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+						<view class="paddingOder">
+							<view class="model" v-for="(item,index) in noticeList" :key=index>
+								<ul>
+									<li>
+										<view class="Number">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>车型:</p>
+											<p style="margin-left: 2vw;">{{item.series_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>品牌:</p>
+											<p style="margin-left: 2vw;">{{item.brand_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: green; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>状态:</p>
+											<p style="margin-left: 2vw; color: #fed204;">{{item.status_text}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: blue; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>公司:</p>
+											<p style="margin-left: 2vw;">{{item.shop_name}}</p>
+										</view>
+									</li>
+									<!-- <li> <image style="width: 20vw; height: 20vw; margin-top: 2vw;" :src="item.imgLink"></image></li> -->
+								</ul>
+							</view>			   
+						</view>
+		           </view>
+		   </view>
+	</view>
+</template>
+<script>
+		
+		export default{
+		
+			data(){
+				return{
+					trailerKeyboardShow:true,
+					control:false,
+					scrollTop: 0,
+					token:'',
+					noticeList:[],
+					page:1,
+					totals:'',
+					pageSize:'',
+					status:1
+				}
+			},
+			onLoad() {
+				this.getNoticeLists()
+			},
+			methods:{
+				 //  lower(e){
+					//   if(this.pageSize*this.page<this.totals){
+					// 	  this.page+=1
+					// 	  	this.getNoticeLists(this.page,this.status)
+					//   }
+					
+				 //  },
+				  getNoticeLists(){
+					  this.$api.getdriveReserve(res=>{
+						  if(res.code==0){
+							  this.noticeList= res.data
+						  }else{
+							  this.errorToast(res.msg)
+						  }
+					  })
+				  },
+				  errorToast(msg){
+				  	this.$refs.uToast.show({
+				  		title: msg,
+				  		type: 'error',
+				  		duration:2000
+				  	})
+				  },
+			},
+			
+		}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa ;
+	}
+	.paddingOder{
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		.model{
+			width: 96vw;
+			height: 26vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+			ul{
+				display: flex;
+				justify-content: space-between;
+				li{
+					.Number{
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+					.playOder{
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color:#808080;
+					}
+				}
+				li:nth-child(2){
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

+ 136 - 0
XCX-Shop/pages/userInfo/Vehicle.vue

@@ -0,0 +1,136 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+		           <view >
+					<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+						<view class="paddingOder">
+							<view class="model" v-for="(item,index) in noticeList" :key=index>
+								<ul>
+									<li>
+										<view class="Number">
+											<p style="width: 1vw; height: 1vw; background-color: blue; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>单号:</p>
+											<p style="margin-left: 2vw;">{{item.no}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>商品名称:</p>
+											<p style="margin-left: 2vw;">{{item.product_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>价格:</p>
+											<p style="margin-left: 2vw; color: red;">¥{{item.price}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: green; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>状态:</p>
+											<p style="margin-left: 2vw; color: #fed204;">{{item.status_text}}</p>
+										</view>
+										
+									</li>
+									<!-- <li> <image style="width: 20vw; height: 20vw; margin-top: 2vw;" :src="item.imgLink"></image></li> -->
+								</ul>
+							</view>			   
+						</view>
+		           </view>
+		   </view>
+	</view>
+</template>
+<script>
+		
+		export default{
+		
+			data(){
+				return{
+					trailerKeyboardShow:true,
+					control:false,
+					scrollTop: 0,
+					token:'',
+					noticeList:[],
+					page:1,
+					totals:'',
+					pageSize:'',
+					status:1
+				}
+			},
+			onLoad() {
+				this.getNoticeLists()
+			},
+			methods:{
+				 //  lower(e){
+					//   if(this.pageSize*this.page<this.totals){
+					// 	  this.page+=1
+					// 	  	this.getNoticeLists(this.page,this.status)
+					//   }
+					
+				 //  },
+				  getNoticeLists(){
+					  this.$api.getorderlist(res=>{
+						  if(res.code==0){
+							  this.noticeList= res.data
+						  }else{
+							  this.errorToast(res.msg)
+						  }
+					  })
+				  },
+				  errorToast(msg){
+				  	this.$refs.uToast.show({
+				  		title: msg,
+				  		type: 'error',
+				  		duration:2000
+				  	})
+				  },
+			},
+			
+		}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa ;
+	}
+	.paddingOder{
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		.model{
+			width: 96vw;
+			height: 26vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+			ul{
+				display: flex;
+				justify-content: space-between;
+				li{
+					.Number{
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+					.playOder{
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color:#808080;
+					}
+				}
+				li:nth-child(2){
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

+ 203 - 0
XCX-Shop/pages/userInfo/baoxian.vue

@@ -0,0 +1,203 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view class="heade">
+				欢迎您光顾,请仔细填写您的信息!
+			</view>
+			<!-- 门店 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;" @click="storeInfo">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">门店</span> <input type="text"
+						v-model="storeName" placeholder="请选择门店"
+						disabled="true"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 姓名 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">姓名</span> <input type="text"
+						placeholder="请输入你的姓名" v-model="name"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 手机号 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">电话</span> <input type="text"
+						placeholder="请输入你的车牌" v-model="tel"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+			</view>
+			<!-- 车型 -->
+			<view style="width: 85vw; height: 65vw;  border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">备注</span>
+				</p>
+				<p style="height: 40vw;">
+					<textarea style="width: 75vw; border: 1px solid #f8f8f8; height: 40vw;  overflow: auto;" placeholder="请输入备注信息"
+						v-model="content"></textarea>
+				</p>
+			</view>
+
+			<u-toast ref="uToast" />
+			<view class="button" @click="submit">提交</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				shop: '',
+				name: '',
+				tel: '',
+				content: '',
+				storeName:''
+			}
+		},
+		onShow(object) {
+			if(object){
+				this.storeName=object.name
+				this.shop=object.id
+			}
+		},
+		onLoad() {
+			if (this.$db.get('tel')) {
+				this.tel = this.$db.get('tel')
+			}
+		},
+		methods: {
+			storeInfo(){
+				uni.navigateTo({
+					url:'/pages/index/storeList'
+				})
+			},
+			// 提交
+			submit() {
+				if (!this.$db.get('token')) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+				this.$api.postConsultation({
+					shop: this.shop,
+					name: this.name,
+					tel: this.tel,
+					content: this.content
+				}, res => {
+					if (res.code == 0) {
+						this.successToast('提交成功')
+						this.$nextTick(() => {
+							this.storeName=''
+							this.name = ''
+							this.shop = ''
+							this.content = ''
+						})
+					} else {
+						this.errorToast('请输入必填项')
+					}
+				})
+
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		display: flex;
+		justify-content: center;
+
+		.content {
+			width: 95vw;
+			height: 80vh;
+			background-color: white;
+			border-radius: 5px;
+			padding: 2vw;
+
+			.heade {
+				width: 95vw;
+				height: 22vw;
+				box-sizing: border-box;
+				text-align: center;
+				padding: 8vw 15vw 5vw 15vw;
+				font-size: 0.9rem;
+				color: gray;
+				border-bottom: 1px solid #f8f8f8;
+				;
+			}
+
+			.picture {
+				width: 95vw;
+				height: 14vh;
+				display: flex;
+				justify-content: space-around;
+				align-items: center;
+
+				.front {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+
+				.opposite {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+			}
+
+			.agreement {
+				display: flex;
+				font-size: 0.8rem;
+				width: 96vw;
+				justify-content: center;
+				align-items: center;
+				height: 10vh;
+
+			}
+
+			.button {
+				width: 85vw;
+				height: 10vw;
+				margin-top: 10vw;
+				background-color: red;
+				line-height: 10vw;
+				border-radius: 5vw;
+				color: white;
+				text-align: center;
+				margin-left: 5vw;
+			}
+		}
+	}
+</style>

+ 245 - 0
XCX-Shop/pages/userInfo/bindCar.vue

@@ -0,0 +1,245 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<view class="heade">
+				欢迎您光顾,请仔细填写您的车辆信息!
+			</view>
+			<!-- 姓名 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">您的姓名</span> <input type="text"
+						v-model="name" placeholder="请输入你的姓名"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 手机号 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">手机号码</span> <input type="text"
+						placeholder="请输入你的电话" v-model="tel"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 手机号 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车牌号</span> <input type="text"
+						placeholder="请输入你的车牌" v-model="Number"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+			</view>
+			<!-- 车型 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;">*</span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车型</span> <input type="text"
+						placeholder="请输入您的车型" v-model="model"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 12vw; " />
+				</p>
+			</view>
+			<!-- 车架号 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">车架号</span> <input type="text"
+						placeholder="请输入您的车架号" v-model="vin"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 9vw; " />
+				</p>
+			</view>
+			<!-- 年检到期时间 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">年检到期</span> <input type="text"
+						placeholder="请输入您的年检到期时间" v-model="inspecEndDate" @focus="inspectShow" 
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!-- 保险到期时间 -->
+			<view style="width: 85vw; height: 12vw; display: flex; border-bottom: 1px solid #f8f8f8;">
+				<p style="display: flex;"><span style="color: red;  line-height: 11vw;"></span> <span
+						style="font-size: 0.8rem; line-height: 10vw; margin-left: 1vw;">保险到期</span> <input type="text"
+						placeholder="请输入您的保险到期时间" v-model="insureEndDate" @focus="insureShow"
+						style="font-size: 0.8rem; width: 50vw; height: 10vw; line-height: 10vw; margin-left: 6vw; " />
+				</p>
+			</view>
+			<!--  提交-->
+			<u-picker mode="time" v-model="inspecshows" @confirm="inspecconfirm" @cancel="cancel"></u-picker>
+			<u-picker mode="time" v-model="insureshows" @confirm="insureconfirm" @cancel="cancel"></u-picker>
+			<u-toast ref="uToast" />
+			<view class="button" @click="submit">提交</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				inspecshows: false,
+				insureshows: false,
+				date: '',
+				name: '',
+				tel: '',
+				Number: '',
+				model: '',
+				vin: '',
+				inspecEndDate: null,
+				insureEndDate: null
+			}
+		},
+		onLoad() {
+			if(this.$db.get('tel')){
+				this.tel=this.$db.get('tel')
+			}
+			if(this.$db.get('name')){
+				this.name=this.$db.get('name')
+			}
+		},
+		methods: {
+			insureShow() {
+				this.insureshows = true
+			},
+			inspectShow() {
+				this.inspecshows = true
+			},
+			// 时间
+			inspecconfirm(e) {
+				this.inspecEndDate = e.year + '-' + e.month + '-' + e.day
+			},
+			insureconfirm(e) {
+				this.insureEndDate = e.year + '-' + e.month + '-' + e.day
+			},
+			cancel() {
+				this.show = false
+			},
+			// 提交
+			submit() {
+				if (!this.$db.get('token')) {
+					uni.navigateTo({
+						url: '/pages/login/login'
+					})
+					return
+				}
+				this.$api.postBindCar({
+					name: this.name,
+					tel: this.tel,
+					number: this.Number,
+					model: this.model,
+					vin: this.vin,
+					inspect_end_date: this.inspecEndDate,
+					insure_end_date: this.insureEndDate
+				}, res => {
+					if (res.code == 0) {
+						this.successToast('提交成功')
+						this.$nextTick(() => {
+							this.name = ''
+							this.tel = ''
+							this.Number = ''
+							this.model = ''
+							this.vin = ''
+							this.inspecEndDate=null
+							this.insureEndDate=null
+						})
+					} else {
+						this.errorToast('请填写必填项')
+					}
+				})
+
+			},
+			successToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'success',
+					duration: 1000
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 1000
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: #f8f8f8;
+		display: flex;
+		justify-content: center;
+
+		.content {
+			width: 95vw;
+			height: 80vh;
+			background-color: white;
+			border-radius: 5px;
+			padding: 2vw;
+
+			.heade {
+				width: 95vw;
+				height: 22vw;
+				box-sizing: border-box;
+				text-align: center;
+				padding: 8vw 15vw 5vw 15vw;
+				font-size: 0.9rem;
+				color: gray;
+				border-bottom: 1px solid #f8f8f8;
+				;
+			}
+
+			.picture {
+				width: 95vw;
+				height: 14vh;
+				display: flex;
+				justify-content: space-around;
+				align-items: center;
+
+				.front {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+
+				.opposite {
+					width: 40vw;
+					height: 25vw;
+					background-color: #f8f8f8;
+					border: 1px dashed #d8d8d8;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					align-items: center;
+				}
+			}
+
+			.agreement {
+				display: flex;
+				font-size: 0.8rem;
+				width: 96vw;
+				justify-content: center;
+				align-items: center;
+				height: 10vh;
+
+			}
+
+			.button {
+				width: 85vw;
+				height: 10vw;
+				margin-top: 10vw;
+				background-color: red;
+				line-height: 10vw;
+				border-radius: 5vw;
+				color: white;
+				text-align: center;
+				margin-left: 5vw;
+			}
+		}
+	}
+</style>

+ 178 - 0
XCX-Shop/pages/userInfo/bindlog.vue

@@ -0,0 +1,178 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+			<view>
+				<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+				<view class="paddingOder">
+					<view class="model" v-for="(item,index) in noticeList" :key=index>
+						<ul>
+							<li>
+								<view class="Number">
+									<p
+										style="width: 1vw; height: 1vw; background-color: blue; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;">
+									</p>
+									<p>品牌:</p>
+									<p style="margin-left: 2vw;">{{item.model}}</p>
+								</view>
+								<view class="playOder">
+									<p
+										style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;">
+									</p>
+									<p>姓名:</p>
+									<p style="margin-left: 2vw;">{{item.name}}</p>
+								</view>
+								<view class="playOder">
+									<p
+										style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;">
+									</p>
+									<p>电话:</p>
+									<p style="margin-left: 2vw; ">{{item.tel}}</p>
+								</view>
+								<view class="playOder">
+									<p
+										style="width: 1vw; height: 1vw; background-color: green; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;">
+									</p>
+									<p>车牌:</p>
+									<p style="margin-left: 2vw; color: red;">{{item.number}}</p>
+								</view>
+
+							</li>
+							<li :style="{backgroundColor:item.has_orders==true? 'red' : 'grey'  }"
+								@click="maintenanceLog(item)"> {{ item.has_orders==true? '维修记录' : '暂无记录' }} </li>
+						</ul>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="button" @click="submit">添加绑定</view>
+	</view>
+</template>
+<script>
+	export default {
+
+		data() {
+			return {
+				trailerKeyboardShow: true,
+				control: false,
+				scrollTop: 0,
+				token: '',
+				noticeList: [],
+				page: 1,
+				totals: '',
+				pageSize: '',
+				status: 1
+			}
+		},
+		onLoad() {
+			this.getNoticeLists()
+		},
+		methods: {
+			submit(){
+				uni.navigateTo({
+					url:'/pages/userInfo/bindCar'
+				})
+			},
+			maintenanceLog(item) {
+				if (item.has_orders == true) {
+					uni.navigateTo({
+						url: '/pages/userInfo/maintenanceList?id=' + item.id
+					})
+				}
+			},
+			getNoticeLists() {
+				this.$api.getBindCar(res => {
+					if (res.code == 0) {
+						this.noticeList = res.data
+					} else {
+						this.errorToast(res.msg)
+					}
+				})
+			},
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 2000
+				})
+			},
+		},
+
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa;
+	}
+
+	.button {
+		position: fixed;
+		width: 85vw;
+		height: 10vw;
+		margin-top: 10vw;
+		background-color: red;
+		line-height: 10vw;
+		border-radius: 5vw;
+		color: white;
+		text-align: center;
+		margin-left: 5vw;
+		bottom: 3vw;
+	}
+
+	.paddingOder {
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		overflow-y: auto;
+
+		.model {
+			width: 96vw;
+			height: 25vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+
+			ul {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				li {
+					.Number {
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+
+					.playOder {
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color: #808080;
+					}
+				}
+
+				li:nth-child(2) {
+					width: 20vw;
+					height: 8vw;
+					line-height: 20vw;
+					text-align: center;
+					line-height: 8vw;
+					border-radius: 5px;
+
+					color: white;
+				}
+			}
+		}
+	}
+</style>

+ 343 - 0
XCX-Shop/pages/userInfo/index.vue

@@ -0,0 +1,343 @@
+<template>
+	<view class="body">
+		<view class="userinfo">
+			<view class="heardImage">
+				<view class="img">
+					<view style="width: 20vw; border-radius: 50%; padding: 0;margin: 0vw; height:20vw;"
+						@click="getShow">
+						<image class="avatar" style="width: 20vw; height: 20vw; border-radius: 50%;"
+							:src="avatarUrl==''? '../../static/heard.png' : avatarUrl ">
+						</image>
+					</view>
+				</view>
+				<view class="usercon">
+					<p style="display: flex;"> <span>会员:</span> <span>{{name}}</span> </p>
+					
+				</view>
+			</view>
+			<view class="bcar_border">  
+			<view class="contentBiref">
+				<view style="display: flex; width: 96vw;  justify-content: space-around; margin-top: 2vw; ">
+					<view class="model" @click="bindLog">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/bindCar.png" mode=""></image>
+						</p>
+						<p>绑定记录</p>
+					</view>
+					
+					<view class="model" @click="zhihuanCar">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/orderlist.png" mode=""></image>
+						</p>
+						<p>我的订单</p>
+					</view>
+				</view>
+				<view style="display: flex; width: 96vw;  justify-content: space-around; margin-top: 10vw; ">
+					<view class="model" @click="orderList">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/userOrder.png" mode=""></image>
+						</p>
+						<p>我的询价</p>
+					</view>
+					<view class="model" @click="textDrive">
+						<p>
+							<image style="width: 13vw; height: 13vw; "  src="../../static/userYuyue.png" mode=""></image>
+						</p>
+						<p>试驾记录</p>
+					</view>
+					<view class="model" @click="maintenance">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/userBaoyang.png" mode=""></image>
+						</p>
+						<p>预约记录</p>
+					</view>
+				</view>
+				<view style="display: flex; width: 96vw;  justify-content: space-around; margin-top: 10vw; ">
+					<view class="model" @click="baodan">
+						<p>
+							<image style="width: 13vw; height: 13vw; "  src="../../static/baoxian.png" mode=""></image>
+						</p>
+						<p>保险咨询</p>
+					</view>
+					<view class="model" @click="replacement">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/zhihuanjilu.png" mode=""></image>
+						</p>
+						<p>置换记录</p>
+					</view>
+					<view class="model" @click="CarBind">
+						<p>
+							<image style="width: 13vw; height: 13vw; " src="../../static/userCar.png" mode=""></image>
+						</p>
+						<p>车辆绑定</p>
+					</view>
+					
+				</view>
+			</view>
+			</view>
+			
+			<view class="biref">
+				
+				<u-popup v-model="show" mode="bottom" border-radius="20" width="500rpx" height="300px">
+					<view style="padding: 2vw;">
+						<view style="display: flex; margin-top: 3vw;">
+							<p>
+								<image style="width: 6vw;height: 6vw;" src="/static/selectIndex.png"></image>
+							</p>
+							<p><span style="font-size:0.8rem;margin-left: 2vw; ">泡泡猪24小时自助洗车 </span> <span
+									style="font-size: 0.8rem; margin-left: 2vw;">申请</span> </p>
+						</view>
+						<view style="font-size: 1rem; margin-top: 3vw;"> 获取你的头像、昵称 </view>
+						<view
+							style="display: flex; height: 15vw; margin-top: 3vw; align-items: center; justify-content:space-between; border-top: 0.5rpx solid #eaeaea;  border-bottom: 0.5rpx solid #eaeaea;">
+							<!-- <view style="display: flex; width: 26vw; justify-content: space-between; align-items: center;">
+								
+								 </view> -->
+							<p>头像</p>
+							<button class="button"
+								style="width: 80vw; margin-left: 5vw; border-radius: 10px; background-color: white; border: none; padding: 0;margin: 0vw; height: 10vw;"
+								open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
+								<image class="avatar" style="width: 10vw; height: 10vw; border-radius: 10px;margin-left: -62vw;"
+									:src="avatarUrl">
+								</image>
+							</button>
+							<p>
+								<image style="width: 5vw; height: 5vw; " src="../../static/danjian.png"></image>
+							</p>
+						</view>
+						<view style="display: flex; height: 15vw; align-items: center; border-bottom: 0.5rpx solid #eaeaea;">
+							<p>昵称:</p>
+							<p style="margin-left: 5vw;"><input type="nickname" placeholder="请输入昵称" class="input" :value="name"
+									@focus="bindblur" /></p>
+						</view>
+						<view
+							style="display: flex; height: 24vw; align-items: center; justify-content: space-between; padding: 0 13vw;">
+							<p style="width: 20vw;  border-radius: 5px; background-color: #eaeaea; height: 10vw; line-height: 10vw; text-align: center; font-size: 0.75rem;"
+								@click="operate('refuse')">拒绝</p>
+							<p style="width: 20vw; border-radius: 5px; background-color: #0cb70c; height: 10vw; line-height: 10vw; text-align: center; font-size: 0.75rem;"
+								@click="operate('allow')">允许</p>
+						</view>
+					
+					
+					</view>
+				
+				</u-popup>
+			</view>
+		</view>
+		<!-- <view style=" width: 100vw; height: 50vw; text-align: center; line-height: 50vw; ">暂无内容</view> -->
+	</view>
+</template>
+
+<script>
+import { vShow } from "vue"
+	export default {
+		data() {
+			return {
+				show:false,
+				avatarUrl: '',
+				avatar:'',
+				name:''
+			}
+		},
+		
+		onLoad() {
+
+		},
+		onShow() {
+			if(!this.$db.get('token')){
+				uni.navigateTo({
+					url:'/pages/login/login'
+				})
+			}
+			this.getUser()
+		},
+		onTabItemTap(e){
+			
+			
+		},
+		methods: {
+			bindLog(){
+				uni.navigateTo({
+					url:'/pages/userInfo/bindlog'
+				})
+			},
+			baodan(){
+				uni.navigateTo({
+					url:'/pages/userInfo/baoxian'
+				})
+			},
+			zhihuanCar(){
+				uni.navigateTo({
+					url:'/pages/userInfo/Vehicle'
+				})
+			},
+			maintenance(){
+				uni.navigateTo({
+					url:'/pages/userInfo/maintenance'
+				})
+			},
+			textDrive(){
+				uni.navigateTo({
+					url:'/pages/userInfo/TestDrive'
+				})
+			},
+			orderList(){
+				uni.navigateTo({
+					url:'/pages/userInfo/orderList'
+				})
+			},
+			replacement(){
+				uni.navigateTo({
+					url:'/pages/userInfo/replacementlog'
+				})
+			},
+			// 获取个人信息
+			getUser(){
+				this.$api.getUserInfo(res=>{
+					if(res.code==0){
+						this.getBase64ImageUrl(res.data.face)
+						this.avatar=res.data.face
+						this.name=res.data.name
+						if(res.data.face==''){
+							this.show=true
+						}
+					}
+				})
+			},
+			getShow(){
+			this.show=true	
+			},
+		onChooseAvatar(e) {
+			this.base64(e.detail.avatarUrl)
+			this.avatarUrl = e.detail.avatarUrl // 此处是头像的临时路径
+		},
+		bindblur(e) {
+			this.name = e.detail.value // 获取微信昵称
+		},
+		// 操作是否上传头像
+		operate(item) {
+			this.$store.commit('getNicknameState', 1)
+			if (item == 'allow') {
+				// 调接口传数据
+				// if(this.avatar==''){
+				// 	this.avatar=this.avatarUrl
+				// }
+				this.$api.postupUserInfo({
+					face: this.avatar,
+					name: this.name
+				}, res => {
+					if (res.code == 0) {
+						this.show = false
+					}
+				})
+			} else {
+				this.show = false
+			}
+		},
+		//// 图片转64代码
+		async base64(url, type) {
+			await wx.getFileSystemManager().readFile({
+					filePath: url, //选择图片返回的相对路径
+					encoding: 'base64', //编码格式
+					success: res => {
+						this.avatar=res.data
+					},
+					fail: res => this.errorToast(res.msg)
+				})
+		},
+		//把base64转换成图片
+		getBase64ImageUrl(base64Url) {
+			var base64Data = base64Url;
+			/// 通过微信小程序自带方法将base64转为二进制去除特殊符号,再转回base64
+			base64Data = uni.arrayBufferToBase64(uni.base64ToArrayBuffer(base64Data));
+			/// 拼接请求头,data格式可以为image/png或者image/jpeg等,看需求
+			this.avatarUrl = "data:image/png;base64," + base64Data;
+		},
+		// 车辆绑定
+		CarBind(){
+			uni.navigateTo({
+				url:'/pages/userInfo/bindCar'
+			})
+		}
+		}
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.button::after {
+		border: none;
+	}
+	.body {
+		width: 100vw;
+		height: 100vh;
+		background-color: white;
+
+		.userinfo {
+			width: 100vw;
+			height: 100vh;
+			background-color: white;
+			overflow: hidden;
+			// .bcar_border{
+			// 	width: 100vw;
+			// 	height: 10vh;
+			// 	background-color: #f1f1f1;
+			// 	.model{
+			// 		width: 28vw;
+			// 		height: 20vw;
+			// 		display: flex;
+			// 		justify-content: center;
+			// 		align-items: center;
+			// 		flex-direction: column;
+			// 	}
+			// }
+
+			.heardImage {
+				display: flex;
+				align-items: center;
+				height: 15vh;
+				margin-top: 2vw;
+				margin-left: 10vw;
+				margin-bottom: 2vw;
+
+				.img {
+					width: 20vw;
+					height: 20vw;
+					background-color: white;
+					border-radius: 50%;
+				}
+
+				.usercon {
+					font-size: 1rem;
+					margin-left: 4vw;
+				}
+			}
+
+			.biref {
+				width: 100vw;
+				height: 50vw;
+				.contentBiref {
+					width: 96vw;
+					margin-left: 2vw;
+					z-index: 999;
+					background-color: white;
+					height: 40vw;
+					border-radius: 5px;
+					display: flex;
+					flex-wrap: wrap;
+					justify-content: space-around;
+					.model{
+						width: 28vw;
+						height: 20vw;
+						display: flex;
+						justify-content: center;
+						align-items: center;
+						flex-direction: column;
+					}
+				}
+
+			}
+		}
+
+	}
+</style>

+ 136 - 0
XCX-Shop/pages/userInfo/maintenance.vue

@@ -0,0 +1,136 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+		           <view >
+					<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+						<view class="paddingOder">
+							<view class="model" v-for="(item,index) in noticeList" :key=index>
+								<ul>
+									<li>
+										<view class="Number">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>车系:</p>
+											<p style="margin-left: 2vw;">{{item.model_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>状态:</p>
+											<p style="margin-left: 2vw; color: red;">{{item.status_text}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: #fed904; border-radius: 50%;margin-top: 2vw;  margin-right: 2vw;"></p>
+											<p>预约时间:</p>
+											<p style="margin-left: 2vw;">{{item.date}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>公司:</p>
+											<p style="margin-left: 2vw;">{{item.shop_name}}</p>
+										</view>
+										
+									</li>
+									<!-- <li> <image style="width: 20vw; height: 20vw; margin-top: 2vw;" :src="item.imgLink"></image></li> -->
+								</ul>
+							</view>			   
+						</view>
+		           </view>
+		   </view>
+	</view>
+</template>
+<script>
+		
+		export default{
+		
+			data(){
+				return{
+					trailerKeyboardShow:true,
+					control:false,
+					scrollTop: 0,
+					token:'',
+					noticeList:[],
+					page:1,
+					totals:'',
+					pageSize:'',
+					status:1
+				}
+			},
+			onLoad() {
+				this.getNoticeLists()
+			},
+			methods:{
+				 //  lower(e){
+					//   if(this.pageSize*this.page<this.totals){
+					// 	  this.page+=1
+					// 	  	this.getNoticeLists(this.page,this.status)
+					//   }
+					
+				 //  },
+				  getNoticeLists(){
+					  this.$api.getmaintReserve(res=>{
+						  if(res.code==0){
+							  this.noticeList= res.data
+						  }else{
+							  this.errorToast(res.msg)
+						  }
+					  })
+				  },
+				  errorToast(msg){
+				  	this.$refs.uToast.show({
+				  		title: msg,
+				  		type: 'error',
+				  		duration:2000
+				  	})
+				  },
+			},
+			
+		}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa ;
+	}
+	.paddingOder{
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		.model{
+			width: 96vw;
+			height: 28vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+			ul{
+				display: flex;
+				justify-content: space-between;
+				li{
+					.Number{
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+					.playOder{
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color:#808080;
+					}
+				}
+				li:nth-child(2){
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

+ 119 - 0
XCX-Shop/pages/userInfo/maintenanceList.vue

@@ -0,0 +1,119 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+			<u-collapse :item-style="itemStyle" accordion="true" event-type="close" arrow="true" :accordion="accordion">
+				<u-collapse-item :index="index" :title="item.time" v-for="(item, index) in noticeList"
+					:key="index">
+					<view class="collapse-item">
+						<p style="margin-left: 2vw;font-size: 0.8rem;"> <span>姓名:</span> <span style="margin-left: 2vw;"></span> <span style="color: red;"> {{item.name}}</span> </p>
+							<p style="margin-left: 2vw;font-size: 0.8rem;"> <span>服务顾问:</span> <span style="margin-left: 2vw;"></span> <span style="color: red;"> {{item.create_user}}</span> </p>
+							<view style="margin-left: 2vw;font-size: 0.8rem;"> <p>配件用料:</p> <p style=" color: red; ">{{item.parts}}</p> </view>
+							<view style="margin-left: 2vw;font-size: 0.8rem;"> <p>维修项目:</p> <p style=" color: red; "> {{item.rapairs}} </p></view>
+							<view  style="margin-left: 2vw;font-size: 0.8rem;"> <p>描述:</p> <p style="color: red;"> {{item.description}}</p> </view >
+							<p style="margin-left: 2vw;font-size: 0.8rem;"> <span>时间:</span> <span style="margin-left: 2vw;"></span> <span style="color: red;"> {{item.time}}</span> </p>
+						</view>
+						<!-- 	</scroll-view> -->
+					
+				</u-collapse-item>
+			</u-collapse>
+			</view>
+	</view>
+</template>
+<script>
+	// import uniSegmentedControl from '@/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue'
+	export default {
+	
+		data() {
+			return {
+				trailerKeyboardShow: true,
+				control: false,
+				scrollTop: 0,
+				token: '',
+				noticeList: [],
+				page:1
+				
+			}
+		},
+		onLoad(option) {
+			if(option.id){
+				console.log(option.id)
+				this.getMaintenanceList(option.id)
+			}
+		},
+		methods: {
+			getMaintenanceList(id) {
+				this.$api.getMaintenanceLog(id,res => {
+					if (res.code == 0) {
+					
+							this.noticeList = res.data.data
+						
+					} else {
+						this.errorToast(res.msg)
+					}
+				})
+			},
+		
+			errorToast(msg) {
+				this.$refs.uToast.show({
+					title: msg,
+					type: 'error',
+					duration: 2000
+				})
+			}
+		},
+
+	}
+</script>
+
+<style scoped lang="scss">
+	.body {
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa;
+	}
+
+	.paddingOder {
+		// width: 96vw;
+		// height: 93vh;
+		// margin-top: 1vw;
+		// background-color: #fafafa;
+		// border-radius: 8px;
+
+		.model {
+			width: 96vw;
+			height: 26vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+
+			ul {
+				display: flex;
+				justify-content: space-between;
+
+				li {
+					.Number {
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+
+					.playOder {
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+					}
+				}
+
+				li:nth-child(2) {
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

+ 135 - 0
XCX-Shop/pages/userInfo/orderList.vue

@@ -0,0 +1,135 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+		           <view >
+					<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+						<view class="paddingOder">
+							<view class="model" v-for="(item,index) in noticeList" :key=index>
+								<ul>
+									<li>
+										<view class="Number">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>系列:</p>
+											<p style="margin-left: 2vw;">{{item.series_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>品牌:</p>
+											<p style="margin-left: 2vw;">{{item.brand_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: grey; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>公司:</p>
+											<p style="margin-left: 2vw;">{{item.shop_name}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: #fed904; border-radius: 50%;margin-top: 2vw;  margin-right: 2vw;"></p>
+											<p>公司地址:</p>
+											<p style="margin-left: 2vw;">{{item.area}}</p>
+										</view>
+									</li>
+									<!-- <li> <image style="width: 20vw; height: 20vw; margin-top: 2vw;" :src="item.imgLink"></image></li> -->
+								</ul>
+							</view>			   
+						</view>
+		           </view>
+		   </view>
+	</view>
+</template>
+<script>
+		
+		export default{
+		
+			data(){
+				return{
+					trailerKeyboardShow:true,
+					control:false,
+					scrollTop: 0,
+					token:'',
+					noticeList:[],
+					page:1,
+					totals:'',
+					pageSize:'',
+					status:1
+				}
+			},
+			onLoad() {
+				this.getNoticeLists()
+			},
+			methods:{
+				 //  lower(e){
+					//   if(this.pageSize*this.page<this.totals){
+					// 	  this.page+=1
+					// 	  	this.getNoticeLists(this.page,this.status)
+					//   }
+					
+				 //  },
+				  getNoticeLists(){
+					  this.$api.getInquiry(res=>{
+						  if(res.code==0){
+							  this.noticeList= res.data
+						  }else{
+							  this.errorToast(res.msg)
+						  }
+					  })
+				  },
+				  errorToast(msg){
+				  	this.$refs.uToast.show({
+				  		title: msg,
+				  		type: 'error',
+				  		duration:2000
+				  	})
+				  },
+			},
+			
+		}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa ;
+	}
+	.paddingOder{
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		.model{
+			width: 96vw;
+			height: 28vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+			ul{
+				display: flex;
+				justify-content: space-between;
+				li{
+					.Number{
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+					.playOder{
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color:#808080;
+					}
+				}
+				li:nth-child(2){
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

+ 135 - 0
XCX-Shop/pages/userInfo/replacementlog.vue

@@ -0,0 +1,135 @@
+<template>
+	<view class="body">
+		<view class="content">
+			<u-toast ref="uToast" />
+		           <view >
+					<!--   <scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltolower="lower" lower-threshold="100" >
+						
+					   	</scroll-view> -->
+						<view class="paddingOder">
+							<view class="model" v-for="(item,index) in noticeList" :key=index>
+								<ul>
+									<li>
+										<view class="Number">
+											<p style="width: 1vw; height: 1vw; background-color: blue; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>品牌:</p>
+											<p style="margin-left: 2vw;">{{item.brand_name}}</p>
+										</view>
+										<!-- <view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>商品名称:</p>
+											<p style="margin-left: 2vw;">{{item.product_name}}</p>
+										</view> -->
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: green; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>状态:</p>
+											<p style="margin-left: 2vw; color: #fed204;">{{item.status_text}}</p>
+										</view>
+										<view class="playOder">
+											<p style="width: 1vw; height: 1vw; background-color: red; border-radius: 50%; margin-top: 2vw; margin-right: 2vw;"></p>
+											<p>提交时间:</p>
+											<p style="margin-left: 2vw; ">{{item.plate_date}}</p>
+										</view>
+									</li>
+									<!-- <li> <image style="width: 20vw; height: 20vw; margin-top: 2vw;" :src="item.imgLink"></image></li> -->
+								</ul>
+							</view>			   
+						</view>
+		           </view>
+		   </view>
+	</view>
+</template>
+<script>
+		
+		export default{
+		
+			data(){
+				return{
+					trailerKeyboardShow:true,
+					control:false,
+					scrollTop: 0,
+					token:'',
+					noticeList:[],
+					page:1,
+					totals:'',
+					pageSize:'',
+					status:1
+				}
+			},
+			onLoad() {
+				this.getNoticeLists()
+			},
+			methods:{
+				 //  lower(e){
+					//   if(this.pageSize*this.page<this.totals){
+					// 	  this.page+=1
+					// 	  	this.getNoticeLists(this.page,this.status)
+					//   }
+					
+				 //  },
+				  getNoticeLists(){
+					  this.$api.getUsedvehicleEstimate(res=>{
+						  if(res.code==0){
+							  this.noticeList= res.data
+						  }else{
+							  this.errorToast(res.msg)
+						  }
+					  })
+				  },
+				  errorToast(msg){
+				  	this.$refs.uToast.show({
+				  		title: msg,
+				  		type: 'error',
+				  		duration:2000
+				  	})
+				  },
+			},
+			
+		}
+</script>
+
+<style scoped lang="scss">
+	.body{
+		width: 100vw;
+		height: 99vh;
+		box-sizing: border-box;
+		padding: 0 2vw;
+		background-color: #fafafa ;
+	}
+	.paddingOder{
+		width: 96vw;
+		height: 93vh;
+		background-color: #fafafa;
+		border-radius: 8px;
+		.model{
+			width: 96vw;
+			height: 18vw;
+			box-sizing: border-box;
+			padding: 0 3vw;
+			background-color: white;
+			border-radius: 20px;
+			margin-top: 2vw;
+			ul{
+				display: flex;
+				justify-content: space-between;
+				li{
+					.Number{
+						font-size: 0.8rem;
+						display: flex;
+						margin-top: 1vw;
+					}
+					.playOder{
+						display: flex;
+						font-size: 0.75rem;
+						margin-top: 1vw;
+						color:#808080;
+					}
+				}
+				li:nth-child(2){
+					line-height: 20vw;
+					color: red;
+				}
+			}
+		}
+	}
+</style>

BIN
XCX-Shop/static/Info.png


BIN
XCX-Shop/static/baoxian.png


BIN
XCX-Shop/static/bianji.png


BIN
XCX-Shop/static/biaoqian.png


BIN
XCX-Shop/static/bindCar.png


BIN
XCX-Shop/static/buyCar.png


BIN
XCX-Shop/static/car.png


BIN
XCX-Shop/static/chahao.png


BIN
XCX-Shop/static/daohang.png


BIN
XCX-Shop/static/dianhua.png


BIN
XCX-Shop/static/dingwei.png


BIN
XCX-Shop/static/duihao.png


BIN
XCX-Shop/static/heard.png


BIN
XCX-Shop/static/latiao.png


BIN
XCX-Shop/static/liucheng.png


BIN
XCX-Shop/static/logo.jpg


BIN
XCX-Shop/static/logo.png


BIN
XCX-Shop/static/orderlist.png


BIN
XCX-Shop/static/redcar.png


BIN
XCX-Shop/static/screen.png


BIN
XCX-Shop/static/search.png


BIN
XCX-Shop/static/selectCar.png


BIN
XCX-Shop/static/selectInfo.png


BIN
XCX-Shop/static/selectServe.png


BIN
XCX-Shop/static/selectShop.png


BIN
XCX-Shop/static/sellCar.png


BIN
XCX-Shop/static/serve.png


BIN
XCX-Shop/static/shanchu.png


BIN
XCX-Shop/static/shangjiantou.png


BIN
XCX-Shop/static/shop.png


BIN
XCX-Shop/static/userBaoyang.png


BIN
XCX-Shop/static/userCar.png


BIN
XCX-Shop/static/userOrder.png


BIN
XCX-Shop/static/userYuyue.png


BIN
XCX-Shop/static/whiteCar.png


BIN
XCX-Shop/static/wxchat.png


BIN
XCX-Shop/static/xiajiantou.png


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است