XSLu08042 3 weeks ago
parent
commit
3a41d2cfd9
53 changed files with 2494 additions and 448 deletions
  1. 827 1
      .hbuilderx/launch.json
  2. 13 1
      App.vue
  3. 3 1
      api/adv.js
  4. 4 0
      api/common.js
  5. 4 0
      api/index.js
  6. 6 6
      api/storeAfterSales.js
  7. 12 0
      api/user.js
  8. 4 3
      common/request.js
  9. 153 0
      components/medicineItem.vue
  10. 133 0
      components/medicineVerticalItem.vue
  11. 6 114
      components/tuiProduct.vue
  12. 1 1
      manifest.json
  13. 1 1
      note.txt
  14. 20 4
      pages.json
  15. 1 1
      pages/auth/login.vue
  16. 39 22
      pages/index/index.vue
  17. 3 3
      pages/index/indexOld.vue
  18. 101 15
      pages/shopping/index.vue
  19. 8 5
      pages/user/index.vue
  20. 1 1
      pages_course/video.vue
  21. 2 3
      pages_index/healthy/detail.vue
  22. 6 9
      pages_index/healthy/index.vue
  23. 1 1
      pages_index/healthy/readUsers.vue
  24. 1 1
      pages_order/inquiryForm2_1.vue
  25. 1 1
      pages_order/inquiryForm2_2.vue
  26. 1 1
      pages_order/inquiryOrderList.vue
  27. 1 1
      pages_order/inquiryPay.vue
  28. 1 1
      pages_order/inquirySelect.vue
  29. 1 1
      pages_order/inquirySelectType.vue
  30. 1 1
      pages_order/prescribeDetails.vue
  31. 22 0
      pages_shopping/api/prescribe.js
  32. 7 7
      pages_shopping/cart.vue
  33. 1 1
      pages_shopping/components/likeProduct.vue
  34. 1 1
      pages_shopping/payOrder.vue
  35. 1 1
      pages_shopping/paymentOrder.vue
  36. 3 3
      pages_shopping/prescribe.vue
  37. 28 11
      pages_shopping/productDetails.vue
  38. 6 3
      pages_shopping/productList.vue
  39. 165 31
      pages_shopping/registerMerchant.vue
  40. 1 1
      pages_shopping/user/otherPaymentOrder.vue
  41. 1 1
      pages_store/index.vue
  42. 129 109
      pages_store/storeDetail.vue
  43. 97 16
      pages_store/storeIndex.vue
  44. 1 1
      pages_user/about.vue
  45. 1 1
      pages_user/api/storeAfterSales.js
  46. 265 49
      pages_user/complaint.vue
  47. 136 0
      pages_user/complaintList.vue
  48. 259 0
      pages_user/complaintListDetail.vue
  49. 1 1
      pages_user/shopping/paymentOrderRemain.vue
  50. 1 1
      pages_user/shopping/refundOrderList.vue
  51. 2 2
      pages_user/shopping/refundOrderProduct.vue
  52. 2 2
      pages_user/shopping/storeOrder.vue
  53. 8 7
      utils/common.js

+ 827 - 1
.hbuilderx/launch.json

@@ -5,6 +5,832 @@
             "customPlaygroundType" : "device",
             "playground" : "custom",
             "type" : "uni-app:app-android"
-        }
+        },
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	},
+	{
+		"mp-weixin" : 
+		{
+			"launchtype" : "local"
+		},
+		"type" : "unicloud"
+	}
     ]
 }

+ 13 - 1
App.vue

@@ -12,7 +12,7 @@ import { openImLoginApi } from '@/pages_im/api/imBll';
 import NotificationUtil from '@/pages_im/util/notification';
 import newMessage from '@/pages_im/static/audio/newMessage.wav';
 
-import { getTlsSig } from '@/api/common.js'
+import { getTlsSig,getDicts } from '@/api/common.js'
 import { checkLogin } from '@/api/user.js'
 
 let cacheConversationList = [];
@@ -43,6 +43,7 @@ export default {
 		//path="https://api.cdwjyyh.com";
 		//path="https://test.userapp.his.cdwjyyh.com";
 		uni.setStorageSync('requestPath',path)
+		this.getDicts()
   },
   onUnload() {
   	 
@@ -842,6 +843,17 @@ export default {
 		  uni.showToast({ title:" platformType:"+platformType,icon:'none', duration: 2000 });
 		  return platformType;
 	},
+	getDicts(){
+		getDicts().then(
+			res => {
+				if(res.code==200){
+					uni.setStorageSync('dicts',JSON.stringify(res));
+				} 
+				 
+			},
+			rej => {}
+		);
+	},
   }
 };
 </script>

+ 3 - 1
api/adv.js

@@ -5,7 +5,9 @@ let request = new Request().http
 	 return request('/app/adv/getAdvList',data,'GET');
  }
   
- 
+ export function getAdv(data) {
+ 	 return request('/store/app/adv/getAdv',data,'GET');
+ }
 
  
  

+ 4 - 0
api/common.js

@@ -38,4 +38,8 @@ let request = new Request().http
  }
  export function getDepartmentList(data) {
  	 return request('/app/common/getDepartmentList',data,'GET');
+ }
+ 
+ export function getWeixinPrescribeTemps() {
+ 	 return request('/store/app/common/getWeixinPrescribeTemps',null,'GET');
  }

+ 4 - 0
api/index.js

@@ -46,4 +46,8 @@ let request = new Request().http
  }
  export function storeDetail(storeId) {
  	 return request('/store/app/store/'+storeId,null,'GET');
+ }
+ 
+ export function getProducts(data) {
+ 	 return request('/store/app/product/getProducts',data,'GET');
  }

+ 6 - 6
api/storeAfterSales.js

@@ -2,24 +2,24 @@ import Request from '../common/request.js';
 let request = new Request().http
  
  export function getStoreOrderItems(data) {
- 	 return request('/app/storeAfterSales/getStoreOrderItems',data,'GET');
+ 	 return request('/store/app/storeAfterSales/getStoreOrderItems',data,'GET');
  } 
  export function applyAfterSales(data) {
- 	 return request('/app/storeAfterSales/applyAfterSales',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/store/app/storeAfterSales/applyAfterSales',data,'POST','application/json;charset=UTF-8');
  }
  
  export function getStoreAfterSalesList(data) {
- 	 return request('/app/storeAfterSales/getStoreAfterSalesList',data,'GET');
+ 	 return request('/store/app/storeAfterSales/getStoreAfterSalesList',data,'GET');
  } 
  
  export function getStoreAfterSalesById(data) {
- 	 return request('/app/storeAfterSales/getStoreAfterSalesById',data,'GET');
+ 	 return request('/store/app/storeAfterSales/getStoreAfterSalesById',data,'GET');
  } 
  export function revoke(data) {
- 	 return request('/app/storeAfterSales/revoke',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/store/app/storeAfterSales/revoke',data,'POST','application/json;charset=UTF-8');
  }
  export function addDelivery(data) {
- 	 return request('/app/storeAfterSales/addDelivery',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/store/app/storeAfterSales/addDelivery',data,'POST','application/json;charset=UTF-8');
  }
  
  

+ 12 - 0
api/user.js

@@ -54,3 +54,15 @@ let request = new Request().http
  export function storeComplaint(data) {
  	return request('/store/app/user/complaint',data,'POST','application/json;charset=UTF-8');
  }
+ export function storeComplaintList(data) {
+ 	return request('/store/app/user/complaint/list',null,'GET');
+ }
+ export function storeComplaintDetail(id) {
+ 	return request('/store/app/user/complaint/'+id,null,'GET');
+ }
+ export function storeComplaintMsg(data) {
+ 	return request('/store/app/user/complaint/msg/list',data,'GET');
+ }
+ export function storeComplaintMsgAdd(data) {
+ 	return request('/store/app/user/complaint/msgAdd',data,'POST','application/json;charset=UTF-8');
+ }

+ 4 - 3
common/request.js

@@ -7,13 +7,14 @@ export default class Request {
 		// var path = 'https://userapp.his.cdwjyyh.com';
 		// var path = 'https://app.rtys.cdwjyyh.com';
 		// var path = "https://userapp.bjyjbao.com/prod-api"
-		var path = "http://x834c3af.natappfree.cc"
+		var path = "http://ub86b489.natappfree.cc"
+		// var path = "http://192.168.10.126:8113"
 		let token="";
 		let type = 0
 		if(url!=null){
 			let type = 1
-			path= url;
-			token= uni.getStorageSync('AppTokenmini_RTCourse')
+			// path= url;
+			token= uni.getStorageSync('AppTokenmini_MYCourse')
 		}
 		else{
 			let type = 0

+ 153 - 0
components/medicineItem.vue

@@ -0,0 +1,153 @@
+<template>
+	<view class="medicine-item" @click="showProduct">
+		<view class="x-bc" style="margin-bottom: 16rpx;">
+			<view class="pro-name ellipsis" style="white-space: normal;">{{ item.productName || '' }}</view>
+			<view class="otctxt" v-show="item.productType">{{$getDictLabelName("storeProductType",item.productType)}}</view>
+		</view>
+		<view class="x-f">
+			<view class="medicine">
+				<image :src="item.image" mode="aspectFill"></image>
+				<!-- {{$getDictLabelName("storeProductType",item.productType)}} -->
+				<!-- <view class="otc">处方药</view> -->
+				<!-- <image class="otc" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/index/blue_lable_otc.svg" mode="aspectFill"></image> -->
+			</view>
+			<view class="medicine-r">
+				<view class="desc ellipsis">包装规格:{{ item.unitName || '--' }}</view>
+				<view class="desc ellipsis">批准文号:{{ item.batchNumber || '--' }}</view>
+				<view class="desc ellipsis">生产厂家:{{ item.mah || '--' }}</view>
+				<!-- <view class="desc"><text style="color: #2583EB;margin: 0 10rpx;">{{item.storecount||0}}</text> 商家销售 </view> -->
+				<view class="price-box x-bc">
+					<view>
+						<text class="price-box-unit">¥</text>
+						<text class="price-box-integer">{{splitPrice(item.price || 0).intPart}}</text>
+						<text class="price-box-decimal">.{{splitPrice(item.price || 0).decPart}}</text>
+						<!-- <text class="price-box-text">/日</text> -->
+						<!-- <text class="old" v-show="item.price!=item.otPrice&&item.otPrice!==null&&item.otPrice!==undefined">¥{{item.otPrice.toFixed(2)}}</text> -->
+					</view>
+					<view class="desc"><text style="color: #2583EB;margin: 0 10rpx;">{{item.storecount||0}}</text> 商家销售 </view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: ['item'],
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			splitPrice(num) {
+			  const [intPart = '0', decPart = '00'] = String(num||0).split('.');
+			  return { intPart, decPart: decPart.padEnd(2, '0').slice(0, 2) };
+			},
+			showProduct() {
+				uni.navigateTo({
+					url: '/pages_shopping/productDetails?productId=' + this.item.productId
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.otctxt {
+		background-color: #2BC7B9;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 24rpx;
+		color: #FFFFFF;
+		padding: 4rpx 14rpx;
+		border-radius: 6rpx;
+	}
+	.pro-name {
+		flex: 1;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #191A1B;
+		flex: 1;
+		overflow: hidden;
+	}
+	.old{
+		margin-left: 14rpx;
+		font-size: 26upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		text-decoration: line-through;
+		color: #BBBBBB;
+		line-height: 1.1;
+	}
+	.price-box {
+		font-family: Roboto, Roboto;
+		font-weight: bold;
+		font-size: 36rpx;
+		color: #FF5C03;
+		margin-top: 22rpx;
+	
+		&-unit {
+			font-weight: 600;
+			font-size: 26rpx;
+		}
+	
+		&-decimal {
+			font-weight: 600;
+			font-size: 26rpx;
+		}
+	
+		&-text {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 26rpx;
+		}
+	}
+	.medicine {
+		width: 200rpx;
+		height: 200rpx;
+		flex-shrink: 0;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		overflow: hidden;
+		position: relative;
+		margin-right: 24rpx;
+		.otc {
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 96rpx;
+			height: 40rpx;
+			border-radius: 0;
+		}
+	
+		image {
+			width: 100%;
+			height: 100%;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+		}
+	
+		&-r {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #191A1B;
+			flex: 1;
+			overflow: hidden;
+		}
+	
+		&-item {
+			align-items: flex-start !important;
+			padding: 20rpx 0;
+		}
+	}
+	
+	.desc {
+		display: block;
+		margin-top: 12rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 24rpx;
+		color: #939599;
+	}
+</style>

+ 133 - 0
components/medicineVerticalItem.vue

@@ -0,0 +1,133 @@
+<template>
+	<view class="item" @click="showProduct()">
+		<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 x-bc">
+				<view>
+					<text class="price-box-unit">¥</text>
+					<text class="price-box-integer">{{splitPrice(item.price || 0).intPart}}</text>
+					<text class="price-box-decimal">.{{splitPrice(item.price || 0).decPart}}</text>
+					<!-- <text class="price-box-text">/日</text> -->
+					<!-- <text class="old" v-show="item.price!=item.otPrice&&item.otPrice!==null&&item.otPrice!==undefined">¥{{item.otPrice.toFixed(2)}}</text> -->
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: ['item','storeId'],
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			splitPrice(num) {
+			  const [intPart = '0', decPart = '00'] = String(num||0).split('.');
+			  return { intPart, decPart: decPart.padEnd(2, '0').slice(0, 2) };
+			},
+			showProduct() {
+				uni.navigateTo({
+					url: '/pages_shopping/productDetails?productId=' + this.item.productId+'&storeId='+this.storeId || ''
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.price-box {
+		font-family: Roboto, Roboto;
+		font-weight: bold;
+		font-size: 36rpx;
+		color: #FF5C03;
+	
+		&-unit {
+			font-weight: 600;
+			font-size: 26rpx;
+		}
+	
+		&-decimal {
+			font-weight: 600;
+			font-size: 26rpx;
+		}
+	
+		&-text {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 26rpx;
+		}
+	}
+	.item{
+		margin-right: 20rpx;
+		margin-bottom: 20rpx;
+		width: 235rpx;
+		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: 235rpx;
+			image{
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.info-box{
+			box-sizing: border-box;
+			// height: 182rpx;
+			padding: 12rpx 20rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+			.title{
+				font-size: 26rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #111111;
+				line-height: 40rpx;
+			}
+			.price-box{
+				display: flex;
+				align-items: flex-end;
+				.now{
+					display: flex;
+					align-items: flex-end;
+					margin-right: 20rpx;
+					.unit{
+						font-size: 24rpx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #FF6633;
+						line-height: 1.2;
+						margin-right: 4rpx;
+					}
+					.num{
+						font-size: 36rpx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #FF6633;
+						line-height: 1;
+					}
+				}
+				.old{
+					font-size: 26rpx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					text-decoration: line-through;
+					color: #BBBBBB;
+					line-height: 1.1;
+				}
+			}
+		}
+	}
+</style>

+ 6 - 114
components/tuiProduct.vue

@@ -7,35 +7,19 @@
 				<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/arrow_gray.png"></image>
 			</view>
 		</view>
-		<view class="medicine-item x-f" v-for="(item, index) in list" :key="index" @click="showProduct(item)">
-			<view class="medicine">
-				<image :src="item.image" mode="aspectFill"></image>
-				<!-- {{$getDictLabelName("storeProductType",product.productType)}} -->
-				<!-- <image class="otc" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/index/blue_lable_otc.svg" mode="aspectFill"></image> -->
-			</view>
-			<view class="medicine-r">
-				<view class="ellipsis" style="white-space: normal;">{{ item.productName || '' }}</view>
-				<view class="desc">包装规格:{{ item.unitName || '--' }}</view>
-				<view class="desc" v-show="item.storecount">共有 <text style="color: #2583EB;margin: 0 10rpx;">{{item.storecount||0}}</text> 个商家销售 </view>
-				<view class="price-box">
-					<text class="price-box-unit">¥</text>
-					<text class="price-box-integer">{{splitPrice(item.price || 0).intPart}}</text>
-					<text class="price-box-decimal">.{{splitPrice(item.price || 0).decPart}}</text>
-					<!-- <text class="price-box-text">/日</text> -->
-					<text class="old" v-show="item.price!=item.otPrice&&item.otPrice!==null&&item.otPrice!==undefined">¥{{item.otPrice.toFixed(2)}}</text>
-				</view>
-			</view>
-		</view>
+		<medicineItem v-for="(item, index) in list" :key="index" :item="item"></medicineItem>
 		<Loading :loaded="loaded" :loading="loading"></Loading>
 	</view>
 </template>
 
 <script>
+	import medicineItem from "@/components/medicineItem";
 	import {getTuiProducts} from '@/api/index.js'
 	import Loading from "@/components/Loading";
 	export default {
 		components: {
-			Loading
+			Loading,
+			medicineItem
 		},
 		name: "likeProduct",
 		data() {
@@ -56,10 +40,6 @@
 		},
 
 		methods: {
-			splitPrice(num) {
-			  const [intPart = '0', decPart = '00'] = String(num||0).split('.');
-			  return { intPart, decPart: decPart.padEnd(2, '0').slice(0, 2) };
-			},
 			getTuiProducts() {
 				var that = this;
 				if (that.loaded == true || that.loading == true) return;
@@ -85,11 +65,6 @@
 					}
 				)
 			},
-			showProduct(item) {
-				uni.navigateTo({
-					url: '/pages_shopping/productDetails?productId=' + item.productId
-				})
-			},
 			navTo(url){
 				uni.navigateTo({
 					url: url
@@ -100,15 +75,6 @@
 	};
 </script>
 <style lang="scss" scoped>
-	.old{
-		margin-left: 14rpx;
-		font-size: 26upx;
-		font-family: PingFang SC;
-		font-weight: 500;
-		text-decoration: line-through;
-		color: #BBBBBB;
-		line-height: 1.1;
-	}
 	.box {
 		background: #FFFFFF;
 		border-radius: 16rpx 16rpx 16rpx 16rpx;
@@ -120,7 +86,7 @@
 			flex-direction: row;
 			align-items: center;
 			justify-content: space-between;
-			padding: 28rpx 0;
+			padding: 28rpx 0 8rpx 0;
 			box-sizing: border-box;
 
 			.title {
@@ -149,83 +115,9 @@
 
 			}
 		}
-
-		.price-box {
-			font-family: Roboto, Roboto;
-			font-weight: bold;
-			font-size: 36rpx;
-			color: #FF5C03;
-			margin-top: 22rpx;
-
-			&-unit {
-				font-weight: 600;
-				font-size: 26rpx;
-			}
-
-			&-decimal {
-				font-weight: 600;
-				font-size: 26rpx;
-			}
-
-			&-text {
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 500;
-				font-size: 26rpx;
-			}
-		}
 	}
 
 	.medicine-box {
-		padding: 0 24rpx 32rpx 24rpx;
-
-		.medicine {
-			width: 200rpx;
-			height: 200rpx;
-			flex-shrink: 0;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			overflow: hidden;
-			position: relative;
-			margin-right: 24rpx;
-			.otc {
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 96rpx;
-				height: 40rpx;
-				border-radius: 0;
-			}
-
-			image {
-				width: 100%;
-				height: 100%;
-				border-radius: 16rpx 16rpx 16rpx 16rpx;
-			}
-
-			&-r {
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 500;
-				font-size: 32rpx;
-				color: #191A1B;
-				flex: 1;
-				overflow: hidden;
-			}
-
-			&-item {
-				align-items: flex-start !important;
-				margin-bottom: 40rpx;
-
-				&:last-child {
-					margin-bottom: 0;
-				}
-			}
-		}
-
-		.desc {
-			margin-top: 12rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 24rpx;
-			color: #939599;
-		}
+		padding: 0 24rpx 10rpx 24rpx;
 	}
 </style>

+ 1 - 1
manifest.json

@@ -1,5 +1,5 @@
 {
-    "name" : "医健宝互联网医院",
+    "name" : "医健宝医药",
     "appid" : "__UNI__0B04737",
     "description" : "",
     "versionName" : "1.0.0",

+ 1 - 1
note.txt

@@ -12,7 +12,7 @@ wx73f85f8d62769119
 御君方互联网医院
 彩虹惠医互联网医院
 wx1e6d61497bba00ef
-医健宝互联网医院
+医健宝医药
 
 云联测试
 wx6535a9714d7e4e67

+ 20 - 4
pages.json

@@ -7,7 +7,7 @@
 		{
 			"path": "pages/common/launch",
 			"style": {
-				"navigationBarTitleText": "医健宝互联网医院",
+				"navigationBarTitleText": "医健宝医药",
 				"navigationBarTextStyle": "black",
 				"navigationBarBackgroundColor": "#ffffff"
 			}
@@ -25,7 +25,7 @@
 			"path": "pages/index/index",
 			"style": {
 				"navigationBarTextStyle": "black",
-				"navigationBarTitleText": "医健宝互联网医院",
+				"navigationBarTitleText": "医健宝医药",
 		        "enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			
@@ -35,7 +35,7 @@
 			"path": "pages/shopping/index",
 			"style": {
 				"navigationBarTextStyle": "black",
-				"navigationBarTitleText": "医健宝互联网医院",
+				"navigationBarTitleText": "医健宝医药",
 		        "enablePullDownRefresh": false,
 				"navigationStyle": "custom"
 			
@@ -1342,6 +1342,22 @@
 						"navigationBarBackgroundColor":"#fff",
 						"navigationBarTextStyle":"black"
 					}
+				 },{
+					"path": "complaintList",
+					"style": {
+						"navigationBarTitleText" : "咨询投诉",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor":"#fff",
+						"navigationBarTextStyle":"black"
+					}
+				 },{
+					"path": "complaintListDetail",
+					"style": {
+						"navigationBarTitleText" : "详情",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor":"#fff",
+						"navigationBarTextStyle":"black"
+					}
 				 }
 				 ,{
 				 	"path": "shopping/storeOrder",
@@ -2271,7 +2287,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "white",
-		"navigationBarTitleText": "医健宝互联网医院",
+		"navigationBarTitleText": "医健宝医药",
 		"navigationBarBackgroundColor": "#2583EB",
 		"backgroundColor": "#ffffff"
 	},

+ 1 - 1
pages/auth/login.vue

@@ -6,7 +6,7 @@
 					<view class="logo-img">
 						<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/logo.png"></image>
 					</view>
-					<view class="title">医健宝互联网医院</view>
+					<view class="title">医健宝医药</view>
 				</view>
 				<view class="login-notice">为了提供更优质的服务,请先登录</view>
 				<view class="btns">

+ 39 - 22
pages/index/index.vue

@@ -7,7 +7,7 @@
 			<view class="top-box" :style="{ background: bg }" >
 				<view class="status_bar" :style="{height: statusBarHeight}"></view>
 				<view class="top-title">
-					<view class="name" :style="{ color: titleColor }">医健宝互联网医院</view>
+					<view class="name" :style="{ color: titleColor }">医健宝医药</view>
 					<view class="desc-box" >
 						<image v-if="!isTop" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/dui1.png"></image>
 						<image v-if="isTop" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/dui1.png"></image>
@@ -15,11 +15,17 @@
 						<view class="desc" :style="{ color: descColor }">卫健部门权威认证机构,世界各地千万用户健康选择</view>
 					</view>
 				</view>
+			
 				<view class="search">
 					<view class="search-box" @click="navTo('/pages_index/search')">
 						<image class="img" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/icon_search.png" mode=""></image>
 						<input disabled type="text" placeholder="搜索医生、疾病、知识" placeholder-class="input-place">
 					</view>
+					<!-- 购物车 -->
+					<view class="img-item" @click="loginNavTo('/pages_shopping/cart')">
+						<u-badge type="error" max="99" :value="cartCount" :offset="[-10,-10]" :absolute="true"></u-badge>
+						<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/fs/20250925/9a8fa2e310704a8b9ed078e10a2ab6c5.png" mode=""></image>
+					</view>
 				</view>
 			</view>
 			<view class="cont-box">
@@ -37,7 +43,7 @@
 					</u-swiper>
 				</view>
 				<view class="menu-box box">
-					<view class="menu-item" @click="navTo('/pages_index/healthy/index')">
+					<view class="menu-item" @click="navTo('/pages_index/healthy/index?cateId=2')">
 						<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/index/medical_news_icon.png" mode="aspectFill"></image>
 						<view>医药资讯</view>
 					</view>
@@ -54,24 +60,24 @@
 						<view>商家入驻</view>
 					</view>
 				</view>
-				<!-- 推荐药品 -->
-				<tuiProduct ref="tuiProduct"></tuiProduct>
-				<!-- 特色药店 -->
-				<view class="pharmacy-box box">
-					<view class="title-box">
-						<view class="title">特色药店</view>
-						<view class="more"  @click="navTo('/pages_store/index')" >
-							<view class="text">更多药店</view>
-							<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/arrow_gray.png"></image>
-						</view>
-					</view>
-					<view class="pharmacy">
-						<image :src="store.logoUrl" mode="aspectFill" v-for="(store,i) in storeIndexList" :key="i" 
-						@click="navTo('/pages_store/storeIndex?storeId='+store.id)"></image>
-					</view>
-				</view>
 				<view class="modules">
 					<view class="module" v-for="(it,index) in layouts" :key="index">
+						<!-- 推荐药品 -->
+						<tuiProduct ref="tuiProduct" v-if="it.id==8&&it.isShow"></tuiProduct>
+						<!-- 特色药店 -->
+						<view class="pharmacy-box box" v-if="it.id==9&&it.isShow&&storeIndexList.length>0">
+							<view class="title-box">
+								<view class="title">{{it.name}}</view>
+								<view class="more"  @click="navTo('/pages_store/index')" >
+									<view class="text">更多药店</view>
+									<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/arrow_gray.png"></image>
+								</view>
+							</view>
+							<view class="pharmacy">
+								<image :src="store.logoUrl" mode="aspectFill" v-for="(store,i) in storeIndexList" :key="i" 
+								@click="navTo('/pages_store/storeIndex?storeId='+store.id)"></image>
+							</view>
+						</view>
 						<!-- <view class="depts" v-if="it.id==2&&it.isShow">
 							<view class="title">
 								{{it.name}}
@@ -130,7 +136,7 @@
 							</view>
 							</scroll-view>
 						</view> -->
-						<view class="doctors box" v-if="it.id==5&&it.isShow">
+						<view class="doctors box" v-if="it.id==5&&it.isShow&&doctors.length>0">
 							<view class="title-box">
 								<view class="title">{{it.name}}</view>
 								<view class="more" @click="navTo('/pages_doctor/doctorList')">
@@ -192,7 +198,7 @@
 								</view>
 							</view>
 						</view>
-						<view class="articles box" v-if="it.id==6&&it.isShow">
+						<view class="articles box" v-if="it.id==6&&it.isShow&&articles.length>0">
 							<view class="title-box">
 								<view class="title">{{it.name}}</view>
 								<view class="more" @click="navTo('/pages_index/healthy/index')">
@@ -287,6 +293,7 @@
 		},
 		data() {
 			return {
+				cartCount: 0,
 				layouts:[],
 				yangshengs:[
 					{id:"0",title:"AI舌诊",page:"/pages_user/tongue/index",icon:"https://cos.his.cdwjyyh.com/fs/20240919/647fb42de0ab4e96a6c3097f3c3d9cf5.png"},
@@ -368,7 +375,7 @@
 		onShareAppMessage(res) {
 			if(this.$isLogin()){
 				return {
-					title: "医健宝互联网医院",
+					title: "医健宝医药",
 					path: '/pages/index/index',
 					imageUrl: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/sharelogo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
@@ -379,7 +386,7 @@
 		onShareTimeline(res) {
 			if(this.$isLogin()){
 				return {
-					title: "医健宝互联网医院",
+					title: "医健宝医药",
 					imageUrl: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/sharelogo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
 			}
@@ -703,6 +710,16 @@
 	}
 </script>
 <style scoped lang="scss">
+	.img-item{
+		position: relative;
+		width: 44rpx;
+		height: 44rpx;
+		margin: 0 20rpx 0 10rpx;
+		image{
+			width: 100%;
+			height: 100%;
+		}
+	}
 	.qualifications {
 		&-box {
 			margin: 24rpx;

+ 3 - 3
pages/index/indexOld.vue

@@ -7,7 +7,7 @@
 			<view class="top-box" :style="{ background: bg }" >
 				<view class="status_bar" :style="{height: statusBarHeight}"></view>
 				<view class="top-title">
-					<view class="name" :style="{ color: titleColor }">医健宝互联网医院</view>
+					<view class="name" :style="{ color: titleColor }">医健宝医药</view>
 					<view class="desc-box" >
 						<image v-if="!isTop" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/dui1.png"></image>
 						<image v-if="isTop" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/shop/image/dui1.png"></image>
@@ -349,7 +349,7 @@
 		onShareAppMessage(res) {
 			if(this.$isLogin()){
 				return {
-					title: "医健宝互联网医院",
+					title: "医健宝医药",
 					path: '/pages/index/index',
 					imageUrl: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/sharelogo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
@@ -360,7 +360,7 @@
 		onShareTimeline(res) {
 			if(this.$isLogin()){
 				return {
-					title: "医健宝互联网医院",
+					title: "医健宝医药",
 					imageUrl: 'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/sharelogo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
 			}

+ 101 - 15
pages/shopping/index.vue

@@ -23,7 +23,7 @@
 			</view>
 			<view class="medic">
 				<!-- 轮播图 -->
-				<view class="banner-box">
+				<!-- <view class="banner-box">
 					<swiper
 						class="swiper" 
 						:indicator-dots="true" 
@@ -38,11 +38,11 @@
 							<image :src="item.imageUrl" mode=""></image>
 						</swiper-item>
 					</swiper>
-				</view>
+				</view> -->
 				<!-- 药品列表 -->
-				<view class="medic-list">
-						<!-- <view class="item" v-for="(item,index) in subCates" :key="index">
-							<view class="title">{{item.cateName}}</view> -->
+			<!-- 	<view class="medic-list">
+						<view class="item" v-for="(item,index) in subCates" :key="index">
+							<view class="title">{{item.cateName}}</view>
 							<view class="inner-list">
 								<view class="definite"v-for="(subItem,index) in subCates"   @click="showProductList(subItem)">
 									<view class="img-box">
@@ -51,17 +51,28 @@
 									<view class="name ellipsis">{{subItem.cateName}}</view>
 								</view>
 							</view>
-					<!-- 	</view> -->
+						</view>
+				</view> -->
+				<mescroll-body top="190rpx" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+				<view style="display: flex;flex-wrap: wrap;">
+					<medicineVerticalItem v-for="(item, index) in dataList" :key="index" :item="item"></medicineVerticalItem>
 				</view>
+				</mescroll-body>
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-	import {getProductCate} from '@/api/index.js'
-	// import {getAdv} from '@/api/adv'
+	import {getProductCate,getProducts} from '@/api/index.js'
+	import {getAdv} from '@/api/adv'
+	import medicineVerticalItem from "@/components/medicineVerticalItem";
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
 	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		components: {
+			medicineVerticalItem
+		},
 		data() {
 			return {
 				divHeight:'0px',
@@ -74,6 +85,38 @@
 				cateSelect: 0,
 				// 轮播图
 				advs: [],
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				// 上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
+						tip: '暂无数据'
+					},
+					textNoMore:"已经到底了",
+				},
+				// 列表数据
+				dataList: [],
+				form:{
+					defaultOrder:'desc',
+					newOrder:null,
+					priceOrder:null,
+					salesOrder:null,
+					productName:"",
+					storeId: "",
+					cateId:'',
+					pid:''
+				},
 			};
 		},
 		onLoad() {
@@ -94,12 +137,16 @@
 					that.divHeight="calc(100% - "+data.height+"px)"
 		      }).exec()
 			},500);
-			// this.getAdv();
+			this.getAdv();
 		},
 		methods:{
 			// divHeight(){
 			//    return 'height:calc(100% - ${this.top}px);'
 			// },
+			splitPrice(num) {
+			  const [intPart = '0', decPart = '00'] = String(num||0).split('.');
+			  return { intPart, decPart: decPart.padEnd(2, '0').slice(0, 2) };
+			},
 			toSearch() {
 				uni.navigateTo({
 					url: '/pages_shopping/home/productSearch'
@@ -148,7 +195,11 @@
 							});
 							if(this.cates!=null&&this.cates.length>0){
 								this.cateSelect=this.cates[0].cateId;
-								this.getSubCate()
+								// this.getSubCate()
+								this.form.cateId = this.cates[0].cateId;
+								// this.form.pid = this.cates[0].pid;
+								this.mescroll.resetUpScroll()
+								console.log("this.mescroll",this.mescroll)
 							}
 						}else{
 							uni.showToast({
@@ -163,8 +214,10 @@
 			// 药品分类选择
 			choseCate(item) {
 				this.cateSelect = item.cateId;
-				this.getSubCate()
-				
+				// this.getSubCate()
+				this.form.cateId = item.cateId;
+				// this.form.pid = item.pid;
+				this.mescroll.resetUpScroll()
 			},
 			getSubCate(){
 				var that=this;
@@ -192,7 +245,41 @@
 				uni.navigateTo({
 					url: '/pages_shopping/home/productList?searchValue=' + e.detail.value
 				})
-			}
+			},
+			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();
+					}
+				});
+			},
 		}
 	}
 </script>
@@ -282,7 +369,7 @@
 				box-sizing: border-box;
 				width: calc(100% - 200upx);
 				height: 100%;
-				padding: 0 30upx;
+				margin: 0 24upx;
 				.banner-box{
 					margin-top: 30rpx;
 					width: 100%;
@@ -351,5 +438,4 @@
 		}
 		
 	}
-	
 </style>

+ 8 - 5
pages/user/index.vue

@@ -57,11 +57,14 @@
 							<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/image/userimg/service_pack.png"></image>
 							<view class="title">服务包</view>
 						</view> -->
-						<view class="menu" @click="loginNavTo('/pages_order/storeOrderRefundList')">
+						<!-- <view class="menu" @click="loginNavTo('/pages_order/storeOrderRefundList')">
+							<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/image/userimg/my_service.png"></image>
+							<view class="title">售后服务</view>
+						</view> -->
+						<view class="menu" @click="loginNavTo('/pages_user/shopping/refundOrderList')">
 							<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/image/userimg/my_service.png"></image>
 							<view class="title">售后服务</view>
 						</view>
-						 
 					</view>
 					
 				</view>
@@ -148,9 +151,9 @@
 							<button class='contact-btn' open-type="contact">
 							</button>
 						</view>
-						<view class="menu" @click="loginNavTo('/pages_user/complaint')">
+						<view class="menu" @click="loginNavTo('/pages_user/complaintList')">
 							<image class="min-image" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/image/userimg/consultation_complaints.png"></image>
-							<view class="title">投诉建议</view>
+							<view class="title">咨询投诉</view>
 						</view>
 						<view class="menu" @click="navTo('/pages_user/about')">
 							<image class="min-image" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/userimg/about_us_icon.png"></image>
@@ -189,7 +192,7 @@
 				</view>
  
 				<view class="tip"  >
-					<view class="title">技术支持 重庆云联融智科技有限公司 </view>
+					<!-- <view class="title">技术支持 重庆云联融智科技有限公司 </view> -->
 					<!-- <view class="tel">联系电话 18696558100 </view> -->
 				</view>
 			</view>

+ 1 - 1
pages_course/video.vue

@@ -1096,7 +1096,7 @@
 									loginByMp({code: loginRes.code,encryptedData:infoRes.encryptedData,iv:infoRes.iv}).then(res=>{
 										 uni.hideLoading();
 										 if (res.code == 200) {
-											uni.setStorageSync('AppTokenmini_RTCourse', res.token);
+											uni.setStorageSync('AppTokenmini_MYCourse', res.token);
 											uni.setStorageSync('userInfo', JSON.stringify(res.user));
 											this.user = res.user
 											this.isLogin = true

+ 2 - 3
pages_index/healthy/detail.vue

@@ -31,14 +31,13 @@
 			</view>
 		</view> -->
 		<!-- 咨询按钮 -->
-		<view class="inquiry">
+		<!-- <view class="inquiry">
 			<view class="content">
 				<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/2c3a31fbaad9417192b5547e7f072c45.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>
-			
-		</view>
+		</view> -->
 	</view> 
 </template>
 

+ 6 - 9
pages_index/healthy/index.vue

@@ -30,11 +30,11 @@
 						<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-box" v-if="item.viewsList!=null&&item.viewsList.length>0">
 									<view class="head" v-for="(subitem,j) in item.viewsList" :key="j">
 										<image v-if="subitem!=null" :src="subitem.avatar==null?'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/my_heads_icon.png':subitem.avatar" mode=""></image>
 									</view>
-								</view>
+								</view> -->
 								<view class="readings">
 									<image class="eye" src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/shopping/eye.png" ></image>
 									<text class="num">{{item.views}}</text>
@@ -80,7 +80,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
 						tip: '暂无数据'
 					},
 					textNoMore:'已经到底了'
@@ -89,6 +89,9 @@
 				dataList: [],
 			};
 		},
+		onLoad(option) {
+			this.choseCateId = option.cateId || 0
+		},
 		onShow() {
 			this.getArticleCate();
 			var that=this;
@@ -100,12 +103,6 @@
 		      }).exec()
 			},500);
 			
-	// 		let info1 = uni.createSelectorQuery().select(".keyword-list");
-	//      info1.boundingClientRect(function(data) { //data - 各种参数
-	//        	console.log(data.height)  // 获取元素宽度
-				 
-	//       }).exec()
-			
 		},
 		methods:{
 			doSearch(){

+ 1 - 1
pages_index/healthy/readUsers.vue

@@ -32,7 +32,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
 						tip: '暂无数据'
 					}
 				},

+ 1 - 1
pages_order/inquiryForm2_1.vue

@@ -433,7 +433,7 @@
 			}); 
 			//禁止二次转发--end
 			return {
-				title: "医健宝互联网医院--咨询",
+				title: "医健宝医药--咨询",
 				path: "/pages_order/inquiryForm2_1?inquiryType=2&orderType=2&inquirySubType="+this.inquirySubType+"&companyId="+this.companyId+"&companyUserId="+this.companyUserId
 			}
 			

+ 1 - 1
pages_order/inquiryForm2_2.vue

@@ -403,7 +403,7 @@
 				fail() {}
 			}); //禁止二次转发--end
 			return {
-				title: "医健宝互联网医院--咨询",
+				title: "医健宝医药--咨询",
 				path: "/pages_order/inquiryForm2_2?inquiryType=2&orderType=2&inquirySubType="+this.inquirySubType+"&companyId="+this.companyId+"&companyUserId="+this.companyUserId
 			}
 			

+ 1 - 1
pages_order/inquiryOrderList.vue

@@ -18,7 +18,7 @@
 							{{item.doctorName}}
 						</view>
 						<view class="dept">
-							{{item.deptName}}
+							{{item.deptName||''}}
 						</view>
 					</view>
 					<view class="left" v-if="item.inquiryType==2">

+ 1 - 1
pages_order/inquiryPay.vue

@@ -360,7 +360,7 @@
 		}
 		.btn-box{
 		 	height: 140upx;
-		 	z-index: 9999;
+		 	z-index: 99;
 		 	width: 100%;
 		 	padding: 0rpx 30upx;
 		 	position: fixed;

+ 1 - 1
pages_order/inquirySelect.vue

@@ -89,7 +89,7 @@
 				fail() {}
 			}); //禁止二次转发--end
 			return {
-				title: "医健宝互联网医院--咨询",
+				title: "医健宝医药--咨询",
 				path: "/pages_order/inquirySelect?inquiryType=3&companyId="+this.companyId+"&companyUserId="+this.companyUserId
 			}
 			

+ 1 - 1
pages_order/inquirySelectType.vue

@@ -6,7 +6,7 @@
 		<view class="cont" >
 			<view class="inquiry-item" v-for="(item) in inquirySubTypes"  @click="doInquiryForm(item.value)" >
 				<view class="left"  >
-					<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/33a4d6077e394d37a920c45ca10f8c4d.png" mode="aspectFit"></image>
+					<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/logo.png" mode="aspectFit"></image>
 					<view class="inquiry-cont">
 						<view class="name">{{item.lable}}</view>
 						<!-- <view class="desc">医疗专家团队远程咨询</view> -->

+ 1 - 1
pages_order/prescribeDetails.vue

@@ -2,7 +2,7 @@
 	<view class="content">
 		<view class="cont" v-if="prescribe!=null">
 			<view class="other-info"  >
-				<view class="title">医健宝互联网医院处方笺</view>
+				<view class="title">医健宝医药处方笺</view>
 				<view class="item">
 					<view class="left">
 						<text class="label">医生姓名:</text>

+ 22 - 0
pages_shopping/api/prescribe.js

@@ -0,0 +1,22 @@
+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');
+	 return request('/hospital580/app/savePreDemand',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getMyPrescribeList(data) {
+ 	 return request('/store/app/prescribe/getMyPrescribeList',data,'GET');
+ }
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 
+ 

+ 7 - 7
pages_shopping/cart.vue

@@ -41,9 +41,9 @@
 		</view>
 		<!-- 猜你喜欢 -->
 		 
-		<view class="like-product">
+		<!-- <view class="like-product">
 			<likeProduct  ref="product" />
-		</view>
+		</view> -->
 		<!-- 底部按钮 -->
 		<view class="btn-foot">
 			<view class="left">
@@ -70,11 +70,11 @@
 
 <script>
 	import {getCarts,cartNum,delCart} from './api/product'
-	import likeProduct from './components/likeProduct.vue'
+	// import likeProduct from './components/likeProduct.vue'
 	export default {
-		components: {
-			likeProduct
-		},	
+		// components: {
+		// 	likeProduct
+		// },	
 		data() {
 			return {
 				 
@@ -88,7 +88,7 @@
  
 		},
 		onReachBottom() {
-			this.$refs.product.getGoodsProducts();
+			// this.$refs.product.getGoodsProducts();
 		},
 		methods: {
 			delCart(){

+ 1 - 1
pages_shopping/components/likeProduct.vue

@@ -26,7 +26,7 @@
 </template>
 
 <script>
-  // import {getGoodsProducts} from '@/api/product'
+  import {getGoodsProducts} from '@/api/product'
   import Loading from "@/components/Loading";
   export default {
 	components: {Loading },

+ 1 - 1
pages_shopping/payOrder.vue

@@ -113,7 +113,7 @@
 				
 			},
 			payOrder(){
-				var data = {orderId:this.order.id};
+				var data = {orderId:this.order.id,appId: getApp().globalData.appId};
 				var that=this;
 				uni.showLoading();
 				pay(data).then(

+ 1 - 1
pages_shopping/paymentOrder.vue

@@ -301,7 +301,7 @@
 				})
 			},
 			payOrder(){
-				var data = {orderId:this.order.id,payType:this.order.payType};
+				var data = {orderId:this.order.id,payType:this.order.payType,appId: getApp().globalData.appId};
 				var that=this;
 				uni.showLoading();
 				pay(data).then(

+ 3 - 3
pages_shopping/prescribe.vue

@@ -177,9 +177,9 @@
 </template>
 
 <script>
-	import {getStoreOrderById} from '@/api/storeOrder'
+	import {getStoreOrderById} from './api/storeOrder.js'
 	import {getWeixinPrescribeTemps} from '@/api/common'
-	import {doPrescribe} from '@/api/prescribe'
+	import {doPrescribe} from './api/prescribe'
 	import {getPatientList,delPatient} from '@/api/patient'
 	export default {
 		data() {
@@ -403,7 +403,7 @@
 			// 添加问诊人
 			addPeople() {
 				uni.navigateTo({
-					url:"/pages_user/user/patient"
+					url:"/pages_user/patient"
 				})
 			},
 			// 疾病选择

+ 28 - 11
pages_shopping/productDetails.vue

@@ -46,11 +46,19 @@
 		</view>
 		<view class="other-box">
 			<view class="other-box-item">
-				<view class="label">规格</view>
-				<view class="text">{{product.unitName||'--'}}</view>
+				<view class="label">包装规格</view>
+				<view class="text">{{product.prescribeSpec||'--'}}</view>
 			</view>
 			<view class="other-box-item">
-				<view class="label">服务</view>
+				<view class="label">批准文号</view>
+				<view class="text">{{product.batchNumber||'--'}}</view>
+			</view>
+			<view class="other-box-item">
+				<view class="label">生产厂家</view>
+				<view class="text">{{product.mah||'--'}}</view>
+			</view>
+			<view class="other-box-item">
+				<view class="label" style="width: 4em;">服务</view>
 				<view class="safe-box">
 					<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/shopping/safe.png" mode=""></image>
 					<text class="text" style="margin-right: 34rpx;">品质保障</text>
@@ -115,17 +123,16 @@
 					<text class="label">咨询</text>
 					<button class="contact-btn" open-type="contact"></button>
 				</view>
-				<!-- <view class="item" @click="navgetTo('./cart')">
-					<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
-						<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/shopping/cart36.png" mode=""></image>
-					</uni-badge>
+				<view class="item" @click="navgetTo('./cart')">
+					<view class="img-item">
+						<u-badge type="error" max="99" :value="cartCount" :offset="[-10,-10]" :absolute="true"></u-badge>
+						<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/fs/20250929/73574822bab04a86ae77b772b4e28952.png" mode=""></image>
+					</view>
 					<text class="label">购物车</text>
-				</view> -->
+				</view>
 			</view>
 			<view class="btn-box">
-				<view class="btn cart" >好药分享
-				<button  class="share" data-name="shareBtn" open-type="share"></button>
-				</view>
+				<view class="btn cart" @click="addCart('cart')">加入购物车</view>
 				<view class="btn buy" @click="addCart('buy')">{{buyText}}</view>
 			</view>
 		</view>
@@ -531,6 +538,16 @@
 </script>
 
 <style lang="scss" scoped>
+	.img-item{
+		position: relative;
+		width: 44rpx;
+		height: 44rpx;
+		margin: 0 20rpx 0 10rpx;
+		image{
+			width: 100%;
+			height: 100%;
+		}
+	}
 	.other-box {
 		background: #FFFFFF;
 		border-radius: 16rpx 16rpx 16rpx 16rpx;

+ 6 - 3
pages_shopping/productList.vue

@@ -103,10 +103,12 @@
 					textNoMore:"已经到底了",
 				},
 				// 列表数据
-				dataList: []
+				dataList: [],
+				storeId: '',
 			};
 		},
 		onLoad(options) {
+			this.storeId = options.storeId || '';
 			this.cateId = options.cateId;
 			this.pid=options.pid;
 			console.log(this.cateId)
@@ -123,7 +125,7 @@
 				this.showType=type;
 			},
 			getProductCateByPid(){
-				let data = {pid:this.pid};
+				let data = {pid:this.pid,storeId:this.storeId};
 				getProductCateByPid(data).then(
 					res => {
 						if(res.code==200){
@@ -154,7 +156,8 @@
 					cateId:this.cateId,
 					defaultOrder:this.defaultOrder,
 					page: page.num,
-					pageSize: page.size
+					pageSize: page.size,
+					storeId:this.storeId
 				};
 				getProducts(data).then(res => {
 					if(res.code==200){

+ 165 - 31
pages_shopping/registerMerchant.vue

@@ -24,7 +24,7 @@
 						<u-form-item required labelWidth="auto" borderBottom label="企业全称" prop="fullName">
 							<u-input border="none" placeholder="请输入企业全称" v-model="form.fullName"  maxlength="60" />
 						</u-form-item>
-						<u-form-item required labelWidth="auto" borderBottom label="电话号码;" prop="phone">
+						<u-form-item required labelWidth="auto" borderBottom label="电话号码" prop="phone">
 							<u-input  border="none"  placeholder="请输入电话号码;" v-model="form.phone"  maxlength="20" />
 						</u-form-item>
 						<u-form-item required labelWidth="auto" borderBottom label="所在城市" prop="cityIds" @click="cityShow=true">
@@ -60,12 +60,36 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item required labelWidth="auto"  borderBottom label="营业执照有效期" prop="businessLicenseExpireStart" @click="openCalendar(1)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择营业执照有效期" v-model="businessLicenseExpire" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
-						</u-form-item>
+						<!-- <u-form-item required labelWidth="auto"  borderBottom label="营业执照是否长期有效" prop="longTime">
+							<u-radio-group placement="row" v-model="form.longTime" >
+								<u-radio activeColor="#2583EB" :customStyle="{marginRight: '8px'}" key="1" label="是" :name="1" > </u-radio>
+								<u-radio activeColor="#2583EB" :customStyle="{marginRight: '8px'}" key="2" label="否" :name="2" > </u-radio>
+							 </u-radio-group>
+						</u-form-item> -->
+						<template v-if="form.longTime==2">
+							<!-- <u-form-item required labelWidth="auto"  borderBottom label="营业执照有效期" prop="businessLicenseExpireStart" @click="openCalendar(1)">
+								<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择营业执照有效期" v-model="businessLicenseExpire" />
+								<template #right> <u-icon name="arrow-right"></u-icon> </template>
+							</u-form-item> -->
+							<u-form-item :required="form.longTime==2" labelWidth="auto" borderBottom label="营业执照有效期开始时间" prop="businessLicenseExpireStart">
+								<picker :value="form.businessLicenseExpireStart" mode="date" fields="day" @change="pickerChange($event,'businessLicenseExpireStart')">
+									<view class="x-f" style="justify-content: space-between;">
+										<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.businessLicenseExpireStart" />
+										<u-icon name="arrow-right"></u-icon>
+									</view>
+								</picker>
+							</u-form-item>
+							<u-form-item :required="form.longTime==2" labelWidth="auto" borderBottom label="营业执照有效期结束时间" prop="businessLicenseExpireEnd">
+								<picker :value="form.businessLicenseExpireEnd" mode="date" fields="day" @change="pickerChange($event,'businessLicenseExpireEnd')">
+									<view class="x-f" style="justify-content: space-between;">
+										<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.businessLicenseExpireEnd" />
+										<u-icon name="arrow-right"></u-icon>
+									</view>
+								</picker>
+							</u-form-item>
+						</template>
 						<u-form-item required labelWidth="auto" borderBottom label="经营范围" prop="businessScope">
-							<u-input border="none" placeholder="请输入经营范围" v-model="form.businessScope"  maxlength="400" />
+							<u-input border="none" placeholder="请输入经营范围" v-model="form.businessScope"  maxlength="1000" />
 						</u-form-item>
 						<u-form-item required labelWidth="auto"  borderBottom label="药品经营许可证" prop="drugLicense">
 							<u-upload
@@ -76,9 +100,23 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item required labelWidth="auto"  borderBottom label="药品经营许可证编号有效期" prop="drugLicenseExpiryStart" @click="openCalendar(2)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择药品经营许可证编号有效期" v-model="drugLicenseExpiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item required labelWidth="auto"  borderBottom label="药品经营许可证编号有效期开始时间" prop="drugLicenseExpiryStart">
+							<!-- <u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择药品经营许可证编号有效期" v-model="drugLicenseExpiry" />
+							<template #right> <u-icon name="arrow-right"></u-icon> </template> -->
+							<picker :value="form.drugLicenseExpiryStart" mode="date" fields="day" @change="pickerChange($event,'drugLicenseExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.drugLicenseExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item required labelWidth="auto"  borderBottom label="药品经营许可证编号有效期结束时间" prop="drugLicenseExpiryEnd">
+							<picker :value="form.drugLicenseExpiryStart" mode="date" fields="day" @change="pickerChange($event,'drugLicenseExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.drugLicenseExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item required labelWidth="auto"  borderBottom label="2类器械经营备案" prop="medicalDevice2">
 							<u-upload
@@ -89,9 +127,21 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item required labelWidth="auto"  borderBottom label="2类器械经营备案有效期" prop="medicalDevice2ExpiryStart" @click="openCalendar(3)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择2类器械经营备案有效期" v-model="medicalDevice2Expiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item required labelWidth="auto"  borderBottom label="2类器械经营备案有效期开始时间" prop="medicalDevice2ExpiryStart">
+							<picker :value="form.medicalDevice2ExpiryStart" mode="date" fields="day" @change="pickerChange($event,'medicalDevice2ExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.medicalDevice2ExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item required labelWidth="auto"  borderBottom label="2类器械经营备案有效期结束时间" prop="medicalDevice2ExpiryEnd">
+							<picker :value="form.medicalDevice2ExpiryEnd" mode="date" fields="day" @change="pickerChange($event,'medicalDevice2ExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.medicalDevice2ExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item labelWidth="auto"  borderBottom label="1类器械生产备案" prop="medicalDevice1">
 							<u-upload
@@ -102,9 +152,21 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item labelWidth="auto"  borderBottom label="1类器械生产备案有效期" prop="medicalDevice1ExpiryStart" @click="openCalendar(4)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择1类器械生产备案有效期" v-model="medicalDevice1Expiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item labelWidth="auto"  borderBottom label="1类器械生产备案有效期开始时间" prop="medicalDevice1ExpiryStart">
+							<picker :value="form.medicalDevice1ExpiryStart" mode="date" fields="day" @change="pickerChange($event,'medicalDevice1ExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.medicalDevice1ExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item labelWidth="auto"  borderBottom label="1类器械生产备案有效期结束时间" prop="medicalDevice1ExpiryEnd">
+							<picker :value="form.medicalDevice1ExpiryEnd" mode="date" fields="day" @change="pickerChange($event,'medicalDevice1ExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.medicalDevice1ExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item labelWidth="auto"  borderBottom label="3类器械经营许可证" prop="medicalDevice3">
 							<u-upload
@@ -115,9 +177,21 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item labelWidth="auto"  borderBottom label="3类器械经营许可证有效期" prop="medicalDevice3ExpiryStart" @click="openCalendar(5)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择3类器械经营许可证有效期" v-model="medicalDevice3Expiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item labelWidth="auto"  borderBottom label="3类器械经营许可证有效期开始时间" prop="medicalDevice3ExpiryStart">
+							<picker :value="form.medicalDevice3ExpiryStart" mode="date" fields="day" @change="pickerChange($event,'medicalDevice3ExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.medicalDevice3ExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item labelWidth="auto"  borderBottom label="3类器械经营许可证有效期结束时间" prop="medicalDevice3ExpiryEnd">
+							<picker :value="form.medicalDevice3ExpiryEnd" mode="date" fields="day" @change="pickerChange($event,'medicalDevice3ExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.medicalDevice3ExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item labelWidth="auto"  borderBottom label="食品经营许可证" prop="foodLicense">
 							<u-upload
@@ -128,9 +202,21 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item labelWidth="auto"  borderBottom label="食品经营许可证有效期" prop="foodLicenseExpiryStart" @click="openCalendar(6)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择食品经营许可证有效期" v-model="foodLicenseExpiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item labelWidth="auto"  borderBottom label="食品经营许可证有效期开始时间" prop="foodLicenseExpiryStart">
+							<picker :value="form.foodLicenseExpiryStart" mode="date" fields="day" @change="pickerChange($event,'foodLicenseExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择开始时间" v-model="form.foodLicenseExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item labelWidth="auto"  borderBottom label="食品经营许可证有效期结束时间" prop="foodLicenseExpiryEnd">
+							<picker :value="form.foodLicenseExpiryEnd" mode="date" fields="day" @change="pickerChange($event,'foodLicenseExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.foodLicenseExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item required labelWidth="auto"  borderBottom label="医疗机构执业许可证" prop="medicalLicense">
 							<u-upload
@@ -141,14 +227,26 @@
 								:maxCount="1"
 							></u-upload>
 						</u-form-item>
-						<u-form-item required labelWidth="auto"  borderBottom label="医疗机构执业许可证有效期" prop="medicalLicenseExpiryStart" @click="openCalendar(7)">
-							<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择医疗机构执业许可证有效期" v-model="medicalLicenseExpiry" />
-							<template #right> <u-icon name="arrow-right"></u-icon> </template>
+						<u-form-item required labelWidth="auto"  borderBottom label="医疗机构执业许可证有效期开始时间" prop="medicalLicenseExpiryStart">
+							<picker :value="form.medicalLicenseExpiryStart" mode="date" fields="day" @change="pickerChange($event,'medicalLicenseExpiryStart')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选开始时间" v-model="form.medicalLicenseExpiryStart" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
+						</u-form-item>
+						<u-form-item required labelWidth="auto"  borderBottom label="医疗机构执业许可证有效期择结束时间" prop="medicalLicenseExpiryEnd">
+							<picker :value="form.medicalLicenseExpiryEnd" mode="date" fields="day" @change="pickerChange($event,'medicalLicenseExpiryEnd')">
+								<view class="x-f" style="justify-content: space-between;">
+									<u-input disabled disabledColor="#ffffff" border="none" placeholder="请选择结束时间" v-model="form.medicalLicenseExpiryEnd" />
+									<u-icon name="arrow-right"></u-icon>
+								</view>
+							</picker>
 						</u-form-item>
 						<u-form-item required labelWidth="auto"  borderBottom label="发货联系电话" prop="sendPhone">
 							<u-input border="none" placeholder="请输入发货联系电话" v-model="form.sendPhone"  maxlength="20" />
 						</u-form-item>
-						<u-form-item required labelWidth="auto"  borderBottom label="佣金类型" prop="shippingType">
+						<u-form-item required labelWidth="auto"  borderBottom label="配送方式" prop="shippingType">
 							<u-radio-group placement="row" v-model="form.shippingType" >
 								<u-radio activeColor="#2583EB" :customStyle="{marginRight: '8px'}" key="1" label="配送" name="1" > </u-radio>
 								<u-radio activeColor="#2583EB" :customStyle="{marginRight: '8px'}" key="2" label="到店自提" name="2" > </u-radio>
@@ -217,6 +315,7 @@ export default {
 			fileList8:[],
 			checked:0,
 			form:{
+				longTime: 2,
 				storeName:'',
 				fullName:'',
 				phone:'',
@@ -260,26 +359,28 @@ export default {
 				logoUrl: [{required: true, message: '请上传企业LOGO'}],
 				storeName: [{required: true, message: '请输入企业简称'}],
 				fullName: [{required: true, message: '请输入企业全称'}],
-				phone: [{required: true, message: '请输入电话号码;'}],
-				cityIds: [{required: true, message: '请选择所在城市;'}],
+				phone: [{required: true, message: '请输入电话号码'}],
+				cityIds: [{required: true, message: '请选择所在城市'}],
 				enterpriseAddress: [{required: true, message: '请输入企业地址'}],
 				legalPersonName: [{required: true, message: '请输入法人姓名'}],
 				unifiedSocialCreditCode: [{required: true, message: '请输入统一社会信用代码'}],
 				businessLicense: [{required: true, message: '请上传营业执照'}],
-				businessLicenseExpireStart: [{required: true, message: '请选择营业执照有效期'}],
+				businessLicenseExpireStart: [],
+				businessLicenseExpireEnd: [],
 				drugLicense: [{required: true, message: '请上传药品经营许可证'}],
 				drugLicenseExpiryStart: [{required: true, message: '请选择药品经营许可证编号有效期'}],
 				medicalDevice2: [{required: true, message: '请上传2类医疗器械备案'}],
 				medicalDevice2ExpiryStart: [{required: true, message: '请选择2类医疗器械备案有效期'}],
 				medicalLicense: [{required: true, message: '请上传医疗机构执业许可证'}],
 				medicalLicenseExpiryStart: [{required: true, message: '请选择医疗机构执业许可证有效期'}],
-				refundPhone: [{required: true, message: '请输入经营范围'}],
-				businessScope: [{required: true, message: '请输入退货联系电话'}],
+				refundPhone: [{required: true, message: '请输入退货联系电话'}],
+				businessScope: [{required: true, message: '请输入经营范围'}],
 				refundAddress: [{required: true, message: '请输入退货地址'}],
 				refundConsignee: [{required: true, message: '请输入退货联系人'}],
 				brokerageType: [{required: true, message: '请选择佣金类型'}],
 				account: [{required: true, message: '请输入登录帐号'}],
 				shippingType: [{required: true, message: '请选择配送方式'}],
+				longTime: [{required: true, message: '请选择营业执照是否长期有效'}],
 			},
 			calendarType: 0,
 			businessLicenseExpire:'',
@@ -307,6 +408,9 @@ export default {
 		
 	},
  	methods: {
+		pickerChange(e,type) {
+			this.form[type] = e.detail.value
+		},
 		openCalendar(calendarType){
 			this.calendarType=calendarType
 			this.$refs.calendar.open();
@@ -564,11 +668,39 @@ export default {
 				this.form.medicalLicense=this.fileList8[0].url
 			}
 			console.log(this.form)
+			const requiredFlag = this.form.longTime == 2
+			if(requiredFlag==2&&!this.form.businessLicenseExpireStart) {
+				uni.showToast({
+					title: '请选择营业执照有效期开始时间',
+					icon: 'none'
+				})
+				return
+			}
+			if(requiredFlag==2&&!this.form.businessLicenseExpireEnd) {
+				uni.showToast({
+					title: '请选择营业执照有效期开始时间',
+					icon: 'none'
+				})
+				return
+			}
+			/* 关键:改的是原来就存在的数组,保证响应式 */
+			// this.rules.businessLicenseExpireStart = requiredFlag
+			//   ? [{ required: true, message: '请选择营业执照有效期开始时间' }]
+			//   : []
+			
+			// this.rules.businessLicenseExpireEnd = requiredFlag
+			//   ? [{ required: true, message: '请选择营业执照有效期结束时间' }]
+			//   : []
+
+			// this.$refs.uForm.setRules(this.rules);
+			console.log("下发")
+			// this.$nextTick(() => {
  			this.$refs.uForm.validate().then(res => {
  				if(res) {
 					this.register()
 				}
  			})
+			// })
  		},
  	}
 }
@@ -578,7 +710,9 @@ export default {
 
 
 <style scoped lang="scss">
- 
+	.es-ml-14 {
+		margin-right: 14rpx;
+	}
 	.content{
 		display: flex;
 		flex-direction: column;

+ 1 - 1
pages_shopping/user/otherPaymentOrder.vue

@@ -124,7 +124,7 @@
 				});
 			},
 			otherPayment(code){
-				var data = {orderId:this.order.id,code:code };
+				var data = {orderId:this.order.id,code:code,appId: getApp().globalData.appId };
 				var that=this;
 				uni.showLoading();
 				otherPayment(data).then(

+ 1 - 1
pages_store/index.vue

@@ -6,7 +6,7 @@
 				<view class="storebox-r">
 					<view class="x-bc" style="flex: 1;min-height: 104rpx;">
 						<view class="" @click="goStoreDetail">
-							<view class="storename ellipsis">{{item.store.storeName || 's---'}}</view>
+							<view class="storename ellipsis">{{item.store.storeName || ''}}</view>
 							<view class="storedesc">24小时营业  月售{{item.store.salesCount|| 0}}</view>
 						</view>
 						<view class="storebox-btn" @click="navTo(item)">进店</u-icon></view>

+ 129 - 109
pages_store/storeDetail.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="container-body">
-		<view class="storebox x-bc">
+		<view class="box storebox x-bc mb20">
 			<view class="x-f" style="align-items: flex-start;">
 				<image class="logo" :src="storeInfo.logoUrl" mode="aspectFill"></image>
 				<view class="storebox-r" @click="goStoreDetail">
@@ -9,114 +9,128 @@
 				</view>
 			</view>
 		</view>
-		<view class="storeInfo title">基础信息</view>
-		<view class="storeInfo-item x-bc">
-			<view class="label">名称</view>
-			<view class="val">{{storeInfo.fullName|| ''}}</view>
-		</view>
-		<view class="storeInfo-item x-bc">
-			<view class="label">电话</view>
-			<view class="val">{{storeInfo.sendPhone|| ''}}</view>
-		</view>
-		<view class="storeInfo-item x-bc">
-			<view class="label">地址</view>
-			<view class="val">{{storeInfo.address|| ''}}</view>
-		</view>
-		<view class="storeInfo title">资质信息</view>
-		<view class="storeInfo-item x-bc">
-			<view class="label">营业执照</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.businessLicense"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.businessLicense" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('businessLicense')"
-				></u-image>
-				<view v-else>暂未上传</view>
+		<view class="box mb20">
+			<view class="storeInfo title">基础信息</view>
+			<view class="storeInfo-item x-start">
+				<view class="label" style="width: 4rem;">公司全称</view>
+				<view class="val">{{storeInfo.fullName|| ''}}</view>
 			</view>
-		</view>
-		<view class="storeInfo-item x-bc" v-if="storeInfo.medicalDevice2">
-			<view class="label">2类器械生产备案</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.medicalDevice2"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.medicalDevice2" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('medicalDevice2')"
-				></u-image>
-				<view v-else>暂未上传</view>
+			<view class="storeInfo-item x-start">
+				<view class="label" style="width: 4rem;">联系电话</view>
+				<view class="val">{{storeInfo.sendPhone|| ''}}</view>
 			</view>
-		</view>
-		<view class="storeInfo-item x-bc" v-if="storeInfo.medicalDevice1">
-			<view class="label">1类医疗器械备案</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.medicalDevice1"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.medicalDevice1" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('medicalDevice1')"
-				></u-image>
-				<view v-else>暂未上传</view>
+			<view class="storeInfo-item x-start">
+				<view class="label" style="width: 4rem;">详细地址</view>
+				<view class="val">{{storeInfo.address|| ''}}{{storeInfo.enterpriseAddress||''}}</view>
 			</view>
-		</view>
-		<view class="storeInfo-item x-bc" v-if="storeInfo.medicalDevice3">
-			<view class="label">3类器械经营许可证</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.medicalDevice3"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.medicalDevice3" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('medicalDevice3')"
-				></u-image>
-				<view v-else>暂未上传</view>
+			<view class="storeInfo-item x-start">
+				<view class="label" style="width: 4rem;">经营范围</view>
+				<view class="val">{{storeInfo.businessScope|| ''}}</view>
 			</view>
 		</view>
-		<view class="storeInfo-item x-bc" v-if="storeInfo.foodLicense">
-			<view class="label">食品经营许可证</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.foodLicense"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.foodLicense" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('foodLicense')"
-				></u-image>
-				<view v-else>暂未上传</view>
+		<view class="box mb20">
+			<view class="storeInfo title">资质信息</view>
+			<view class="storeInfo-item mb20">
+				<view class="label mb20">营业执照</view>
+				<view class="val x-f">
+					<u-image
+						v-if="storeInfo.businessLicense"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.businessLicense" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('businessLicense')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
 			</view>
-		</view>
-		<view class="storeInfo-item x-bc" v-if="storeInfo.medicalLicense">
-			<view class="label">医疗机构执业许可证</view>
-			<view class="val x-f">
-				<u-image
-					v-if="storeInfo.medicalLicense"
-					shape="square" 
-					lazyLoad 
-					:src="storeInfo.medicalLicense" 
-					width="100%" 
-					mode="widthFix" 
-					radius="6"
-					@click="previewImage('medicalLicense')"
-				></u-image>
-				<view v-else>暂未上传</view>
+			<view class="storeInfo-item mb20" v-if="storeInfo.medicalDevice2">
+				<view class="label" mb20>2类器械生产备案</view>
+				<view class="val x-f">
+					<u-image
+						v-if="storeInfo.medicalDevice2"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.medicalDevice2" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('medicalDevice2')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
+			</view>
+			<view class="storeInfo-item mb20" v-if="storeInfo.medicalDevice1">
+				<view class="label mb20">1类医疗器械备案</view>
+				<view class="val x-start">
+					<u-image
+						v-if="storeInfo.medicalDevice1"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.medicalDevice1" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('medicalDevice1')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
+			</view>
+			<view class="storeInfo-item mb20" v-if="storeInfo.medicalDevice3">
+				<view class="label mb20">3类器械经营许可证</view>
+				<view class="val x-f">
+					<u-image
+						v-if="storeInfo.medicalDevice3"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.medicalDevice3" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('medicalDevice3')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
+			</view>
+			<view class="storeInfo-item mb20" v-if="storeInfo.foodLicense">
+				<view class="label mb20">食品经营许可证</view>
+				<view class="val x-f">
+					<u-image
+						v-if="storeInfo.foodLicense"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.foodLicense" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('foodLicense')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
+			</view>
+			<view class="storeInfo-item mb20" v-if="storeInfo.medicalLicense">
+				<view class="label mb20">医疗机构执业许可证</view>
+				<view class="val x-f">
+					<u-image
+						v-if="storeInfo.medicalLicense"
+						shape="square" 
+						lazyLoad 
+						:src="storeInfo.medicalLicense" 
+						width="600rpx"
+						height="auto"
+						mode="widthFix" 
+						radius="6"
+						@click="previewImage('medicalLicense')"
+					></u-image>
+					<view v-else>暂未上传</view>
+				</view>
 			</view>
 		</view>
 	</view>
@@ -153,14 +167,16 @@
 	}
 </script>
 
-<style>
-	page {
+
+<style scoped lang="scss">
+	.mb20 {
+		margin-bottom: 20rpx;
+	}
+	.box {
+		padding: 0 32rpx 26rpx 32rpx;
 		background-color: #fff;
 	}
-</style>
-<style scoped lang="scss">
 	.container-body {
-		padding: 0 32rpx;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
 		font-size: 28rpx;
@@ -175,6 +191,9 @@
 		&-item {
 			padding: 6rpx 0;
 			.label {
+				flex-shrink: 0;
+			}
+			.val {
 				color: #222;
 			}
 		}
@@ -187,9 +206,10 @@
 		padding: 24rpx 0;
 	}
 	.storebox {
-		padding: 26rpx 0;
+		padding: 26rpx 32rpx;
 		font-family: PingFang SC, PingFang SC;
 		color: #222;
+		background-color: #fff;
 		.logo {
 			width: 150rpx;
 			height: 150rpx;

+ 97 - 16
pages_store/storeIndex.vue

@@ -48,8 +48,13 @@
 					>{{item.cateName }}</view>
 				</view>
 				<view class="medic">
+					<mescroll-body :style="{height: divHeight}" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+					<view style="display: flex;flex-wrap: wrap;">
+						<medicineVerticalItem v-for="(item, index) in dataList" :key="index" :item="item" :storeId="storeId"></medicineVerticalItem>
+					</view>
+					</mescroll-body>
 					<!-- 轮播图 -->
-					<view class="banner-box">
+					<!-- <view class="banner-box">
 						<swiper
 							class="swiper" 
 							:indicator-dots="true" 
@@ -64,11 +69,11 @@
 								<image :src="item.imageUrl" mode=""></image>
 							</swiper-item>
 						</swiper>
-					</view>
+					</view> -->
 					<!-- 药品列表 -->
-					<view class="medic-list">
-							<!-- <view class="item" v-for="(item,index) in subCates" :key="index">
-								<view class="title">{{item.cateName}}</view> -->
+					<!-- <view class="medic-list">
+							<view class="item" v-for="(item,index) in subCates" :key="index">
+								<view class="title">{{item.cateName}}</view>
 								<view class="inner-list">
 									<view class="definite"v-for="(subItem,index) in subCates"   @click="showProductList(subItem)">
 										<view class="img-box">
@@ -77,8 +82,8 @@
 										<view class="name ellipsis">{{subItem.cateName}}</view>
 									</view>
 								</view>
-						<!-- 	</view> -->
-					</view>
+							</view>
+					</view> -->
 				</view>
 			</view>
 		</view>
@@ -86,14 +91,18 @@
 </template>
 
 <script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
 	import tuiStoreProduct from './components/tuiStoreProduct.vue'
 	import qualifications from './components/qualifications.vue'
-	import {getProductCate,storeDetail} from '@/api/index.js'
+	import {getProductCate,storeDetail,getProducts} from '@/api/index.js'
+	import medicineVerticalItem from "@/components/medicineVerticalItem";
 	// import {getAdv} from '@/api/adv'
 	export default {
+		mixins: [MescrollMixin], // 使用mixin
 		components: {
 			tuiStoreProduct,
-			qualifications
+			qualifications,
+			medicineVerticalItem
 		},
 		data() {
 			return {
@@ -119,11 +128,45 @@
 				],
 				current:0,
 				storeInfo: {},
-				storeId:''
+				storeId:'',
+				mescroll:null,
+				downOption: {   //下拉刷新
+				 	use:true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				// 上拉加载的配置
+				upOption: {
+					onScroll:true,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					empty: {
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
+						tip: '暂无数据'
+					},
+					textNoMore:"已经到底了",
+				},
+				// 列表数据
+				dataList: [],
+				form:{
+					defaultOrder:'desc',
+					newOrder:null,
+					priceOrder:null,
+					salesOrder:null,
+					productName:"",
+					storeId: "",
+					cateId:'',
+					pid:'',
+					storeId: ''
+				},
 			};
 		},
 		onLoad(option) {
 			this.storeId = option.storeId
+			this.form.storeId = option.storeId || ''
 			uni.showShareMenu({
 				withShareTicket:true,
 				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
@@ -164,7 +207,7 @@
 			},
 			toSearch() {
 				uni.navigateTo({
-					url: '/pages_shopping/home/productSearch'
+					url: '/pages_shopping/home/productSearch?storeId='+this.storeId
 				})
 			},
 			handleAdvClick(item){
@@ -212,7 +255,9 @@
 							});
 							if(this.cates!=null&&this.cates.length>0){
 								this.cateSelect=this.cates[0].cateId;
-								this.getSubCate()
+								this.form.cateId = this.cates[0].cateId;
+								// this.form.pid = this.cates[0].pid;
+								this.mescroll.resetUpScroll()
 							}
 						}else{
 							uni.showToast({
@@ -227,7 +272,9 @@
 			// 药品分类选择
 			choseCate(item) {
 				this.cateSelect = item.cateId;
-				this.getSubCate()
+				// this.getSubCate()
+				this.form.cateId = item.cateId;
+				this.mescroll.resetUpScroll()
 				
 			},
 			getSubCate(){
@@ -246,7 +293,7 @@
 			// 查看药品详情
 			showProductList(item) {
 				uni.navigateTo({
-					url: '/pages_shopping/productList?cateId='+item.cateId+"&pid="+item.pid
+					url: '/pages_shopping/productList?cateId='+item.cateId+"&pid="+item.pid+'&storeId='+this.storeId
 				})
 			},
 			goSearch(e) {
@@ -254,14 +301,48 @@
 					this.$addHisSearch(e.detail.value);
 				}
 				uni.navigateTo({
-					url: '/pages_shopping/home/productList?searchValue=' + e.detail.value
+					url: '/pages_shopping/home/productList?storeId='+this.storeId+'&searchValue=' + e.detail.value
 				})
 			},
 			goStoreDetail() {
 				uni.navigateTo({
 					url: '/pages_store/storeDetail?storeId='+this.storeId
 				})
-			}
+			},
+			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();
+					}
+				});
+			},
 		}
 	}
 </script>

+ 1 - 1
pages_user/about.vue

@@ -2,7 +2,7 @@
 	<view class="content">
 		<view class="logo">
 			<image src="https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/logo.png"></image>
-			<p>医健宝互联网医院</p>
+			<p>医健宝医药</p>
 		</view>
 		<view class="set-box">
 			<view class="item" @click="callPhone()">

+ 1 - 1
pages_user/api/storeAfterSales.js

@@ -9,7 +9,7 @@ let request = new Request().http
  }
  
  export function getAfterSalesList(data) {
- 	 return request('/store/app/storeAfterSales/getAfterSalesList',data,'GET');
+ 	 return request('/store/app/storeAfterSales/getStoreAfterSalesList',data,'GET');
  } 
  
  export function getAfterSalesDetails(data) {

+ 265 - 49
pages_user/complaint.vue

@@ -1,97 +1,238 @@
 <template>
 	<view class="container">
+		<view class="form-item top_item" @click="navTo">
+			<text>我的咨询投诉</text>
+			<u-icon name="arrow-right" color="#333" size="20"></u-icon>
+		</view>
 		<u-form labelPosition="top" labelWidth='0' :model="formdata" :rules="rules" ref="uForm" errorType="toast">
+			<u-form-item label=" " prop="complaintType">
+				<view class="form-item">
+					<view class="form-item-title">投诉方式</view>
+					<view class="tagbox">
+						<view :class="formdata.complaintType == 1?'tagitem active':'tagitem'"
+							@click="formdata.complaintType = 1">咨询</view>
+						<view :class="formdata.complaintType == 2?'tagitem active':'tagitem'"
+							@click="formdata.complaintType = 2">投诉/举报</view>
+					</view>
+				</view>
+			</u-form-item>
 			<u-form-item label=" " prop="type">
 				<view class="form-item">
 					<view class="form-item-title">投诉类型</view>
 					<view class="tagbox">
-						<view :class="formdata.type == 1?'tagitem active':'tagitem'" @click="formdata.type = 1">店铺</view>
-						<view :class="formdata.type == 2?'tagitem active':'tagitem'" @click="formdata.type = 2">商品</view>
-						<view :class="formdata.type == 0?'tagitem active':'tagitem'" @click="formdata.type = 0">其他</view>
+						<view :class="formdata.type == 1?'tagitem active':'tagitem'" @click="formdata.type = 1">店铺
+						</view>
+						<view :class="formdata.type == 2?'tagitem active':'tagitem'" @click="formdata.type = 2">商品
+						</view>
+						<view :class="formdata.type == 0?'tagitem active':'tagitem'" @click="formdata.type = 0">其他
+						</view>
 					</view>
 				</view>
 			</u-form-item>
+			<u-form-item label=" " prop="title" v-if="formdata.type == 1">
+				<view class="form-item">
+					<view class="form-item-title">选择店铺</view>
+					<view class="storename" @click="openStore">{{storeId? storeName : "选择店铺"}}</view>
+				</view>
+			</u-form-item>
 			<u-form-item label=" " prop="title">
 				<view class="form-item">
-					<view class="form-item-title">投诉标题</view>
-					<u--input v-model="formdata.title" placeholder="请输入投诉标题" maxlength='100'></u--input>
+					<view class="form-item-title">标题</view>
+					<u--input v-model="formdata.title" placeholder="请输入标题" maxlength='100'></u--input>
 				</view>
 			</u-form-item>
 			<u-form-item label=" " prop="content">
 				<view class="form-item">
-					<view class="form-item-title">投诉内容</view>
-					<u--textarea v-model="formdata.content" placeholder="请详细描述您遇到的问题,我们会认真处理您的投诉" count maxlength='200'></u--textarea>
+					<view class="form-item-title">内容</view>
+					<u--textarea v-model="formdata.content" placeholder="请详细描述您遇到的问题,我们会认真处理您的问题" count
+						maxlength='200'></u--textarea>
 				</view>
 			</u-form-item>
 			<u-form-item label=" " prop="images">
 				<view class="form-item">
 					<view class="form-item-title">上传凭证</view>
-					<u-upload
-						:fileList="fileList1"
-						@afterRead="afterRead"
-						@delete="deletePic"
-						name="1"
-						:maxCount="3"
-					></u-upload>
+					<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1"
+						:maxCount="4"></u-upload>
 				</view>
 			</u-form-item>
 		</u-form>
 		<view class="btn-box">
 			<view class="sub-btn" @click="submit()">提交</view>
 		</view>
+		<u-popup :show="show" :closeable="true" @close="close">
+			<view class="storePop">
+				<view class="storePop-title">选择店铺</view>
+				<scroll-view class="scroll-list" scroll-y="true" @scrolltolower="lower" >
+					<view class="storebox" v-for="(item,index) in storeList" :key="index">
+						<image class="logo" :src="item.store.logoUrl" mode="aspectFill"></image>
+						<view class="storebox-r">
+							<view class="x-bc" style="flex: 1;min-height: 104rpx;">
+								<view class="storename ellipsis">{{item.store.storeName || ''}}</view>
+								<view class="storebox-btn" @click="handleClick(item)">选择</u-icon></view>
+							</view>
+						</view>
+					</view>
+				</scroll-view>
+			</view>
+		</u-popup>
 	</view>
 </template>
 
 <script>
-	import {storeComplaint} from '@/api/user.js'
+	import {recommendList} from "@/api/index.js"
+	import {storeComplaint} from "@/api/user.js"
 	export default {
 		data() {
 			return {
-				fileList1:[],
+				show: false,
+				total: 0,
+				pageNum: 1,
+				storeId: '',
+				storeName: "",
+				isLastPage: false,
+				storeList: [],
+				fileList1: [],
 				formdata: {
-					title:'',
-					type:0,//0默认1店铺2商品
+					title: '',
+					type: 0, //0默认1店铺2商品
 					content: '',
-					images: ''
+					images: '',
+					complaintType: '',
 				},
 				rules: {
-					title: [{required: true, message: '请输入投诉标题'}],
-					content: [{required: true, message: '请输入投诉内容'}],
-					images: [{required: true, message: '请上传凭证'}],
+					complaintType: [{
+						required: true,
+						message: '请选择投诉方式'
+					}],
+					title: [{
+						required: true,
+						message: '请输入标题'
+					}],
+					content: [{
+						required: true,
+						message: '请输入内容'
+					}],
+					images: [{
+						required: true,
+						message: '请上传凭证'
+					}]
 				}
 			}
 		},
 		methods: {
-			submit(){
-				var that=this;
-				if(this.fileList1.length>0){
-					this.formdata.images=this.fileList1[0].url
+			openStore() {
+				this.storeId = ''
+				this.storeName = ''
+				this.show = true
+				this.pageNum = 1
+				this.getList()
+			},
+			close() {
+				this.show = false
+			},
+			lower(event) {
+				if(this.total>this.storeList.length){
+					this.pageNum++;
+					this.getList();
+				}
+			},
+			handleClick(item) {
+				this.storeId = item.store.storeId
+				this.storeName = item.store.storeName
+				this.show = false
+			},
+			getList(){
+				if(this.isLastPage){
+					return;
+				}
+				const param = {
+					pageNum: this.pageNum,
+					pageSize: 10
+				};
+				recommendList(param).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (this.pageNum == 1) {
+							this.storeList = res.rows; 
+						} else {
+							this.storeList = this.storeList.concat(res.rows);
+						}
+						this.total=res.total
+						this.isLastPage=this.storeList.length>=res.total
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			navTo() {
+				this.$isLogin().then(
+					res => {
+						if (res) {
+							uni.navigateTo({
+								url: '/pages_user/complaintList'
+							})
+						} else {
+							uni.navigateTo({
+								url: '/pages/auth/login'
+							})
+						}
+					}
+				);
+			},
+			submit() {
+				if (this.fileList1.length > 0) {
+					this.formdata.images = this.fileList1.map(item=>item.url).join(',')
+				}
+				if(this.formdata.type == 1&&!this.storeId) {
+					uni.showToast({
+						title: '请选择店铺',
+						icon: 'none'
+					})
+					return
 				}
 				this.$refs.uForm.validate().then(res => {
-					if(res) {
-						storeComplaint(this.formdata).then(res=>{
-							if(res.code == 200) {
-								uni.showModal({
-									title: '',
-									content: '我们已收到您的反馈,谢谢',
-									showCancel: false,
-									success: function (res) {
-										if (res.confirm) {
-											uni.navigateBack()
-										} else if (res.cancel) {
-											uni.navigateBack()
-										}
+					if (res) {
+						this.$isLogin().then(res => {
+							if (res) {
+								if(this.formdata.type == 1) {
+									this.formdata = {
+										...this.formdata,
+										storeId: this.storeId
+									}
+								}
+								storeComplaint(this.formdata).then(res => {
+									if (res.code == 200) {
+										uni.showModal({
+											title: '',
+											content: '我们已收到您的反馈,谢谢',
+											showCancel: false,
+											success: function(res) {
+												if (res.confirm) {
+													uni.navigateBack()
+												} else if (res.cancel) {
+													uni.navigateBack()
+												}
+											}
+										});
+									} else {
+										uni.showToast({
+											title: res.msg,
+											icon: 'none'
+										})
 									}
-								});
+								})
 							} else {
-								uni.showToast({
-									title: res.msg,
-									icon:'none'
+								uni.navigateTo({
+									url: '/pages/auth/login'
 								})
 							}
-						})
+						});
 					}
 				})
+
 			},
 			deletePic(event) {
 				this[`fileList${event.name}`].splice(event.index, 1)
@@ -121,7 +262,7 @@
 			uploadFilePromise(url) {
 				return new Promise((resolve, reject) => {
 					let a = uni.uploadFile({
-						url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS',  
+						url: uni.getStorageSync('requestPath') + '/app/common/uploadOSS',
 						filePath: url,
 						name: 'file',
 						formData: {
@@ -141,20 +282,79 @@
 </script>
 
 <style scoped lang="scss">
-	.container{
+	.container {
+		padding: 24rpx;
+	}
+	.scroll-list {
+		height: 60vh;
 		padding: 24rpx;
+		box-sizing: border-box;
 	}
 	::v-deep .u-form-item__body {
 		padding: 0 !important;
 	}
-	.btn-box{
+	.storePop{
+		background-color: #f5f5f5;
+		&-title {
+			padding: 24rpx;
+			text-align: center;
+			border-bottom: 1rpx solid #eee;
+			background-color: #fff;
+		}
+		.storebox {
+			background-color: #fff;
+			padding: 20rpx;
+			font-family: PingFang SC;
+			color: #333333;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			overflow: hidden;
+			display: flex;
+			align-items: flex-start;
+			margin-bottom: 24rpx;
+			.logo {
+				flex-shrink: 0;
+				width: 104rpx;
+				height: 104rpx;
+				background: #fff;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				border: 1rpx solid #eee;
+				margin-right: 16rpx;
+				box-sizing: border-box;
+			}
+			.storename {
+				font-weight: 500;
+				font-size: 32rpx;
+			}
+			.storedesc {
+				margin-top: 12rpx;
+				font-weight: 400;
+				font-size: 22rpx;
+			}
+			.storebox-r {
+				flex: 1;
+				overflow: hidden;
+			}
+			.storebox-btn {
+				flex-shrink: 0;
+				padding: 10rpx 24rpx;
+				font-size: 28rpx;
+				border-radius: 28rpx 28rpx 28rpx 28rpx;
+				border: 2rpx solid #FF5C03;
+				font-weight: 500;
+				font-size: 24rpx;
+				color: #FF5C03;
+			}
+		}
+	}
+	.btn-box {
 		width: 100%;
 		height: 120upx;
 		padding: 0 30upx;
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		.sub-btn{
+
+		.sub-btn {
 			width: 100%;
 			height: 88upx;
 			line-height: 88upx;
@@ -167,10 +367,12 @@
 			border-radius: 44upx;
 		}
 	}
+
 	.tagbox {
 		display: flex;
 		align-items: center;
 		flex-wrap: wrap;
+
 		.tagitem {
 			min-width: 100rpx;
 			box-sizing: border-box;
@@ -185,17 +387,20 @@
 			margin-right: 24rpx;
 			text-align: center;
 		}
+
 		.active {
 			color: #FFFFFF;
 			border: 1rpx solid #2583EB;
 			background: #2583EB;
 		}
 	}
+
 	.form-item {
 		background-color: #fff;
 		border-radius: 16rpx;
 		padding: 0 24rpx 24rpx 24rpx;
-		margin-bottom: 24rpx;
+		margin-bottom: 16rpx;
+
 		&-title {
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 600;
@@ -204,4 +409,15 @@
 			padding: 24rpx 0;
 		}
 	}
+
+	.top_item {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 30rpx;
+		color: #222222;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 24rpx !important;
+	}
 </style>

+ 136 - 0
pages_user/complaintList.vue

@@ -0,0 +1,136 @@
+<template>
+	<view style="padding: 24rpx;">
+		<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
+		<view class="list x-f" v-for="(item,index) in dataList" :key="index">
+			<view class="image" v-if="item.isHandlePlatform==0&&item.isHandleStore==0">
+				<image :src="item.images?item.images.split(',')[0]:''" mode="aspectFill" style="width: 100%;height: 100%;"></image>
+				<view class="tag" :style="{backgroundColor: item.isHandlePlatform==0&&item.isHandleStore==0 ? 'red':'#2583EB'}">{{item.isHandlePlatform==0&&item.isHandleStore==0 ? '待处理':'已处理'}}</view>
+			</view>
+			<view style="flex: 1;overflow: hidden;">
+				<view class="ellipsis2">{{item.title}}</view>
+				<view class="x-bc">
+					<view class="time">{{item.createTime}}</view>
+					<view class="btn" @click="showDetail(item)">查看</view>
+				</view>
+			</view>
+		</view>
+		</mescroll-body>
+	</view>
+</template>
+
+<script>
+	import {storeComplaintList} from "@/api/user.js"
+	export default {
+		data() {
+			return {
+				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: []
+			}
+		},
+		methods: {
+			showDetail(item) {
+				uni.navigateTo({
+					url:'/pages_user/complaintListDetail?id='+item.id
+				})
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					status:this.status,
+					page: page.num,
+					pageSize: page.size
+				};
+				storeComplaintList(data).then(res => {
+					if(res.code==200){
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.rows; 
+							
+						} else {
+							that.dataList = that.dataList.concat(res.rows);
+							 
+						}
+						that.mescroll.endBySize(res.rows.length, res.total);
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.time {
+		font-size: 28rpx;
+		color: #888;
+	}
+	.btn{
+		margin-top: 16rpx;
+		padding: 8rpx 20rpx;
+		font-size: 26upx;
+		font-family: PingFang SC;
+		font-weight: 500;
+		text-align: center;
+		border-radius: 32upx;
+		border: 1rpx solid #2583EB;
+		color: #2583EB;
+	}
+	.list {
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		padding: 24rpx;
+		overflow: hidden;
+		font-size: 30rpx;
+		margin-bottom: 24rpx;
+		.image {
+			flex-shrink: 0;
+			width: 150rpx;
+			height: 150rpx;
+			background-color: #eee;
+			position: relative;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			overflow: hidden;
+			margin-right: 24rpx;
+		}
+		.tag {
+			position: absolute;
+			top: 0;
+			left: 0;
+			padding: 5rpx 6rpx;
+			font-size: 20rpx;
+			color: #FFFFFF;
+			background-color: red;
+			border-radius: 16rpx 0 16rpx 0;
+		}
+	}
+</style>

+ 259 - 0
pages_user/complaintListDetail.vue

@@ -0,0 +1,259 @@
+<template>
+	<view class="mainbox">
+		<view class="imgs">
+			<image v-for="(img,i) in images" :key="i" :src="img" mode="aspectFill" @click="previewImage(i,images)"></image>
+		</view>
+		<viwe class="con">
+			<view class="title">{{info.title}}</view>
+			<view>{{info.content}}</view>
+			<view style="margin-top: 24rpx;color:#999999">时间:{{info.createTime || '--'}}</view>
+		</viwe>
+		<viwe class="con">
+			<view class="msg">
+				<view v-for="(msg,i) in msgList" :key="i" style="margin-bottom: 24rpx;">
+					<view class="lable">{{msg.sendType ==2?'商家回复:':msg.sendType ==3?'平台回复:':msg.sendType ==1?'我:':''}}</view>
+					<view class="imgs" v-if="msg.images">
+						<image v-for="(img,i) in msg.images.split(',')" :key="i" :src="img" mode="aspectFill" @click="previewImage(i,msg.images.split(','))"></image>
+					</view>
+					<view class="val">{{msg.content||''}}</view>
+					<view class="val x-f" style="margin-top: 10rpx;font-size: 28rpx;color:#999999;">
+						<text style="margin-right: 16rpx;">{{msg.createTime || '--'}}</text>
+						<u-icon name="chat" color="#999" size="48rpx" v-if="msg.sendType ==2||msg.sendType ==3" @click="open"></u-icon>
+					</view>
+				</view>
+			</view>
+			<!-- <view class="mymsg">
+				<view class="val">问题问题问题问题问题问题问题问题问题问题</view>
+				<view class="val x-f" style="margin-top: 10rpx;font-size: 28rpx;color:#999999;"><text style="margin-right: 16rpx;">2022-12-22 12:33</text></view>
+			</view> -->
+		</viwe>
+		<u-popup :show="show" :closeable="true" @close="close">
+			<view class="replybox">
+				<view class="replybox-title">回复:</view>
+				<view class="form-item">
+					<u-upload v-if="fileList1.length>0" :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" width="60" height="60":maxCount="4"></u-upload>
+					<u--textarea v-model="content" placeholder="输入回复内容" border="none" count
+						maxlength='300'></u--textarea>
+				</view>
+				<view class="replybox-footer x-bc">
+					<view class="uploadbox" :style="{visibility: fileList1.length>0 ? 'hidden':'visible'}">
+						<u-upload :disabled="fileList1.length>0" :fileList="fileList1" uploadIcon="photo" uploadIconColor="#666" @afterRead="afterRead" @delete="deletePic" name="1" width="24" height="24":maxCount="4"></u-upload>
+					</view>
+					<view class="send" @click="send">发送</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {storeComplaintDetail,storeComplaintMsg,storeComplaintMsgAdd} from "@/api/user.js"
+	export default {
+		data() {
+			return {
+				id:'',
+				images:[],
+				info: {},
+				msgList: [],
+				fileList1: [],
+				show: false,
+				content:'',
+				replyImages: ""
+			}
+		},
+		onLoad(option) {
+			this.id = option.id
+			this.getDetail()
+			this.getMsg()
+		},
+		methods: {
+			open() {
+				this.content = ''
+				this.fileList1 = []
+				this.replyImages = ''
+				this.show = true
+			},
+			close() {
+				this.show = false
+			},
+			previewImage(index,images) {
+				uni.previewImage({
+					current: index,
+					urls: images
+				});
+			},
+			getDetail() {
+				storeComplaintDetail(this.id).then(res=>{
+					if(res.code == 200) {
+						this.info = res.data || {}
+						this.images = res.data&&res.data.images.split(',')
+					} else {
+						uni.showToast({
+							title:res.msg,
+							icon: "none"
+						})
+					}
+				})
+			},
+			getMsg() {
+				storeComplaintMsg({
+					complaintId: this.id,
+					pageNum: 1,
+					pageSize: 100,
+				}).then(res=>{
+					if(res.code == 200) {
+						this.msgList = res.rows
+					} else {
+						uni.showToast({
+							title:res.msg,
+							icon: "none"
+						})
+					}
+				})
+			},
+			send() {
+				if (this.fileList1.length > 0) {
+					this.replyImages = this.fileList1.map(item=>item.url).join(',')
+				}
+				if(!this.content) {
+					uni.showToast({
+						title: '请输入回复内容',
+						icon: "none"
+					})
+					return
+				}
+				const param = {
+					complaintId: this.id,
+					sendType: 1,
+					content: this.content,
+					images: this.replyImages
+				}
+				storeComplaintMsgAdd(param).then(res=>{
+					if(res.code == 200) {
+						this.getMsg()
+						this.show = false
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: "none"
+						})
+					}
+				})
+			},
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+				}
+			},
+			uploadFilePromise(url) {
+				return new Promise((resolve, reject) => {
+					let a = uni.uploadFile({
+						url: uni.getStorageSync('requestPath') + '/app/common/uploadOSS',
+						filePath: url,
+						name: 'file',
+						formData: {
+							user: 'test'
+						},
+						success: (res) => {
+							setTimeout(() => {
+								console.log(JSON.parse(res.data).url)
+								resolve(JSON.parse(res.data).url)
+							}, 1000)
+						}
+					});
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.lable {
+		margin-bottom: 16rpx;
+	}
+	.send{
+		flex-shrink: 0;
+		padding: 10rpx 24rpx;
+		font-size: 28rpx;
+		border-radius: 28rpx 28rpx 28rpx 28rpx;
+		border: 2rpx solid #FF5C03;
+		font-weight: 500;
+		font-size: 24rpx;
+		color: #FF5C03;
+	}
+	.replybox {
+		padding: 0 24rpx 24rpx 24rpx;
+		&-title {
+			padding: 24rpx 0;
+		}
+		.form-item {
+			background-color: #fff;
+			border: 1rpx solid #ddd;
+			border-radius: 10rpx;
+			padding: 16rpx;
+		}
+		&-footer {
+			margin-top: 24rpx;
+		}
+		.uploadbox {
+			position: relative;
+		}
+	}
+	.msg{
+		margin-bottom: 20rpx;
+		background-color: #f5f5f5;
+		padding: 16rpx;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+	}
+	.val {
+		color:#222;
+		word-break: break-all;
+	}
+	.mainbox {
+		padding: 24rpx;
+		.imgs {
+			display: flex;
+			flex-wrap: wrap;
+			image {
+				height: 150rpx;
+				width: 150rpx;
+				margin: 0 20rpx 20rpx 0;
+			}
+		}
+		.con{
+			display: block;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			padding: 24rpx;
+			overflow: hidden;
+			font-size: 28rpx;
+			margin-bottom: 24rpx;
+			color: #666666;
+			.title {
+				font-size: 30rpx;
+				font-weight: 500;
+				color: #333;
+			}
+		}
+	}
+</style>

+ 1 - 1
pages_user/shopping/paymentOrderRemain.vue

@@ -166,7 +166,7 @@
 							 	success: function(res) {
 							 		 uni.hideLoading();
 									 uni.redirectTo({
-									 	url:"success?order="+JSON.stringify(that.order)
+									 	url:"/pages_shopping/success?order="+JSON.stringify(that.order)
 									 }) 
 							 	},
 							 	fail: function(err) {

+ 1 - 1
pages_user/shopping/refundOrderList.vue

@@ -111,7 +111,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
 						tip: '暂无数据'
 					}
 				},

+ 2 - 2
pages_user/shopping/refundOrderProduct.vue

@@ -82,10 +82,10 @@
 				// // 	return;
 				// // }
 				// uni.navigateTo({
-				// 	url: '/pages_user/user/refundOrder?items='+JSON.stringify(refundItems)+"&type="+type+"&orderCode="+this.order.orderCode
+				// 	url: '/pages_user/shopping/refundOrder?items='+JSON.stringify(refundItems)+"&type="+type+"&orderCode="+this.order.orderCode
 				// })
 				uni.redirectTo({
-					url: '/pages_user/user/refundOrder?orderId='+this.order.id+"&type="+type+"&orderCode="+this.order.orderCode
+					url: '/pages_user/shopping/refundOrder?orderId='+this.order.id+"&type="+type+"&orderCode="+this.order.orderCode
 				})
 			},
 			getMyStoreOrderItemByOrderId(){

+ 2 - 2
pages_user/shopping/storeOrder.vue

@@ -133,7 +133,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon:'/static/images/no_data.png',
+						icon:'https://bjyjb-1362704775.cos.ap-chongqing.myqcloud.com/app/newImages/empty_icon.png',
 						tip: '暂无数据'
 					}
 				},
@@ -240,7 +240,7 @@
 			},
 			pay(item) {
 				 uni.navigateTo({
-				 	url: '/pages/shopping/paymentOrder?orderId='+item.id
+				 	url: '/pages_shopping/paymentOrder?orderId='+item.id
 				 })
 			},
 			// 查看物流

+ 8 - 7
utils/common.js

@@ -25,7 +25,7 @@ export function isLogin() {
 
 export function isLoginCourse() {
 	return new Promise((resolve, reject) => {
-		let token = uni.getStorageSync('AppTokenmini_RTCourse');
+		let token = uni.getStorageSync('AppTokenmini_MYCourse');
 		if (token==null||token==undefined||token=="" ) {
 			resolve(false);
 		} else {
@@ -52,10 +52,11 @@ export function isLoginCourse() {
  	if(dictValue==null){
  		return "";
  	}
- 	var dicts = uni.getStorageSync('dicts');
+ 	let dicts = uni.getStorageSync('dicts');
  	dicts=JSON.parse(dicts);
- 	var dict=dicts[key]
- 	var name="";
+ 	let dict=Array.isArray(key) ? key : dicts[key]
+
+ 	let name="";
  	dict.forEach(function(item, index, array) {
  		 if(dictValue.toString()==item.dictValue.toString())
  		 {
@@ -66,15 +67,15 @@ export function isLoginCourse() {
  }
 
 export function getDict(key) {
-	var dicts = uni.getStorageSync('dicts');
+	let dicts = uni.getStorageSync('dicts');
 	dicts=JSON.parse(dicts);
-	var dict=dicts[key]
+	let dict=dicts[key]
 	return dict;
 }
 
 export function parseText(txt,len) {
 	if(txt.length>len){
-		var text=txt.substr(0,len)+"..."
+		let text=txt.substr(0,len)+"..."
 		return text;
 	}
 	return txt;