李妹妹 1 неделя назад
Сommit
1511f3d54f
100 измененных файлов с 23989 добавлено и 0 удалено
  1. 17 0
      .gitignore
  2. 23 0
      .hbuilderx/launch.json
  3. 160 0
      App.vue
  4. 36 0
      README.en.md
  5. 37 0
      README.md
  6. 24 0
      api/activity.js
  7. 37 0
      api/address.js
  8. 6 0
      api/adv.js
  9. 28 0
      api/article.js
  10. 35 0
      api/common.js
  11. 37 0
      api/companyOrder.js
  12. 274 0
      api/companyUser.js
  13. 29 0
      api/coupon.js
  14. 9 0
      api/department.js
  15. 16 0
      api/disease.js
  16. 45 0
      api/doc.js
  17. 11 0
      api/doctorArticle.js
  18. 47 0
      api/doctorOrder.js
  19. 84 0
      api/health.js
  20. 84 0
      api/healthUser.js
  21. 66 0
      api/index.js
  22. 22 0
      api/patient.js
  23. 22 0
      api/payment.js
  24. 21 0
      api/prescribe.js
  25. 66 0
      api/product.js
  26. 14 0
      api/store.js
  27. 29 0
      api/storeAfterSales.js
  28. 92 0
      api/storeOrder.js
  29. 15 0
      api/storeProductPackage.js
  30. 24 0
      api/test.js
  31. 70 0
      api/user.js
  32. 16 0
      api/userSign.js
  33. 275 0
      assets/css/common.less
  34. 137 0
      assets/css/common.scss
  35. 208 0
      assets/css/commonTheme.css
  36. 2 0
      assets/iconfont/iconfont.css
  37. BIN
      assets/iconfont/iconfont.ttf
  38. 89 0
      common/request.js
  39. 21 0
      components/Loading.vue
  40. 146 0
      components/Menu.vue
  41. 166 0
      components/chengpeng-audio/free-audio.vue
  42. 42 0
      components/chengpeng-audio/redme.md
  43. BIN
      components/chengpeng-audio/static/play.png
  44. BIN
      components/chengpeng-audio/static/stop.png
  45. 143 0
      components/evan-switch/evan-switch.vue
  46. 181 0
      components/likeProduct.vue
  47. 503 0
      components/pushangyuqi-calendar/pushangyuqi-calendar.vue
  48. 315 0
      components/px-popup-bottom/px-popup-bottom.vue
  49. 432 0
      components/ren-calendar/ren-calendar.vue
  50. 487 0
      components/sapling-vue-scale/sapling-vue-scale.vue
  51. 361 0
      components/w-drag-sorts/w-drag-sorts.vue
  52. 325 0
      components/z-modal/z-modal.vue
  53. 24 0
      main.js
  54. 93 0
      manifest.json
  55. 28 0
      package-lock.json
  56. 11 0
      package.json
  57. 1705 0
      pages.json
  58. 386 0
      pages/auth/login.vue
  59. 107 0
      pages/auth/wxLogin.vue
  60. 85 0
      pages/common/launch.vue
  61. 93 0
      pages/doctor/doctorQr.vue
  62. 284 0
      pages/healthy/detail.vue
  63. 389 0
      pages/healthy/index.vue
  64. 121 0
      pages/healthy/readUsers.vue
  65. 72 0
      pages/home/cert.vue
  66. 291 0
      pages/home/components/HotProduct.vue
  67. 318 0
      pages/home/components/NewProduct.vue
  68. 79 0
      pages/home/content.vue
  69. 377 0
      pages/home/doctorCase.vue
  70. 2825 0
      pages/home/index.vue
  71. 239 0
      pages/home/new/articleDetails.vue
  72. 317 0
      pages/home/new/articleList.vue
  73. 220 0
      pages/home/new/chineseMedicineDetails.vue
  74. 310 0
      pages/home/new/chineseMedicineList.vue
  75. 126 0
      pages/home/new/diseaseDetails.vue
  76. 254 0
      pages/home/new/diseaseList.vue
  77. 220 0
      pages/home/new/famousPrescribeDetails.vue
  78. 337 0
      pages/home/new/famousPrescribeList.vue
  79. 195 0
      pages/home/new/medicatedFoodDetails.vue
  80. 285 0
      pages/home/new/medicatedFoodList.vue
  81. 235 0
      pages/home/new/questionsDetails.vue
  82. 304 0
      pages/home/new/questionsList.vue
  83. 584 0
      pages/home/new/test.vue
  84. 224 0
      pages/home/new/testDetails.vue
  85. 213 0
      pages/home/new/testList.vue
  86. 353 0
      pages/home/new/testResult.vue
  87. 196 0
      pages/home/new/testResultImg.vue
  88. 197 0
      pages/home/new/vesselDetails.vue
  89. 312 0
      pages/home/new/vesselList.vue
  90. 478 0
      pages/home/productList.vue
  91. 136 0
      pages/home/productSearch.vue
  92. 42 0
      pages/home/web.vue
  93. 511 0
      pages/shopping/cart.vue
  94. 869 0
      pages/shopping/confirmCreateOrder.vue
  95. 960 0
      pages/shopping/confirmOrder.vue
  96. 717 0
      pages/shopping/confirmPackageOrder.vue
  97. 673 0
      pages/shopping/index.vue
  98. 342 0
      pages/shopping/payOrder.vue
  99. 669 0
      pages/shopping/paymentOrder.vue
  100. 854 0
      pages/shopping/prescribe.vue

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/
+
+.project
+unpackage/

+ 23 - 0
.hbuilderx/launch.json

@@ -0,0 +1,23 @@
+{
+    // 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" : [
+        {
+            "app-plus" : {
+                "launchtype" : "local"
+            },
+            "default" : {
+                "launchtype" : "local"
+            },
+            "mp-weixin" : {
+                "launchtype" : "local"
+            },
+            "type" : "uniCloud"
+        },
+        {
+            "playground" : "standard",
+            "type" : "uni-app:app-android"
+        }
+    ]
+}

+ 160 - 0
App.vue

@@ -0,0 +1,160 @@
+<script>
+	import Vue from 'vue'
+	// import TIM from 'tim-wx-sdk';
+	// import COS from 'cos-wx-sdk-v5';
+	export default {
+		globalData: {  
+			// confirm订单参数
+			confirmParam: []
+		},
+		onLaunch: function() {
+			// uni.$TUIKit = TIM.create({
+			// 	SDKAppID: 1400693126
+			// });
+			// uni.$TUIKit.registerPlugin({
+			// 	'cos-wx-sdk': COS
+			// });
+			// uni.$TUIKitTIM = TIM;
+			// uni.$TUIKitEvent = TIM.EVENT;
+			// uni.$TUIKitVersion = TIM.VERSION;
+			// uni.$TUIKitTypes = TIM.TYPES; // 监听系统级事件
+			// uni.$resetLoginData = this.resetLoginData();
+			// uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady);
+			// uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady);
+			// uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut);
+			// uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError);
+			// uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange);
+			// uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload);
+			// console.log('IM')
+		},
+		onShow: function () {
+		    console.log('App Show')
+		    uni.getSystemInfo({
+				success: (result) => {
+					// 获取手机系统的状态栏高度(不同手机的状态栏高度不同)
+					// console.log('当前手机的状态栏高度',result.statusBarHeight)
+					let statusBarHeight = result.statusBarHeight + 'px'
+					
+					// 获取右侧胶囊的信息 单位px
+					//#ifndef H5 || APP-PLUS
+					const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+					
+					//bottom: 胶囊底部距离屏幕顶部的距离
+					//height: 胶囊高度
+					//left:   胶囊左侧距离屏幕左侧的距离
+					//right:  胶囊右侧距离屏幕左侧的距离
+					//top:    胶囊顶部距离屏幕顶部的距离
+					//width:  胶囊宽度
+					// console.log(menuButtonInfo.width, menuButtonInfo.height, menuButtonInfo.top)
+					// console.log('计算胶囊右侧距离屏幕右边距离', result.screenWidth - menuButtonInfo.right)
+					let menuWidth = menuButtonInfo.width + 'px'
+					let menuHeight = menuButtonInfo.height + 'px'
+					let menuBorderRadius = menuButtonInfo.height / 2 + 'px'
+					let menuRight = result.screenWidth - menuButtonInfo.right + 'px'
+					let menuTop = menuButtonInfo.top + 'px'
+					let contentTop = result.statusBarHeight + 44 + 'px'
+			
+					let menuInfo = {
+						statusBarHeight: statusBarHeight,//状态栏高度----用来给自定义导航条页面的顶部导航条设计padding-top使用:目的留出系统的状态栏区域
+						menuWidth: menuWidth,//右侧的胶囊宽度--用来给自定义导航条页面的左侧胶囊设置使用
+						menuHeight: menuHeight,//右侧的胶囊高度--用来给自定义导航条页面的左侧胶囊设置使用
+						menuBorderRadius: menuBorderRadius,//一半的圆角--用来给自定义导航条页面的左侧胶囊设置使用
+						menuRight: menuRight,//右侧的胶囊距离右侧屏幕距离--用来给自定义导航条页面的左侧胶囊设置使用
+						menuTop: menuTop,//右侧的胶囊顶部距离屏幕顶部的距离--用来给自定义导航条页面的左侧胶囊设置使用
+						contentTop: contentTop,//内容区距离页面最上方的高度--用来给自定义导航条页面的内容区定位距离使用
+					}
+					uni.setStorageSync('menuInfo', menuInfo)
+					//#endif
+				},
+				fail: (error) => {
+					console.log(error)
+				}
+		    })
+		},
+		onHide: function() {
+			console.log('App Hide')
+		},
+		 
+		methods: {
+			// TODO:
+			resetLoginData() {
+				// this.globalData.expiresIn = '';
+				// this.globalData.sessionID = '';
+				// this.globalData.userInfo = {
+				// 	userID: '',
+				// 	userSig: '',
+				// 	token: '',
+				// 	phone: ''
+				// };
+				// this.globalData.userProfile = null;
+				// logger.log(`| app |  resetLoginData | globalData: ${this.globalData}`);
+			},
+			onTIMError() {},
+			onSDKReady({name}) {
+				 console.log("im注册:"+name)
+				  const isSDKReady = name === uni.$TUIKitEvent.SDK_READY ? true : false
+				  console.log("im注册:"+isSDKReady)
+					uni.$emit('isSDKReady', {
+						isSDKReady: true
+					});
+			},
+			onNetStateChange() {},
+			onSDKReload() {},
+			onSdkNotReady() {},
+			onKickedOut() {
+				uni.showToast({
+					title: '您被踢下线',
+					icon: 'error'
+				});
+				
+			}
+		}
+	}
+</script>
+ <style lang="less">
+	 @import './assets/css/common.less';
+ </style>
+<style lang="scss">
+    /*每个页面公共css */
+	// @import 'animate.css';
+	@import "uview-ui/index.scss";
+	@import './assets/iconfont/iconfont.css';
+	@import './assets/css/common.scss';
+	@import './assets/css/commonTheme.css';
+	page{
+		background-color: #f6f6f6;
+	}
+	::-webkit-scrollbar{
+	    width: 0 !important;
+	    height: 0 !important;
+	    
+	}
+</style>
+<style>
+	/*每个页面公共css */
+	/* 解决小程序和app滚动条的问题 */
+	/* #ifdef MP-WEIXIN || APP-PLUS */
+		::v-deep  ::-webkit-scrollbar {
+		    display: none !important;
+		    width: 0 !important;
+		    height: 0 !important;
+		    -webkit-appearance: none;
+		    background: transparent;
+		    color: transparent;
+		}
+	/* #endif */
+	
+	/* 解决H5 的问题 */
+	/* #ifdef H5 */
+	    uni-scroll-view .uni-scroll-view::-webkit-scrollbar {
+	    	/* 隐藏滚动条,但依旧具备可以滚动的功能 */
+			display: none;
+		    width: 0 !important;
+		    height: 0 !important;
+		    -webkit-appearance: none;
+		    background: transparent;
+		    color: transparent;
+	    }
+	/* #endif */
+</style>
+ 

+ 36 - 0
README.en.md

@@ -0,0 +1,36 @@
+# WBCrm_User_Uniapp
+
+#### Description
+kangyangcrm_user_app
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Instructions
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Contribution
+
+1.  Fork the repository
+2.  Create Feat_xxx branch
+3.  Commit your code
+4.  Create Pull Request
+
+
+#### Gitee Feature
+
+1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4.  The most valuable open source project [GVP](https://gitee.com/gvp)
+5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 37 - 0
README.md

@@ -0,0 +1,37 @@
+# WBCrm_User_Uniapp
+
+#### 介绍
+kangyangcrm_user_app
+
+#### 软件架构
+软件架构说明
+
+
+#### 安装教程
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 使用说明
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 参与贡献
+
+1.  Fork 本仓库
+2.  新建 Feat_xxx 分支
+3.  提交代码
+4.  新建 Pull Request
+
+
+#### 特技
+
+1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2.  Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
+3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
+4.  [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
+5.  Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6.  Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 24 - 0
api/activity.js

@@ -0,0 +1,24 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+ 
+ export function getStoreActivity(data) {
+ 	 return request('/store/app/activity/getStoreActivity',data,'GET');
+ }
+ export function getStoreActivityDetails(data) {
+ 	 return request('/store/app/activity/getStoreActivityDetails',data,'GET');
+ }
+ export function share(activityId) {
+ 	 return request('/store/app/activity/share?activityId='+activityId,null,'POST');
+ }
+  
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 
+ 

+ 37 - 0
api/address.js

@@ -0,0 +1,37 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getCity() {
+ 	 return request('/user/store/app/address/getCity',null,'GET');
+ }
+ export function getCitys() {
+ 	 return request('/store/app/address/getCitys',null,'GET');
+ }
+ export function getAddressList() {
+ 	 return request('/store/app/address/getAddressList',null,'GET');
+ }
+
+ export function getAddressById(data) {
+ 	 return request('/store/app/address/getAddressById',data,'GET');
+ } 
+ 
+ export function addAddress(data) {
+ 	return request('/store/app/address/addAddress',data,'POST','application/json;charset=UTF-8');
+ }
+
+ export function editAddress(data) {
+ 	return request('/store/app/address/editAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ export function delAddress(data) {
+ 	return request('/store/app/address/delAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function parseAddress(data) {
+ 	return request('/store/app/address/parseAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function delAllAddress(data) {
+ 	return request('/store/app/address/delAllAddress',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 

+ 6 - 0
api/adv.js

@@ -0,0 +1,6 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getAdv(data) {
+ 	 return request('/store/app/adv/getAdv',data,'GET');
+ }
+ 

+ 28 - 0
api/article.js

@@ -0,0 +1,28 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ export function getArticleCate() {
+ 	 return request('/store/app/article/getArticleCate',null,'GET');
+ }
+ 
+ export function getArticleList(data) {
+ 	 return request('/store/app/article/getArticleList',data,'GET');
+ }
+
+ export function getArticleByArticleId(data) {
+ 	 return request('/store/app/article/getArticleByArticleId',data,'GET');
+ } 
+ 
+ export function updateView(articleId) {
+ 	 return request('/store/app/article/updateView?articleId='+articleId,null,'POST');
+ } 
+ 
+ export function getArticleViewList(data) {
+ 	 return request('/store/app/article/getArticleViewList',data,'GET');
+ } 
+ 
+
+ 
+ 
+  

+ 35 - 0
api/common.js

@@ -0,0 +1,35 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+
+ export function uploadOSS(data) {
+ 	 return request('/store/app/common/uploadOSS',data,'POST');
+ }
+ export function getTlsSig(data) {
+ 	 return request('/store/app/common/getTlsSig',data,'GET');
+ }
+ 
+ export function getStoreConfig() {
+  	 return request('/store/app/common/getStoreConfig',null,'GET');
+ } 
+ 
+ export function getProductConfig() {
+  	 return request('/store/app/common/getProductConfig',null,'GET');
+ } 
+ 
+ export function getWeixinTemps() {
+ 	 return request('/store/app/common/getWeixinTemps',null,'GET');
+ }
+ export function getWeixinOrderTemps() {
+ 	 return request('/store/app/common/getWeixinOrderTemps',null,'GET');
+ }
+ export function getWeixinPrescribeTemps() {
+ 	 return request('/store/app/common/getWeixinPrescribeTemps',null,'GET');
+ }
+ 
+ 
+ export function getDictByKey(data) {
+  	 return request('/store/app/common/getDictByKey',data,'GET');
+ } 
+ 
+ 

+ 37 - 0
api/companyOrder.js

@@ -0,0 +1,37 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getSalesProducts(data) {
+ 	 return request('/store/app/companyOrder/getSalesProducts',data,'GET');
+ }
+ 
+ export function createSalesOrder(data) {
+ 	 return request('/store/app/companyOrder/createSalesOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function updateSalseOrderMoney(data) {
+ 	 return request('/store/app/companyOrder/updateSalseOrderMoney',data,'GET' );
+ }
+ // 多店铺修改实付金额
+ export function updateSaleOrderMoney(data) {
+ 	 return request('/store/app/companyOrder/updateSaleOrderMoney',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getSalesOrder(data) {
+ 	 return request('/store/app/companyOrder/getSalesOrder',data,'GET' );
+ }
+ export function getSalesOrders(data) {
+ 	 return request('/store/app/companyOrder/getSalesOrders',data,'GET' );
+ }
+ export function addUserCart(data) {
+ 	 return request('/store/app/companyOrder/addUserCart',data,'GET' );
+ }
+ 
+ export function editOrderMoney(data) {
+ 	 return request('/store/app/companyOrder/editOrderMoney',data,'GET' );
+ }
+
+ 
+ 
+  
+ 
+ 

+ 274 - 0
api/companyUser.js

@@ -0,0 +1,274 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function login(data) {
+	return request('/store/app/companyUser/login', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+export function getUserInfo(data) {
+	return request('/store/app/companyUser/getUserInfo', data, 'GET', 'application/json;charset=UTF-8');
+}
+export function getQrImg(data) {
+	return request('/store/app/companyUser/getQrImg', data, 'GET', 'application/json;charset=UTF-8');
+}
+
+export function getCompanyUserCard(data) {
+	return request('/store/app/companyUser/getCompanyUserCard', data, 'GET', 'application/json;charset=UTF-8');
+}
+
+//获取所有投诉类型
+export function getCategory(data) {
+	return request('/app/complaint/category', data, 'GET', 'application/json;charset=UTF-8');
+}
+//提交投诉
+export function submitComplaint(data) {
+	return request('/app/complaint/submitComplaint', data, 'POST', 'application/json;charset=UTF-8');
+}
+//获取投诉列表
+export function getComplaintList(data) {
+	return request('/app/complaint/list', data, 'POST', 'application/json;charset=UTF-8');
+}
+//修改i投诉
+export function updateComplaint(id, data) {
+	return request('/app/complaint/' + id, data, 'PUT', 'application/json;charset=UTF-8');
+}
+//投诉详情
+export function getComplaintById(data) {
+	return request('/app/complaint/' + data, data, 'GET', 'application/json;charset=UTF-8');
+}
+
+//管理
+export function getAdmin(data) {
+	return request('/app/food-record/admin/list', data, 'GET', 'application/json;charset=UTF-8');
+}
+//某日饮食列表
+export function getDayRecords(data) {
+	return request('/app/food-record/getDayRecords', data, 'GET', 'application/json;charset=UTF-8');
+}
+//饮食列表
+export function getMyRecordList(data) {
+	return request('/app/food-record/getMyRecordList', data, 'POST', 'application/json;charset=UTF-8');
+}
+//新增饮食
+export function addRecord(data) {
+	return request('/app/food-record/addRecord', data, 'POST', 'application/json;charset=UTF-8');
+}
+//修改饮食
+export function editRecord(data) {
+	return request('/app/food-record/editRecord', data, 'POST', 'application/json;charset=UTF-8');
+}
+//删除饮食
+export function deleteRecord(data) {
+	return request('/app/food-record/deleteRecord/' + data, data, 'POST', 'application/json;charset=UTF-8');
+}
+//饮食详情
+export function getRecordInfo(data) {
+	return request('/app/food-record/getRecordInfo/' + data, data, 'GET');
+}
+//待办列表
+export function getToDoList(data) {
+	return request('/app/todoItems/listPage', data, 'POST', 'application/json;charset=UTF-8');
+}
+//待办事项详情
+export function getFindById(data) {
+	return request('/app/todoItems/findById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//更新详情
+export function updateById(data) {
+	return request('/app/todoItems/updateById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//商品列表
+export function getServiceList(data) {
+	return request('/app/serviceGoods/listPage', data, 'POST', 'application/json;charset=UTF-8');
+}
+//商品详情
+export function getServiceById(data) {
+	return request('/app/serviceGoods/findById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//新增商品
+export function saveService(data) {
+	return request('/app/serviceGoods/save', data, 'POST', 'application/json;charset=UTF-8');
+}
+//更新商品信息
+export function updateService(data) {
+	return request('/app/serviceGoods/updateById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//删除商品
+export function deleteService(data) {
+	return request('/app/serviceGoods/deleteById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//竞品列表
+export function getCompetitorList(data) {
+	return request('/app/competitorInfo/listPage', data, 'POST', 'application/json;charset=UTF-8');
+}
+//竞品详情
+export function getCompetitorById(data) {
+	return request('/app/competitorInfo/findById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//竞品商品
+export function saveCompetitor(data) {
+	return request('/app/competitorInfo/save', data, 'POST', 'application/json;charset=UTF-8');
+}
+//更新竞品信息
+export function updateCompetitor(data) {
+	return request('/app/competitorInfo/updateById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//删除竞品
+export function deleteCompetitor(data) {
+	return request('/app/competitorInfo/deleteById', data, 'POST', 'application/json;charset=UTF-8');
+}
+//新增体检报告
+export function addReport(data) {
+	return request('/app/medical/report/add', data, 'POST', 'application/json;charset=UTF-8');
+}
+//用户ID查询体检报告信息
+export function getByUserAndDate(data) {
+	return request('/app/medical/report/getByUserAndDate', data, 'GET', 'application/json;charset=UTF-8');
+}
+//用户查询体检报告列表
+export function getUserReportList(data) {
+	return request('/app/medical/report/listByUser/' + data, data, 'GET', 'application/json;charset=UTF-8');
+}
+//查询体检报告列表
+export function getReportList(data) {
+	return request('/app/medical/report/page', data, 'GET', 'application/json;charset=UTF-8');
+}
+//查询体检报告详情
+export function getReportById(data) {
+	return request('/app/medical/report/' + data, data, 'GET', 'application/json;charset=UTF-8');
+}
+//删除体检报告
+export function deleteReport(data) {
+	return request('/app/medical/report/' + data, data, 'DELETE', 'application/json;charset=UTF-8');
+}
+//更新体检报告
+export function updateReport(data) {
+	return request('/app/medical/report/update', data, 'PUT', 'application/json;charset=UTF-8');
+}
+//对比报告
+export function compareReport(data) {
+	return request('/app/medical/report/compareReport', data, 'POST', 'application/json;charset=UTF-8');
+}
+//获取指定报告的指标分类
+export function getAllCateByReportId(data) {
+	return request('/app/medical/result/getAllCateByReportId', data, 'GET', 'application/json;charset=UTF-8');
+}
+//新增指标
+export function addIndicator(data) {
+	return request('/app/medical/indicator/add', data, 'POST', 'application/json;charset=UTF-8');
+}
+//根据分类查询指标
+export function listByCategory(data) {
+	return request('/app/medical/indicator/listByCategory', data, 'GET', 'application/json;charset=UTF-8');
+}
+//查询所有启用的指标
+export function listEnabled(data) {
+	return request('/app/medical/indicator/listEnabled', data, 'GET', 'application/json;charset=UTF-8');
+}
+//过滤所有启用的指标
+export function listAllEnabledByReportId(data) {
+	return request('/app/medical/indicator/listAllEnabledByReportId', data, 'GET', 'application/json;charset=UTF-8');
+}
+//分页查询医疗指标列表
+export function getPage(data) {
+	return request('/app/medical/indicator/page', data, 'GET', 'application/json;charset=UTF-8');
+}
+//更新指标
+export function updateIndicator(data) {
+	return request('/app/medical/indicator/update', data, 'PUT', 'application/json;charset=UTF-8');
+}
+//根据ID查询指标详情
+export function getIndicatorById(data) {
+	return request('/app/medical/indicator/'+ data, data, 'GET', 'application/json;charset=UTF-8');
+}
+//删除指标
+export function deleteIndicator(data) {
+	return request('/app/medical/indicator/' + data, data, 'DELETE', 'application/json;charset=UTF-8');
+}
+
+//新增检查结果
+export function addResult(data) {
+	return request('/app/medical/result/add', data, 'POST', 'application/json;charset=UTF-8');
+}
+//批量新增检查结果
+export function addBatchAdd(data) {
+	return request('/app/medical/result/batchAdd', data, 'POST', 'application/json;charset=UTF-8');
+}
+//批量更新检查结果
+export function updateBatch(data) {
+	return request('/app/medical/result/updateBatch', data, 'POST', 'application/json;charset=UTF-8');
+}
+//根据指标ID查询所有结果
+export function listByIndicator(data) {
+	return request('/app/medical/result/listByIndicator/'+ data, data, 'GET');
+}
+//根据ID查询所有结果
+export function listByReport(data) {
+	return request('/app/medical/result/listByReport/'+ data, data, 'GET');
+}
+//分页查询报告指标检查结果列表
+export function getResult(data) {
+	return request('/app/medical/result/page', data, 'GET');
+}
+//更新检查结果
+export function updateResult(data) {
+	return request('/app/medical/result/update', data, 'PUT', 'application/json;charset=UTF-8');
+}
+//查询检查结果详情
+export function getResultById(data) {
+	return request('/app/medical/result/'+ data, data, 'GET');
+}
+//删除检查结果
+export function deleteResult(data) {
+	return request('/app/medical/result/'+ data, data, 'DELETE');
+}
+
+//查询所有单位
+export function getListAll(data) {
+	return request('/app/medical/unit/listAll', data, 'GET');
+}
+//新建附件
+export function addAttachment(data) {
+	return request('/app/attachment', data, 'POST', 'application/json;charset=UTF-8');
+}
+//查询附件
+export function getAttachment(data) {
+	return request('/app/attachment/list', data, 'GET', 'application/json;charset=UTF-8');
+}
+//新建体检报告
+export function addUrl(data) {
+	return request('/app/attachment/addList', data, 'POST', 'application/json;charset=UTF-8');
+}
+//删除附件
+export function deleteAttachment(data) {
+	return request('/app/attachment/'+data, data, 'DELETE');
+}
+
+//工作完成百分比
+export function queryCateStatis(data) {
+	return request('/app/todoItems/queryCateStatis', data, 'GET');
+}
+//扫码
+export function bindPromoter(data) {
+ 	 return request('/store/app/bindPromoter',data,'POST','application/json;charset=UTF-8');
+ }
+ //日程查询
+ export function getItinerary(data) {
+ 	return request('/app/fs/itinerary/list', data, 'GET');
+ }
+ //日程新增
+ export function addItinerary(data) {
+ 	return request('/app/fs/itinerary/add', data, 'POST','application/json;charset=UTF-8');
+ }
+ //日程查询详情
+ export function getItineraryInfo(data) {
+ 	return request('/app/fs/itinerary/info', data, 'GET');
+ }
+ //更新日程
+ export function updateItinerary(data) {
+ 	return request('/app/fs/itinerary/update', data,'POST','application/json;charset=UTF-8');
+ }
+ //删除日程
+ export function deleteItinerary(data) {
+ 	return request('/app/fs/itinerary/delete', data, 'GET');
+ }

+ 29 - 0
api/coupon.js

@@ -0,0 +1,29 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getCouponIssueList(data) {
+ 	 return request('/user/store/app/coupon/getCouponIssueList',data,'GET');
+ }
+ export function getCompanyCouponIssueList(data) {
+ 	 return request('/store/app/coupon/getCompanyCouponIssueList',data,'GET');
+ }
+ export function getCouponIssueById(data) {
+ 	 return request('/store/app/coupon/getCouponIssueById',data,'GET');
+ }
+ 
+ 
+ 
+ export function receive(data) {
+ 	return request('/store/app/coupon/receive',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getMyCouponList(data) {
+ 	 return request('/store/app/coupon/getMyCouponList',data,'GET');
+ }
+ export function getMyEnableCouponList(data) {
+ 	 return request('/store/app/coupon/getMyEnableCouponList',data,'GET');
+ }
+ 
+ 
+
+ 

+ 9 - 0
api/department.js

@@ -0,0 +1,9 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getDepartmentList(data) {
+ 	 return request('/store/app/department/getDepartmentList',data,'GET');
+ }
+ 
+  
+  

+ 16 - 0
api/disease.js

@@ -0,0 +1,16 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getDiseaseList(data) {
+ 	 return request('/store/app/disease/getDiseaseList',data,'GET');
+ }
+ export function getDiseaseById(data) {
+ 	 return request('/store/app/disease/getDiseaseById',data,'GET');
+ }
+ 
+ 
+ 
+ 
+  
+  
+  

+ 45 - 0
api/doc.js

@@ -0,0 +1,45 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ export function getMyDocList(data) {
+ 	 return request('/store/app/doc/getMyDocList',data,'GET');
+ }
+ 
+ export function getDocDetails(data) {
+ 	 return request('/store/app/doc/getDocDetails',data,'GET');
+ }
+ 
+ export function addDoc(data) {
+ 	return request('/store/app/doc/addDoc',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function editDoc(data) {
+ 	return request('/store/app/doc/editDoc',data,'POST','application/json;charset=UTF-8');
+ }
+ export function delDoc(data) {
+ 	return request('/store/app/doc/delDoc',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getMyDocRecordList(data) {
+ 	 return request('/store/app/doc/getMyDocRecordList',data,'GET');
+ }
+ 
+ export function getDocRecordReplyList(data) {
+ 	 return request('/store/app/doc/getDocRecordReplyList',data,'GET');
+ }
+ 
+ 
+ export function addDocRecord(data) {
+ 	return request('/store/app/doc/addDocRecord',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getMyDocOrderList() {
+ 	 return request('/store/app/doc/getMyDocOrderList',null,'GET');
+ }
+ 
+ export function addDocOrder(data) {
+ 	return request('/store/app/doc/addDocOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 

+ 11 - 0
api/doctorArticle.js

@@ -0,0 +1,11 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getDoctorArticleList(data) {
+ 	 return request('/store/app/doctorArticle/getDoctorArticleList',data,'GET');
+ }
+ export function getDoctorArticleById(data) {
+ 	 return request('/store/app/doctorArticle/getDoctorArticleById',data,'GET');
+ }
+  
+   

+ 47 - 0
api/doctorOrder.js

@@ -0,0 +1,47 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ 
+ 
+ export function getDepartmentList(data) {
+ 	 return request('/store/app/doctorOrder/getDepartmentList',data,'GET');
+ } 
+ 
+ export function getDoctorList(data) {
+ 	 return request('/store/app/doctorOrder/getDoctorList',data,'GET');
+ } 
+ 
+ export function getDoctorCase(data) {
+ 	 return request('/store/app/doctorOrder/getDoctorCase',data,'GET');
+ } 
+ 
+ 
+ export function getMyDoctorOrderList(data) {
+ 	 return request('/store/app/doctorOrder/getMyDoctorOrderList',data,'GET');
+ } 
+ 
+ export function getDoctorDetail(data) {
+ 	 return request('/store/app/doctorOrder/getDoctorDetail',data,'GET');
+ } 
+ 
+ export function getDoctorOrderDetail(data) {
+ 	 return request('/store/app/doctorOrder/getDoctorOrderDetail',data,'GET');
+ } 
+ export function create(data) {
+ 	 return request('/store/app/doctorOrder/create',data,'POST','application/json;charset=UTF-8');
+ }
+ export function pay(data) {
+ 	 return request('/store/app/doctorOrder/pay',data,'POST','application/json;charset=UTF-8');
+ }
+ export function cancelOrder(data) {
+ 	 return request('/store/app/doctorOrder/cancelOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function pingOrder(data) {
+ 	 return request('/store/app/doctorOrder/pingOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getImOrderDetail(data) {
+ 	 return request('/store/app/doctorOrder/getImOrderDetail',data,'GET');
+ } 
+ 
+ 

+ 84 - 0
api/health.js

@@ -0,0 +1,84 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+//获取咨询人员列表
+export function getuserlist(data) {
+	return request('/store/app/common/getDicts', data, 'GET');
+}
+//提交咨询内容
+export function submitconsult(data) {
+	return request('/store/app/common/getDicts', data, 'GET');
+}
+//获取用户列表
+export function getInfoList(data) {
+	return request('/companyapp/app/fs/userinfo/list', data, 'GET');
+}
+
+//获取用户基本信息
+export function getInfo(data) {
+	return request('/companyapp/app/fs/userinfo/info', data, 'GET');
+}
+
+//添加用户基本信息
+export function addInfo(data) {
+	return request('/companyapp/app/fs/userinfo/add', data, 'POST','application/json;charset=UTF-8');
+}
+
+//修改用户基本信息
+export function updateInfo(data) {
+	return request('/companyapp/app/fs/userinfo/update', data, 'POST','application/json;charset=UTF-8');
+}
+//删除用户基本信息
+export function deleteInfo(data) {
+	return request('/companyapp/app/fs/userinfo/delete', data, 'GET','application/json;charset=UTF-8');
+}
+//获取会员分类
+export function getMember(data) {
+	return request('/companyapp/app/common/getDictByKey?key=user_member_classify', data, 'GET');
+}
+//主页信息
+export function homeInfo(data) {
+	return request('/companyapp/app/fs/health/profile/home/info', data, 'GET');
+}
+//健康档案主页信息
+export function getDoc(data) {
+	return request('/companyapp/app/fs/health/profile/info', data, 'GET');
+}
+//添加健康档案信息
+export function addDoc(data) {
+	return request('/companyapp/app/fs/health/profile/add', data, 'POST','application/json;charset=UTF-8');
+}
+
+//修改健康档案信息
+export function updateDoc(data) {
+	return request('/companyapp/app/fs/health/profile/update', data, 'POST','application/json;charset=UTF-8');
+}
+//删除健康档案信息
+export function deleteDoc(data) {
+	return request('/companyapp/app/fs/health/profile/delete', data, 'GET','application/json;charset=UTF-8');
+}
+
+//最新数据查询
+export function getLatest(data) {
+	return request('/companyapp/app/fs/health/data/latest/info', data, 'GET','application/json;charset=UTF-8');
+}
+//数据新增
+export function addData(data) {
+	return request('/companyapp/app/fs/health/data/add', data, 'POST','application/json;charset=UTF-8');
+}
+//数据列表查询
+export function getDataList(data) {
+	return request('/companyapp/app/fs/health/data/list', data, 'GET','application/json;charset=UTF-8');
+}
+//数据更新
+export function updateData(data) {
+	return request('/companyapp/app/fs/health/data/update', data, 'POST','application/json;charset=UTF-8');
+}
+//数据数据删除
+export function deleteData(data) {
+	return request('/companyapp/app/fs/health/data/delete', data, 'GET','application/json;charset=UTF-8');
+}
+//数据数据详情
+export function getDataById(data) {
+	return request('/companyapp/app/fs/health/data/info', data, 'GET','application/json;charset=UTF-8');
+}

+ 84 - 0
api/healthUser.js

@@ -0,0 +1,84 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+//获取咨询人员列表
+export function getuserlist(data) {
+	return request('/store/app/common/getDicts', data, 'GET');
+}
+//提交咨询内容
+export function submitconsult(data) {
+	return request('/store/app/common/getDicts', data, 'GET');
+}
+
+//获取用户基本信息
+export function getInfo(data) {
+	return request('/app/fs/userinfo/info', data, 'GET');
+}
+
+//添加用户基本信息
+export function addInfo(data) {
+	return request('/app/fs/userinfo/add', data, 'POST','application/json;charset=UTF-8');
+}
+
+//修改用户基本信息
+export function updateInfo(data) {
+	return request('/app/fsinfo/update', data, 'POST','application/json;charset=UTF-8');
+}
+//删除用户基本信息
+export function deleteInfo(data) {
+	return request('/app/fsinfo/delete', data, 'GET','application/json;charset=UTF-8');
+}
+//获取会员分类
+export function getMember(data) {
+	return request('/app/common/getDictByKey?key=user_member_classify', data, 'GET');
+}
+//主页信息
+export function homeInfo(data) {
+	return request('/app/fs/health/profile/home/info', data, 'GET');
+}
+//健康档案主页信息
+export function getDoc(data) {
+	return request('/app/fs/health/profile/info', data, 'GET');
+}
+//添加健康档案信息
+export function addDoc(data) {
+	return request('/app/fs/health/profile/add', data, 'POST','application/json;charset=UTF-8');
+}
+
+//修改健康档案信息
+export function updateDoc(data) {
+	return request('/app/fs/health/profile/update', data, 'POST','application/json;charset=UTF-8');
+}
+//删除健康档案信息
+export function deleteDoc(data) {
+	return request('/app/fs/health/profile/delete', data, 'GET','application/json;charset=UTF-8');
+}
+
+//最新数据查询
+export function getLatest(data) {
+	return request('/app/fs/health/data/latest/info', data, 'GET','application/json;charset=UTF-8');
+}
+//最新数据查询可视化
+export function getLatestList(data) {
+	return request('/app/fs/health/data/latest/list', data, 'GET','application/json;charset=UTF-8');
+}
+//数据新增
+export function addData(data) {
+	return request('/app/fs/health/data/add', data, 'POST','application/json;charset=UTF-8');
+}
+//数据列表查询
+export function getDataList(data) {
+	return request('/app/fs/health/data/list', data, 'GET','application/json;charset=UTF-8');
+}
+//数据更新
+export function updateData(data) {
+	return request('/app/fs/health/data/update', data, 'POST','application/json;charset=UTF-8');
+}
+//数据数据删除
+export function deleteData(data) {
+	return request('/app/fs/health/data/delete', data, 'GET','application/json;charset=UTF-8');
+}
+//数据数据详情
+export function getDataById(data) {
+	return request('/app/fs/health/data/info', data, 'GET','application/json;charset=UTF-8');
+}

+ 66 - 0
api/index.js

@@ -0,0 +1,66 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function getDicts(data) {
+ 	 return request('/store/app/common/getDicts',data,'GET');
+} 
+export function getCanvas() {
+ 	 return request('/store/app/index/getCanvas',null,'GET');
+} 
+export function getMenu() {
+ 	 return request('/store/app/index/getMenu',null,'GET');
+} 
+export function getIndexData(data) {
+ 	 return request('/store/app/index/getIndexData',data,'GET');
+} 
+export function getTuiArticle(data) {
+ 	 return request('/store/app/index/getTuiArticle',data,'GET');
+} 
+export function getTuiDoctor(data) {
+ 	 return request('/store/app/index/getTuiDoctor',data,'GET');
+} 
+
+export function getTuiDoctorOrder(data) {
+ 	 return request('/store/app/index/getTuiDoctorOrder',data,'GET');
+} 
+
+export function getCartCount() {
+ 	 return request('/store/app/index/getCartCount',null,'GET');
+} 
+
+
+ export function getFamousPrescribeList(data) {
+	 return request('/store/app/index/getFamousPrescribeList',data,'GET');
+ }
+ export function getFamousPrescribeById(data) {
+	 return request('/store/app/index/getFamousPrescribeById',data,'GET');
+ }
+ export function getQuestionsList(data) {
+ 	 return request('/store/app/index/getQuestionsList',data,'GET');
+ }
+ export function getQuestionsById(data) {
+ 	 return request('/store/app/index/getQuestionsById',data,'GET');
+ }
+ export function getMedicatedFoodList(data) {
+ 	 return request('/store/app/index/getMedicatedFoodList',data,'GET');
+ }
+ export function getMedicatedFoodById(data) {
+ 	 return request('/store/app/index/getMedicatedFoodById',data,'GET');
+ }
+ export function getVesselList(data) {
+ 	 return request('/store/app/index/getVesselList',data,'GET');
+ }
+ export function getVesselById(data) {
+ 	 return request('/store/app/index/getVesselById',data,'GET');
+ }
+ export function getChineseMedicineList(data) {
+ 	 return request('/store/app/index/getChineseMedicineList',data,'GET');
+ }
+ export function getChineseMedicineById(data) {
+ 	 return request('/store/app/index/getChineseMedicineById',data,'GET');
+ }
+ 
+ 
+
+ 
+ 

+ 22 - 0
api/patient.js

@@ -0,0 +1,22 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ export function getPatientList() {
+ 	 return request('/store/app/patient/getPatientList',null,'GET');
+ }
+
+ export function getPatientById(data) {
+ 	 return request('/store/app/patient/getPatientById',data,'GET');
+ } 
+ 
+ export function addPatient(data) {
+ 	return request('/store/app/patient/addPatient',data,'POST','application/json;charset=UTF-8');
+ }
+
+ export function editPatient(data) {
+ 	return request('/store/app/patient/editPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ export function delPatient(data) {
+ 	return request('/store/app/patient/delPatient',data,'POST','application/json;charset=UTF-8');
+ }

+ 22 - 0
api/payment.js

@@ -0,0 +1,22 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+  
+ export function payment(data) {
+ 	 return request('/store/app/payment/payment',data,'POST','application/json;charset=UTF-8');
+ }
+  
+  //余额充值套餐列表
+  export function getTemplates(data) {
+  	 return request('/recharge-templates/list',data,'GET');
+  }
+  //余额充值套餐详情
+  export function getTemplatesById(data) {
+  	 return request('/recharge-templates/'+data,data,'GET');
+  }
+ //余额充值套餐支付
+ export function toPayment(data) {
+ 	 return request('/recharge-templates/payment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 

+ 21 - 0
api/prescribe.js

@@ -0,0 +1,21 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function doPrescribe(data) {
+ 	 return request('/store/app/prescribe/doPrescribe',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getMyPrescribeList(data) {
+ 	 return request('/store/app/prescribe/getMyPrescribeList',data,'GET');
+ }
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 
+ 

+ 66 - 0
api/product.js

@@ -0,0 +1,66 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+
+ export function getProductCate(data) {
+ 	 return request('/store/app/product/getProductCate',data,'GET');
+ }
+ 
+ export function getProductCateByPid(data) {
+ 	 return request('/store/app/product/getProductCateByPid',data,'GET');
+ }
+ 
+ export function getProducts(data) {
+ 	 return request('/store/app/product/getProducts',data,'GET');
+ }
+ export function getProductDetails(data) {
+ 	 return request('/store/app/product/getProductDetails',data,'GET');
+ }
+ 
+ export function getCarts(data) {
+ 	 return request('/store/app/product/getCarts',data,'GET');
+ }
+ export function addCart(data) {
+ 	 return request('/store/app/product/addCart',data,'POST','application/json;charset=UTF-8');
+ }
+ export function delCart(data) {
+ 	 return request('/store/app/product/delCart',data,'POST','application/json;charset=UTF-8');
+ }
+ export function cartNum(data) {
+ 	 return request('/store/app/product/cartNum',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getCartCount(data) {
+ 	 return request('/store/app/product/getCartCount',data,'GET');
+ }
+ export function getGoodsProduct() {
+ 	 return request('/store/app/product/getGoodsProduct',null,'GET');
+ }
+ export function getGoodsProducts(data) {
+ 	 return request('/store/app/product/getGoodsProducts',data,'GET');
+ }
+ export function getTuiProducts(data) {
+ 	 return request('/store/app/product/getTuiProducts',data,'GET');
+ }
+ export function getStoreProductAttrValueList(data) {
+ 	 return request('/store/app/product/getStoreProductAttrValueList',data,'GET');
+ }
+ 
+ export function getProductStoreStock(data) {
+ 	 return request('/app/product/getProductStoreStock',data,'GET');
+ }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 
+ 

+ 14 - 0
api/store.js

@@ -0,0 +1,14 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ // 获取门店详情
+ export function getStoreById(data) {
+ 	 return request('/store/app/store/getStoreById',data,'GET');
+ }
+ // 获取门店详情新
+ export function getNewStoreById(data) {
+ 	 return request('/store/app/store/'+data,data,'GET');
+ }
+ export function getIndexData(data) {
+  	 return request('/store/app/index/getIndexData',data,'GET');
+ } 

+ 29 - 0
api/storeAfterSales.js

@@ -0,0 +1,29 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function getMyStoreOrderItemByOrderId(data) {
+ 	 return request('/store/app/storeAfterSales/getMyStoreOrderItemByOrderId',data,'GET');
+ } 
+ export function applyAfterSales(data) {
+ 	 return request('/store/app/storeAfterSales/store/applyAfterSales',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getAfterSalesList(data) {
+ 	 return request('/store/app/storeAfterSales/getAfterSalesList',data,'GET');
+ } 
+ 
+ export function getAfterSalesDetails(data) {
+ 	 return request('/store/app/storeAfterSales/getAfterSalesDetails',data,'GET');
+ } 
+ export function revoke(data) {
+ 	 return request('/store/app/storeAfterSales/revoke',data,'POST','application/json;charset=UTF-8');
+ }
+ export function addDelivery(data) {
+ 	 return request('/store/app/storeAfterSales/addDelivery',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+ 

+ 92 - 0
api/storeOrder.js

@@ -0,0 +1,92 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ 
+ export function getMyStoreOrderList(data) {
+ 	 return request('/store/app/storeOrder/getMyStoreOrderList',data,'GET');
+ } 
+ export function getCompanyStoreOrderList(data) {
+ 	 return request('/store/app/storeOrder/getCompanyStoreOrderList',data,'GET');
+ } 
+ export function getMyStoreOrderById(data) {
+ 	 return request('/store/app/storeOrder/getMyStoreOrderById',data,'GET');
+ } 
+ 
+ 
+ export function getStoreOrderById(data) {
+ 	 return request('/store/app/storeOrder/getStoreOrderById',data,'GET');
+ } 
+ 
+ export function getStoreOrderByCombinationId(data) {
+ 	 return request('/store/app/storeOrder/getStoreOrderByCombinationId',data,'GET');
+ } 
+ export function otherPaymentByCombinationId(data) {
+ 	 return request('/store/app/storeOrder/otherPaymentByCombinationId',data,'POST','application/json;charset=UTF-8');
+ } 
+ 
+ export function confirm(data) {
+ 	 return request('/store/app/storeOrder/confirm',data,'POST','application/json;charset=UTF-8');
+ }
+ export function computed(data) {
+ 	 return request('/store/app/storeOrder/computed',data,'POST','application/json;charset=UTF-8');
+ }
+ export function create(data) {
+ 	 return request('/store/app/storeOrder/create',data,'POST','application/json;charset=UTF-8');
+ }
+ export function pay(data) {
+ 	 return request('/store/app/storeOrder/pay',data,'POST','application/json;charset=UTF-8');
+ }
+ export function payByCombinationId(data) {
+ 	 return request('/store/app/storeOrder/payByCombinationId',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function editPayType(data) {
+ 	 return request('/store/app/storeOrder/editPayType',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function editPayTypeByCombinationId(data) {
+ 	 return request('/store/app/storeOrder/editPayTypeByCombinationId',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function payRemain(data) {
+ 	 return request('/store/app/storeOrder/payRemain',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function otherPayment(data) {
+ 	 return request('/store/app/storeOrder/otherPayment',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function otherPaymentRemain(data) {
+ 	 return request('/store/app/storeOrder/otherPaymentRemain',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ export function cancelOrder(data) {
+ 	 return request('/store/app/storeOrder/cancelOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function finishOrder(data) {
+ 	 return request('/store/app/storeOrder/finishOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getExpress(data) {
+ 	 return request('/store/app/storeOrder/getExpress',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ export function confirmPackageOrder(data) {
+ 	 return request('/store/app/storeOrder/confirmPackageOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ export function computedPackageOrder(data) {
+ 	 return request('/store/app/storeOrder/computedPackageOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function createPackageOrder(data) {
+ 	 return request('/store/app/storeOrder/createPackageOrder',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getOrderCount() {
+ 	 return request('/store/app/storeOrder/getOrderCount',null,'GET');
+ } 
+ 
+ 
+ 
+ 

+ 15 - 0
api/storeProductPackage.js

@@ -0,0 +1,15 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getStoreProductPackage(data) {
+ 	 return request('/store/app/storeProductPackage/getStoreProductPackage',data,'GET');
+ } 
+ 
+ export function getStoreProductPackageDetails(data) {
+ 	 return request('/store/app/storeProductPackage/getStoreProductPackageDetails',data,'GET');
+ } 
+ 
+  
+ 
+ 
+ 

+ 24 - 0
api/test.js

@@ -0,0 +1,24 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getTestList(data) {
+ 	 return request('/store/app/test/getTestList',data,'GET');
+ }
+ export function getTestDetails(data) {
+ 	 return request('/store/app/test/getTestDetails',data,'GET');
+ }
+ 
+ export function getTestTempDetails(data) {
+ 	 return request('/store/app/test/getTestTempDetails',data,'GET');
+ }
+ export function getTestReport(data) {
+ 	 return request('/store/app/test/getTestReport',data,'GET');
+ }
+ export function getTestReportImg(data) {
+ 	 return request('/store/app/test/getTestReportImg',data,'GET');
+ }
+ export function doReport(data) {
+  	return request('/store/app/test/doReport',data,'POST','application/json;charset=UTF-8');
+ }
+  
+  

+ 70 - 0
api/user.js

@@ -0,0 +1,70 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function loginByMiniApp(data) {
+ 	 return request('/store/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
+ }
+ export function loginByMp(data) {
+ 	 return request('/store/app/wx/loginByMp',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getUserInfo() {
+ 	 return request('/store/app/user/getUserInfo',null,'GET');
+ }
+ 
+ export function editUser(data) {
+ 	return request('/store/app/user/editUser',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getWeixinInfo(data) {
+ 	return request('/store/app/wx/getWeixinInfo',data,'POST','application/json;charset=UTF-8');
+ }
+ export function checkLogin() {
+ 	 return request('/store/app/user/checkLogin',null,'GET');
+ }
+ export function getTuiImg() {
+ 	 return request('/store/app/user/getTuiImg',null,'GET');
+ }
+ export function getMyTuiOrderList(data) {
+ 	 return request('/store/app/user/getMyTuiOrderList',data,'GET');
+ }
+ export function getTuiMoney() {
+ 	 return request('/store/app/user/getTuiMoney',null,'GET');
+ }
+ export function getMyTuiList(data) {
+ 	 return request('/store/app/user/getMyTuiList',data,'GET');
+ }
+ export function getTuiMoneyLogs(data) {
+ 	 return request('/store/app/user/getTuiMoneyLogs',data,'GET');
+ }
+ 
+ export function getProductFoots(data) {
+ 	 return request('/store/app/user/getProductFoots',data,'GET');
+ }
+ export function delProductFoots(data) {
+ 	 return request('/store/app/user/delProductFoots',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function doExtract(data) {
+ 	 return request('/store/app/user/doExtract',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getExtractList(data) {
+ 	 return request('/store/app/user/getExtractList',data,'GET');
+ }
+ export function applyPromoter(data) {
+ 	 return request('/store/app/user/applyPromoter',data,'POST','application/json;charset=UTF-8');
+ }
+ export function bindPromoter(data) {
+ 	 return request('/store/app/user/bindPromoter',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 

+ 16 - 0
api/userSign.js

@@ -0,0 +1,16 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ 
+ export function getUserSign() {
+ 	 return request('/store/app/sign/getUserSign',null,'GET');
+ }
+ 
+ export function getIntegral(data) {
+ 	 return request('/store/app/sign/getIntegral',data,'GET');
+ }
+ export function doSign(data) {
+ 	 return request('/store/app/sign/sign',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 

+ 275 - 0
assets/css/common.less

@@ -0,0 +1,275 @@
+ 
+page {
+  background: #f5f5f5;
+  height: 100%;
+}
+.container{
+  height: 100%;
+}
+rich-text {
+  width: 100%;
+  display: block;
+  img,
+  image {
+    display: block;
+    width: 100%;
+  }
+}
+
+/*单行文本溢出省略号*/
+.one-t {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  transition: all linear 0.2s;
+}
+
+/*多行文本溢出省略号*/
+.more-t {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  transition: all linear 0.2s;
+}
+
+/* ==================
+          flex布局(colorui里面也有相关基础样式)
+ ==================== */
+/* x水平排列*/
+.x-f {
+  display: flex;
+  align-items: center;
+}
+
+/*x两端且水平居中*/
+.x-bc {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+/*x平分且水平居中*/
+.x-ac {
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+
+/*x水平靠上对齐*/
+.x-start {
+  display: flex;
+  align-items: flex-start;
+}
+
+/*x水平靠下对齐*/
+.x-end {
+  display: flex;
+  align-items: flex-end;
+}
+
+/*上下左右居中*/
+.x-c {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+/*y竖直靠左*/
+.y-start {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+}
+
+/*y竖直靠右*/
+.y-end {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-end;
+}
+
+/*y竖直居中*/
+.y-f {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+// y竖直两端
+.y-b {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+/*y竖直两端居中*/
+.y-bc {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-between;
+}
+/* layout */
+.acea-row {
+  display: flex;
+  flex-wrap: wrap;
+  /* 辅助类 */
+}
+.acea-row.row-middle {
+  align-items: center;
+}
+.acea-row.row-top {
+  align-items: flex-start;
+}
+.acea-row.row-bottom {
+  align-items: flex-end;
+}
+.acea-row.row-center {
+  justify-content: center;
+}
+.acea-row.row-right {
+  justify-content: flex-end;
+}
+.acea-row.row-left {
+  justify-content: flex-start;
+}
+.acea-row.row-between {
+  justify-content: space-between;
+}
+.acea-row.row-around {
+  justify-content: space-around;
+}
+.acea-row.row-column-around {
+  flex-direction: column;
+  justify-content: space-around;
+}
+.acea-row.row-column {
+  flex-direction: column;
+}
+.acea-row.row-column-between {
+  flex-direction: column;
+  justify-content: space-between;
+}
+/* 上下左右垂直居中 */
+.acea-row.row-center-wrapper {
+  align-items: center;
+  justify-content: center;
+}
+/* 上下两边居中对齐 */
+.acea-row.row-between-wrapper {
+  align-items: center;
+  justify-content: space-between;
+}
+
+/*每个页面公共css */
+// .ellipsis{
+// 	overflow: hidden;
+// 	text-overflow: ellipsis;
+// 	white-space: nowrap;
+// }
+.ellipsis2{
+	overflow:hidden; 
+	text-overflow:ellipsis;
+	display:-webkit-box; 
+	-webkit-box-orient:vertical;
+	-webkit-line-clamp:2; 
+}
+radio .wx-radio-input{
+  width: 36rpx;
+  height: 36rpx;
+  border: 1px solid #CCCCCC;
+}
+/* 选中后的 背景样式  */
+radio .wx-radio-input.wx-radio-input-checked{
+	background: linear-gradient(135deg, #66b2ef  0%, #008FD3 100%);
+	border: 1px solid #0bb3f2;
+}
+/* 选中后的 对勾样式 (白色对勾) */
+radio .wx-radio-input.wx-radio-input-checked::before{
+	color: #ffffff;
+}
+checkbox .wx-checkbox-input{
+	width: 36rpx;
+	height: 36rpx;
+	border: 1px solid #CCCCCC;
+	border-radius: 50%;
+}
+checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+	background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+	border: 1px solid #0bb3f2;
+	border-radius: 50%;
+}
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
+	color: #ffffff;
+}
+::-webkit-scrollbar {
+   width: 0;
+   height: 0;
+   color: transparent;
+ }
+ /* 暂无数据 */
+.no-data-box{
+	padding: 100upx 50upx;
+	text-align: center;
+	image{
+		width: 372rpx;
+		height: 240rpx;
+	}
+	.empty-title{
+		margin-top: 20rpx;
+		font-size: 32rpx;
+		color: #bbbbbb;
+		 
+	}
+}
+.Loads {
+  height: 0.8*100rpx;
+  font-size: 0.25*100rpx;
+  color: #000;
+}
+.Loads .iconfont {
+  font-size: 0.3*100rpx;
+  margin-right: 0.1*100rpx;
+  height: 0.32*100rpx;
+  line-height: 0.32*100rpx;
+}
+/*加载动画*/
+@keyframes load {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+.loadingpic {
+  animation: load 3s linear 1s infinite;
+}
+.loading {
+  animation: load linear 1s infinite;
+}
+
+ .back-box{
+	position: relative;
+	.title{
+		position: absolute;
+		left: 50%;
+		top: 50%;
+		transform: translate(-50%,-50%);
+	}
+}
+/* tab颜色 */
+.tab-orange {
+	background: #FF5039 !important;
+}
+.tab-gree{
+	background: #2CAE5C !important;
+}
+.tab-purple {
+	background: #7A73E0 !important;
+}
+.tab-blue {
+	background: #4585F8 !important;
+}

+ 137 - 0
assets/css/common.scss

@@ -0,0 +1,137 @@
+// 字体
+@for $i from 20 through 100{
+    .fs#{$i} {
+			font-size: #{$i}rpx;
+    }
+}
+// 颜色
+@for $i from 0 through 9{
+    .color#{$i} {
+			color: #{$i}#{$i}#{$i};
+    }
+}
+// padding
+@for $i from 1 through 100{
+    .p#{$i} {
+			padding: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .ptb#{$i} {
+			padding-top: #{$i}rpx ;
+			padding-bottom: #{$i}rpx ;
+    }
+}
+@for $i from 1 through 100{
+    .plr#{$i} {
+			padding-left: #{$i}rpx;
+			padding-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 200{
+    .pt#{$i} {
+			padding-top: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .pl#{$i} {
+			padding-left: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .pr#{$i} {
+			padding-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 200{
+    .pb#{$i} {
+			padding-bottom: #{$i}rpx;
+    }
+}
+// margin
+@for $i from 1 through 100{
+    .m#{$i} {
+			margin: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mtb#{$i} {
+			margin-top: #{$i}rpx ;
+			margin-bottom: #{$i}rpx ;
+    }
+}
+@for $i from 1 through 100{
+    .mlr#{$i} {
+			margin-left: #{$i}rpx;
+			margin-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mt#{$i} {
+			margin-top: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .ml#{$i} {
+			margin-left: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mr#{$i} {
+			margin-right: #{$i}rpx;
+    }
+}
+@for $i from 1 through 100{
+    .mb#{$i} {
+			margin-bottom: #{$i}rpx;
+    }
+}
+// 圆角
+@for $i from 0 through 100{
+    .radius#{$i} {
+			border-radius: #{$i}rpx;
+    }
+}
+// padding 左右+width自动计算
+@for $i from 10 through 60{
+    .w-calc-#{$i} {
+			width: calc(100% - #{$i*2}rpx);
+			padding-left:  #{$i}rpx;
+			padding-right:  #{$i}rpx;
+    }
+}
+
+// gap
+@for $i from 1 through 100{
+	.gap#{$i} {
+		gap: #{$i}rpx;
+	}
+}
+
+// 高
+@for $i from 1 through 900{
+	.h#{$i} {
+		height: #{$i}rpx;
+	}
+}
+// 宽
+@for $i from 1 through 900{
+	.w#{$i} {
+		width: #{$i}rpx;
+	}
+}
+// 宽
+@for $i from 1 through 900{
+	.lh#{$i} {
+		line-height: #{$i}rpx;
+	}
+}
+
+
+// font-weight
+$steps: 100 200 300 400 500 600 700 800 bold;
+@each $i in $steps {
+	.weight-#{$i} {
+		font-weight: $i;
+	}
+}

+ 208 - 0
assets/css/commonTheme.css

@@ -0,0 +1,208 @@
+.hb {
+	height: 100%;
+	box-sizing: border-box;
+}
+
+.hidden {
+	overflow: hidden;
+}
+
+.w100 {
+	width: 100%;
+}
+
+.h100 {
+	height: 100%;
+}
+
+.row {
+	display: flex;
+	flex-direction: row;
+}
+
+.column {
+	display: flex;
+	flex-direction: column;
+}
+
+.justify-start {
+	display: flex;
+	justify-content: flex-start;
+}
+
+.justify-center {
+	display: flex;
+	justify-content: center;
+}
+
+.justify-end {
+	display: flex;
+	justify-content: flex-end;
+}
+
+.justify-around {
+	display: flex;
+	justify-content: space-around;
+}
+
+.justify-evenly {
+	display: flex;
+	justify-content: space-evenly;
+}
+
+.justify-between {
+	display: flex;
+	justify-content: space-between;
+}
+
+.align-start {
+	display: flex;
+	align-items: flex-start;
+}
+
+.align-center {
+	display: flex;
+	align-items: center;
+}
+
+.align-end {
+	display: flex;
+	align-items: flex-end;
+}
+
+.center {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+
+.centerV {
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	flex-direction: column;
+}
+
+.wrap {
+	flex-wrap: wrap;
+}
+
+.flex-1 {
+	flex: 1;
+}
+
+.ellipsis {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	display: -webkit-box;
+	-webkit-box-orient: vertical;
+	box-sizing: border-box;
+	width: 100%;
+	-webkit-line-clamp: 1;
+}
+
+.text-ellipsis {
+	display: -webkit-box;
+	/* 关键属性 */
+	-webkit-box-orient: vertical;
+	/* 排列方向 */
+	-webkit-line-clamp: 2;
+	/* 显示行数 */
+	overflow: hidden;
+	/* 超出隐藏 */
+	text-overflow: ellipsis;
+	/* 超出显示省略号 */
+	word-break: break-all;
+	/* 允许单词断行 */
+}
+
+.lines-2 {
+	-webkit-line-clamp: 2 !important;
+}
+
+.lines-3 {
+	-webkit-line-clamp: 3 !important;
+}
+
+.bold {
+	font-weight: bold;
+}
+
+.line-through {
+	text-decoration: line-through;
+}
+
+.nowrap {
+	white-space: nowrap;
+}
+
+.scrollx {
+	overflow-x: scroll;
+}
+
+.scrolly {
+	overflow-y: scroll;
+}
+
+.color-price {
+	color: #FF5030;
+}
+.color-white {
+	color: #fff;
+}
+
+.color-orange {
+	color: #FC581C;
+}
+.color-red {
+	color: #F22513;
+}
+.color-yellow {
+	color: #FE9000;
+}
+.color-pink {
+	color: #FF4545;
+}
+
+.color-text {
+	color: #222426;
+}
+
+.color-text1 {
+	color: #626468;
+}
+
+.color-text2 {
+	color: #898E91;
+}
+
+.color-text3 {
+	color: #B2B2B2;
+}
+
+.bg-color {
+	background-color: #008FD3;
+}
+
+.bg-price {
+	background-color: #FF5030;
+}
+
+.bg-yellow {
+	background-color: #F5A623;
+}
+
+.bg-gree {
+	background-color: #2CAE5C;
+}
+
+.bg-purple {
+	background-color: #7A73E0;
+}
+
+.bg-white{
+	background-color:#fff;
+}
+.bg-light{
+	background-color:#F5F7FA;
+}

Разница между файлами не показана из-за своего большого размера
+ 2 - 0
assets/iconfont/iconfont.css


BIN
assets/iconfont/iconfont.ttf


+ 89 - 0
common/request.js

@@ -0,0 +1,89 @@
+// uni-app请求封装
+export default class Request {
+	http(router, data = {}, method,contentType) {
+		let that = this;
+		// let path = 'http://e767647f.natappfree.cc';
+		// let path = 'https://user.test.ylrztop.com/api'; //测试
+		let path = 'https://api.homemdt.net'; //正式
+		// let path = "https://api.qinggetai.com"
+	    // console.log(router,'router')
+		//用户模块
+		if(router.indexOf("/store/app") != -1 || router.indexOf("/app") != -1||  router.indexOf("/recharge-templates") != -1) {
+			path ='https://api.homemdt.net/user';
+		}
+		//企业
+		if(router.indexOf("/companyapp") != -1 ) {
+			path ='https://api.homemdt.net';
+		}
+		uni.setStorageSync('requestPath',path)
+		// uni.showLoading({
+		// 	title: '加载中'
+		// });
+		return new Promise((resolve, reject) => {
+			let token = uni.getStorageSync('AppToken');
+			var httpContentType='application/x-www-form-urlencoded';
+			if(contentType!=undefined){
+				//application/json;charset=UTF-8
+				httpContentType=contentType;
+			}
+			var routers=router;
+			// 请求
+			uni.request({
+				header: {
+					// 'Content-Type': 'application/x-www-form-urlencoded',
+					'Content-Type': httpContentType,
+					'AppToken': token
+				},
+				url: `${path}${router}`,
+				data: data,
+				method: method,
+				success: (res) => {
+					//收到开发者服务器成功返回的回调函数
+					if(res.data.code==401){//没有权限直接退出到登录界面
+						let pages = getCurrentPages();
+						pages.forEach(function(element) {
+						  if(element!=undefined&&element.route=="pages/auth/login"){
+						  	resolve(res.data)
+						  	return;
+						  }
+						});
+						// let url = pages[ pages.length - 1]; //当前页页面实例
+						// //如果登录界面已打开,自动关闭
+						// if(url!=undefined&&url.route=="pages/auth/login"){
+						//  	resolve(res.data)
+						// 	return;
+						// }
+						uni.navigateTo({
+							url:'/pages/auth/login',
+							success: () => {
+								uni.hideLoading();
+								
+							},
+							fail: () => {
+								uni.hideLoading();
+							}
+						})
+						return;
+					}
+					if (res.data.token) {
+						uni.setStorageSync('AppToken',res.data.token)
+					}
+					resolve(res.data)
+				},
+				fail:(res) =>{
+					//接口调用失败的回调函数
+				},
+				complete:(res) =>{
+					//接口调用结束的回调函数(调用成功、失败都会执行)
+					if (res.data && res.data.code == 401) {
+						return false
+					}
+					uni.hideLoading();
+				}
+				
+			})
+		})
+		 
+	}
+	
+}

+ 21 - 0
components/Loading.vue

@@ -0,0 +1,21 @@
+<template>
+  <view class="Loads acea-row row-center-wrapper" v-if="loading || !loaded" style="margin-top: 20rpx;">
+    <template v-if="loading">
+      <view class="iconfont icon-jiazai loading acea-row row-center-wrapper"></view>
+      正在加载中
+    </template>
+    <template v-if="!loading">
+      上拉加载更多
+    </template>
+  </view>
+</template>
+
+<script>
+  export default {
+    name: "Loading",
+    props: {
+      loaded: Boolean,
+      loading: Boolean
+    }
+  };
+</script>

+ 146 - 0
components/Menu.vue

@@ -0,0 +1,146 @@
+<template>
+	<view class="menu-list-box" v-if="carousel" :style="list.length <= menu ? `height:160rpx` : `height:320rpx`">
+		<swiper
+			class="menu-swiper-box"
+			:style="list.length <= menu ? `height:160rpx` : `height:320rpx`"
+			@change="onSwiper"
+			circular
+			:autoplay="false"
+			:interval="3000"
+			:duration="1000"
+		>
+			<swiper-item class="menu-swiper-item" v-for="(itemList, index) in carousel" :key="index" :style="list.length <= menu ? `height:200rpx` : `height:340rpx`">
+				<view class="menu-tab-box">
+					<view class="tab-list"  v-for="item in itemList" :key="item.menuName" @tap="routerTo(item)">
+						<image class="tab-img Shop-selector-circular" :style="{ width: imgW + 'rpx', height: imgW + 'rpx' }" :src="item.icon"></image>
+						<text class="Shop-selector-rect">{{ item.menuName }}</text>
+					</view>
+				</view>
+			</swiper-item>
+		</swiper>
+		<view class="menu-dots" v-if="carousel.length > 1">
+			<text :class="menuCurrent === index ? 'dot-active' : 'dot'" v-for="(dot, index) in carousel.length" :key="index"></text>
+		</view>
+	</view>
+</template>
+
+<script>
+export default {
+	components: {},
+	data() {
+		return {
+			menuCurrent: 0 //轮播下标
+		};
+	},
+	props: {
+		list: {
+			type: Array,
+			default: []
+		},
+		menu: {
+			default: 4
+		},
+		imgW: {
+			type: Number,
+			default: 88
+		}
+	},
+	computed: {
+		carousel() {
+			if (this.list) {
+				let data = this.sortData(this.list, this.menu * 2);
+				return data;
+			}
+		}
+	},
+	created() {},
+	methods: {
+		// 数据分层
+		sortData(oArr, length) {
+			let arr = [];
+			let minArr = [];
+			oArr.forEach(c => {
+				if (minArr.length === length) {
+					minArr = [];
+				}
+				if (minArr.length === 0) {
+					arr.push(minArr);
+				}
+				minArr.push(c);
+			});
+		 
+			return arr;
+		},
+		// 轮播
+		onSwiper(e) {
+			this.menuCurrent = e.detail.current;
+		},
+		routerTo(item) {
+			 this.$emit('menuClick',item);
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.menu-list-box {
+	padding: 0rpx;
+	// background: #fff;
+	box-sizing: border-box;
+}
+.menu-list-box,
+.menu-swiper-box {
+	position: relative;
+	// background: #fff;
+	.menu-swiper-item {
+		// background: #fff;
+		height: 100%;
+		width: 100%;
+	}
+	.menu-tab-box {
+		display: flex;
+		flex-wrap: wrap;
+		.tab-list {
+			width: 25%;
+			display: -webkit-box;
+			display: -webkit-flex;
+			display: flex;
+			-webkit-box-orient: vertical;
+			-webkit-box-direction: normal;
+			-webkit-flex-direction: column;
+			flex-direction: column;
+			-webkit-box-align: center;
+			-webkit-align-items: center;
+			align-items: center;
+			font-size: 22rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: rgba(51, 51, 51, 1);
+			padding-bottom: 30rpx;
+			.tab-img {
+				border-radius: 25rpx;
+				margin-bottom: 10rpx;
+			}
+		}
+	}
+	.menu-dots {
+		display: flex;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		.dot {
+			width: 40rpx;
+			height: 3rpx;
+			background: #eeeeee;
+			margin-right: 10rpx;
+		}
+
+		.dot-active {
+			width: 40rpx;
+			height: 3rpx;
+			background: #0bb3f2;
+			margin-right: 10rpx;
+		}
+	}
+}
+</style>

+ 166 - 0
components/chengpeng-audio/free-audio.vue

@@ -0,0 +1,166 @@
+<template>
+	<!-- 音频播放器组件 -->
+	<view v-if='url' class='flex justify-between align-center audio' >
+		<view class='mr-3'  @click='start(audioId)'>
+			<image :src='startPic' class='icon' v-show='!status'></image>
+			<image :src='endPic' class='icon' v-show='status'></image>
+		</view>
+		<view class='flex-1'>
+			<slider 
+				@change='changeAudio' 
+				:activeColor='activeColor' 
+				:min='0' 
+				:max='duration.toFixed(0)' 
+				:value='currentTime.toFixed(0)' 
+				:step='0.1'
+				backgroundColor="#E9F0F0"
+				:block-size='14'
+				block-color='#0bb3f2'>
+			</slider>
+		</view>
+		<view class='ml-3'>{{getTime(Math.round(currentTime))}}</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				context: null,
+				currentTime: 0,
+				duration: 100,
+				status: false
+			}
+		},
+		props: {
+			url: String,
+			activeColor: {
+				type: String,
+				default: '#0E7EFC'
+			},
+			startPic: String,
+			endPic: String,
+			audioId: [String,Number]
+		},
+		created() {
+			this.context = uni.createInnerAudioContext();
+			this.context.src = this.url;
+			this.onTimeUpdate();
+			this.onCanplay();
+			this.onEnded();
+			uni.$on('stop',(id)=> {
+				if(id && id != this.audioId) {
+					this.context.stop();
+					this.status = false;
+				} else if(!id){
+					this.context.stop();
+					this.status = false;
+				}
+			})
+		},
+		methods: {
+			start(id) { //点击播放
+				let audioId = id;
+				if(this.status) {
+					this.context.pause();
+					this.status = !this.status;
+				}else {
+					uni.$emit('stop',id)
+					this.context.play()
+					this.status = !this.status;
+				}
+			},
+			onCanplay() { //进入可播放状态
+				this.context.onCanplay(() => {
+					this.context.duration;
+					setTimeout(()=>{
+						this.duration = this.context.duration;
+					},1000)
+				})
+			},
+			onTimeUpdate() { //音频播放进度
+				 this.context.onTimeUpdate(() => {
+					 if (!Number.isFinite( this.context.duration)) {
+						this.context.currentTime = Number.MAX_SAFE_INTEGER;
+						this.context.currentTime = 0;
+					 } else {
+						 this.duration = this.context.duration;
+						 this.currentTime = this.context.currentTime;
+					 }
+				 })
+			},
+			onEnded() { //播放结束
+				this.context.onEnded(()=> {
+					this.status = false;
+					this.currentTime = 0;
+				})
+			},
+			changeAudio(e) {
+				let paused = this.context.paused;
+				this.context.pause();
+				this.context.seek(e.detail.value)
+				if(!paused) {
+					this.context.play();
+				} 
+			},
+			getTime(time) {
+				let m = parseInt(time / 60);
+				let s = time % 60;
+				return this.towNum(m) + ':' + this.towNum(s);
+			},
+			towNum(num) {
+				if(num >= 10) {
+					return num;
+				}else {
+					return '0' + num;
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	.audio {
+		background: #F5F7F7;
+		padding: 30upx 20upx;
+	}
+	
+	.icon {
+		width: 54upx;
+		height: 54upx;
+	}
+	slider{
+		margin: 0;
+	}
+	.flex {
+		display: flex;
+		flex-direction: row;
+	}
+	
+	.justify-between {
+		justify-content: between;
+	}
+	
+	.align-center {
+		align-items: center;
+	}
+	
+	.flex-1 {
+		flex: 1;
+	}
+	
+	.ml-3 {
+		margin-left: 20upx;
+		font-size: 24upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		color: #666666;
+	}
+	
+	.mr-3 {
+		margin-right: 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 42 - 0
components/chengpeng-audio/redme.md

@@ -0,0 +1,42 @@
+## 参数
+
+| url      | activeColor | startPic       | endPic         | 组件id                                                |
+| -------- | ----------- | -------------- | -------------- | ----------------------------------------------------- |
+| 音频链接 | 进度条颜色  | 开始播放的图片 | 暂停播放的图片 | audioId(必填,且id不可为数字0,建议格式 ‘audio’+数字) |
+
+## 使用方法
+
+```javascript
+//html
+<template>
+  <free-audio startPic='/static/images/icon/play.png' endPic='/static/images/icon/stop.png' :audioId='audio1' :url='path'></free-audio>
+</template>
+
+//js
+
+import freeAudio from '@/components/free-audio.vue'
+export default {
+    components: {freeAudio},
+    data() {
+        return{
+            path: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3'
+        }
+    },
+    methods: {
+
+    },
+} 
+
+//暂停所有音频(一般用于页面切换时停止正在播放的音频)
+onUnload() { //普通页面在 onUnload 生命周期中执行
+  uni.$emit('stop')
+},
+onHide() { //tabBar页面在onHide生命周期中执行
+  uni.$emit('stop')
+}
+
+
+
+
+```
+

BIN
components/chengpeng-audio/static/play.png


BIN
components/chengpeng-audio/static/stop.png


+ 143 - 0
components/evan-switch/evan-switch.vue

@@ -0,0 +1,143 @@
+<template>
+	<!-- <view @click="toggle" class="evan-switch" :class="{'evan-switch--disabled':disabled}" :style="{width:2*size+'px',height:switchHeight,borderRadius:size+'px',backgroundColor:currentValue===activeValue?activeColor:inactiveColor}">
+		<view class="evan-switch__circle" :style="{width:size+'px',height:size+'px',transform:currentValue===activeValue?`translateX(${size}px)`:`translateX(0)`}"></view>
+	</view> -->
+	<view @click="toggle" class="evan-switch" :class="{'evan-switch--disabled':disabled}" :style="{backgroundColor:currentValue===activeValue?activeColor:inactiveColor}">
+		<view class="evan-switch__circle" :style="{transform:currentValue===activeValue?`translateX(${29}px)`:`translateX(0)`}"></view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'EvanSwitch',
+		props: {
+			value: {
+				type: [String, Number, Boolean],
+				default: false
+			},
+			activeColor: {
+				type: String,
+				default: '#108ee9'
+			},
+			inactiveColor: {
+				type: String,
+				default: '#fff'
+			},
+			size: {
+				type: Number,
+				default: 30
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			activeValue: {
+				type: [String, Number, Boolean],
+				default: true
+			},
+			inactiveValue: {
+				type: [String, Number, Boolean],
+				default: false
+			},
+			beforeChange: {
+				type: Function,
+				default: null
+			},
+			extraData: null,
+			contextLevel: {
+				type: Number,
+				default: 1
+			}
+		},
+		computed: {
+			switchHeight() {
+				// #ifdef APP-NVUE
+				return this.size + 2 + 'px'
+				// #endif
+				// #ifndef APP-NVUE
+				return this.size + 'px'
+				// #endif
+			}
+		},
+		watch: {
+			value: {
+				immediate: true,
+				handler(value) {
+					this.currentValue = value
+				}
+			}
+		},
+		data() {
+			return {
+				currentValue: false
+			}
+		},
+		methods: {
+			toggle() {
+				if (!this.disabled) {
+					if (this.beforeChange && typeof this.beforeChange === 'function') {
+						let context = this
+						for (let i = 0; i < this.contextLevel; i++) {
+							context = context.$options.parent
+						}
+						const result = this.beforeChange(this.currentValue === this.activeValue ? this.inactiveValue : this.activeValue,
+							this.extraData, context)
+						if (typeof result === 'object') {
+							result.then(() => {
+								this.toggleValue()
+							}).catch(() => {})
+						} else if (typeof result === 'boolean' && result) {
+							this.toggleValue()
+						}
+					} else {
+						this.toggleValue()
+					}
+				}
+			},
+			toggleValue() {
+				this.currentValue = this.currentValue === this.activeValue ? this.inactiveValue : this.activeValue
+				this.$emit('input', this.currentValue)
+				this.$emit('change', this.currentValue)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.evan-switch {
+		position: relative;
+		border-width: 1px;
+		border-color: rgba(0, 0, 0, 0.1);
+		border-style: solid;
+		transition: background-color 0.3s;
+		width: 100upx;
+		height: 36upx;
+		background: #0bb3f2;
+		border-radius: 18upx;
+		/* #ifndef APP-NVUE */
+		box-sizing: content-box;
+		/* #endif */
+	}
+
+	.evan-switch--disabled {
+		opacity: 0.3;
+	}
+
+	.evan-switch__circle {
+		position: absolute;
+		left: -4upx;
+		top: -8upx;
+		width: 50upx;
+		height: 50upx;
+		background: #FFFFFF;
+		box-shadow: 0px 2px 10px 0px rgba(166, 217, 212, 0.49);
+		border-radius: 50%;
+		/* #ifndef APP-NVUE */
+		box-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05);
+		/* #endif */
+		/* #ifdef APP-NVUE */
+		box-shadow: 1px 0 0px 0 rgba(0, 0, 0, 0.05);
+		/* #endif */
+		transition: transform 0.3s;
+	}
+</style>

+ 181 - 0
components/likeProduct.vue

@@ -0,0 +1,181 @@
+<template>
+   <view>
+		<view class="like-title">
+			<image src="/static/images/like.png" mode=""></image>
+			<text class="text">猜你喜欢</text>
+		</view>
+		<view class="like-list">
+			<view class="item" v-for="(item,index) in list" :key="index" @click="showProduct(item)">
+				<view class="img-box">
+					<image :src="item.image" mode=""></image>
+				</view>
+				<view class="info-box">
+					<view class="title ellipsis2">{{ item.productName }}</view>
+					<view class="price-box">
+						<view class="now">
+							<text class="unit">¥</text>
+							<text class="num">{{item.price.toFixed(2)}}</text>
+						</view>
+						<view class="old">¥{{item.otPrice.toFixed(2)}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<Loading :loaded="loaded" :loading="loading"></Loading>
+   </view>
+</template>
+
+<script>
+  import {getGoodsProducts} from '@/api/product'
+  import Loading from "@/components/Loading";
+  export default {
+	components: {Loading },
+    name: "likeProduct",
+	data() {
+		return {
+			page:{
+				page: 1,
+				pageSize: 10
+			},
+			total:0,
+			list:[],
+			loaded: false,
+			loading: false
+		};
+	},
+	created() {
+	},
+	mounted() {
+		this.getGoodsProducts();
+	},
+	
+	methods: {
+		getGoodsProducts(){
+			console.log(1)
+			var that=this;
+			if (that.loaded == true || that.loading == true) return;
+			that.loading = true;
+			uni.showLoading({
+				title:"加载中..."
+			})
+			getGoodsProducts(that.page).then(
+				res => {
+					if(res.code==200){
+						that.total=res.data.total;
+						that.list.push.apply(that.list, res.data.list);
+						that.loading = false;
+						that.loaded = that.list.length<that.total?false:true;
+						that.page.page = that.page.page + 1;
+						uni.hideLoading()
+					}
+				},
+				err => {
+					uni.hideLoading()
+					uni.showToast({
+						title: err.msg ,
+						icon: 'none',
+						duration: 2000
+					});
+				}
+			);
+		},
+		showProduct(item){
+			uni.navigateTo({
+				url: '/pages/shopping/productDetails?productId='+item.productId
+			})
+		},
+	}
+ 
+  };
+</script>
+<style lang="scss">
+	.like-title{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		padding: 30upx 0;
+		image{
+			width: 37upx;
+			height: 37upx;
+			margin-right: 20upx;
+		}
+		.text{
+			font-size: 36upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #111111;
+			line-height: 1;
+		}
+	}
+	.like-list{
+		display: flex;
+		flex-wrap: wrap;
+		.item{
+			margin-right: 20rpx;
+			margin-bottom: 20rpx;
+			width: 345rpx;
+			background: #FFFFFF;
+			box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
+			border-radius: 20rpx;
+			overflow: hidden;
+			&:nth-child(2n) {
+				margin-right: 0;
+			}
+			.img-box{
+				width: 100%;
+				height: 334upx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.info-box{
+				box-sizing: border-box;
+				height: 182upx;
+				padding: 20upx 20upx 30upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 40upx;
+				}
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					.now{
+						display: flex;
+						align-items: flex-end;
+						margin-right: 20upx;
+						.unit{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 4upx;
+						}
+						.num{
+							font-size: 36upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
+						}
+					}
+					.old{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #BBBBBB;
+						line-height: 1.1;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 503 - 0
components/pushangyuqi-calendar/pushangyuqi-calendar.vue

@@ -0,0 +1,503 @@
+<template>
+	<view class="calendar">
+		<view class="table">
+			<view class="chose-head">
+				<view class="chose-item">
+					<view class="btn" @click="yearsub">
+						<u-icon name="arrow-left" color="#008FD3" size="14"></u-icon>
+					</view>
+					<view class="year-td">
+						<picker mode="selector" :range="years" @change="yearchange" :value="y">
+							<view class="text">{{years[y]}}年</view>
+						</picker>
+					</view>
+					<view class="btn" @click="yearadd">
+						<u-icon name="arrow-right" color="#008FD3" size="14"></u-icon>
+					</view>
+				</view>
+				
+				<view class="chose-item">
+					<view class="btn" @click="monthsub">
+						<u-icon name="arrow-left" color="#008FD3" size="14"></u-icon>
+					</view>
+					<view class="month-td">
+						<picker mode="selector" :range="months" @change="monthchange" :value="m">
+							<view class="text">{{months[m]}}月</view>
+						</picker>
+					</view>
+					<view class="btn" @click="monthadd">
+						<u-icon name="arrow-right" color="#008FD3" size="14"></u-icon>
+					</view>
+				</view>
+			</view>
+
+			<view class="week">
+				<view class="item">日</view>
+				<view class="item">一</view>
+				<view class="item">二</view>
+				<view class="item">三</view>
+				<view class="item">四</view>
+				<view class="item">五</view>
+				<view class="item">六</view>
+			</view>
+
+
+			<view class="date-tr" v-for="(i,index) in dates" :key="index">
+				<view v-for="(j,k) in i" :key="k" :style="{color:(k==0||k==6)&&j[0]!=='#BBBBBB'?'#FF7700':j[0]}" :class="j[2]=='#008FD3'?'td active':'td'" @click="itemChose(j,index,k)">{{j[1]}}</view>
+			</view>
+			<view class="btn-box">
+				<view class="sub-btn" @click="submit()">
+					确定
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import config from '../../uni_modules/uview-ui/libs/config/config';
+
+	export default {
+		data() {
+			return {
+				year: 2022,
+				month: 12,
+				date: 19,
+				/* 年月是当天的日期,日是这个月日历的第一天,
+				其实就是上个月的最后一个周日,这里是随便定义的,
+				后面在mounted里面根据当前日期赋值 */
+				years: [], //存放1900到2100共200年
+				months: [], //存放1到12月
+				y: 0,
+				m: 0, //picker的迭代器
+				dates: [
+					[],
+					[],
+					[],
+					[],
+					[],
+					[]
+				], //外层括号表示一个月,内层括号表示一周,每个元素是一天
+				activeDateStr: '', // 当前选中的时间
+			}
+		},
+		
+		mounted() {
+			for (let i = 1900; i <= 2100; i++) {
+				this.years.push(i);
+			}
+			for (let i = 1; i <= 12; i++) {
+				this.months.push(i);
+			}
+		
+			//获取当前时间和月份
+			var date = new Date();
+			this.year = date.getFullYear();
+			this.month = date.getMonth() + 1;
+			let dayNum = date.getDate();
+		
+			for (let i = 0; i < 200; i++) {
+				if (this.years[i] == this.year) {
+					this.y = i;
+					break;
+				}
+			}
+			for (let i = 0; i < 12; i++) {
+				if (this.months[i] == this.month) {
+					this.m = i;
+					break;
+				}
+			}
+		
+			//当前月份的天数和上个月的天数
+			var maxdays = this.maxdformat();
+			var maxday = maxdays[0];
+			var premaxday = maxdays[1];
+		
+			//通过当月一号的星期来计算上个月的最后一个星期日时几号
+			date.setDate(1);
+			var weekday = date.getDay();
+			this.date = premaxday - weekday + 1;
+		     // console.log(this.date,'this.date')
+			//编排这个月的日历
+			this.datesformat(maxday, premaxday);
+			
+			let mothnum = this.months[this.m]
+			if(mothnum<10) {
+				mothnum = '0'+mothnum
+			}
+			if(dayNum<10) {
+				dayNum = '0'+dayNum
+			}
+			this.activeDateStr = this.years[this.y] + '-' + mothnum + '-' + dayNum
+		},
+		methods: {
+			//编排日历
+			datesformat(maxday, premaxday) {
+				//获取当前日期,用来突出显示当前日期
+				var date = new Date();
+				var y = date.getFullYear();
+				var m = date.getMonth() + 1;
+				var d = date.getDate();
+				var w = date.getDay();
+				var i = 0,
+					j = 0;
+				for (i; i < 3; i++) {
+					for (j = 0; j < 7; j++) {
+						let cache = ['#222222', '', '#fff']; //第一个元素用来定义字体颜色,第二个是日期,第三个元素是背景色,用来突出显示当前日期
+						if (this.date > 21 && this.date <= premaxday) {
+							cache[0] = '#BBBBBB';
+						}
+						/* 上个月的日期显示为灰色,只能判断前半个月,
+						   因为如果到这个月的21号之后的话造成这个月的日期也变为灰色,
+						   选21是因为前3周不可能到21号(1号在周日的话会放在第二周),
+						   并且上个月的最后一个星期日必然是21号之后 */
+						else if (this.year == y && this.month == m && this.date == d) {
+							cache[2] = '#008FD3'; // 当前日期背景颜色
+							cache[0] = '#fff'; // 当前日期文字颜色
+						}
+						if(w==0||w==6){
+							console.log(w,'w')
+							cache[0] = '#FF7700';
+						}
+						if (this.date <= premaxday) {
+							cache[1] = this.date++;
+						} else {
+							this.date = 1;
+							cache[1] = this.date++; //日期递增,如果超过上个月的最后一天的话重新从1号开始
+						}
+						this.dates[i].push(cache);
+					}
+				}
+				for (i; i < 6; i++) {
+					for (j = 0; j < 7; j++) {
+						let cache = ['#222222', '', "#fff"]
+						if (this.date < 14 || this.date == maxday + 1) {
+							cache[0] = '#BBBBBB'
+						} else if (this.year == y && this.month == m && this.date == d) {
+							cache[2] = '#008FD3'
+							cache[0] = '#fff'; // 当前日期文字颜色
+						}
+						if(w==0||w==6){
+							cache[0] = '#FF7700';
+						}
+						if (this.date <= maxday) {
+							cache[1] = this.date++;
+						} else {
+							this.date = 1;
+							cache[1] = this.date++;
+						}
+						this.dates[i].push(cache);
+						/* 基本与上半月相似,下个月的日期显示为灰色,
+						   选14是因为第4周的第一天最早是15号(1号在周日并放在第二周的情况),
+						   并且下个月出现最多日期的情况(2月1号是周一)也不会有14天 */
+						
+					}
+				}
+			},
+
+			//计算当月的天数和上个月的天数
+			maxdformat() {
+				var maxday = 30;
+				var premaxday = 30; //都定义为30天,这样小月就不用判断了
+				if (this.month == 2) {
+					if (this.year % 400 == 0 || (this.year % 4 == 0 && this.year % 100 != 0)) { //二月判断平闰年
+						maxday = 29;
+					} else {
+						maxday = 28;
+					}
+				} else if (this.month == 1 || this.month == 3 || this.month == 5 || this.month == 7 ||
+					this.month == 8 || this.month == 10 || this.month == 12) { //给大月赋值
+					maxday = 31;
+				}
+
+				//计算上个月的天数,月份+1直接用上面的
+				if (this.month == 3) {
+					if (this.year % 400 == 0 || (this.year % 4 == 0 && this.year % 100 != 0)) {
+						premaxday = 29;
+					} else {
+						premaxday = 28;
+					}
+				} else if (this.month == 2 || this.month == 4 || this.month == 6 || this.month == 8 ||
+					this.month == 9 || this.month == 11 || this.month == 1) {
+					premaxday = 31;
+				}
+				return [maxday, premaxday];
+			},
+
+			//下一个月
+			monthadd() {
+				//月份加一,十二月下一个月是一月
+				if (this.month == 12) {
+					this.y++;
+					this.year++;
+					this.m = 0;
+					this.month = 1;
+				} else {
+					this.m++;
+					this.month++;
+				}
+
+				var maxdays = this.maxdformat();
+				var maxday = maxdays[0];
+				var premaxday = maxdays[1];
+
+				//这个月的最后一个周日,就是下个月日历的第一天
+				if (this.dates[5][0][1] > 14) {
+					this.date = this.dates[5][0][1];
+				} else {
+					this.date = this.dates[4][0][1];
+				}
+				this.dates = [
+					[],
+					[],
+					[],
+					[],
+					[],
+					[]
+				]; //日历初始化
+				this.datesformat(maxday, premaxday); //编排下个月的日历
+			},
+
+			//上一个月
+			monthsub() {
+				if (this.month == 1) {
+					this.m = 11;
+					this.month = 12;
+					this.y--;
+					this.year--;
+				} else {
+					this.m--;
+					this.month--;
+				}
+				var maxdays = this.maxdformat();
+				var maxday = maxdays[0];
+				var premaxday = maxdays[1];
+
+				//根据上个月的最后一个周日,计算上个月日历的第一天
+				if (this.dates[0][0][1] <= 28) {
+					this.date = premaxday + this.dates[0][0][1] - 28;
+				} else {
+					this.date = premaxday + this.dates[0][0][1] - 35;
+				}
+				this.dates = [
+					[],
+					[],
+					[],
+					[],
+					[],
+					[]
+				];
+
+				this.datesformat(maxday, premaxday)
+			},
+
+			//下一年,就是把下一个月运行12次
+			yearadd() {
+				for (let c = 0; c < 12; c++) {
+					this.monthadd();
+				}
+			},
+
+			//上一年,就是把上一个月运行12次
+			yearsub() {
+				for (let c = 0; c < 12; c++) {
+					this.monthsub();
+				}
+			},
+
+			//picker直接选择年份,计算中间差几年,然后运行几次上一年或下一年
+			yearchange(e) {
+				this.y = e.target.value
+				let d = this.year - this.years[this.y];
+				if (d > 0) {
+					for (let i = 0; i < d; i++) {
+						this.yearsub();
+					}
+				} else {
+					for (let i = 0; i < 0 - d; i++) {
+						this.yearadd();
+					}
+				}
+				this.y += d;
+			},
+
+			//picker直接选择月份
+			monthchange(e) {
+				this.m = e.target.value
+				let d = this.month - this.months[this.m];
+				if (d > 0) {
+					for (let i = 0; i < d; i++) {
+						this.monthsub();
+					}
+				} else {
+					for (let i = 0; i < 0 - d; i++) {
+						this.monthadd();
+					}
+				}
+				this.m += d;
+			},
+			// 日期选择
+			itemChose(day,w,k) {
+				if(day[0] == '#222222'){ // 取消所有选中数据
+					for(let i=0;i<6;i++) {
+						for(let j=0;j<7;j++) {
+							if(this.dates[i][j][0] != '#BBBBBB' && this.dates[i][j][2] == '#008FD3') {
+								this.dates[i][j][2] = '#fff'
+								this.dates[i][j][0] = '#222222'
+							}
+						}
+					}
+					this.dates[w][k][2] = '#008FD3'
+					this.dates[w][k][0] = '#fff'
+					let newValue = ['#fff', day[1], "#008FD3"]
+					this.$set(this.dates[w], k, newValue)
+				}
+				let mothnum = this.months[this.m]
+				if(mothnum<10) {
+					mothnum = '0'+mothnum
+				}
+				let dayNum = day[1]
+				if(dayNum<10) {
+					dayNum = '0'+dayNum
+				}
+				this.activeDateStr = this.years[this.y] + '-' + mothnum + '-' + dayNum
+			},
+			submit(){
+				console.log(this.activeDateStr,'===')
+				this.$emit('onDayClick', this.activeDateStr);
+			}
+		},
+	}
+</script>
+
+<style scoped lang="scss">
+	.calendar{
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		.chose-head{
+			width: 100%;
+			height: 88upx;
+			border-bottom: 2upx solid #ECECEC;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			// padding: 0 97upx 0 67upx;
+			.chose-item{
+				display: flex;
+				align-items: center;
+				.btn{
+					width: 48upx;
+					height: 48upx;
+					background: #EFF3F7;
+					border-radius: 8upx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					image{
+						width: 11upx;
+						height: 18upx;
+					}
+				}
+				.year-td{
+					width: 160upx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					.text{
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #222222;
+					}
+				}
+				.month-td{
+					width: 100upx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					.text{
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #222222;
+					}
+				}
+			}
+		}
+		.table{
+			width: 100%;
+			.week{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 20upx;
+				border-bottom: 2upx solid #ECECEC;
+				.item{
+					width: 10%;
+					height: 60upx;
+					line-height: 60upx;
+					margin: 12upx 0;
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 400;
+					color: #222222;
+					text-align: center;
+					&:first-child{
+						color: #FF7700;
+					}
+					&:last-child{
+						color: #FF7700;
+					}
+				}
+			}
+			.date-tr{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 20upx;
+				.td{
+					width: 10%;
+					height: 56upx;
+					line-height: 56upx;
+					margin: 12upx 0;
+					font-size: 28upx;
+					text-align: center;
+					font-family: PingFang SC;
+					font-weight: 600;
+					color: #222222;
+					border-radius: 8upx;
+					&.active{
+						background-color: #008FD3;
+					}
+				}
+			}
+			.btn-box {
+				// height: 120upx;
+				padding-top: 30rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				.sub-btn {
+					width: 480upx;
+					height: 88upx;
+					line-height: 88upx;
+					text-align: center;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #FFFFFF;
+					background: #008FD3 ;
+					border-radius: 44upx;
+					// margin-bottom: 40upx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+				}
+			}
+		}
+	}
+	
+</style>

+ 315 - 0
components/px-popup-bottom/px-popup-bottom.vue

@@ -0,0 +1,315 @@
+<template>
+	<view :class="['popup',{'popup-show':show}]" @mousewheel.prevent.stop @touchmove.stop.prevent
+		:style="{'z-index':zindex}">
+		<view class="mask" :style="{'z-index':maskZindex,bottom:bottom+'rpx'}" v-show="show" @click.stop="onClose"
+			@touchmove.prevent.stop></view>
+		<view :class="['content',{show}]" @click.stop @touchmove.prevent.stop :style="{'background-color':bgColor,height:`${height}px`,maxHeight:show ? cotMaxHeight:0,'border-top-right-radius':cotRadius,
+			'border-top-left-radius':cotRadius,transition: `all ${animaTime}s ease-in`,bottom:bottom+'rpx','z-index':zindex}">
+			<view id="title-bar" class="title-bar" v-show="title">
+				<view class="title" :style="{fontWeight:fontweight}">{{title}}</view>
+				<view class="close-wrap" @click.stop="onClose">
+					<image class="close-icon" :src="closeIcon" mode="widthFix"></image>
+				</view>
+			</view>
+			<view class="scroll-wrap">
+				<scroll-view :class="{'scroll-view':isAnimaStart}" scroll-y="true" style="height:100%;"
+					@scrolltolower="onScrollToLower">
+					<view id="popup_content" class="popup_content">
+						<slot></slot>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import iconClose from '@/static/images/close40.png'
+	export default {
+		props: {
+			title: { //标题
+				type: String,
+				default: ''
+			},
+			fontweight: {
+				type: [String, Number],
+				default: 'normal'
+			},
+			visible: { //隐藏显示标识
+				type: Boolean,
+				default: false
+			},
+			maxHeight: { //内容区域最大高度
+				type: [String, Number],
+				default: '75%'
+			},
+			radius: { //顶部圆角
+				type: [String, Number],
+				default: '0'
+			},
+			animaTime: { //弹窗动画时间
+				type: Number,
+				default: 0.2
+			},
+			bottom: { //离底部距离
+				type: [String, Number],
+				default: 0
+			},
+			bgColor: {
+				type: [String],
+				default: '#ffffff'
+			},
+			zindex: {
+				type: [String, Number],
+				default: 1000
+			},
+			maskZindex: {
+				type: [String, Number],
+				default: 999
+			},
+			always: { //是否每次打开都重新计算内容高度
+				type: Boolean,
+				default: false
+			},
+
+		},
+		data() {
+			return {
+				show: false,
+				height: 0,
+				PopHeight: 0,
+				cotMaxHeight: '',
+				isAnimaStart: false,
+				rpxRate: "",
+				cotRadius: 0,
+				closeIcon: iconClose
+			}
+		},
+		watch: {
+			visible(newval) {
+				this.isAnimaStart = true;
+				setTimeout(() => {
+					this.isAnimaStart = false;
+				}, this.animaTime * 1000)
+
+				if (newval && this.height === 0) {
+					if (this.PopHeight === 0 || this.always) {
+						this.setContViewHeight();
+
+					} else {
+						this.height = this.PopHeight
+					}
+
+					// #ifdef H5 
+					this.setBodyOverFlow('hidden') //阻止滚动穿透
+					//#endif
+					this.$emit('open')
+
+				} else {
+					this.height = 0;
+					// #ifdef H5 
+					this.setBodyOverFlow('visible')
+					//#endif
+
+				}
+
+				this.show = newval
+
+			},
+			maxHeight: {
+				handler(newval) {
+					this.cotMaxHeight = this.unitCheck(newval);
+
+				},
+				immediate: true
+			},
+			radius: {
+				handler(newval) {
+					this.cotRadius = this.unitCheck(newval);
+
+				},
+				immediate: true
+			}
+		},
+		created() {
+			this.rpxRate = this.getRpxRate()
+		},
+		mounted() {
+			this.$nextTick(() => {
+				// #ifdef H5
+				this.preventTouch(document.querySelector(
+					'.scroll-wrap .uni-scroll-view .uni-scroll-view')); //防止浏览器报错
+				//#endif
+			})
+		},
+		methods: {
+			onClose() {
+				this.$emit("update:visible", false);
+				this.$emit('close')
+			},
+			//触底
+			onScrollToLower(e) {
+				this.$emit("reachBottom");
+			},
+			getRpxRate() {
+				let res = uni.getSystemInfoSync();
+				let width = res.windowWidth;
+				let rate = 750.00 / width;
+				return rate
+			},
+			unitCheck(value) {
+				const val = String(value);
+				if (!val.includes('px') && !val.includes('%')) {
+					return `${val}rpx`;
+				}
+				return val;
+
+			},
+			preventTouch(el) {
+				el.addEventListener('touchmove', function(e) {
+					e.stopPropagation();
+
+				}, {
+					passive: false
+				});
+			},
+			setBodyOverFlow(val) {
+				document.body.style.overflow = val
+			},
+
+			//设置内容区域高度
+			async setContViewHeight() {
+				let data = await this.computeHeight();
+				this.height = data.height + (this.title ? 100 / parseFloat(this.rpxRate) : 0);
+				this.PopHeight = this.height;
+			},
+			//计算内容区域高度
+			computeHeight() {
+				return new Promise(resolve => {
+					this.$nextTick(() => {
+						const query = uni.createSelectorQuery().in(this);
+						query.select('#popup_content').boundingClientRect(data => {
+							resolve(data)
+						}).exec();
+					})
+				})
+			}
+
+		}
+
+
+	}
+</script>
+
+<style lang="scss" scoped>
+	.popup {
+
+		&.popup-show {
+			position: fixed;
+			top: 0;
+			right: 0;
+			left: 0;
+			bottom: 0;
+			overflow: hidden;
+			z-index: 999;
+		}
+
+		.mask {
+			position: fixed;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			left: 0;
+			background-color: rgba($color: #000000, $alpha: 0.5);
+			z-index: 999;
+		}
+
+		.content {
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			right: 0;
+			height: 0;
+			height: auto;
+			background-color: #ffffff;
+			transition: all 0.2s ease-in;
+			z-index: 1000;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			overflow: hidden;
+
+			.title-bar {
+				width: 100%;
+				flex-shrink: 0;
+				text-align: center;
+				position: relative;
+				padding: 10rpx 70rpx 0;
+				box-sizing: border-box;
+				height: 80rpx;
+
+				.title {
+					font-size: 34upx;
+					font-family: PingFang SC;
+					font-weight: bold !important;
+					color: #111111;
+					width: 100%;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+				}
+
+				.close-wrap {
+					position: absolute;
+					top: 20rpx;
+					right: 10rpx;
+					padding: 10rpx 20rpx;
+					box-sizing: border-box;
+				}
+
+				.close-icon {
+					width: 40rpx;
+					height: 40rpx;
+				}
+			}
+
+			.scroll-wrap {
+				flex: 1;
+				height: 0;
+				width: 100%;
+			}
+
+			&.visible {
+				max-height: 75%;
+				overflow-y: hidden;
+				height: auto;
+
+			}
+		}
+	}
+
+	.scroll-view ::-webkit-scrollbar {
+		display: none !important;
+		width: 0 !important;
+		height: 0 !important;
+		-webkit-appearance: none;
+		background: transparent;
+
+	}
+
+	.popup_content {
+		width: 100%;
+		padding: 0rpx 30rpx;
+		box-sizing: border-box;
+
+		&::after {
+			display: block;
+			width: 100%;
+			content: "\00A0";
+			overflow: hidden;
+			opacity: 0;
+			height: 1rpx;
+		}
+
+	}
+</style>

+ 432 - 0
components/ren-calendar/ren-calendar.vue

@@ -0,0 +1,432 @@
+<template>
+    <view class="calendar-wrapper">
+		<view class="fs28 left">{{y+'年'+m+'月'}}</view>
+        <view class="header" v-if="headerBar">
+            <view class="pre" @click="changeMonth('pre')">上个月</view>
+            <view>{{y+'年'+formatNum(m)+'月'}}</view>
+            <view class="next" @click="changeMonth('next')">下个月</view>
+        </view>
+        <view class="week">
+            <view class="week-day" v-for="(item, index) in weekDay" :key="index">{{ item }}</view>
+        </view>
+        <view :class="{ hide: !monthOpen }" class="content" :style="{ height: height }">
+            <view :style="{ top: positionTop + 'rpx' }" class="days">
+                <view class="item" v-for="(item, index) in dates" :key="index">
+                    <view
+                        class="day"
+                        @click="selectOne(item, $event)"
+                        :class="{
+                            choose: choose == `${item.year}-${item.month}-${item.date}`&&item.isCurM,
+                            nolm: !item.isCurM,
+                            today: isToday(item.year, item.month, item.date),
+                            isWorkDay: isWorkDay(item.year, item.month, item.date)
+                        }"
+                    >
+                        {{ Number(item.date) }}
+                    </view>
+                   <!-- <view class="markDay" v-if="isMarkDay(item.year, item.month, item.date)&&item.isCurM"></view> -->
+                    <!-- <view class="today-text" v-if="isToday(item.year, item.month, item.date)">今</view> -->
+                </view>
+            </view>
+        </view>
+        <image src="@/static/images/company/time_arrow_down_icon.png" mode="scaleToFill" v-if="collapsible" @click="toggle" class="weektoggle" :class="{ down: monthOpen }"></image>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'ren-calendar',
+    props: {
+        // 星期几为第一天(0为星期日)
+        weekstart: {
+            type: Number,
+            default: 0
+        },
+        // 标记的日期
+        markDays: {
+            type: Array,
+            default: ()=>{
+                return [];
+            }
+        },
+        //是否展示月份切换按钮
+        headerBar:{
+            type: Boolean,
+            default: true
+        },
+        // 是否展开
+        open: {
+            type: Boolean,
+            default: true
+        },
+        //是否可收缩
+        collapsible:{
+            type: Boolean,
+            default: true
+        },
+        //未来日期是否不可点击
+        disabledAfter: {
+            type: Boolean,
+            default: false
+        }
+    },
+    data() {
+        return {
+            weektext: ['日', '一', '二', '三', '四', '五', '六'],
+            y: new Date().getFullYear(), // 年
+            m: new Date().getMonth() + 1, // 月
+            dates: [], // 当前月的日期数据
+            positionTop: 0,
+            monthOpen: true,
+            choose: ''
+        };
+    },
+    created() {
+        this.dates = this.monthDay(this.y, this.m);
+        !this.open && this.toggle();
+    },
+    mounted() {
+        this.choose = this.getToday().date;
+    },
+    computed: {
+        // 顶部星期栏
+        weekDay() {
+            return this.weektext.slice(this.weekstart).concat(this.weektext.slice(0, this.weekstart));
+        },
+        height() {
+            return (this.dates.length / 7) * 80 + 'rpx';
+        }
+    },
+    methods: {
+        formatNum(num) {
+            let res = Number(num);
+            return res < 10 ? '0' + res : res;
+        },
+        getToday() {
+            let date = new Date();
+            let y = date.getFullYear();
+            let m = date.getMonth();
+            let d = date.getDate();
+            let week = new Date().getDay();
+            let weekText = ['日', '一', '二', '三', '四', '五', '六'];
+            let formatWeek = '星期' + weekText[week];
+            let today = {
+                date: y + '-' + this.formatNum(m + 1) + '-' + this.formatNum(d),
+                week: formatWeek
+            };
+            return today;
+        },
+        // 获取当前月份数据
+        monthDay(y, month) {
+            let dates = [];
+            let m = Number(month);
+            let firstDayOfMonth = new Date(y, m - 1, 1).getDay(); // 当月第一天星期几
+            let lastDateOfMonth = new Date(y, m, 0).getDate(); // 当月最后一天
+            let lastDayOfLastMonth = new Date(y, m - 2, 0).getDate(); // 上一月的最后一天
+            let weekstart = this.weekstart == 7 ? 0 : this.weekstart;
+            let startDay = (() => {
+                // 周初有几天是上个月的
+                if (firstDayOfMonth == weekstart) {
+                    return 0;
+                } else if (firstDayOfMonth > weekstart) {
+                    return firstDayOfMonth - weekstart;
+                } else {
+                    return 7 - weekstart + firstDayOfMonth;
+                }
+            })();
+            let endDay = 7 - ((startDay + lastDateOfMonth) % 7); // 结束还有几天是下个月的
+            for (let i = 1; i <= startDay; i++) {
+                dates.push({
+                    date: this.formatNum(lastDayOfLastMonth - startDay + i),
+                    day: weekstart + i - 1 || 7,
+                    month: m - 1 >= 0 ? this.formatNum(m - 1) : 12,
+                    year: m - 1 >= 0 ? y : y - 1
+                });
+            }
+            for (let j = 1; j <= lastDateOfMonth; j++) {
+                dates.push({
+                    date: this.formatNum(j),
+                    day: (j % 7) + firstDayOfMonth - 1 || 7,
+                    month: this.formatNum(m),
+                    year: y,
+                    isCurM: true //是否当前月份
+                });
+            }
+            for (let k = 1; k <= endDay; k++) {
+                dates.push({
+                    date: this.formatNum(k),
+                    day: (lastDateOfMonth + startDay + weekstart + k - 1) % 7 || 7,
+                    month: m + 1 <= 11 ? this.formatNum(m + 1) : 0,
+                    year: m + 1 <= 11 ? y : y + 1
+                });
+            }
+            // console.log(dates);
+            return dates;
+        },
+        isWorkDay(y, m, d) {
+            //是否工作日
+            let ymd = `${y}/${m}/${d}`;
+            let formatDY = new Date(ymd.replace(/-/g, '/'));
+            let week = formatDY.getDay();
+            if (week == 0 || week == 6) {
+                return false;
+            } else {
+                return true;
+            }
+        },
+        isFutureDay(y, m, d) {
+            //是否未来日期
+            let ymd = `${y}/${m}/${d}`;
+            let formatDY = new Date(ymd.replace(/-/g, '/'));
+            let showTime = formatDY.getTime();
+            let curTime = new Date().getTime();
+            if (showTime > curTime) {
+                return true;
+            } else {
+                return false;
+            }
+        },
+        // 标记日期
+        isMarkDay(y, m, d) {
+            let flag = false;
+            for (let i = 0; i < this.markDays.length; i++) {
+                let dy = `${y}-${m}-${d}`;
+                if (this.markDays[i] == dy) {
+                    flag = true;
+                    break;
+                }
+            }
+            return flag;
+        },
+        isToday(y, m, d) {
+            let checkD = y + '-' + m + '-' + d;
+            let today = this.getToday().date;
+            if (checkD == today) {
+                return true;
+            } else {
+                return false;
+            }
+        },
+        // 展开收起
+        toggle() {
+            this.monthOpen = !this.monthOpen;
+            if (this.monthOpen) {
+                this.positionTop = 0;
+            } else {
+                let index = -1;
+                this.dates.forEach((i, x) => {
+                    this.isToday(i.year, i.month, i.date) && (index = x);
+                });
+                this.positionTop = -((Math.ceil((index + 1) / 7) || 1) - 1) * 80;
+            }
+        },
+        // 点击回调
+        selectOne(i, event) {
+            let date = `${i.year}-${i.month}-${i.date}`;
+            let selectD = new Date(date).getTime();
+            let curTime = new Date().getTime();
+            let week = new Date(date).getDay();
+            let weekText = ['日', '一', '二', '三', '四', '五', '六'];
+            let formatWeek = '星期' + weekText[week];
+            let response = {
+                date: date,
+                week: formatWeek
+            };
+            if (!i.isCurM) {
+                // console.log('不在当前月范围内');
+                return false;
+            }
+            if (selectD > curTime) {
+                if (this.disabledAfter) {
+                    console.log('未来日期不可选');
+                    return false;
+                } else {
+                    this.choose = date;
+                    this.$emit('onDayClick', response);
+                }
+            } else {
+                this.choose = date;
+                this.$emit('onDayClick', response);
+            }
+            console.log(response);
+        },
+        //改变年月
+        changYearMonth(y, m) {
+            this.dates = this.monthDay(y, m);
+            this.y = y;
+            this.m = m;
+        },
+        changeMonth(type){
+            if(type=='pre'){
+               if (this.m + 1 == 2) {
+                   this.m = 12;
+                   this.y = this.y - 1;
+               } else {
+                   this.m = this.m - 1;
+               } 
+            }else{
+                if (this.m + 1 == 13) {
+                    this.m = 1;
+                    this.y = this.y + 1;
+                } else {
+                    this.m = this.m + 1;
+                }
+            }
+            this.dates = this.monthDay(this.y, this.m);
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.calendar-wrapper {
+    color: #fff;
+    font-size: 28rpx;
+    text-align: center;
+    background-color: #008FD3;
+    padding-bottom: 10rpx;
+	.left{
+		font-weight: 500;
+		font-size: 28rpx;
+		color: #FFFFFF;
+		text-align: left;
+		padding: 10rpx 36rpx;
+	}
+    .header{
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        height: 88rpx;
+        color: #42464A;
+        font-size: 32rpx;
+        font-weight: bold;
+        border-bottom: 2rpx solid #f2f2f2;
+        .pre,.next{
+              color: #4d7df9;
+              font-size: 28rpx;
+              font-weight: normal;
+              padding: 8rpx 15rpx;
+              border-radius: 10rpx;
+              border: 2rpx solid #dcdfe6;
+        }
+        .pre{
+            margin-right: 30rpx;
+        }
+        .next{
+            margin-left: 30rpx;
+        }
+    }
+
+    .week {
+        display: flex;
+        align-items: center;
+        height: 80rpx;
+        line-height: 80rpx;
+        border-bottom: 1rpx solid rgba(255, 255, 255, 0.2);
+
+        view {
+            flex: 1;
+        }
+    }
+
+    .content {
+        position: relative;
+        overflow: hidden;
+        transition: height 0.4s ease;
+
+        .days {
+            transition: top 0.3s;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            position: relative;
+
+            .item {
+                position: relative;
+                display: block;
+                height: 80rpx;
+                line-height: 80rpx;
+                width: calc(100% / 7);
+
+                .day {
+                    font-style: normal;
+                    display: inline-block;
+                    vertical-align: middle;
+                    width: 60rpx;
+                    height: 60rpx;
+                    line-height: 60rpx;
+                    overflow: hidden;
+                    border-radius: 8rpx;
+
+                    &.choose {
+                        background-color: #fff;
+                        color: #008FD3;
+                    }
+
+                    &.nolm {
+                        color: #fff;
+                        opacity: 0.5;
+                    }
+                }
+                .isWorkDay {
+                    color: #fff;
+					font-weight: 600;
+                }
+
+                .notSigned {
+                    font-style: normal;
+                    width: 8rpx;
+                    height: 8rpx;
+                    background: #fa7268;
+                    border-radius: 10rpx;
+                    position: absolute;
+                    left: 50%;
+                    bottom: 0;
+                    pointer-events: none;
+                }
+                .today {
+                    color: #fff;
+                    background-color: #a8c0ff;
+                }
+                .workDay {
+                    font-style: normal;
+                    width: 8rpx;
+                    height: 8rpx;
+                    background: #4d7df9;
+                    border-radius: 10rpx;
+                    position: absolute;
+                    left: 50%;
+                    bottom: 0;
+                    pointer-events: none;
+                }
+                .markDay{
+                    font-style: normal;
+                    width: 8rpx;
+                    height: 8rpx;
+                    background: #fc7a64;
+                    border-radius: 10rpx;
+                    position: absolute;
+                    left: 50%;
+                    bottom: 0;
+                    pointer-events: none;
+                }
+            }
+        }
+    }
+
+    .hide {
+        height: 80rpx !important;
+    }
+
+    .weektoggle {
+        width: 48rpx;
+        height: 48rpx;
+        position: relative;
+        // bottom: -42rpx;
+        &.down {
+            transform: rotate(180deg);
+            bottom: 0;
+        }
+    }
+}
+</style>

+ 487 - 0
components/sapling-vue-scale/sapling-vue-scale.vue

@@ -0,0 +1,487 @@
+
+<template>
+  <div>
+    <!-- 横向 -->
+    <view class='wrapper horizontal-box' id='scale-wrapper' :style="{background: stylesObj.bgoutside}" v-if="direction=== 'horizontal'">
+      <view class='scale-mask' v-if="!scroll"/>
+      <!-- 选中的横条  -->
+      <view class='zz' :style="{backgroundColor: stylesObj.lineSelect}"/>
+      <scroll-view
+        class='scroll-view'
+        :scroll-x="true"
+        :scroll-left="centerNum"
+        :scroll-with-animation="true"
+        @scroll="bindscroll"
+        :show-scrollbar="false"
+        :enhanced="true"
+      >
+
+        <view class='scroll-wrapper'>
+          <!-- 左补白 -->
+          <view class='seat' :style="{width: windowWidth/2 + 'px'}"/>
+
+          <!-- 标尺容器 -->
+          <view  class='scale-container'>
+            <view class='scale-wrapper'>
+              <view class='scale-grip'
+                    v-for="(item, index) in grid"
+                    :key="index"
+                    :style="{height:h + 'px', borderColor: stylesObj.line }">
+                <view class='scale-grip-item'
+                      v-for="(it, idx) in 10"
+                      :key="idx"
+                      :style="{width: single + 'px', height: idx===4?'80':'60' + '%', borderColor: stylesObj.line}"
+                />
+              </view>
+            </view>
+            <!-- 标尺数显示,长度:每格长度*个数 -->
+            <view class='scale-vaule-wrapper' :style="{width: single*10*grid + 'px', color: stylesObj.fontColor, fontSize: stylesObj.fontSize + 'px'}">
+              <view class='scale-value first-scale-value' :style="{width: single*10 + 'px'}">{{min}}</view>
+              <view v-if="int" style="display: flex;">
+                <view
+                  class='scale-vaule'
+                  v-for="(item, index) in grid"
+                  :key="index"
+                  :style="{width:single*10 + 'px'}">{{min+10*(index+1)}}
+                </view>
+              </view>
+              <view v-else style="display: flex;">
+                <view
+                  class='scale-vaule'
+                  v-for="(it, index) in grid"
+                  :key="index"
+                  :style="{width: single*10 + 'px'}">{{min+(index+1)}}
+                </view>
+              </view>
+            </view>
+          </view>
+
+          <!-- 右补白 -->
+          <view class='seat' :style="{width: windowWidth/2 + 'px'}"/>
+        </view>
+      </scroll-view>
+    </view>
+
+    <!-- 竖向 -->
+    <view class='wrapper vertical-box' id='scale-wrapper' :style="{background: stylesObj.bgoutside}" v-else-if="direction === 'vertical'">
+      <view class='scale-mask' v-if="!scroll"/>
+      <view class='zz' :style="{backgroundColor: stylesObj.lineSelect}"/>
+      <scroll-view
+        class='scroll-view'
+        style="height: 600rpx;"
+        :scroll-y="true"
+        :scroll-top="centerNum"
+        :scroll-with-animation='true'
+        @scroll="bindscroll"
+        :show-scrollbar="false"
+        :enhanced="true">
+
+        <view class='scroll-wrapper'>
+          <!-- 左补白 -->
+          <view class='seat' :style="{height: windowHeight/2 - single*10/2 + 'px'}"/>
+
+          <!-- 标尺容器 -->
+          <view  class='scale-container'>
+            <view class='scale-wrapper' :style="{height: single*10*grid + 'px', paddingTop: single*10/2 + 'px'}">
+              <view class='scale-grip'
+                    v-for="(item, index) in grid"
+                    :key="index"
+                    :style="{borderColor: stylesObj.line}">
+                <view class='scale-grip-item'
+                      v-for="(it, idx) in 10"
+                      :key="idx"
+                      :style="{height: single + 'px', width: (idx==4||idx==9) ? '80':'60' + '%', borderColor: stylesObj.line}"
+                />
+              </view>
+            </view>
+            <!-- 标尺数显示,长度:每格长度*个数 -->
+            <view class='scale-vaule-wrapper'
+                  :style="{height: single*10*(grid+1) + 'px', color: stylesObj.fontColor, fontSize: stylesObj.fontSize + 'px'}">
+              <view class='scale-value' :style="{height: single*10 + 'px', lineHeight: single*10 + 'px'}">{{min}}</view>
+              <view v-if="int">
+                <view class='scale-vaule'
+                      v-for="(item, index) in grid"
+                      :key="index"
+                      :style="{height: single*10 + 'px', lineHeight: single*10 + 'px'}">{{min+10*(index+1)}}
+                </view>
+              </view>
+              <view v-else>
+                <view class='scale-vaule'
+                      v-for="(it, index) in grid"
+                      :key="index"
+                      :style="{height: single*10 + 'px', lineHeight: single*10 + 'px'}">{{min+(index+1)}}
+                </view>
+              </view>
+            </view>
+          </view>
+
+          <!-- 右补白 -->
+          <view class='seat' :style="{height: windowHeight/2 - single*10/2 + 'px'}"/>
+        </view>
+      </scroll-view>
+    </view>
+  </div>
+</template>
+
+<script>
+/**
+ min[number] 默认值 0, // 最小值
+ max[number] 默认值 100, // 最大值
+ int[boolean] 默认值 true, // 是否开启整数模式 ,false为小数模式  true 整数模式
+ single[number] 默认值 10, // 单个格子的实际长度(单位rpx)
+ h[number] 默认值 0,// 自定义高度 初始值为80
+ active[null] 默认值 center ,// 自定义选中位置  (三个值 min, max ,center , 范围内合法数值)
+ styles[object]  // 自定义卡尺样式
+ */
+
+export default {
+  name: '',
+  components: {},
+  props: {
+    // 最小值
+    min: {
+      type: Number,
+      default: 0,
+    },
+    // 最大值
+    max: {
+      type: Number,
+      default: 100,
+    },
+    // 是否开启整数模式
+    int: {
+      type: Boolean,
+      default: false,
+    },
+    // 每个格子的实际行度 (单位px ,相对默认值)
+    single: {
+      type: Number,
+      default: 10,
+    },
+    // 高度
+    h: {
+      type: Number,
+      default: 80,
+    },
+    // 是否禁止滚动
+    scroll: {
+      type: Boolean,
+      default: true,
+    },
+    // 方向
+    direction: {
+      type: String,
+      default: 'horizontal',
+    },
+    // 当前选中
+    active: {
+      type: null,
+      default: '0',
+    },
+    styles: {
+      type: Object,
+      default: () => {},
+    },
+
+  },
+  data() {
+    return {
+      defaultStyles: {
+        line: '#CCCCCC', // 刻度颜色
+        bginner: '#fbfbfb', // 前景色颜色
+        bgoutside: '#dbdbdb', // 背景色颜色
+        lineSelect: '#FF5030', // 选中线颜色
+        fontColor: '#404040', // 刻度数字颜色
+        fontSize: 16, // 字体大小
+      },
+      rul: {},
+      windowHeight: 0,
+      windowWidth: '',
+      horizontalTime: null,
+      verticalTime: null,
+      grid: '',
+      centerNum: '',
+      stylesObj: {},
+    };
+  },
+  computed: {},
+  watch: {},
+  onReady() {
+    const min = parseInt(this.min, 10) || 0;
+    const max = parseInt(this.max, 10) || 100;
+    this.min = min;
+    this.max = max;
+    this.init();
+  },
+  created() {
+  },
+  mounted() {
+  },
+  methods: {
+    // 初始化
+    init() {
+      // 设置默认值
+      const min = this.min || 0;
+      const max = this.max || 0;
+      /**
+       * grid 外层的刻度尺,里面有10个小刻度尺(10个小刻度尺直接拿10遍历出来)
+       * 整数:
+       *  需要除以10,此时里面的一个小刻度尺代表1
+       *  例如:30-80 此时需要5个外层刻度尺。
+       * 小数:
+       *  不需要除以10,此时里面的一个小刻度尺代表0.1
+       *  例如:30-80 此时需要50个外层刻度尺。
+       *
+       */
+      let grid;
+      if (this.int) {
+        grid = (max - min) / 10;
+      } else {
+        grid = (max - min);
+      }
+      this.stylesObj = Object.assign(this.defaultStyles, this.styles);
+      this.grid = grid;
+
+      // 当前选中的 active
+      let activeVal = this.selectActiveVal();
+      if (activeVal < min || activeVal > max) { // 默认数字不合理
+        activeVal = (min + max) / 2;
+      }
+      if (this.int) {
+        let diff = (activeVal - min) / 10; // 移动diff格
+        /* eslint-disable-next-line */
+        if (diff < 0 || isNaN(diff) || !diff) diff = 0;
+        // this.single 每个小格子长度
+        const centerNum = diff * this.single * 10;
+        setTimeout(() => { this.centerNum = centerNum; }, 200);
+      } else {
+        const diff1 = (activeVal - min) * 10; // 移动diff格
+        const centerNum = diff1 * this.single;
+        setTimeout(() => { this.centerNum = centerNum; }, 200);
+      }
+      //  获取节点信息,获取节点宽度
+      const query = this.createSelectorQuery().in(this);
+      query.select('#scale-wrapper').boundingClientRect(() => {
+        // res.top; // 这个组件内 #the-id 节点的上边界坐标
+      }).exec((e) => {
+        this.windowWidth = e[0].width;
+        this.windowHeight = e[0].height;
+      });
+    },
+    // 给定的选中默认值
+    selectActiveVal() {
+      // 当前选中位置设置
+      let activeVal;
+      if (this.active === 'min') {
+        activeVal = this.min;
+      } else if (this.active === 'max') {
+        activeVal = this.max;
+      } else if (this.active === 'center') {
+        activeVal = (this.min + this.max) / 2;
+      } else {
+        activeVal = this.active ? this.active : this.min;
+      }
+      return activeVal;
+    },
+    // 滚动
+    bindscroll(e) {
+      // 移动的距离
+      let offset = 0;
+      if (this.direction === 'vertical') {
+        offset = e.detail.scrollTop;
+      } else {
+        offset = e.detail.scrollLeft;
+      }
+      // 选中的值
+      let value;
+      if (this.int) {
+        value = this.min + (offset / this.single);
+        value = Math.round(value);
+        if (value > this.max) value = this.max;
+        this.$emit('value', value);
+        const centerNum = (value - this.min) * this.single + Math.random() ** 10;
+        clearTimeout(this.horizontalTime);
+        this.horizontalTime = setTimeout(() => {
+          this.centerNum = centerNum;
+          this.$emit('value', value);
+        }, 100);
+      } else {
+        value = this.min + ((offset / this.single) / 10);
+        value = value.toFixed(1);
+        if (value > this.max) value = this.max;
+        this.$emit('value', value);
+        const centerNum = (value - this.min) * this.single * 10 + Math.random() ** 10;
+        clearTimeout(this.verticalTime);
+        this.verticalTime = setTimeout(() => {
+          this.centerNum = centerNum;
+          this.$emit('value', value);
+        }, 100);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+  view,text {
+    box-sizing: border-box;
+  }
+  .wrapper {
+    position: relative;
+  }
+  .scale-mask {
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 100;
+  }
+  .horizontal-box {
+    // padding-top: 7%;
+    .scroll-wrapper {
+      position: relative;
+      display: flex;
+    }
+    .zz {
+      position: absolute;
+      left: 50%;
+      top: 0;
+      transform: translate(-50%);
+      height: 100%;
+      width: 2rpx;
+      background-color: #FF5030;
+      z-index: 10;
+	  &::before{
+	  		  display:block;
+	  		     content:'';
+	  		     border-width:16rpx 16rpx 16rpx 16rpx;
+	  		     border-style:solid;
+	  		     border-color:#FF5030 transparent transparent transparent;
+	  		  
+	  		     /* 定位 */
+	  		     position:absolute;
+	  		    left: -16rpx;
+	  		    top: 0;
+	  }
+    }
+    .scale-wrapper {
+      display: flex;
+      border-top: 1px solid #dddddd;
+    }
+    .scale-grip {
+      position: relative;
+      height: 100rpx;
+      display: flex;
+      &::before {
+        content: "";
+        position: absolute;
+        top: 0;
+        border-width: 1px;
+        border-color: inherit;
+        border-style: solid;
+        height: 100%;
+        transform: translateX(-50%);
+        left: 0rpx;
+      }
+      &:last-child {
+        &::after {
+          content: "";
+          position: absolute;
+          top: 0;
+          right: 0;
+          border-width: 1px;
+          border-color: inherit;
+          border-style: solid;
+          height: 100%;
+        }
+      }
+    }
+    .scale-grip-item {
+      height: 60%;
+      padding-top: 10rpx;
+	  &:nth-child(5n){
+		  height: 80%;
+	  }
+      &:not(:last-child) {
+        border-right: 1px solid #000000;
+      }
+    }
+    .scale-vaule-wrapper {
+      position: relative;
+      display: flex;
+      text-align: center;
+    }
+    .scale-vaule {
+      padding: 30rpx 0;
+      transform: translateX(50%);
+    }
+    .first-scale-value {
+      position: absolute;
+      left: 0;
+      bottom: 0;
+      padding: 20rpx 0;
+      transform: translateX(-50%);
+    }
+    .seat {
+      flex-shrink: 0;
+      box-sizing: border-box;
+      border-top: 1px solid #ddd;
+    }
+  }
+  /* .scale-container{
+    display: flex;
+  } */
+  .vertical-box {
+    height: 100%;
+    .scroll-wrapper {
+      position: relative;
+    }
+    .scroll-view {
+      height: 100%;
+    }
+    .zz {
+      position: absolute;
+      top: 50%;
+      left: 0;
+      transform: translate(-50%);
+      width: 40%;
+      height: 2px;
+      background-color: #FF5030;
+      z-index: 10;
+    }
+    .scale-container {
+      display: flex;
+      width: 100%;
+    }
+    .scale-wrapper {
+      flex: 1;
+    }
+    .scale-grip {
+      position: relative;
+      border-left: 1px solid #000000;
+      &:first-child {
+        &::before {
+          content: "";
+          position: absolute;
+          top: 0;
+          left: 0;
+          width: 80%;
+          height: 0;
+          border-top: 1px solid #dbdbdb;
+        }
+      }
+    }
+    .scale-grip-item {
+      height: 60%;
+      padding-top: 10rpx;
+      border-bottom: 1px solid #000000;
+    }
+    .scale-vaule-wrapper {
+      position: relative;
+      text-align: left;
+      flex: 1;
+    }
+    .scale-vaule {
+    }
+  }
+
+</style>

+ 361 - 0
components/w-drag-sorts/w-drag-sorts.vue

@@ -0,0 +1,361 @@
+<template>
+  <scroll-view scroll-y :show-scrollbar="showScrollBar" class="w-drag-sorts-scroll" :style="{height: scrollBoxPxHeight+'px'}">
+    <view class="w-drag-sorts" :style="{height: boxHeight+'px'}" :class="{'inited':inited}">
+      <view class="w-drag-sorts-item" v-for="(vo,i) in newList" :key="i"
+        :style="{'top': vo.__top + 'px', ...finallyItemStyles}"
+        :class="{'draging':currentIndex == i}" @longpress="onRemove(i)" @click="navTo(i)">
+		<view class="align-center">
+			<view class="ctrl"
+			  v-if="showDragCtrl"
+			  @touchmove.stop.prevent 
+			  @touchstart="onTouchstart($event, i)"
+			  @touchmove="onTouchmove" 
+			  @touchend="onTouchend" 
+			>
+			  <!-- <image class="icon" :src="ctrlIcon" /> -->
+			  <image class="w32 h32" src="@/static/images/user/drag_icon.png"></image>
+			</view>
+			<view class="text">
+			  {{vo.indicatorName}}
+			</view>
+		</view>
+        <!-- <view class="content2"> -->
+          <view v-if="isRemove==true" class="item-icon" @click.stop="onDisabledClick(i,vo)" >
+            <!-- <image class="icon" :src="vo.icon"/> -->
+          			<image class="w40 h40" src="@/static/images/user/remove_icon.png"></image>
+          </view>
+		  <view v-if="isAdd==true" class="item-icon" @click.stop="onAddClick(i,vo)">
+		    <!-- <image class="icon" :src="vo.icon"/> -->
+		  			<image class="w40 h40" src="@/static/images/user/remove_add_icon.png"></image>
+		  </view>
+      <!--  </view> -->
+       
+      </view>
+    </view>
+  </scroll-view>
+</template>
+
+<script>
+  export default {
+    name: "wDragSorts",
+    props: {
+      //列表数据
+      listData: {
+        type: Array,
+        default: () => []
+      },
+      //列表项高度
+      itemHeight: {
+        type: Number,
+        default: 80
+      },
+      //列表内边距,
+      itemStyles: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      //控制图标
+      ctrlIcon:{
+        type:String,
+        default:'/static/images/user/drag_icon.png'
+      },
+      //是否显示拖动控制器
+      showDragCtrl:{
+        type:Boolean,
+        default: true,
+      },
+      //滚动去高度,如果单位rpx,如果不设置,内容容器高度一致
+      scrollBoxHeight:{
+        type: Number,
+        default:-1
+      },
+	  //是否显示删除图标
+	  isRemove:{
+		  type:Boolean,
+		  default: true,
+	  },
+	  //是否显示新增图标
+	  isAdd:{
+	  		  type:Boolean,
+	  		  default: true,
+	  }
+    },
+    data() {
+      return {
+        newList: [],
+        //当前列表项的下标
+        currentIndex: -1,
+        //记录拖动位置
+        moveY: 0,
+        //拖动状态
+        draging: false,
+        //初始化完成
+        inited:false,
+      }
+    },
+    computed:{
+      itemPxHeight(){
+        return uni.rpx2px(this.itemHeight);
+      },
+      boxHeight(){
+        return this.itemPxHeight * this.listData.length;
+      },
+      finallyItemStyles(){
+        return { ...(this.itemStyles || {}), height: this.itemHeight+'rpx'}
+      },
+      scrollBoxPxHeight(){
+        if( this.scrollBoxHeight < 0 ){
+          return this.boxHeight
+        }else{
+          let _height = uni.rpx2px(this.scrollBoxHeight);
+          if( _height > this.boxHeight ){
+            _height = this.boxHeight
+          }
+          return _height;
+        }
+      },
+      showScrollBar(){
+        return (this.boxHeight - this.scrollBoxPxHeight) > 10;
+      }
+    },
+    watch:{
+      showScrollBar:{
+        handler(v){
+          console.log(v)
+        },
+        immediate:true
+      },
+	  listData:{
+	    handler(v){
+	      this.listData=v
+		  this.init()
+	    },
+	    immediate:true
+	  }
+    },
+    created() {
+    },
+	mounted() {
+	   
+	},
+    methods: {
+      init() {
+        this.inited = false;
+        this.newList = this.listData.map(vo => {
+          return {
+            ...vo,
+            __top: 0,
+            __height: 0,
+            __otop: 0
+          }
+        });
+ // console.log(this.listData,'888')
+        // #ifdef MP-WEIXIN 
+        const selector = uni.createSelectorQuery().in(this);
+        // #endif
+        // #ifndef MP-WEIXIN 
+        const selector = uni.createSelectorQuery();
+        // #endif
+
+        this.$nextTick(() => {
+          selector.selectAll('.w-drag-sorts-item').fields({
+            rect: true,
+            size: true,
+          }, nodeItem => {
+            nodeItem.forEach((item, index) => {
+              const top = item.height * index;
+              this.$set(this.newList, index, {
+                ...this.newList[index],
+                __height: item.height,
+                __top: top,
+                __otop: top
+              });
+            });
+            this.inited = true;
+          }).exec(); 
+        });
+        
+      },
+      
+      onTouchstart(e, i) {
+        const pageY = e.touches[0]?.pageY || 0;
+        // 记录当前拖动元素的下标
+        this.currentIndex = i;
+        // 记录拖动前的位置
+        this.moveY = pageY
+      },
+
+      onTouchmove(e) {
+        const pageY = e.touches[0]?.pageY || 0;
+
+        const index = this.currentIndex;
+
+        //列表项替换的阈值,如果移动的位置大于上下项的一半就执行位置占位操作
+        const currentItem = this.newList[index];
+        const changeVar = currentItem?.__height / 2;
+
+        //判断上下移动的边界
+        let newTop = this.newList[index].__top + (pageY - this.moveY);
+        const max = currentItem?.__height * (this.newList.length - 1);
+        if (newTop < 0) {
+          newTop = 0;
+        }
+        if (newTop > max) {
+          newTop = max;
+        }
+
+        // 设置被拖动项最新的位置
+        this.newList[index].__top = newTop;
+
+        // 记录位置
+        this.moveY = pageY;
+        
+        // 向下拖动
+        if (currentItem.__top >= this.newList[index + 1]?.__top - changeVar) {
+          this.moveChange(1);
+        }
+        // 向上拖动
+        if (currentItem.__top <= this.newList[index - 1]?.__top + changeVar) {
+          this.moveChange(-1);
+        }
+
+      },
+
+      moveChange(addValue) {
+        const index = this.currentIndex;
+        if (this.draging) {
+          return
+        }
+        this.draging = true
+        let currentItem = this.newList[index];
+        const newIndex = index + addValue;
+        //取出被替换项的位置,等交换完位置之后,给当前列表项
+        const changeItemOTop = this.newList[newIndex].__otop;
+        //交换位置
+        this.newList[index] = this.newList[newIndex];
+        this.newList[newIndex] = currentItem;
+        //把当前项的位置给被替换的列表项
+        this.newList[index].__top = currentItem.__otop;
+        this.newList[index].__otop = currentItem.__otop;
+        //由于当前列表项的top一直在改变,所以这里只需要把被替换列表项的原有位置给当前列表项
+        //等到停止拖动再把这个被替换项的位置赋给当前项的top
+        this.newList[newIndex].__otop = changeItemOTop;
+
+        this.currentIndex = newIndex;
+        this.draging = false;
+      },
+
+      onTouchend(e) {
+        const index = this.currentIndex;
+        this.newList[index].__top = this.newList[index].__otop;
+        this.currentIndex = -1;
+        const returnData = this.getReturnData();
+        this.$emit('draged', [...returnData]);
+      },
+      
+      //返回移除操作附加属性的列表数据
+      getReturnData(){
+        const tmp = JSON.parse(JSON.stringify(this.newList));
+        tmp.map(vo => {
+          for (let key in vo) {
+            if (key.indexOf('__') == 0) {
+              delete vo[key];
+            }
+          }
+        })
+        return tmp;
+      },
+	  navTo(i){
+		  const item = this.getReturnData()[i]
+		  this.$emit("navClick",i, item);
+	  },
+      //长按删除
+      onRemove( i ){
+		  console.log(i,'1')
+        const item = this.getReturnData()[i]
+        this.$emit("itemRemoveClick",i, item);
+      },
+      //禁用
+      onDisabledClick( i ){
+        const item = this.getReturnData()[i]
+        this.$emit("itemDisabledClick",i, item);
+      },
+	  //启用
+	  onAddClick( i ){
+	    const item = this.getReturnData()[i]
+	    this.$emit("itemAddClick",i, item);
+	  },
+ //列表项图标点击事件点击
+ onItemIconClick( i ){
+   const item = this.getReturnData()[i]
+   this.$emit("itemIconClick",i, item);
+ },
+  
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  @mixin iconSize {
+    width: 48rpx;
+    height: 48rpx;
+  }
+
+  .w-drag-sorts {
+    width: 100%;
+    position: relative;
+    z-index: 1;
+    height: auto;
+
+    .icon {
+      @include iconSize();
+    }
+    
+    &.inited>&-item{
+      position: absolute;
+    }
+
+    &-item {
+      width: 100%;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      box-sizing: border-box;
+      background-color: #fff;
+      padding: 0 30rpx;
+      border-bottom: 0 !important;
+
+      &.draging {
+        box-shadow: 0 0px 30rpx #ddd;
+        z-index: 1;
+      }
+   .text{
+   	 margin-left: 20rpx;
+	 font-family: PingFang SC, PingFang SC;
+	 font-weight: 400;
+	 font-size: 32rpx;
+	 color: #222426;
+	 text-align: left;
+   }
+   .item-icon{
+     @include iconSize();
+    
+   }
+    //   .content2 {
+		  // flex:1;
+    //     height: 100%;
+    //     display: flex;
+    //     align-items: center;
+        
+    //   }
+
+      .ctrl {
+        width: 32rpx;
+		height: 32rpx;
+      }
+
+    }
+  }
+</style>

+ 325 - 0
components/z-modal/z-modal.vue

@@ -0,0 +1,325 @@
+<template>
+	<view>
+		<view class="mask" :style="{'opacity':show?'1':'0','visibility':show?'visible':'hidden'}"></view>
+		<view class="modal-box" :style="{'display':show?'block':'none','width':modalWidth}">
+			<view class="modal-title" :style="{'padding':titlePadding,'fontSize':titleSize,'color':titleColor}">
+				{{titleText}}
+			</view>
+			<view class="modal-content" v-if="contentType==1" :style="{'fontSize':contentSize,'padding':contentPadding,'color':contentColor}">
+				{{contentText}}
+			</view>
+			<view class="modal-content" v-if="contentType==2" :style="{'padding':contentPadding}">
+				<input :placeholder="placeholderText" v-model="inputText" :maxlength="maxLength" :placeholder-style="placeholderStyleString" :style="{'borderColor':inputBorderColor,'fontSize':contentSize,'color':contentColor}" class="input-area"/>
+			</view>
+			<view class="modal-content" v-if="contentType==3" :style="{'padding':contentPadding}">
+				<textarea :placeholder="placeholderText" v-model="textareaText" :maxlength="maxLength" :placeholder-style="placeholderStyleString" :style="{'borderColor':inputBorderColor,'fontSize':contentSize,'color':contentColor}"/>
+			</view>
+			<view class="model-bottom" :style="{'padding':bottomPadding,'justify-content':btnLength>1?'space-between':'center'}">
+				<block v-for="(item,index) in btnGroup" :key='index'>
+					<view class="modal-btn" :style="{'width':item.width,'height':item.height,'color':item.color,'background-color':item.bgColor,'font-size':bottomFontSize,'border-radius':shapeObj[item.shape]}" @tap="btnClick(index)">
+						{{item.text}}
+					</view>
+				</block>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "z-modal",
+		props: {
+			// **************** 使用配置项 ****************
+			// 文本校验?
+			check:{
+				type:Boolean,
+				default:false
+			},
+			checkItem:{
+				// isRequired-是否必填/ isNumber-是否为纯数字 isChinese-是否为纯中文 isEnglish-是否为纯英文 isEmail-是否为邮箱格式 isIdNum-是否为身份证格式
+				type:Array,
+				default:()=>{
+					return []
+				}
+			},
+			/*
+			支持自定义校验,格式为{
+				key:正则
+			}
+			例如{
+				'isNumber':/^\+?[0-9][0-9]*$/
+			}
+			*/
+			selfCheckItem:{
+				type:Object,
+				default:()=>{
+					return {}
+				}
+			},
+			// 控制modal的显示隐藏
+			show:{
+				type:Boolean,
+				default:false
+			},
+			// 底部按钮组
+			btnGroup: {
+				type: Array,
+				default: () => {
+					return [{
+						text: '取消',
+						color: '#FFFFFF',
+						bgColor: '#999999',
+						width: '220rpx',
+						height: '80rpx',
+						shape: 'circle',
+						eventName: 'cancle'
+					}, {
+						text: '确定',
+						color: '#FFFFFF',
+						bgColor: '#007AFF',
+						width: '220rpx',
+						height: '80rpx',
+						shape: 'circle',
+						eventName: 'sure'
+					}]
+				}
+			},
+			// 文本类型 1-展示文字 2-input 3-textarea
+			contentType:{
+				type:[Number,String],
+				default:1
+			},
+			// contentType为2或3时的字数限制
+			maxLength:{
+				type:Number,
+				default:20
+			},
+			// **************** 尺寸&大小 ****************
+			// modal整体宽度 rpx
+			modalWidth:{
+				type:String,
+				default:'580rpx'
+			},
+			// title区域文字大小
+			titleSize:{
+				type:String,
+				default:'32rpx'
+			},
+			// content区域文字大小
+			contentSize:{
+				type:String,
+				default:'28rpx'
+			},
+			// 底部(按钮)区域的字号
+			bottomFontSize:{
+				type:String,
+				default:'28rpx'
+			},
+			// title(标题) 区域的padding
+			titlePadding:{
+				type:String,
+				default:'20rpx 0'
+			},
+			// content(内容) 区域的padding
+			contentPadding:{
+				type:String,
+				default:'10rpx 40rpx'
+			},
+			// 底部(按钮)区域的padding
+			bottomPadding:{
+				type:String,
+				default:'30rpx 40rpx'
+			},
+			// **************** 颜色 ****************
+			// 标题文字颜色
+			titleColor:{
+				type:String,
+				default:'#333333'
+			},
+			// 内容文字颜色
+			contentColor:{
+				type:String,
+				default:'#333333'
+			},
+			// placeholderColor-提示文字的颜色
+			placeholderColor:{
+				type:String,
+				default:'#999'
+			},
+			inputBorderColor:{
+				type:String,
+				default:'#999'
+			},
+			// **************** 内容 ****************
+			// 标题内容
+			titleText:{
+				type:String,
+				default:'titleText'
+			},
+			// 文本内容
+			contentText:{
+				type:String,
+				default:'Please type in your text'
+			},
+			// input或textarea的placeholder
+			placeholderText:{
+				type:String,
+				default:'请输入你的内容'
+			}
+		},
+		computed:{
+			btnLength(){
+				return this.btnGroup.length
+			},
+			placeholderStyleString(){
+				return `color:${this.placeholderColor};font-size:${this.contentSize}`
+			}
+		},
+		data() {
+			return {
+				// 底部按钮shape对应值
+				shapeObj:{
+					'circle':'1000rpx',
+					'straight':'0',
+					'fillet':'12rpx'
+				},
+				inputText:'',
+				textareaText:'',
+				// ***校验项,是否通过,true-通过,false不通过
+				checkCollection: {
+					isRequired :function(val){
+						return !(val === null || val === '' || val === undefined)
+					},
+					isNumber :function(val){
+						let reg = /^\+?[0-9][0-9]*$/
+						return reg.test(val)
+					},
+					isChinese :function(val){
+						let reg = /^[\u4e00-\u9fa5]+$/
+						return reg.test(val)
+					},
+					isEnglish :function(val){
+						let reg = /^[a-zA-Z]+$/
+						return reg.test(val)
+					},
+					isEmail :function(val){
+						let reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/
+						return reg.test(val)
+					},
+					isIdNum :function(val){
+						let reg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i
+						return reg.test(val)
+					}
+				}
+			};
+		},
+		methods:{
+			btnClick(index){
+				let val = this.contentType==2?this.inputText:this.textareaText
+				if(this.check && this.checkItem.length && this.contentType!=1){
+					let err = false
+					// 进入校验,如果不通过直接返回,通过则吐出按钮事件
+					for(let item of this.checkItem){
+						if(!this.checkCollection[item](val)){
+							this.$emit('error',item)
+							err = true
+							break
+						}
+					}
+					if(err) return
+				}
+				let selfCheckArr = Object.entries(this.selfCheckItem)
+				if(this.check && selfCheckArr.length && this.contentType!=1){
+					let err = false
+					for(let item of selfCheckArr){
+						let reg = new RegExp(item[1])
+						if(!reg.test(val)){
+							this.$emit('error',item[0])
+							err = true
+							break
+						}
+					}
+					if(err) return
+				}
+				this.$emit(this.btnGroup[index]['eventName'],{
+					inputText:this.inputText || '',
+					textareaText:this.textareaText || ''
+				})
+				this.inputText = ''
+				this.textareaText = ''
+			}
+		}
+	}
+</script>
+
+<style>
+	.mask {
+		position: fixed;
+		z-index: 98;
+		background-color: rgba(0, 0, 0, .7);
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		visibility: hidden;
+		opacity: 0;
+		transition: all .3s;
+	}
+
+	.modal-box {
+		background-color: #FFFFFF;
+		position: fixed;
+		z-index: 99;
+		border-radius: 12rpx;
+		left: 50%;
+		top: 50%;
+		transform: translate(-50%, -50%);
+	}
+
+	.modal-title {
+		box-sizing: border-box;
+		color: #333333;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.modal-content {
+		box-sizing: border-box;
+		color: #333333;
+		word-break: break-all;
+		display: flex;
+		justify-content: center;
+	}
+
+	.model-bottom {
+		display: flex;
+		align-items: center;
+	}
+
+	.modal-btn {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+	
+	.input-area{
+		border: 1rpx solid #999;
+		width: 100%;
+		padding:0 16rpx;
+		box-sizing: border-box;
+		height: 60rpx;
+		border-radius: 6rpx;
+		outline: none;
+	}
+	
+	textarea{
+		border: 1rpx solid #999;
+		width: 92%;
+		padding:16rpx;
+		box-sizing: border-box;
+		border-radius: 6rpx;
+		height: 200rpx;
+	}
+
+</style>

+ 24 - 0
main.js

@@ -0,0 +1,24 @@
+import Vue from 'vue'
+import App from './App'
+
+Vue.config.productionTip = false
+
+import uView from '@/uni_modules/uview-ui'
+Vue.use(uView)
+// uni.$u.config.unit = 'rpx'
+  
+import utils from './utils/common.js'
+Vue.prototype.utils = utils;
+ 
+import {setData} from './utils/common.js'
+Vue.prototype.setData = setData;
+
+App.mpType = 'app'
+const app = new Vue({
+    ...App
+})
+app.$mount()
+
+
+ 
+ 

+ 93 - 0
manifest.json

@@ -0,0 +1,93 @@
+{
+    "name" : "壹柒玖康养集团",
+    "appid" : "__UNI__DBD2079",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "wxd56333375d59f1b8",
+        "lazyCodeLoading" : "requiredComponents",
+        "setting" : {
+            "urlCheck" : false,
+            "minified" : true
+        },
+        "optimization" : {
+            "subPackages" : true
+        },
+        "usingComponents" : true,
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "获取位置用于给您推送相关信息"
+            }
+        }
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2",
+    "h5" : {
+        "title" : "壹柒玖康养集团",
+        "devServer" : {
+            "https" : false
+        },
+        "optimization" : {
+            "treeShaking" : {
+                "enable" : true
+            }
+        }
+    }
+}

+ 28 - 0
package-lock.json

@@ -0,0 +1,28 @@
+{
+    "name": "shop",
+    "version": "1.0.0",
+    "lockfileVersion": 1,
+    "requires": true,
+    "dependencies": {
+        "@qiun/ucharts": {
+            "version": "2.5.0-20230101",
+            "resolved": "https://registry.npmjs.org/@qiun/ucharts/-/ucharts-2.5.0-20230101.tgz",
+            "integrity": "sha512-C7ccBgfPuGF6dxTRuMW0NPPMSCf1k/kh3I9zkRVBc5PaivudX/rPL+jd2Wty6gn5ya5L3Ob+YmYe09V5xw66Cw=="
+        },
+        "animate.css": {
+            "version": "3.7.2",
+            "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-3.7.2.tgz",
+            "integrity": "sha512-0bE8zYo7C0KvgOYrSVfrzkbYk6IOTVPNqkiHg2cbyF4Pq/PXzilz4BRWA3hwEUBoMp5VBgrC29lQIZyhRWdBTw=="
+        },
+        "dayjs": {
+            "version": "1.11.13",
+            "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+            "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
+        },
+        "uview-ui": {
+            "version": "2.0.36",
+            "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.36.tgz",
+            "integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA=="
+        }
+    }
+}

+ 11 - 0
package.json

@@ -0,0 +1,11 @@
+{
+    "name": "shop",
+    "version": "1.0.0",
+    "description": "",
+    "keywords": [],
+    "dependencies": {
+        "animate.css": "^3.7.2",
+        "dayjs": "^1.11.13",
+        "uview-ui": "^2.0.36"
+    }
+}

+ 1705 - 0
pages.json

@@ -0,0 +1,1705 @@
+{
+	"easycom": {
+		"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+	 },
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/common/launch"
+		},
+		{
+			"path": "pages/auth/login",
+			"style": {
+				"navigationBarTitleText": "授权登录",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path": "pages/auth/wxLogin",
+			"style": {
+				"navigationBarTitleText": "公众号授权",
+				"navigationStyle": "custom"
+			}
+			
+		},
+		{
+			"path": "pages/home/index",
+			"style": {
+				"navigationBarTitleText": "壹柒玖康养集团",
+                "enablePullDownRefresh": false,
+                "navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+            "path" : "pages/home/doctorCase",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "问诊案例",
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+            
+        },
+		{
+            "path" : "pages/home/productSearch",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商品搜索",
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+            
+        },
+		{
+            "path" : "pages/home/productList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商品列表",
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+        },
+		{
+            "path" : "pages/healthy/index",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "健康知识",
+                "enablePullDownRefresh": false,
+                "navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+            
+        },
+		{
+            "path" : "pages/healthy/detail",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "",
+                "enablePullDownRefresh": false,
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+        },
+		{
+            "path" : "pages/healthy/readUsers",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "阅读用户",
+                "enablePullDownRefresh": false,
+				"app-plus": {
+					"titleNView": false
+				}
+            }
+        },
+		{
+            "path" : "pages/shopping/index",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商城",
+                "navigationStyle": "custom",
+                "enablePullDownRefresh": false
+            }
+            
+        },
+		{
+			"path": "pages/user/index",
+			"style": {
+				"navigationBarTitleText": "我的",
+                "navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		}
+        ,{
+            "path" : "pages/shopping/productDetails",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "商品详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/shopping/cart",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "购物车",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/shopping/productList",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "药品列表",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/shopping/confirmOrder",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "确认订单",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/shopping/paymentOrder",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "支付订单",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/shopping/payOrder",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "推荐订单支付",
+		        "enablePullDownRefresh": false
+		    }
+		}
+        ,{
+            "path" : "pages/shopping/prescribe",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "填写处方信息",
+				"navigationStyle": "custom",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+		,{
+		    "path" : "pages/shopping/success",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "支付成功",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/home/content",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "详情",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/home/web",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "详情",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/home/cert",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "资质证明",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/shopping/confirmPackageOrder",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "确认支付",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		}
+		,{
+		    "path" : "pages/shopping/confirmCreateOrder",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "确认订单",
+		        "enablePullDownRefresh": false
+		    }
+		    
+		},
+		{
+		    "path" : "pages/user/test",
+		    "style" :                                                                                    
+		    {
+		        "navigationBarTitleText": "测一测",
+				"app-plus": {
+					"titleNView": false
+				}
+		    }
+		},
+		{
+		    "path" : "pages/doctor/doctorQr",
+		    "style" :
+		    {
+		       "navigationBarTitleText": "用药咨询",
+				"app-plus": {
+					"titleNView": false
+				}
+		    }
+		}
+		
+    ],
+	"subPackages": [
+		
+		{
+			"root": "pages_index",
+			"pages": [
+				{
+				    "path" : "index/medicatedFoodList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "药膳食疗",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/medicatedFoodDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "药膳食疗",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				
+				{
+				    "path" : "index/vesselList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "经络穴位",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/vesselDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "经络穴位",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/questionsList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "问答专区",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/questionsDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "问答专区",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/diseaseList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "疾病列表",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/diseaseDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "疾病",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				
+				{
+				    "path" : "index/chineseMedicineList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "中药图解",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/chineseMedicineDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "中药图解",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				
+				{
+				    "path" : "index/famousPrescribeList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "名方今用",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/famousPrescribeDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "名方今用",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				
+					
+				{
+				    "path" : "index/test",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "测一测",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/testList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "测一测",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/testDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "测一测",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/testResult",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "测试结果",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/articleList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "健康知识",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/articleDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "文章详情",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				
+				{
+				    "path" : "index/doctorArticleList",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "康复医案",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "index/doctorArticleDetails",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "康复医案",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				}
+			]
+		},
+		
+		
+		{
+			"root": "pages_user",
+			"pages": [
+				{
+					"path": "user/addPatient",
+					"style": {
+						"navigationBarTitleText": "创建就诊人",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+				,{
+					"path" : "user/message",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "消息",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/msgDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "系统消息",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/storeOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的订单",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/storeOrderDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "订单详情",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/doctorOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "问诊列表",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/patient",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "病人列表",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/addAddress",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "新建收货地址",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/address",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "收货地址",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/integral",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的积分",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/pointsMall",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "积分商城",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrderList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "售后订单",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrderDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "处理进度",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrderLogs",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "退款详情",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/storeOrderDelivery",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "物流信息",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "申请售后",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/prescribeOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "处方单",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/pay",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "收款",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/success",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "支付结果",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrderProduct",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "订单售后",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/refundOrderDelivery",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "物流信息",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTui",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的推广",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiProduct",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "推广商品",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiImg",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "推广海报",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的推荐人",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiMoneyList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "佣金记录",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiOrderList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "订单记录",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/storeProductRelation",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的足迹",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/personInfo",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "个人信息",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiMoney",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "提现管理",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiExtractLog",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "提现记录",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/doc",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "健康档案",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/addDoc",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "创建健康档案",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/docDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "健康档案",
+						"navigationBarBackgroundColor": "#dff9f5",
+						"enablePullDownRefresh": false
+					}
+					
+				},{
+					"path": "user/schedule",
+					"style": {
+						"navigationBarTitleText": "日程",
+						"navigationBarBackgroundColor": "#008FD3",
+				        "navigationBarTextStyle": "white",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "user/addSchedule",
+					"style": {
+						"navigationBarTitleText": "添加日程",
+						"navigationBarBackgroundColor": "#008FD3",
+				        "navigationBarTextStyle": "white",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},{
+					"path" : "user/docRecord",
+					"style":                                                                                  
+					{
+						"navigationBarTitleText": "健康记录",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/addDocRecord",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "添加健康记录",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/userTuiAdd",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "申请推广员",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+				    "path" : "user/paymentOrderRemain",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "支付尾款",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+					"path" : "user/otherPaymentOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "亲友代付",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/otherPaySuccess",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "支付成功",
+						"enablePullDownRefresh": false
+					}
+					
+				}
+				,{
+					"path" : "user/otherPaymentOrderRemain",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "亲友代付尾款",
+						"enablePullDownRefresh": false
+					}
+					
+				},{
+					"path" : "recharge/index",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "充值",
+						"navigationStyle": "custom"
+						
+					}
+					
+				},{
+					"path" : "recharge/detail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "充值详情",
+						"navigationStyle": "custom"
+						
+					}
+					
+				},{
+					"path" : "user/addInformation",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "体检信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				}
+				,{
+					"path" : "user/information",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "体检信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/reportList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "体检报告列表",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/dataAnalysis",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "数据分析",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/batchRecord",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "批量编辑",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/editIndicator",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "编辑指标",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/addIndicator",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "新增指标",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/addResult",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "检查结果",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},
+				{
+					"path" : "user/myFolder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的附件",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/default",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "默认",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				}
+				,{
+					"path" : "user/dietList",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "饮食列表",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path" : "user/dietDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "饮食详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+					
+				},{
+					"path": "user/complaint",
+					"style": {
+						"navigationBarTitleText": "投诉反馈",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+				
+			]
+		},
+		{
+			"root": "pages_company",
+			"pages": [
+				{
+					"path": "auth/login",
+					"style": {
+						"navigationBarTitleText": "销售员登录",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "销售管理首页",
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "clientList",
+					"style": {
+						"navigationBarTitleText": "我的下级",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "todoList",
+					"style": {
+						"navigationBarTitleText": "待办事项",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "todoDetail",
+					"style": {
+						"navigationBarTitleText": "事项详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "complaintList",
+					"style": {
+						"navigationBarTitleText": "投诉列表",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "complaintDetail",
+					"style": {
+						"navigationBarTitleText": "投诉详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "clientDetail",
+					"style": {
+						"navigationBarTitleText": "客户详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "doc",
+					"style": {
+						"navigationBarTitleText": "添加用户信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "addUser",
+					"style": {
+						"navigationBarTitleText": "用户信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "addDoc",
+					"style": {
+						"navigationBarTitleText": "健康档案",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "buyOrder",
+					"style": {
+						"navigationBarTitleText": "购买信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "addServe",
+					"style": {
+						"navigationBarTitleText": "商品信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "addCompetitors",
+					"style": {
+						"navigationBarTitleText": "竟品信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "executionRecord",
+					"style": {
+						"navigationBarTitleText": "执行记录",
+						"navigationBarBackgroundColor": "#008FD3",
+						"navigationBarTextStyle": "white",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "returnRecord",
+					"style": {
+						"navigationBarTitleText": "回访记录",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "testRecord",
+					"style": {
+						"navigationBarTitleText": "测评记录",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "distribution",
+					"style": {
+						"navigationBarTitleText": "扫码申请",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "storeOrder",
+					"style": {
+						"navigationBarTitleText": "订单管理",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+				,{
+					"path" : "storeOrderDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "订单详情",
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path": "storeProductPackage",
+					"style": {
+						"navigationBarTitleText": "商品套餐",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "storeProductPackageDetails",
+					"style": {
+						"navigationBarTitleText": "套餐详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "coupon",
+					"style": {
+						"navigationBarTitleText": "优惠券",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "couponDetails",
+					"style": {
+						"navigationBarTitleText": "优惠券详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/productList",
+					"style": {
+						"navigationBarTitleText": "商品列表",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/productDetails",
+					"style": {
+						"navigationBarTitleText": "商品详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/cart",
+					"style": {
+						"navigationBarTitleText": "购物车",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/confirmOrder",
+					"style": {
+						"navigationBarTitleText": "推荐订单信息",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/confirmCompanyOrder",
+					"style": {
+						"navigationBarTitleText": "推荐订单",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/coupon",
+					"style": {
+						"navigationBarTitleText": "制单优惠券",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "order/productShowDetails",
+					"style": {
+						"navigationBarTitleText": "商品详情",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "alipayImg",
+					"style": {
+						"navigationBarTitleText": "支付宝收款",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "card",
+					"style": {
+						"navigationBarTitleText": "我的名片",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+			]
+		},
+		{
+			"root": "pages_shopping",
+			"pages": [
+				 {
+				 	"path" : "shopping/coupon",
+				 	"style" :                                                                                    
+				 	{
+				 		"navigationBarTitleText": "优惠券",
+				 		"enablePullDownRefresh": false
+				 	}
+				 	
+				 }
+				 ,{
+				 	"path" : "shopping/myCoupon",
+				 	"style" :                                                                                    
+				 	{
+				 		"navigationBarTitleText": "我的优惠券",
+				 		"enablePullDownRefresh": false
+				 	}
+				 	
+				 }
+				 ,{
+				 	"path" : "shopping/activityDetails",
+				 	"style" :                                                                                    
+				 	{
+				 		"navigationBarTitleText": "活动",
+				 		"enablePullDownRefresh": false
+				 	}
+				 	
+				 }
+				 ,{
+				 	"path" : "store/index",
+				 	"style" :                                                                                    
+				 	{
+				 		"navigationBarTitleText": "",
+				 		"enablePullDownRefresh": false,
+						"navigationStyle": "custom"
+				 	}
+				 	
+				 }
+			]
+		},
+		{
+			"root": "pages_doctor",
+			"pages": [
+				 {
+				     "path" : "doctorOrderIM",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "问诊会话",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 },
+				 {
+				     "path" : "paymentOrder",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "支付订单",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 },
+				 {
+				     "path" : "doctorIm",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "问诊会话",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 },
+				 {
+				     "path" : "index",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "问诊",
+				         "navigationStyle": "custom",
+				         "enablePullDownRefresh": false
+				     }
+				 },
+				 {
+				     "path" : "doctorList",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "医生列表",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 },
+				 {
+				     "path" : "doctorDetail",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "医生详情",
+				         "navigationStyle": "custom",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 },
+				 {
+				     "path" : "submitOrder",
+				     "style" :                                                                                    
+				     {
+				         "navigationBarTitleText": "发布问诊",
+				         "enablePullDownRefresh": false
+				     }
+				     
+				 }
+			]
+		},
+		{
+			"root": "pages_health",
+			"pages": [
+				{
+					"path": "healthConsulting",
+					"style": {
+						"navigationBarTitleText": "健康咨询",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "healthfiles",
+					"style": {
+						"navigationBarTitleText": "健康档案",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "ConsultationDetails",
+					"style": {
+						"navigationBarTitleText": "病例描述",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "addDoc",
+					"style": {
+						"navigationBarTitleText": "健康档案",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},{
+					"path": "addUser",
+					"style": {
+						"navigationBarTitleText": "用户信息",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+			]
+		},{
+			"root": "pages_echarts",
+			"pages": [
+				{
+					"path": "bloodSugar",
+					"style": {
+						"navigationBarTitleText": "血糖检测",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "bloodSugarList",
+					"style": {
+						"navigationBarTitleText": "血糖数据",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "bloodSugarDetail",
+					"style": {
+						"navigationBarTitleText": "血糖详情",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "bloodPressure",
+					"style": {
+						"navigationBarTitleText": "血压检测",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "bloodPressureList",
+					"style": {
+						"navigationBarTitleText": "血压数据",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "bloodPressureDetail",
+					"style": {
+						"navigationBarTitleText": "血压详情",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "acid",
+					"style": {
+						"navigationBarTitleText": "尿酸检测",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "acidList",
+					"style": {
+						"navigationBarTitleText": "尿酸数据",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "acidDetail",
+					"style": {
+						"navigationBarTitleText": "尿酸详情",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},{
+					"path": "waistLine",
+					"style": {
+						"navigationBarTitleText": "腰围",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "waistLineList",
+					"style": {
+						"navigationBarTitleText": "腰围数据",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "waistLineDetail",
+					"style": {
+						"navigationBarTitleText": "腰围详情",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "hips",
+					"style": {
+						"navigationBarTitleText": "臀围",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},{
+					"path": "hipsList",
+					"style": {
+						"navigationBarTitleText": "臀围数据",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "hipsDetail",
+					"style": {
+						"navigationBarTitleText": "臀围详情",
+						"enablePullDownRefresh": false,
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				}
+			]
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "壹柒玖康养集团",
+		"navigationBarBackgroundColor": "#FFFFFF",
+		"backgroundColor": "#FFFFFF"
+	},
+	"tabBar": {
+		"color": "#666666",
+		"selectedColor": "#0bb3f2",
+		"borderStyle": "white",
+		"backgroundColor": "#ffffff",
+		"height": "64px",
+		"fontSize":"12px",
+		"iconWidth":"18px",
+		"spacing": "4px",
+		"list": [{
+				"pagePath": "pages/home/index",
+				"iconPath": "/static/tabbar/home.png",
+				"selectedIconPath": "/static/tabbar/home_sel.png",
+				"text": "首页"
+			},
+			{
+				"pagePath": "pages/healthy/index",
+				"iconPath": "/static/tabbar/health.png",
+				"selectedIconPath": "/static/tabbar/health_sel.png",
+				"text": "健康百科"
+			},
+			// {
+			// 	"pagePath": "pages/doctor/index",
+			// 	"iconPath": "/static/tabbar/see_doctor.png",
+			// 	"selectedIconPath": "/static/tabbar/see_doctor_sel.png",
+			// 	"text": "问诊"
+			// },
+			{
+				"pagePath": "pages/shopping/index",
+				"iconPath": "/static/tabbar/shop_mall.png",
+				"selectedIconPath": "/static/tabbar/shop_mall_sel.png",
+				"text": "健康商城"
+			},
+			{
+				"pagePath": "pages/user/index",
+				"iconPath": "/static/tabbar/my.png",
+				"selectedIconPath": "/static/tabbar/my_sel.png",
+				"text": "我的"
+			}
+		]
+	}
+}

+ 386 - 0
pages/auth/login.vue

@@ -0,0 +1,386 @@
+<template>
+  <view class="container">
+    <!-- #ifdef MP-WEIXIN -->
+    <view  class="force-login-wrap">
+      <view class="force-login__content y-f">
+        <open-data class="user-avatar" type="userAvatarUrl"></open-data>
+        <open-data class="user-name" type="userNickName"></open-data>
+        <view class="login-notice">为了提供更优质的服务,请先登录</view>
+		
+		<button
+			class="author-btn"
+			open-type="getPhoneNumber"
+			@getphonenumber="phoneLogin"  >手机号一键登录</button>
+       <button class="close-btn" @tap="back">暂不登录</button>
+		 <view class="tips">
+			 <checkbox  :checked="isAgreement" @click="handleAgreement()" />
+			 <view  @click="handleAgreement()">您同意并接受</view>
+		 	<view class="btn"  @click="openH5('/web/userAgreement')">《用户协议》</view>
+		 	<view class="btn" @click="openH5('/web/privacyPolicy')">《隐私保护》</view>
+		 </view>
+      </view>
+    </view>
+    <!-- #endif -->
+	 
+    
+  </view>
+</template>
+
+<script>
+import { loginByMiniApp,getUserInfo,loginByMp } from '@/api/user'
+export default {
+	data() {
+		return {
+			code:null,
+			isAgreement:false,
+		}
+	},
+	computed: {
+	},
+	onLoad(option) 
+	{
+		// #ifdef MP-WEIXIN
+		uni.$on('refreshLogin', () => {
+			uni.navigateBack({
+				delta:1
+			})
+		})
+		//选获取CODE,防止后请求的时候腾讯服务端未同步报错
+		this.getCode();
+		// #endif
+		
+		// #ifdef H5
+		if (this.checkWeixin()) {
+			this.getWxCode()
+		} else {
+			uni.showToast({
+				icon:'none',
+				title: "请在微信中打开",
+			});
+			//跳转到手机号密码登录
+		}
+		// #endif
+	 
+	},
+	onUnload() {
+	},
+	mounted() {
+    
+	},
+	methods: {
+		checkWeixin(){
+			var ua = window.navigator.userAgent.toLowerCase();
+			if (ua.match(/micromessenger/i) == 'micromessenger') {
+				return true;
+			} else {
+				return false;
+			}
+		},
+		//URL地址是否存在CODE
+		getUrlCode(name) {
+			return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1]
+				.replace(/\+/g, '%20')) || null
+		},
+		//获取微信CODE
+		getWxCode() {
+			//在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头; 
+			//http://shequ.natapp1.cc/#/pages/index/index?deviceId=8
+			var appId="wx40593595e62f61ad";
+			var url="http://h5.yjf.runtzh.com";
+			window.location.href ='https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent(url+"/#/pages/auth/wxLogin") +'&response_type=code&scope=snsapi_userinfo&state=JeffreySu-954&connect_redirect=1#wechat_redirect';
+			//console.log('https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent("http://shequ.natapp1.cc/#/pages/index/index?deviceId="+this.deviceId) +'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect')
+			// redirect_uri是授权成功后,跳转的url地址,微信会帮我们跳转到该链接,并且通过?的形式拼接code
+		},
+		handleAgreement(){
+			this.isAgreement=!this.isAgreement;
+		},
+		openH5(url){
+			var requestPath = uni.getStorageSync('requestPath');
+			uni.setStorageSync('url',requestPath+url);
+			uni.navigateTo({
+				url: '../home/web'
+			})
+		},
+		getCode(){
+			var that=this;
+			this.utils.getProvider()
+			.then(provider => {
+				console.log('当前的环境商',provider)
+				if (!provider) {
+				  reject()
+				}
+				// uni登录
+				uni.login({
+					provider: provider,
+					success: async loginRes => {
+						that.code = loginRes.code
+					}
+				})
+			})
+			.catch(err => {
+				
+			})
+		},
+		// 微信用户手机号登录
+		phoneLogin(e) {
+			var that=this;
+			if(!this.isAgreement){
+				uni.showToast({
+					icon:'none',
+					title: "请先同意协议后再登录",
+				});
+				return false;
+			}
+			uni.showLoading({
+				title:"处理中..."
+			})
+			console.log(e,"e")
+			if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
+				this.utils.getProvider()
+				.then(provider => {
+					console.log('当前的环境商',provider)
+					if (!provider) {
+					  reject()
+					}
+					// uni登录
+					uni.login({
+						provider: provider,
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							var userCode=uni.getStorageSync('userCode');
+							loginByMiniApp({
+							   encryptedData: e.mp.detail.encryptedData,
+							   iv: e.mp.detail.iv,
+							   code: code,
+							   userCode:userCode
+							})
+							.then( res => {
+								if(res.code==200){
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录成功",
+									});
+									uni.setStorageSync('AppToken',res.token);
+									uni.setStorageSync('userInfo',JSON.stringify(res.user));
+									uni.hideLoading()
+									//that.getUserInfo()
+									uni.$emit('refreshLogin');
+									uni.navigateBack({
+										delta:1
+									})
+								}
+								else{
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "授权登录失败,请重新登录",
+									});
+								}
+							   
+							 })
+							 .catch(error => {
+								console.log(error)
+								uni.hideLoading();
+								uni.showToast({
+									icon:'none',
+									title: "登录接口调用失败",
+								});
+							 })
+							 
+						}
+					})
+				})
+				.catch(err => {
+					uni.showToast({
+						icon:'none',
+						title: err,
+					});
+				})
+				 
+			} else {
+				uni.showToast({
+					title: '已拒绝授权',
+					icon: 'none',
+					duration: 2000,
+				})
+			}
+		},
+		back() {
+			uni.switchTab({
+				url: '/pages/home/index'
+			});
+			// uni.navigateBack()
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.container {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  position: relative;
+}
+
+.force-login-wrap {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  z-index: 11111;
+  top: 0;
+
+  .force-login__content {
+    position: absolute;
+    left: 50%;
+    top: 40%;
+    transform: translate(-50%, -50%);
+
+    .user-avatar {
+		border: 4upx solid #FFFFFF;
+		box-shadow: 0px 5px 15px 2px rgba(0,0,0,0.1);
+		width: 160rpx;
+		height: 160rpx;
+		border-radius: 50%;
+		overflow: hidden;
+		margin-bottom: 40rpx;
+    }
+
+    .user-name {
+      font-size: 35rpx;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #000;
+      margin-bottom: 30rpx;
+    }
+
+    .login-notice {
+      font-size: 28rpx;
+      font-family: PingFang SC;
+      font-weight: 400;
+      color: #000;
+      line-height: 44rpx;
+      width: 500rpx;
+      text-align: center;
+      margin-bottom: 80rpx;
+    }
+
+    .author-btn {
+      width: 630rpx;
+      height: 80rpx;
+      background: linear-gradient(to right, #66b2ef  0%, #0bb3f2 100%);
+      background: -moz-linear-gradient(to right, #66b2ef 0%, #0bb3f2 100%);
+      // box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
+      border-radius: 40rpx;
+      font-size: 30rpx;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: rgba(255, 255, 255, 1);
+    }
+
+    .close-btn {
+      width: 630rpx;
+      height: 80rpx;
+      margin-top: 30rpx;
+      border-radius: 40rpx;
+      border: 2rpx solid #0bb3f2;
+      background: none;
+      font-size: 30rpx;
+      font-family: PingFang SC;
+      font-weight: 500;
+      color: #0bb3f2;
+    }
+  }
+}
+.tips{
+	margin-top: 30rpx;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	font-size: 28rpx;
+	color: #000;
+	checkbox{
+	}
+	.btn{
+		color: #0bb3f2;
+	}
+}
+
+
+.wx-login{
+	background: rgba(0,0,0,0.7);
+	z-index: 99999;
+	position: fixed;
+	top: 0;
+	left: 0;
+	height: 100%;
+	width: 100%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	.form{
+		border-radius: 20rpx;
+		padding: 60rpx 30rpx;
+		width: 500upx;
+		height: 300upx;
+		background-color: #fff;
+		.title{
+			font-size: 32upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			
+		}
+		.desc{
+			font-size: 28upx;
+			margin: 60upx 0upx 60upx 0upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+		}
+		.btn-box{
+			margin-top: 30rpx;
+			width: 100%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			
+			.btn{
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				margin-left: 10upx;
+				width: 50%;
+				height: 80rpx;
+				border-radius: 5rpx;
+				background-color: #0bb3f2;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #fff;
+				position: relative;
+			}
+			.btn-close{
+				margin-right: 10upx;
+				width: 50%;
+				height: 80rpx;
+				border-radius: 5rpx;
+				border: 2rpx solid #0bb3f2;
+				background: none;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #0bb3f2;
+			}
+		}
+	}
+}
+.auth_btn{
+	width: 100%;
+	height: 100%;
+	top:0upx;
+	position: absolute;
+	opacity:0.0;
+}
+</style>

+ 107 - 0
pages/auth/wxLogin.vue

@@ -0,0 +1,107 @@
+<template>
+  <view class="container">
+    
+  </view>
+</template>
+
+<script>
+import { loginByMp } from '@/api/user'
+export default {
+	data() {
+		return {
+			code:null,
+		}
+	},
+	computed: {
+	},
+	onLoad(option) 
+	{
+		// #ifdef H5
+		if (this.checkWeixin()) {
+			let code = this.getUrlCode('code')
+			if (code==null||code==undefined) {
+				uni.showToast({
+					icon:'none',
+					title: "code不存在",
+				});
+			} else {
+				this.code = code
+				this.loginByMp();
+			}
+		} else {
+			uni.showToast({
+				icon:'none',
+				title: "请在微信中打开",
+			});
+			//跳转到手机号密码登录
+		}
+		// #endif
+	},
+	onUnload() {
+	},
+	mounted() {
+    
+	},
+	methods: {
+		loginByMp(){
+			let code = this.code // 获取开发code
+			var tuiUserId=uni.getStorageSync('tuiUserId');
+			uni.showLoading({
+				title:"处理中..."
+			})
+			loginByMp({
+			   code: code,
+			   tuiUserId:tuiUserId
+			})
+			.then( res => {
+				if(res.code==200||res.code==40163){
+					uni.hideLoading();
+					uni.showToast({
+						icon:'none',
+						title: "登录成功",
+					});
+					uni.setStorageSync('AppToken',res.token);
+					uni.setStorageSync('userInfo',JSON.stringify(res.user));
+					//that.getUserInfo()
+					uni.$emit('refreshLogin');
+					uni.reLaunch({
+						url:"/pages/home/index"
+					})
+				}
+				else{
+					uni.hideLoading();
+					uni.showToast({
+						icon:'none',
+						title: res.msg,
+					});
+				}
+			   
+			 })
+			 .catch(error => {
+				console.log(error)
+				uni.hideLoading();
+				uni.showToast({
+					icon:'none',
+					title: "登录接口调用失败",
+				});
+			 })
+		},
+		checkWeixin(){
+			var ua = window.navigator.userAgent.toLowerCase();
+			if (ua.match(/micromessenger/i) == 'micromessenger') {
+				return true;
+			} else {
+				return false;
+			}
+		},
+		//URL地址是否存在CODE
+		getUrlCode(name) {
+			return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1]
+				.replace(/\+/g, '%20')) || null
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+</style>

+ 85 - 0
pages/common/launch.vue

@@ -0,0 +1,85 @@
+<template>
+	<view class="content">
+		[[]]
+		<view class="loadding" v-if="loadding==true">
+			<image src="https://user.test.ylrztop.com/images/logo.png"></image>
+			<text class="text">壹柒玖康养集团</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getDicts} from '@/api/index'
+	export default {
+		data() {
+			return {
+				loadding:true,
+			};
+		},
+		methods: {
+			
+			getDicts:function(){
+				getDicts().then(
+					res => {
+						if(res.code==200){
+							console.log(res)
+							uni.setStorageSync('dicts',JSON.stringify(res));
+							
+						}else{
+							 
+						}
+						this.loadding=false;
+						this.navigatHandler();
+					},
+					rej => {}
+				);
+			},
+			navigatHandler: function() {
+				uni.reLaunch({
+					url: '../home/index',
+					animationType: 'pop-in',
+					animationDuration: 100
+				})
+			},
+			
+		},
+		onLoad() {
+			this.getDicts()
+		}
+	};
+ 
+</script>
+
+.
+<style lang="scss">
+	content {
+		height: 100%;
+		width: 100%;
+		position: relative;
+		padding-top: 0;
+		
+	}
+	.loadding{
+		background-color: #fff;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		z-index: 9999;
+		image{
+			border-radius: 50%;
+			animation: load linear 1s infinite;
+			width: 120rpx;
+			height:120rpx;
+		}
+		.text{
+			font-size: 28rpx;
+			margin-top: 20rpx;
+		}
+	}
+</style>

+ 93 - 0
pages/doctor/doctorQr.vue

@@ -0,0 +1,93 @@
+<template>
+	<view class="content">
+		<view class="item">
+			<image mode="aspectFit" :show-menu-by-longpress="true" :src="urls[0]"  ></image>
+			<!-- <view class="btn" @click="savePhoto()">
+				保存本地
+			</view> -->
+		</view>
+		 
+	</view>
+</template>
+
+<script>
+	
+	export default {
+		data() {
+			return {
+				urls:['https://qinggetai.oss-rg-china-mainland.aliyuncs.com/qgt/20230714/9d83107168544b75b8d8934e913126a1.png']
+			};
+		},
+		onLoad(option) {
+			 
+			
+		},
+		onShow() {
+		},
+		methods: {
+			savePhoto(){
+				var that=this;
+				uni.downloadFile({ //下载文件资源到本地,返回文件的本地临时路径
+						url: that.urls[0], //网络图片路径
+						success:(res)=>{
+								  var imageUrl=res.tempFilePath;//临时文件路径
+								  uni.saveImageToPhotosAlbum({ //保存图片到系统相册
+									   filePath: imageUrl,
+									   success: (res) => {
+										  console.log('图片保存成功');
+									   },
+									   fail: (err) => {
+										   console.log('图片保存失败');
+									   }
+								  })
+						}
+				}) 
+			},
+			showImg() {
+			 	//预览图片
+			 	uni.previewImage({
+					urls: this.urls,
+			 	 	current: this.urls[0],
+					// 长按图片显示操作菜单,如不填默认为保存相册
+					longPressActions:{
+						itemList:[]
+					}
+			 	});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		height: 100%;
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.item{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			width: 100vw;
+			height: 100vh;
+			image{
+				width: 100%;
+				height:100%;
+			}
+			.btn{
+				margin-top: 30rpx;
+				background-image: linear-gradient(#ff4545,red);
+				padding: 30rpx 60rpx;
+				border-radius: 60rpx;
+				background-color: red;
+				color: #fff;
+				font-size: 30rpx;
+				font-family: 'PingFangTC-Regular';
+				font-weight: 600;
+			}
+		}
+		
+	}
+</style>

+ 284 - 0
pages/healthy/detail.vue

@@ -0,0 +1,284 @@
+<template>
+	<view class="content">
+		<view class="detail-cont">
+			<view class="title">{{item.title}}</view>
+			<view class="info">
+				<view class="reads">阅读数:{{item.views}}</view>
+				<view class="time">{{item.publishTime}}</view>
+			</view>
+			<!-- 正文 -->
+			<view class="full-text">
+				<view v-html="item.contents"></view>
+			</view>
+		</view>
+		<!-- 最近阅读 -->
+		<view class="recent-reads">
+			<view class="left">
+				<text class="label">最近阅读</text>
+				<view class="peop-box" @click="showUsers">
+					<view class="head-box">
+						<view class="head" v-for="(subitem,j) in views" :key="j">
+							<image :src="subitem.avatar==null?'../../static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+						</view>
+					</view>
+					<image class="arrow" src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<view class="share-btn">
+				<image src="../../static/images/share.png" mode=""></image>
+				<text>分享</text>
+				<button  class="share" data-name="shareBtn" open-type="share">分享</button>
+			</view>
+		</view>
+		<!-- 咨询按钮 -->
+		<view class="inquiry">
+			<view class="content">
+				<image src="../../static/images/consult.png" mode=""></image>
+				<text class="text">咨询</text>
+				<button class="contact-btn" open-type="contact"></button>
+			</view>
+			
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getArticleByArticleId,updateView} from '@/api/article'
+	export default {
+		data() {
+			return {
+				articleId:null,
+				item:{},
+				views:[],
+			};
+		},
+		onLoad(option) {
+			this.articleId=option.articleId;
+			this.utils.isLogin().then(res => {
+				if(res){
+					this.updateView();
+				}
+			})
+			uni.showShareMenu({
+				withShareTicket:true,
+				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
+				menus:["shareAppMessage","shareTimeline"] //不设置默认发送给朋友
+			})
+		},
+		onShow() {
+			this.getArticleByArticleId();
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			return {
+				title: this.item.title,
+				path: '/pages/healthy/detail?articleId='+this.item.productId,
+				imageUrl: this.item.imageUrl //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: this.item.title,
+				query:'articleId='+this.item.articleId,
+				imageUrl: this.item.imageUrl //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		methods:{
+			updateView(){
+				updateView(this.articleId).then(
+					res => {
+					},
+					rej => {}
+				);
+			},
+			getArticleByArticleId(){
+				let data = {articleId:this.articleId};
+				getArticleByArticleId(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+							this.views=res.views;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			// 查看阅读用户
+			showUsers() {
+				uni.navigateTo({
+					url: './readUsers?articleId='+this.articleId
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+	}
+	.detail-cont{
+		flex: 1;
+		padding: 40upx;
+		overflow-y: auto;
+		.title{
+			font-size: 40upx;
+			font-family: PingFang SC;
+			// font-weight: bold;
+			color: #222222;
+			line-height: 70upx;
+		}
+		.info{
+			display: flex;
+			align-items: center;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+			line-height: 48upx;
+			margin: 23upx 0;
+			.reads{
+				margin-right: 30upx;
+			}
+		}
+		.full-text{
+			font-size: 36upx;
+			font-family: PingFang SC;
+			// font-weight: 500;
+			color: #222222;
+			line-height: 60upx;
+		}
+	}
+	.recent-reads{
+		flex-shrink: 0;
+		box-sizing: border-box;
+		height: 121upx;
+		background: #FFFFFF;
+		border-top: 1px solid #F0F0F0;
+		padding: 0 40upx 0 37upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.left{
+			display: flex;
+			align-items: center;
+			.label{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+				margin-right: 20upx;
+			}
+			.peop-box{
+				display: flex;
+				align-items: center;
+				.head-box{
+					margin-right: 28upx;
+					display: flex;
+					align-items: center;
+					.head{
+						width: 48upx;
+						height: 48upx;
+						border-radius: 50%;
+						overflow: hidden;
+						box-shadow: 0 0 0 1px #fff;
+						margin-right: -10upx;
+						image{
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+				.arrow{
+					width: 13upx;
+					height: 23upx;
+				}
+			}
+		}
+		.share-btn{
+			position: relative;
+			width: 240upx;
+			height: 80upx;
+			line-height: 80upx;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			background: #0bb3f2;
+			border-radius: 40upx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			image{
+				width: 32upx;
+				height: 32upx;
+				margin-right: 15upx;
+			}
+			.share{
+				position: absolute;
+				width: 100%;
+				height: 100%;
+				opacity: 0;
+			}
+		}
+	}
+	.inquiry{
+		width: 131upx;
+		height: 131upx;
+		position: fixed;
+		right: 22upx;
+		bottom: 193upx;
+		z-index: 99;
+		
+		.content{
+			position: relative;
+			image{
+				width: 100%;
+				height: 100%;
+				position: absolute;
+				top: 0;
+				left: 0;
+				z-index: 9;
+			}
+			.text{
+				position: absolute;
+				top: 70upx;
+				left: 50%;
+				transform: translateX(-50%);
+				z-index: 10;
+				font-size: 22upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 1;
+			}
+			 
+		}
+		
+		
+	}
+	.contact-btn{
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+		z-index: 9999;
+	}
+</style>

+ 389 - 0
pages/healthy/index.vue

@@ -0,0 +1,389 @@
+<template>
+	<view>
+		<view class="top-content">
+			<!-- 这里是状态栏 -->
+			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="top-title">健康百科</view>
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<input type="text" v-model="searchValue" placeholder="输入关键字搜索" confirm-type="search"
+						@confirm="doSearch"
+						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="keyword-list">
+				<!-- 关键字列表 -->
+				<!-- <scroll-view   scroll-x="true" >
+				<view class="inner">
+					<view v-for="(item,index) in cates" :key="index" :class="choseCateId == item.cateId?'item active':'item'" @click="choseCate(item)">
+						{{ item.cateName }}
+					</view>
+				</view>
+			</scroll-view> -->
+				<u-tabs :list="cates" :activeStyle="{fontWeight: '600',color: '#222426',fontSize: '34rpx'}"
+					:inactiveStyle="{color: '#222426',fontSize: '32rpx'}" @click="choseCate(item)"
+					scrollable="false"></u-tabs>
+			</view>
+		</view>
+
+		<!-- 知识列表 -->
+		<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
+			:down="downOption" :up="upOption">
+			<view class="know-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="left">
+						<view class="title ellipsis2">{{ item.title }}</view>
+						<view class="info-box">
+							<view class="readers">
+								<!-- <view class="head-box" v-if="item.viewsList!=null&&item.viewsList.length>0">
+									<view class="head" v-for="(subitem,j) in item.viewsList" :key="j" v-if="subitem!=null">
+										<image  :src="subitem.avatar==null?'../../static/images/detault_head.jpg':subitem.avatar" mode=""></image>
+									</view>
+								</view> -->
+								<view class="readings">
+									<!-- <image class="eye" src="../../static/images/eye.png" ></image> -->
+									<text class="num mr24">阅读 {{item.views}}</text>
+								</view>
+							</view>
+							<view class="time">{{item.publishTime}}</view>
+						</view>
+					</view>
+					<view class="right">
+						<image :src="item.imageUrl" mode="aspectFill"></image>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+
+	</view>
+</template>
+
+<script>
+	import {
+		getArticleCate,
+		getArticleList
+	} from '@/api/article'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin],
+		data() {
+			return {
+				top: '0px',
+				cates: [],
+				choseCateId: 0,
+				// 状态栏的高度
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				searchValue: '',
+				mescroll: null,
+				// 上拉加载的配置
+				downOption: {
+
+				},
+				upOption: {
+					onScroll: true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon: '/static/images/no_data.png',
+						tip: '暂无数据'
+					},
+					textNoMore: '已经到底了'
+				},
+				// 列表数据
+				dataList: [],
+			};
+		},
+		onShow() {
+			this.getArticleCate();
+			var that = this;
+			setTimeout(function() {
+				let query = uni.createSelectorQuery().select(".top-content");
+				query.boundingClientRect(function(data) { //data - 各种参数
+					console.log(data.height) // 获取元素宽度
+					that.top = data.height + "px";
+				}).exec()
+			}, 500);
+
+			// 		let info1 = uni.createSelectorQuery().select(".keyword-list");
+			//      info1.boundingClientRect(function(data) { //data - 各种参数
+			//        	console.log(data.height)  // 获取元素宽度
+
+			//       }).exec()
+
+		},
+		methods: {
+			doSearch() {
+				this.mescroll.resetUpScroll()
+			},
+			getArticleCate() {
+				var that = this;
+				let data = {};
+				getArticleCate(data).then(
+					res => {
+						if (res.code == 200) {
+							this.cates = res.data.map(person => ({
+								name: person.cateName
+							}));
+
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					keyword: this.searchValue,
+					cateId: this.choseCateId,
+					page: page.num,
+					pageSize: page.size
+				};
+				getArticleList(data).then(res => {
+					if (res.code == 200) {
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list;
+
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 关键词选择
+			choseCate(item) {
+				this.choseCateId = item.cateId;
+				this.mescroll.resetUpScroll()
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './detail?articleId=' + item.articleId
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background: #EFF3F7;
+	}
+
+	.status_bar {
+		width: 100%;
+
+	}
+
+	.top-content {
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+
+	.top-title {
+		height: 88upx;
+		line-height: 88upx;
+		font-size: 42upx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41upx;
+	}
+
+	.search-cont {
+		padding: 16upx 30upx;
+
+		.inner {
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #fff;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+
+			.icon-search {
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+
+			input {
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+
+	.keyword-list {
+		box-sizing: border-box;
+		padding: 10upx 27upx;
+		height: 100upx;
+
+		.inner {
+			display: flex;
+		}
+
+		.item {
+			flex-shrink: 0;
+			padding: 0 24upx;
+			height: 64upx;
+			line-height: 64upx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0bb3f2;
+			background: #F5FFFE;
+			border: 1px solid #0bb3f2;
+			border-radius: 32upx;
+			margin: 0 20upx 20upx 0;
+
+			&.active {
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border: 1px solid #0bb3f2;
+			}
+		}
+	}
+
+	.know-list {
+		margin-top: 20upx;
+		padding: 0 24upx;
+		
+
+		.item {
+			box-sizing: border-box;
+			height: 208rpx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			padding: 32upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+
+			.left {
+				flex: 1;
+				padding-right: 40upx;
+
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				.title {
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 32rpx;
+					color: #222426;
+					line-height: 44rpx;
+				}
+
+				.info-box {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					margin-top: 12rpx;
+
+					// justify-content: space-between;
+					.readers {
+						display: flex;
+						align-items: center;
+
+						.head-box {
+							margin-right: 27upx;
+							display: flex;
+							align-items: center;
+
+							.head {
+								width: 48upx;
+								height: 48upx;
+								border-radius: 50%;
+								overflow: hidden;
+								box-shadow: 0 0 0 1px #fff;
+								margin-right: -10upx;
+
+								image {
+									width: 100%;
+									height: 100%;
+								}
+							}
+						}
+
+						.readings {
+							display: flex;
+							align-items: center;
+
+							.eye {
+								width: 26upx;
+								height: 20upx;
+								margin-right: 9upx;
+							}
+
+							.num {
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+								line-height: 1;
+							}
+						}
+					}
+
+					.time {
+						font-size: 24upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+					}
+				}
+			}
+
+			.right {
+				width: 250upx;
+				height: 144rpx;
+				border-radius: 8upx;
+				overflow: hidden;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	}
+</style>

+ 121 - 0
pages/healthy/readUsers.vue

@@ -0,0 +1,121 @@
+<template>
+	<view>
+		<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+		<view class="user-list">
+			<view class="item" v-for="(item,index) in dataList" :key="index">
+				<view class="img-box">
+					<image :src="item.avatar==null?'../../static/images/detault_head.jpg':item.avatar" mode=""></image>
+				</view>
+				<text class="name">{{item.nickname}}</text>
+			</view>
+		</view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import {getArticleViewList} from '@/api/article';
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				articleId:null,
+				mescroll:null,
+				// 上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'/static/images/no_data.png',
+						tip: '暂无数据'
+					}
+				},
+				// 列表数据
+				dataList: [],
+				
+			};
+		},
+		onLoad(option) {
+			this.articleId=option.articleId;
+		},
+		methods:{
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					articleId:this.articleId,
+					page: page.num,
+					pageSize: page.size
+				};
+				getArticleViewList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			 
+		}
+	}
+</script>
+
+<style lang="scss">
+	.user-list{
+		background: #FFFFFF;
+		padding: 40upx 30upx;
+		margin-top: 20upx;
+		.item{
+			margin-bottom: 40upx;
+			display: flex;
+			align-items: center;
+			&:last-child{
+				margin-bottom: 0;
+			}
+			.img-box{
+				width: 80upx;
+				height: 80upx;
+				border-radius: 50%;
+				overflow: hidden;
+				margin-right: 30upx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.name{
+				font-size: 34upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+			}
+		}
+	}
+</style>

+ 72 - 0
pages/home/cert.vue

@@ -0,0 +1,72 @@
+<template>
+	<view class="my-content">
+		<view class="item" v-for="item in certs">
+			<image @click="showImg(item)" :src="item"></image>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+ 
+ export default {
+ 	data() {
+ 		return {
+			 certs:[
+			 ]
+ 		}
+ 	},
+	onLoad(val) {
+		 var config=JSON.parse(uni.getStorageSync('config'));
+		 this.certs=config.certs.split(",");
+		 console.log(this.certs)
+	},
+	methods: {
+		showImg(item) {
+			 //预览图片
+			 var urls=[];
+			 urls.push(item)
+			 console.log(urls)
+			 console.log(item)
+			 uni.previewImage({
+			 	urls: urls,
+			 	current: 0
+			 });
+		},
+	}
+	
+	
+ 	 
+ }
+ 
+ 
+</script>
+
+
+<style scoped lang="scss">
+page{
+	height: 100%;
+}
+.my-content{
+	width: 100%;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	.item{
+		display: flex;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		margin: 30rpx;
+		width: 100%;
+		image{
+			
+			
+		}
+	}
+	
+}
+ 
+
+</style>

+ 291 - 0
pages/home/components/HotProduct.vue

@@ -0,0 +1,291 @@
+<template>
+	<view class="group-goods" v-if="detail.length>0" v-cloak>
+		<view class="title-box x-bc">
+			<view class="row">
+				<image class="w40 h40 mr4" src="/static/images/hot.png"></image><text class="title"><text
+						class="color-red">热门</text>榜单</text>
+			</view>
+			<view class="group-people x-f row" @tap="navTo('/pages/home/productList')">
+				<text class="tip ">更多热门</text>
+				<image class='w48 h48' src="/static/images/right.png"></image>
+				<!-- <text class="cuIcon-right"></text> -->
+			</view>
+		</view>
+		<view class="goods-box swiper-box x-f">
+			<swiper class="carousel" circular @change="swiperChange" :autoplay="true" interval="10000" duration="2000">
+				<swiper-item v-for="(goods, index) in goodsList" :key="index" class="carousel-item">
+					<view class="goods-list-box x-f" style="align-items: flex-start;">
+						<block v-for="mgoods in goods" :key="mgoods.productId">
+							<view class="min-goods" @tap="showProduct(mgoods)">
+								<view class="img-box">
+									<!-- <view class="tag">hot</view> -->
+									<image class="img" :src="mgoods.image" mode="widthFix"></image>
+								</view>
+								<view class="price-box">
+									<view class="y-f">
+										<text class="seckill-current">{{ mgoods.price  }}</text>
+										<!-- <text class="original">销量{{ mgoods.sales }}{{mgoods.unitName}}</text> -->
+									</view>
+								</view>
+								<view class="title">
+									<slot name="titleText"></slot>
+								</view>
+							</view>
+						</block>
+					</view>
+				</swiper-item>
+			</swiper>
+		<!-- 	<view class="swiper-dots" v-if="goodsList.length > 1">
+				<text :class="swiperCurrent === index ? 'dot-active' : 'dot'" v-for="(dot, index) in goodsList.length"
+					:key="index"></text>
+			</view> -->
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "HotProduct",
+
+		data() {
+			return {
+				goodsList: [],
+				swiperCurrent: 0
+			};
+		},
+		props: {
+			detail: Array
+		},
+		computed: {},
+		created() {},
+		watch: {
+			detail(next) {
+				this.goodsList = this.sortData(next, 4);
+			}
+		},
+		methods: {
+			swiperChange(e) {
+				this.swiperCurrent = e.detail.current;
+			},
+			// 数据分层
+			sortData(oArr, length) {
+				let arr = [];
+				let minArr = [];
+				oArr.forEach(c => {
+					if (minArr.length === length) {
+						minArr = [];
+					}
+					if (minArr.length === 0) {
+						arr.push(minArr);
+					}
+					minArr.push(c);
+				});
+
+				return arr;
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			showProduct(item) {
+				uni.navigateTo({
+					url: '/pages/shopping/productDetails?productId=' + item.productId
+				})
+			},
+
+		}
+	}
+</script>
+
+
+<style lang="scss" scoped>
+	.group-goods {
+		position: relative;
+		z-index: 1;
+		background: #FFFFFF;
+		border-radius: 16upx;
+		margin-bottom: 20upx;
+		margin-top: 20upx;
+		// padding: 20upx;
+	}
+
+	.swiper-box,
+	.carousel {
+		width: 700rpx;
+		height: 240upx;
+		position: relative;
+		border-radius: 20rpx;
+
+		.carousel-item {
+			width: 100%;
+			height: 100%;
+			// padding: 0 28upx;
+			overflow: hidden;
+		}
+
+		.swiper-image {
+			width: 100%;
+			height: 100%;
+			// border-radius: 10upx;
+			background: #ccc;
+		}
+	}
+
+	.swiper-dots {
+		display: flex;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 0rpx;
+		z-index: 66;
+
+		.dot {
+			width: 45rpx;
+			height: 3rpx;
+			background: #eee;
+			border-radius: 50%;
+			margin-right: 10rpx;
+		}
+
+		.dot-active {
+			width: 45rpx;
+			height: 3rpx;
+			background: #a8700d;
+			border-radius: 50%;
+			margin-right: 10rpx;
+		}
+	}
+
+	// 今日必拼+限时抢购
+	.group-goods {
+		background: #fff;
+		border-radius: 20rpx;
+		overflow: hidden;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+		.title-box {
+			padding-bottom: 20rpx;
+			padding: 34rpx 32rpx;
+			background: linear-gradient(180deg, #FFDCDC 0%, #FFFFFF 100%);
+
+
+			.title {
+				font-size: 32rpx;
+				font-weight: bold;
+			}
+
+			.group-people {
+				.time-box {
+					font-size: 26rpx;
+					color: #edbf62;
+
+					.count-text-box {
+						width: 30rpx;
+						height: 34rpx;
+						background: #edbf62;
+						text-align: center;
+						line-height: 34rpx;
+						font-size: 24rpx;
+						border-radius: 6rpx;
+						color: rgba(#fff, 0.9);
+						margin: 0 8rpx;
+					}
+				}
+
+				.head-box {
+					.head-img {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 50%;
+						background: #ccc;
+					}
+				}
+
+				.tip {
+					font-size: 24rpx;
+					padding-left: 30rpx;
+					color: #999999;
+				}
+
+				.cuIcon-right {
+					font-size: 30rpx;
+					line-height: 28rpx;
+					color: #666;
+				}
+			}
+		}
+
+		.goods-box {
+			padding: 0 32rpx;
+
+			.goods-item {
+				margin-right: 22rpx;
+
+				&:nth-child(4n) {
+					margin-right: 0;
+				}
+			}
+		}
+
+		.min-goods {
+			margin-right: 22rpx;
+
+		}
+	}
+
+	.min-goods {
+		width: 152rpx;
+		background: #fff;
+
+		.img-box {
+			width: 152rpx;
+			height: 152rpx;
+			overflow: hidden;
+			position: relative;
+            border-radius: 16rpx 16rpx 16rpx 16rpx;
+			.tag {
+				position: absolute;
+				left: 0;
+				bottom: 0rpx;
+				z-index: 2;
+				line-height: 35rpx;
+				background: linear-gradient(132deg, rgba(243, 223, 177, 1), rgba(243, 223, 177, 1), rgba(236, 190, 96, 1));
+				border-radius: 0px 18rpx 18rpx 0px;
+				padding: 0 10rpx;
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: rgba(120, 79, 6, 1);
+			}
+
+			.img {
+				width: 100%;
+				background-color: #ccc;
+			}
+		}
+
+		.price-box {
+			width: 100%;
+			margin-top: 24rpx;
+
+			.seckill-current {
+				font-weight: 600;
+				font-size: 26rpx;
+				color: #FF5030;
+			}
+
+			.original {
+				font-size: 20rpx;
+				font-weight: 400;
+				// text-decoration: line-through;
+				color: rgba(153, 153, 153, 1);
+				margin-left: 14rpx;
+			}
+		}
+
+		.title {
+			font-size: 26rpx;
+		}
+	}
+</style>

+ 318 - 0
pages/home/components/NewProduct.vue

@@ -0,0 +1,318 @@
+<template>
+	<view class="group-goods" v-if="detail.length>0" v-cloak>
+		<view class="title-box x-bc">
+			<text class="title"><text class="color-orange">新品</text>首发</text>
+			<view class="group-people x-f  row" @tap="navTo('/pages/home/productList')">
+				<text class="tip">更多新品</text>
+				<image class='w48 h48' src="/static/images/right.png"></image>
+				<!-- <text class="cuIcon-right"></text> -->
+			</view>
+		</view>
+		<view class="goods-box swiper-box x-f">
+			<swiper class="carousel" circular @change="swiperChange" :autoplay="true" interval="10000" duration="2000">
+				<swiper-item v-for="(goods, index) in goodsList" :key="index" class="carousel-item">
+					<view class="goods-list-box x-f" style="align-items: flex-start;">
+						<block v-for="mgoods in goods" :key="mgoods.productId">
+							<view class="min-goods" @tap="showProduct(mgoods)">
+								<view class="img-box">
+									<!-- <view class="tag">new</view> -->
+									<view class="tag"><text>新品首发</text></view>
+									<image class="img" :src="mgoods.image" mode="widthFix"></image>
+								</view>
+								<view class="price-box">
+									<view class="y-f">
+										<text class="seckill-current">{{ mgoods.price  }}</text>
+										<!-- <text class="original">销量{{ mgoods.sales }}{{mgoods.unitName}}</text> -->
+									</view>
+								</view>
+								<view class="title">
+									<slot name="titleText"></slot>
+								</view>
+							</view>
+						</block>
+					</view>
+				</swiper-item>
+			</swiper>
+			<!-- <view class="swiper-dots" v-if="goodsList.length > 1">
+				<text :class="swiperCurrent === index ? 'dot-active' : 'dot'" v-for="(dot, index) in goodsList.length"
+					:key="index"></text>
+			</view> -->
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: "NewProduct",
+
+		data() {
+			return {
+				goodsList: [],
+				swiperCurrent: 0
+			};
+		},
+		props: {
+			detail: Array
+		},
+		computed: {},
+		created() {},
+		watch: {
+			detail(next) {
+				this.goodsList = this.sortData(next, 4);
+			}
+		},
+		methods: {
+			swiperChange(e) {
+				this.swiperCurrent = e.detail.current;
+			},
+			// 数据分层
+			sortData(oArr, length) {
+				let arr = [];
+				let minArr = [];
+				oArr.forEach(c => {
+					if (minArr.length === length) {
+						minArr = [];
+					}
+					if (minArr.length === 0) {
+						arr.push(minArr);
+					}
+					minArr.push(c);
+				});
+
+				return arr;
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			showProduct(item) {
+				uni.navigateTo({
+					url: '/pages/shopping/productDetails?productId=' + item.productId
+				})
+			}
+		}
+	}
+</script>
+
+
+<style lang="scss" scoped>
+	.group-goods {
+		position: relative;
+		z-index: 1;
+		background: #FFFFFF;
+		border-radius: 16upx;
+		margin-bottom: 20upx;
+		margin-top: 20upx;
+	}
+
+	.swiper-box,
+	.carousel {
+		width: 700rpx;
+		height: 240rpx;
+		position: relative;
+		border-radius: 20rpx;
+
+		.carousel-item {
+			width: 100%;
+			height: 100%;
+			// padding: 0 28upx;
+			overflow: hidden;
+		}
+
+		.swiper-image {
+			width: 100%;
+			height: 100%;
+			// border-radius: 10upx;
+			background: #ccc;
+		}
+	}
+
+	.swiper-dots {
+		display: flex;
+		position: absolute;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 0rpx;
+		z-index: 66;
+
+		.dot {
+			width: 45rpx;
+			height: 3rpx;
+			background: #eee;
+			border-radius: 50%;
+			margin-right: 10rpx;
+		}
+
+		.dot-active {
+			width: 45rpx;
+			height: 3rpx;
+			background: #a8700d;
+			border-radius: 50%;
+			margin-right: 10rpx;
+		}
+	}
+
+	// 今日必拼+限时抢购
+	.group-goods {
+
+		background: #fff;
+		border-radius: 20rpx;
+		overflow: hidden;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+		.title-box {
+			padding-bottom: 20rpx;
+			padding: 34rpx 32rpx;
+			background: linear-gradient(180deg, #FFEBD7 0%, #FFFFFF 100%);
+
+			.title {
+				font-size: 34rpx;
+				font-weight: bold;
+			}
+
+			.group-people {
+				.time-box {
+					font-size: 26rpx;
+					color: #edbf62;
+
+					.count-text-box {
+						width: 30rpx;
+						height: 34rpx;
+						background: #edbf62;
+						text-align: center;
+						line-height: 34rpx;
+						font-size: 24rpx;
+						border-radius: 6rpx;
+						color: rgba(#fff, 0.9);
+						margin: 0 8rpx;
+					}
+				}
+
+				.head-box {
+					.head-img {
+						width: 40rpx;
+						height: 40rpx;
+						border-radius: 50%;
+						background: #ccc;
+					}
+				}
+
+				.tip {
+					font-size: 24rpx;
+					padding-left: 30rpx;
+					color: #999999;
+				}
+
+				.cuIcon-right {
+					font-size: 30rpx;
+					line-height: 28rpx;
+					color: #666;
+				}
+			}
+		}
+
+		.goods-box {
+			padding: 0 32rpx;
+
+			.goods-item {
+				margin-right: 22rpx;
+
+				&:nth-child(4n) {
+					margin-right: 0;
+				}
+			}
+		}
+
+		.min-goods {
+			margin-right: 22rpx;
+
+		}
+	}
+
+	.min-goods {
+		width: 152rpx;
+		background: #fff;
+
+		.img-box {
+			width: 140rpx;
+			height: 140rpx;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			overflow: hidden;
+			position: relative;
+
+			// .tag {
+			//   position: absolute;
+			//   left: 0;
+			//   bottom: 0rpx;
+			//   z-index: 2;
+			//   line-height: 35rpx;
+			//   background: linear-gradient(132deg, rgba(243, 223, 177, 1), rgba(243, 223, 177, 1), rgba(236, 190, 96, 1));
+			//   border-radius: 0px 18rpx 18rpx 0px;
+			//   padding: 0 10rpx;
+			//   font-size: 24rpx;
+			//   font-family: PingFang SC;
+			//   font-weight: bold;
+			//   color: rgba(120, 79, 6, 1);
+			// }
+			.tag {
+				position: absolute;
+				right: 2rpx;
+				top: 2rpx;
+				z-index: 2;
+				line-height: 18rpx;
+				background: linear-gradient(120deg, #FF7F4E 0%, #FA531C 100%);
+				// border-radius: 0px 18rpx 18rpx 0px;
+				width: 38rpx;
+				height: 40rpx;
+
+				padding: 10rpx;
+				font-size: 14rpx;
+				font-family: PingFang SC;
+				font-weight: Semibold;
+				color: #FFFFFF;
+				border-radius: 50%/50%;
+				transform: skew(-8deg);
+				display: flex;
+				justify-items: center;
+				align-items: center;
+				// box-shadow: 2rpx 2rpx 2rpx 2rpx rgba(0, 0, 0, 0.1);
+				text{
+					transform: skew(8deg);
+					display: block;
+					text-align: center;
+					letter-spacing: 2rpx;
+				}
+			}
+
+			.img {
+				width: 100%;
+				background-color: #FFFFFF;
+
+			}
+		}
+
+		.price-box {
+			width: 100%;
+			margin-top: 24rpx;
+
+			.seckill-current {
+				font-weight: 600;
+				font-size: 26rpx;
+				color: #FF5030;
+			}
+
+			.original {
+				font-size: 20rpx;
+				font-weight: 400;
+				// text-decoration: line-through;
+				color: rgba(153, 153, 153, 1);
+				margin-left: 14rpx;
+			}
+		}
+
+		.title {
+			font-size: 26rpx;
+		}
+	}
+</style>

+ 79 - 0
pages/home/content.vue

@@ -0,0 +1,79 @@
+<template>
+	<view class="content">
+		 <view   v-html="content"></view>
+	</view>
+</template>
+
+<script>
+ 
+ export default {
+ 	data() {
+ 		return {
+			content:"",
+ 		}
+ 	},
+	onLoad(val) {
+		this.content=uni.getStorageSync('content');
+	}
+ 	 
+ }
+ 
+ 
+</script>
+
+
+<style scoped lang="scss">
+page{
+	height: 100%;
+}
+.content{
+	height: 100%;
+}
+.logo{
+	padding-top: 15%;
+	text-align: center;
+	image{
+		width: 80px;
+		height: 80px;
+	}
+	p{
+		margin: 10px 0px;
+		font-size: 14px;
+	}
+}
+.set-box{
+	margin-top: 30upx;
+	background: #fff;
+	padding: 0 40upx;
+	.item{
+		
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 25upx 0;
+		.left{
+			display: flex;
+			align-items: center;
+			.text{
+				font-size: 30upx;
+				color: #666;
+			}
+		}
+		.right{
+			width: 10upx;
+			height: 20upx;
+		}
+		.right-text{
+			 
+		}
+	}
+}
+.contact-btn {
+  display: inline-block;
+  position: absolute;
+  width: 100%;
+  background: salmon;
+   opacity: 0;
+}
+
+</style>

+ 377 - 0
pages/home/doctorCase.vue

@@ -0,0 +1,377 @@
+<template>
+	<view>
+		<view class="top-fixed">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<input type="text"  v-model="searchVal" placeholder="输入关键字搜索"  confirm-type="搜索" @confirm="goSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<!-- tab切换 -->
+			<view class="pub-tab-box">
+				<view class="tab-inner">
+					<view 
+						v-for="(item,index) in depts" 
+						:key="index"
+						:class="deptId == item.departmentId?'item active':'item'"
+						@click="changeDept(item)"
+					>
+						<view class="text">
+							{{ item.departmentName }}
+							<image v-show="deptId == item.departmentId" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<!-- 数据列表 -->
+		<mescroll-body ref="mescroll"  top="190rpx" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="cases-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index">
+					<!-- 文字 -->
+					<view class="dec-text ellipsis2">{{item.title}}</view>
+					<!-- 有图 -->
+					<view class="images-box"  v-if="item.imgs!=null"  >
+						<view class="img-item" v-for="(subitem,j) in utils.photosToArr(item.imgs)" @click="showImg(item.imgs)" :key="j">
+							<image :src="subitem" mode="aspectFill" ></image>
+						</view>
+					</view>
+					<!-- 医生信息 -->
+					<view class="doc-info">
+						<view class="head">
+							<image :src="item.doctorHeadImg" mode="aspectFill"></image>
+						</view>
+						<view class="name">{{item.doctorName}}</view>
+						<view class="line"></view>
+						<view class="posit">
+							{{utils.getDictLabelName("doctorPosition",item.doctorPosition)}}
+						</view>
+						<view class="line"></view>
+						<view class="address">{{item.hospitalName}}</view>
+					</view>
+					<view class="answer-box">
+						<!-- 文字回答 -->
+						<text class="text-inner" v-if="item.orderType == '1' ">{{item.replyContent}}</text>
+						<!-- 语音回答 -->
+						<view class="voice-inner" v-if="item.orderType == '2'">
+							<free-audio 
+								startPic='/static/images/play.png' 
+								endPic='/static/images/pause.png'
+								activeColor="#0bb3f2"
+								:audioId="'audio'+index"
+								:url='item.replyAudioUrl'
+							></free-audio>
+						</view>
+					</view>
+					<view class="read-box">
+						<image src="../../static/images/eye.png" mode=""></image>
+						<text class="text">{{item.views}}人看过</text>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import {getDepartmentList,getDoctorCase} from '@/api/doctorOrder.js'
+	import freeAudio from '@/components/chengpeng-audio/free-audio.vue'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	
+	export default {
+		components: { freeAudio},
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				depts:[],
+				deptId:0,
+				searchVal:"",
+				// tab切换
+				casesCateChose: 1,
+				// 上拉加载的配置
+				mescroll:null,
+				// 上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'/static/images/no_data.png',
+						tip: '暂无数据'
+					}
+				},
+				// 列表数据
+				dataList: []
+			};
+		},
+		onLoad() {
+			this.getDepartmentList()
+		},
+		methods: {
+			changeDept(item) {
+				this.deptId = item.departmentId;
+				this.mescroll.resetUpScroll()
+				
+			},
+			getDepartmentList(){
+				getDepartmentList().then(res => {
+					if(res.code==200){
+						var allDept={departmentId:0,departmentName:"全部"}
+						this.depts.push(allDept);
+						this.depts=this.depts.concat(res.data);
+						console.log(this.depts)
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			goSearch(){
+				this.mescroll.resetUpScroll()
+			},
+			showImg(urls) {
+				 var imgArr =urls.split(',');
+				 //预览图片
+				 uni.previewImage({
+				 	urls: imgArr,
+				 	current: imgArr[0]
+				 });
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					departmentId:this.deptId,
+					title:this.searchVal,
+					page: page.num,
+					pageSize: page.size
+				};
+				getDoctorCase(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+	.pub-tab-box{
+		padding: 0 33upx;
+		background-color: #FFFFFF;
+		.tab-inner{
+			height: 88upx;
+			line-height: 88upx;
+			display: flex;
+			overflow-x: auto;
+		}
+		.item{
+			font-size: 28upx;
+			white-space: nowrap;
+			line-height: 1;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #666666;
+			margin-right: 60upx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			&:last-child{
+				margin-right: 0;
+			}
+			&.active{
+				font-weight: bold;
+				color: #333333;
+			}
+			.text{
+				position: relative;
+				z-index: 1;
+			}
+			.tab-bg{
+				width: 72upx;
+				height: 28upx;
+				position: absolute;
+				top: 17upx;
+				left: 50%;
+				transform: translateX(-36upx);
+				z-index: -1;
+			}
+		}
+	}
+	.top-fixed{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.top-seat{
+		width: 100%;
+		height: 212upx;
+	}
+	// 问诊案例
+	.cases-list{
+		padding: 20upx;
+		.item{
+			padding: 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			margin-bottom: 20upx;
+			.dec-text{
+				font-size: 32upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #111111;
+				line-height: 48upx;
+			}
+			.images-box{
+				margin-top: 10upx;
+				display: flex;
+				flex-wrap: wrap;
+				.img-item{
+					width: 155upx;
+					height: 155upx;
+					background: #F5F5F5;
+					border-radius: 8upx;
+					margin: 0 10upx 10upx 0;
+					overflow: hidden;
+					image{
+						width: 100%;
+						height: 100%;
+					}
+					&:nth-child(4n){
+						margin-right: 0;
+					}
+				}
+			}
+			.doc-info{
+				display: flex;
+				align-items: center;
+				margin: 30upx 0 20upx;
+				.head{
+					width: 60upx;
+					height: 60upx;
+					background: #F2F5F9;
+					border-radius: 50%;
+					margin-right: 20upx;
+					overflow: hidden;
+					image{
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.name{
+					font-size: 28upx;
+					line-height: 1;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+				}
+				.line{
+					width: 1px;
+					height: 22upx;
+					background: #DDDDDD;
+					margin: 0 16upx;
+				}
+				.posit,
+				.address{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+			}
+			.answer-box{
+				width: 100%;
+				// height: 117upx;
+				background: #F5F7F7;
+				border-radius: 10upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				.text-inner{
+					// height: 84upx;
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					line-height: 42upx;
+					padding: 15upx;
+				}
+			}
+			.read-box{
+				margin-top: 30upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				image{
+					width: 24upx;
+					height: 19upx;
+					margin-right: 10upx;
+				}
+				.text{
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+			}
+		}
+	}
+</style>

+ 2825 - 0
pages/home/index.vue

@@ -0,0 +1,2825 @@
+<template>
+	<view class="content">
+		<!-- 背景图片 -->
+		<image class="bg" src="https://user.test.ylrztop.com/images/home_top_bg.png" mode="widthFix"></image>
+		<view>
+			<view class="top-inner">
+				<view class="fixed-top-box" :style="{ background: bgColor }">
+					<!-- 这里是状态栏 -->
+					<view class="status_bar" :style="{height: statusBarHeight}"></view>
+					<view class="top-title">
+						<view class="name">壹柒玖康养集团</view>
+						<!-- <view class="dot">•</view><view class="sub-name">七彩互联网医院</view> -->
+					</view>
+					<!-- 搜索框、购物车、客服 -->
+					<view class="func-cont">
+						<view class="search-cont">
+							<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+							<input type="text" disabled value="" placeholder="搜索商品、症状、功能主治"
+								placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;"
+								@click="toSearch" />
+						</view>
+						<!-- 购物车 -->
+						<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
+							<view class="img-item" @click="goAuthUrl('../shopping/cart')">
+								<image src="../../static/images/cart_wihte.png" mode=""></image>
+							</view>
+						</uni-badge>
+						<view class="img-item" style="position: relative;">
+							<image src="../../static/images/customer.png" mode=""></image>
+							<button class="contact-btn" open-type="contact"></button>
+						</view>
+					</view>
+					<!-- <view class="tips">
+						
+						<view class="left"></view>
+						<view class="right"  @click="navTo('./cert')">资质证明</view>
+					</view> -->
+				</view>
+			</view>
+			<!-- 头部间距 -->
+			<view style="padding-bottom:220rpx">
+				<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			</view>
+			<!-- 轮播图 -->
+			<view class="banner-box">
+				<view class="inner">
+					<swiper class="swiper" :indicator-dots="true" :circular="true" :autoplay="true" :interval="3000"
+						:duration="1000" indicator-color="rgba(255, 255, 255, 0.6)" indicator-active-color="#ffffff">
+						<swiper-item class="swiper-item" v-for="(item,index) in advList" :key="index"
+							@click="handleAdvClick(item)">
+							<image :src="item.imageUrl" mode=""></image>
+						</swiper-item>
+					</swiper>
+				</view>
+			</view>
+
+			<!-- 菜单 -->
+			<view class="menu-content">
+				<text class="weight-600 mb26 ml32">我的健康数据</text>
+				<view class="menu-box">
+					<Menu :list="menus" @menuClick="menuClick" v-if="menus.length>0" style="width:100%;"></Menu>
+				</view>
+			</view>
+
+		</view>
+
+		<!-- 在线问诊、处方查询 -->
+		<view class="online-inquiry">
+			<!-- <view class="item" @click="navTo('/pages/doctor/doctorQr')"> -->
+			<view class="item" @click="navTo('/pages_health/healthConsulting')">
+				<image class="bg-img" src="https://user.test.ylrztop.com/images/online_treat.png" mode="aspectFill"></image>
+				<view class="inner">
+					<text class="title">健康<text class="color-pink">咨询</text></text>
+					<text class="sub-title">三师在线服务</text>
+				</view>
+			</view>
+			<!-- <view class="item" @click="goAuthUrl('/pages_user/user/prescribeOrder')"> -->
+			<view class="item" @click="navTo('/pages_health/healthfiles')">
+				<image class="bg-img" src="https://user.test.ylrztop.com/images/chu_query.png" mode="aspectFill"></image>
+				<view class="inner">
+					<text class="title">健康<text class="color-yellow">专管</text></text>
+					<text class="sub-title">糖尿病/体重</text>
+				</view>
+			</view>
+		</view>
+
+		<view class="modules">
+			<view class="module">
+				<!--养生有道-->
+				<view class="depts">
+					<view class="title">养生有道</view>
+					<view class="dept-box">
+						<view @click="yangshengClick(item)" class="dept" :key="index"
+							v-for="(item,index) in yangshengs">
+							<image class="icon" :src="item.icon"></image>
+							<view class="title">{{item.title}} </view>
+						</view>
+					</view>
+				</view>
+
+				<!-- 养生讲堂 -->
+				<view class="doctor-articles">
+					<view class="title-box">
+						<!-- <view class="title">养生讲堂</view> -->
+						<u-tabs :list="livetabList"
+							:activeStyle="{fontWeight: '600',color: '#222426',fontSize: '34rpx'}"
+							:inactiveStyle="{color: '#222426',fontSize: '32rpx'}" @click="selectlivetab"
+							scrollable="false"></u-tabs>
+						<view class="more" @click="navTo('/pages_index/index/doctorArticleList')">
+							<view class="text">更多</view>
+							<image src="/static/images/right.png"></image>
+						</view>
+					</view>
+					<scroll-view :scroll-x="true">
+						<view class="article-box">
+							<view class="article"
+								@click="navTo('/pages_index/index/doctorArticleDetails?articleId='+item.articleId)"
+								v-for="(item,index) in doctocArticles" :key="index">
+								<view class="image-box">
+									<image mode="aspectFill" :src="item.imageUrl"></image>
+									<view class="views">
+										{{item.views}}人观看
+									</view>
+									<view class="doctor">
+										<image mode="aspectFill" :src="item.avatar||''"></image>
+										<view class="right">
+											<view class="doc-name ellipsis">{{item.doctorName||''}}</view>
+											<view class="doc-position ellipsis">{{item.position||''}}</view>
+										</view>
+									</view>
+								</view>
+								<view class="article-title-box">
+									<view class="article-title more-t">{{item.title}}</view>
+								</view>
+							</view>
+						</view>
+					</scroll-view>
+				</view>
+
+
+
+				<!--养生干货-->
+				<view class="articles">
+					<view class="title-box">
+						<!-- <view class="title">养生干货</view> -->
+						<u-tabs :list="articletabList"
+							:activeStyle="{fontWeight: '600',color: '#222426',fontSize: '34rpx'}"
+							:inactiveStyle="{color: '#222426',fontSize: '32rpx'}" @click="selectarticletab"
+							scrollable="false"></u-tabs>
+						<view class="more" @click="navTo('/pages_index/index/articleList')">
+							<view class="text">更多</view>
+							<image src="../../static/images/right.png"></image>
+						</view>
+					</view>
+					<view class="article-box" v-if="articles.length>0">
+						<view class="item" :key="index"
+							@click="navTo('/pages_index/index/articleDetails?articleId='+item.articleId)"
+							v-for="(item,index) in articles">
+							<view class="left">
+								<view class="title ellipsis1">
+									{{item.title}}
+								</view>
+								<!-- 新加的文章内容 -->
+								<view class="txt ellipsis2">
+									{{item.title}}
+								</view>
+								<view class="views">
+									浏览量 {{item.views}}
+								</view>
+							</view>
+							<view class="right">
+								<image :src="item.imageUrl"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+
+			</view>
+		</view>
+
+		<view class="index-cont">
+			<!-- 医生团队 -->
+			<!-- <view class="pub-item">
+				<view class="pub-title-box">
+					<text class="left">医生团队</text>
+					<view class="right" @click="navTo('/pages_doctor/doctorList')">
+						<text class="text">全部医生</text>
+						<image src="../../static/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+				<view class="doc-cont">
+					<view class="inner">
+						<view class="item" v-for="(item,index) in doctorList" :key="index" @click="shopDoctor(item)">
+							<view class="head-box">
+								<image :src="item.headImg" mode="aspectFill"></image>
+							</view>
+							<text class="name ellipsis">{{ item.doctorName }}</text>
+							<text class="position ellipsis">
+								{{utils.getDictLabelName("doctorPosition",item.position)}}
+							</text>
+						</view>
+					</view>
+				</view>
+			</view> -->
+			<!-- <view class="pub-item">
+				<view class="tabs">
+					<view class="tab" @click="docTabChange(1)">
+						<image v-if="docTab==1" class="img" src="../../static/images/tab1.png" mode=""></image>
+						<view class="inner">
+							<text :class="docTab == 1?'title active':'title'" >推荐医生</text>
+						</view>
+					</view>
+					<view class="tab" @click="docTabChange(2)">
+						<image v-if="docTab==2" class="img" src="../../static/images/tab2.png" mode=""></image>
+						<view class="inner">
+							<text :class="docTab == 2?'title active':'title'" >推荐药师</text>
+						</view>
+					</view>
+					<view class="tab" @click="docTabChange(3)">
+						<image v-if="docTab==3" class="img" src="../../static/images/tab3.png" mode=""></image>
+						<view class="inner">
+							<text  :class="docTab == 3?'title active':'title'" >推荐营养师</text>
+						</view>
+					</view>
+				</view>
+				<view class="doc-tab-box">
+					<view class="tab-inner" >
+						<view 
+							v-for="(item,index) in depts" 
+							:key="index"
+							:class="item.departmentId == deptId?'item active':'item'"
+							@click="deptChange(item)"
+						>
+							<view class="text">
+								{{ item.departmentName }}
+								<image v-show="item.departmentId == deptId" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+							</view>
+						</view>
+					</view>
+					<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+				</view>
+				<view class="doc-list">
+					<view class="item" v-for="(item,index) in doctorList" :key="index" @click="shopDoctor(item)"> -->
+			<!-- 头像 -->
+			<!-- <view class="head-box">
+							<image :src="item.headImg" mode="aspectFill"></image>
+						</view> -->
+			<!-- 详细信息 -->
+			<!-- 		<view class="info"> -->
+			<!-- 姓名等 -->
+			<!-- 		<view class="top">
+								<text class="name">{{ item.doctorName }}</text>
+								<view class="line"></view>
+								<text class="other">{{utils.getDictLabelName("doctorPosition",item.position)}}</text>
+								<view class="line"></view>
+								<text class="other">{{ item.departmentName }}</text>
+							</view> -->
+			<!-- 单位 -->
+			<!-- <view class="unit-box"> -->
+			<!-- 	<view class="level">三甲</view> -->
+			<!-- 			<view class="name">{{ item.hospitalName }}</view>
+							</view> -->
+			<!-- 擅长 -->
+			<!-- 	<view class="expertise ellipsis2">
+								擅长:{{ item.doctorDesc }}
+							</view> -->
+			<!-- 评分 -->
+			<!-- <view class="rate-box">
+								<view class="star">
+									<image src="../../static/images/star.png" mode=""></image>
+									<text>{{ item.pings }}</text>
+								</view>
+								<view class="line"></view>
+								<view class="num-box">
+									<text class="label">接诊数</text>
+									<text class="num">{{ item.orders }}</text>
+								</view>
+								<view class="line"></view>
+								<view class="num-box">
+									<text class="label">响应速度</text>
+									<text class="num">{{ item.speed }}分钟</text>
+								</view>
+							</view> -->
+			<!-- 价格 -->
+			<!-- 	<view class="price-box">
+								<view class="btn-item" v-for="(subitme) in item.price">
+									<text class="label" >{{subitme.priceType==1?'图文':'语音'}}</text>
+									<text class="num">¥{{subitme.price.toFixed(2)}}</text>
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="bottom-title" @click="navTo('/pages_doctor/doctorList?doctorType='+docTab)">
+						<text >{{allDoctorTitle}}</text>
+						<image src="../../static/images/arrow3.png" mode=""></image>
+					</view>
+					 
+				</view>
+				 -->
+			<!-- <view class="doc-cont">
+					<view class="inner">
+						<view class="item" v-for="(item,index) in doctorList" :key="index" @click="shopDoctor(item)">
+							<view class="head-box">
+								<image :src="item.headImg" mode="aspectFill"></image>
+							</view>
+							<text class="name ellipsis">{{ item.doctorName }}</text>
+							<text class="position ellipsis">
+								{{utils.getDictLabelName("doctorPosition",item.position)}}
+							</text>
+						</view>
+					</view>
+				</view> -->
+			<!-- 		</view> -->
+			<!-- 问诊案例 -->
+			<!-- <view class="pub-item">
+				<view class="pub-title-box">
+					<text class="left">问诊案例</text>
+					<view class="right" @click="viewAll('doctorCase')">
+						<text class="text">全部案例</text>
+						<image src="../../static/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+				<view class="inner">
+					<view class="pub-tab-box">
+						<view class="tab-inner">
+							<view 
+								v-for="(item,index) in orderTypes" 
+								:key="index"
+								:class="item.id == orderType?'item cases active':'item cases'"
+								@click="orderTypeChange(item)"
+							>
+								<view class="text">
+									{{ item.name }}
+									<image v-show="item.id == orderType" class="tab-bg" src="../../static/images/tab_bg.png" mode=""></image>
+								</view>
+							</view>
+						</view>
+						<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+					</view>
+					<view class="cases-list">
+						<view class="item" v-for="(item,index) in doctorOrderList" :key="index">
+							<view class="dec-text ellipsis2">{{item.title}}</view>
+							<view class="images-box"  v-if="item.imgs!=null"  >
+								<view class="img-item" v-for="(subitem,j) in utils.photosToArr(item.imgs)" @click="showImg(item.imgs)" :key="j">
+									<image :src="subitem" mode="aspectFill" ></image>
+								</view>
+							</view>
+							<view class="doc-info">
+								<view class="head">
+									<image :src="item.doctorHeadImg" mode="aspectFill"></image>
+								</view>
+								<view class="name">{{item.doctorName}}</view>
+								<view class="line"></view>
+								<view class="posit">
+									{{utils.getDictLabelName("doctorPosition",item.doctorPosition)}}
+								</view>
+								<view class="line"></view>
+								<view class="address">{{item.hospitalName}}</view>
+							</view>
+							<view class="answer-box">
+								<text class="text-inner" v-if="item.orderType == '1' ">{{item.replyContent}}</text>
+								<view class="voice-inner" v-if="item.orderType == '2'">
+									<free-audio 
+										startPic='/static/images/play.png' 
+										endPic='/static/images/pause.png'
+										activeColor="#0bb3f2"
+										:audioId="'audio'+index"
+										:url='item.replyAudioUrl'
+									></free-audio>
+								</view>
+							</view>
+							<view class="read-box">
+								<image src="../../static/images/eye.png" mode=""></image>
+								<text class="text">{{item.views}}人看过</text>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view> -->
+
+			<!-- 热门榜单 -->
+			<NewProduct :detail="newProductList" />
+			<HotProduct :detail="hotProductList" />
+			<!-- 健康百科 -->
+			<!-- <view class="pub-item" style="margin-top: 20rpx;">
+				<view class="pub-title-box">
+					<text class="left">健康百科</text>
+					<view class="right" @click="switchTo('../healthy/index')">
+						<text class="text">更多</text>
+						<image src="../../static/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+				<view class="inner">
+					<view class="pub-tab-box">
+						<view class="tab-inner">
+							<view v-for="(item,index) in articleCateList" :key="index"
+								:class="item.cateId == cateId?'item active':'item'" @click="articleCateChange(item)">
+								<view class="text">
+									{{ item.cateName }}
+									<image v-show="item.cateId == cateId" class="tab-bg"
+										src="../../static/images/tab_bg.png" mode=""></image>
+								</view>
+							</view>
+						</view>
+						<image class="right-mask" src="../../static/images/mask.png" mode=""></image>
+					</view>
+
+					<view class="know-list">
+						<view class="item" v-for="(item,index) in articleList" :key="index" @click="showArticle(item)">
+							<view class="left">
+								<view class="title ellipsis2">{{ item.title }}</view>
+								<view class="info-box">
+									<view class="readers">
+										<view class="head-box" v-if="item.viewsList!=null&&item.viewsList.length>0">
+											<view class="head" v-for="(subitem,j) in item.viewsList" :key="j"
+												v-if="subitem!=null">
+												<image
+													:src="subitem.avatar==null?'/static/images/detault_head.jpg':subitem.avatar"
+													mode=""></image>
+											</view>
+										</view>
+										<view class="readings">
+											<image class="eye" src="../../static/images/eye.png" mode=""></image>
+											<text class="num">{{item.views}}</text>
+										</view>
+									</view>
+									<view class="time">{{item.publishTime}}</view>
+								</view>
+							</view>
+							<view class="right">
+								<image :src="item.imageUrl" mode="aspectFill"></image>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view> -->
+			<!-- 精选药品 -->
+			<!-- <TuiProduct ref="tuiProduct" /> -->
+			<!-- <view class="feat-title">
+				<image src="../../static/images/tui.png" mode=""></image>
+				<text>精选药品</text>
+			</view>
+			<view class="drug-list">
+				<view class="item" v-for="(item,index) in tuiProductList" :key="index" @click="showProduct(item)">
+					<view class="img-box">
+						<image :src="item.image" mode="aspectFit"></image>
+					</view>
+					<view class="info-box">
+						<view class="title ellipsis2">{{ item.productName }}</view>
+						<view class="price-box">
+							<view class="now">
+								<text class="unit">¥</text>
+								<text class="num">{{item.price.toFixed(2)}}</text>
+							</view>
+							<view class="old">¥{{item.otPrice.toFixed(2)}}</view>
+						</view>
+					</view>
+				</view>
+			</view> -->
+
+		</view>
+
+
+		<!-- 限时消息 -->
+		<!-- <view class="message-box" >
+			<view class="left">
+				<image src="../../static/images/close24.png" mode="" @click="closeMsg"></image>
+				<view class="text ellipsis">关注公众号了解更新</view>
+			</view>
+			<view class="btn">查看</view>
+			
+		</view> -->
+		<!-- #ifdef MP-WEIXIN -->
+		<!-- <view class="official-account">
+			<official-account @load="bindload" @error="binderror"></official-account>
+		</view> -->
+		<!-- #endif -->
+		<view class="popup-box" v-if="activityShow">
+			<view class="info-mask" @tap="closeActivity()"></view>
+			<view class="info-form">
+				<image :src="activity.logoUrl" @tap="showActivity()" />
+			</view>
+		</view>
+		<!-- <z-modal :show="tuiModalControl" placeholderText="请输入邀请码" :btnGroup="btnGroup" :contentType="2"
+			titleText="填写邀请码" @cancle="cancleTui" @sure="submitTui"></z-modal> -->
+	</view>
+</template>
+
+<script>
+	// import zModal from '@/components/z-modal/z-modal.vue'
+	import {
+		getStoreActivity
+	} from '@/api/activity.js'
+	import {
+		getDepartmentList
+	} from '@/api/doctorOrder.js'
+	import {
+		getMenu,
+		getCanvas,
+		getIndexData,
+		getTuiDoctor,
+		getTuiArticle,
+		getTuiDoctorOrder,
+		getCartCount
+	} from '@/api/index'
+	import {
+		getDoctorArticleList
+	} from '@/api/doctorArticle.js'
+	import {
+		getArticleList
+	} from '@/api/article.js'
+	import {
+		getStoreConfig
+	} from '@/api/common'
+	import tabBg from "@/static/images/tab_bg.png"
+	import freeAudio from '@/components/chengpeng-audio/free-audio.vue'
+	import Menu from '@/components/Menu.vue'
+	import HotProduct from './components/HotProduct.vue'
+	import NewProduct from './components/NewProduct.vue'
+	// import TuiProduct from '@/components/tuiProduct.vue'
+	import {
+		getUserInfo,
+		bindPromoter
+	} from '@/api/user'
+	export default {
+		components: {
+			// zModal,
+			freeAudio,
+			Menu,
+			HotProduct,
+			NewProduct
+		},
+		data() {
+			return {
+				btnGroup: [{
+					text: '取消',
+					color: '#FFFFFF',
+					bgColor: '#999999',
+					width: '150rpx',
+					height: '80rpx',
+					shape: 'fillet',
+					eventName: 'cancle'
+				}, {
+					text: '确定',
+					color: '#FFFFFF',
+					bgColor: '#0bb3f2',
+					width: '150rpx',
+					height: '80rpx',
+					shape: 'fillet',
+					eventName: 'sure'
+				}],
+				tuiModalControl: false,
+				activity: null,
+				activityShow: false,
+				newProductList: [],
+				hotProductList: [],
+				tuiProductList: [],
+				menus: [],
+				canvas: [],
+				allDoctorTitle: "全部医生",
+				topLen: 0,
+				deptId: 0,
+				depts: [],
+				docTab: 1,
+				top: 0,
+				cartCount: 0,
+				doctorOrderList: [],
+				orderType: 0,
+				cateId: null,
+				articleList: [],
+				advList: [],
+				doctorList: [],
+				articleCateList: [],
+				doctocArticles: [], //养生讲堂
+				articles: [], //养生干货
+				livetabList: [{
+						name: '养生讲堂'
+					},
+					{
+						name: '健康管理'
+					},
+					{
+						name: '养生滋补'
+					}
+				], //养生讲堂TAB
+				articletabList: [{
+						name: '健康案例分享'
+					},
+					{
+						name: '药事服务'
+					}
+				], //文章TAB
+				// 状态栏的高度
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				tabBg: tabBg, // tab切换背景
+				// 问诊案例类型
+				orderTypes: [{
+					name: '全部',
+					id: 0,
+				}, {
+					name: '图文',
+					id: 1,
+				}, {
+					name: '语音',
+					id: 2,
+				}],
+				// 限时消息是否显示
+				messageShow: true,
+				yangshengs: [{
+						id: "1",
+						title: "药膳食疗",
+						page: "/pages_index/index/medicatedFoodList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3cfbd47911cf4753aa9497eac500728d.png"
+					},
+					{
+						id: "2",
+						title: "穴位保健",
+						page: "/pages_index/index/vesselList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e93536a9dc1a4f8ca09545097b12fdea.png"
+					},
+					{
+						id: "3",
+						title: "特供中药",
+						page: "/pages_index/index/questionsList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e896972bd56f4e358188af36f2c5af42.png"
+					},
+					{
+						id: "4",
+						title: "营养特医",
+						page: "/pages_index/index/diseaseList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/d6f1851cccae414b8baf2ba07782f91b.png"
+					},
+					{
+						id: "5",
+						title: "古方精方",
+						page: "/pages_index/index/chineseMedicineList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/ff43572d0d004285b5a3b0ef2663c471.png"
+					},
+					{
+						id: "6",
+						title: "健康案例",
+						page: "/pages_index/index/famousPrescribeList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/45db770e58c34963b0d2ba24a958b617.png"
+					},
+					{
+						id: "7",
+						title: "中西药房",
+						page: "/pages_index/index/doctorArticleList",
+						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e793942797b24035b51f94d894bdfa0b.png"
+					},
+					{
+						id: "8",
+						title: "更多",
+						page: "",
+						icon: "/static/images/ysyd_more_icon.png"
+					}
+				],
+			}
+			this.getStoreActivity();
+		},
+		onLoad(option) {
+			if (option.userCode != null) {
+				uni.setStorageSync('userCode', option.userCode);
+				if (this.utils.checkLoginState()) {
+					this.getUserInfo();
+				}
+			}
+			if (option.hasOwnProperty('q') && option.q) {
+				// 通过下面这步解码,可以拿到url的值
+				const url = decodeURIComponent(option.q)
+				this.url = url;
+				// // 对url中携带的参数提取处理
+				const obj = this.utils.urlToObj(url)
+				uni.setStorageSync('userCode', obj.userCode);
+				if (this.utils.checkLoginState()) {
+					this.getUserInfo();
+				}
+			}
+			this.getStoreActivity()
+		},
+		// 暂停所有音频(一般用于页面切换时停止正在播放的音频)
+		onUnload() { //普通页面在 onUnload 生命周期中执行
+			uni.$emit('stop')
+		},
+		onHide() { //tabBar页面在onHide生命周期中执行
+			uni.$emit('stop')
+		},
+		onPageScroll(e) {
+			//console.log(e)
+			this.top = e.scrollTop;
+		},
+		mounted() {
+			//this.getDepartmentList();
+		},
+		onShareAppMessage(res) {
+			return {
+				title: '壹柒玖康养集团-您的专属健康解决方案',
+				path: `/pages/common/launch`,
+				imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+		},
+		onReachBottom() {
+			console.log("onReachBottom")
+			// this.$refs.tuiProduct.getTuiProducts();
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: '壹柒玖康养集团-您的专属健康解决方案',
+				query: '', //页面参数
+				imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+		},
+		computed: {
+			// 计算属性的 getter
+			bgColor: function() {
+				var top = this.top / 30;
+				return 'rgba(11,179,242, ' + top + ')';
+			},
+		},
+		onShow() {
+			this.getMenu();
+			this.getIndexData()
+			//this.getTuiDoctorOrder();
+			// console.log(uni.getStorageSync('isLocation'))
+			// if(uni.getStorageSync('isLocation')==""){
+			// 	this.getLocation();
+			// }
+			if (this.utils.checkLoginState()) {
+				this.getCartCount();
+			}
+			this.getStoreConfig();
+			//this.getTuiDoctor()
+			// this.getCanvas();
+			this.getDoctorArticleList();
+			this.getArticleList();
+		},
+		methods: {
+			getUserInfo() {
+				getUserInfo().then(
+					res => {
+						if (res.code == 200) {
+							if (res.user != null) {
+								if (res.user.isPromoter == null || res.user.isPromoter == 0) {
+									this.tuiModalControl = true
+								}
+							}
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			cancleTui(e) {
+				this.tuiModalControl = false
+			},
+			submitTui(e) {
+				console.log(e)
+				// uni.navigateTo({
+				// 	url: '/pages_company/distribution'
+				// })
+				if (e.inputText == null || e.inputText == "") {
+					uni.showToast({
+						icon: 'none',
+						title: "请输入邀请码",
+					});
+					return;
+				}
+				var data = {
+					userCode: e.inputText
+				};
+				bindPromoter(data).then(
+					res => {
+						if (res.code == 200) {
+							uni.showToast({
+								icon: 'none',
+								title: res.msg,
+							});
+							this.tuiModalControl = false
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+
+			},
+			bindload: function(detail) {},
+			binderror: function(detail) {},
+			closeActivity() {
+				this.activityShow = false;
+				// uni.setStorageSync(this.activity.activityId,null);
+			},
+			getStoreActivity() {
+				let data = {}
+				getStoreActivity(data).then(res => {
+					this.activity = res.activity;
+					if (this.activity != null) {
+						// if(uni.getStorageSync(this.activity.activityId)!=null)
+						// {
+						// 	uni.setStorageSync(this.activity.activityId,1);
+						// 	this.activityShow=true;
+						// }
+						// else{
+						// 	this.activityShow=false;
+						// }
+						this.activityShow = true;
+					} else {
+						this.activityShow = false;
+					}
+				})
+			},
+			showActivity() {
+				this.activityShow = false;
+				uni.navigateTo({
+					url: '/pages_shopping/shopping/activityDetails?activityId=' + this.activity.activityId
+				})
+			},
+			menuClick(item) {
+				if (item.linkType == 1) {
+					if (item.linkUrl == "/pages/shopping/index") {
+						uni.switchTab({
+							url: item.linkUrl
+						})
+					} else if (item.linkUrl == "/pages/healthy/index") {
+						uni.switchTab({
+							url: item.linkUrl
+						})
+					} else {
+
+						uni.navigateTo({
+							url: item.linkUrl
+						})
+					}
+
+				} else if (item.linkType == 0) {
+					uni.showToast({
+						icon: 'none',
+						title: "开发中...",
+					});
+				}
+			},
+			goDev() {
+				uni.showToast({
+					icon: 'none',
+					title: "开发中...",
+				});
+			},
+			//养生讲堂等直播tab
+			selectlivetab(item) {
+				// console.log('item', item);
+			},
+			// 健康案例分享等文章tab
+			selectarticletab(item) {
+				// console.log('item', item);
+			},
+			handleAdvClick(item) {
+				console.log(item);
+				if (item.showType == 1) {
+					uni.setStorageSync('url', item.advUrl);
+					uni.navigateTo({
+						url: "h5"
+					})
+				} else if (item.showType == 2) {
+					uni.navigateTo({
+						url: item.advUrl
+					})
+				} else if (item.showType == 3) {
+					uni.setStorageSync('content', item.content);
+					uni.navigateTo({
+						url: "content"
+					})
+				}
+
+			},
+			deptChange(item) {
+				this.deptId = item.departmentId;
+				this.getTuiDoctor();
+			},
+			getMenu() {
+				getMenu().then(res => {
+					console.log(res)
+					if (res.code == 200) {
+						this.menus = res.data
+					} else {
+
+					}
+				});
+			},
+			getCanvas() {
+				getCanvas().then(res => {
+					if (res.code == 200) {
+						console.log(res.data)
+						this.canvas = JSON.parse(res.data.json)
+					}
+				});
+			},
+			getDepartmentList() {
+				this.depts = [];
+				getDepartmentList().then(res => {
+					if (res.code == 200) {
+						var allDept = {
+							departmentId: 0,
+							departmentName: "全部"
+						}
+						this.depts.push(allDept);
+						this.depts = this.depts.concat(res.data);
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			getTuiDoctor() {
+				let data = {
+					departmentId: this.deptId,
+					doctorType: this.docTab
+				};
+				getTuiDoctor(data).then(
+					res => {
+						if (res.code == 200) {
+							this.doctorList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			docTabChange(val) {
+				if (val == 1) {
+					this.allDoctorTitle = "全部医师"
+				}
+				if (val == 2) {
+					this.allDoctorTitle = "全部药师"
+				}
+				if (val == 3) {
+					this.allDoctorTitle = "全部营养师"
+				}
+				this.docTab = val;
+				this.getTuiDoctor();
+			},
+			showImg(urls) {
+				var imgArr = urls.split(',');
+				//预览图片
+				uni.previewImage({
+					urls: imgArr,
+					current: imgArr[0]
+				});
+			},
+			getStoreConfig() {
+				getStoreConfig().then(
+					res => {
+						if (res.code == 200) {
+							uni.setStorageSync('config', JSON.stringify(res.data));
+						}
+					},
+					rej => {}
+				);
+
+			},
+			goAuthUrl(url) {
+				this.utils.isLogin().then(res => {
+					if (res) {
+						uni.navigateTo({
+							url: url
+						})
+					}
+				})
+			},
+			// 跳转页面
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			getLocation() {
+				var that = this;
+				uni.authorize({
+					scope: 'scope.userLocation',
+					success() {
+						uni.getLocation({
+							type: 'gcj02', //腾讯地图使用gcj02获取位置坐标
+							success: function(res) {
+								uni.setStorageSync('isLocation', 1);
+								uni.setStorageSync('lng', res.longitude);
+								uni.setStorageSync('lat', res.latitude);
+							},
+						})
+					},
+					fail(err) {
+						console.log(err)
+					}
+				})
+			},
+			getIndexData() {
+				let data = {};
+				getIndexData(data).then(
+					res => {
+						if (res.code == 200) {
+							this.advList = res.data.advList;
+							this.articleCateList = res.data.articleCateList;
+							if (this.articleCateList != null && this.articleCateList.length > 0) {
+								this.cateId = this.articleCateList[0].cateId;
+								this.getTuiArticle()
+							}
+							this.tuiProductList = res.data.tuiProductList
+							this.newProductList = res.data.newProductList
+							this.hotProductList = res.data.hotProductList
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getCartCount() {
+				this.utils.isLogin().then(res => {
+					if (res) {
+						getCartCount().then(
+							cartRes => {
+								if (cartRes.code == 200) {
+									this.cartCount = cartRes.data;
+								}
+							},
+							rej => {}
+						);
+					}
+				})
+			},
+			getTuiArticle() {
+				let data = {
+					cateId: this.cateId
+				};
+				getTuiArticle(data).then(
+					res => {
+						if (res.code == 200) {
+							this.articleList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getTuiDoctorOrder() {
+				let data = {
+					orderType: this.orderType
+				};
+				getTuiDoctorOrder(data).then(
+					res => {
+						if (res.code == 200) {
+							this.doctorOrderList = res.data;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			showArticle(item) {
+				uni.navigateTo({
+					url: '../healthy/detail?articleId=' + item.articleId
+				})
+			},
+			showProduct(item) {
+				uni.navigateTo({
+					url: '../shopping/productDetails?productId=' + item.productId
+				})
+			},
+			// 顶部搜索
+			toSearch() {
+				uni.navigateTo({
+					url: './productSearch'
+				})
+			},
+			// 健康知识选中
+			articleCateChange(item) {
+				this.cateId = item.cateId;
+				this.getTuiArticle();
+			},
+			// 问诊案例选中
+			orderTypeChange(item) {
+				this.orderType = item.id;
+				console.log(this.orderType)
+				this.getTuiDoctorOrder();
+			},
+			// 关闭限时消息
+			closeMsg() {
+				this.messageShow = false
+			},
+			// 查看全部
+			viewAll(url) {
+				uni.navigateTo({
+					url: '/pages/home/' + url,
+				});
+			},
+			shopDoctor(item) {
+				console.log(item);
+				uni.navigateTo({
+					url: "/pages_doctor/doctorDetail?doctorId=" + item.doctorId
+				})
+			},
+			switchTo(url) {
+				uni.switchTab({
+					url: url
+				})
+				return
+			},
+			yangshengClick(item) {
+				if (item.page == "") {
+					uni.showToast({
+						icon: "none",
+						title: '暂无更多'
+					})
+					return;
+				}
+				uni.navigateTo({
+					url: item.page
+				})
+			},
+			// 在线问诊
+			openIm() {
+				uni.navigateTo({
+					url: '/pages_doctor/doctorOrderIM?orderId=10'
+				})
+			},
+			getDoctorArticleList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					pageNum: 1,
+					pageSize: 10
+				};
+				getDoctorArticleList(data).then(res => {
+					if (res.code == 200) {
+						this.doctocArticles = res.data.list;
+					}
+				});
+			},
+			getArticleList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					isTui: 1,
+					pageNum: 1,
+					pageSize: 10,
+				};
+				getArticleList(data).then(res => {
+					if (res.code == 200) {
+						this.articles = res.data.list;
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.ellipsis1 {
+	    overflow: hidden;
+	    text-overflow: ellipsis;
+	    white-space: nowrap;
+	}
+	.fixed-top-box {
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 1000;
+		transition: all 0.5s;
+		background-color: #0bb3f2;
+
+		&.show-back {
+			// background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+		}
+
+		.status_bar {
+
+			width: 100%;
+		}
+	}
+
+	.content {
+		width: 100%;
+		background: #EFF3F7;
+		position: relative;
+
+		.bg {
+			width: 100%;
+			height: 380rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+		}
+
+		.top-inner {
+			width: 100%;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 5;
+
+			.top-title {
+				height: 88upx;
+				line-height: 88upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-start;
+
+				.name {
+					font-size: 42upx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #FFFFFF;
+					padding-left: 41upx;
+				}
+
+				.dot {
+					margin: 0upx 10upx;
+					font-size: 28upx;
+					color: #FFFFFF;
+					opacity: 0.5;
+				}
+
+				.sub-name {
+					font-size: 30upx;
+					font-family: Source Han Sans CN;
+					color: #FFFFFF;
+				}
+
+
+			}
+
+			.func-cont {
+				box-sizing: border-box;
+				display: flex;
+				align-items: center;
+				padding: 30upx 20upx 30upx 20upx;
+
+				.search-cont {
+					box-sizing: border-box;
+					display: flex;
+					align-items: center;
+					width: 552upx;
+					height: 72upx;
+					background: #FFFFFF;
+					border-radius: 36upx;
+					padding: 0 30upx;
+
+					.icon-search {
+						width: 28upx;
+						height: 28upx;
+						margin-right: 20upx;
+					}
+
+					input {
+						height: 60upx;
+						line-height: 60upx;
+						flex: 1;
+					}
+				}
+
+				;
+				;
+
+				v-deep.uni-badge {
+					border: none;
+					background-color: #FF3636;
+					font-family: Roboto;
+				}
+
+				.img-item {
+					width: 44upx;
+					height: 44upx;
+					margin-left: 30upx;
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+			}
+
+			.tips {
+				margin: 0upx 20rpx 30rpx;
+				height: 40upx;
+				line-height: 40upx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.left {
+					font-size: 30upx;
+					color: #FFFFFF;
+				}
+
+				.right {
+					padding: 5upx 20rpx;
+					font-size: 24upx;
+					color: #FFFFFF;
+					background-color: #0bb3f2;
+					border-radius: 50rpx;
+				}
+			}
+		}
+
+		.banner-box {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+
+			.inner {
+				width: 702rpx;
+				height: 228rpx;
+				border-radius: 10upx;
+				overflow: hidden;
+
+				.swiper,
+				.swiper-item,
+				.swiper-item image {
+					width: 702rpx;
+					height: 228rpx;
+				}
+
+			}
+		}
+
+		.menu-content {
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			margin: 20rpx 24rpx;
+			overflow: hidden;
+			padding: 30upx 0;
+			background-color: #ffffff;
+		}
+
+		.menu-box {
+			display: flex;
+			align-items: center;
+			background-color: #FFFFFF;
+			padding-top: 20rpx;
+			border-radius: 12rpx;
+		}
+
+		.online-inquiry {
+			box-sizing: border-box;
+			width: 100%;
+			height: 170upx;
+			padding: 0 20upx;
+			margin-top: 20rpx;
+			// background: linear-gradient(180deg, rgba(255, 255, 255, 0.38) 62%, rgba(255, 255, 255, 0) 100%);
+			display: flex;
+			justify-content: space-between;
+
+			.item {
+				// width: 46.13%;
+				width: 346upx;
+				height: 190upx;
+				position: relative;
+
+				.bg-img,
+				.inner {
+					width: 100%;
+					height: 100%;
+					position: absolute;
+					top: 0;
+					left: 0;
+					z-index: 1;
+					border-radius: 12rpx;
+				}
+
+				.inner {
+					box-sizing: border-box;
+					z-index: 2;
+					display: flex;
+					flex-direction: column;
+					justify-content: center;
+					padding-left: 32upx;
+
+					.title {
+						font-size: 32upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						margin-bottom: 20upx;
+						font-weight: bold;
+					}
+
+					.sub-title {
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #898E91;
+					}
+
+					image {
+						width: 80upx;
+						height: 90upx;
+						position: absolute;
+						right: 7upx;
+						bottom: 7upx;
+					}
+				}
+			}
+		}
+
+		.index-cont {
+			box-sizing: border-box;
+			// padding: 0 20upx 120rpx;
+             padding: 0 24upx 20upx;
+			.pub-item {
+				background: #FFFFFF;
+				border-radius: 16upx;
+				margin-bottom: 20upx;
+
+				.tabs {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					height: 110rpx;
+					background-color: #F0F3F4;
+
+					.tab {
+						height: 110rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						position: relative;
+						flex: 1;
+
+						.img {
+							z-index: 1;
+							position: absolute;
+							top: 0rpx;
+							left: 0rpx;
+							width: 100%;
+							height: 100%;
+						}
+
+						.inner {
+							z-index: 2;
+
+							.title {
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: bold;
+								color: #666666;
+							}
+
+							.active {
+								color: #0bb3f2;
+							}
+						}
+
+					}
+
+
+				}
+
+				.pub-title-box {
+					box-sizing: border-box;
+					padding: 36upx 30upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+
+					.left {
+						font-size: 32upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+					}
+
+					.right {
+						display: flex;
+						align-items: center;
+						justify-content: center;
+
+						.text {
+							font-size: 24rpx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							margin-right: 10upx;
+						}
+
+						image {
+							width: 14upx;
+							height: 24upx;
+						}
+					}
+
+				}
+
+				.doc-tab-box {
+					padding: 14rpx 30rpx 0rpx 30rpx;
+					position: relative;
+
+					.tab-inner {
+						padding: 14upx 0 30upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						font-size: 28upx;
+						white-space: nowrap;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						margin-right: 40upx;
+						position: relative;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						&.active {
+							font-weight: bold;
+							color: #333333;
+						}
+
+						&.cases {
+							margin-right: 60upx;
+						}
+
+						.text {
+							position: relative;
+							z-index: 1;
+						}
+
+						.tab-bg {
+							width: 72upx;
+							height: 28upx;
+							position: absolute;
+							top: 17upx;
+							left: 50%;
+							transform: translateX(-36upx);
+							z-index: -1;
+						}
+					}
+
+					.right-mask {
+						width: 56upx;
+						height: 34upx;
+						position: absolute;
+						top: 25upx;
+						right: 0upx;
+						z-index: 1;
+					}
+				}
+
+				.doc-list {
+					padding: 20upx;
+
+					.item {
+						box-sizing: border-box;
+						background: #FFFFFF;
+						// border-radius: 16upx;
+						display: flex;
+						border-bottom: 1px solid #F0F0F0;
+						margin-bottom: 30rpx;
+
+						.head-box {
+							width: 120upx;
+							height: 120upx;
+							background: #EDF1F4;
+							border-radius: 50%;
+							overflow: hidden;
+							margin-right: 30upx;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+
+						.info {
+							width: calc(100% - 150upx);
+
+							.top {
+								display: flex;
+								align-items: center;
+								font-family: PingFang SC;
+								line-height: 1;
+
+								.name {
+									font-size: 34upx;
+									font-weight: bold;
+									color: #111111;
+								}
+
+								.line {
+									width: 1px;
+									height: 26upx;
+									background: #DDDDDD;
+									margin: 0 20upx;
+								}
+
+								.other {
+									font-size: 28upx;
+									font-weight: 500;
+									color: #333333;
+								}
+							}
+
+							.unit-box {
+								display: flex;
+								margin-top: 24upx;
+
+								.level {
+									padding: 0 10upx;
+									height: 30upx;
+									line-height: 30upx;
+									font-size: 22upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #FFFFFF;
+									background: #0bb3f2;
+									border-radius: 10upx 4upx 10upx 4upx;
+									margin-right: 12upx;
+								}
+
+								.name {
+									font-size: 28upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #333333;
+									line-height: 30upx;
+								}
+							}
+
+							.expertise {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #666666;
+								line-height: 42upx;
+								margin: 22upx 0 26upx;
+							}
+
+							.rate-box {
+								display: flex;
+								align-items: center;
+
+								.star {
+									display: flex;
+									align-items: center;
+
+									image {
+										width: 22upx;
+										height: 22upx;
+										margin-right: 10upx;
+									}
+
+									text {
+										font-size: 26upx;
+										font-family: PingFang SC;
+										font-weight: bold;
+										color: #CEA764;
+										line-height: 1;
+									}
+								}
+
+								.line {
+									width: 1px;
+									height: 20upx;
+									background: #DDDDDD;
+									margin: 0 20upx;
+								}
+
+								.num-box {
+									display: flex;
+									align-items: center;
+									font-family: PingFang SC;
+
+									.label {
+										font-size: 24upx;
+										font-weight: 500;
+										color: #999999;
+										line-height: 1;
+										margin-right: 7px;
+									}
+
+									.num {
+										font-size: 26upx;
+										font-weight: bold;
+										color: #CEA764;
+										line-height: 1;
+									}
+								}
+							}
+
+							.price-box {
+								display: flex;
+								align-items: center;
+								margin-top: 38upx;
+
+								.btn-item {
+									display: flex;
+									align-items: center;
+									justify-content: center;
+									width: 164upx;
+									height: 56upx;
+									line-height: 56upx;
+									border: 1px solid rgba(43, 199, 185, 0.5);
+									border-radius: 28upx;
+									font-family: PingFang SC;
+									margin-right: 30upx;
+
+									&:last-child {
+										margin-right: 0;
+									}
+
+									.label {
+										font-size: 26upx;
+										font-weight: 500;
+										color: #0bb3f2;
+										margin-right: 5upx;
+									}
+
+									.num {
+										font-size: 28upx;
+										font-weight: bold;
+										color: #0bb3f2;
+									}
+								}
+							}
+						}
+					}
+
+					.item:last-child {
+						border-bottom: none;
+						margin-bottom: 0rpx;
+					}
+
+					.bottom-title {
+						height: 50rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						font-size: 26rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #0bb3f2;
+
+						image {
+							margin-left: 8rpx;
+							width: 14rpx;
+							height: 24rpx;
+						}
+					}
+				}
+
+				// 医师团队
+				.doc-cont {
+					box-sizing: border-box;
+					padding: 0 30upx;
+
+					.inner {
+						padding: 4upx 0 40upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						display: flex;
+						align-items: center;
+						flex-direction: column;
+						margin-right: 40upx;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						.head-box {
+							width: 120upx;
+							height: 120upx;
+							background: #F2F5F9;
+							border-radius: 50%;
+							margin-bottom: 20upx;
+							overflow: hidden;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+
+						.name {
+							max-width: 120upx;
+							font-size: 28upx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							margin-bottom: 16upx;
+							text-align: center;
+						}
+
+						.position {
+							max-width: 120upx;
+							font-size: 24upx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							text-align: center;
+						}
+					}
+				}
+
+				.inner {
+					padding: 0 30upx;
+				}
+
+				// 健康知识
+				.pub-tab-box {
+					position: relative;
+
+					.tab-inner {
+						padding: 14upx 0 30upx;
+						display: flex;
+						overflow-x: auto;
+					}
+
+					.item {
+						font-size: 28upx;
+						white-space: nowrap;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						margin-right: 40upx;
+						position: relative;
+
+						&:last-child {
+							margin-right: 0;
+						}
+
+						&.active {
+							font-weight: bold;
+							color: #333333;
+						}
+
+						&.cases {
+							margin-right: 60upx;
+						}
+
+						.text {
+							position: relative;
+							z-index: 1;
+						}
+
+						.tab-bg {
+							width: 72upx;
+							height: 28upx;
+							position: absolute;
+							top: 17upx;
+							left: 50%;
+							transform: translateX(-36upx);
+							z-index: -1;
+						}
+					}
+
+					.right-mask {
+						width: 56upx;
+						height: 34upx;
+						position: absolute;
+						top: 14upx;
+						right: -30upx;
+						z-index: 1;
+					}
+				}
+
+				.know-list {
+					padding-right: 10upx;
+
+					.item {
+						padding: 30upx 0;
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						border-bottom: 1px solid #F0F0F0;
+
+						&:last-child {
+							border-bottom: none;
+						}
+
+						.left {
+							flex: 1;
+							padding-right: 40upx;
+							height: 190upx;
+							display: flex;
+							flex-direction: column;
+							justify-content: space-between;
+
+							.title {
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 48upx;
+							}
+
+							.info-box {
+								width: 100%;
+								display: flex;
+								align-items: center;
+								justify-content: space-between;
+
+								.readers {
+									display: flex;
+									align-items: center;
+
+									.head-box {
+										margin-right: 27upx;
+										display: flex;
+										align-items: center;
+
+										.head {
+											width: 48upx;
+											height: 48upx;
+											border-radius: 50%;
+											overflow: hidden;
+											box-shadow: 0 0 0 1px #fff;
+											margin-right: -10upx;
+
+											image {
+												width: 100%;
+												height: 100%;
+											}
+										}
+									}
+
+									.readings {
+										display: flex;
+										align-items: center;
+
+										.eye {
+											width: 26upx;
+											height: 20upx;
+											margin-right: 9upx;
+										}
+
+										.num {
+											font-size: 24upx;
+											font-family: PingFang SC;
+											font-weight: 500;
+											color: #999999;
+											line-height: 1;
+										}
+									}
+								}
+
+								.time {
+									font-size: 24upx;
+									line-height: 1;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #999999;
+								}
+							}
+						}
+
+						.right {
+							width: 250upx;
+							height: 190upx;
+							border-radius: 8upx;
+							overflow: hidden;
+
+							image {
+								width: 100%;
+								height: 100%;
+							}
+						}
+					}
+				}
+
+				// 问诊案例
+				.cases-list {
+					padding-bottom: 10upx;
+
+					.item {
+						padding: 30upx 0;
+						border-bottom: 1px solid #F0F0F0;
+
+						&:last-child {
+							border-bottom: none;
+						}
+
+						.dec-text {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 48upx;
+						}
+
+						.images-box {
+							margin-top: 10upx;
+							display: flex;
+							flex-wrap: wrap;
+
+							.img-item {
+								width: 155upx;
+								height: 155upx;
+								background: #F5F5F5;
+								border-radius: 8upx;
+								margin: 0 10upx 10upx 0;
+								overflow: hidden;
+
+								image {
+									width: 48rpx;
+									height: 48rpx;
+								}
+
+								&:nth-child(4n) {
+									margin-right: 0;
+								}
+							}
+						}
+
+						.doc-info {
+							display: flex;
+							align-items: center;
+							margin: 30upx 0 20upx;
+
+							.head {
+								width: 60upx;
+								height: 60upx;
+								background: #F2F5F9;
+								border-radius: 50%;
+								margin-right: 20upx;
+								overflow: hidden;
+
+								image {
+									width: 100%;
+									height: 100%;
+								}
+							}
+
+							.name {
+								font-size: 28upx;
+								line-height: 1;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
+
+							.line {
+								width: 1px;
+								height: 22upx;
+								background: #DDDDDD;
+								margin: 0 16upx;
+							}
+
+							.posit,
+							.address {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+							}
+						}
+
+						.answer-box {
+							width: 100%;
+							// height: 117upx;
+							background: #F5F7F7;
+							border-radius: 10upx;
+							display: flex;
+							flex-direction: column;
+							justify-content: center;
+
+							.text-inner {
+								// height: 84upx;
+								font-size: 28upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #666666;
+								line-height: 42upx;
+								padding: 15upx;
+							}
+						}
+
+						.read-box {
+							margin-top: 30upx;
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							image {
+								width: 24upx;
+								height: 19upx;
+								margin-right: 10upx;
+							}
+
+							.text {
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+							}
+						}
+					}
+				}
+			}
+
+			// 精选药品
+			.feat-title {
+				margin-top: 30upx;
+				padding: 10upx 0 33upx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+
+				image {
+					width: 37upx;
+					height: 37upx;
+					margin: 0upx 20upx;
+				}
+
+				text {
+					font-size: 36upx;
+					line-height: 1;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #111111;
+				}
+			}
+
+			.drug-list {
+				display: flex;
+				flex-wrap: wrap;
+
+				// margin-bottom: 20upx;
+				.item {
+					margin-right: 20rpx;
+					margin-bottom: 20rpx;
+					width: 345rpx;
+					background: #FFFFFF;
+					box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
+					border-radius: 20rpx;
+					overflow: hidden;
+
+					&:nth-child(2n) {
+						margin-right: 0;
+					}
+
+					.img-box {
+						width: 100%;
+						height: 334upx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.info-box {
+						box-sizing: border-box;
+						height: 182upx;
+						padding: 20upx;
+
+						.title {
+							height: 80upx;
+							font-size: 26upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							line-height: 40upx;
+						}
+
+						.price-box {
+							display: flex;
+							align-items: center;
+							margin-top: 20upx;
+
+							.now {
+								color: #FF6633;
+								display: flex;
+								align-items: flex-end;
+								margin-right: 20upx;
+								font-family: PingFang SC;
+
+								.unit {
+									font-size: 24upx;
+									line-height: 1.4;
+									margin-right: 4upx;
+								}
+
+								.num {
+									font-size: 36upx;
+									font-weight: bold;
+									line-height: 1;
+								}
+							}
+
+							.old {
+								font-size: 26upx;
+								font-family: PingFang SC;
+								text-decoration: line-through;
+								color: #BBBBBB;
+								line-height: 1;
+							}
+						}
+					}
+				}
+			}
+		}
+
+		.modules {
+			.module {
+				.depts {
+					z-index: 101;
+					margin: 40rpx 24rpx 0rpx;
+					padding: 30rpx 0;
+					background-color: #fff;
+					border-radius: 16rpx;
+
+					.title {
+						margin-left: 32rpx;
+						font-family: PingFang SC;
+						font-weight: 600;
+						font-size: 34rpx;
+						color: #222426;
+					}
+
+					.dept-box {
+						margin-top: 22rpx;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+						flex-wrap: wrap;
+
+						.dept {
+							width: 25%;
+							display: flex;
+							flex-direction: column;
+							align-items: center;
+							justify-content: center;
+							padding: 14rpx 0;
+
+							.icon {
+								width: 58rpx;
+								height: 58rpx;
+							}
+
+							.title {
+								margin-left: 0;
+								margin-top: 10rpx;
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
+						}
+					}
+
+				}
+
+				.doctor-articles {
+					z-index: 101;
+					margin: 20rpx 24rpx 0rpx;
+					padding: 32rpx;
+					background-color: #fff;
+					border-radius: 16rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								// margin-left: 10rpx;
+								width: 48rpx;
+								height: 48rpx;
+							}
+
+						}
+					}
+
+					.article-box {
+						padding: 32rpx 0rpx;
+						overflow-x: auto;
+						box-sizing: border-box;
+						display: flex;
+						align-items: center;
+						justify-content: flex-start;
+
+						.article {
+							width: 300rpx;
+							margin-right: 20rpx;
+							// background: #f9f8fe;
+							display: flex;
+							flex-direction: column;
+							align-items: flex-start;
+							justify-content: flex-start;
+
+							&:last-child {
+								margin-right: 0rpx;
+							}
+
+
+
+							.image-box {
+								width: 300rpx;
+								height: 400rpx;
+								position: relative;
+								border-radius: 20rpx;
+
+								image {
+									border-radius: 20rpx;
+									width: 300rpx;
+									height: 400rpx;
+								}
+
+								.views {
+									position: absolute;
+									top: 0rpx;
+									left: 0rpx;
+									padding: 4rpx 12rpx;
+									background: rgba(0, 0, 0, 0.25);
+									border-radius: 12rpx 0rpx 12rpx 0rpx;
+									opacity: 1;
+									font-weight: 400;
+									font-size: 20rpx;
+									color: #FFFFFF;
+									font-family: PingFang SC-Bold, PingFang SC;
+								}
+
+
+								.doctor {
+									margin: 10rpx;
+									display: flex;
+									align-items: center;
+									justify-content: flex-start;
+									position: absolute;
+									bottom: 0rpx;
+									left: 0rpx;
+
+									image {
+										border-radius: 50%;
+										width: 64rpx;
+										height: 64rpx;
+									}
+
+									.right {
+										width: 200rpx;
+										margin-left: 10rpx;
+										display: flex;
+										flex-direction: column;
+										align-items: flex-start;
+										justify-content: space-between;
+
+										.doc-name {
+											width: 200rpx;
+											font-size: 30rpx;
+											font-weight: bold;
+											font-family: PingFang SC;
+											color: #fff;
+										}
+
+										.doc-position {
+											width: 100%;
+											font-size: 28rpx;
+											font-family: PingFang SC;
+											color: #fff;
+											font-weight: bold;
+											opacity: 0.8;
+										}
+									}
+								}
+							}
+
+							.article-title-box {
+								width: 100%;
+								margin-top: 10rpx;
+								display: flex;
+								align-items: center;
+								justify-content: flex-start;
+                                height: 80upx;
+								.article-title {
+									font-size: 30rpx;
+									// font-weight: bold;
+									font-family: PingFang SC;
+									color: #2A2B2E;
+								}
+
+							}
+
+						}
+
+					}
+				}
+
+				.doctors {
+					z-index: 101;
+					margin: 20rpx 15rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #898E91;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+				}
+
+				.articles {
+					z-index: 101;
+					// margin: 20rpx 15rpx;
+					margin:  20rpx 24rpx 0rpx;
+					padding: 32rpx;
+					// box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 16rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+						    justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color:#898E91;
+								// width: calc(100% - 556rpx);
+							}
+
+							image {
+								// margin-left: 10rpx;
+							width: 48rpx;
+							height: 48rpx;
+							}
+
+						}
+					}
+
+					.article-box {
+						margin-top: 15rpx;
+						padding: 20rpx 0rpx 0rpx;
+						display: flex;
+						flex-direction: column;
+						align-items: flex-start;
+						justify-content: flex-start;
+
+						.item {
+							width: 100%;
+							margin-bottom: 32rpx;
+							display: flex;
+							align-items: flex-start;
+							justify-content: flex-start;
+                            border-bottom: 1px solid #ECECEC;
+                            padding-bottom: 32rpx;
+							&:last-child {
+								margin-bottom: 0rpx;
+								border-bottom: 0;
+							}
+
+							.left {
+								flex: 1;
+								height: 160rpx;
+								margin-right: 30rpx;
+								display: flex;
+								flex-direction: column;
+								align-items: flex-start;
+								justify-content: space-between;
+                                 width: calc(100% - 260upx);
+								.title {
+									width: 100%;
+									font-size: 28upx;
+									font-family: PingFang SC;
+									font-weight: bold;
+									color: #111111;
+								}
+
+								.txt {
+									font-family: PingFang SC, PingFang SC;
+									font-size: 26rpx;
+									color: #898E91;
+								}
+
+								.views {
+									font-size: 24upx;
+									font-family: PingFang SC;
+									color: #B2B2B2;
+								}
+							}
+
+							.right {
+								image {
+									border-radius: 10rpx;
+									width: 220rpx;
+									height: 160rpx;
+									// border: 1px solid #eeeeee;
+								}
+							}
+						}
+					}
+				}
+
+				.packages {
+					z-index: 101;
+					margin: 20rpx 15rpx;
+					padding: 20rpx;
+					box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+					background-color: #fff;
+					border-radius: 15rpx;
+
+					.title-box {
+						display: flex;
+						flex-direction: row;
+						align-items: center;
+						justify-content: space-between;
+
+						.title {
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+
+						.more {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+
+							.text {
+								font-size: 24rpx;
+								font-family: PingFang SC;
+								color: #9B9B9B;
+							}
+
+							image {
+								margin-left: 10rpx;
+								width: 15rpx;
+								height: 20rpx;
+							}
+
+						}
+					}
+
+					.package-box {
+						padding: 20rpx 0rpx 0rpx;
+						display: flex;
+						align-items: flex-start;
+						justify-content: flex-start;
+						flex-wrap: wrap;
+
+						.item {
+							width: calc(50% - 20rpx);
+							border-radius: 15rpx;
+							margin: 10rpx;
+							display: flex;
+							flex-direction: column;
+							align-items: flex-start;
+							justify-content: flex-start;
+
+							&:last-child {}
+
+							.top {
+								width: 100%;
+								height: 300rpx;
+
+								image {
+									border-radius: 15rpx 15rpx 0rpx 0rpx;
+									width: 100%;
+									height: 300rpx;
+								}
+
+							}
+
+							.bottom {
+								width: 100%;
+								margin-top: 15rpx;
+
+								.title {
+									font-weight: bold;
+									font-size: 28upx;
+									font-family: PingFang SC;
+									color: #111111;
+								}
+
+								.price-box {
+									margin-top: 10rpx;
+									display: flex;
+									align-items: center;
+									justify-content: space-between;
+									width: 100%;
+
+									.price {
+										padding: 5rpx 10rpx;
+										background-color: #0bb3f2;
+										border-radius: 30rpx;
+										font-size: 20upx;
+										font-family: PingFang SC;
+										color: #ffffff;
+									}
+
+									.count {
+										font-size: 24upx;
+										font-family: PingFang SC;
+										color: #333333;
+									}
+
+								}
+							}
+						}
+					}
+
+
+				}
+			}
+
+		}
+	}
+
+	.official-account {
+		box-sizing: border-box;
+		width: 100%;
+		height: 100upx;
+		position: fixed;
+		bottom: 30upx;
+		z-index: 99;
+		padding: 0 20upx 180rpx 20upx;
+	}
+
+	// 消息
+	.message-box {
+		box-sizing: border-box;
+		width: 100%;
+		height: 84upx;
+		background: #F3FFFD;
+		border: 1px solid #C7E9E5;
+		box-shadow: 0px 4upx 12upx 0px rgba(90, 203, 138, 0.16);
+		border-radius: 16upx;
+		position: fixed;
+		left: 50%;
+		transform: translateX(-50%);
+		bottom: 30upx;
+		z-index: 99;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 0 20upx 0 30upx;
+
+		.left {
+			flex: 1;
+			display: flex;
+			align-items: center;
+
+			image {
+				width: 24upx;
+				height: 24upx;
+				margin-right: 18upx;
+			}
+
+			.text {
+				width: 90%;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #0bb3f2;
+			}
+		}
+
+		.btn {
+			width: 100upx;
+			height: 48upx;
+			line-height: 48upx;
+			text-align: center;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			border: 1px solid #D2E6FF;
+			background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+			border-radius: 24upx;
+			margin-left: 30upx;
+		}
+
+	}
+
+	.contact-btn {
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+	}
+
+	.popup-box {
+		position: fixed;
+		top: 0;
+		right: 0;
+		left: 0;
+		bottom: 0;
+		z-index: 999;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+
+		.info-mask {
+			position: fixed;
+			top: 0;
+			right: 0;
+			bottom: 0;
+			left: 0;
+			background-color: rgba($color: #000000, $alpha: 0.5);
+			z-index: 999;
+		}
+
+		.info-form {
+			z-index: 1000;
+			width: 450rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			position: relative;
+
+			image {
+				width: 100%;
+			}
+		}
+	}
+</style>

+ 239 - 0
pages/home/new/articleDetails.vue

@@ -0,0 +1,239 @@
+<template>
+	<view class="content">
+		<view class="detail-cont">
+			<view class="title">{{item.title}}</view>
+			<view class="info">
+				<view class="reads">阅读数:{{item.views}}</view>
+				<view class="time">{{item.publishTime}}</view>
+			</view>
+			<!-- 正文 -->
+			<view class="full-text">
+				<view v-html="item.contents"></view>
+			</view>
+		</view>
+		
+		<!-- 咨询按钮 -->
+		<view class="inquiry">
+			<view class="content">
+				<image src="/static/images/consult.png" mode=""></image>
+				<text class="text">咨询</text>
+				<button class="contact-btn" open-type="contact"></button>
+			</view>
+			
+		</view>
+	</view> 
+</template>
+
+<script>
+	import { getArticleByArticleId } from '@/api/article'
+	export default {
+		data() {
+			return {
+				articleId:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.articleId=option.articleId;
+		},
+		onShow() {
+			this.getArticleById();
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			return {
+				title: this.item.title,
+				path: '/pages_index/articleDetails?articleId='+this.articleId,
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: this.item.title,
+				query:'articleId='+this.articleId,//页面参数
+			}
+			
+		},
+		methods:{
+			getArticleById(){
+				let data = {articleId:this.articleId};
+				getArticleByArticleId(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+	}
+	.detail-cont{
+		flex: 1;
+		padding: 40upx;
+		overflow-y: auto;
+		.title{
+			font-size: 40upx;
+			font-family: PingFang SC;
+			// font-weight: bold;
+			color: #222222;
+			line-height: 70upx;
+		}
+		.info{
+			display: flex;
+			align-items: center;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+			line-height: 48upx;
+			margin: 23upx 0;
+			.reads{
+				margin-right: 30upx;
+			}
+		}
+		.full-text{
+			font-size: 36upx;
+			font-family: PingFang SC;
+			// font-weight: 500;
+			color: #222222;
+			line-height: 60upx;
+		}
+	}
+	.recent-reads{
+		flex-shrink: 0;
+		box-sizing: border-box;
+		height: 121upx;
+		background: #FFFFFF;
+		border-top: 1px solid #F0F0F0;
+		padding: 0 40upx 0 37upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.left{
+			display: flex;
+			align-items: center;
+			.label{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+				margin-right: 20upx;
+			}
+			.peop-box{
+				display: flex;
+				align-items: center;
+				.head-box{
+					margin-right: 28upx;
+					display: flex;
+					align-items: center;
+					.head{
+						width: 48upx;
+						height: 48upx;
+						border-radius: 50%;
+						overflow: hidden;
+						box-shadow: 0 0 0 1px #fff;
+						margin-right: -10upx;
+						image{
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+				.arrow{
+					width: 13upx;
+					height: 23upx;
+				}
+			}
+		}
+		.share-btn{
+			position: relative;
+			width: 240upx;
+			height: 80upx;
+			line-height: 80upx;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			background: #0bb3f2;
+			border-radius: 40upx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			image{
+				width: 32upx;
+				height: 32upx;
+				margin-right: 15upx;
+			}
+			.share{
+				position: absolute;
+				width: 100%;
+				height: 100%;
+				opacity: 0;
+			}
+		}
+	}
+	.inquiry{
+		width: 131upx;
+		height: 131upx;
+		position: fixed;
+		right: 22upx;
+		bottom: 193upx;
+		z-index: 99;
+		
+		.content{
+			position: relative;
+			image{
+				width: 100%;
+				height: 100%;
+				position: absolute;
+				top: 0;
+				left: 0;
+				z-index: 9;
+			}
+			.text{
+				position: absolute;
+				top: 70upx;
+				left: 50%;
+				transform: translateX(-50%);
+				z-index: 10;
+				font-size: 22upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 1;
+			}
+			 
+		}
+		
+		
+	}
+	.contact-btn{
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+		z-index: 9999;
+	}
+</style>

+ 317 - 0
pages/home/new/articleList.vue

@@ -0,0 +1,317 @@
+<template>
+	<view>
+		<view class="top-content">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="cate-list">
+				<!-- 关键字列表 -->
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in cates" :key="index" :class="cateId == item.cateId?'item active':'item'" @click="choseCate(item)">
+							{{ item.cateName }}
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+		<mescroll-body  top="192rpx"  ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="article-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="left">
+						<view class="title ellipsis2">{{ item.title }}</view>
+						<view class="info-box">
+							<view class="readers">
+								<view class="readings">
+									<image class="eye" src="/static/images/eye.png" ></image>
+									<text class="num">{{item.views}}</text>
+								</view>
+							</view>
+							<view class="time">{{item.publishTime}}</view>
+						</view>
+					</view>
+					<view class="right">
+						<image :src="item.imageUrl" mode="aspectFill"></image>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+		
+	</view>
+</template>
+
+<script>
+	import {getArticleList,getArticleCateList} from '@/api/article.js'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				cates:[],
+				cateId:0,
+				keyword: '',
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll:false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore:"已经到底了",
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: []
+			};
+		},
+		onShow() {
+			this.getArticleCateList();
+		},
+		methods:{
+			doSearch(){
+				this.mescroll.resetUpScroll()
+			},
+			getArticleCateList(){
+				var that=this;
+				let data = {};
+				getArticleCateList(data).then(
+					res => {
+						if(res.code==200){
+							this.cates=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					keyword:this.keyword,
+					cateId:this.cateId,
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				getArticleList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 关键词选择
+			choseCate(item) {
+				this.cateId = item.cateId;
+				this.mescroll.resetUpScroll()
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './articleDetails?articleId=' + item.articleId
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.top-content{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.top-title{
+		height: 88upx;
+		line-height: 88upx;
+		font-size: 42upx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41upx;
+		background-color: #FFFFFF;
+	}
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+	.cate-list{
+		box-sizing: border-box;
+		background: #fff;
+		padding: 10upx 27upx;
+		height: 100upx;
+		.inner{
+			display: flex;
+		}
+		.item{
+			flex-shrink: 0;
+			padding: 0 24upx;
+			height: 64upx;
+			line-height: 64upx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0bb3f2;
+			background: #ffffff;
+			border: 1px solid #0bb3f2;
+			border-radius: 32upx;
+			margin: 0 20upx 20upx 0;
+			&.active{
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border: 1px solid #0bb3f2;
+			}
+		}
+	}
+	.article-list{
+		margin-top: 20upx;
+		padding: 0 10upx;
+		.item{
+			width: 100%;
+			box-sizing: border-box;
+			height: 271upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			padding: 40upx 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+			.left{
+				flex: 1;
+				padding-right: 40upx;
+				height: 190upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 48upx;
+				}
+				.info-box{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.readers{
+						display: flex;
+						align-items: center;
+						.head-box{
+							margin-right: 27upx;
+							display: flex;
+							align-items: center;
+							.head{
+								width: 48upx;
+								height: 48upx;
+								border-radius: 50%;
+								overflow: hidden;
+								box-shadow: 0 0 0 1px #fff;
+								margin-right: -10upx;
+								image{
+									width: 100%;
+									height: 100%;
+								}
+							}
+						}
+						.readings{
+							display: flex;
+							align-items: center;
+							.eye{
+								width: 26upx;
+								height: 20upx;
+								margin-right: 9upx;
+							}
+							.num{
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+								line-height: 1;
+							}
+						}
+					}
+					.time{
+						font-size: 24upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+					}
+				}
+			}
+			.right{
+				width: 250upx;
+				height: 190upx;
+				border-radius: 8upx;
+				overflow: hidden;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	}
+</style>

+ 220 - 0
pages/home/new/chineseMedicineDetails.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="content" v-if="item!=null">
+		<view class="image">
+			<image mode="aspectFill" :src="item.imgUrl"></image>
+		</view>
+		<view class="detail-cont">
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">{{item.medicineName}}</view>
+				<view class="title-py">{{item.pinyin}}</view>
+			</view>
+			<view class="desc">
+				{{item.actionTitle}}
+			</view>
+			<view class="line-h"></view>
+			<view class="tabs">
+				<view @click="tabClick(1)" :class="tabIndex==1?'tab1 active':'tab1'">
+					基本用法
+				</view>
+				<view @click="tabClick(2)"  :class="tabIndex==2?'tab2 active':'tab2'">
+					药物作用
+				</view>
+				<view @click="tabClick(3)"  :class="tabIndex==3?'tab3 active':'tab3'">
+					用药方法
+				</view>
+				<view @click="tabClick(4)"  :class="tabIndex==4?'tab4 active':'tab4'">
+					注意事项
+				</view>
+			</view>
+			<view class="content" v-if="tabIndex==1" v-html="item.descs">
+			</view>
+			<view class="content" v-if="tabIndex==2"  v-html="item.action">
+			</view>
+			<view class="content" v-if="tabIndex==3" v-html="item.usageMethod">
+			</view>
+			<view class="content" v-if="tabIndex==4" v-html="item.msg">
+			</view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getChineseMedicineById} from '@/api/index'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				articleId:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.id=option.id;
+			 
+		},
+		onShow() {
+			this.getChineseMedicineById();
+		},
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.medicineName,
+					path: '/pages_index/chineseMedicineDetails?id='+this.id,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.title,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			tabClick(index){
+				this.tabIndex=index;
+			},
+			getChineseMedicineById(){
+				let data = {id:this.id};
+				getChineseMedicineById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		image{
+			height:450rpx;
+			width:100%;
+		}
+		.detail-cont{
+			flex: 1;
+			padding: 20upx;
+			overflow-y: auto;
+			.title-box{
+				width: 100%;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.line{
+					border-radius: 5rpx;
+					width: 8rpx;
+					height:30rpx;
+					background-color: #0bb3f2;
+				}
+				.title{
+					margin-left: 15rpx;
+					font-size: 40upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333;
+				}
+				.title-py{
+					margin-left: 15rpx;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					color: #333;
+				}
+			}
+			.desc{
+				margin-top: 20rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				color: #333;
+			}
+			.line-h{
+				margin: 15rpx 0rpx;
+				border-bottom: 1rpx dashed #d4d4d4;
+			}
+			.tabs{
+				width: 100%;
+				margin: 20rpx 0rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				// border: 1rpx solid #0bb3f2;
+				border-radius: 30rpx;
+				line-height: 60rpx;
+				.tab1{
+					border-radius: 30rpx 0rpx 0rpx 30rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab2{
+					
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					
+					font-family: PingFang SC;
+				}
+				.tab3{
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab4{
+					border-radius: 0rpx 30rpx 30rpx 0rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.active{
+					background-color: #0bb3f2;
+					color: #fff;
+				}
+				 
+			}
+			 
+		}
+	}
+	
+	 
+</style>

+ 310 - 0
pages/home/new/chineseMedicineList.vue

@@ -0,0 +1,310 @@
+<template>
+	<view class="content">
+		<view class="top-box">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="tabs">
+				 <u-tabs
+				  :scrollable="false"
+				  :list="tabs"  
+				  lineColor="#0bb3f2"
+				 @change="tabChange">
+				 </u-tabs>
+			</view>
+		</view>
+		<view class="cont-box">
+			<view class="left">
+				<view class="items">
+					<view v-if="tabIndex==1" @click="flavorClick(item)" v-for="item in flavorOptions" :class="item.dictValue==flavor?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictValue==flavor"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+					<view v-if="tabIndex==2" @click="indicationClick(item)" v-for="item in indicationOptions" :class="item.dictLabel==indication?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictLabel==indication"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+					 
+				</view>
+			</view>
+			<view class="right" >
+				<view class="title">{{title}}</view>
+				<scroll-view @scrolltolower="scrolltolower" scroll-y="true"  style="height: calc(100vh - 180rpx);">
+				<view class="items">
+					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
+						<view class="r-left">{{item.medicineName}}</view>
+						<view class="r-right">
+							<image src="/static/images/fire.png"></image>
+						</view>
+					</view>
+				</view>
+				</scroll-view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getDictByKey} from '@/api/common.js'
+	import {getChineseMedicineList} from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				indication:"",
+				flavor:"",
+				vessel:"",
+				title:"",
+				pageNum:1,
+				pageSize:20,
+				flavorOptions:[],
+				indicationOptions:[],
+				tabs: [
+					{name:"按五味",id:"1"},
+					{name:"按疾病",id:"2"},
+				],
+				keyword: '',
+				dataList: []
+			};
+		},
+		onLoad() {
+			this.getDictByKey("sys_chinese_medicine_flavor");
+			this.getDictByKey("sys_indication");
+			this.getChineseMedicineList()
+		},
+		methods:{
+			scrolltolower(e){
+				this.pageNum++;
+				this.getChineseMedicineList()
+				console.log(e)
+			},
+			indicationClick(item){
+				this.flavor="";
+				this.indication=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getChineseMedicineList()
+			},
+			flavorClick(item){
+				console.log(item)
+				this.indication=""
+				this.flavor=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getChineseMedicineList()
+			},
+			getDictByKey(key){
+				var data={key:key}
+				getDictByKey(data).then(
+					res => {
+						if(res.code==200){
+							if(key=="sys_indication"){
+								this.indicationOptions=res.data;
+							}
+							if(key=="sys_chinese_medicine_flavor"){
+								this.flavorOptions=res.data;
+							}
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			tabChange(item) {
+				this.tabIndex = item.id
+				this.getChineseMedicineList()
+			},
+			doSearch(){
+				this.pageNum=1;
+				this.getChineseMedicineList()
+			},
+			getChineseMedicineList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					indication:this.indication,
+					flavor:this.flavor,
+					vessel:this.vessel,
+					keyword:this.keyword,
+					pageNum: this.pageNum,
+					pageSize: this.pageSize
+				};
+				uni.showLoading({
+					title:"加载中..."
+				})
+				getChineseMedicineList(data).then(res => {
+					uni.hideLoading()
+					if(res.code==200){
+						//设置列表数据
+						if (this.pageNum == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = [];
+					}
+				});
+			},
+			 
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './chineseMedicineDetails?id=' + item.id
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		height: 100%;
+		overflow: hidden;
+	}
+	.top-box{
+		width: 100%;
+		height: 180rpx;
+		background-color: #FFFFFF;
+		.search-cont{
+			padding: 16upx 30upx;
+			.inner{
+				box-sizing: border-box;
+				width: 100%;
+				height: 72upx;
+				background: #F7F7F7;
+				border-radius: 36upx;
+				display: flex;
+				align-items: center;
+				padding: 0 30upx;
+				.icon-search{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				input{
+					height: 60upx;
+					line-height: 60upx;
+					flex: 1;
+				}
+			}
+		}
+		.tabs{
+		}
+	}
+	.cont-box{
+		height: calc(100% - 180rpx);
+		display: flex;
+		align-items: flex-start;
+		justify-content: flex-start;
+		.left{
+			padding: 30rpx 0rpx;
+			width: 240rpx;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			.items{
+				width: 240rpx;
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: flex-start;
+				.item{
+					width: 240rpx;
+					padding: 0rpx 20rpx;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: normal;
+					color: #111111;
+					font-weight: 500;
+					line-height: 80upx;
+					.line{
+						margin-right: 15rpx;
+						border-radius: 5rpx;
+						width: 8rpx;
+						height:30rpx;
+						background-color: #0bb3f2;
+					}
+					
+				}
+				.active{
+					background-color: #fff;
+					font-weight: bold;
+					color: #0bb3f2;
+				}
+			}
+			
+		}
+		.right{
+			padding: 30rpx 15rpx;
+			background-color: #fff;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			width: calc(100% - 240rpx);
+			.title{
+				font-size: 40upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 80upx;
+			}
+			.items{
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: flex-start;
+				justify-content: flex-start;
+				.r-item{
+					line-height: 80rpx;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.r-left{
+						flex: 1;
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #080808;
+					}
+					.r-right{
+						padding: 0rpx 20rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						image{
+							width: 22rpx;
+							height:30rpx;
+						}
+					}
+					
+				}
+				 
+			}
+		}
+	}
+	 
+</style>

+ 126 - 0
pages/home/new/diseaseDetails.vue

@@ -0,0 +1,126 @@
+<template>
+	<view class="content" v-if="item!=null">
+		<view class="detail-cont">
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">疾病名称</view>
+			</view>
+			<view class="desc" v-html="item.diseaseName"></view>
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">病情症状</view>
+			</view>
+			<view class="desc" v-html="item.symptom"></view>
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">病情诊断</view>
+			</view>
+			<view class="desc" v-html="item.diagnose"></view>
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">相关检验</view>
+			</view>
+			<view class="desc" v-html="item.inspect"></view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getDiseaseById} from '@/api/disease'
+	export default {
+		data() {
+			return {
+				diseaseId:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.diseaseId=option.diseaseId;
+		},
+		onShow() {
+			this.getDiseaseById();
+		},
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.diseaseName,
+					path: '/pages_index/diseaseDetails?id='+this.diseaseId,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.diseaseName,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			getDiseaseById(){
+				let data = {diseaseId:this.diseaseId};
+				getDiseaseById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+ 
+	.content{
+	}
+	.detail-cont{
+		margin: 20rpx;
+		padding: 15rpx;
+		box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
+		background-color: #fff;
+		border-radius: 15rpx;
+		.title-box{
+			width: 100%;
+			display: flex;
+			justify-content: flex-start;
+			align-items: center;
+			.line{
+				width: 6rpx;
+				height:30rpx;
+				background-color: #0bb3f2;
+				 
+			}
+			.title{
+				margin-left: 15rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #333;
+			}
+			 
+		}
+		.desc{
+			margin-top: 15rpx;
+			margin-bottom: 15rpx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			color: #9a9a9c;
+		}
+	}
+	 
+</style>

+ 254 - 0
pages/home/new/diseaseList.vue

@@ -0,0 +1,254 @@
+<template>
+	<view>
+		<view class="top-content">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			
+			<!-- 关键字列表 -->
+			<view class="dept-list">  
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in depts" :key="index" :class="deptId == item.deptId?'item active':'item'" @click="choseDept(item)">
+							{{ item.deptName }}
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+		<mescroll-body  top="192rpx"  ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="disease-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="left">
+						<view class="title ellipsis1">{{ item.diseaseName }}</view>
+					</view>
+					<view class="right">
+						<image src="../../static/images/arrow_gray.png"></image>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import {getDiseaseList} from '@/api/disease.js'
+	import {getDepartmentList} from '@/api/department.js'
+	//import {getDepartmentList} from '@/api/doctorOrder.js'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				depts:[],
+				deptId:0,
+				keyword: '',
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll:false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore:"已经到底了",
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: []
+			};
+		},
+		onShow() {
+			this.getDepartmentList();
+		},
+		methods:{
+			doSearch(){
+				this.mescroll.resetUpScroll()
+			},
+			getDepartmentList(){
+				var that=this;
+				let data = {};
+				getDepartmentList(data).then(
+					res => {
+						if(res.code==200){
+							// var allDept={departmentId:0,departmentName:"全部"}
+							// this.depts.push(allDept);
+							// this.depts=this.depts.concat(res.data);
+							this.depts=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					keyword:this.keyword,
+					deptId:this.deptId,
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				getDiseaseList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			choseDept(item) {
+				this.deptId = item.deptId;
+				this.mescroll.resetUpScroll()
+			},
+			showDetail(item) {
+				uni.navigateTo({
+					url: './diseaseDetails?diseaseId=' + item.diseaseId
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.top-content{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.top-title{
+		height: 88upx;
+		line-height: 88upx;
+		font-size: 42upx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41upx;
+		background-color: #FFFFFF;
+	}
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+	.dept-list{
+		box-sizing: border-box;
+		background: #fff;
+		padding: 10upx 27upx;
+		height: 100upx;
+		.inner{
+			display: flex;
+		}
+		.item{
+			flex-shrink: 0;
+			padding: 0 24upx;
+			height: 64upx;
+			line-height: 64upx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0bb3f2;
+			background: #ffffff;
+			border: 1px solid #0bb3f2;
+			border-radius: 32upx;
+			margin: 0 20upx 20upx 0;
+			&.active{
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border: 1px solid #0bb3f2;
+			}
+		}
+	}
+	.disease-list{
+		margin-top: 20upx;
+		padding: 0 10upx;
+		.item{
+			box-sizing: border-box;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			padding: 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+			.left{
+				flex: 1;
+				padding-right: 40upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #111111;
+					line-height: 48upx;
+				}
+			}
+			.right{
+				image{
+					width: 30upx;
+					height: 30upx;
+				}
+			}
+		}
+	}
+</style>

+ 220 - 0
pages/home/new/famousPrescribeDetails.vue

@@ -0,0 +1,220 @@
+<template>
+	<view class="content" v-if="item!=null">
+		<view class="image">
+			<image mode="aspectFill" :src="item.imgUrl"></image>
+		</view>
+		<view class="detail-cont">
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">{{item.prescribeName}}</view>
+				<view class="title-py">{{item.pinyin}}</view>
+			</view>
+			<view class="desc">
+				{{item.actionTitle}}
+			</view>
+			<view class="line-h"></view>
+			<view class="tabs">
+				<view @click="tabClick(1)" :class="tabIndex==1?'tab1 active':'tab1'">
+					基本用法
+				</view>
+				<view @click="tabClick(2)"  :class="tabIndex==2?'tab2 active':'tab2'">
+					药物作用
+				</view>
+				<view @click="tabClick(3)"  :class="tabIndex==3?'tab3 active':'tab3'">
+					用药方法
+				</view>
+				<view @click="tabClick(4)"  :class="tabIndex==4?'tab4 active':'tab4'">
+					注意事项
+				</view>
+			</view>
+			<view class="content" v-if="tabIndex==1" v-html="item.descs">
+			</view>
+			<view class="content" v-if="tabIndex==2"  v-html="item.action">
+			</view>
+			<view class="content" v-if="tabIndex==3" v-html="item.usageMethod">
+			</view>
+			<view class="content" v-if="tabIndex==4" v-html="item.msg">
+			</view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getFamousPrescribeById} from '@/api/index'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				id:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.id=option.id;
+			 
+		},
+		onShow() {
+			this.getFamousPrescribeById();
+		},
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.prescribeName,
+					path: '/pages_index/famousPrescribeDetails?id='+this.id,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.title,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			tabClick(index){
+				this.tabIndex=index;
+			},
+			getFamousPrescribeById(){
+				let data = {id:this.id};
+				getFamousPrescribeById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		image{
+			height:450rpx;
+			width:100%;
+		}
+		.detail-cont{
+			flex: 1;
+			padding: 20upx;
+			overflow-y: auto;
+			.title-box{
+				width: 100%;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.line{
+					border-radius: 5rpx;
+					width: 8rpx;
+					height:30rpx;
+					background-color: #0bb3f2;
+				}
+				.title{
+					margin-left: 15rpx;
+					font-size: 40upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333;
+				}
+				.title-py{
+					margin-left: 15rpx;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					color: #333;
+				}
+			}
+			.desc{
+				margin-top: 20rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				color: #333;
+			}
+			.line-h{
+				margin: 15rpx 0rpx;
+				border-bottom: 1rpx dashed #d4d4d4;
+			}
+			.tabs{
+				width: 100%;
+				margin: 20rpx 0rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				// border: 1rpx solid #0bb3f2;
+				border-radius: 30rpx;
+				line-height: 60rpx;
+				.tab1{
+					border-radius: 30rpx 0rpx 0rpx 30rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab2{
+					
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					
+					font-family: PingFang SC;
+				}
+				.tab3{
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab4{
+					border-radius: 0rpx 30rpx 30rpx 0rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.active{
+					background-color: #0bb3f2;
+					color: #fff;
+				}
+				 
+			}
+			 
+		}
+	}
+	
+	 
+</style>

+ 337 - 0
pages/home/new/famousPrescribeList.vue

@@ -0,0 +1,337 @@
+<template>
+	<view class="content">
+		<view class="top-box">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="tabs">
+				 <u-tabs
+				  :scrollable="false"
+				  :list="tabs"  
+				  lineColor="#0bb3f2"
+				 @change="tabChange">
+				 </u-tabs>
+			</view>
+		</view>
+		<view class="cont-box">
+			<view class="left">
+				<view class="items">
+					<view v-if="tabIndex==1" @click="typeClick(item)" v-for="item in typeOptions" :class="item.dictValue==prescribeType?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictValue==prescribeType"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+					<view v-if="tabIndex==2" @click="indicationClick(item)" v-for="item in indicationOptions" :class="item.dictLabel==indication?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictLabel==indication"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+					<view v-if="tabIndex==3" @click="bookClick(item)" v-for="item in bookOptions" :class="item.dictLabel==belongBook?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictLabel==belongBook"></text>
+						{{  utils.subString(item.dictLabel)  }}
+					</view>
+				</view>
+			</view>
+			<view class="right" >
+				<view class="title">{{title}}</view>
+				<scroll-view @scrolltolower="scrolltolower" scroll-y="true"  style="height: calc(100vh - 180rpx);">
+				<view class="items">
+					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
+						<view class="r-left">{{item.prescribeName}}</view>
+						<view class="r-right">
+							<image src="/static/images/fire.png"></image>
+						</view>
+					</view>
+				</view>
+				</scroll-view>
+			</view>
+		</view>
+		 
+		
+	</view>
+</template>
+
+<script>
+	import {getDictByKey} from '@/api/common.js'
+	import {getFamousPrescribeList} from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				indication:"",
+				belongBook:"",
+				title:"",
+				prescribeType:0,
+				pageNum:1,
+				pageSize:20,
+				typeOptions:[],
+				bookOptions:[],
+				indicationOptions:[],
+				tabs: [
+					{name:"按类型",id:"1"},
+					{name:"按疾病",id:"2"},
+					{name:"按书籍",id:"3"}
+				],
+				keyword: '',
+				dataList: []
+			};
+		},
+		onLoad() {
+			this.getDictByKey("sys_famous_prescribe_type");
+			this.getDictByKey("sys_famous_prescribe_indication");
+			this.getDictByKey("sys_famous_prescribe_book");
+			
+		},
+		methods:{
+			scrolltolower(e){
+				this.pageNum++;
+				this.getFamousPrescribeList()
+				console.log(e)
+			},
+			typeClick(item){
+				this.indication=""
+				this.belongBook="";
+				this.prescribeType=parseInt(item.dictValue);
+				console.log(this.prescribeType)
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getFamousPrescribeList()
+			},
+			bookClick(item){
+				this.indication=""
+				this.prescribeType=0;
+				this.belongBook=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getFamousPrescribeList()
+			},
+			indicationClick(item){
+				console.log(item)
+				this.belongBook=""
+				this.prescribeType=0;
+				this.indication=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getFamousPrescribeList()
+			},
+			getDictByKey(key){
+				var data={key:key}
+				getDictByKey(data).then(
+					res => {
+						if(res.code==200){
+							if(key=="sys_famous_prescribe_type"){
+								this.typeOptions=res.data;
+								if(this.typeOptions!=null&&this.typeOptions.length>0){
+									this.typeClick(this.typeOptions[0])
+								}
+							}
+							if(key=="sys_famous_prescribe_indication"){
+								this.indicationOptions=res.data;
+								 
+							}
+							if(key=="sys_famous_prescribe_book"){
+								this.bookOptions=res.data;
+								 
+							}
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			tabChange(item) {
+				this.tabIndex = item.id
+				this.getFamousPrescribeList()
+			},
+			doSearch(){
+				this.pageNum=1;
+				this.getFamousPrescribeList()
+			},
+			getFamousPrescribeList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					indication:this.indication,
+					belongBook:this.belongBook,
+					prescribeType:this.prescribeType,
+					keyword:this.keyword,
+					pageNum: this.pageNum,
+					pageSize: this.pageSize
+				};
+				uni.showLoading({
+					title:"加载中..."
+				})
+				getFamousPrescribeList(data).then(res => {
+					uni.hideLoading()
+					if(res.code==200){
+						//设置列表数据
+						if (this.pageNum == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = [];
+					}
+				});
+			},
+			 
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './famousPrescribeDetails?id=' + item.id
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		height: 100%;
+		overflow: hidden;
+	}
+	.top-box{
+		width: 100%;
+		height: 180rpx;
+		background-color: #FFFFFF;
+		.search-cont{
+			padding: 16upx 30upx;
+			.inner{
+				box-sizing: border-box;
+				width: 100%;
+				height: 72upx;
+				background: #F7F7F7;
+				border-radius: 36upx;
+				display: flex;
+				align-items: center;
+				padding: 0 30upx;
+				.icon-search{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				input{
+					height: 60upx;
+					line-height: 60upx;
+					flex: 1;
+				}
+			}
+		}
+		.tabs{
+		}
+	}
+	.cont-box{
+		height: calc(100% - 180rpx);
+		display: flex;
+		align-items: flex-start;
+		justify-content: flex-start;
+		.left{
+			padding: 30rpx 0rpx;
+			width: 240rpx;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			.items{
+				width: 240rpx;
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: flex-start;
+				.item{
+					width: 240rpx;
+					padding: 0rpx 20rpx;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: normal;
+					color: #111111;
+					font-weight: 500;
+					line-height: 80upx;
+					.line{
+						margin-right: 15rpx;
+						border-radius: 5rpx;
+						width: 8rpx;
+						height:30rpx;
+						background-color: #0bb3f2;
+					}
+					
+				}
+				.active{
+					background-color: #fff;
+					font-weight: bold;
+					color: #0bb3f2;
+				}
+			}
+			
+		}
+		.right{
+			padding: 30rpx 15rpx;
+			background-color: #fff;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			width: calc(100% - 240rpx);
+			.title{
+				font-size: 40upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 80upx;
+			}
+			.items{
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: flex-start;
+				justify-content: flex-start;
+				.r-item{
+					line-height: 80rpx;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.r-left{
+						flex: 1;
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #080808;
+					}
+					.r-right{
+						padding: 0rpx 20rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						image{
+							width: 22rpx;
+							height:30rpx;
+						}
+					}
+					
+				}
+				 
+			}
+		}
+	}
+	 
+</style>

+ 195 - 0
pages/home/new/medicatedFoodDetails.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="content" v-if="item!=null">
+		<view class="image">
+			<image mode="aspectFill" :src="item.imgUrl"></image>
+		</view>
+		<view class="detail-cont">
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">{{item.foodName}}</view>
+				<view class="title-py">{{item.pinyin}}</view>
+			</view>
+			<view class="desc">
+				{{item.actionTitle}}
+			</view>
+			<view class="line-h"></view>
+			<view class="content"   v-html="item.descs">
+			</view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getMedicatedFoodById} from '@/api/index'
+	export default {
+		data() {
+			return {
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.id=option.id;
+			 
+		},
+		onShow() {
+			this.getMedicatedFoodById();
+		},
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.foodName,
+					path: '/pages_index/medicatedFoodDetails?id='+this.id,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.title,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			getMedicatedFoodById(){
+				let data = {id:this.id};
+				getMedicatedFoodById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		image{
+			height:450rpx;
+			width:100%;
+		}
+		.detail-cont{
+			flex: 1;
+			padding: 20upx;
+			overflow-y: auto;
+			.title-box{
+				width: 100%;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.line{
+					border-radius: 5rpx;
+					width: 8rpx;
+					height:30rpx;
+					background-color: #0bb3f2;
+				}
+				.title{
+					margin-left: 15rpx;
+					font-size: 40upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333;
+				}
+				.title-py{
+					margin-left: 15rpx;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					color: #333;
+				}
+			}
+			.desc{
+				margin-top: 20rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				color: #333;
+			}
+			.line-h{
+				margin: 15rpx 0rpx;
+				border-bottom: 1rpx dashed #d4d4d4;
+			}
+			.tabs{
+				width: 100%;
+				margin: 20rpx 0rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				// border: 1rpx solid #0bb3f2;
+				border-radius: 30rpx;
+				line-height: 60rpx;
+				.tab1{
+					border-radius: 30rpx 0rpx 0rpx 30rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab2{
+					
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					
+					font-family: PingFang SC;
+				}
+				.tab3{
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab4{
+					border-radius: 0rpx 30rpx 30rpx 0rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.active{
+					background-color: #0bb3f2;
+					color: #fff;
+				}
+				 
+			}
+			 
+		}
+	}
+	
+	 
+</style>

+ 285 - 0
pages/home/new/medicatedFoodList.vue

@@ -0,0 +1,285 @@
+<template>
+	<view>
+		<view class="top-content">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="cate-list">
+				<!-- 关键字列表 -->
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in foodOptions" :key="index" :class="food == item.dictLabel?'item active':'item'" @click="choseFood(item)">
+							{{ item.dictLabel }}
+						</view>
+					</view>
+				</scroll-view>
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in actionOptions" :key="index" :class="action == item.dictLabel?'item active':'item'" @click="choseAction(item)">
+							{{ item.dictLabel }}
+						</view>
+					</view>
+				</scroll-view>
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in indicationOptions" :key="index" :class="indication == item.dictLabel?'item active':'item'" @click="choseIndications(item)">
+							{{ item.dictLabel }}
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+		<mescroll-body  top="376rpx"  ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="article-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="top">
+						<image :src="item.imgUrl" mode="aspectFill"></image>
+					</view>
+					<view class="title ellipsis">{{ item.foodName }}</view>
+					<view class="desc ellipsis">{{ item.actionTitle }}</view>
+				</view>
+			</view>
+		</mescroll-body>
+		
+	</view>
+</template>
+
+<script>
+	import {getDictByKey} from '@/api/common.js'
+	import {getMedicatedFoodList} from '@/api/index.js'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				foodOptions:[],
+				actionOptions:[],
+				indicationOptions:[],
+				action:"",
+				food:"",
+				indications:"",
+				keyword: '',
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll:false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore:"已经到底了",
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: []
+			};
+		},
+		onShow() {
+			this.getDictByKey("sys_medicated_food");
+			this.getDictByKey("sys_medicated_food_action");
+			this.getDictByKey("sys_indication");
+			
+		},
+		methods:{
+			getDictByKey(key){
+				var data={key:key}
+				getDictByKey(data).then(
+					res => {
+						if(res.code==200){
+							if(key=="sys_medicated_food"){
+								this.foodOptions=res.data;
+							}
+							if(key=="sys_medicated_food_action"){
+								this.actionOptions=res.data;
+							}
+							if(key=="sys_indication"){
+								this.indicationOptions=res.data;
+							}
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			doSearch(){
+				this.mescroll.resetUpScroll()
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					food:this.food,
+					action:this.action,
+					indications:this.indications,
+					keyword:this.keyword,
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				getMedicatedFoodList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			choseAction(item) {
+				this.action = item.dictLabel;
+				this.mescroll.resetUpScroll()
+			},
+			choseFood(item) {
+				this.food = item.dictLabel;
+				this.mescroll.resetUpScroll()
+			},
+			choseIndications(item) {
+				this.indications = item.dictLabel;
+				this.mescroll.resetUpScroll()
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './medicatedFoodDetails?id=' + item.id
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.top-content{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+	.cate-list{
+		box-sizing: border-box;
+		background: #fff;
+		padding: 10upx 27upx;
+		.inner{
+			display: flex;
+		}
+		.item{
+			flex-shrink: 0;
+			padding: 0 24upx;
+			height: 64upx;
+			line-height: 64upx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0bb3f2;
+			background: #ffffff;
+			border: 1px solid #0bb3f2;
+			border-radius: 32upx;
+			margin: 0 20upx 20upx 0;
+			&.active{
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border: 1px solid #0bb3f2;
+			}
+		}
+	}
+	.article-list{
+		padding: 0 10upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-wrap: wrap;
+		.item{
+			width: 50%;
+			box-sizing: border-box;
+			padding: 15upx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+			.top{
+				width: 100%;
+				height: 240upx;
+				image{
+					border-radius: 20upx;
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.title{
+				text-align: center;
+				width: 100%;
+				margin-top: 15rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #111111;
+			}
+			.desc{
+				text-align: center;
+				width: 100%;
+				margin-top: 15rpx;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+			
+		}
+	}
+</style>

+ 235 - 0
pages/home/new/questionsDetails.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="content">
+		<view class="detail-cont">
+			<view class="title">{{item.title}}</view>
+			<view class="info">
+				<view class="reads">阅读数:{{item.views}}</view>
+				<view class="time">{{item.createTime}}</view>
+			</view>
+			<!-- 正文 -->
+			<view class="full-text">
+				<view v-html="item.answers"></view>
+			</view>
+		</view>
+		 
+	</view> 
+</template>
+
+<script>
+	import {getQuestionsById} from '@/api/index'
+	export default {
+		data() {
+			return {
+				id:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.id=option.id;
+			 
+		},
+		onShow() {
+			this.getQuestionsById();
+		},
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.vesselName,
+					path: '/pages_index/questionsDetails?id='+this.id,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.title,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			getQuestionsById(){
+				let data = {id:this.id};
+				getQuestionsById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+	}
+	.detail-cont{
+		flex: 1;
+		padding: 40upx;
+		overflow-y: auto;
+		.title{
+			font-size: 40upx;
+			font-family: PingFang SC;
+			// font-weight: bold;
+			color: #222222;
+			line-height: 70upx;
+		}
+		.info{
+			display: flex;
+			align-items: center;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #999999;
+			line-height: 48upx;
+			margin: 23upx 0;
+			.reads{
+				margin-right: 30upx;
+			}
+		}
+		.full-text{
+			font-size: 36upx;
+			font-family: PingFang SC;
+			// font-weight: 500;
+			color: #222222;
+			line-height: 60upx;
+		}
+	}
+	.recent-reads{
+		flex-shrink: 0;
+		box-sizing: border-box;
+		height: 121upx;
+		background: #FFFFFF;
+		border-top: 1px solid #F0F0F0;
+		padding: 0 40upx 0 37upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.left{
+			display: flex;
+			align-items: center;
+			.label{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+				margin-right: 20upx;
+			}
+			.peop-box{
+				display: flex;
+				align-items: center;
+				.head-box{
+					margin-right: 28upx;
+					display: flex;
+					align-items: center;
+					.head{
+						width: 48upx;
+						height: 48upx;
+						border-radius: 50%;
+						overflow: hidden;
+						box-shadow: 0 0 0 1px #fff;
+						margin-right: -10upx;
+						image{
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+				.arrow{
+					width: 13upx;
+					height: 23upx;
+				}
+			}
+		}
+		.share-btn{
+			position: relative;
+			width: 240upx;
+			height: 80upx;
+			line-height: 80upx;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #FFFFFF;
+			background: #0bb3f2;
+			border-radius: 40upx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			image{
+				width: 32upx;
+				height: 32upx;
+				margin-right: 15upx;
+			}
+			.share{
+				position: absolute;
+				width: 100%;
+				height: 100%;
+				opacity: 0;
+			}
+		}
+	}
+	.inquiry{
+		width: 131upx;
+		height: 131upx;
+		position: fixed;
+		right: 22upx;
+		bottom: 193upx;
+		z-index: 99;
+		
+		.content{
+			position: relative;
+			image{
+				width: 100%;
+				height: 100%;
+				position: absolute;
+				top: 0;
+				left: 0;
+				z-index: 9;
+			}
+			.text{
+				position: absolute;
+				top: 70upx;
+				left: 50%;
+				transform: translateX(-50%);
+				z-index: 10;
+				font-size: 22upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 1;
+			}
+			 
+		}
+		
+		
+	}
+	.contact-btn{
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+		z-index: 9999;
+	}
+</style>

+ 304 - 0
pages/home/new/questionsList.vue

@@ -0,0 +1,304 @@
+<template>
+	<view>
+		<view class="top-content">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入服务包搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="cate-list">
+				<!-- 关键字列表 -->
+				<scroll-view   scroll-x="true" >
+					<view class="inner">
+						<view v-for="(item,index) in typeOptions" :key="index" :class="questionsType == item.dictValue?'item active':'item'" @click="choseType(item)">
+							{{ item.dictLabel }}
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</view>
+		<mescroll-body  top="192rpx"  ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="article-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="left">
+						<view class="title ellipsis2">{{ item.title }}</view>
+						<view class="info-box">
+							<view class="readers">
+								<view class="readings">
+									<image class="eye" src="/static/images/eye.png" ></image>
+									<text class="num">{{item.views}}</text>
+								</view>
+							</view>
+							<view class="time">{{item.createTime}}</view>
+						</view>
+					</view>
+					 
+				</view>
+			</view>
+		</mescroll-body>
+		
+	</view>
+</template>
+
+<script>
+	import {getDictByKey} from '@/api/common.js'
+	import {getQuestionsList} from '@/api/index.js'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				typeOptions:[],
+				questionsType:0,
+				keyword: '',
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll:false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore:"已经到底了",
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: []
+			};
+		},
+		onShow() {
+			this.getDictByKey("sys_questions_type");
+		},
+		methods:{
+			getDictByKey(key){
+				var data={key:key}
+				getDictByKey(data).then(
+					res => {
+						if(res.code==200){
+							if(key=="sys_questions_type"){
+								this.typeOptions=res.data;
+							}
+						 
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			doSearch(){
+				this.mescroll.resetUpScroll()
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					keyword:this.keyword,
+					questionsType:this.questionsType,
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				getQuestionsList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 关键词选择
+			choseType(item) {
+				this.questionsType = item.dictValue;
+				this.mescroll.resetUpScroll()
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './questionsDetails?id=' + item.id
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.top-content{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.top-title{
+		height: 88upx;
+		line-height: 88upx;
+		font-size: 42upx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41upx;
+		background-color: #FFFFFF;
+	}
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+		}
+	}
+	.cate-list{
+		box-sizing: border-box;
+		background: #fff;
+		padding: 10upx 27upx;
+		height: 100upx;
+		.inner{
+			display: flex;
+		}
+		.item{
+			flex-shrink: 0;
+			padding: 0 24upx;
+			height: 64upx;
+			line-height: 64upx;
+			font-size: 28upx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: #0bb3f2;
+			background: #ffffff;
+			border: 1px solid #66b2ef   ;
+			border-radius: 32upx;
+			margin: 0 20upx 20upx 0;
+			&.active{
+				color: #FFFFFF;
+				background: #0bb3f2   ;
+				border: 1px solid #0bb3f2;
+			}
+		}
+	}
+	.article-list{
+		margin-top: 20upx;
+		padding: 0 10upx;
+		.item{
+			width: 100%;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			padding: 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+			.left{
+				flex: 1;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 48upx;
+				}
+				.info-box{
+					margin-top: 20rpx;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.readers{
+						display: flex;
+						align-items: center;
+						.head-box{
+							margin-right: 27upx;
+							display: flex;
+							align-items: center;
+							.head{
+								width: 48upx;
+								height: 48upx;
+								border-radius: 50%;
+								overflow: hidden;
+								box-shadow: 0 0 0 1px #fff;
+								margin-right: -10upx;
+								image{
+									width: 100%;
+									height: 100%;
+								}
+							}
+						}
+						.readings{
+							display: flex;
+							align-items: center;
+							.eye{
+								width: 26upx;
+								height: 20upx;
+								margin-right: 9upx;
+							}
+							.num{
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #999999;
+								line-height: 1;
+							}
+						}
+					}
+					.time{
+						font-size: 24upx;
+						line-height: 1;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+					}
+				}
+			}
+			 
+		}
+	}
+</style>

+ 584 - 0
pages/home/new/test.vue

@@ -0,0 +1,584 @@
+<template>
+	<view class="content">
+		<view class="patient-cont">
+			<view class="chose-patient">
+				<view class="patient-box" @click="addPatient()" v-if="patient==null">
+					<text class="patient-title">选择体验者</text>
+					<view class="right" >
+						<text class="value">请点击添加</text>
+						<image src="/static/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+				<view class="patient" @click="addPatient()" v-if="patient!=null">
+					<view  class="left">
+						<view class="name">{{patient.patientName}}</view>
+						<view class="info">
+							<text class="text" v-if="patient.sex==1">男</text>
+							<text class="text" v-if="patient.sex==2">女</text>
+							<text class="text">{{utils.getAge(patient.birthday)}}岁</text>
+							<text class="text">{{utils.parseIdCard(patient.idCard)}}</text>
+						</view>
+					</view>
+					<view class="right" >
+						<image src="/static/images/arrow_gray.png" mode=""></image>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="msg-cont">
+			<scroll-view
+				class="msg-scroll"
+				:scroll-top="scrollTop"
+				scroll-y="true"
+				:scroll-with-animation="true">
+			<view class="msgs">
+				<view class="msg-item" v-for="(item,index) in msgs" >
+					<view class="left" v-if="item.type==1">
+						<image class="img" src="/static/images/5fd36547a3ca4d0b9935e623d3d8e1c5.png"></image>
+						<view class="msg-content">{{item.content}}</view>
+					</view>
+					<view class="right" v-if="item.type==2">
+						<view class="msg-content">{{item.content}}</view>
+						<image class="img" src="/static/images/detault_head.jpg"></image>
+					</view>
+				</view>
+			</view>
+			</scroll-view>
+		</view>
+		<view class="option-cont" v-if="item!=null">
+			<view class="option-title" >{{item.title}}</view>
+			<view class="options" >
+				<view class="option-item" @click="optionClick(item,option)" v-for="(option) in JSON.parse(item.scoreJson)" >{{option.name}}</view>
+			</view>
+		</view>
+		
+		<!-- <view class="title">
+			体质测试以当下感受为准作答,人的体质有可能会随季节变化。 
+		</view>
+		<view class="chose-patient">
+			<view class="patient-box" @click="addPatient()" v-if="patient==null">
+				<text class="patient-title">选择体验者</text>
+				<view class="right" >
+					<image src="/static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<view class="patient" @click="addPatient()" v-if="patient!=null">
+				<view  class="left">
+					<view class="name">{{patient.patientName}}</view>
+					<view class="info">
+						<text class="text" v-if="patient.sex==1">男</text>
+						<text class="text" v-if="patient.sex==2">女</text>
+						<text class="text">{{$getAge(patient.birthday)}}岁</text>
+						<text class="text">{{$parseIdCard(patient.idCard)}}</text>
+					</view>
+				</view>
+				<view class="right" >
+					<image src="/static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+		</view>
+		<view class="items">
+			<view class="item" v-for="(item,index) in items">
+				<view class="name">{{index+1}}{{item.title}}?</view>
+				<view class="options">
+					<view :class="item.option!=null&&item.option==option.name?'option active':'option'" @click="optionClick(item,option)"   v-for="(option) in JSON.parse(item.scoreJson)">
+						{{option.name}}
+					</view>
+				</view>
+			</view>
+			 
+		</view>
+		<view class="btns">
+			<view class="btn" @click="submit()">提交</view>
+		</view>
+		<view class="tips">
+			<view class="tip-title">提交代表你已接受以下声明</view>
+			<view class="desc">
+			  本测试不作为诊断和治疗的依据,对于已经医生确诊的疾病,应按照医嘱积极治疗。所提及的内容仅作为生活保健的咨询建议。如遇不适请及时就医。
+			</view>
+		</view> -->
+	</view> 
+</template>
+
+<script>
+	import {getTestTempDetails,getTestDetails ,doReport} from '@/api/test.js'
+	export default {
+		data() {
+			return {
+				scrollTop:0,//滚动条位置
+				formJson:null,
+				tempId:null,
+				patient:null,
+				items:{},
+				msgs:[],
+				index:0,
+				item:null,
+			};
+		},
+		onLoad(option) {
+			this.tempId=option.tempId;
+			var that=this;
+			uni.$on('refreshOrderPatient', (res) => {
+				console.log("qxj data:"+JSON.stringify(res))
+				that.patient=res;
+			})
+			
+		},
+		onShow() {
+			this.getTestTempDetails();
+			this.getTestDetails();
+			
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康体质检测",
+					path: '/pages_index/test?tempId='+this.tempId,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康体质检测",
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			getTestDetails(){
+				let data = {tempId:this.tempId};
+				getTestDetails(data).then(
+					res => {
+						if(res.code==200){
+							uni.setNavigationBarTitle({
+							      title: res.data.name+"自测"
+							});
+							 
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			addMsg(type,content){
+				var msg={type:type,content:content}
+				this.msgs.push(msg)
+				var that=this;
+				uni
+				  .createSelectorQuery()
+				  .select(".msgs")
+				  .boundingClientRect((res) => {
+				    const scrollH = res.height;
+					that.scrollTop = scrollH;
+					console.log(that.scrollTop)
+				    
+				  })
+				  .exec();
+				 
+				
+			},
+			optionClick(item,option){
+				if(this.patient==null){
+					uni.showToast({
+						icon:'none',
+						title: "请选择体验者",
+					});
+					return;
+				}
+				item.option=option.name;
+				console.log(item.option);
+				this.addMsg(2,option.name);
+				this.index++;
+				if(this.index<=this.items.length-1){
+					this.item=this.items[this.index];
+					this.addMsg(1,this.item.title)
+				}
+				else{
+					//提交
+					this.submit();
+				}
+				
+			},
+			getTestTempDetails(){
+				var data={tempId:this.tempId}
+				getTestTempDetails(data).then(
+					res => {
+						if(res.code==200){
+							this.items=res.items;
+							if(this.items.length>0){
+								this.item=this.items[0];
+								this.addMsg(1,this.item.title)
+							}
+						}
+					},
+					err => {
+					}
+				);
+			},
+			addPatient(){
+				uni.navigateTo({
+					url: '/pages_user/user/patient?isFromTest=true'
+				})
+			},
+			submit(){
+				var data={
+					tempId:this.tempId,
+					patientId:this.patient.patientId,
+					formJson:JSON.stringify(this.items),
+				}
+				var that=this;
+				doReport(data).then(res => {
+					if(res.code==200){
+						uni.redirectTo({
+							url:"./testResult?reportId="+res.reportId
+						})
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: res.msg,
+						});
+					}
+				});
+				// uni.showModal({
+				//     title: '提示',
+				//     content: '确定提交吗',
+				//     success: function (res) {
+				//         if (res.confirm) {
+				// 			doReport(data).then(res => {
+				// 				if(res.code==200){
+				// 					uni.navigateTo({
+				// 						url:"./testResult?reportId="+res.reportId
+				// 					})
+				// 				}else{
+				// 					uni.showToast({
+				// 						icon:'none',
+				// 						title: res.msg,
+				// 					});
+				// 				}
+				// 			});
+				//         } 
+				// 		else if (res.cancel) {
+				//         }
+				//     }
+				// });
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100vh;
+		.msg-cont{
+			padding-bottom: 550rpx;
+			width: 100%;
+			height: calc(100vh - 760rpx);
+			.msg-scroll{
+				height: calc(100vh - 760rpx);
+				.msgs{
+					overflow: hidden;
+					width: 100%;
+					.msg-item{
+						padding: 10rpx 15rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: center;
+						align-items: flex-start;
+						width: 100%;
+						.left{
+							width: 100%;
+							display: flex;
+							justify-content: flex-start;
+							align-items: flex-start;
+							.img{
+								min-width: 100rpx;
+								width: 100rpx;
+								height:100rpx;
+								border-radius: 50%;
+								image{
+									width: 100%;
+									height:100%;
+								}
+							}
+							.msg-content{
+								margin-top: 15rpx;
+								margin-left: 10rpx;
+								border-radius: 15rpx;
+								padding: 15rpx;
+								background-color: #fff;
+								color: #111;
+								font-size: 28upx;
+								font-family: PingFang SC;
+							}
+						}
+						.right{
+							width: 100%;
+							display: flex;
+							justify-content: flex-end;
+							align-items: flex-start;
+							.msg-content{
+								margin-top: 15rpx;
+								margin-right: 10rpx;
+								border-radius: 15rpx;
+								padding: 15rpx;
+								background-color: #d3ad58;
+								color: #fff;
+								font-size: 28upx;
+								font-family: PingFang SC;
+							}
+							.img{
+								min-width: 100rpx;
+								width: 100rpx;
+								height:100rpx;
+								border-radius: 50%;
+								image{
+									width: 100%;
+									height:100%;
+								}
+							}
+						}
+					}
+				}
+			}
+			
+			
+		}
+		.option-cont{
+			position: fixed;
+			bottom: 0rpx;
+			height: 550rpx;
+			width: 100%;
+			box-sizing: border-box;
+			background-color: #fff;
+			border-radius: 60rpx 60rpx 0rpx 0rpx;
+			padding: 30rpx;
+			.option-title{
+				width: 100%;
+				padding-bottom: 15rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				color: #111;
+			}
+			.options{
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				align-items: center;
+				.option-item{
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					width: 100%;
+					border: 1rpx solid #eee;
+					margin-bottom: 10rpx;
+					padding: 15rpx;
+					border-radius: 5rpx;
+				}
+			}
+		}
+		.title{
+			padding: 15rpx 30rpx;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			width: 100%;
+			background-color: #d3ad58;
+			font-size: 24upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #fff;
+		}
+		.patient-cont{
+			padding: 15rpx;
+			.chose-patient{
+				padding: 30rpx;
+				box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
+				background-color: #fff;
+				border-radius: 15rpx;
+				.patient-box{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.patient-title{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+					}
+					.right{
+						height: 100%;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						.value{
+							font-size: 28upx;
+							font-family: PingFang SC;
+							color: #999;
+							margin-right: 10rpx;
+						}
+						image{
+							width: 15upx;
+							height: 30upx;
+						}
+						 
+					}
+				}
+				.patient{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					height: 110upx;
+					.left{
+						.name{
+							font-size: 30upx;
+							line-height: 1;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+						.info{
+							margin-top: 30rpx;
+							display: flex;
+							align-items: center;
+							.text{
+								font-size: 26upx;
+								font-family: PingFang SC;
+								line-height: 1;
+								font-weight: 500;
+								color: #999;
+								margin-right: 19upx;
+							}
+							 
+						}
+					}
+					.right{
+						display: flex;
+						align-items: center;
+						image{
+							width: 15upx;
+							height: 30upx;
+						}
+					}
+				}
+			}
+		}
+		
+		.items{
+			padding: 15rpx;
+			width: 100%;
+			padding: 30rpx;
+			border-radius: 15rpx;
+			background-color: #fff;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			.item{
+				display: flex;
+				flex-direction: column;
+				align-items: flex-start;
+				justify-content: flex-start;
+				width: 100%;
+				background-color: #f8f8f8;
+				margin-bottom: 15rpx;
+				.name{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					color: #2a2b2e;
+					font-weight: bold;
+					margin-bottom: 15rpx;
+				}
+				.options{
+					margin: 15rpx 0rpx;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.option{
+						margin-right: 10rpx;
+						margin-bottom: 10rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						border-radius: 10rpx;
+						width:20%;
+						height:80rpx;
+						border: 1rpx solid #9b9b9b;
+						font-size: 28upx;
+						font-family: PingFang SC;
+						color: #2a2b2e;
+						background-color: #fff;
+						
+						&:last-child{
+							margin-right: 0rpx;
+							margin-bottom: 0rpx;
+						}
+					}
+					.active{
+						border: 1rpx solid #d3ad58;
+						background-color: #d3ad58;
+						color: #fff;
+					}
+				}
+			}
+			
+		}
+		.btns{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			width: 100%;
+			padding: 30rpx;
+			.btn{
+				height:80rpx;
+				margin: 0rpx 30rpx;
+				border-radius: 60rpx;
+				width: 100%;
+				border: 1rpx solid #d3ad58;
+				font-size: 32supx;				font-family: PingFang SC;				color: #fff;
+				font-weight: bold;
+				background-color: #d3ad58;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+			}
+		}
+		.tips{
+			flex-direction: column;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 100%;
+			padding: 30rpx;
+			.tip-title{
+				font-size: 26supx;
+				font-family: PingFang SC;
+				color: #888;
+				font-weight: bold;
+			}
+			.desc{
+				margin-top: 15rpx;
+				font-size: 24rpx;
+				font-family: PingFang SC;
+				color: #b8bdb5;
+			}
+		}
+	}
+	 
+</style>

+ 224 - 0
pages/home/new/testDetails.vue

@@ -0,0 +1,224 @@
+<template>
+	<view class="content">
+		<view class="bg-box">
+			<image src="https://user.test.ylrztop.com/images/71014b69fdcc4b56ae2a84bdc28f11c3.png"></image>
+			<view class="title-box">
+				<view class="title">
+					{{item.name}}
+				</view>
+			</view>
+		</view>
+		<view class="cont">
+			<view class="msg-box">
+				<view class="msg">{{item.msg}}</view>
+			</view>
+			<view class="line"></view>
+			<view class="desc-box">
+				<view class="desc" v-html="item.descs"> </view>
+			</view>
+			<view class="btn-box">
+				<view class="btn" @click="navTo('./test?tempId='+item.tempId)">立即开始测试</view>
+			</view>
+		</view>
+		
+	</view> 
+</template>
+
+<script>
+	import {getTestDetails} from '@/api/test.js'
+	export default {
+		data() {
+			return {
+				tempId:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.tempId=option.tempId;
+			 
+		},
+		onShow() {
+			this.getTestDetails();
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.$isLogin()){
+				return {
+					title: "健康自测",
+					path: '/pages_index/testDetails?tempId='+this.tempId,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康自测",
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			navTo(url) {
+				if(this.utils.isLogin()){
+					uni.navigateTo({
+						url: url
+					})
+				}else{
+					uni.navigateTo({
+						url:'/pages/auth/login'
+					})
+				}
+				// this.$isLogin().then(
+				// 	res => {
+				// 		console.log(res)
+				// 		if(res){
+				// 			uni.navigateTo({
+				// 				url: url
+				// 			})
+				// 		}
+				// 		else{
+				// 			uni.navigateTo({
+				// 				url:'/pages/auth/login'
+				// 			})
+				// 		}
+				// 	}
+				// );
+				
+			},
+			getTestDetails(){
+				let data = {tempId:this.tempId};
+				getTestDetails(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+							uni.setNavigationBarTitle({
+							      title: this.item.name+"自测"
+							});
+							 
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		position: relative;
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		.bg-box{
+			position: absolute;
+			width: 100%;
+			height: 600rpx;
+			.title-box{
+				top: 50rpx;
+				left:50rpx;
+				position: absolute;
+				
+				.title{
+					border-radius: 5rpx;
+					border: 1rpx solid #fff;
+					padding: 20rpx 30rpx;
+					font-size: 36rpx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #fff;
+				}
+				
+				
+				
+			}
+			image{
+				position: absolute;
+				width: 100%;
+				height: 100%;
+			}
+			
+		}
+		.cont{
+			position: relative;
+			margin-top: 550rpx;
+			z-index: 9999;
+			padding: 30rpx;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			padding: 30rpx;
+			background-color: #fff;
+			border-radius: 30rpx 30rpx 0rpx 0rpx;
+			.msg-box{
+				.msg{
+					font-size: 36rpx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #111;
+				}
+			}
+			.line{
+				margin: 15rpx 0rpx;
+				background-color: #F6F6F6;
+				height:5rpx;
+				width: 100%;
+			}
+			.desc-box{
+				margin-top: 20rpx;
+				background: #FFFFFF;
+				.desc{
+					color: #814E1B;
+				}
+			}
+			.logo{
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				margin: 60rpx 0rpx;
+				width: 100%;
+				image{
+					width: 200rpx;
+					height:100rpx;
+				}
+			}
+			.btn-box{
+				margin-top: 60rpx;
+			 	height: 140upx;
+			 	width: 100%;
+			 	box-sizing: border-box;
+			 	display: flex;
+			 	align-items: center;
+			 	justify-content: center;
+				
+			 	.btn{
+			 		width: 100%;
+			 		height: 88upx;
+			 		line-height: 88upx;
+			 		text-align: center;
+			 		font-size: 34upx;
+			 		font-family: PingFang SC;
+			 		font-weight: bold;
+			 		color: #FFFFFF;
+			 		background: #0bb3f2;
+			 		border-radius: 50upx;
+			 	}
+			 }
+		}
+		
+		
+	}
+	 
+</style>

+ 213 - 0
pages/home/new/testList.vue

@@ -0,0 +1,213 @@
+<template>
+	<view class="content">
+		<view class="bg">
+			<image src="https://user.test.ylrztop.com/images/8e52ab17eabc4534b3ce56026fd5c624.jpg"></image>
+		</view>
+		<mescroll-body  top="0rpx"  ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="test-list">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="left">
+						<view class="title ellipsis2">{{ item.name }}</view>
+						<view class="subtitle ellipsis2">{{ item.title }}</view>
+						<view class="info-box">
+							<view class="people-num"><text class="num">{{item.peopleNum}}W</text>人测过</view>  
+							<view class="time">{{item.num}}题 | {{item.time}}分钟</view>
+						</view>
+					</view>
+					<view class="right">
+						<image :src="item.img" mode="aspectFill"></image>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+		
+	</view>
+</template>
+
+<script>
+	import {getTestList,getTestDetails} from '@/api/test.js'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+		 
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll:false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore:"已经到底了",
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: []
+			};
+		},
+		onShow() {
+		 
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康自测",
+					path: '/pages_index/testList',
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康自测",
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			  
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				getTestList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './testDetails?tempId=' + item.tempId
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	 
+	.content{
+		position: relative;
+		.bg{
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			image{
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+	.test-list{
+		margin-top: 20upx;
+		padding: 0 20upx;
+		.item{
+			width: 100%;
+			box-sizing: border-box;
+			height: 271upx;
+			background: #FFFFFF;
+			border: 2px solid rgba(195,154,88,0.35);
+			box-shadow: -1px 4px 5px 0px rgba(153,102,51,0.25);
+			border-radius: 12px;
+			padding: 40upx 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-bottom: 20upx;
+			.left{
+				flex: 1;
+				padding-right: 40upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 40rpx;
+					font-family: PingFang SC;
+					line-height: 48upx;
+					font-weight: bold;
+					color: #814E1B;
+				}
+				.subtitle{
+					color: #814E1B;
+					font-size: 28rpx;
+					font-family: PingFang SC;
+					margin: 10rpx 0rpx;
+				}
+				.info-box{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.people-num{
+						font-size: 24upx;
+						font-family: PingFang SC;
+						color: #0bb3f2;
+						.num{
+							font-weight: bold;
+							color: #814E1B;
+						}
+					}
+					.time{
+						margin-left: 25upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #0bb3f2;
+					}
+				}
+			}
+			.right{
+				width: 250upx;
+				height: 190upx;
+				border-radius: 8upx;
+				overflow: hidden;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+	}
+</style>

+ 353 - 0
pages/home/new/testResult.vue

@@ -0,0 +1,353 @@
+<template>
+	<view class="content">
+		<view class="cont">
+			<view class="bg">
+				<image src="https://user.test.ylrztop.com/images/8e52ab17eabc4534b3ce56026fd5c624.jpg" ></image>
+			</view>
+			<view class="cont-box" v-if="report!=null">
+				<view class="user">
+					<image :src="JSON.parse(report.patientJson).avatar==null?'/static/images/detault_head.jpg':JSON.parse(report.patientJson).avatar"></image>
+					<view class="user-box">
+						<view class="sex">性别 {{JSON.parse(report.patientJson).sex==1?"男":"女"}}</view>
+						<view class="username">年龄 {{JSON.parse(report.patientJson).age}}岁</view>
+					</view>
+				</view>
+				<view class="items">
+					<view class="result-box">
+						<view class="time">检测时间 {{report.createTime}}</view>
+						<view class="title">您属于{{report.testResult}}</view>
+						<view class="name">{{report.testResult}}</view>
+						
+					</view>
+				<!-- 	<view class="item-box" :key="index" v-for="(item,index) in JSON.parse(report.conditioningPlanJson) ">
+						<view class="item">
+							<view class="title-box">
+								<view class="title">{{item.name}}</view>
+							</view>
+							<view class="descs" >{{item.value.replace(/\\n/g, '<br>')}}</view>
+						</view>
+						<view v-if="index<JSON.parse(report.conditioningPlanJson).length-2" class="line"></view>
+					</view>
+				 -->
+				</view>
+				<view class="tips">注:报告内容仅供参考,具体情况以医生建议为准</view>
+				<view class="banner" v-if="advImgs.length>0">
+					<u-swiper
+							:list="advImgs"
+							circular
+							@click="handleAdvClick">
+					</u-swiper>
+				</view>
+			</view>
+		</view>
+		<view class="share" @click="shareImg()">
+			<text>分享</text>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getAdvList} from '@/api/adv.js'
+	import {getTestReport,getTestReportImg} from '@/api/test.js'
+	export default {
+		data() {
+			return {
+				advImgs:[],
+				advs:[],
+				reportId:null,
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				report:null,
+			};
+		},
+		onLoad(option) {
+			this.reportId=option.reportId;
+			this.getTestReport();
+		},
+		onShow() {
+			this.getAdvList();
+		},
+		methods:{
+			shareImg(){
+				var data={reportId:this.reportId}
+				getTestReportImg(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res)
+							wx.downloadFile({
+								url: res.img,
+								success: (res1) => {
+								   console.log(res1)
+							     wx.showShareImageMenu({
+							       path: res1.tempFilePath
+							     })
+							   },
+							   fail:(res2)=>{
+								   console.log(res2)
+							   }
+							})
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			handleAdvClick(item){
+				console.log(item);
+				if(item.showType==1){
+					uni.setStorageSync('url',item.advUrl);
+					uni.navigateTo({
+						url:"h5"
+					})
+				}
+				else if(item.showType==2){
+					uni.navigateTo({
+						url:item.advUrl
+					})
+				}
+				else if(item.showType==3){
+					 uni.setStorageSync('content',item.content);
+					 uni.navigateTo({
+					 	url:"content"
+					 })
+				}
+				
+			},
+			getAdvList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					advType:3
+				};
+				getAdvList(data).then(res => {
+					if(res.code==200){
+						that.advImgs=[];
+						that.advs=res.data;
+						that.advs.forEach(function(element) {
+							if(element.imageUrl!=null&&element.imageUrl!=""){
+								that.advImgs.push(element.imageUrl);
+							}
+						});
+						console.log(that.advImgs)
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			getTestReport(){
+				var data={reportId:this.reportId}
+				getTestReport(data).then(
+					res => {
+						if(res.code==200){
+							this.report=res.report;
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			goBack(){
+				uni.navigateBack()
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background-color: #FDF7F0;
+		height: 100%;
+	}
+	.content{
+		.cont{
+			position: relative;
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			.bg{
+				width: 100%;
+				height:100%;
+				// background-color: #0bb3f2;
+				// background: linear-gradient(#66b2ef, #0bb3f2);
+				position: fixed;
+				image{
+					width: 100%;
+					height:100%;
+				}
+				z-index: 1;
+			}
+			.cont-box{
+				
+				z-index: 1000;
+				margin-top: 88rpx;
+				.user{
+					box-sizing: border-box;
+					width: 100%;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					justify-content: center;
+					padding: 30rpx;
+					image{
+						border-radius: 50%;
+						border: 2rpx solid #ffffff;
+						width:120rpx;
+						height:120rpx;
+					}
+					.user-box{
+						padding: 30rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						.sex{
+							font-weight: bold;
+							font-size: 40supx;
+							font-family: PingFang SC;
+							color: #925924;
+						}
+						.username{
+							margin-left: 15rpx;
+							font-size: 40supx;
+							font-family: PingFang SC;
+							color: #925924;
+						}
+						
+					}
+				}
+				.items{
+					width: 100%;
+					box-sizing: border-box;
+					display: flex;
+					flex-direction: column;
+					align-items: flex-start;
+					justify-content: flex-start;
+					padding: 20rpx;
+					.result-box{
+						width: 100%;
+						box-sizing: border-box;
+						display: flex;
+						flex-direction: column;
+						align-items:center;
+						justify-content: center;
+						padding: 30rpx;
+						background-color: #fff;
+						border-radius: 15rpx;
+						margin-bottom: 15rpx;
+						.time{
+							margin-top: 15rpx;
+							font-family: PingFang SC;
+							font-size: 24rpx;
+							color: #9B9B9B;
+						}
+						.title{
+							margin-top: 15rpx;
+							font-family: PingFang SC;
+							font-size: 28rpx;
+							color: #626468;
+							
+						}
+						.name{
+							margin-top: 30rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							font-size: 60rpx;
+							color: #925924;
+						}
+						.descs{
+							font-family: PingFang SC;
+							font-size: 28rpx;
+							color: #2A2B2E;
+							padding: 30rpx;
+							margin-top: 30rpx;
+							background-color: #F5F6F6;
+							border-radius: 10rpx;
+						}
+					}
+					.item-box{
+						width: 100%;
+						.item{
+							width: 100%;
+							padding: 30rpx;
+							background-color: #fff;
+							border-radius:30rpx;
+							.title-box{
+								display: flex;
+								align-items:center;
+								justify-content: flex-start;
+								.title{
+									margin-left: 10rpx;
+									font-size: 32supx;
+									font-family: PingFang SC;
+									color: #925924;
+									font-weight: bold;
+								}
+								.title-line{
+									width: 8rpx;
+									height: 28rpx;
+									background: #0bb3f2;
+									border-radius: 2px 2px 2px 2px;
+									opacity: 1;
+								}
+								
+							}
+							.descs{
+								white-space: pre-line; 
+								margin-top: 10rpx;
+								font-size: 28supx;
+								font-family: PingFang SC;
+								color: #2A2B2E;
+							}
+							
+						}
+						.line{
+							margin: 0rpx 30rpx;
+							border-bottom: #b5b5b5 3rpx dashed;
+						}
+						
+					}
+				
+					
+					
+				}
+				.tips{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin: 15rpx 0rpx;
+					color: #9B9B9B;
+					font-size: 24rpx;
+				}
+				.banner{
+					height:250rpx;
+					width: 100%;
+					padding: 15rpx 20upx;
+				 
+				}
+			}
+		}
+		
+	}
+	.share{
+		width: 100rpx;
+		height:100rpx;
+		z-index: 9999;
+		border-radius: 50%;
+		position: fixed;
+		bottom: 100rpx;
+		right:50rpx;
+		background-color: #925924;
+		color: #fff;
+		font-weight: bold;
+		font-size: 28rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 196 - 0
pages/home/new/testResultImg.vue

@@ -0,0 +1,196 @@
+<template>
+  <view class="content">
+    <view class="banenr">
+       <image class="slide-image" :src="url" mode="widthFix" show-menu-by-longpress />
+    </view>
+	<view class="btn-box">
+		<view class="btn" @click="shareImg()">分享好友</view>
+	</view>
+  </view>
+</template>
+<script>
+ 
+import {getTestReportImg} from '@/api/test.js'
+export default {
+  name: 'Poster',
+  components: {
+  },
+  props: {},
+  data: function() {
+    return {
+       url:null,
+    }
+  },
+  mounted: function() {
+    this.getTestReportImg()
+  },
+  methods: {
+	shareImg:function(){
+		wx.downloadFile({
+		  url: this.url,
+		  success: (res) => {
+		    wx.showShareImageMenu({
+		      path: res.tempFilePath
+		    })
+		  }
+		})
+	},
+    getTestReportImg: function() {
+      let that = this
+	  var data={
+		  reportId:this.reportId
+	  }
+      getTestReportImg(data).then(
+        res => {
+			that.url =res.url
+        },
+        err => {
+          uni.showToast({
+            title: err.msg,
+            icon: 'none',
+            duration: 2000,
+          })
+        }
+      )
+    },
+    downloadIamge(imgsrc, name) {
+      var that = this
+      this.isDown = true
+      var downloadUrl = imgsrc
+      // if (!wx.saveImageToPhotosAlbum) {
+      //   uni.showModal({
+      //     title: '提示',
+      //     content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。',
+      //   })
+      //   that.openDialogVisible = true
+
+      //   return
+      // }
+
+      that.downloadFile(downloadUrl)
+
+      //可以通过 uni.getSetting 先查询一下用户是否授权了 "scope.writePhotosAlbum" 这个 scope
+      // uni.getSetting({
+      //   success(res) {
+      //     if (!res.authSetting["scope.writePhotosAlbum"]) {
+      //       that.openDialogVisible = true;
+
+      //       // 接口调用询问
+      //       uni.authorize({
+      //         scope: "scope.writePhotosAlbum",
+      //         success() {
+      //           that.downloadFile(downloadUrl);
+      //         },
+      //         fail() {
+      //           // 用户拒绝了授权
+      //           // 打开设置页面
+      //           uni.openSetting({
+      //             success: function (data) {},
+      //             fail: function (data) {}
+      //           });
+      //         }
+      //       });
+      //     } else {
+      //       that.downloadFile(downloadUrl);
+      //     }
+      //   },
+      //   fail(res) {
+      //     that.openDialogVisible = true;
+      //   }
+      // });
+    },
+    saveImg: function() {
+      this.downloadIamge(this.url, 'poster')
+    },
+    downloadFile(url) {
+		console.log(url);
+		uni.showLoading({
+			title: "图片保存中..."
+		})
+		uni.downloadFile({
+			url,
+			fail: function(res) {
+			  uni.showModal({
+				title: '提示',
+				content: '保存失败',
+			  })
+			},
+			success: function(res) {
+				console.log(res)
+				var tempFilePath = res.tempFilePath;
+				uni.saveImageToPhotosAlbum({
+					filePath: tempFilePath,
+					success:()=> {
+					  // 5 提示保存成功
+					  uni.showToast({
+						title: "保存成功",
+						duration: 2000
+					  })
+					},
+					fail:()=>{
+					  //  6 失败关闭提示信息!!!
+					  console.log("saveImageToPhotosAlbum 失败");
+					  uni.hideLoading();
+					},
+					complete: function() {
+					  // 7 隐藏提示
+					  uni.hideLoading();
+					}
+				})
+			},
+		})
+    },
+  },
+}
+</script>
+
+<style lang="less">
+page {
+	height: 100%;
+}
+
+.content {
+	height: 100%;
+  
+}
+
+.banenr {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding-bottom:140upx ;
+	height: 100%;
+}
+
+.banner .slide-image {
+	width: 100%;
+	height: auto;
+	
+}
+.btn-box{
+ 	height: 140upx;
+ 	z-index: 9999;
+ 	width: 100%;
+ 	padding: 0rpx 30upx;
+ 	position: fixed;
+ 	bottom: 0;
+ 	left: 0;
+ 	box-sizing: border-box;
+ 	background-color: #ffffff;
+ 	display: flex;
+ 	align-items: center;
+ 	justify-content: center;
+ 	.btn{
+ 		width: 100%;
+ 		height: 88upx;
+ 		line-height: 88upx;
+ 		text-align: center;
+ 		font-size: 34upx;
+ 		font-family: PingFang SC;
+ 		font-weight: 400;
+ 		color: #ffffff;
+ 		background:#0bb3f2 !important;
+ 		border-radius: 44upx;
+ 	}
+ }
+</style>

+ 197 - 0
pages/home/new/vesselDetails.vue

@@ -0,0 +1,197 @@
+<template>
+	<view class="content" v-if="item!=null">
+		<view class="image">
+			<image mode="aspectFill" :src="item.imgUrl"></image>
+		</view>
+		<view class="detail-cont">
+			<view class="title-box">
+				<view class="line"></view>
+				<view class="title">{{item.vesselName}}</view>
+				<view class="title-py">{{item.pinyin}}</view>
+			</view>
+			<view class="desc">
+				{{item.actionTitle}}
+			</view>
+			<view class="line-h"></view>
+			<view class="content"   v-html="item.descs">
+			</view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getVesselById} from '@/api/index'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.id=option.id;
+			 
+		},
+		onShow() {
+			this.getVesselById();
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.vesselName,
+					path: '/pages_index/vesselDetails?id='+this.id,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: this.item.vesselName,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			getVesselById(){
+				let data = {id:this.id};
+				getVesselById(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		image{
+			height:450rpx;
+			width:100%;
+		}
+		.detail-cont{
+			flex: 1;
+			padding: 20upx;
+			overflow-y: auto;
+			.title-box{
+				width: 100%;
+				display: flex;
+				justify-content: flex-start;
+				align-items: center;
+				.line{
+					border-radius: 5rpx;
+					width: 8rpx;
+					height:30rpx;
+					background-color: #0bb3f2;
+				}
+				.title{
+					margin-left: 15rpx;
+					font-size: 40upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #333;
+				}
+				.title-py{
+					margin-left: 15rpx;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					color: #333;
+				}
+			}
+			.desc{
+				margin-top: 20rpx;
+				font-size: 32upx;
+				font-family: PingFang SC;
+				color: #333;
+			}
+			.line-h{
+				margin: 15rpx 0rpx;
+				border-bottom: 1rpx dashed #d4d4d4;
+			}
+			.tabs{
+				width: 100%;
+				margin: 20rpx 0rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				// border: 1rpx solid #0bb3f2;
+				border-radius: 30rpx;
+				line-height: 60rpx;
+				.tab1{
+					border-radius: 30rpx 0rpx 0rpx 30rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab2{
+					
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					
+					font-family: PingFang SC;
+				}
+				.tab3{
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.tab4{
+					border-radius: 0rpx 30rpx 30rpx 0rpx;
+					width: 25%;
+					display: flex;
+					justify-content: center;
+					align-items: center;
+					background-color: #fff;
+					color: #4F575A;
+					font-size: 28upx;
+					font-weight: bold;
+					font-family: PingFang SC;
+				}
+				.active{
+					background-color: #0bb3f2;
+					color: #fff;
+				}
+				 
+			}
+			 
+		}
+	}
+	
+	 
+</style>

+ 312 - 0
pages/home/new/vesselList.vue

@@ -0,0 +1,312 @@
+<template>
+	<view class="content">
+		<view class="top-box">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="/static/images/search.png" mode=""></image>
+					<input type="text" v-model="keyword" placeholder="输入关键字搜索" confirm-type="search" @confirm="doSearch" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+			<view class="tabs">
+				 <u-tabs
+				  :scrollable="false"
+				  :list="tabs"  
+				  lineColor="#0bb3f2"
+				 @change="tabChange">
+				 </u-tabs>
+			</view>
+		</view>
+		<view class="cont-box">
+			<view class="left">
+				<view class="items">
+					<view v-if="tabIndex==1" @click="vesselClick(item)" v-for="item in vesselOptions" :class="item.dictValue==vessel?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictValue==vessel"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+					<view v-if="tabIndex==2" @click="regionClick(item)" v-for="item in regionOptions" :class="item.dictLabel==region?'item ellipsis active':'item ellipsis'">
+						<text class="line" v-if="item.dictLabel==region"></text>
+						{{ utils.subString(item.dictLabel) }}
+					</view>
+				</view>
+			</view>
+			<view class="right" >
+				<view class="title">{{title}}</view>
+				<scroll-view @scrolltolower="scrolltolower" scroll-y="true"  style="height: calc(100vh - 180rpx);">
+				<view class="items">
+					<view class="r-item" @click="showDetail(item)" v-for="item in dataList">
+						<view class="r-left">{{item.vesselName}}</view>
+						<view class="r-right">
+							<image src="/static/images/fire.png"></image>
+						</view>
+					</view>
+				</view>
+				</scroll-view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	
+	import {getDictByKey} from '@/api/common.js'
+	import {getVesselList} from '@/api/index.js'
+	export default {
+		data() {
+			return {
+				tabIndex:1,
+				vessel:"",
+				region:"",
+				title:"",
+				pageNum:1,
+				pageSize:20,
+				vesselOptions:[],
+				regionOptions:[],
+				tabs: [
+					{name:"按经络查询",id:"1"},
+					{name:"按部位查询",id:"2"}
+				],
+				keyword: '',
+				dataList: []
+			};
+		},
+		onLoad() {
+			this.getDictByKey("sys_vessel");
+			this.getDictByKey("sys_vessel_region");
+			this.getVesselList()
+			
+		},
+		methods:{
+			scrolltolower(e){
+				this.pageNum++;
+				this.getVesselList()
+				console.log(e)
+			},
+			regionClick(item){
+				this.vessel=""
+				this.region=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getVesselList()
+			},
+			vesselClick(item){
+				this.region=""
+				this.vessel=item.dictLabel;
+				this.title=item.dictLabel;
+				this.pageNum=1;
+				this.getVesselList()
+			},
+			getDictByKey(key){
+				var data={key:key}
+				getDictByKey(data).then(
+					res => {
+						if(res.code==200){
+							if(key=="sys_vessel"){
+								this.vesselOptions=res.data;
+							}
+							if(key=="sys_vessel_region"){
+								this.regionOptions=res.data;
+								 
+							}
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			tabChange(item) {
+				this.tabIndex = item.id
+				this.getVesselList();
+			},
+			doSearch(){
+				this.pageNum=1;
+				this.getVesselList()
+			},
+			getVesselList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					vessel:this.vessel,
+					region:this.region,
+					keyword:this.keyword,
+					pageNum: this.pageNum,
+					pageSize: this.pageSize
+				};
+				uni.showLoading({
+					title:"加载中..."
+				})
+				getVesselList(data).then(res => {
+					uni.hideLoading()
+					if(res.code==200){
+						//设置列表数据
+						if (this.pageNum == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = [];
+					}
+				});
+			},
+			 
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: './vesselDetails?id=' + item.id
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		height: 100%;
+		overflow: hidden;
+	}
+	.top-box{
+		width: 100%;
+		height: 180rpx;
+		background-color: #FFFFFF;
+		.search-cont{
+			padding: 16upx 30upx;
+			.inner{
+				box-sizing: border-box;
+				width: 100%;
+				height: 72upx;
+				background: #F7F7F7;
+				border-radius: 36upx;
+				display: flex;
+				align-items: center;
+				padding: 0 30upx;
+				.icon-search{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				input{
+					height: 60upx;
+					line-height: 60upx;
+					flex: 1;
+				}
+			}
+		}
+		.tabs{
+		}
+	}
+	.cont-box{
+		height: calc(100% - 180rpx);
+		display: flex;
+		align-items: flex-start;
+		justify-content: flex-start;
+		.left{
+			padding: 30rpx 0rpx;
+			width: 240rpx;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			.items{
+				width: 240rpx;
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: flex-start;
+				.item{
+					width: calc(100% - 10rpx);
+					padding: 0rpx 0rpx 0 10rpx;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: normal;
+					color: #111111;
+					font-weight: 500;
+					line-height: 80upx;
+					.line{
+						margin-right: 15rpx;
+						border-radius: 5rpx;
+						width: 8rpx;
+						height:30rpx;
+						background-color: #0bb3f2;
+					}
+					
+				}
+				.active{
+					background-color: #fff;
+					font-weight: bold;
+					color: #0bb3f2;
+					padding-left: 0;
+					width: 100%;
+				}
+			}
+			
+		}
+		.right{
+			padding: 30rpx 15rpx;
+			background-color: #fff;
+			height: 100%;
+			overflow-y: auto;
+			display: flex;
+			flex-direction: column;
+			align-items: flex-start;
+			justify-content: flex-start;
+			width: calc(100% - 240rpx);
+			.title{
+				font-size: 40upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				line-height: 80upx;
+			}
+			.items{
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				align-items: flex-start;
+				justify-content: flex-start;
+				.r-item{
+					line-height: 80rpx;
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					.r-left{
+						flex: 1;
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #080808;
+					}
+					.r-right{
+						padding: 0rpx 20rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						image{
+							width: 22rpx;
+							height:30rpx;
+						}
+					}
+					
+				}
+				 
+			}
+		}
+	}
+	 
+</style>

+ 478 - 0
pages/home/productList.vue

@@ -0,0 +1,478 @@
+<template>
+	<view class="content">
+		<view class="top-fixed">
+			<!-- 搜索框 -->
+			<view class="search-cont">
+				<view class="inner">
+					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<input type="text" @confirm="goSearch"   :value="form.productName" 
+						:placeholder="storeId ? '搜索店内药品' : '输入药品名称'" placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+				<view class="icon-search">
+					<image @click="showChange(2)" v-if="showType==1"  src="../../static/images/search1.png" mode=""></image>
+					<image @click="showChange(1)" v-if="showType==2"  src="../../static/images/search2.png" mode=""></image>
+				</view>
+			</view>
+			<!-- 排序框 -->
+			<view class="sort-box">
+				<view class="item" :class="form.defaultOrder=='desc'?'active':''" @click="searchChange('1')">
+					<text class="label">默认</text>
+				</view>
+				<view class="item" @click="searchChange('2')">
+					<text class="label">价格</text>
+					<view class="sort-img">
+						<image v-if="form.priceOrder==null||form.priceOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="priceUp(true)"></image>
+						<image v-if="form.priceOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="priceUp(false)"></image>
+						<image v-if="form.priceOrder==null||form.priceOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="priceDown(true)"></image>
+						<image v-if="form.priceOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="priceDown(false)"></image>
+					</view>
+				</view>
+				<view class="item" @click="searchChange('3')">
+					<text class="label">销量</text>
+					<view class="sort-img">
+						<image v-if="form.salesOrder==null||form.salesOrder=='desc'" src="../../static/images/price_arrow_up.png" mode="" @click="saleUp(true)"></image>
+						<image v-if="form.salesOrder=='asc'" src="../../static/images/price_arrow_up2.png" mode="" @click="saleUp(false)"></image>
+						<image v-if="form.salesOrder==null||form.salesOrder=='asc'" src="../../static/images/price_arrow_down.png" mode="" @click="saleDown(true)"></image>
+						<image v-if="form.salesOrder=='desc'" src="../../static/images/price_arrow_down2.png" mode="" @click="saleDown(false)"></image>
+					</view>
+				</view>
+				<view class="item" :class="form.newOrder=='desc'?'active':''" @click="searchChange('4')">
+					<text class="label">新品</text>
+				</view>
+			</view>
+		</view>
+	 
+		<!-- 数据列表 -->
+		<mescroll-body top="190rpx" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+			<view class="medic-list" v-if="showType==1">
+				<view v-for="(item,index) in dataList" :key="index" class="item" @click="showDetail(item)">
+					<view class="img-box">
+						<image :src="item.image" mode="aspectFit"></image>
+					</view>
+					<view class="info-box">
+						<view class="title ellipsis2">{{item.productName}}</view>
+						<view class="intro ellipsis">{{item.productInfo}}</view>
+						<view class="prce-num">
+							<view class="price">
+								<text class="unit">¥</text>
+								<text class="num">{{item.price.toFixed(2)}} </text>
+							</view>
+							<view class="cart-img" @click="navgetTo('../shopping/cart')">
+								<view class="sale">已售 {{item.sales}} {{item.unitName}}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="goods-list" v-if="showType==2">
+				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
+					<view class="img-box">
+						<image :src="item.image" mode="aspectFill"></image>
+					</view>
+					<view class="info-box">
+						<view class="title ellipsis2">{{item.productName}}</view>
+						<view class="price-box">
+							<view class="now">
+								<text class="unit">¥</text>
+								<text class="num">{{item.price.toFixed(2)}}</text>
+							</view>
+							<view class="old">¥{{item.otPrice.toFixed(2)}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import {getProducts} from '@/api/product'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				showType:1,
+				form:{
+					defaultOrder:'desc',
+					newOrder:null,
+					priceOrder:null,
+					salesOrder:null,
+					productName:"",
+					storeId: ""
+				},
+				mescroll:null,
+				// 上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'/static/images/no_data.png',
+						tip: '暂无数据'
+					},
+					textNoMore:"已经到底了",
+				},
+				// 列表数据
+				dataList: [],
+				storeId: ""
+			};
+		},
+		onLoad(option) {
+			if(option.key!=undefined){
+				this.form.productName = option.key
+			}
+			this.storeId = option.storeId || ""
+			this.form.storeId = this.storeId
+		},
+		methods:{
+			goSearch(e) {
+				this.form.productName=e.detail.value;
+				this.mescroll.resetUpScroll();
+			},
+			searchChange(type){
+				if(type==1){
+					this.form.defaultOrder="desc";
+					this.form.priceOrder=null;
+					this.form.salesOrder=null;
+					this.form.newOrder=null;
+					
+				}
+				else if(type==2){
+					this.form.defaultOrder=null;
+					if(this.form.priceOrder==null){
+						this.form.priceOrder="asc"
+					}
+					else if(this.form.priceOrder=="asc"){
+						this.form.priceOrder="desc"
+					}
+					else if(this.form.priceOrder=="desc"){
+						this.form.priceOrder=null;
+					}
+					this.form.salesOrder=null;
+					this.form.newOrder=null;
+				}
+				else if(type==3){
+					this.form.defaultOrder=null;
+					this.form.priceOrder=null;
+					if(this.form.salesOrder==null){
+						this.form.salesOrder="asc"
+					}
+					else if(this.form.salesOrder=="asc"){
+						this.form.salesOrder="desc"
+					}
+					else if(this.form.salesOrder=="desc"){
+						this.form.salesOrder=null;
+					}
+					this.form.newOrder=null;
+					
+				}
+				else if(type==4){
+					this.form.newOrder="desc";
+					this.form.defaultOrder=null;
+					this.form.priceOrder=null;
+					this.form.salesOrder=null;
+					
+					
+				}
+				this.mescroll.resetUpScroll();
+			},
+			showChange(type){
+				this.showType=type;
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				this.form.page=page.num;
+				this.form.pageSize=page.size;
+				getProducts(this.form).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+							 
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 价格升序是否选中
+			priceUp(value) {
+				this.priceIsUp = value
+				this.priceIsDown = false
+			},
+			// 价格降序是否选中
+			priceDown(value) {
+				this.priceIsDown = value
+				this.priceIsUp = false
+			},
+			// 销量升序是否选中
+			saleUp(value) {
+				this.saleIsUp = value
+				this.saleIsDown = false
+			},
+			// 销量降序是否选中
+			saleDown(value) {
+				this.saleIsDown = value
+				this.saleIsUp = false
+			},
+			// 查看详情
+			showDetail(item) {
+				uni.navigateTo({
+					url: '../shopping/productDetails?productId='+item.productId + `${this.storeId ? '&storeId='+this.storeId : ''}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.top-fixed{
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 10;
+	}
+	.search-cont{
+		padding: 16upx 30upx;
+		background-color: #FFFFFF;
+		display:flex;
+		align-items: center;
+		justify-content: space-between;
+		.inner{
+			box-sizing: border-box;
+			width: 100%;
+			height: 72upx;
+			background: #F7F7F7;
+			border-radius: 36upx;
+			display: flex;
+			align-items: center;
+			padding: 0 30upx;
+			.icon-search{
+				width: 28upx;
+				height: 28upx;
+				margin-right: 20upx;
+			}
+			input{
+				height: 60upx;
+				line-height: 60upx;
+				flex: 1;
+			}
+			
+		}
+		.icon-search{
+			margin-left: 10upx;
+			width: 40upx;
+			height: 40upx;
+			image{
+				width: 40upx;
+				height: 40upx;
+			}
+			
+		}
+	}
+	.sort-box{
+		height: 88upx;
+		background: #FFFFFF;
+		padding: 0 100upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.item{
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			&.active .label{
+				color: #008FD3;
+			}
+			.label{
+				font-size: 26upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+			}
+			.sort-img{
+				height: 20upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				margin: 3upx 0 0 10upx;
+				image{
+					width: 12upx;
+					height: 8upx;
+				}
+			}
+		}
+	}
+	.medic-list{
+		padding: 20upx;
+		.item{
+			box-sizing: border-box;
+			min-height: 285upx;
+			background: #FFFFFF;
+			border: 4upx solid #FFFFFF;
+			border-radius: 16upx;
+			margin-bottom: 20upx;
+			padding: 40upx 30upx;
+			display: flex;
+			.img-box{
+				width: 200upx;
+				height: 200upx;
+				margin-right: 30upx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.info-box{
+				width: calc(100% - 210upx);
+				.title{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 40rpx;
+					height: 80rpx;
+				}
+				.intro{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+					margin-top: 26upx;
+				}
+			 
+				.prce-num{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-top: 30upx;
+					.price{
+						display: flex;
+						align-items: flex-end;
+						.unit{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 4upx;
+						}
+						.num{
+							font-size: 36upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
+						}
+					}
+					.cart-img{
+						.sale{
+							font-size: 20upx;
+							font-family: PingFang SC;
+							color: #999999;
+						}
+						 
+					}
+				}
+			}
+		}
+	}
+	.goods-list{
+		padding: 20upx;
+		display: flex;
+		flex-wrap: wrap;
+		.item{
+			margin-right: 20rpx;
+			margin-bottom: 20rpx;
+			width: 345rpx;
+			background: #FFFFFF;
+			box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
+			border-radius: 20rpx;
+			overflow: hidden;
+			&:nth-child(2n) {
+				margin-right: 0;
+			}
+			.img-box{
+				width: 100%;
+				height: 334upx;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+			.info-box{
+				box-sizing: border-box;
+				height: 182upx;
+				padding: 20upx 20upx 30upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 40upx;
+				}
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					.now{
+						display: flex;
+						align-items: flex-end;
+						margin-right: 20upx;
+						.unit{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 4upx;
+						}
+						.num{
+							font-size: 36upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
+						}
+					}
+					.old{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #BBBBBB;
+						line-height: 1.1;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 136 - 0
pages/home/productSearch.vue

@@ -0,0 +1,136 @@
+<template>
+	<view class="content">
+		<!-- 搜索框 -->
+		<view class="search-cont">
+			<view class="inner">
+				<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+				<input type="text" value="" :placeholder="storeId ? '搜索店内药品' : '输入药品名称'" confirm-type="搜索" @confirm="goSearch" :focus='setFocus' placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+			</view>
+		</view>
+		<!-- 搜索历史 -->
+		<view class="title-box">
+			<text class="title">历史搜索</text>
+			<image src="../../static/images/del.png" mode="" @click="clearHistory"></image>
+		</view>
+		<view class="data-list">
+			<view class="item" v-for="(item,index) in searchHistory" :key="index" @click="doSearch(item)">
+				{{ item }}
+			</view>
+		</view>
+		<!-- 推荐搜索 -->
+		<view class="title-box">
+			<text class="title">推荐搜索</text>
+		</view>
+		<view class="data-list">
+			<view class="item" v-for="(item,index) in topSearch" :key="index" @click="doSearch(item)">
+				{{ item }}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				setFocus: false,
+				// 历史搜索
+				searchHistory: [],
+				// 推荐搜索
+				topSearch: [],
+				storeId: "",
+			};
+		},
+		onLoad(options) {
+			this.storeId = options.storeId || ""
+		},
+		onShow() {
+			this.setFocus = true
+			this.searchHistory=this.utils.getHisSearch();
+			var config=uni.getStorageSync('config');
+			if(config!=null&&config!=undefined&&config!=""){
+				this.topSearch=JSON.parse(config).hotSearch.split(',');
+			}
+		},
+		methods:{
+			// 清空历史搜索数据
+			clearHistory() {
+				this.utils.clearHisSearch();
+				this.searchHistory=this.utils.getHisSearch();
+			},
+			doSearch(item){
+				uni.navigateTo({
					url: './productList?key=' + item + `${this.storeId ? '&storeId='+this.storeId : ''}`
				})
+			},
+			goSearch(e) {
+				if(e.detail.value!=null&&e.detail.value!=""){
+					this.utils.addHisSearch(e.detail.value);
+				}
+				uni.navigateTo({
+					url: './productList?key=' + e.detail.value + `${this.storeId ? '&storeId='+this.storeId : ''}`
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		.search-cont{
+			padding: 16upx 30upx;
+			background-color: #FFFFFF;
+			.inner{
+				box-sizing: border-box;
+				width: 100%;
+				height: 72upx;
+				background: #F7F7F7;
+				border-radius: 36upx;
+				display: flex;
+				align-items: center;
+				padding: 0 30upx;
+				.icon-search{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				input{
+					height: 60upx;
+					line-height: 60upx;
+					flex: 1;
+				}
+			}
+		}
+		.title-box{
+			padding: 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.title{
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #111111;
+			}
+			image{
+				width: 30upx;
+				height: 30upx;
+			}
+		}
+		.data-list{
+			padding: 0upx 10upx 30upx;
+			display: flex;
+			flex-wrap: wrap;
+			.item{
+				padding: 0 30upx;
+				height: 56upx;
+				line-height: 56upx;
+				font-size: 26upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #333333;
+				background: #F5F5F5;
+				border-radius: 28upx;
+				margin: 0 20upx 20upx 0;
+			}
+		}
+	}
+</style>

+ 42 - 0
pages/home/web.vue

@@ -0,0 +1,42 @@
+<template>
+	<view class="content">
+		 <web-view :src="url"></web-view>
+	</view>
+</template>
+
+<script>
+ 
+ export default {
+ 	data() {
+ 		return {
+			url:"",
+ 		}
+ 	},
+	onLoad(val) {
+		// 待解析的完整 URL
+		// const fullUrl = uni.getStorageSync('url');
+		// this.url=this.utils.getUrl(fullUrl);
+	     this.url=uni.getStorageSync('url');
+	}
+ 	 
+ }
+ 
+ 
+</script>
+
+
+<style scoped lang="scss">
+page{
+	height: 100%;
+}
+.content{
+	width: 100%;
+	height: 100%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	
+}
+ 
+
+</style>

+ 511 - 0
pages/shopping/cart.vue

@@ -0,0 +1,511 @@
+<template>
+	<view class="content">
+		<!-- 商品列表 -->
+		<view class="shopbox" v-for="(shop,idx) in carts" :key="idx">
+			<view class="shopbox-name" v-if="shop.storeName && shop.storeName != 'null'">
+				<label style="margin-right: 30upx;">
+					<checkbox :value="shop.checked" :checked="shop.checked" @click="checkShopChange(shop)" />
+				</label>
+				<text>{{shop.storeName}}</text>
+			</view>
+			<view class="goods-list">
+				<view class="item" v-for="(item,index) in shop.list" :key="index">
+					<label style="margin-right: 30upx;">
+						<checkbox :value="item.checked"  :checked="item.checked" @click="checkChange(item,shop)" />
+					</label>
+					<image class="goods-img" :src="item.productAttrImage==null||item.productAttrImage==''?item.productImage:item.productAttrImage" mode="aspectFit"></image>
+					<view class="info-box">
+						<view>
+							<view class="title-box">
+								<view class="tag">{{utils.getDictLabelName("storeProductType",item.productType)}}</view>
+								<view class="title ellipsis">{{ item.productName }}</view>
+							</view>
+							<view class="intro ellipsis">{{item.productAttrName}}</view>
+						</view>
+						<view class="price-num">
+							<view class="price">
+								<text class="unit">¥</text>
+								<text class="text">{{item.price}}</text>
+							</view>
+							<view class="num-box">
+								<view class="img-box" @click="delNum(item)">
+									<image v-if="item.cartNum <= 1" src="../../static/images/jian.png" mode=""></image>
+									<image v-else src="../../static/images/jian2.png" mode=""></image>
+								</view>
+								<input  type="number" @change="changeNum($event,item)" :value="item.cartNum"   />
+								<view class="img-box" @click="addNum(item)">
+									<image src="../../static/images/add.png" mode=""></image>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="carts.length == 0" class="no-data-box">
+			<image src="../../static/images/no_data.png" mode="aspectFit"></image>
+			<view class="empty-title">暂无数据</view>
+		</view>
+		<!-- 猜你喜欢 -->
+		 
+		<view class="like-product">
+			<likeProduct  ref="product" />
+		</view>
+		<!-- 底部按钮 -->
+		<view class="btn-foot">
+			<view class="left">
+				<label>
+					<checkbox  :checked="checkAll" @click="handleCheckAll()" />
+				</label>
+				<text class="text">全选</text>
+				<text class="text" @click="delCart()">删除</text>
+			</view>
+			<view class="right">
+				<view class="total">
+					<text class="label">合计:</text>
+					<view class="price">
+						<text class="unit">¥</text>
+						<text class="num">{{totalMoney.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="btn" @click="submit">结算</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	import {getCarts,cartNum,delCart} from '@/api/product'
+	import likeProduct from '@/components/likeProduct.vue'
+	export default {
+		components: {
+			likeProduct
+		},	
+		data() {
+			return {
+				 
+				totalMoney:0.00,
+				carts:[],
+				checkAll:false,
+			}	
+		},
+		onLoad() {
+			// this.getCarts();
+ 
+		},
+		onShow() {
+			this.getCarts();
+		},
+		onReachBottom() {
+			this.$refs.product.getGoodsProducts();
+		},
+		methods: {
+			delCart(){			
+				var selectCarts = this.carts.flatMap(item => item.list.filter(listItem => listItem.checked === true)).map(el => el.id);
+				
+				if(selectCarts.length==0){
+					uni.showToast({
+						icon:'none',
+						title: "请选择商品删除",
+					});
+					return;
+				}
+				let data = {ids:selectCarts};
+				delCart(data).then(
+					res => {
+						if(res.code==200){
+							uni.showToast({
+								icon:'success',
+								title: "操作成功",
+							});
+							this.getCarts()
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				console.log(selectCarts)
+			},
+			computedMoney(){
+				var money=0;
+				var that=this;
+				this.carts.forEach((item,index,arr)=>{
+					item.list.forEach(it => {
+						if(it.checked){
+							money+=it.price*it.cartNum;
+						}
+					});
+				})
+				console.log(money);
+				this.totalMoney=money;
+			},
+			handleCheckAll(){
+				this.checkAll=!this.checkAll;
+				var that=this;
+				this.carts.forEach((item,index,arr)=>{
+				     item.checked=that.checkAll;
+					 item.list.forEach(it => {
+					 	it.checked=that.checkAll;
+					 });
+				})
+				this.computedMoney();
+			},
+			checkShopChange(item) {
+				item.checked = !item.checked;
+				item.list.forEach(it => {
+					it.checked= item.checked;
+				});
+				 // 新增:检查所有店铺是否都勾选,同步全局状态
+				this.checkAll = this.carts.every(item => item.checked);
+				this.computedMoney();
+			},
+			checkChange(item,shop){
+				item.checked=!item.checked;
+				shop.checked = shop.list.every(it => it.checked);
+				 // 新增:检查所有店铺是否都勾选,同步全局状态
+				this.checkAll = this.carts.every(shop => shop.checked);
+				this.computedMoney();
+			},
+			changeNum(e,item) {
+				item.cartNum = e.detail.value.replace(/\D/g, '')
+				if (item.cartNum <= 1) {
+				  uni.showToast({
+				    title: "已经是底线啦!",
+				    icon: "none",
+				    duration: 2000
+				  });
+				  return;
+				}
+				if(item.cartNum < 1) {
+					item.cartNum = 1
+				}
+				if(item.cartNum>=item.stock){
+					item.cartNum=item.stock;
+				}
+				this.changeCartNum(item)
+			},
+			changeCartNum(item){
+				let data = {number:item.cartNum,id:item.id};
+				cartNum(data).then(
+					res => {
+						if(res.code==200){
+							uni.showToast({
+								icon:'none',
+								title: "操作成功",
+							});
+							this.computedMoney();
+							
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getCarts(){
+				getCarts().then(
+					res => {
+						if(res.code==200){
+							 this.carts=res.carts;
+							 this.carts.forEach(item => {
+							   item.checked = false;
+							   item.list.forEach(it => {
+							     it.checked = false;
+							   });
+							 });
+							 this.computedMoney();
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			// 购物车减法
+			delNum(item) {
+				if (item.cartNum <= 1) {
+				  uni.showToast({
+				    title: "已经是底线啦!",
+				    icon: "none",
+				    duration: 2000
+				  });
+				  return;
+				}
+				item.cartNum --
+				if(item.cartNum < 1) {
+					item.cartNum = 1
+				}
+				 
+				this.changeCartNum(item)
+			},
+			// 购物车加法
+			addNum(item) {
+				console.log(item)
+				item.cartNum++
+				if(item.cartNum>=item.stock){
+					item.cartNum=item.stock;
+				}
+				this.changeCartNum(item)
+			},
+			// 结算
+			submit() {
+				let selectCarts = this.carts
+				  .filter(item => item.list.some(listItem => listItem.checked === true))
+				  .map(item => ({
+				    storeId: item.storeId || "",
+				    data: {
+				      type: "cart",
+				      cartIds: item.list.filter(it=>it.checked == true).map(it => it.id).join(","),
+				    }
+				  }));
+				if(selectCarts.length==0){
+					uni.showToast({
+						icon:'none',
+						title: "请选择商品",
+					});
+					return;
+				}
+				uni.navigateTo({
+					url: './confirmOrder?type=cart&confirmParam='+ encodeURIComponent(JSON.stringify(selectCarts))
+				})
+			},
+			showProduct(item){
+				uni.navigateTo({
+					url: '../shopping/productDetails?productId='+item.productId
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		padding: 20upx;
+		.shopbox {
+			background: #FFFFFF;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+		}
+		.shopbox-name {
+			padding: 30rpx 30rpx 0 30rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 30rpx;
+			color: #111;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+		.goods-list{
+			.item{
+				box-sizing: border-box;
+				height: 221upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				margin-bottom: 20upx;
+				padding: 30upx;
+				display: flex;
+				align-items: center;
+				&:last-child{
+					margin-bottom: 0;
+				}
+				.goods-img{
+					width: 160upx;
+					height: 160upx;
+					background: #FFFFFF;
+					margin-right: 30upx;
+					flex-shrink: 0;
+				}
+				.info-box{
+					height: 160upx;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					width: calc(100% - 255upx);
+					.title-box{
+						width: 100%;
+						display: flex;
+						align-items: center;
+						.tag{
+							padding: 0 6upx;
+							height: 30upx;
+							line-height: 30upx;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FFFFFF;
+							background: linear-gradient(90deg, #66b2ef 0%, #0bb3f2 100%);
+							border-radius: 4upx;
+							margin-right: 10upx;
+							flex-shrink: 0;
+						}
+						.title{
+							flex: 1;
+							font-size: 28upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							line-height: 1;
+						}
+					}
+					.intro{
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						margin-top: 22upx;
+						line-height: 1;
+					}
+					.price-num{
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						.price{
+							display: flex;
+							align-items: flex-end;
+							.unit{
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #FF6633;
+								line-height: 1.2;
+								margin-right: 4upx;
+							}
+							.text{
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: bold;
+								color: #FF6633;
+								line-height: 1;
+							}
+						}
+						.num-box{
+							display: flex;
+							align-items: center;
+							.img-box{
+								width: 60upx;
+								height: 60upx;
+								// border-radius: 4upx;
+								border: 1px solid #dddddd;
+								display: flex;
+								align-items: center;
+								justify-content: center;
+								image{
+									width: 25rpx;
+									height: 25rpx;
+								}
+							}
+							input{
+								width: 60upx;
+								height: 60upx;
+								line-height: 60upx;
+								font-size: 28upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								// border-radius: 4upx;
+								border-top: 1px solid #dddddd;
+								border-bottom: 1px solid #dddddd;
+								text-align: center;
+								// margin: 0 16upx;
+							}
+						}
+					}
+				}
+			}
+		}
+		.like-product{
+			padding-bottom: 120upx;
+		}
+		.btn-foot{
+			box-sizing: border-box;
+			width: 100%;
+			height: 121upx;
+			background: #FFFFFF;
+			padding: 16upx 30upx 16upx 60upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			position: fixed;
+			left: 0;
+			bottom: 0;
+			z-index: 99;
+			.left{
+				display: flex;
+				align-items: center;
+				.text{
+					margin-left: 14upx;
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					line-height: 1;
+				}
+			}
+			.right{
+				display: flex;
+				align-items: center;
+				.total{
+					display: flex;
+					align-items: flex-end;
+					margin-right: 36upx;
+					.label{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 1.5;
+					}
+					.price{
+						display: flex;
+						align-items: flex-end;
+						.unit{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1.2;
+							margin-right: 10upx;
+						}
+						.num{
+							font-size: 30upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FF6633;
+							line-height: 1;
+						}
+					}
+				}
+				.btn{
+					width: 200upx;
+					height: 88upx;
+					line-height: 88upx;
+					text-align: center;
+					font-size: 30upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #FFFFFF;
+					background: #0bb3f2;
+					border-radius: 44upx;
+				}
+			}
+		}
+	}
+</style>

+ 869 - 0
pages/shopping/confirmCreateOrder.vue

@@ -0,0 +1,869 @@
+<template>
+	<view>
+		<view class="inner-box">
+			<!-- 收货人 -->
+			<view class="address-box" v-if="address==null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">添加收货地址</text>
+					</view>
+					</vie>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<view class="address-box" v-if="address!=null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">{{address.realName}}</text>
+						<text class="text" v-if="address.phone!=null">{{utils.parsePhone(address.phone)}}</text>
+					</view>
+					<view class="address">
+						{{address.province}}{{address.city}}{{address.district}}{{address.detail}}
+					</view>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<!-- 药品列表 -->
+			<view class="shopbox" v-for="(shop,idx) in carts" :key="idx">
+				<view class="shopbox-name" v-if="shop.storeName && shop.storeName != 'null'">
+					<text>{{shop.storeName}}</text>
+				</view>
+				<view class="goods-list">
+					<view v-for="(item,index) in shop.list" :key="index" class="item">
+						<view class="img-box">
+							<image :src="item.productAttrImage?item.productAttrImage:item.productImage" mode="aspectFill"></image>
+						</view>
+						<view class="info-box">
+							<view>
+								<view class="name-box ellipsis2">
+									<view class="tag">{{utils.getDictLabelName("storeProductType",item.productType)}}</view>{{item.productName}}
+								</view>
+								<view class="spec ellipsis2">{{item.productAttrName}}</view>
+							</view>
+							<view class="price-num">
+								<view class="price">
+									<text class="unit">¥</text>
+									<text class="num">{{item.price.toFixed(2)}}</text>
+								</view>
+								<view class="num">x{{item.cartNum}}</view>
+							</view>
+						</view>
+					</view>
+					<!-- 运费 -->
+					<view class="points">
+						<view class="left">
+							<text class="text">运费</text>
+						</view>
+						<view class="right" v-if="price&&price.length > 0">
+							<text class="text">{{price[idx].payPostage==null||price[idx].payPostage==0?'免运费':price[idx].payPostage.toFixed(2)}}</text>
+						</view>
+					</view>
+					<!-- 备注 -->
+					<view class="points">
+						<view class="left">
+							<text class="text">备注</text>
+						</view>
+						<view class="remarks">
+							<input type="text" v-model="shop.markinfo" placeholder="备注留言(选填)" placeholder-class="input" />
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 积分 -->
+			<view class="price-info">
+				<view class="price-info-title">价格明细</view>
+				<view class="points">
+					<view class="left">
+						<text class="text">商品总价</text>
+					</view>
+					<view class="right" style="align-items: baseline;">
+						<text class="price-info-unit">¥</text>
+						<text class="price-info-num">{{priceAll.totalPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="points">
+					<view class="left">
+						<image src="../../static/images/points.png" mode=""></image>
+						<text class="text">可用积分</text>
+					</view>
+					<view class="right">
+						<text class="text">{{priceAll.usedIntegral}}积分</text>
+						<evan-switch @change="integralChange" v-model="checked" activeColor="#0bb3f2" inactiveColor="rgba(0, 0, 0, 0.1)"></evan-switch>
+					</view>
+				</view>
+				<view class="points" @click="openCoupon()">
+					<view class="left">
+						<text class="text">优惠券</text>
+					</view>
+					<view class="right">
+						<text class="text">{{couponText}}</text>
+						<image src="/static/images/arrow4.png" mode=""></image>
+					</view>
+				</view>
+				<view class="points">
+					<view class="left">
+						<text class="text">合计</text>
+					</view>
+					<view class="right" style="align-items: baseline;">
+						<text class="price-info-unit">¥</text>
+						<text class="price-info-num">{{priceAll.payPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+			</view>
+			<!-- <view class="points">
+				<view class="left">
+					<text class="text">运费</text>
+				</view>
+				<view class="right">
+					<text class="text">{{price.payPostage==null||price.payPostage==0?'免运费':price.payPostage.toFixed(2)}}</text>
+				</view>
+			</view> -->
+			<!-- 备注 -->
+			<!-- <view class="remarks">
+				<input type="text" v-model="form.mark" placeholder="备注留言(选填)" placeholder-class="input" />
+			</view> -->
+		</view>
+		<!-- 底部按钮 -->
+		<view class="btn-foot">
+			<view class="right">
+				<view class="total">
+					<text class="label">合计:</text>
+					<view class="price">
+						<text class="unit">¥</text>
+						<text class="num">{{priceAll.payPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="btn" @click="submitOrder">提交订单</view>
+			</view>
+		</view>
+		<popupBottom ref="popup" :visible.sync="couponVisible" title=" " bgColor="#f5f5f5" radius="30"    maxHeight="60%">
+		     <view class="coupon" style="height:650rpx;">
+				 <div class="coupon-list" v-if="couponsList.length > 0">
+				   <div class="item acea-row row-center-wrapper"  v-for="(item, index) in couponsList" :key="index">
+				     <div class="money" >
+				       <image v-if="item.status==0" class="img" src="https://user.test.ylrztop.com/images/coupon1.png" mode="widthFix"></image>
+				 	  <image v-if="item.status!=0" class="img" src="https://user.test.ylrztop.com/images/coupon2.png" mode="widthFix"></image>
+				 	  <div style="z-index: 999;">
+				         ¥<span class="num">{{ item.couponPrice }}</span>
+				       </div>
+				       <div class="pic-num"  >满{{ item.useMinPrice }}元可用</div>
+				     </div>
+				     <div class="text">
+				       <div class="condition line1">
+				         {{ item.couponTitle }}
+				       </div>
+				       <div class="data acea-row row-between-wrapper">
+							<div >{{ item.limitTime }}到期</div>
+							<div class="bnt bg-color-red" @click="couponSelect(item)"  >选择</div>
+				       </div>
+				     </div>
+				   </div>
+				 </div>
+				 <view v-if="couponsList.length == 0" class="no-data-box" >
+				 	<image src="/static/images/no_data.png" mode="aspectFit"></image>
+				 	<view class="empty-title">暂无数据</view>
+				 </view>
+			 </view>
+			 
+		</popupBottom>
+	</view>
+</template>
+
+<script>
+	import {getWeixinOrderTemps} from '@/api/common'
+	
+	import {confirm,computed,create} from '@/api/storeOrder'
+	import { getMyEnableCouponList } from '@/api/coupon'
+	 
+	import EvanSwitch from '@/components/evan-switch/evan-switch.vue'
+	import popupBottom from '@/components/px-popup-bottom/px-popup-bottom.vue'
+	
+	export default {
+		components: {
+			EvanSwitch,
+			popupBottom
+		},
+		data() {
+			return {
+				temps:[],
+				couponUserId:null,
+				couponText:"请选择",
+				couponsList:[],
+				couponVisible:false,
+				price:[],
+				priceAll: {
+					payPrice:0,
+					totalPostage:0,
+					usedIntegral:0,
+					totalPrice:0.00,
+				},
+				address:null,
+				carts:[],
+				checked: false,
+				type:null,
+				cartIds:null,
+				form:{
+					useIntegral:0,
+					orderKey:null,
+					addressId:null,
+					mark:null,
+					companyId:null,
+					companyUserId:null,
+					createOrderKey:null,
+				},
+				confirmParam: []
+			}
+		},
+		onLoad(option) {
+			this.confirmParam = JSON.parse(decodeURIComponent(option.confirmParam))
+			this.form.createOrderKey=option.createOrderKey;
+			this.form.companyId= option.companyId;
+			this.form.companyUserId=option.companyUserId;
+			this.cartIds=option.cartIds;
+			this.type=option.type;
+			this.confirm();
+			uni.$on('updateAddress', (e) => {
+				this.address=e;
+				this.form.addressId=e.id;
+			})
+			this.getWeixinOrderTemps();
+		},
+		methods: {
+			getWeixinOrderTemps:function(){
+				getWeixinOrderTemps().then(
+					res => {
+						if(res.code==200){
+							this.temps=res.temp
+						}else{
+							 
+						}
+					},
+					rej => {}
+				);
+			},
+			couponSelect(item){
+				this.couponText="-¥"+item.couponPrice.toFixed(2);
+				this.couponUserId=item.id;
+				this.couponVisible=false;
+				this.computed();
+			},
+			openCoupon(){
+				let that = this;
+				var data={couponType:2,useMinPrice:this.price.payPrice};
+				getMyEnableCouponList(data).then(res => {
+				  this.couponVisible=true;
+				  that.couponsList = res.data
+				})
+			},
+			integralChange(e){
+				this.form.useIntegral=e?1:0
+				this.computed()
+			},
+			confirm(item){
+				// let data = {type:this.type,cartIds:this.cartIds};
+				confirm(this.confirmParam).then(
+					res => {
+						if(res.code==200){
+							 
+							 this.carts=res.carts.map(item=>({
+								 ...item,
+								 markinfo: ""
+							 }));
+							 this.form.orderKey=res.orderKeys;
+							 if(res.address!=null){
+								 this.form.addressId=res.address.id;
+								 this.address=res.address;
+							 }
+							 this.computed()
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			computed(item){
+				let data = {createOrderKey:this.form.createOrderKey,couponUserId:this.couponUserId,orderKeys:this.form.orderKey,addressId:this.form.addressId,useIntegral:this.form.useIntegral};
+				computed(data).then(
+					res => {
+						if(res.code==200){
+							 // this.price=res.data
+							 this.price= res.data && res.data.length > 0 ? res.data : []
+							 this.priceAll = res.data && res.data.length > 0 ? res.data[res.data.length -1] : {
+								payPrice:0,
+								totalPostage:0,
+								usedIntegral:0,
+								totalPrice:0.00,
+							 }
+						}else{
+							if(res.code==501){
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+								setTimeout(function(){
+									uni.navigateBack({
+										delta:1
+									})
+								},500);
+								return;
+							}
+							else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+							
+						}
+					},
+					rej => {}
+				);
+			},
+			// 提交订单
+			submitOrder() {
+				var that=this;
+				if(this.form.orderKey==null){
+					uni.showToast({
+						icon:'none',
+						title: '订单KEY不存在',
+					});
+					return;
+				}
+				if(this.form.addressId==null){
+					uni.showToast({
+						icon:'none',
+						title: '收货地址不能为空',
+					});
+					return;
+				}
+				
+				uni.requestSubscribeMessage({
+					tmplIds: this.temps,
+					success(res) {
+						 that.createOrder();
+					},
+					fail(res) {
+						that.createOrder();
+					}
+				})
+				
+			},
+			createOrder(){
+				const mark = this.carts.map(item => item.markinfo)
+				var that=this;
+				var data=null;
+				var tuiUserId=uni.getStorageSync('tuiUserId');
+				uni.showLoading({
+					title: '正在处理中...'
+				});
+				if(tuiUserId!=null&&tuiUserId!=undefined&&tuiUserId>0){
+					data = {createOrderKey:this.form.createOrderKey,orderCreateType:3,tuiUserId:tuiUserId,companyId:this.form.companyId,companyUserId:this.form.companyUserId,couponUserId:this.couponUserId,mark:mark,orderKeys:this.form.orderKey,addressId:this.form.addressId,useIntegral:this.form.useIntegral,payType:1};
+				}
+				else{
+					data = {createOrderKey:this.form.createOrderKey,orderCreateType:3,companyId:this.form.companyId,companyUserId:this.form.companyUserId,couponUserId:this.couponUserId,mark:mark,orderKeys:this.form.orderKey,addressId:this.form.addressId,useIntegral:this.form.useIntegral,payType:1};
+				}
+				create(data).then(
+					res => {
+						uni.hideLoading()
+						if(!res.code && res.code !== 0){
+							uni.hideLoading()
+							// if(res.order.isPrescribe==1){
+							// 	setTimeout(function(){
+							// 		uni.redirectTo({
+							// 			url:"prescribe?orderId="+res.order.id
+							// 		})
+							// 	},200);
+							// }
+							// else{
+							// 	setTimeout(function(){
+							// 		uni.redirectTo({
+							// 			url: './paymentOrder?orderId='+res.order.id
+							// 		})
+							// 	},200);
+							// }
+							if(res.some(item=> item.order.isPrescribe) == 1) {
+								setTimeout(function(){
+									let orderIds = res.filter(item=> item.order.isPrescribe == 1).map(it=>it.order.id)
+									orderIds = orderIds.join(',')
+									uni.redirectTo({
+										url:"prescribe?orderId="+orderIds+"&combinationOrderId="+encodeURIComponent(res[0].order.combinationOrderId)
+									})
+								},200);
+							} else {
+								setTimeout(function(){
+									uni.redirectTo({
+										url: './paymentOrder?combinationOrderId='+encodeURIComponent(res[0].order.combinationOrderId)
+									})
+								},200);
+							}
+							return;
+						}
+						else{
+							if(res.code==501){
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+								setTimeout(function(){
+									uni.navigateBack({
+										delta:1
+									})
+								},200);
+								return;
+							}
+							else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			openAddress(){
+				uni.navigateTo({
+					url: '/pages_user/user/address'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.inner-box{
+		padding: 20upx 20upx 140upx;
+		.address-box{
+			margin-bottom: 20rpx;
+			box-sizing: border-box;
+			min-height: 171upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			background-image: url(../../static/images/address_bg.png);
+			background-repeat: no-repeat;
+			background-size: 100% 30upx;
+			background-position: left bottom;
+			padding: 38upx 30upx 36upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				width: 92%;
+				.name-box{
+					display: flex;
+					align-items: center;
+					.text{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+						line-height: 1;
+						&.name{
+							margin-right: 30upx;
+						}
+					}
+				}
+				.address{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					line-height: 42upx;
+					text-align:left;
+					margin-top: 23upx;
+				}
+			}
+			.arrow-box{
+				width: 12upx;
+				height: 23upx;
+				display: flex;
+				align-items: cenetr;
+				justify-content: cenetr;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+		.shopbox {
+			background: #FFFFFF;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			.points {
+				padding: 0 !important;
+			}
+			.remarks {
+				padding: 0 !important;
+			}
+		}
+		.shopbox-name {
+			padding: 30rpx 30rpx 0 30rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 30rpx;
+			color: #111;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+		.goods-list{
+			// margin-top: 20upx;
+			padding: 0 30upx;
+			background-color: #FFFFFF;
+			border-radius: 16upx;
+			.item{
+				padding: 30upx 0;
+				border-bottom: 1px solid #EDEEEF;
+				display: flex;
+				align-items: center;
+				.img-box{
+					width: 160upx;
+					height: 160upx;
+					margin-right: 30upx;
+					image{
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.info-box{
+					width: calc(100% - 190upx);
+					height: 160upx;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					.name-box{
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 40upx;
+						.tag{
+							display: inline-block;
+							padding: 0 6upx;
+							height: 30upx;
+							background: linear-gradient(90deg, #66b2ef 0%, #0bb3f2 100%);
+							border-radius: 4upx;
+							margin-right: 10upx;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FFFFFF;
+							line-height: 30upx;
+							float: left;
+							margin-top: 7upx;
+						}
+					}
+					.spec{
+						margin-top: 10upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 1;
+					}
+					.price-num{
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						.price{
+							display: flex;
+							align-items: flex-end;
+							.unit{
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1.2;
+								margin-right: 4upx;
+							}
+							.num{
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1;
+							}
+						}
+						.num{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							line-height: 1;
+						}
+					}
+				}
+			}
+			.sub-total{
+				height: 88upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				.label{
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.price{
+					display: flex;
+					align-items: flex-end;
+					.unit{
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 4upx;
+					}
+					.num{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+		}
+		.price-info {
+			background: #FFFFFF;
+			border-radius: 16upx;
+			&-title {
+				    padding: 30rpx 30rpx 20rpx 30rpx;
+				    font-family: PingFang SC, PingFang SC;
+				    font-weight: 500;
+				    font-size: 30rpx;
+				    color: #111;
+			}
+			&-unit {
+				font-size: 24rpx;
+			}
+			&-num {
+				font-size: 28rpx;
+			}
+		}
+		.points{
+			height: 88upx;
+			padding: 0 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			 
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				display: flex;
+				align-items: center;
+				image{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				.text{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+				}
+			}
+			.right{
+				display: flex;
+				align-items: center;
+				.text{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					 
+				}
+				image{
+					margin-left: 15upx;
+					width: 14upx;
+					height: 24upx;
+				}
+			}
+		}
+		.remarks{
+			// height: 88upx;
+			padding: 0 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			margin-top: 20upx;
+			display: flex;
+			align-items: center;
+			input{
+				width: 100%;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #000000;
+			}
+			.input{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+		}
+	}
+	
+	
+	.btn-foot{
+		box-sizing: border-box;
+		width: 100%;
+		height: 121upx;
+		background: #FFFFFF;
+		padding: 16upx 30upx 16upx 60upx;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		position: fixed;
+		left: 0;
+		bottom: 0;
+		z-index: 99;
+		.right{
+			display: flex;
+			align-items: center;
+			.total{
+				display: flex;
+				align-items: flex-end;
+				margin-right: 36upx;
+				.label{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1.5;
+				}
+				.price{
+					display: flex;
+					align-items: flex-end;
+					.unit{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 10upx;
+					}
+					.num{
+						font-size: 50upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+			.btn{
+				width: 200upx;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border-radius: 44upx;
+			}
+		}
+	}
+</style>
+<style lang="less" scoped>
+	.coupon {
+	  height: 100%;
+	}
+	/*优惠券列表公共*/
+	.coupon-list {
+	}
+	.coupon-list .item {
+	  display: flex;
+	  flex-direction: column;
+	  justify-content: center;
+	  align-items: center;
+	  width: 100%;
+	  height: 1.7 * 100rpx;
+	  margin-bottom: 0.16 * 100rpx;
+	}
+	
+	.coupon-list .item .money {
+	  background-size: 100% 100%;
+	  width: 2.4 * 100rpx;
+	  height: 100%;
+	  color: #fff;
+	  font-size: 0.36 * 100rpx;
+	  font-weight: bold;
+	  text-align: center;
+	  display: flex;
+	  flex-direction: column;
+	  align-items: center;
+	  justify-content: center;
+	  position: relative;
+	  
+	}
+	.coupon-list .item .money .img{
+	  position: absolute;
+	  width: 2.4 * 100rpx;
+	  height: 100%;
+	  color: #fff;
+	  
+	}
+	
+	.coupon-list .item .money .num {
+	  font-size: 0.6 * 100rpx;
+	}
+	.coupon-list .item .money .pic-num {
+	  font-size: 20rpx;
+	  z-index: 99;
+	}
+
+	
+	.coupon-list .item .text {
+	  width: 4.5 * 100rpx;
+	  padding: 0 0.17 * 100rpx 0 0.24 * 100rpx;
+	  background-color: #fff;
+	  box-sizing: border-box;
+	}
+	
+	.coupon-list .item .text .condition {
+	  font-size: 0.3 * 100rpx;
+	  color: #282828;
+	  height: 0.93 * 100rpx;
+	  line-height: 0.93 * 100rpx;
+	  border-bottom: 1px solid #f0f0f0;
+	}
+	
+	.coupon-list .item .text .data {
+	  font-size: 0.2 * 100rpx;
+	  color: #999;
+	  height: 0.76 * 100rpx;
+	}
+	
+	.coupon-list .item .text .data .bnt {
+	  width: 1.36 * 100rpx;
+	  height: 0.44 * 100rpx;
+	  border-radius: 0.22 * 100rpx;
+	  font-size: 0.22 * 100rpx;
+	  color: #fff;
+	  text-align: center;
+	  line-height: 0.44 * 100rpx;
+	  background-color: red;
+	}
+	
+	.coupon-list .item .text .data .bnt.gray {
+	  background-color: #ccc;
+	}
+</style>
+

+ 960 - 0
pages/shopping/confirmOrder.vue

@@ -0,0 +1,960 @@
+<template>
+	<view>
+		<view class="inner-box">
+			<!-- 收货人 -->
+			<view class="address-box" v-if="address==null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">添加收货地址</text>
+					</view>
+					</vie>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<view class="address-box" v-if="address!=null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">{{address.realName}}</text>
+						<text class="text" v-if="address.phone!=null">{{utils.parsePhone(address.phone)}}</text>
+					</view>
+					<view class="address">
+						{{address.province}}{{address.city}}{{address.district}}{{address.detail}}
+					</view>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<!-- 药品列表 -->
+			<view class="shopbox" v-for="(shop,idx) in carts" :key="idx">
+				<view class="shopbox-name" v-if="shop.storeName && shop.storeName != 'null'">
+					<text>{{shop.storeName}}</text>
+				</view>
+				<view class="goods-list">
+					<view v-for="(item,index) in shop.list" :key="index" class="item">
+						<view class="img-box">
+							<image :src="item.productAttrImage || item.productImage" mode="aspectFill"></image>
+						</view>
+						<view class="info-box">
+							<view>
+								<view class="name-box ellipsis2">
+									<view class="tag">{{utils.getDictLabelName("storeProductType",item.productType)}}
+									</view>{{item.productName}}
+								</view>
+								<view class="spec ellipsis2">{{item.productAttrName}}</view>
+							</view>
+							<view class="price-num">
+								<view class="price">
+									<text class="unit">¥</text>
+									<text class="num">{{item.price.toFixed(2)}}</text>
+								</view>
+								<view class="num">x{{item.cartNum}}</view>
+							</view>
+						</view>
+					</view>
+					<!-- 运费 -->
+					<view class="points">
+						<view class="left">
+							<text class="text">运费</text>
+						</view>
+						<view class="right" v-if="price&&price.length > 0">
+							<text
+								class="text">{{price[idx].payPostage==null||price[idx].payPostage==0?'免运费':price[idx].payPostage.toFixed(2)}}</text>
+						</view>
+					</view>
+					<!-- 备注 -->
+					<view class="points">
+						<view class="left">
+							<text class="text">备注</text>
+						</view>
+						<view class="remarks">
+							<input type="text" v-model="shop.markinfo" placeholder="备注留言(选填)"
+								placeholder-class="input" />
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 积分 -->
+			<view class="price-info">
+				<view class="price-info-title">价格明细</view>
+				<view class="points">
+					<view class="left">
+						<text class="text">商品总价</text>
+					</view>
+					<view class="right" style="align-items: baseline;">
+						<text class="price-info-unit">¥</text>
+						<text class="price-info-num">{{priceAll.totalPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="points">
+					<view class="left">
+						<image src="../../static/images/points.png" mode=""></image>
+						<text class="text">可用积分</text>
+					</view>
+					<view class="right">
+						<text class="text">{{priceAll.usedIntegral}}积分</text>
+						<evan-switch @change="integralChange" v-model="checked" activeColor="#0bb3f2"
+							inactiveColor="rgba(0, 0, 0, 0.1)"></evan-switch>
+					</view>
+				</view>
+				<view class="points" @click="openCoupon()">
+					<view class="left">
+						<text class="text">优惠券</text>
+					</view>
+					<view class="right">
+						<text class="text">{{couponText}}</text>
+						<image src="/static/images/arrow4.png" mode=""></image>
+					</view>
+				</view>
+				<view class="points">
+					<view class="left">
+						<text class="text">合计</text>
+					</view>
+					<view class="right" style="align-items: baseline;">
+						<text class="price-info-unit">¥</text>
+						<text class="price-info-num">{{priceAll.payPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+			</view>
+			<!-- <view class="points">
+				<view class="left">
+					<text class="text">运费</text>
+				</view>
+				<view class="right">
+					<text class="text">{{price.payPostage==null||price.payPostage==0?'免运费':price.payPostage.toFixed(2)}}</text>
+				</view>
+			</view> -->
+			<!-- 备注 -->
+			<!-- <view class="remarks">
+				<input type="text" v-model="form.mark" placeholder="备注留言(选填)" placeholder-class="input" />
+			</view> -->
+		</view>
+		<!-- 底部按钮 -->
+		<view class="btn-foot">
+			<view class="right">
+				<view class="total">
+					<text class="label">合计:</text>
+					<view class="price">
+						<text class="unit">¥</text>
+						<text class="num">{{priceAll.payPrice.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="btn" @click="submitOrder">提交订单</view>
+			</view>
+		</view>
+		<popupBottom ref="popup" :visible.sync="couponVisible" title=" " bgColor="#f5f5f5" radius="30" maxHeight="60%">
+			<view class="coupon" style="height:650rpx;">
+				<div class="coupon-list" v-if="couponsList.length > 0">
+					<div class="item acea-row row-center-wrapper" v-for="(item, index) in couponsList" :key="index">
+						<div class="money">
+							<image v-if="item.status==0" class="img"
+								src="https://user.test.ylrztop.com/images/coupon1.png" mode="widthFix"></image>
+							<image v-if="item.status!=0" class="img"
+								src="https://user.test.ylrztop.com/images/coupon2.png" mode="widthFix"></image>
+							<div style="z-index: 999;">
+								¥<span class="num">{{ item.couponPrice }}</span>
+							</div>
+							<div class="pic-num">满{{ item.useMinPrice }}元可用</div>
+						</div>
+						<div class="text">
+							<div class="condition line1">
+								{{ item.couponTitle }}
+							</div>
+							<div class="data acea-row row-between-wrapper">
+								<div>{{ item.limitTime }}到期</div>
+								<div class="bnt bg-color-red" @click="couponSelect(item)">选择</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<view v-if="couponsList.length == 0" class="no-data-box">
+					<image src="/static/images/no_data.png" mode="aspectFit"></image>
+					<view class="empty-title">暂无数据</view>
+				</view>
+			</view>
+
+		</popupBottom>
+	</view>
+</template>
+
+<script>
+	import {
+		getWeixinOrderTemps
+	} from '@/api/common'
+
+	import {
+		confirm,
+		computed,
+		create
+	} from '@/api/storeOrder'
+	import {
+		getMyEnableCouponList
+	} from '@/api/coupon'
+
+	import EvanSwitch from '@/components/evan-switch/evan-switch.vue'
+	import popupBottom from '@/components/px-popup-bottom/px-popup-bottom.vue'
+
+	export default {
+		components: {
+			EvanSwitch,
+			popupBottom
+		},
+		data() {
+			return {
+				temps: [],
+				couponUserId: null,
+				couponText: "请选择",
+				couponsList: [],
+				couponVisible: false,
+				price: [],
+				priceAll: {
+					payPrice: 0,
+					totalPostage: 0,
+					usedIntegral: 0,
+					totalPrice: 0.00,
+				},
+				address: null,
+				carts: [],
+				checked: false,
+				type: null,
+				cartIds: null,
+				storeId: null,
+				form: {
+					useIntegral: 0,
+					orderKey: null,
+					addressId: null,
+					mark: null,
+					companyId: null,
+					companyUserId: null
+				},
+				confirmParam:[]
+			}
+		},
+		onLoad(option) {
+			this.form.companyId = option.companyId;
+			this.form.companyUserId = option.companyUserId;
+			// this.cartIds=option.cartIds;
+			this.type = option.type;
+			this.storeId = option.storeId;
+			this.confirmParam = JSON.parse(decodeURIComponent(option.confirmParam))
+			this.confirm();
+			uni.$on('updateAddress', (e) => {
+				this.address = e;
+				this.form.addressId = e.id;
+			})
+			this.getWeixinOrderTemps();
+		},
+		methods: {
+			getWeixinOrderTemps: function() {
+				getWeixinOrderTemps().then(
+					res => {
+						if (res.code == 200) {
+							this.temps = res.temp
+						} else {
+
+						}
+					},
+					rej => {}
+				);
+			},
+			couponSelect(item) {
+				this.couponText = "-¥" + item.couponPrice.toFixed(2);
+				this.couponUserId = item.id;
+				this.couponVisible = false;
+				this.computed();
+			},
+			openCoupon() {
+				let that = this;
+				var data = {
+					couponType: 0,
+					useMinPrice: this.price.payPrice
+				};
+				getMyEnableCouponList(data).then(res => {
+					this.couponVisible = true;
+					that.couponsList = res.data
+				})
+			},
+			integralChange(e) {
+				this.form.useIntegral = e ? 1 : 0
+				this.computed()
+			},
+			confirm(item) {
+				// let data = {type:this.type,cartIds:this.cartIds};
+				if (this.confirmParam&&this.confirmParam.length>0) {
+					confirm(this.confirmParam).then(
+						res => {
+							if (res.code == 200) {
+
+								this.carts = res.carts.map(item => ({
+									...item,
+									markinfo: ""
+								}));
+								this.form.orderKey = res.orderKeys;
+								if (res.address != null) {
+									this.form.addressId = res.address.id;
+									this.address = res.address;
+								}
+								this.computed()
+							} else {
+
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+							}
+						},
+						rej => {}
+					);
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: '订单参数不存在~',
+					});
+				}
+			},
+			computed(item) {
+				let data = {
+					couponUserId: this.couponUserId,
+					orderKeys: this.form.orderKey,
+					addressId: this.form.addressId,
+					useIntegral: this.form.useIntegral,
+				};
+				computed(data).then(
+					res => {
+						if (res.code == 200) {
+							this.price = res.data && res.data.length > 0 ? res.data : []
+							this.priceAll = res.data && res.data.length > 0 ? res.data[res.data.length - 1] : {
+								payPrice: 0,
+								totalPostage: 0,
+								usedIntegral: 0,
+								totalPrice: 0.00,
+							}
+						} else {
+							if (res.code == 501) {
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+								setTimeout(function() {
+									uni.navigateBack({
+										delta: 1
+									})
+								}, 500);
+								return;
+							} else {
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+							}
+
+						}
+					},
+					rej => {}
+				);
+			},
+			// 提交订单
+			submitOrder() {
+				var that = this;
+				if (this.form.orderKey == null || this.form.orderKey.length == 0) {
+					uni.showToast({
+						icon: 'none',
+						title: '订单KEY不存在',
+					});
+					return;
+				}
+				if (this.form.addressId == null) {
+					uni.showToast({
+						icon: 'none',
+						title: '收货地址不能为空',
+					});
+					return;
+				}
+
+				uni.requestSubscribeMessage({
+					tmplIds: this.temps,
+					success(res) {
+						that.createOrder();
+					},
+					fail(res) {
+						that.createOrder();
+					}
+				})
+
+			},
+			createOrder() {
+				const mark = this.carts.map(item => item.markinfo)
+				var that = this;
+				var data = null;
+				var tuiUserId = uni.getStorageSync('tuiUserId');
+				uni.showLoading({
+					title: '正在处理中...'
+				});
+				if (tuiUserId != null && tuiUserId != undefined && tuiUserId > 0) {
+					data = {
+						orderCreateType: 1,
+						tuiUserId: tuiUserId,
+						companyId: this.form.companyId,
+						companyUserId: this.form.companyUserId,
+						couponUserId: this.couponUserId,
+						mark: mark,
+						orderKeys: this.form.orderKey,
+						addressId: this.form.addressId,
+						useIntegral: this.form.useIntegral,
+						payType: 1
+					};
+				} else {
+					data = {
+						orderCreateType: 1,
+						companyId: this.form.companyId,
+						companyUserId: this.form.companyUserId,
+						couponUserId: this.couponUserId,
+						mark: mark,
+						orderKeys: this.form.orderKey,
+						addressId: this.form.addressId,
+						useIntegral: this.form.useIntegral,
+						payType: 1
+					};
+				}
+				if (this.storeId != null && this.storeId > 0) {
+					data.storeId = this.storeId;
+				}
+				create(data).then(
+					res => {
+						uni.hideLoading()
+						if (!res.code && res.code !== 0) {
+							uni.hideLoading()
+
+							if (res.some(item => item.order.isPrescribe) == 1) {
+								setTimeout(function() {
+									let orderIds = res.filter(item => item.order.isPrescribe == 1).map(it => it
+										.order.id)
+									orderIds = orderIds.join(',')
+									uni.redirectTo({
+										url: "prescribe?orderId=" + orderIds + "&combinationOrderId=" +
+											encodeURIComponent(res[0].order.combinationOrderId)
+									})
+								}, 200);
+							} else {
+								setTimeout(function() {
+									uni.redirectTo({
+										url: './paymentOrder?combinationOrderId=' + encodeURIComponent(
+											res[0].order.combinationOrderId)
+									})
+								}, 200);
+							}
+							return;
+						} else {
+							if (res.code == 501) {
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+								setTimeout(function() {
+									uni.navigateBack({
+										delta: 1
+									})
+								}, 200);
+								return;
+							} else {
+								uni.showToast({
+									icon: 'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			openAddress() {
+				uni.navigateTo({
+					url: '/pages_user/user/address'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.inner-box {
+		padding: 20upx 20upx 140upx;
+
+		.address-box {
+			box-sizing: border-box;
+			min-height: 171upx;
+			margin-bottom: 20rpx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			background-image: url(../../static/images/address_bg.png);
+			background-repeat: no-repeat;
+			background-size: 100% 30upx;
+			background-position: left bottom;
+			padding: 38upx 30upx 36upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.left {
+				width: 92%;
+
+				.name-box {
+					display: flex;
+					align-items: center;
+
+					.text {
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+						line-height: 1;
+
+						&.name {
+							margin-right: 30upx;
+						}
+					}
+				}
+
+				.address {
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					line-height: 42upx;
+					text-align: left;
+					margin-top: 23upx;
+				}
+			}
+
+			.arrow-box {
+				width: 12upx;
+				height: 23upx;
+				display: flex;
+				align-items: cenetr;
+				justify-content: cenetr;
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+
+		.shopbox {
+			background: #FFFFFF;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+
+			.points {
+				padding: 0 !important;
+			}
+
+			.remarks {
+				padding: 0 !important;
+			}
+		}
+
+		.shopbox-name {
+			padding: 30rpx 30rpx 0 30rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 30rpx;
+			color: #111;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+		}
+
+		.goods-list {
+			// margin-top: 20upx;
+			padding: 0 30upx;
+			background-color: #FFFFFF;
+			border-radius: 16upx;
+
+			.item {
+				padding: 30upx 0;
+				border-bottom: 1px solid #EDEEEF;
+				display: flex;
+				align-items: center;
+
+				.img-box {
+					width: 160upx;
+					height: 160upx;
+					margin-right: 30upx;
+
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+
+				.info-box {
+					width: calc(100% - 190upx);
+					height: 160upx;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+
+					.name-box {
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 40upx;
+
+						.tag {
+							display: inline-block;
+							padding: 0 6upx;
+							height: 30upx;
+							background: linear-gradient(90deg, #66b2ef 0%, #0bb3f2 100%);
+							border-radius: 4upx;
+							margin-right: 10upx;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FFFFFF;
+							line-height: 30upx;
+							float: left;
+							margin-top: 7upx;
+						}
+					}
+
+					.spec {
+						margin-top: 10upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 1;
+					}
+
+					.price-num {
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+
+						.price {
+							display: flex;
+							align-items: flex-end;
+
+							.unit {
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1.2;
+								margin-right: 4upx;
+							}
+
+							.num {
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1;
+							}
+						}
+
+						.num {
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							line-height: 1;
+						}
+					}
+				}
+			}
+
+			.sub-total {
+				height: 88upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+
+				.label {
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+
+				.price {
+					display: flex;
+					align-items: flex-end;
+
+					.unit {
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 4upx;
+					}
+
+					.num {
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+		}
+
+		.price-info {
+			background: #FFFFFF;
+			border-radius: 16upx;
+
+			&-title {
+				padding: 30rpx 30rpx 20rpx 30rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 30rpx;
+				color: #111;
+			}
+
+			&-unit {
+				font-size: 24rpx;
+			}
+
+			&-num {
+				font-size: 28rpx;
+			}
+		}
+
+		.points {
+			height: 88upx;
+			width: 100%;
+			padding: 0 30upx;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+
+			.left {
+				display: flex;
+				align-items: center;
+
+				image {
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+
+				.text {
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+				}
+			}
+
+			.right {
+				display: flex;
+				align-items: center;
+
+				.text {
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+
+				}
+
+				image {
+					margin-left: 15upx;
+					width: 14upx;
+					height: 24upx;
+				}
+			}
+		}
+
+		.remarks {
+			height: 88upx;
+			padding: 0 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			display: flex;
+			align-items: center;
+
+			input {
+				width: 100%;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #000000;
+			}
+
+			.input {
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+		}
+	}
+
+
+	.btn-foot {
+		box-sizing: border-box;
+		width: 100%;
+		height: 121upx;
+		background: #FFFFFF;
+		padding: 16upx 30upx 16upx 60upx;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		position: fixed;
+		left: 0;
+		bottom: 0;
+		z-index: 99;
+
+		.right {
+			display: flex;
+			align-items: center;
+
+			.total {
+				display: flex;
+				align-items: flex-end;
+				margin-right: 36upx;
+
+				.label {
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1.5;
+				}
+
+				.price {
+					display: flex;
+					align-items: flex-end;
+
+					.unit {
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 10upx;
+					}
+
+					.num {
+						font-size: 50upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+
+			.btn {
+				width: 200upx;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border-radius: 44upx;
+			}
+		}
+	}
+</style>
+<style lang="less" scoped>
+	.coupon {
+		height: 100%;
+	}
+
+	/*优惠券列表公共*/
+	.coupon-list {}
+
+	.coupon-list .item {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		width: 100%;
+		height: 1.7 * 100rpx;
+		margin-bottom: 0.16 * 100rpx;
+	}
+
+	.coupon-list .item .money {
+		background-size: 100% 100%;
+		width: 2.4 * 100rpx;
+		height: 100%;
+		color: #fff;
+		font-size: 0.36 * 100rpx;
+		font-weight: bold;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		position: relative;
+
+	}
+
+	.coupon-list .item .money .img {
+		position: absolute;
+		width: 2.4 * 100rpx;
+		height: 100%;
+		color: #fff;
+
+	}
+
+	.coupon-list .item .money .num {
+		font-size: 0.6 * 100rpx;
+	}
+
+	.coupon-list .item .money .pic-num {
+		font-size: 20rpx;
+		z-index: 99;
+	}
+
+
+	.coupon-list .item .text {
+		width: 4.5 * 100rpx;
+		padding: 0 0.17 * 100rpx 0 0.24 * 100rpx;
+		background-color: #fff;
+		box-sizing: border-box;
+	}
+
+	.coupon-list .item .text .condition {
+		font-size: 0.3 * 100rpx;
+		color: #282828;
+		height: 0.93 * 100rpx;
+		line-height: 0.93 * 100rpx;
+		border-bottom: 1px solid #f0f0f0;
+	}
+
+	.coupon-list .item .text .data {
+		font-size: 0.2 * 100rpx;
+		color: #999;
+		height: 0.76 * 100rpx;
+	}
+
+	.coupon-list .item .text .data .bnt {
+		width: 1.36 * 100rpx;
+		height: 0.44 * 100rpx;
+		border-radius: 0.22 * 100rpx;
+		font-size: 0.22 * 100rpx;
+		color: #fff;
+		text-align: center;
+		line-height: 0.44 * 100rpx;
+		background-color: red;
+	}
+
+	.coupon-list .item .text .data .bnt.gray {
+		background-color: #ccc;
+	}
+</style>

+ 717 - 0
pages/shopping/confirmPackageOrder.vue

@@ -0,0 +1,717 @@
+<template>
+	<view>
+		<view class="inner-box">
+			<!-- 收货人 -->
+			<view class="address-box" v-if="address==null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">添加收货地址</text>
+					</view>
+					</vie>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<view class="address-box" v-if="address!=null" @click="openAddress()">
+				<view class="left">
+					<view class="name-box">
+						<text class="text name">{{address.realName}}</text>
+						<text class="text" v-if="address.phone!=null">{{utils.parsePhone(address.phone)}}</text>
+					</view>
+					<view class="address">
+						{{address.province}}{{address.city}}{{address.district}}{{address.detail}}
+					</view>
+				</view>
+				<view class="arrow-box">
+					<image src="../../static/images/arrow_gray.png" mode=""></image>
+				</view>
+			</view>
+			<!-- 药品列表 -->
+			<view class="goods-list">
+				<view  class="item">
+					<view class="img-box">
+						<image :src="package.imgUrl" mode="aspectFill"></image>
+					</view>
+					<view class="info-box">
+						<view>
+							<view class="name-box ellipsis2">
+								{{package.title}}
+							</view>
+							<view class="spec ellipsis2">{{package.descs}}</view>
+						</view>
+						
+						<view class="price-num">
+							<view class="price">
+								<text class="unit">¥</text>
+								<text class="num" v-if="package.payMoney!=null">{{package.payMoney.toFixed(2)}}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 小计 -->
+				<view class="sub-total">
+					<text class="label">合计:</text>
+					<view class="price">
+						<text class="unit">¥</text>
+						<text class="num" v-if="package.payMoney!=null">{{package.payMoney.toFixed(2)}}</text>
+					</view>
+				</view>
+			</view>
+			 
+			<view class="points" @click="openCoupon()">
+				<view class="left">
+					<text class="text">优惠券</text>
+				</view>
+				<view class="right">
+					<text class="text">{{couponText}}</text>
+					<image src="/static/images/arrow4.png" mode=""></image>
+				</view>
+			</view>
+			<!-- 备注 -->
+			<view class="remarks">
+				<input type="text" v-model="form.mark" placeholder="备注留言(选填)" placeholder-class="input" />
+			</view>
+		</view>
+		<!-- 底部按钮 -->
+		<view class="btn-foot">
+			<view class="right">
+				<view class="total">
+					<text class="label">应付金额:</text>
+					<view class="price">
+						<text class="unit">¥</text>
+						<text class="num" v-if="totalMoney!=null">{{totalMoney.toFixed(2)}}</text>
+					</view>
+				</view>
+				<view class="btn" @click="submitOrder">提交订单</view>
+			</view>
+		</view>
+		<popupBottom ref="popup" :visible.sync="couponVisible" title=" " bgColor="#f5f5f5"  radius="30"    maxHeight="60%">
+		     <view class="coupon" style="height:650rpx;">
+				 <div class="coupon-list" v-if="couponsList.length > 0">
+				   <div class="item acea-row row-center-wrapper"  v-for="(item, index) in couponsList" :key="index">
+				     <div class="money" >
+				       <image v-if="item.status==0" class="img" src="https://user.test.ylrztop.com/images/coupon1.png" mode="widthFix"></image>
+				 	  <image v-if="item.status!=0" class="img" src="https://user.test.ylrztop.com/images/coupon2.png" mode="widthFix"></image>
+				 	  <div style="z-index: 999;">
+				         ¥<span class="num">{{ item.couponPrice }}</span>
+				       </div>
+				       <div class="pic-num"  >满{{ item.useMinPrice }}元可用</div>
+				     </div>
+				     <div class="text">
+				       <div class="condition line1">
+				         {{ item.couponTitle }}
+				       </div>
+				       <div class="data acea-row row-between-wrapper">
+							<div >{{ item.limitTime }}到期</div>
+							<div class="bnt bg-color-red" @click="couponSelect(item)"  >选择</div>
+				       </div>
+				     </div>
+				   </div>
+				 </div>
+				 <view v-if="couponsList.length == 0" class="no-data-box" >
+				 	<image src="/static/images/no_data.png" mode="aspectFit"></image>
+				 	<view class="empty-title">暂无数据</view>
+				 </view>
+			 </view>
+			 
+		</popupBottom>
+	</view>
+</template>
+
+<script>
+	import {getWeixinTemps} from '@/api/common'
+	import {confirmPackageOrder,computedPackageOrder,createPackageOrder} from '@/api/storeOrder'
+	import { getMyEnableCouponList } from '@/api/coupon'
+	 
+	import EvanSwitch from '@/components/evan-switch/evan-switch.vue'
+	import popupBottom from '@/components/px-popup-bottom/px-popup-bottom.vue'
+	export default {
+		components: {
+			EvanSwitch,
+			popupBottom
+		},
+		data() {
+			return {
+				temps:[],
+				totalMoney:0,
+				couponUserId:null,
+				couponText:"请选择",
+				couponsList:[],
+				couponVisible:false,
+				companyUserId:null,
+				packageId:null,
+				address:null,
+				package:{},
+				// checked: false,
+				// type:null,
+				// cartIds:null,
+				form:{
+					// useIntegral:0,
+					orderKey:null,
+					addressId:null,
+					mark:null,
+				}
+				
+			}
+		},
+		onLoad(option) {
+			this.packageId=option.packageId;
+			this.companyUserId=option.companyUserId;
+			this.confirmPackageOrder();
+			uni.$on('updateAddress', (e) => {
+				this.address=e;
+				this.form.addressId=e.id;
+			})
+			this.getWeixinTemps();
+		},
+		onShow() {
+			
+		},
+		methods: {
+			getWeixinTemps:function(){
+				getWeixinTemps().then(
+					res => {
+						if(res.code==200){
+							this.temps=res.temp
+						}else{
+							 
+						}
+					},
+					rej => {}
+				);
+			},
+			couponSelect(item){
+				this.couponText="-¥"+item.couponPrice.toFixed(2);
+				this.couponUserId=item.id;
+				this.couponVisible=false;
+				this.computedPackageOrder();
+			},
+			openCoupon(){
+				let that = this;
+				var data={packageCateId:this.package.cateId,couponType:1,useMinPrice:this.totalMoney};
+				getMyEnableCouponList(data).then(res => {
+				  this.couponVisible=true;
+				  that.couponsList = res.data
+				})
+			},
+			confirmPackageOrder(){
+				let data = {packageId:this.packageId,couponUserId:this.couponUserId};
+				confirmPackageOrder(data).then(
+					res => {
+						if(res.code==200){
+							 this.form.orderKey=res.orderKey;
+							 this.address=res.address;
+							 this.package=res.package;
+							 if(res.address!=null){
+								 this.form.addressId=res.address.id;
+							 }
+							 this.totalMoney=res.totalMoney;
+							 
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			computedPackageOrder(){
+				let data = {packageId:this.packageId,couponUserId:this.couponUserId};
+				computedPackageOrder(data).then(
+					res => {
+						if(res.code==200){
+							 this.totalMoney=res.totalMoney;
+							 
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		 
+			// 提交订单
+			submitOrder() {
+				var that=this;
+				if(this.form.orderKey==null){
+					uni.showToast({
+						icon:'none',
+						title: '订单KEY不存在',
+					});
+					return;
+				}
+				if(this.form.addressId==null){
+					uni.showToast({
+						icon:'none',
+						title: '收货地址不能为空',
+					});
+					return;
+				}
+				
+				uni.requestSubscribeMessage({
+					tmplIds: this.temps,
+					success(res) {
+						 that.createPackageOrder();
+					},
+					fail(res) {
+						that.createPackageOrder();
+					}
+				})
+				
+				
+			},
+			createPackageOrder(){
+				var that=this;
+				uni.showLoading({
+					title: '正在处理中...'
+				});
+				let data = {couponUserId:this.couponUserId,mark:this.form.mark,orderKey:this.form.orderKey,addressId:this.form.addressId,packageId:this.packageId,companyUserId:this.companyUserId};
+				createPackageOrder(data).then(
+					res => {
+						uni.hideLoading()
+						if(res.code==200){
+							if(res.order.isPrescribe==1){
+								setTimeout(function(){
+									uni.redirectTo({
+										url:"prescribe?orderId="+res.order.id
+									})
+								},200);
+							}
+							else{
+								setTimeout(function(){
+									uni.redirectTo({
+										url: './paymentOrder?orderId='+res.order.id
+									})
+								},200);
+							}
+							return;
+						}
+						else{
+							if(res.code==501){
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+								setTimeout(function(){
+									uni.navigateBack({
+										delta:1
+									})
+								},200);
+								return;
+							}
+							else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						}
+					},
+					rej => {}
+				);
+			},
+			openAddress(){
+				uni.navigateTo({
+					url: '/pages_user/user/address'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.inner-box{
+		padding: 20upx 20upx 140upx;
+		.address-box{
+			box-sizing: border-box;
+			min-height: 171upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			background-image: url(../../static/images/address_bg.png);
+			background-repeat: no-repeat;
+			background-size: 100% 30upx;
+			background-position: left bottom;
+			padding: 38upx 30upx 36upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				width: 92%;
+				.name-box{
+					display: flex;
+					align-items: center;
+					.text{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+						line-height: 1;
+						&.name{
+							margin-right: 30upx;
+						}
+					}
+				}
+				.address{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					line-height: 42upx;
+					text-align:left;
+					margin-top: 23upx;
+				}
+			}
+			.arrow-box{
+				width: 12upx;
+				height: 23upx;
+				display: flex;
+				align-items: cenetr;
+				justify-content: cenetr;
+				image{
+					width: 100%;
+					height: 100%;
+				}
+			}
+		}
+		.goods-list{
+			margin-top: 20upx;
+			padding: 0 30upx;
+			background-color: #FFFFFF;
+			border-radius: 16upx;
+			.item{
+				padding: 30upx 0;
+				border-bottom: 1px solid #EDEEEF;
+				display: flex;
+				align-items: center;
+				.img-box{
+					width: 160upx;
+					height: 160upx;
+					margin-right: 30upx;
+					image{
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.info-box{
+					width: calc(100% - 190upx);
+					height: 160upx;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					.name-box{
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 40upx;
+						.tag{
+							display: inline-block;
+							padding: 0 6upx;
+							height: 30upx;
+							background: linear-gradient(90deg, #66b2ef 0%, #0bb3f2 100%);
+							border-radius: 4upx;
+							margin-right: 10upx;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #FFFFFF;
+							line-height: 30upx;
+							float: left;
+							margin-top: 7upx;
+						}
+					}
+					.spec{
+						margin-top: 10upx;
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						line-height: 1;
+					}
+					.price-num{
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						.price{
+							display: flex;
+							align-items: flex-end;
+							.unit{
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1.2;
+								margin-right: 4upx;
+							}
+							.num{
+								font-size: 32upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+								line-height: 1;
+							}
+						}
+						.num{
+							font-size: 24upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							line-height: 1;
+						}
+					}
+				}
+			}
+			.sub-total{
+				height: 88upx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+				.label{
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+				}
+				.price{
+					display: flex;
+					align-items: flex-end;
+					.unit{
+						font-size: 24upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 4upx;
+					}
+					.num{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+		}
+		.points{
+			height: 88upx;
+			padding: 0 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			margin-top: 20upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.left{
+				display: flex;
+				align-items: center;
+				image{
+					width: 28upx;
+					height: 28upx;
+					margin-right: 20upx;
+				}
+				.text{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+				}
+			}
+			.right{
+				display: flex;
+				align-items: center;
+				.text{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					 
+				}
+				image{
+					margin-left: 15upx;
+					width: 14upx;
+					height: 24upx;
+				}
+			}
+		}
+		.remarks{
+			height: 88upx;
+			padding: 0 30upx;
+			background: #FFFFFF;
+			border-radius: 16upx;
+			margin-top: 20upx;
+			display: flex;
+			align-items: center;
+			input{
+				width: 100%;
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #000000;
+			}
+			.input{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #999999;
+			}
+		}
+	}
+	
+	
+	.btn-foot{
+		box-sizing: border-box;
+		width: 100%;
+		height: 121upx;
+		background: #FFFFFF;
+		padding: 16upx 30upx 16upx 60upx;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		position: fixed;
+		left: 0;
+		bottom: 0;
+		z-index: 99;
+		.right{
+			display: flex;
+			align-items: center;
+			.total{
+				display: flex;
+				align-items: flex-end;
+				margin-right: 36upx;
+				.label{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1.5;
+				}
+				.price{
+					display: flex;
+					align-items: flex-end;
+					.unit{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 10upx;
+					}
+					.num{
+						font-size: 50upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+			.btn{
+				width: 200upx;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				background: #0bb3f2;
+				border-radius: 44upx;
+			}
+		}
+	}
+	 
+</style>
+<style lang="less" scoped>
+	.coupon {
+	  height: 100%;
+	}
+	/*优惠券列表公共*/
+	.coupon-list {
+	}
+	.coupon-list .item {
+	  display: flex;
+	  flex-direction: column;
+	  justify-content: center;
+	  align-items: center;
+	  width: 100%;
+	  height: 1.7 * 100rpx;
+	  margin-bottom: 0.16 * 100rpx;
+	}
+	
+	.coupon-list .item .money {
+	  background-size: 100% 100%;
+	  width: 2.4 * 100rpx;
+	  height: 100%;
+	  color: #fff;
+	  font-size: 0.36 * 100rpx;
+	  font-weight: bold;
+	  text-align: center;
+	  display: flex;
+	  flex-direction: column;
+	  align-items: center;
+	  justify-content: center;
+	  position: relative;
+	  
+	}
+	.coupon-list .item .money .img{
+	  position: absolute;
+	  width: 2.4 * 100rpx;
+	  height: 100%;
+	  color: #fff;
+	  
+	}
+	
+	.coupon-list .item .money .num {
+	  font-size: 0.6 * 100rpx;
+	}
+	.coupon-list .item .money .pic-num {
+	  font-size: 20rpx;
+	  z-index: 99;
+	}
+
+	
+	.coupon-list .item .text {
+	  width: 4.5 * 100rpx;
+	  padding: 0 0.17 * 100rpx 0 0.24 * 100rpx;
+	  background-color: #fff;
+	  box-sizing: border-box;
+	}
+	
+	.coupon-list .item .text .condition {
+	  font-size: 0.3 * 100rpx;
+	  color: #282828;
+	  height: 0.93 * 100rpx;
+	  line-height: 0.93 * 100rpx;
+	  border-bottom: 1px solid #f0f0f0;
+	}
+	
+	.coupon-list .item .text .data {
+	  font-size: 0.2 * 100rpx;
+	  color: #999;
+	  height: 0.76 * 100rpx;
+	}
+	
+	.coupon-list .item .text .data .bnt {
+	  width: 1.36 * 100rpx;
+	  height: 0.44 * 100rpx;
+	  border-radius: 0.22 * 100rpx;
+	  font-size: 0.22 * 100rpx;
+	  color: #fff;
+	  text-align: center;
+	  line-height: 0.44 * 100rpx;
+	  background-color: red;
+	}
+	
+	.coupon-list .item .text .data .bnt.gray {
+	  background-color: #ccc;
+	}
+</style>

+ 673 - 0
pages/shopping/index.vue

@@ -0,0 +1,673 @@
+<template>
+	<view class="content">
+		<view class="top-content">
+			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<!-- 这里是状态栏 -->
+			<!-- <view class="top-title">健康商城</view> -->
+			<!-- 搜索框 -->
+			<view class="search-cont" :style="{width:`calc(100vw - 80rpx - ${menuRight} - ${menuWidth})`}">
+				<view class="inner">
+					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<input type="text" disabled confirm-type="搜索" @click="toSearch" placeholder="输入药品名称"
+						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
+				</view>
+			</view>
+		</view>
+		<view :style="{height: divHeight}" class="medic-box">
+			<view class="cate-list">
+				<view v-for="(item,index) in cates" :key="index" :class="cateSelect == item.cateId?'item active':'item'"
+					@click="choseCate(item)">{{item.cateName }}
+					</view>
+						
+			</view>
+			<view class="medic">
+				<!-- 轮播图 -->
+				<view class="banner-box">
+					<swiper class="swiper" :indicator-dots="true" :circular="true" :autoplay="true" :interval="3000"
+						:duration="1000" indicator-color="rgba(255, 255, 255, 0.6)" indicator-active-color="#ffffff">
+						<swiper-item class="swiper-item" v-for="(item,index) in advs" :key="index"
+							@click="handleAdvClick(item)">
+							<image :src="item.imageUrl" mode=""></image>
+						</swiper-item>
+					</swiper>
+				</view>
+				<view class="inner-list">
+					<!-- 	<view class="definite"v-for="(subItem,index) in subCates"   @click="showProductList(subItem)">
+								<view class="img-box">
+									<image :src="subItem.pic" mode="aspectFit"></image>
+								</view>
+								<view class="name ellipsis">{{subItem.cateName}}</view>
+							</view> -->
+					<view class="definite" v-for="(subItem,index) in subCates"
+						@click="showProductList(subItem, index)">
+						<view class="name ellipsis" :class="{ 'select-name': activeIndex === index }">
+							{{subItem.cateName}}
+						</view>
+					</view>
+				</view>
+				<view class="line"></view>
+				<!-- 药品列表 -->
+				<view class="medic-list">
+					<!-- <view class="item" v-for="(item,index) in subCates" :key="index">
+							<view class="title">{{item.cateName}}</view> -->
+					
+					<!-- <view class="product-list">
+						<text class="product-title"> {{ activeIndex >= 0 ? subCates[activeIndex].cateName : '' }}</text>
+						</view> -->
+				<!-- 数据列表 -->
+				<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+					<view class="medic-list2">
+						<text class="product-title"> {{ activeIndex >= 0 && subCates.length>0?subCates[activeIndex].cateName : '' }}</text>
+						<view v-for="(item,index) in dataList" :key="index" class="item" @click="showDetail(item)">
+							<view class="img-box">
+								<image :src="item.image" mode="aspectFit"></image>
+								<view class="cf-box" v-if="item.productType==2">
+									<view class="title">处方药</view>
+									<view class="subTitle">请在医师指导下使用</view>
+								</view>
+							</view>
+							<view class="info-box">
+								<view class="title ellipsis2">{{item.productName}}</view>
+								<view class="intro">
+									<view class="intro-zk"><text>9.5折</text></view>
+									<view class="intro-zk"><text>限购1份</text></view>
+								</view>
+								<view class="price-box">
+									<view class="now">
+										<!-- <text class="unit">¥</text> -->
+										<text class="num">{{item.price.toFixed(2)}}</text>
+									</view>
+									<view class="old">¥{{item.otPrice.toFixed(2)}}</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</mescroll-body>
+					<!-- 	</view> -->
+				</view>
+
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getProductCate,getProductCateByPid,getProducts
+	} from '@/api/product'
+	import {
+		getAdv
+	} from '@/api/adv'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin], 
+		data() {
+			return {
+				activeIndex: 0,
+				divHeight: '0px',
+				allCates: [],
+				cates: [],
+				subCates: [],
+				// 右侧的胶囊距离右侧屏幕距离-px
+				menuRight: uni.getStorageSync('menuInfo').menuRight,
+				// 右侧的胶囊宽度-px
+				menuWidth: uni.getStorageSync('menuInfo').menuWidth,
+				// 状态栏的高度
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				// 选中药品分类
+				cateSelect: 0,
+				// 轮播图
+				advs: [],
+				dataList:[],
+				cateId:null,
+				pid:null,
+				defaultOrder:'desc',
+				storeId: "",
+				//上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
+						tip: '暂无数据',
+						
+					},
+					textNoMore:"已经到底了",
+				}
+			};
+		},
+		onLoad() {
+			uni.showShareMenu({
+				withShareTicket: true,
+				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
+				menus: ["shareAppMessage", "shareTimeline"] //不设置默认发送给朋友
+			})
+			
+		},
+		onShow() {
+			this.getProductCate();
+			var that = this;
+			setTimeout(function() {
+				let info = uni.createSelectorQuery().select(".top-content");
+				info.boundingClientRect(function(data) { //data - 各种参数
+					console.log(data.height) // 获取元素宽度
+					// console.log(uni.upx2px(10)) 
+					that.divHeight = "calc(100% - " + data.height + "px)"
+				}).exec()
+			}, 500);
+			this.getAdv();
+		},
+		methods: {
+			// divHeight(){
+			//    return 'height:calc(100% - ${this.top}px);'
+			// },
+			toSearch() {
+				uni.navigateTo({
+					url: '../home/productSearch'
+				})
+			},
+			handleAdvClick(item) {
+				console.log(item);
+				if (item.showType == 1) {
+					uni.setStorageSync('url', item.advUrl);
+					uni.navigateTo({
+						url: "../home/web"
+					})
+				} else if (item.showType == 2) {
+					uni.navigateTo({
+						url: item.advUrl
+					})
+				} else if (item.showType == 3) {
+					uni.setStorageSync('content', item.content);
+					uni.navigateTo({
+						url: "../home/content"
+					})
+				}
+
+			},
+			getAdv() {
+				let data = {
+					advType: 2
+				};
+				getAdv(data).then(
+					res => {
+						if (res.code == 200) {
+							this.advs = res.data;
+						}
+					},
+					rej => {}
+				);
+			},
+			getProductCate() {
+				let data = {};
+				getProductCate(data).then(
+					res => {
+						if (res.code == 200) {
+							this.allCates = res.data;
+							this.cates = this.allCates.filter(function(item) {
+								return item.pid == 0
+							});
+							if (this.cates != null && this.cates.length > 0) {
+								this.cateSelect = this.cates[0].cateId ;
+								this.getSubCate();
+							    // this.mescroll.resetUpScroll()
+								
+							}
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			// 药品分类选择
+			choseCate(item) {
+				this.activeIndex = 0
+				this.dataList=[]
+				this.cateSelect = item.cateId;
+				this.getSubCate()
+	            
+                
+			},
+			getSubCate() {
+				
+				var that = this;
+				this.subCates = this.allCates.filter(item=>item.pid == this.cateSelect);
+					// let subList = that.allCates.filter(child => {
+					// 	//返回每一项的子级数组
+					// 	return child.pid === item.cateId
+					// });
+					// subList.length > 0 ? item.children = subList : [];
+					
+				if (this.subCates != null && this.subCates.length > 0) {
+					this.cateId= this.subCates[0].cateId;
+					this.mescroll.resetUpScroll()
+				}else{
+					this.cateId=0
+					this.mescroll.resetUpScroll()
+				}
+				
+			},
+			// 查看药品详情
+			showProductList(item, index) {
+				// console.log("item>>>>>", item)
+				this.activeIndex = index;
+                this.cateId = item.cateId;
+                this.mescroll.resetUpScroll()
+				// uni.navigateTo({
+				// 	url: './productList?cateId='+item.cateId+"&pid="+item.pid
+				// })
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				this.mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					cateId:this.cateId,
+					defaultOrder:this.defaultOrder,
+					page: page.num,
+					pageSize: page.size,
+					productName: this.productName || "",
+					storeId: this.storeId
+				};
+				if(this.cateId!=null){
+					this.getProducts(page,data)
+				}
+				
+			},
+			//查询商品列表
+			getProducts(page,data) {
+				var that = this;
+				getProducts(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list; 
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+						}
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			// 查看药品详情
+			showDetail(item) {
+				if(this.from == 'company') {
+					uni.navigateTo({
+						url: '/pages_company/order/productDetails?productId='+item.productId +`${this.storeId ? '&storeId='+this.storeId : ''}`
+					})
+				} else {
+					uni.navigateTo({
+						url: './productDetails?productId='+item.productId +`${this.storeId ? '&storeId='+this.storeId : ''}`
+					})
+				}
+			},
+			goSearch(e) {
+				if (e.detail.value != null && e.detail.value != "") {
+					this.utils.addHisSearch(e.detail.value);
+				}
+				uni.navigateTo({
+					url: '../home/productList?searchValue=' + e.detail.value
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		height: 100%;
+		background-color: #fff;
+	}
+    .mescroll-body{
+		min-height: calc(100% - 330upx) !important;
+	}
+	.content {
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+
+		.top-content {
+			width: 100%;
+			z-index: 10;
+
+			.top-title {
+				height: 88upx;
+				line-height: 88upx;
+				font-size: 42upx;
+				font-family: Source Han Sans CN;
+				font-weight: bold;
+				color: #222222;
+				padding-left: 41upx;
+				background-color: #FFFFFF;
+			}
+
+			.search-cont {
+				padding: 16upx 30upx;
+				background-color: #FFFFFF;
+
+				.inner {
+					box-sizing: border-box;
+					width: 100%;
+					height: 72upx;
+					background: #F7F7F7;
+					border-radius: 36upx;
+					display: flex;
+					align-items: center;
+					padding: 0 30upx;
+
+					.icon-search {
+						width: 28upx;
+						height: 28upx;
+						margin-right: 20upx;
+					}
+
+					input {
+						height: 60upx;
+						line-height: 60upx;
+						flex: 1;
+					}
+				}
+			}
+		}
+
+		.medic-box {
+			display: flex;
+
+			.cate-list {
+				box-sizing: border-box;
+				width: 200upx;
+				background: #F2F5F9;
+				display: flex;
+				flex-direction: column;
+				// padding: 20upx 0;
+				overflow-y: scroll;
+                margin-top: 30rpx;
+				.item {
+					height: 100upx;
+					line-height: 100upx;
+					padding-left: 30upx;
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #333333;
+					position: relative;
+					 // overflow: hidden;
+					&.active {
+						background: #FFFFFF;
+						font-weight: 600;
+						// box-shadow: 12px 0 12px 0 #ffffff, -12px 0 12px 0 #ffffff;
+						// border-radius: 12px 12px 0 0;
+                        
+						&::after {
+							content: "";
+							width: 6upx;
+							height: 28upx;
+							background: #008FD3;
+							position: absolute;
+							top: 50%;
+							left: 0;
+							transform: translateY(-50%);
+							border-radius: 0upx 6upx 6upx 0;
+						}
+							
+					}
+					
+				}
+
+				
+			}
+
+			.medic {
+				box-sizing: border-box;
+				width: calc(100% - 200upx);
+				height: 100%;
+				padding: 0 30upx;
+
+				.banner-box {
+					margin-top: 30rpx;
+					width: 100%;
+					height: 160upx;
+					border-radius: 10upx;
+					overflow: hidden;
+
+					.swiper,
+					.swiper-item,
+					.swiper-item image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+	.inner-list {
+						display: flex;
+						flex-wrap: wrap;
+                        padding-top: 30upx;
+						.definite {
+							width: calc(33% - 20upx);
+							margin-right: 30upx;
+							margin-bottom: 30upx;
+
+							.img-box {
+								width: 100%;
+								height: 144upx;
+								background: #F5F5F5;
+								border-radius: 8upx;
+								overflow: hidden;
+								display: flex;
+								align-items: center;
+
+								image {
+									max-width: 100%;
+								}
+							}
+
+							.name {
+								width: 100%;
+								margin-top: 20upx;
+								font-size: 24upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #666666;
+								text-align: center;
+								padding: 10rpx 16rpx;
+							}
+
+							.select-name {
+								background: #EFF3F7;
+								color: #222426;
+								border-radius:10upx ;
+							}
+
+							&:nth-child(3n) {
+								margin-right: 0;
+							}
+						}
+					}
+
+					.line {
+						width: 100%;
+						height: 0rpx;
+						border-top: 1rpx solid #ECECEC;
+					}
+
+				.medic-list {
+					box-sizing: border-box;
+					padding: 30upx 0;
+					overflow-y: auto;
+					height: calc(100% - 330upx);
+					position: relative;
+					// .item{
+					// 	.title{
+					// 		font-size: 28upx;
+					// 		font-family: PingFang SC;
+					// 		font-weight: bold;
+					// 		color: #333333;
+					// 		padding-top: 20upx;
+					// 		margin-bottom: 30upx;
+					// 	}
+
+					// }
+				
+					.product-list {
+						padding: 32rpx 0 0;
+						.product-title {
+							font-weight: 500;
+							font-size: 28rpx;
+							color: #222426;
+						}
+					}
+			.medic-list2{
+				// padding: 20upx;
+				.product-title{
+					font-size: 28upx;
+					display: block;
+					// padding-top: 30upx;
+				}
+				.item{
+					box-sizing: border-box;
+					min-height: 200upx;
+					background: #FFFFFF;
+					// border: 4upx solid #FFFFFF;
+					border-radius: 20upx;
+					// margin-bottom: 20upx;
+					// padding: 40upx 0upx;
+					padding-top: 30upx;
+					display: flex;
+					
+					.img-box{
+						width: 200upx;
+						height: 200upx;
+						margin-right: 30upx;
+						position: relative;
+						border-radius: 20upx;
+						    overflow: hidden;
+						image{
+							width: 100%;
+							height: 100%;
+						}
+						
+					}
+					
+					.info-box{
+						width: calc(100% - 210upx);
+						display: grid;
+						    justify-items: left;
+						.title{
+							font-size: 28upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #111111;
+							line-height: 40upx;
+							height: 80upx;
+						}
+						.intro{
+							// font-size: 26upx;
+							// font-family: PingFang SC;
+							// font-weight: 500;
+							// color: #999999;
+							// line-height: 1;
+							// margin-top: 26upx;
+							display: flex;
+							.intro-zk{
+								border: 1px solid #FF4B33;
+								padding:0 8rpx ;
+								border-radius: 8rpx;
+								margin-right: 10rpx;
+								line-height: 5rpx;
+								display: flex;
+								text{
+									font-size:24rpx;
+									color:#FF4B33 ;
+									display: flex;
+									    align-items: center;
+								}
+							}
+						}
+					 .price-box{
+					 	display: flex;
+					 	align-items: flex-end;
+					 	.now{
+					 		display: flex;
+					 		align-items: flex-end;
+					 		margin-right: 20upx;
+					 		.num{
+					 			font-size: 36upx;
+					 			font-family: PingFang SC;
+					 			font-weight: bold;
+					 			color: #FF5030;
+					 			line-height: 1;
+					 		}
+					 	}
+					 	.old{
+					 		font-size: 24upx;
+					 		font-family: PingFang SC;
+					 		// font-weight: 500;
+					 		text-decoration: line-through;
+					 		color: #BBBBBB;
+					 		line-height: 1.1;
+					 	}
+					 }
+						.prce-num{
+							display: flex;
+							align-items: center;
+							justify-content: space-between;
+							margin-top: 30upx;
+							.price{
+								display: flex;
+								align-items: flex-end;
+								.unit{
+									font-size: 24upx;
+									font-family: PingFang SC;
+									font-weight: 500;
+									color: #FF6633;
+									line-height: 1.2;
+									margin-right: 4upx;
+								}
+								.num{
+									font-size: 36upx;
+									font-family: PingFang SC;
+									font-weight: bold;
+									color: #FF6633;
+									line-height: 1;
+								}
+							}
+							.cart-img{
+								.sale{
+									font-size: 20upx;
+									font-family: PingFang SC;
+									color: #999999;
+								}
+								 
+							}
+						}
+					}
+				}
+			}
+				}
+			}
+		}
+
+	}
+</style>

+ 342 - 0
pages/shopping/payOrder.vue

@@ -0,0 +1,342 @@
+<template>
+	<view class="content">
+		<view class="inner">
+			<!-- 时间、价格 -->
+			<view class="time-price">
+				<text class="time">请在{{payLimitTime}}前完成支付</text>
+				<view class="price-box">
+					<text class="unit">¥</text>
+					<text class="num">{{order.payPrice}}</text>
+				</view>
+			</view>
+			<!-- 支付方式 -->
+			<view class="pay-type">
+				<view class="title">支付方式</view>
+				<view class="item">
+					<view class="left">
+						<image src="../../static/images/wecha_pay.png" mode=""></image>
+						<text class="text">微信支付</text>
+					</view>
+					<label>
+						<checkbox disabled value="" :checked="wxPay" />
+					</label>
+				</view>
+			</view>
+			<!-- 订单详情查看 -->
+			<view class="order-info">
+				<view class="title">订单信息</view>
+				<view class="item">
+					<text class="label">订单编号</text>
+					<view class="sn-box">
+						<text class="text">{{order.orderCode}}</text>
+						<view class="copy-btn" @click="copyOrderSn(order.orderCode)">复制</view>
+					</view>
+				</view>
+				<view class="item">
+					<text class="label">下单时间</text>
+					<text class="text">{{order.createTime}}</text>
+				</view>
+				<view class="item">
+					<text class="label">支付方式</text>
+					<text class="text">微信支付</text>
+				</view>
+				 
+			</view>
+			
+		</view>
+		<view class="btn-box">
+			<view class="btn" @click="payOrder()">去支付</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {pay,getStoreOrderById} from '@/api/storeOrder'
+	export default {
+		data() {
+			return {
+				payLimitTime:null,
+				order:null,
+				// 默认选中微信支付
+				wxPay: true,
+			}
+		},
+		onLoad: function(options) {
+		    if (options.hasOwnProperty('q') && options.q) {
+				// 通过下面这步解码,可以拿到url的值
+				const url = decodeURIComponent(options.q)
+				this.url=url;
+				// // 对url中携带的参数提取处理
+				const obj = this.utils.urlToObj(url)
+				this.orderId=obj.orderId;
+		    }
+			else if(options!=null&&options.orderId!=null){
+				this.orderId=options.orderId;
+			}
+		},
+		onShow() {
+			this.getStoreOrderById();
+		},
+		methods: {
+			copyOrderSn(text) {
+				// 复制方法
+				uni.setClipboardData({
+					data:text,
+					success:()=>{
+						uni.showToast({
+							title:'内容已成功复制到剪切板',
+							icon:'none'
+						})
+					}
+				});
+			},
+			getStoreOrderById(){
+				var data = {orderId:this.orderId};
+				var that=this;
+				uni.showLoading();
+				getStoreOrderById(data).then(
+					res => {
+						if(res.code==200){
+							 console.log(res);
+							  uni.hideLoading();
+							  that.order=res.order;
+							  that.payLimitTime=res.payLimitTime;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				
+			},
+			payOrder(){
+				var data = {orderId:this.order.id};
+				var that=this;
+				uni.showLoading();
+				pay(data).then(
+					res => {
+						if(res.code==200){
+							 console.log(res);
+							 uni.requestPayment({
+							 	provider: 'wxpay',
+							 	timeStamp: res.result.timeStamp,
+							 	nonceStr: res.result.nonceStr,
+							 	package: res.result.packageValue,
+							 	signType: res.result.signType,
+							 	paySign: res.result.paySign,
+							 	success: function(res) {
+							 		 uni.hideLoading();
+									 if(that.order.isPrescribe){
+										 //如果是处方订单开处方
+										uni.redirectTo({
+										 	url:"prescribe?orderId="+that.order.id
+										})
+									 }
+									 else{
+										//如果是普通订单
+										uni.redirectTo({
+											url:"success?order="+JSON.stringify(that.order)
+										}) 
+									 }
+							 	},
+							 	fail: function(err) {
+							 		console.log('fail:' + JSON.stringify(err));
+							 		uni.hideLoading();
+							 	}
+							 });
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+		background-color: #F2F5F9;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		.inner{
+			padding: 20upx;
+			.time-price{
+				box-sizing: border-box;
+				height: 200upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				padding-top: 50upx;
+				.time{
+					font-size: 26upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+					text-align: center;
+				}
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					margin-top: 28upx;
+					.unit{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.3;
+						margin-right: 10upx;
+					}
+					.num{
+						font-size: 56upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+			.pay-type{
+				box-sizing: border-box;
+				height: 192upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				margin-top: 20upx;
+				padding: 40upx 30upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+				}
+				.item{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.left{
+						display: flex;
+						align-items: center;
+						image{
+							width: 44upx;
+							height: 44upx;
+							margin-right: 20upx;
+						}
+						.text{
+							font-size: 30upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #222222;
+							line-height: 1;
+						}
+					}
+				}
+			}
+			.order-info{
+				margin-top: 20upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				padding: 40upx 30upx;
+				.title{
+					font-size: 30upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #222222;
+					line-height: 1;
+				}
+				.item{
+					margin-top: 40upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.label{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 1;
+					}
+					.text{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #222222;
+						line-height: 32upx;
+					}
+					.cont-text{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						.bold{
+							color: #111111;
+						}
+					}
+					.sn-box{
+						display: flex;
+						align-items: center;
+						.copy-btn{
+							width: 58upx;
+							height: 32upx;
+							line-height: 32upx;
+							text-align: center;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #222222;
+							background: #F5F5F5;
+							border-radius: 4upx;
+							margin-left: 24upx;
+						}
+					}
+					 
+				}
+				.line{
+					width: 100%;
+					height: 1px;
+					background: #F0F0F0;
+					margin-top: 30upx;
+				}
+			}
+		}
+		.btn-box{
+			height: 121upx;
+			background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			.btn{
+				width: 91.73%;
+				height: 88upx;
+				line-height: 88upx;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				text-align: center;
+				background: #0bb3f2;
+				border-radius: 44upx;
+			}
+		}
+	}
+	
+</style>

+ 669 - 0
pages/shopping/paymentOrder.vue

@@ -0,0 +1,669 @@
+<template>
+	<view class="content">
+		<view class="inner">
+			<!-- 时间、价格 -->
+			<view class="time-price">
+				<text class="time">请在{{payLimitTime}}前完成支付</text>
+				<view class="price-box">
+					<text class="unit">¥</text>
+					<text class="num" >{{payMoney.toFixed(2)}}</text>
+				</view>
+				<text class="desc" v-if="payType==2">代收金额{{payDelivery.toFixed(2)}},请您在收到快递后支付尾款给快递人员。</text>
+				<text class="desc" v-if="payType==3">货到付款金额{{payDelivery.toFixed(2)}},请您在收到快递后支付给快递人员。</text>
+			</view>
+			<!-- 支付方式 -->
+			<view class="pay-type">
+				<view class="title">支付方式</view>
+				<!-- 改价订单只能选择微信支付和物流代收 -->
+				<radio-group  @change="payTypeChange" v-if="order.isEditMoney!=null&&order.isEditMoney==1">
+					<view class="item"  >
+						<view class="left"  >
+							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<text class="text">微信支付</text>
+						</view>
+						<label>
+							<radio :value="1" :checked="order.payType=='1'" />
+						</label>
+					</view>
+					<view class="item"  >
+						<view class="left">
+							<image src="/static/images/pay_de.png" mode=""></image>
+							<text class="text">物流代收</text>
+						</view>
+						<label>
+							<radio  :value="2" :checked="order.payType=='2'" />
+						</label>
+					</view>
+				</radio-group>
+				 
+				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&& order.orderCreateType==3">
+					<view class="item"  >
+						<view class="left" >
+							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<text class="text">微信支付</text>
+						</view>
+						<label>
+							<radio :value="1" :checked="order.payType=='1'" />
+						</label>
+					</view>
+					<view class="item" >
+						<view class="left">
+							<image src="../../static/images/pay_de.png" mode=""></image>
+							<text class="text">物流代收</text>
+						</view>
+						<label>
+							<radio  :value="2" :checked="order.payType=='2'" />
+						</label>
+					</view>
+					<view class="item" v-if="user!=null&&user.level==1 ">
+						<view class="left">
+							<image src="../../static/images/pay_1.png" mode=""></image>
+							<text class="text">货到付款</text>
+						</view>
+						<label>
+							<radio  :value="3" :checked="order.payType=='3'" />
+						</label>
+					</view>
+				</radio-group>
+				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&& order.orderCreateType==2">
+					<view class="item" v-if="payType==1||payType==4" >
+						<view class="left" >
+							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<text class="text">微信支付</text>
+						</view>
+						<label>
+							<radio :value="1" :checked="order.payType=='1'" />
+						</label>
+					</view>
+					<view class="item" v-if="payType==2||payType==4">
+						<view class="left" >
+							<image src="../../static/images/pay_de.png" mode=""></image>
+							<text class="text">物流代收</text>
+						</view>
+						<label>
+							<radio  :value="2" :checked="order.payType=='2'" />
+						</label>
+					</view>
+					<view class="item" v-if="user!=null&&user.level==1 ">
+						<view class="left">
+							<image src="../../static/images/pay_1.png" mode=""></image>
+							<text class="text">货到付款</text>
+						</view>
+						<label>
+							<radio  :value="3" :checked="order.payType=='3'" />
+						</label>
+					</view>
+				</radio-group>
+				<radio-group @change="payTypeChange" v-else-if="order.orderCreateType!=null&&(order.orderCreateType==1)">
+					<view class="item"  >
+						<view class="left" >
+							<image src="/static/images/wecha_pay.png" mode=""></image>
+							<text class="text">微信支付</text>
+						</view>
+						<label>
+							<radio :value="1" checked />
+						</label>
+					</view>
+				</radio-group>
+			</view>
+			<!-- 订单详情查看 -->
+			<view class="order-info">
+				<view class="title">订单信息</view>
+				<view class="item">
+					<text class="label">订单编号</text>
+					<view class="sn-box">
+						<view>
+							<view class="text" v-for="item in order.orderCodes" :key="item">{{item}}</view>
+						</view>
+						<view class="copy-btn" @click="copyOrderSn(orderCode)">复制</view>
+					</view>
+				</view>
+				<view class="item">
+					<text class="label">下单时间</text>
+					<text class="text">{{order.createTime}}</text>
+				</view>
+				<view class="item">
+					<text class="label">订单金额</text>
+					<text class="text" v-if="order!=null">{{order.payPrice.toFixed(2)}}</text>
+				</view>
+				 
+				<!-- <view class="item">
+					<text class="label">支付方式</text>
+					<text class="text">微信支付</text>
+				</view> -->
+				 
+			</view>
+			
+		</view>
+		<view class="btn-box">
+			<view class="btn" @click="payOrder()">去支付</view>
+			<view class="other-btn" >
+				亲友代付
+				<button  class="share" data-name="shareBtn" open-type="share">分享</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getUserInfo} from '@/api/user'
+	
+	import {getStoreConfig} from '@/api/common'
+	import {editPayType,pay,getStoreOrderById,payByCombinationId,getStoreOrderByCombinationId,editPayTypeByCombinationId} from '@/api/storeOrder'
+	export default {
+		data() {
+			return {
+				orderId:null,
+				payDelivery:0,
+				payMoney:0,
+				config:null,
+				payType:1,
+				payLimitTime:null,
+				order:null,
+				user:null,
+				combinationOrderId: '',
+				orderCode: "",
+				// 需要开处方的订单id
+				prescribeOrder: ""
+			}
+		},
+		onLoad(option) {
+			this.combinationOrderId = option.combinationOrderId ? decodeURIComponent(option.combinationOrderId) : ''
+			this.orderId=option.orderId ? JSON.parse(option.orderId) : '';
+			if(this.combinationOrderId) {
+				this.getStoreOrderByCombinationId()
+			} else {
+				this.getStoreOrderById();
+			}
+			this.getStoreConfig();
+			this.getUserInfo();
+			uni.showShareMenu({
+				withShareTicket:true,
+				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
+				menus:["shareAppMessage"] //不设置默认发送给朋友
+			})
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			const combinationOrderId = this.combinationOrderId ? `&combinationOrderId=${encodeURIComponent(this.combinationOrderId)}` : ''
+			return {
+				title: "帮TA支付",
+				path: '/pages_user/user/otherPaymentOrder?orderId='+this.orderId + combinationOrderId,
+				imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		methods: {
+			getUserInfo(){
+				getUserInfo().then(
+					res => {
+						if(res.code==200){
+							if(res.user!=null){
+								this.user=res.user;
+							}
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			getStoreConfig(){
+				getStoreConfig().then(
+					res => {
+						if(res.code==200){
+							this.config=res.data
+							console.log(this.config);
+						}
+					},
+					rej => {}
+				);
+			},
+			payTypeChange(e){
+				if(this.combinationOrderId) {
+					this.editPayTypeByCombinationId(e.detail.value)
+				} else {
+					this.editPayType(e.detail.value)
+				}
+			},
+			copyOrderSn(text) {
+				// 复制方法
+				uni.setClipboardData({
+					data:text,
+					success:()=>{
+						uni.showToast({
+							title:'内容已成功复制到剪切板',
+							icon:'none'
+						})
+					}
+				});
+			},
+			getStoreOrderById(){
+				var data = {orderId:this.orderId};
+				var that=this;
+				uni.showLoading();
+				getStoreOrderById(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res);
+							uni.hideLoading();
+							that.order=res.order;
+							that.order.orderCodes = that.order.orderCode ? [that.order.orderCode]:[]
+							that.orderCode = that.order.orderCode
+							that.payLimitTime=res.payLimitTime;
+							//套餐订单处理
+							if(res.productPackage!=null){
+								this.payType=res.productPackage.payType;
+								console.log(this.payType)
+								if(this.order.payType==4){
+									this.order.payType=1;
+								}
+							}
+							this.editPayType(this.order.payType)
+							
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				
+			},
+			editPayType(payType){
+				var data = {orderId:this.orderId,payType:payType};
+				var that=this;
+				uni.showLoading();
+				editPayType(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res);
+							uni.hideLoading();
+							that.order=res.order;
+							that.order.orderCodes = that.order.orderCode ? [that.order.orderCode]:[]
+							that.orderCode = that.order.orderCode
+							// this.payType=this.order.payType
+							this.payMoney=this.order.payMoney;
+							this.payDelivery=this.order.payDelivery;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				
+			},
+			getStoreOrderByCombinationId() {
+				var data = {combinationId:this.combinationOrderId};
+				var that=this;
+				uni.showLoading();
+				getStoreOrderByCombinationId(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res);
+							uni.hideLoading();
+							that.order=res.order;
+							that.orderCode = res.order.orderCodes ? res.order.orderCodes.join(',') : "";
+							that.payLimitTime=res.payLimitTime;
+							//套餐订单处理
+							if(res.productPackage!=null){
+								this.payType=res.productPackage.payType;
+								console.log(this.payType)
+								if(this.order.payType==4){
+									this.order.payType=1;
+								}
+							}
+							that.prescribeOrder = res.prescribeOrder;
+							this.editPayTypeByCombinationId(this.order.payType)
+							
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			editPayTypeByCombinationId(payType){
+				var data = {combinationOrderId:this.combinationOrderId,payType:payType};
+				var that=this;
+				uni.showLoading();
+				editPayTypeByCombinationId(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res);
+							uni.hideLoading();
+							that.order=res.order;
+							that.orderCode = res.order.orderCodes ? res.order.orderCodes.join(',') : "";
+							//this.payType=this.order.payType
+							this.payMoney=this.order.payMoney;
+							this.payDelivery=this.order.payDelivery;
+							that.prescribeOrder = res.prescribeOrder;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+				
+			},
+			otherPayOrder(){
+				// uni.navigateTo({
+				// 	url: '/pages_user/user/otherPaymentOrder?orderId='+this.orderId
+				// })
+				uni.navigateTo({
+					url: '/pages_user/user/otherPaymentOrder?combinationOrderId='+encodeURIComponent(this.combinationOrderId)
+				})
+			},
+			payOrder(){
+				if(this.combinationOrderId) {
+					let data = {combinationOrderId:this.combinationOrderId,payType:this.order.payType};
+					let that=this;
+					uni.showLoading();
+					payByCombinationId(data).then(
+						res => {
+							if(res.code==200){
+								this.payfun(res)
+							}else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						},
+						rej => {}
+					);
+				} else {
+					let data = {orderId:this.order.id,payType:this.order.payType};
+					let that=this;
+					uni.showLoading();
+					pay(data).then(
+						res => {
+							if(res.code==200){
+								this.payfun(res)
+							}else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						},
+						rej => {}
+					);
+				}
+			},
+			payfun(res) {
+				const that = this
+				console.log(res.result);
+				if(res.payType==1||res.payType==2){
+					 uni.requestPayment({
+						provider: 'wxpay',
+						timeStamp: res.result.timeStamp,
+						nonceStr: res.result.nonceStr,
+						// package: res.result.packageValue,
+						package: res.result.packageStr,
+						signType: res.result.signType,
+						paySign: res.result.paySign,
+						success: function(res) {
+							 uni.hideLoading();
+							  uni.redirectTo({
+								url:"success?order="+JSON.stringify(that.order)
+							  }) 
+						},
+						fail: function(err) {
+							uni.showToast({
+								icon:'none',
+								title:'fail:' + JSON.stringify(err),
+							});
+							console.log('fail:' + JSON.stringify(err));
+							uni.hideLoading();
+						}
+					 });
+				}
+				else if(res.payType==3){
+					 uni.hideLoading();
+					 if(that.order.isPrescribe){
+						 //如果是处方订单开处方
+						// uni.redirectTo({
+						// 	url:"prescribe?orderId="+that.order.id
+						// })
+						uni.redirectTo({
+							url:"prescribe?orderId="+that.prescribeOrder+"&combinationOrderId="+encodeURIComponent(that.order.combinationOrderId)
+						})
+					 }
+					 else{
+						//如果是普通订单
+						uni.redirectTo({
+							url:"success?order="+JSON.stringify(that.order)
+						}) 
+					 }
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		.inner{
+			padding: 20upx;
+			.time-price{
+				box-sizing: border-box;
+				padding: 50upx 0upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				.time{
+					font-size: 32upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #222222;
+					line-height: 1;
+					text-align: center;
+				}
+				.desc{
+					margin: 30upx 0upx 15upx;
+					font-size: 26upx;
+					font-family: PingFang SC;
+					color: #999999;
+					line-height: 1;
+					text-align: center;
+				}
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					margin-top: 28upx;
+					.unit{
+						font-size: 32upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1.3;
+						margin-right: 10upx;
+					}
+					.num{
+						font-size: 56upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+			}
+			.pay-type{
+				box-sizing: border-box;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				margin-top: 20upx;
+				padding: 40upx 30upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.title{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+					margin-bottom: 10upx;
+				}
+				.item{
+					padding: 15upx 0upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.left{
+						display: flex;
+						align-items: center;
+						image{
+							width: 44upx;
+							height: 44upx;
+							margin-right: 20upx;
+						}
+						.text{
+							font-size: 30upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #222222;
+							line-height: 1;
+						}
+					}
+				}
+			}
+			.order-info{
+				margin-top: 20upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				padding: 40upx 30upx;
+				.title{
+					font-size: 30upx;
+					font-family: PingFang SC;
+					font-weight: bold;
+					color: #222222;
+					line-height: 1;
+				}
+				.item{
+					margin-top: 40upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.label{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						line-height: 1;
+					}
+					.text{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #222222;
+						line-height: 32upx;
+					}
+					.cont-text{
+						font-size: 26upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #666666;
+						.bold{
+							color: #111111;
+						}
+					}
+					.sn-box{
+						display: flex;
+						align-items: center;
+						.copy-btn{
+							width: 58upx;
+							height: 32upx;
+							line-height: 32upx;
+							text-align: center;
+							font-size: 22upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #222222;
+							background: #F5F5F5;
+							border-radius: 4upx;
+							margin-left: 24upx;
+						}
+					}
+					 
+				}
+				.line{
+					width: 100%;
+					height: 1px;
+					background: #F0F0F0;
+					margin-top: 30upx;
+				}
+			}
+		}
+		.btn-box{
+			height: 242upx;
+			background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			flex-direction: column;
+			.btn{
+				width: 91.73%;
+				height: 88upx;
+				line-height: 88upx;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				text-align: center;
+				background: #0bb3f2;
+				border-radius: 44upx;
+				margin-bottom: 10rpx;
+			}
+			.other-btn{
+				width: 91.73%;
+				height: 88upx;
+				line-height: 88upx;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #0bb3f2;
+				border: 1rpx solid #0bb3f2;
+				text-align: center;
+				background: #FFFFFF;
+				border-radius: 44upx;
+				margin-bottom: 10rpx;
+				position: relative;
+				.share{
+					display: inline-block;
+					position: absolute;
+					top: 0;
+					left: 0;
+					width: 100%;
+					height: 100%;
+					opacity: 0;
+				}
+			}
+		}
+	}
+	
+</style>

+ 854 - 0
pages/shopping/prescribe.vue

@@ -0,0 +1,854 @@
+<template>
+	<view class="content">
+		<view class="fixed-top-box">
+			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="back-box" @click="back">
+				<image src="../../static/images/back_white.png" mode=""></image>
+				<text class="title">填写处方信息</text>
+				<text></text>
+			</view>
+		</view>
+		<view class="inner">
+			<view :style="{height: statusBarHeight}"></view>
+			<!-- 步骤 -->
+			<view class="steps-box">
+				<view class="item active">填写信息</view>
+				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<view class="item">医生开方</view>
+				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<view class="item">支付订单</view>
+				<image class="arrow" src="../../static/images/arrow4.png" mode=""></image>
+				<view class="item">厂家发货</view>
+			</view>
+			<!-- 提示 -->
+			<view class="tip-box">
+				<view class="top">
+					<image src="../../static/images/safe2.png" mode=""></image>
+					<text class="text">依据国家规定、处方药需凭处方购买</text>
+				</view>
+				<view class="time-tip">填写问诊人信息、处方信息</view>
+			</view>
+			<view class="info-box">
+				<!-- 选择问诊人 -->
+				<view class="chose-people">
+					<view class="title-box">
+						<text class="title">选择问诊人</text>
+						<view class="add-box" @click="addPeople()">
+							<image src="../../static/images/add26.png" mode=""></image>
+							<text >添加</text>
+						</view>
+					</view>
+					<view class="peop-list" v-if="patient.length>0">
+						<view v-for="(item,index) in patient" :key="index" :class="patientId == item.patientId?'item active':'item'" @click="chosePatient(item)">
+							<view class="name">{{ item.patientName }}</view>
+							<view class="info">
+								<text class="sex" v-if="item.gender==1">男</text>
+								<text class="sex" v-if="item.gender==2">女</text>
+								<text class="ege">{{utils.getAge(item.birthday)}}岁</text>
+							</view>
+							<!-- 选中的对号角标 -->
+							<image v-if="patientId == item.patientId" class="active-img" src="../../static/images/sel_right50.png" mode=""></image>
+						</view>
+					</view>
+				</view>
+				<view class="text-content">
+					<view class="title">
+						<text class="black">主诉</text>
+						<text class="gray">(选填)</text>
+					</view>
+					<textarea class="textArea" maxlength="200" @input="chiefComplaintInput" placeholder="请填写主诉内容"></textarea>
+				</view>
+				<view class="text-content">
+					<view class="title">
+						<text class="black">既往病史</text>
+						<text class="gray">(选填)</text>
+					</view>
+					<textarea class="textArea" maxlength="200" @input="historyIllnessInput" placeholder="请填写既往病史内容"></textarea>
+				</view>
+				<view class="img-content">
+					<view class="title">
+						<text class="black">复诊凭证</text>
+						<text class="gray">(选填) {{imgList.length}}/4</text>
+					</view>
+					<view class="upload-img">
+						<view class="img" v-for="(item,index) in imgList" :key="index"  >
+							<image :src="item" mode="aspectFill"  @click="previewImage(index)"></image>
+							<view class="del" @click="delImg(index)" >
+								<image src="/static/images/del2.png"></image>
+							</view>
+						</view>
+						<view class="chose-img" @tap="chooseImage(1)" v-if="imgList.length<4">
+							<image src="/static/images/adds.png"></image>
+						</view>
+					</view>
+					
+					 
+				</view>
+				<!-- 疾病选择 -->
+				<!-- <view class="disease-select">
+					<view class="title">
+						<text class="black">本次用药的确诊疾病</text>
+						<text class="gray">(可多选)</text>
+					</view>
+					<view class="dise-list">
+						<view 
+							v-for="(item,index) in diseaseList" 
+							:key="index" 
+							:class="activeDise == index?'item active':'item'"
+							@click="choseDise(index)"
+						>
+							{{ item }}
+						</view>
+					</view>
+				</view> -->
+				<!-- 是否使用过此药 -->
+				<view class="check-box">
+					<view class="left">
+						<image src="../../static/images/yao.png" mode=""></image>
+						<text class="text">是否有过敏史</text>
+					</view>
+					<radio-group style="display: flex;align-items: center;">
+						<label style="margin-right: 50upx;">
+							<radio value="1" :checked="isAllergic==true" style="margin-right: 16upx;" />
+							<text class="my-radio-text">是</text>
+						</label>
+						<label>
+							<radio value="0" :checked="isAllergic==false" style="margin-right: 16upx;" />
+							<text class="my-radio-text">否</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="check-box">
+					<view class="left">
+						<image src="../../static/images/yao.png" mode=""></image>
+						<text class="text">肝功能是否异常</text>
+					</view>
+					<radio-group style="display: flex;align-items: center;">
+						<label style="margin-right: 50upx;">
+							<radio value="1" :checked="isLiver==true" style="margin-right: 16upx;" />
+							<text class="my-radio-text">是</text>
+						</label>
+						<label>
+							<radio value="0" :checked="isLiver==false" style="margin-right: 16upx;" />
+							<text class="my-radio-text">否</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="check-box">
+					<view class="left">
+						<image src="../../static/images/yao.png" mode=""></image>
+						<text class="text">肾功能是否异常</text>
+					</view>
+					<radio-group style="display: flex;align-items: center;">
+						<label style="margin-right: 50upx;">
+							<radio value="1" :checked="isRenal==true" style="margin-right: 16upx;" />
+							<text class="my-radio-text">是</text>
+						</label>
+						<label>
+							<radio value="0" :checked="isRenal==false" style="margin-right: 16upx;" />
+							<text class="my-radio-text">否</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="check-box">
+					<view class="left">
+						<image src="../../static/images/yao.png" mode=""></image>
+						<text class="text">是否是备孕/怀孕/哺乳期</text>
+					</view>
+					<radio-group style="display: flex;align-items: center;">
+						<label style="margin-right: 50upx;">
+							<radio value="1" :checked="isLactation==true" style="margin-right: 16upx;" />
+							<text class="my-radio-text">是</text>
+						</label>
+						<label>
+							<radio value="0" :checked="isLactation==false" style="margin-right: 16upx;" />
+							<text class="my-radio-text">否</text>
+						</label>
+					</radio-group>
+				</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="btn" @click="submit()">去开处方</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getStoreOrderById,getStoreOrderByCombinationId} from '@/api/storeOrder'
+	import {getWeixinPrescribeTemps} from '@/api/common'
+	import {doPrescribe} from '@/api/prescribe'
+	import {getPatientList,delPatient} from '@/api/patient'
+	export default {
+		data() {
+			return {
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				order:null,
+				temps:[],
+				imgList: [],  
+				orderId:null,
+				patient:[],
+				patientId:null,
+				pickPatient:null,
+				// 疾病列表
+				// diseaseList: ['消化不良','心血管','呼吸系统','感染病','皮肤病','口腔','妇科','耳鼻喉'],
+				// 选中的疾病
+				// activeDise: 0,
+				isAllergic: false,
+				isLiver: false,
+				isRenal: false,
+				isLactation: false,
+				chiefComplaint:null,
+				historyIllness:null,
+				combinationOrderId: '',
+				// 需要开处方的id
+				prescribeOrder: ""
+			}
+		},
+		onLoad(option) {
+			this.combinationOrderId = option.combinationOrderId ? decodeURIComponent(option.combinationOrderId) : ''
+			this.orderId=option.orderId
+			this.getPatientList();
+			uni.$on('refreshPatient', () => {
+				this.getPatientList()
+			})
+			this.getWeixinPrescribeTemps();
+			if(this.combinationOrderId) {
+				this.getStoreOrderByCombinationId()
+			} else {
+				this.getStoreOrderById();
+			}
+		},
+		onShow() {
+			this.getPatientList();
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.utils.isLogin()){
+				var user=JSON.parse(uni.getStorageSync('userInfo'))
+				var combinationOrderId = this.combinationOrderId ? '&combinationOrderId='+decodeURIComponent(option.combinationOrderId) : ''
+				return {
+					title: "填写处方信息",
+					path: "/pages/shopping/prescribe?orderId="+this.prescribeOrder + combinationOrderId,
+					imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+		},
+		methods: {
+			back(){
+			  // uni.showToast({
+			  // 	icon:'none',
+			  // 	title: "请填写资料提交处方,否则将无法发货"
+			  // });
+			  uni.navigateBack();
+			},
+			getStoreOrderById:function(){
+				var data = {orderId:this.orderId};
+				getStoreOrderById(data).then(
+					res => {
+						if(res.code==200){
+							this.order=res.order
+						}else{
+							 
+						}
+					},
+					rej => {}
+				);
+			},
+			getStoreOrderByCombinationId() {
+				var data={combinationId:this.combinationOrderId}
+				getStoreOrderByCombinationId(data).then(
+					res => {
+						if(res.code==200){
+							this.order=res.order
+							this.prescribeOrder = res.prescribeOrder || ''
+						}else{
+							 
+						}
+					},
+					rej => {}
+				);
+			},
+			getWeixinPrescribeTemps:function(){
+				getWeixinPrescribeTemps().then(
+					res => {
+						if(res.code==200){
+							this.temps=res.temp
+							console.log(this.temps)
+						}else{
+							 
+						}
+					},
+					rej => {}
+				);
+			},
+			chiefComplaintInput(e) {
+				this.chiefComplaint = e.detail.value
+			},
+			historyIllnessInput(e) {
+				this.historyIllness = e.detail.value
+			},
+			// 选择图片
+			chooseImage(type) {
+				var that=this;
+				uni.chooseImage({
+					count: 4, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album', 'camera'], //从相册选择
+					success: (res) => {
+						uni.uploadFile({
+							url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+							filePath: res.tempFilePaths[0],
+							name: 'file',
+							success: (res) => {
+								that.imgList.push(JSON.parse( res.data).url)
+							}
+						});
+					}
+				});
+			},
+			//图片预览
+			previewImage(index){
+				//预览图片
+				uni.previewImage({
+					urls: this.imgList,
+					current: this.imgList[index]
+				});
+			},
+			delImg(index) {
+				uni.showModal({
+					title: '提示',
+					content: '确定要删除这张图片吗?',
+					cancelText: '取消',
+					confirmText: '确定',
+					success: res => {
+						if (res.confirm) {
+							this.imgList.splice(index, 1);
+						}
+					}
+				})
+			},
+			submit(){
+				var that=this;
+				if(this.patientId==null){
+					uni.showToast({
+						icon:'none',
+						title: "请选择患者"
+					});
+					return;
+				}
+				// if(this.pickPatient.isAuth==0){
+				// 	uni.showToast({
+				// 		icon:'none',
+				// 		title: "该问诊人未实名认证"
+				// 	});
+				// 	return;
+				// }
+				 
+				uni.showLoading({
+					title:"正在处理中"
+				})
+				var data={
+					patientId:this.patientId,
+					combinationOrderId: this.combinationOrderId,
+					orderIds:this.orderId,
+					isAllergic:this.isAllergic,
+					isLiver:this.isLiver,
+					isRenal:this.isRenal,
+					isLactation:this.isLactation,
+					chiefComplaint:this.chiefComplaint,
+					historyIllness:this.historyIllness,
+					recordPic:this.imgList.toString()
+				}
+				 doPrescribe(data).then(
+				 	res => {
+				 		if(res.code==200){
+							 uni.hideLoading()
+				 			 uni.showToast({
+				 			 	icon:'success',
+				 			 	title:res.msg,
+				 			 });
+							 var order =res.ordersRes;
+							 uni.requestSubscribeMessage({
+							 	tmplIds: this.temps,
+							 	success(res) {
+									setTimeout(function(){
+										if(order.some(item=>item.paid!=1)){
+											uni.redirectTo({
+												url: './paymentOrder?combinationOrderId='+encodeURIComponent(that.order.combinationOrderId)
+											})
+										}
+										else{
+											uni.navigateBack({  
+												delta: 1
+											});
+											
+										}
+										
+									},500);
+							 	},
+							 	fail(res) {
+							 		setTimeout(function(){
+										if(order.some(item=>item.paid!=1)){
+											uni.redirectTo({
+												url: './paymentOrder?combinationOrderId='+encodeURIComponent(that.order.combinationOrderId)
+											})
+										}
+										else{
+											uni.navigateBack({  
+												delta: 1
+											});
+											
+										}
+							 			 
+							 		},500);
+							 	}
+							 })
+							 
+				 			
+				 		}else{
+				 			uni.showToast({
+								icon:'none',
+				 				title: res.msg,
+				 			});
+				 		}
+				 	},
+				 	rej => {}
+				 );
+				
+			},
+			getPatientList(){
+			 	uni.showLoading({
+			 		title:"正在加载中"
+			 	})
+			 	getPatientList().then(
+			 		res => {
+			 			uni.hideLoading()
+			 			if(res.code==200){
+			 				this.patient=res.data;
+			 			}else{
+			 				uni.showToast({
+			 					icon:'none',
+			 					title: "请求失败",
+			 				});
+			 			}
+			 		},
+			 		rej => {}
+			 	);
+			},
+			// 选中问诊人
+			chosePatient(item) {
+				this.patientId = item.patientId;
+				this.pickPatient=item;
+			},
+			// 添加问诊人
+			addPeople() {
+				uni.navigateTo({
+					url:"/pages_user/user/patient"
+				})
+			},
+			// 疾病选择
+			choseDise(index) {
+				this.activeDise = index
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.content{
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		.fixed-top-box{
+			width: 100%;
+			background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+			position: fixed;
+			top: 0;
+			left: 0;
+			z-index: 1000;
+			.back-box{
+				height: 88upx;
+				padding-left: 22upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 20upx;
+				image{
+					width: 40upx;
+					height: 40upx;
+				}
+				.title{
+					font-size: 36upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #FFFFFF;
+				}
+			}
+		}
+		.inner{
+			margin-top: 88rpx;
+			.steps-box{
+				height: 88upx;
+				background: #FFFFFF;
+				padding: 0 48upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.item{
+					font-size: 28upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #666666;
+					&.active{
+						font-weight: bold;
+						color: #0bb3f2;
+					}
+				}
+				.arrow{
+					width: 12upx;
+					height: 22upx;
+				}
+			}
+			.tip-box{
+				box-sizing: border-box;
+				height: 130upx;
+				background: #FFF4E6;
+				padding: 26upx 0 30upx 50upx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				.top{
+					display: flex;
+					align-items: center;
+					image{
+						width: 26upx;
+						height: 31upx;
+						margin-right: 10upx;
+					}
+					.text{
+						font-size: 28upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #EF8A07;
+						line-height: 1;
+					}
+				}
+				.time-tip{
+					padding-left: 40upx;
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #999999;
+					line-height: 1;
+				}
+			}
+			.info-box{
+				padding: 20upx;
+				.chose-people{
+					box-sizing: border-box;
+					background: #FFFFFF;
+					border-radius: 16upx;
+					padding: 40upx 30upx 30upx;
+					.title-box{
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						.title{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+						}
+						.add-box{
+							display: flex;
+							align-items: center;
+							image{
+								width: 26upx;
+								height: 26upx;
+								margin-right: 11upx;
+							}
+							text{
+								font-size: 28upx;
+								font-family: PingFang SC;
+								font-weight: 500;
+								color: #111111;
+							}
+						}
+					}
+					.peop-list{
+						display: flex;
+						flex-wrap: wrap;
+						margin-top: 30upx;
+						.item{
+							box-sizing: border-box;
+							padding: 18upx 30upx;
+							width: 31.28%;
+							height: 110upx;
+							background: #F7F7F7;
+							border-radius: 16upx;
+							margin: 0 20upx 10upx 0;
+							border: 2upx solid #F7F7F7;
+							display: flex;
+							flex-direction: column;
+							justify-content: space-between;
+							&:nth-child(3n){
+								margin-right: 0;
+							}
+							&.active{
+								background: rgba(230, 250, 247, 0);
+								border: 2upx solid #0bb3f2;
+								position: relative;
+							}
+							.active-img{
+								width: 50upx;
+								height: 50upx;
+								position: absolute;
+								right: -2upx;
+								bottom: -2upx;
+							}
+							.name{
+								font-size: 30upx;
+								line-height: 1;
+								font-family: PingFang SC;
+								font-weight: bold;
+								color: #111111;
+							}
+							.info{
+								display: flex;
+								align-items: center;
+								.sex,
+								.ege{
+									font-size: 26upx;
+									font-family: PingFang SC;
+									line-height: 1;
+									font-weight: 500;
+									color: #666666;
+								}
+								.ege{
+									margin-left: 19upx;
+								}
+							}
+						}
+					}
+				}
+				.disease-select{
+					box-sizing: border-box;
+					min-height: 286upx;
+					background: #FFFFFF;
+					border-radius: 16upx;
+					padding: 40upx 30upx 22upx;
+					margin-top: 20upx;
+					.title{
+						display: flex;
+						align-items: center;
+						align-items: flex-end;
+						.black{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+						.gray{
+							font-size: 28upx;
+							font-family: PingFang SC;
+							color: #999999;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+					}
+					.dise-list{
+						display: flex;
+						flex-wrap: wrap;
+						margin-top: 26upx;
+						.item{
+							box-sizing: border-box;
+							height: 64upx;
+							line-height: 64upx;
+							font-size: 28upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #0bb3f2;
+							background: #F5FFFE;
+							border: 1px solid #8AD5CE;
+							padding: 0 20upx;
+							border-radius: 32upx;
+							margin: 0 20upx 20upx 0;
+							&.active{
+								background: #0bb3f2;
+								border: 1px solid #0bb3f2;
+								color: #FFFFFF;
+							}
+						}
+					}
+				}
+				.text-content{
+					box-sizing: border-box;
+					min-height: 286upx;
+					background: #FFFFFF;
+					border-radius: 16upx;
+					padding: 40upx 30upx 22upx;
+					margin-top: 20upx;
+					.title{
+						display: flex;
+						align-items: center;
+						align-items: flex-end;
+						.black{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+						.gray{
+							font-size: 28upx;
+							font-family: PingFang SC;
+							color: #999999;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+					}
+					.textArea{
+						margin: 30rpx 0rpx 0rpx 0rpx;
+						width: 100%;
+					}
+					 
+					
+					 
+				}
+				.img-content{
+					box-sizing: border-box;
+					min-height: 286upx;
+					background: #FFFFFF;
+					border-radius: 16upx;
+					padding: 40upx 30upx 22upx;
+					margin-top: 20upx;
+					margin-bottom: 20upx;
+					.title{
+						display: flex;
+						align-items: center;
+						align-items: flex-end;
+						.black{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							color: #111111;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+						.gray{
+							font-size: 28upx;
+							font-family: PingFang SC;
+							color: #999999;
+							line-height: 1;
+							margin-left: 10upx;
+						}
+					}
+					.textArea{
+						margin: 30rpx 0rpx 0rpx 0rpx;
+						width: 100%;
+					}
+					.upload-img{
+						margin: 30rpx 0rpx 0rpx 0rpx;
+						width: 100%;
+						display: flex;
+						align-items: flex-start;
+						.img{
+							margin-right: 10rpx;
+							width: 100rpx;
+							height: 100rpx;
+							position: relative;
+							image{
+								width: 100%;
+								height: 100%;
+							}
+							.del{
+								right:0rpx;
+								top:0rpx;
+								position: absolute;
+								image{
+									width: 30rpx;
+									height:30rpx;
+								}
+							}
+						}
+						.chose-img{
+							border-radius: 5rpx;
+							border: 1px solid #eee;
+							padding: 5rpx;
+							display: flex;
+							align-items: center;
+							justify-content: center;
+							width: 100rpx;
+							height: 100rpx;
+							image{
+								width: 50rpx;
+								height: 50rpx;
+							}
+							
+						}
+					}
+					
+					 
+				}
+
+				.check-box{
+					height: 88upx;
+					background: #FFFFFF;
+					border-radius: 16upx;
+					padding: 0 30upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.left{
+						display: flex;
+						align-items: center;
+						image{
+							width: 21upx;
+							height: 27upx;
+							margin-right: 20upx;
+						}
+						.text{
+							font-size: 32upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #666666;
+						}
+					}
+					.my-radio-text{
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 30upx;
+					}
+				}
+			}
+		}
+		.btn-box{
+			height: 120upx;
+			padding: 30upx;
+			// background: #FFFFFF;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			.btn{
+				width: 100%;
+				height: 88upx;
+				line-height: 88upx;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #FFFFFF;
+				text-align: center;
+				background: #0bb3f2;
+				border-radius: 44upx;
+			}
+		}
+	}
+	
+</style>

Некоторые файлы не были показаны из-за большого количества измененных файлов