zhengjinyi пре 4 година
родитељ
комит
c2357e532c
75 измењених фајлова са 4346 додато и 7934 уклоњено
  1. 16 7
      common/css/iconfont.scss
  2. 1285 2
      common/json/data.json.js
  3. 135 0
      components/cm-module/homeIndex/pageFloor.vue
  4. 252 0
      components/cm-module/homeIndex/pageSpecial.vue
  5. 0 182
      components/cm-module/homeIndex/pagesProduct.vue
  6. 0 124
      components/cm-module/homeIndex/smallProduct.vue
  7. 0 192
      components/cm-module/homeIndex/specialProduct.vue
  8. 16 1
      components/cm-module/homeIndex/supplierList.vue
  9. 0 3
      components/cm-module/listTemplate/richTextTemplate.vue
  10. 289 0
      components/cm-module/pageTemplate/templateA.vue
  11. 292 0
      components/cm-module/pageTemplate/templateB.vue
  12. 325 0
      components/cm-module/pageTemplate/templateC.vue
  13. 306 0
      components/cm-module/pageTemplate/templateD.vue
  14. 302 0
      components/cm-module/pageTemplate/templateE.vue
  15. 320 0
      components/cm-module/pageTemplate/templateF.vue
  16. 286 0
      components/cm-module/pageTemplate/templateG.vue
  17. 290 0
      components/cm-module/pageTemplate/templateH.vue
  18. 8 3
      components/cm-module/supplier/user.vue
  19. 0 28
      components/gaoyia-parse/components/wxParseAudio.vue
  20. 0 94
      components/gaoyia-parse/components/wxParseImg.vue
  21. 0 53
      components/gaoyia-parse/components/wxParseTable.vue
  22. 0 98
      components/gaoyia-parse/components/wxParseTemplate0.vue
  23. 0 88
      components/gaoyia-parse/components/wxParseTemplate1.vue
  24. 0 88
      components/gaoyia-parse/components/wxParseTemplate10.vue
  25. 0 86
      components/gaoyia-parse/components/wxParseTemplate11.vue
  26. 0 88
      components/gaoyia-parse/components/wxParseTemplate2.vue
  27. 0 88
      components/gaoyia-parse/components/wxParseTemplate3.vue
  28. 0 88
      components/gaoyia-parse/components/wxParseTemplate4.vue
  29. 0 88
      components/gaoyia-parse/components/wxParseTemplate5.vue
  30. 0 88
      components/gaoyia-parse/components/wxParseTemplate6.vue
  31. 0 88
      components/gaoyia-parse/components/wxParseTemplate7.vue
  32. 0 88
      components/gaoyia-parse/components/wxParseTemplate8.vue
  33. 0 88
      components/gaoyia-parse/components/wxParseTemplate9.vue
  34. 0 15
      components/gaoyia-parse/components/wxParseVideo.vue
  35. 0 262
      components/gaoyia-parse/libs/html2json.js
  36. 0 156
      components/gaoyia-parse/libs/htmlparser.js
  37. 0 195
      components/gaoyia-parse/libs/wxDiscode.js
  38. 0 248
      components/gaoyia-parse/parse.css
  39. 0 219
      components/gaoyia-parse/parse.vue
  40. 0 27
      components/u-parse/components/wxParseAudio.vue
  41. 0 86
      components/u-parse/components/wxParseImg.vue
  42. 0 107
      components/u-parse/components/wxParseTemplate0.vue
  43. 0 99
      components/u-parse/components/wxParseTemplate1.vue
  44. 0 97
      components/u-parse/components/wxParseTemplate10.vue
  45. 0 87
      components/u-parse/components/wxParseTemplate11.vue
  46. 0 98
      components/u-parse/components/wxParseTemplate2.vue
  47. 0 98
      components/u-parse/components/wxParseTemplate3.vue
  48. 0 98
      components/u-parse/components/wxParseTemplate4.vue
  49. 0 98
      components/u-parse/components/wxParseTemplate5.vue
  50. 0 98
      components/u-parse/components/wxParseTemplate6.vue
  51. 0 98
      components/u-parse/components/wxParseTemplate7.vue
  52. 0 98
      components/u-parse/components/wxParseTemplate8.vue
  53. 0 98
      components/u-parse/components/wxParseTemplate9.vue
  54. 0 15
      components/u-parse/components/wxParseVideo.vue
  55. 0 261
      components/u-parse/libs/html2json.js
  56. 0 156
      components/u-parse/libs/htmlparser.js
  57. 0 195
      components/u-parse/libs/wxDiscode.js
  58. 0 102
      components/u-parse/readme.md
  59. 0 232
      components/u-parse/u-parse.css
  60. 0 118
      components/u-parse/u-parse.vue
  61. 0 15
      components/w-picker/city-data/area.js
  62. 0 15
      components/w-picker/city-data/city.js
  63. 0 15
      components/w-picker/city-data/province.js
  64. 0 587
      components/w-picker/w-picker.js
  65. 0 992
      components/w-picker/w-picker.vue
  66. 3 0
      h5/pages/article/page.vue
  67. 28 2
      pages/search/search.vue
  68. 0 849
      pages/tabBar/home/home.vue
  69. 13 66
      pages/tabBar/home/index.vue
  70. 8 3
      pages/tabBar/user/user.vue
  71. 72 74
      second/pages/form/form.vue
  72. 2 2
      seller/pages/index/index.vue
  73. 2 2
      services/ajax.env.js
  74. 2 2
      supplier/pages/index/index.vue
  75. 94 96
      supplier/pages/user/my-shop.vue

+ 16 - 7
common/css/iconfont.scss

@@ -4,7 +4,7 @@
 	font-family: iconfont;
 	font-weight: normal;
 	font-style: normal;
-	src: url('https://at.alicdn.com/t/font_1519039_7v4vlb8huxo.ttf') format('truetype');
+	src: url('https://at.alicdn.com/t/font_1519039_o6461i4d2o.ttf') format('truetype');
 }
 .iconfont {
 	font-family: "iconfont" !important;
@@ -13,12 +13,21 @@
 	-webkit-font-smoothing: antialiased;
 	-moz-osx-font-smoothing: grayscale;
 }
-.iconfont {
-  font-family: "iconfont" !important;
-  font-size: 16px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
+
+.icon-jieshu:before {
+  content: "\e6f6";
+}
+
+.icon-weikaishi:before {
+  content: "\e6f4";
+}
+
+.icon-resou:before {
+  content: "\e6f3";
+}
+
+.icon-bangzhuzhongxin:before {
+  content: "\e6f2";
 }
 
 .icon-zaicigoumai:before {

+ 1285 - 2
common/json/data.json.js

@@ -30,11 +30,1294 @@ const supplierMedicaCampNullList = [
 						{value:'2',name:'仪器'},
 						{value:'3',name:'服务'},
 					]
-
+const pageList = [
+            {
+                title:'推荐专区',
+                content:'推荐专区描述词推荐专区描述词',
+                type:1,
+                advertisement:'http://img14.360buyimg.com/babel/s1580x818_jfs/t1/84274/40/9866/66616/5d778b65Ea0ba5552/cec04ecdf62fd5fa.jpg!cc_1580x818.webp',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:2,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:0,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:1,
+                        userIdentity:2,
+                        originalPrice:2000000,
+                        promotions:{
+                            name:'优惠价',
+                            type:1,
+                            mode:1
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:3,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:3,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:5,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                ]
+            },{
+                title:'二手专区',
+                content:'二手专区描述词二手专区描述词',
+                type:2,
+                advertisement:'https://img12.360buyimg.com/babel/s1580x818_jfs/t1/148743/39/16659/91464/5fc8e0adEa1488544/8749912b10d1460a.jpg!cc_1580x818.webp',
+                advertisement1:'https://img11.360buyimg.com/n7/jfs/t1/150437/9/259/119917/5f58ad4fE61a83e28/dd7b0602bcb249f0.jpg',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                ]
+            },{
+                title:'精彩活动',
+                content:'精彩活动描述词精彩活动描述词',
+                type:3,
+                banner:'http://m.360buyimg.com/babel/jfs/t1/154859/31/6073/29706/5fb1d2c4E73af2908/9054ba7e4d595637.jpg.webp',
+                advertisement:'http://img14.360buyimg.com/babel/s1580x818_jfs/t1/84274/40/9866/66616/5d778b65Ea0ba5552/cec04ecdf62fd5fa.jpg!cc_1580x818.webp',
+                advertisement1:'https://img11.360buyimg.com/n7/jfs/t1/150437/9/259/119917/5f58ad4fE61a83e28/dd7b0602bcb249f0.jpg',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                ]
+            },{
+                title:'新品专区',
+                content:'新品专区描述词新品专区描述词',
+                type:4,
+                banner:'http://m.360buyimg.com/babel/jfs/t1/154859/31/6073/29706/5fb1d2c4E73af2908/9054ba7e4d595637.jpg.webp',
+                advertisement:'http://img14.360buyimg.com/babel/s1580x818_jfs/t1/84274/40/9866/66616/5d778b65Ea0ba5552/cec04ecdf62fd5fa.jpg!cc_1580x818.webp',
+                advertisement1:'https://img11.360buyimg.com/n7/jfs/t1/150437/9/259/119917/5f58ad4fE61a83e28/dd7b0602bcb249f0.jpg',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    }
+                ]
+            },{
+                title:'品牌商品',
+                content:'品牌商品描述词品牌商品描述词',
+                type:5,
+                banner:'https://m.360buyimg.com/babel/jfs/t1/133169/21/16170/33334/5fb1d2c9Eda5701a1/853ec7266b34a9d5.jpg.webp',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                ]
+            },{
+                title:'葡萄酒专区',
+                content:'葡萄酒专区描述词葡萄酒专区葡萄酒专区葡萄酒专区描述词',
+                type:6,
+                banner:'https://m.360buyimg.com/babel/jfs/t1/133169/21/16170/33334/5fb1d2c9Eda5701a1/853ec7266b34a9d5.jpg.webp',
+                isPageMore:false,
+                listType:2,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:2,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:0,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:1,
+                        userIdentity:2,
+                        originalPrice:2000000,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'优惠价',
+                            type:1,
+                            mode:1
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:3,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:3,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:5,
+                        actStatus:1,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:0,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        tags:'华熙生物',
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    }
+                ]
+            },{
+                title:'推荐专区',
+                content:'推荐专区描述词推荐专区描述词',
+                type:7,
+                advertisement:'http://img14.360buyimg.com/babel/s1580x818_jfs/t1/84274/40/9866/66616/5d778b65Ea0ba5552/cec04ecdf62fd5fa.jpg!cc_1580x818.webp',
+                isPageMore:false,
+                listType:1,
+                productList:[
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:2,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底盆底共振椅盆底共振椅盆底共振椅盆底共振椅盆底共振椅共振椅',
+                        price:1000000,
+                        priceFlag:0,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:1,
+                        userIdentity:2,
+                        originalPrice:2000000,
+                        promotions:{
+                            name:'优惠价',
+                            type:1,
+                            mode:1
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:3,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:3,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:5,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:2,
+                        productType:0,
+                        priceGrade:4,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:0,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅盆底共振椅盆底共振椅盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:1,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:2,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                    {
+                        image:'https://img13.360buyimg.com/n7/jfs/t1/130798/21/17746/491566/5fc3a8fdE28ab957e/4d203c28c57bd60a.jpg',
+                        name:'BTL EMSELLA 美缇斯-盆底共振椅',
+                        price:1000000,
+                        priceFlag:1,
+                        productType:0,
+                        priceGrade:3,
+                        actStatus:1,
+                        userIdentity:4,
+                        promotions:{
+                            name:'凑单满减'
+                        }
+                    },
+                ]
+            }
+        ]
+const liveList = [
+					{
+						title:'精彩直播',
+						link:'',
+						type: 1,
+						listData:[
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							}
+						]
+					},
+					{
+						title:'热门文章',
+						link:'',
+						type: 2,
+						listData:[
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							}
+						]
+					},
+					{
+						title:'最新活动',
+						link:'',
+						type: 3,
+						listData:[
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							},
+							{
+							    title:'重磅上线:保信亚太全脂然美国重磅上线:保信亚太全脂然美国',
+							    banner:'http://img30.360buyimg.com/babel/s380x300_jfs/t1/141094/26/16310/40985/5fc49b33Ee0eedd9c/e574bd187218d8b7.jpg.webp',
+							    status:1,
+							    time:'2020-12-03'
+							}
+						]
+					},
+            
+        ]	
+	const supplierDataList = [
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            },
+            {
+                image:'https://img.caimei365.com/group1/M00/03/BE/Cmis2F-FH5iAfFu0AABf0kNANww147.jpg',
+                title:'科医人',
+                id:1
+            }
+        ]		
 module.exports = {
 	beautyList,
 	mentuzCampNullList,
 	medicaCampNullList,
 	supplierList,
-	supplierMedicaCampNullList
+	supplierMedicaCampNullList,
+	pageList,
+	liveList,
+	supplierDataList
 }

+ 135 - 0
components/cm-module/homeIndex/pageFloor.vue

@@ -0,0 +1,135 @@
+<template>
+	<view>
+		<view class="page-content clearfix" v-for="(page,index) in pageFloorList" :key="index">
+			<view class="tui-group-name" >
+				<view class="tui-group-title">
+					<view class="tui-group-l">{{ page.title }}</view>
+					<view class="tui-group-r">
+						<text>更多</text>
+						<text class="iconfont icon-xiayibu"></text>
+					</view>
+					
+				</view>
+				<view class="tui-sub__desc">{{ page.content }}</view>
+			</view>
+			<template v-if="page.type == 1">
+				<template-a :pageData="page"></template-a>
+			</template>	 
+			<template v-if="page.type == 2">
+				<template-b :pageData="page"></template-b>
+			</template>	 
+			<template v-if="page.type == 3">
+				<template-c :pageData="page"></template-c>
+			</template>	 
+			<template v-if="page.type == 4">
+				<template-d :pageData="page"></template-d>
+			</template>	 
+			<template v-if="page.type == 5">
+				<template-e :pageData="page"></template-e>
+			</template>	 
+			<template v-if="page.type == 6">
+				<template-f :pageData="page"></template-f>
+			</template>	 
+			<template v-if="page.type == 7">
+				<template-g :pageData="page"></template-g>
+			</template>	 
+		</view>
+	</view>
+</template>
+
+<script>
+	import templateA from '@/components/cm-module/pageTemplate/templateA.vue'
+	import templateB from '@/components/cm-module/pageTemplate/templateB.vue'
+	import templateC from '@/components/cm-module/pageTemplate/templateC.vue'
+	import templateD from '@/components/cm-module/pageTemplate/templateD.vue'
+	import templateE from '@/components/cm-module/pageTemplate/templateE.vue'
+	import templateF from '@/components/cm-module/pageTemplate/templateF.vue'
+	import templateG from '@/components/cm-module/pageTemplate/templateG.vue'
+	import templateH from '@/components/cm-module/pageTemplate/templateH.vue'
+	export default{
+		name:"pageFloor",
+		components:{
+			templateA,
+			templateB,
+			templateC,
+			templateD,
+			templateE,
+			templateF,
+			templateG,
+			templateH,
+		},
+		props:{
+			list:{
+				type:Array
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				pageFloorList:[]
+			}
+		},
+		created(){
+			this.initData(this.list)
+		},
+		computed: {
+	
+		},
+		methods:{
+			initData(data){
+				this.pageFloorList = data
+				console.log(this.pageFloorList)
+			},
+			NavToDetailPage(item) {//跳转
+				this.$api.navigateTo(`/supplier/pages/user/my-shop?shopId=${item.linkParam.id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.page-content{
+		background-color: #F7F7F7;
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		padding: 0 24rpx;
+		float: left;
+	}
+	.tui-group-name {
+		width: 100%;
+		height: 92rpx;
+		padding: 20rpx 0;
+	}
+	.tui-group-title{
+		width: 100%;
+		float: left;
+		.tui-group-l{
+			float: left;
+			font-size: 34rpx;
+			font-weight: bold;
+			text-align: left;
+			line-height: 49rpx;
+			color: #333;
+		}
+		.tui-group-r{
+			float: right;
+			font-size: $font-size-26;
+			text-align: right;
+			line-height: 49rpx;
+			color: #999999;
+			.icon-xiayibu{
+				font-size: $font-size-30;
+				color: #999999;
+			}
+		}
+	}
+	.tui-sub__desc {
+		width: 100%;
+		float: left;
+		color: rgba(153,153,153,0.9);
+		font-size: $font-size-26;
+	}
+</style>

+ 252 - 0
components/cm-module/homeIndex/pageSpecial.vue

@@ -0,0 +1,252 @@
+<template name="pagesProduct">
+	<view>
+		<view class="container-pages clearfix">
+			<scroll-view scroll-x>
+				<view class="tui-goods__list">
+					<view class="tui-goods__item" v-for="(item,index) in dataList" :key="index">
+						<view class="tui-group-name">
+							<view class="tui-group-title"><text>{{ item.title }}</text></view>
+							<view class="iconfont icon-xiayibu"></view>
+						</view>
+						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(live, flIndex) in item.listData" :key="flIndex">
+							<view class="tui-goods__imgbox" v-if="flIndex === 0">
+								<image :src="live.banner" mode="" class="tui-goods__img"></image>
+								<view class="tui-goods__name">{{ live.title }}</view>
+								<view class="tui-goods__statu" v-if="item.type == 1">
+									<image :src="iconLive" mode="widthFix" class="icon-live" v-if="live.status == 1"></image>
+									<text class="iconfont icon-weikaishi" v-if="live.status == 0"></text>
+									<text class="iconfont icon-jieshu" v-if="live.status == 2"></text>
+									<text>{{ live.status | statusType }}</text>
+								</view>
+							</view>
+							<view class="tui-goods__text" v-if="flIndex > 0">{{ live.title }}</view>
+						</view>
+					</view>
+				</view>
+			</scroll-view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"pagesProduct",
+		props:{
+			list:{
+				type:Array
+			}
+		},
+		data() {
+			return{
+				dataList:[],
+				iconLive:'https://static-b.caimei365.com/app/img/icon/icon-live.gif'
+			}
+		},
+		filters: {
+			statusType:function(value) {
+				switch (value) {
+					case 0:
+						return  '未开始';
+						break;
+					case 1:
+						return  '直播中';
+						break;
+					case 2:
+						return  '已结束';
+						break;
+				}
+			},
+			NumFormat:function(value) {//处理金额
+				return Number(value).toFixed(2);
+			},
+		},
+		created(){
+			this.initData(this.list)
+		},
+		methods:{
+			initData(data){
+				this.dataList = data
+				console.log(this.dataList)
+			},
+			NavToDetailPage(floor) {//跳转
+				/**
+				 * 页面跳转类型
+				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
+				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
+				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
+				 **/
+				 if(floor.linkType){
+					 const typeMap = {
+					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
+					 	2:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
+						4:`/h5/pages/activity/activity?id=${floor.linkParam.id}`,
+					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
+					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
+					 	8:`/h5/pages/activity/activity-list`,
+					 	9:`/second/pages/form/introduce`,
+					 	10:`/second/pages/product/product-list`,
+					 	11:`/second/pages/form/form`,
+					 	12:`/pages/search/search?keyWord=${floor.title}`,
+					 	13:`/h5/pages/article/page?link=${floor.link}`,
+					 	14:`/h5/pages/article/page?link=${floor.link}`,
+					 	15:`/h5/pages/article/page?link=${floor.link}`,
+					 	17:`/pages/login/register-select`,
+					 	18:`/h5/pages/article/page?link=${floor.link}`,
+					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
+					 }
+					 const url = typeMap[floor.linkType];
+					 this.$api.navigateTo(url)
+				 }
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container-pages{
+		width: 100%;
+		height:508rpx;
+		padding: 24rpx;
+		float: left;
+		background-color: #F7F7F7;
+		margin-top: 16rpx;
+		box-sizing: border-box;
+		background-color: #F7F7F7;
+		overflow: hidden;
+		display: flex;
+		align-items: center;
+		.tui-goods__list {
+			display: flex;
+			align-items: center;
+		}
+		.tui-goods__item {
+			background-color: #fff;
+			width: 307rpx;
+			height: 460rpx;
+			border-radius: 16rpx;
+			box-sizing: border-box;
+			margin-right: 16rpx;
+			padding: 17rpx;
+		}
+		.tui-group-name{
+			width: 100%;
+			height: 36rpx;
+			float: left;
+			margin-bottom: 13rpx;
+			.tui-group-title{
+				font-size: 26rpx;
+				line-height: 36rpx;
+				float: left;
+				color: #333333;
+			}
+			.icon-xiayibu{
+				font-size: 26rpx;
+				line-height: 36rpx;
+				float: right;
+				color: #909090;
+			}
+		}
+		.tui-goods__main{
+			width: 100%;
+			height: auto;
+			float: left;
+			position: relative;
+			&.one{
+				margin-bottom: 14rpx;
+			}
+		}
+		.tui-goods__imgbox {
+			width: 273rpx;
+			height: 273rpx;
+			box-sizing: border-box;
+			border-radius: 8rpx;
+		}
+		.tui-goods__img {
+			max-width: 273rpx;
+			max-height: 273rpx;
+			border-radius: 8rpx;
+			display: block;
+		}
+		.tui-goods__name{
+			width: 100%;
+			height: 48rpx;
+			float: left;
+			line-height: 48rpx;
+			box-sizing: border-box;
+			padding-left: 12rpx;
+			font-size: $font-size-24;
+			color: #FFFFFF;
+			background-color: rgba(0,0,0,0.4);
+			position: absolute;
+			bottom: 0;
+			left: 0;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+			border-radius:0 0 8rpx 8rpx;
+		}
+		.tui-goods__statu{
+			padding-left: 45rpx;
+			padding-right: 10rpx;
+			height: 35rpx;
+			position: absolute;
+			top: 17rpx;
+			left: 17rpx;
+			background-color: rgba(0,0,0,0.4);
+			border-radius: 18rpx;
+			line-height: 35rpx;
+			color: #FFFFFF;
+			text-align: right;
+			font-size: $font-size-20;
+			.icon-live{
+				width: 17rpx;
+				height: 17rpx;
+				display: block;
+				margin: 0 auto;
+				position: absolute;
+				left: 15rpx;
+				top: 9rpx;
+			}
+			.iconfont{
+				width: 35rpx;
+				height: 35rpx;
+				line-height: 35rpx;
+				display: block;
+				position: absolute;
+				left: 10rpx;
+				font-size: $font-size-30;
+				&.icon-weikaishi{
+					color: #E56D00;
+				}
+				&.icon-jieshu{
+					color: #333333;
+				}
+			}
+		}
+		.tui-goods__text{
+			width: 100%;
+			height: 44rpx;
+			float: left;
+			line-height: 44rpx;
+			box-sizing: border-box;
+			padding-left: 12rpx;
+			font-size: $font-size-24;
+			color: #666666;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			overflow: hidden;
+			position: relative;
+			&::before{
+				content: '';
+				width: 8rpx;
+				height: 8rpx;
+				border-radius: 50%;
+				background-color: #cccccc;
+				position: absolute;
+				left: 0;
+				top: 18rpx;
+			}
+		}
+	}	
+</style>

+ 0 - 182
components/cm-module/homeIndex/pagesProduct.vue

@@ -1,182 +0,0 @@
-<template name="pagesProduct">
-	<view>
-		<view class="container-pages clearfix">
-			<view class="tui-block__box tui-mtop__10" v-for="(item, index) in pagesProductList" :key="index">
-				<view class="tui-group-name" >
-					<view class="tui-group-title">
-						<text>{{ item.title }}</text>
-					</view>
-					<view class="tui-sub__desc">{{ item.detail }}</view>
-				</view>
-				<scroll-view scroll-x>
-					<view class="tui-goods__list">
-						<view class="tui-goods__item"v-for="(floor, flIndex) in item.floorData" :key="flIndex"  @tap="NavToDetailPage(floor)" >
-							<view class="tui-goods__imgbox">
-								<image :src="floor.image" mode="widthFix" class="tui-goods__img"></image>
-							</view>
-							<view class="tui-pri__box">
-								<view class="tui-sale-pri">{{ floor.title }}</view>
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import { mapState,mapMutations} from 'vuex';
-	export default{
-		name:"pagesProduct",
-		props:{
-			list:{
-				type:Array
-			},
-			userIdentity:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				pagesProductList:[],
-			}
-		},
-		filters: {
			NumFormat:function(text) {//处理金额
				return Number(text).toFixed(2);
			},
		},
-		created(){
-			this.initData(this.list)
-		},
-		computed: {
-			...mapState(['hasLogin','userInfo','isActivity'])
-		},
-		methods:{
-			initData(res){
-				this.pagesProductList = res
-			},
-			NavToDetailPage(floor) {//跳转
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 **/
-				 if(floor.linkType){
-					 const typeMap = {
-					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
-					 	2:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
-						4:`/h5/pages/activity/activity?id=${floor.linkParam.id}`,
-					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${floor.title}`,
-					 	13:`/h5/pages/article/page?link=${floor.link}`,
-					 	14:`/h5/pages/article/page?link=${floor.link}`,
-					 	15:`/h5/pages/article/page?link=${floor.link}`,
-					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/page?link=${floor.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
-					 }
-					 const url = typeMap[floor.linkType];
-					 this.$api.navigateTo(url)
-				 }
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.container-pages{
-		width: 100%;
-		height: auto;
-		float: left;
-		background-color: #F7F7F7;
-		.tui-block__box {
-			width: 100%;
-			padding: 0 25rpx 25rpx;
-			box-sizing: border-box;
-			background-color: #F7F7F7;
-			border-radius: 20rpx;
-			overflow: hidden;
-		}
-		.tui-mtop__10 {
-			margin-top: 10rpx;
-		}
-		.tui-group-name {
-			width: 100%;
-			height: 92rpx;
-			padding: 20rpx 0;
-		}
-		.tui-group-title{
-			width: 100%;
-			float: left;
-			font-size: 34rpx;
-			font-weight: bold;
-			text-align: left;
-			line-height: 49rpx;
-			color: #333;
-		}
-		.tui-sub__desc {
-			width: 100%;
-			float: left;
-			color: rgba(153,153,153,0.9);
-			font-size: $font-size-26;
-		}
-		.tui-goods__list {
-			display: flex;
-			align-items: center;
-		}
-		.tui-goods__item {
-			background-color: #fff;
-			width: 200rpx;
-			height: 290rpx;
-			box-sizing: border-box;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			flex-direction: column;
-			flex-shrink: 0;
-			margin-right: 12rpx;
-		}
-		.tui-goods__imgbox {
-			width: 200rpx;
-			height: 200rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			box-sizing: border-box;
-		}
-		.tui-goods__img {
-			max-width: 200rpx;
-			max-height: 200rpx;
-			display: block;
-			border-radius: 10rpx 10rpx 0 0;
-		}
-		.tui-pri__box {
-			max-width: 200rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			box-sizing: border-box;
-			padding: 0 10rpx;
-		}
-		.tui-sale-pri {
-			display: flex;
-			align-items: flex-end;
-			padding: 10rpx 0 8rpx;
-			box-sizing: border-box;
-			font-size: 26rpx;
-			line-height: 40rpx;
-			color: #666666;
-			white-space: normal;
-			word-break: break-all;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			display: -webkit-box;
-			-webkit-box-orient: vertical;
-			-webkit-line-clamp: 2;
-		}
-	}	
-</style>

+ 0 - 124
components/cm-module/homeIndex/smallProduct.vue

@@ -1,124 +0,0 @@
-<template>
-	<view class="special-content clearfix">
-		<view class="swiper-goods-box">
-			<view class="goods-box-item" v-for="(item,index) in productList" :key="index" @click="NavToDetailPage(item)">
-				<image :src="item.image" mode="" class="box-item-image"></image>
-				<view class="box-item-mask">{{ item.title }}</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:"specialContent",
-		props:{
-			list:{
-				type:Array
-			}
-		},
-		data() {
-			return{
-				current:0,
-				productList:[]
-			}
-		},
-		created(){
-			this.initData(this.list)
-		},
-		computed: {
-	
-		},
-		methods:{
-			initData(list){
-				this.productList = list
-			},
-			swiperChange(e) {//轮播图切换
-				const index = e.detail.current;
-				this.current = index;
-			},
-			NavToDetailPage(floor) {//跳转
-				console.log(floor)
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 **/
-				 if(floor.linkType){
-					 const typeMap = {
-					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
-					 	2:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
-					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${floor.title}`,
-					 	13:`/h5/pages/article/page?link=${floor.link}`,
-					 	14:`/h5/pages/article/page?link=${floor.link}`,
-					 	15:`/h5/pages/article/page?link=${floor.link}`,
-					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/page?link=${floor.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
-					 }
-					 const url = typeMap[floor.linkType];
-					 this.$api.navigateTo(url)
-				 }
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.special-content{
-		background-color: #F7F7F7;
-		width: 100%;
-		height: auto;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-	.swiper-goods-box{
-		width: 100%;
-		height: auto;
-		float: left;
-		.goods-box-item{
-			width: 340rpx;
-			height: 340rpx;
-			float: left;
-			margin-right: 20rpx;
-			margin-bottom: 20rpx;
-			&:nth-child(2n){
-				margin-right: 0;
-			}
-			position: relative;
-			.box-item-image{
-				width: 340rpx;
-				height: 340rpx;
-				display: block;
-			}
-			.box-item-mask{
-				width: 100%;
-				height: 64rpx;
-				background: rgba(0,0,0,.36);
-				line-height: 64rpx;
-				font-size: $font-size-26;
-				text-align: center;
-				color: #FFFFFF;
-				position: absolute;
-				bottom: 0;
-				left: 0;
-				box-sizing: border-box;
-				padding:0 20rpx;
-				white-space: normal;
-				word-break: break-all;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 1;
-			}
-		}
-	}
-</style>

+ 0 - 192
components/cm-module/homeIndex/specialProduct.vue

@@ -1,192 +0,0 @@
-<template>
-	<view class="special-content clearfix">
-		<view class="swiper-banner-title">
-			<view class="title-left">商品专题</view>
-			<view class="title-more" @click="NavToDetailMoreSpecia">
-				<text>更多商品专题</text>
-				<text class="iconfont icon-xiangyou"></text>
-			</view>
-		</view>
-		<view class="swiper-banner-box" >
-			<swiper class="tui-banner-swiper tui-banner tui-skeleton-fillet" :autoplay="true" :interval="5000" :duration="500"  @change="swiperChange" :circular="true">
-				<swiper-item v-for="(item,index) in bannerList" :key="index" @click="NavToDetailPage(item)">
-					<image :src="item.image" class="tui-slide-image" mode="scaleToFill"/>
-				</swiper-item>
-			</swiper>
-			<view class="swiper__dots-box" v-if="bannerList.length > 1">
-				<view v-for="(item,idx) in bannerList" 
-					  :key="idx" 
-					  :class="[idx===current?'swiper__dots-long':'none']"   
-					  :data-index="current" class="swiper__dots-item">
-				</view>	  
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:"specialContent",
-		props:{
-			list:{
-				type:Array
-			}
-		},
-		data() {
-			return{
-				current:0,
-				bannerList:[]
-			}
-		},
-		created(){
-			this.initData(this.list)
-		},
-		computed: {
-	
-		},
-		methods:{
-			initData(list){
-				this.bannerList = list
-			},
-			swiperChange(e) {//轮播图切换
-				const index = e.detail.current;
-				this.current = index;
-			},
-			NavToDetailMoreSpecia(){//跳转商品专题列表
-				this.$api.navigateTo('/h5/pages/activity/activity-list')
-				// this.$util.msg("功能开发中,敬请期待~",2000)
-				// uni.navigateToMiniProgram({
-				// 	appId: 'wx92d650b253f8f2e3',
-				// 	path: '/pages/index/index',
-				// 	extraData: {
-				// 		'data1': 'test'
-				// 	},
-				// 	envVersion: 'develop',
-				// 	success(res) {
-				// 		console.log(res)
-				// 		// 打开成功
-				// 	}
-				// })
-			},
-			NavToDetailPage(floor) {//跳转
-				console.log(floor)
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 **/
-				 if(floor.linkType){
-					 const typeMap = {
-					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
-					 	2:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
-						4:`/h5/pages/activity/activity?id=${floor.linkParam.id}`,
-					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${floor.title}`,
-					 	13:`/h5/pages/article/page?link=${floor.link}`,
-					 	14:`/h5/pages/article/page?link=${floor.link}`,
-					 	15:`/h5/pages/article/page?link=${floor.link}`,
-					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/page?link=${floor.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
-					 }
-					 const url = typeMap[floor.linkType];
-					 this.$api.navigateTo(url)
-				 }
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.special-content{
-		background-color: #F7F7F7;
-		width: 100%;
-		height: auto;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-	.swiper-banner-box{
-		width: 100%;
-		height: 284rpx;
-		background:#F7F7F7;
-		position: relative;
-		background-size: cover;
-		float: left;
-		margin: 20rpx 0;
-	}	
-	.swiper-banner-title{
-		width: 100%;
-		float: left;
-		font-size: 34rpx;
-		font-weight: bold;
-		text-align: left;
-		line-height: 49rpx;
-		color: #333;
-		background:#F7F7F7;
-		.title-left{
-			float: left;
-		}
-		.title-more{
-			float: right;
-			font-size: $font-size-24;
-			font-weight: normal;
-			color: #999999;
-			.icon-xiangyou{
-				font-size: $font-size-26;
-				font-weight: normal;
-			}
-		}
-	}
-	.tui-banner-swiper {
-		width: 700rpx;
-		margin: 0 auto;
-		height: 284rpx;
-		border-radius: 2rpx;
-		overflow: hidden;
-		transform: translateY(0);
-		box-shadow:0px 3px 6px rgba(225,86,22,0.08);
-		.banner-item{
-			border-radius: 16rpx;
-		}
-		.tui-slide-image {
-			width: 100%;
-			height: 284rpx;
-			display: block;
-			border-radius: 2rpx;
-		}
-	}
-	.swiper__dots-box{
-		position: absolute;
-		bottom: 30rpx;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		.swiper__dots-item{
-			width: 8rpx;
-			height: 8rpx;
-			border-radius: 100%;
-			margin-left: 6px;
-			background-color:rgba(255,255,255,.7);
-		}
-		.swiper__dots-long{
-			width: 35rpx;
-			height: 8rpx;
-			border-radius: 4rpx;
-			background-color: #ffff;
-			transition: all 0.4s;
-		}
-	}
-	
-</style>

+ 16 - 1
components/cm-module/homeIndex/supplierList.vue

@@ -6,6 +6,9 @@
 			</view>
 			<view class="tui-sub__desc">采美正品联盟 质量保证</view>
 		</view>
+		<view class="supplier-banner">
+			<image src="https://www.caimei365.com/img/common/goodsup.png" mode=""></image>
+		</view>
 		<view class="swiper-goods-box">
 			<view class="goods-box-item" v-for="(item,index) in list" :key="index" @click="NavToDetailPage(item)">
 				<image :src="item.image" mode="" class="box-item-image"></image>
@@ -73,6 +76,17 @@
 		color: rgba(153,153,153,0.9);
 		font-size: $font-size-26;
 	}
+	.supplier-banner{
+		width: 100%;
+		height: 240rpx;
+		float: left;
+		margin-top: 24rpx;
+		image{
+			width: 100%;
+			height: 240rpx;
+			display: block;
+		}
+	}
 	.swiper-goods-box{
 		width: 100%;
 		height: auto;
@@ -100,7 +114,8 @@
 				line-height: 40rpx;
 				font-size: $font-size-20;
 				text-align: center;
-				color: #999999;
+				color: #666666;
+				background-color: #f9f9f9;
 				float: left;
 				box-sizing: border-box;
 				padding:0 20rpx;

+ 0 - 3
components/cm-module/listTemplate/richTextTemplate.vue

@@ -1,13 +1,10 @@
 <template>
 	<view class="content">
-		 <!-- <u-parse :content="article" @preview="preview" @navigate="navigate" ></u-parse> -->
 		<parser :html="html" :img-mode="widthFix"></parser>
 	</view>
 </template>
 
 <script>
-	// import uParse from '@/components/gaoyia-parse/parse.vue'
-	// import uParse from '@/components/u-parse/u-parse.vue'
 	import parser from "@/components/jyf-Parser/index"
 	var self;
 	export default{

+ 289 - 0
components/cm-module/pageTemplate/templateA.vue

@@ -0,0 +1,289 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image class="item-img-gg" :src="floorData.advertisement" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 3" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&:nth-child(2n){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 292 - 0
components/cm-module/pageTemplate/templateB.vue

@@ -0,0 +1,292 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image class="item-img-gg" :src="floorData.advertisement" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_02">
+			<image class="item-img-gg" :src="floorData.advertisement1" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 2" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&:nth-child(2n){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 325 - 0
components/cm-module/pageTemplate/templateC.vue

@@ -0,0 +1,325 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image class="item-img-gg" :src="floorData.advertisement" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_02">
+			<image class="item-img-gg" :src="floorData.advertisement1" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 3" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&.ad_01{
+				width: 100%;
+				height: 240rpx;
+				.item-img-gg{
+					width: 100%;
+					height: 240rpx;
+					display: block;
+					border-radius: 16rpx;
+				}
+			}
+			&.ad_02{
+				margin-right: 20rpx;
+			}	
+			&:nth-child(odd){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 8rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				margin-bottom: 20rpx;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 306 - 0
components/cm-module/pageTemplate/templateD.vue

@@ -0,0 +1,306 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image class="item-img-gg" :src="floorData.banner" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_02">
+			<image class="item-img-gg" :src="floorData.advertisement" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_03">
+			<image class="item-img-gg" :src="floorData.advertisement1" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 2" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&.ad_01{
+				width: 100%;
+				height: 240rpx;
+				margin-right: 0;
+				.item-img-gg{
+					width: 100%;
+					height: 240rpx;
+					display: block;
+					border-radius: 16rpx;
+				}
+			}
+			&:nth-child(odd){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 302 - 0
components/cm-module/pageTemplate/templateE.vue

@@ -0,0 +1,302 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image class="item-img-gg" :src="floorData.banner" mode="aspectFill"></image>
+		</view>
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 4" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&.ad_01{
+				width: 100%;
+				height: 240rpx;
+				.item-img-gg{
+					width: 100%;
+					height: 240rpx;
+					display: block;
+					border-radius: 16rpx;
+				}
+			}
+			&.ad_02{
+				margin-right: 20rpx;
+			}	
+			&:nth-child(odd){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 320 - 0
components/cm-module/pageTemplate/templateF.vue

@@ -0,0 +1,320 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 4" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+		<view class="floor-item ad_01">
+			<image class="item-img-gg" :src="floorData.banner" mode="aspectFill"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&.ad_01{
+				width: 100%;
+				height: 240rpx;
+				margin-right: 0;
+				.item-img-gg{
+					width: 100%;
+					height: 240rpx;
+					display: block;
+					border-radius: 16rpx;
+				}
+			}
+			&:nth-child(2n){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 8rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				margin-bottom: 20rpx;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 286 - 0
components/cm-module/pageTemplate/templateG.vue

@@ -0,0 +1,286 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_04 clearfix" v-for="(item, idx) in floorData.productList" v-if="idx < 4" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			},
+			userIdentity:{
+				type:Number
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 339rpx;
+			height: 516rpx;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 16rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&:nth-child(2n){
+				margin-right: 0;
+			}
+			.item-img-gg{
+				width: 339rpx;
+				height: 516rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+			.item-img{
+				width: 339rpx;
+				height: 339rpx;
+				border-radius: 16rpx 16rpx 0 0;
+				display: block;
+				margin-bottom: 8rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 54rpx;
+			}
+			.title{
+				width: 100%;
+				height: 70rpx;
+				display: flex;
+				line-height: 35rpx;
+				flex-direction: column;
+				margin: 8rpx 0;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:35rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:54rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 290 - 0
components/cm-module/pageTemplate/templateH.vue

@@ -0,0 +1,290 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item clearfix" v-for="(item, idx) in product" :key="idx" @click.stop="navToDetailPage(item.id)">
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<view class="floor-item_tag" v-if="floorData.listType == 2">
+				<text>{{ item.tags }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap">{{item.name}}</text>
+				</view>
+				<view class="floor-item-price" v-if="floorData.listType == 1">
+					<view class="floor-item-act">
+						<template v-if="userIdentity === 3">
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>	
+						<template v-else>
+							<template v-if="item.actStatus===1">
+								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+									{{item.promotions.name}}
+									<text v-if="hasLogin && item.priceFlag != 1">:¥{{item.price | NumFormat}}</text>
+								</view>
+								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+							</template>
+							<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+								<view class="floor-tags">阶梯价格</view>	
+							</template>
+						</template>
+					</view>	
+					<view v-if="hasLogin">
+						<template v-if="userIdentity == 3">
+							<template v-if="item.supplierId == shopId">
+								<view class="title-none" v-if="item.priceFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+								</view>
+							</template>	
+							<template v-else>
+								<view class="no-price">
+									<view class="p-stars">
+										<text class="p-no">¥</text>
+										<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+									</view>
+								</view>	
+							</template>
+						</template>
+						<template v-else-if="userIdentity ===4">
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="title-none"  v-if="item.priceFlag === '2'">
+								<text class="p big">¥价格仅会员可见</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-if="item.priceFlag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+						<template v-else>
+							<view class="title-none" v-if="item.priceFlag === '1'">
+								<text class="p big">¥未公开价格</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+								<text class="p sm">¥</text>
+								<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<view class="p-stars">
+							<text class="p-no">¥</text>
+							<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
+						</view>
+					</view>	
+				</view>	
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { mapState,mapMutations} from 'vuex';
+	export default{
+		name:"templateA",
+		props:{
+			pageData:{
+				type:Object
+			}
+		},
+		data() {
+			return{
+				floorData:{}
+			}
+		},
+		filters: {
+			NumFormat:function(text) {//处理金额				
+				return Number(text).toFixed(2);			
+			},		
+		},
+		created(){
+			this.initData(this.pageData)
+		},
+		computed: {
+			...mapState(['hasLogin','userInfo','isActivity'])
+		},
+		watch: {
+			pageData: {
+				handler: function (el) {//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+					this.pageData = el
+					this.initData(this.pageData)
+				},
+				deep: true
+			}
+		},
+		methods:{
+			initData(data){
+				this.floorData = data
+				console.log(this.floorData)
+			},
+			PromotionsFormat(promo){//促销活动类型数据处理
+				if(promo!=null){
+					if(promo.type == 1 && promo.mode == 1){
+						return true
+					}else{
+						return false
+					}
+				}
+				return false
+			},
+			navToDetailPage(id) {//跳转商品详情页
+				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.section_page_main{
+		width: 100%;
+		height: auto;
+		box-sizing: border-box;
+		.floor-item{
+			width: 341rpx;
+			height: auto;
+			margin-right: 20rpx;
+			font-size: $font-size-24;
+			color: $text-color;
+			background: #FFFFFF;
+			line-height: 36rpx;
+			border-radius: 2rpx;
+			margin-bottom: 20rpx;
+			float: left;
+			box-sizing: border-box;
+			position: relative;
+			&:nth-child(2n){
+				margin-right: 0;
+			}
+			.item-img{
+				width: 341rpx;
+				height: 341rpx;
+				border-radius: 2rpx 2rpx 0 0;
+				display: block;
+				margin-bottom: 20rpx;
+			}
+			.floor-item_tag{
+				width: 100%;
+				height: 32rpx;
+				float: left;
+				margin: 20rpx 0;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				text{
+					display: inline-block;
+					padding: 0 8rpx;
+					border: 1px solid #e3ebf7;
+					border-radius: 8rpx ;
+					color: #9aa5b5;
+					font-size: $font-size-22;
+					line-height: 32rpx;
+					text-align: center;
+					float: left;
+				}
+			}
+			.floor-item-content{
+				width: 100%;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+			}
+			.floor-item-act{
+				display: block;
+				width: 100%;
+				height: 32rpx;
+				text-align: center;
+				box-sizing: border-box;
+			}
+			.floor-tags{
+				height: 28rpx;
+				border-radius: 6rpx;
+				background-color: #FFFFFF;
+				line-height: 28rpx;
+				color: $color-system;
+				text-align: center;
+				display: inline-block;
+				padding:0 16rpx;
+				font-size: $font-size-20;
+				border: 1px solid #E15616;
+				float: left;
+			}
+			.title-none{
+				font-size: $font-size-26;
+				color: #FF2A2A;
+				line-height: 70rpx;
+				.btn{
+					display: inline-block;
+					float: right;
+					width: 112rpx;
+					height: 44rpx;
+					background: $btn-confirm;
+					line-height: 44rpx;
+					font-size: $font-size-24;
+					color: #FFFFFF;
+					text-align: center;
+					border-radius: 22rpx;
+					margin-top: 17rpx;
+				}
+			}
+			.title{
+				width: 100%;
+				height: 72rpx;
+				display: flex;
+				line-height: 36rpx;
+				flex-direction: column;
+				margin-bottom: 15rpx;
+				padding: 0;
+				.mclap{
+					width: 100%;
+					line-height:40rpx;
+					text-overflow:ellipsis;
+					display: -webkit-box;
+					word-break: break-all;
+					-webkit-box-orient: vertical;
+					-webkit-line-clamp: 2;
+					overflow: hidden;
+					font-size: 26rpx;
+				}
+			}
+			.no-price{
+				height: 70rpx;
+				line-height: 70rpx;
+				display: flex;
+				box-sizing: border-box;
+				.p-no{
+					font-size: $font-size-30;
+					color: $text-color;
+					display: block;
+					float: left;
+				}
+				.p-stars{
+					float: left;
+				}
+			}
+			.price{
+				color: #FF2A2A;
+				line-height:70rpx;
+				&.none{
+					text-decoration: line-through;
+					color: #999999;
+				}
+				.sm{
+					font-size: $font-size-24;
+				}
+				.big{
+					font-size: $font-size-28;
+				}
+			}
+		}
+	}
+</style>

+ 8 - 3
components/cm-module/supplier/user.vue

@@ -76,15 +76,20 @@
 				</view>
 				<view class="list-cell-item">
 					<view class="list-cell" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-icon"><text class="iconfont icon-lianxiwomen" :class="item.icon"></text></text>
+						<text class="cell-icon"><text class="iconfont icon-lianxiwomen"></text></text>
 						<text class="cell-tit">联系我们</text>
 						<text class="cell-more" @click="toPhone">{{ contactNumber }}</text>
 					</view>
-					<view class="list-cell last" @click="this.$api.navigateTo('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-icon"><text class="iconfont icon-guanyuwomen" :class="item.icon"></text></text>
+					<view class="list-cell" @click="this.$api.navigateTo('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-icon"><text class="iconfont icon-guanyuwomen"></text></text>
 						<text class="cell-tit">关于我们</text>
 						<text class="cell-more iconfont icon-xiayibu"></text>
 					</view>
+					<view class="list-cell last" @click="this.$api.navigateTo('/h5/pages/article/page?linkType=99')" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-icon"><text class="iconfont icon-bangzhuzhongxin"></text></text>
+						<text class="cell-tit">帮助中心</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
 				</view>	
 			</view>
 		</view>	

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

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

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

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

+ 0 - 53
components/gaoyia-parse/components/wxParseTable.vue

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

+ 0 - 98
components/gaoyia-parse/components/wxParseTemplate0.vue

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

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

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

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

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

+ 0 - 86
components/gaoyia-parse/components/wxParseTemplate11.vue

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 0 - 262
components/gaoyia-parse/libs/html2json.js

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

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

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

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

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

+ 0 - 248
components/gaoyia-parse/parse.css

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

+ 0 - 219
components/gaoyia-parse/parse.vue

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

+ 0 - 27
components/u-parse/components/wxParseAudio.vue

@@ -1,27 +0,0 @@
-<template>
-  <!--增加audio标签支持-->
-  <audio
-    :id="node.attr.id"
-    :class="node.classStr"
-    :style="node.styleStr"
-    :src="node.attr.src"
-    :loop="node.attr.loop"
-    :poster="node.attr.poster"
-    :name="node.attr.name"
-    :author="node.attr.author"
-    controls></audio>
-</template>
-
-<script>
-export default {
-  name: 'wxParseAudio',
-  props: {
-    node: {
-      type: Object,
-      default() {
-        return {};
-      },
-    },
-  },
-};
-</script>

+ 0 - 86
components/u-parse/components/wxParseImg.vue

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

+ 0 - 107
components/u-parse/components/wxParseTemplate0.vue

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

+ 0 - 99
components/u-parse/components/wxParseTemplate1.vue

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

+ 0 - 97
components/u-parse/components/wxParseTemplate10.vue

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

+ 0 - 87
components/u-parse/components/wxParseTemplate11.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate2.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate3.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate4.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate5.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate6.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate7.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate8.vue

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

+ 0 - 98
components/u-parse/components/wxParseTemplate9.vue

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

+ 0 - 15
components/u-parse/components/wxParseVideo.vue

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

+ 0 - 261
components/u-parse/libs/html2json.js

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

+ 0 - 156
components/u-parse/libs/htmlparser.js

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

+ 0 - 195
components/u-parse/libs/wxDiscode.js

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

+ 0 - 102
components/u-parse/readme.md

@@ -1,102 +0,0 @@
-## uParse 适用于 uni-app/mpvue 的富文本解析组件
-
-> 支持 Html、Markdown 解析,Fork自: [mpvue-wxParse](https://github.com/F-loat/mpvue-wxParse)
-
-
-## 属性
-
-| 名称             | 类型          | 默认值        | 描述               |
-| -----------------|--------------- | ------------- | ----------------  |
-| loading          | Boolean        | false         | 数据加载状态       |
-| className        | String         | —             | 自定义 class 名称  |
-| content          | String         | —             | 渲染内容           |
-| noData           | String         | 数据不能为空   | 空数据时的渲染展示  |
-| startHandler     | Function       | 见源码         | 自定义 parser 函数 |
-| endHandler       | Function       | null          | 自定义 parser 函数 |
-| charsHandler     | Function       | null          | 自定义 parser 函数 |
-| imageProp        | Object         | 见下文        | 图片相关参数        |
-
-### 自定义 parser 函数具体介绍
-
-* 传入的参数为当前节点 `node` 对象及解析结果 `results` 对象,例如 `startHandler(node, results)`
-* 无需返回值,通过对传入的参数直接操作来完成需要的改动
-* 自定义函数会在原解析函数处理之后执行
-
-### imageProp 对象具体属性
-
-| 名称              | 类型           | 默认值        | 描述                |
-| -----------------|--------------- | ------------- | ------------------ |
-| mode             | String         | 'aspectFit'   | 图片裁剪、缩放的模式 |
-| padding          | Number         | 0             | 图片内边距          |
-| lazyLoad         | Boolean        | false         | 图片懒加载          |
-| domain           | String         | ''            | 图片服务域名        |
-
-## 事件
-
-| 名称             | 参数              | 描述              |
-| -----------------|----------------- | ----------------  |
-| preview          | 图片地址,原始事件 | 预览图片时触发     |
-| navigate         | 链接地址,原始事件 | 点击链接时触发     |
-
-## 基本使用方法
-
-
-``` vue
-<template>
-  <div>
-    <u-parse :content="article" @preview="preview" @navigate="navigate" />
-  </div>
-</template>
-
-<script>
-import uParse from '@/components/u-parse/u-parse.vue'
-
-export default {
-  components: {
-    uParse
-  },
-  data () {
-    return {
-      article: '<div>我是HTML代码</div>'
-    }
-  },
-  methods: {
-    preview(src, e) {
-      // do something
-    },
-    navigate(href, e) {
-      // do something
-    }
-  }
-}
-</script>
-
-<style>
-@import url("@/components/u-parse/u-parse.css");
-</style>
-```
-
-
-## 渲染 Markdown
-
-> 先将 markdown 转换为 html 即可
-
-```
-npm install marked
-```
-
-``` js
-import marked from 'marked'
-import uParse from '@/components/u-parse/u-parse.vue'
-
-export default {
-  components: {
-    uParse
-  },
-  data () {
-    return {
-      article: marked(`#hello, markdown!`)
-    }
-  }
-}
-```

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

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

+ 0 - 118
components/u-parse/u-parse.vue

@@ -1,118 +0,0 @@
-<!--**
- * forked from:https://github.com/F-loat/mpvue-wxParse
- *
- * github地址: https://github.com/dcloudio/uParse
- *
- * for: uni-app框架下 富文本解析
- */-->
-
-<template>
-<!--基础元素-->
-<div class="wxParse" :class="className" v-if="!loading">
-  <block v-for="(node,index) of nodes" :key="index">
-    <wxParseTemplate :node="node" />
-  </block>
-</div>
-</template>
-
-<script>
-import HtmlToJson from './libs/html2json';
-import wxParseTemplate from './components/wxParseTemplate0';
-
-export default {
-  name: 'wxParse',
-  props: {
-    loading: {
-      type: Boolean,
-      default: false,
-    },
-    className: {
-      type: String,
-      default: '',
-    },
-    content: {
-      type: String,
-      default: '',
-    },
-    noData: {
-      type: String,
-      default: '<div style="color: red;">数据不能为空</div>',
-    },
-    startHandler: {
-      type: Function,
-      default() {
-        return (node) => {
-          node.attr.class = null;
-          node.attr.style = null;
-        };
-      },
-    },
-    endHandler: {
-      type: Function,
-      default: null,
-    },
-    charsHandler: {
-      type: Function,
-      default: null,
-    },
-    imageProp: {
-      type: Object,
-      default() {
-        return {
-          mode: 'aspectFit',
-          padding: 0,
-          lazyLoad: false,
-          domain: '',
-        };
-      },
-    },
-  },
-  components: {
-    wxParseTemplate,
-  },
-  data() {
-    return {
-      imageUrls: [],
-    };
-  },
-  computed: {
-    nodes() {
-      const {
-        content,
-        noData,
-        imageProp,
-        startHandler,
-        endHandler,
-        charsHandler,
-      } = this;
-      const parseData = content || noData;
-      const customHandler = {
-        start: startHandler,
-        end: endHandler,
-        chars: charsHandler,
-      };
-      const results = HtmlToJson(parseData, customHandler, imageProp, this);
-      this.imageUrls = results.imageUrls;
-      console.log(results)
-      return results.nodes;
-    },
-  },
-  methods: {
-    navigate(href, $event) {
-      this.$emit('navigate', href, $event);
-    },
-    preview(src, $event) {
-      if (!this.imageUrls.length) return;
-      wx.previewImage({
-        current: src,
-        urls: this.imageUrls,
-      });
-      this.$emit('preview', src, $event);
-    },
-    removeImageUrl(src) {
-      const { imageUrls } = this;
-      imageUrls.splice(imageUrls.indexOf(src), 1);
-    },
-  },
-};
-</script>

+ 0 - 15
components/w-picker/city-data/area.js

@@ -1,15 +0,0 @@
-// /* eslint-disable */
-// const areaData = [] ;
-
-// uni.request({
-// 	url: 'http://192.168.1.22:8107/personal/town',
-// 	data:{},
-// 	success(response){
-// 		console.log(JSON.stringify(response.data));
-// 		if(response.data.code == '1'){
-// 			areaData = response.data;
-// 		}
-// 	}
-// })
-
-// export default areaData;

+ 0 - 15
components/w-picker/city-data/city.js

@@ -1,15 +0,0 @@
-// /* eslint-disable */
-// const cityData = [] ;
-
-// uni.request({
-// 	url: 'http://192.168.1.22:8107/personal/city',
-// 	data:{},
-// 	success(response){
-// 		console.log(JSON.stringify(response.data));
-// 		if(response.data.code == '1'){
-// 			cityData = response.data;
-// 		}
-// 	}
-// })
-
-// export default cityData;

+ 0 - 15
components/w-picker/city-data/province.js

@@ -1,15 +0,0 @@
-// /* eslint-disable */
-// const provinceData = [] ;
-
-// uni.request({
-// 	url: 'http://192.168.1.22:8107/personal/address',
-// 	data:{},
-// 	success(response){
-// 		console.log(JSON.stringify(response.data));
-// 		if(response.data.code == '1'){
-// 			provinceData = response.data;
-// 		}
-// 	}
-// })
-
-// export default provinceData;

+ 0 - 587
components/w-picker/w-picker.js

@@ -1,587 +0,0 @@
-const forMatNum=(num)=>{
-	return num<10?'0'+num:num+'';
-}
-const initPicker={
-	//日期
-	date:{
-		init(start,end,mode="date",step,value,flag,disabled){
-			let aToday=new Date();
-			let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
-			let initstartDate=new Date(start.toString());
-			let endDate=new Date(end.toString());
-			if(start>end){
-				initstartDate=new Date(end.toString());
-				endDate=new Date(start.toString());
-			};
-			let startYear=initstartDate.getFullYear();
-			let startMonth=initstartDate.getMonth()+1;
-			let endYear=endDate.getFullYear();
-			let years=[],months=[],days=[],hours=[],minutes=[],seconds=[],areas=[],returnArr=[];
-			let curMonth=flag?value[1]*1:(value[1]+1);
-			let dYear=aToday.getFullYear();
-			let dMonth=aToday.getMonth()+1;
-			let dDate=aToday.getDate();
-			let totalDays=new Date(startYear,curMonth,0).getDate();
-			let dvalObj={};
-			switch(mode){
-				case "half":
-				case "date":
-				case "yearMonth":
-					let curYear=value[0];
-					let curMonth=value[1];
-					if(disabled){
-						for(let s=startYear;s<=dYear;s++){
-							years.push(s+'');
-						};
-						if(curYear==dYear){
-							for(let m=1;m<=dMonth;m++){
-								months.push(forMatNum(m));
-							};
-						}else{
-							for(let m=1;m<=12;m++){
-								months.push(forMatNum(m));
-							};
-						}
-						if(curMonth==dMonth){
-							for(let d=1;d<=dDate;d++){
-								days.push(forMatNum(d));
-							}
-						}else{
-							for(let d=1;d<=totalDays;d++){
-								days.push(forMatNum(d));
-							}
-						}
-						
-					}else{
-						for(let s=startYear;s<=endYear;s++){
-							years.push(s+'');
-						};
-						for(let m=1;m<=12;m++){
-							months.push(forMatNum(m));
-						};
-						for(let d=1;d<=totalDays;d++){
-							days.push(forMatNum(d));
-						}
-					};
-					break;
-				default:
-					for(let s=startYear;s<=endYear;s++){
-						years.push(s+'');
-					};
-					for(let m=1;m<=12;m++){
-						months.push(forMatNum(m));
-					};
-					for(let d=1;d<=totalDays;d++){
-						days.push(forMatNum(d));
-					}
-					break;
-			}
-			for(let h=0;h<24;h++){
-				hours.push(forMatNum(h));
-			}
-			for(let m=0;m<60;m+=step*1){
-				minutes.push(forMatNum(m));
-			}
-			for(let s=0;s<60;s++){
-				seconds.push(forMatNum(s));
-			}
-			if(flag){
-				returnArr=[
-					years.indexOf(value[0]),
-					months.indexOf(value[1]),
-					days.indexOf(value[2]),
-					hours.indexOf(value[3]),
-					minutes.indexOf(value[4])==-1?0:minutes.indexOf(value[4]),
-					seconds.indexOf(value[5])
-				]
-			}
-			switch(mode){
-				case "range":
-					if(flag){
-						defaultVal=[returnArr[0],returnArr[1],returnArr[2],0,returnArr[0],returnArr[1],returnArr[2]];
-						return {years,months,days,defaultVal}
-					}else{
-						return {years,months,days}
-					}
-					break;
-				case "date":
-					if(flag){
-						defaultVal=[returnArr[0],returnArr[1],returnArr[2]];
-						return {years,months,days,defaultVal}
-					}else{
-						defaultVal=[
-							years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
-							months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
-							days.indexOf(value[2])==-1?0:days.indexOf(value[2])
-						];
-						return {years,months,days,defaultVal}
-					}
-					break;
-				case "half":
-					areas=[{
-						label:"上午",
-						value:0
-					},{
-						label:"下午",
-						value:1
-					}];
-					if(flag){
-						defaultVal=[returnArr[0],returnArr[1],returnArr[2],returnArr[3]];
-						return {years,months,days,areas,defaultVal}
-					}else{
-						let idx=0;
-						areas.map((v,k)=>{
-							if(v.label==value[3]){
-								idx=v.value;
-							}
-						})
-						defaultVal=[
-							years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
-							months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
-							days.indexOf(value[2])==-1?0:days.indexOf(value[2]),
-							idx
-						];
-						return {years,months,days,areas,defaultVal}
-					}
-					break;	
-				case "yearMonth":
-					if(flag){
-						defaultVal=[returnArr[0],returnArr[1]];
-						return {years,months,defaultVal}
-					}else{
-						defaultVal=[
-							years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
-							months.indexOf(value[1])==-1?0:months.indexOf(value[1])
-						];
-						return {years,months,defaultVal}
-					}
-					break;
-				case "dateTime":
-					if(flag){
-						defaultVal=returnArr;
-					}else{
-						defaultVal=[
-							years.indexOf(value[0])==-1?0:years.indexOf(value[0]),
-							months.indexOf(value[1])==-1?0:months.indexOf(value[1]),
-							days.indexOf(value[2])==-1?0:days.indexOf(value[2]),
-							hours.indexOf(value[3])==-1?0:hours.indexOf(value[3]),
-							minutes.indexOf(value[4])==-1?0:minutes.indexOf(value[4]),
-							seconds.indexOf(value[5])==-1?0:seconds.indexOf(value[5])
-						];
-					}
-					return {years,months,days,hours,minutes,seconds,defaultVal}
-					break;
-				case "time":
-					if(flag){
-						defaultVal=[returnArr[3],returnArr[4],returnArr[5]];
-					}else{
-						defaultVal=[
-							hours.indexOf(value[0])==-1?0:hours.indexOf(value[0]),
-							minutes.indexOf(value[1])==-1?0:minutes.indexOf(value[1]),
-							seconds.indexOf(value[2])==-1?0:seconds.indexOf(value[2])
-						];
-					}
-					return {hours,minutes,seconds,defaultVal}
-					break;			
-			}
-		},
-		initMonths:(year,disabled)=>{
-			let aDate=new Date();
-			let dYear=aDate.getFullYear();
-			let dMonth=aDate.getMonth()+1;
-			let dDate=aDate.getDate();
-			let flag=dYear==year?true:false;
-			let months=[];
-			if(disabled){
-				if(flag){
-					for(let m=1;m<=dMonth;m++){
-						months.push(forMatNum(m));
-					};	
-				}else{
-					for(let m=1;m<=12;m++){
-						months.push(forMatNum(m));
-					};	
-				}
-			}else{
-				for(let m=1;m<=12;m++){
-					months.push(forMatNum(m));
-				};
-			};
-			return months;
-		},
-		initDays:(year,month,disabled)=>{
-			let aDate=new Date();
-			let dYear=aDate.getFullYear();
-			let dMonth=aDate.getMonth()+1;
-			let dDate=aDate.getDate();
-			let flag=(dYear==year&&dMonth==month)?true:false;
-			let totalDays=new Date(year,month,0).getDate();
-			let dates=[];
-			if(flag&&disabled){
-				for(let d=1;d<=dDate;d++){
-					dates.push(forMatNum(d));
-				};			
-			}else{
-				for(let d=1;d<=totalDays;d++){
-					dates.push(forMatNum(d));
-				};
-			};
-			return dates;
-		},
-	},
-	//短期日期上下午
-	limitHour:{
-		init(dayStep=7,dVal){
-			let startDate=new Date();
-			let date=[],areas=[],hours=[];
-			let hour=new Date().getHours();
-			let weeks=["周日","周一","周二","周三","周四","周五","周六"];
-			let arrs=[];
-			let defaultVal=[];
-			let d=0,a=0,h=0;
-			for(let i=0;i<dayStep;i++){
-				let year,month,day,weekday;
-				year=startDate.getFullYear();
-				month=forMatNum(startDate.getMonth()+1);
-				day=forMatNum(startDate.getDate());
-				weekday=weeks[startDate.getDay()];
-				let label="";
-				switch(i){
-					case 0:
-						label="今天";
-						break;
-					case 1:
-						label="明天"
-						break;
-					case 2:
-						label="后天"
-						break;
-					default:
-						label=month+"月"+day+"日"+" "+weekday;
-						break;
-				}
-				date.push({
-					label:label,
-					value:year+"-"+month+"-"+day,
-					today:i==0?true:false
-				})
-				startDate.setDate(startDate.getDate()+1);
-			}
-			if(hour>12){
-				areas=[{
-					label:"下午",
-					value:1
-				}]
-			}else{
-				areas=[{
-					label:"上午",
-					value:0
-				},{
-					label:"下午",
-					value:1
-				}]
-			};
-			for(let k=hour>12?hour-12:hour;k<=12;k++){
-				hours.push({
-					label:forMatNum(k),
-					value:forMatNum(hour>12?k+12:k)
-				})
-			};
-			date.map((v,k)=>{
-				if(v.label==dVal[0]){
-					d=k
-				}
-			})
-			if(d!=0){
-				areas=this.initAreas(date[d]);
-				hours=this.initHours(date[d],areas[a]);
-			}
-			areas.map((v,k)=>{
-				if(v.label==dVal[1]){
-					a=k
-				}
-			})
-			hours.map((v,k)=>{
-				if(v.label==dVal[2]){
-					h=k
-				}
-			});
-			defaultVal=[d,a,h]
-			return {date,areas,hours,defaultVal};
-		},
-		initAreas(date){
-			let areas=[];
-			let hour=new Date().getHours();
-			if(date.today){
-				if(hour>12){
-					areas=[{
-						label:"下午",
-						value:1
-					}]
-				}else{
-					areas=[{
-						label:"上午",
-						value:0
-					},{
-						label:"下午",
-						value:1
-					}]
-				};
-			}else{
-				areas=[{
-					label:"上午",
-					value:0
-				},{
-					label:"下午",
-					value:1
-				}]
-			}
-			return areas;
-		},
-		initHours(dateCol,hourCol){
-			let hours=[];
-			let hour=new Date().getHours();
-			if(dateCol.today){
-				if(hourCol.value==1&&hour<=12){
-					for(let k=1;k<=12;k++){
-						hours.push({
-							label:forMatNum(k),
-							value:forMatNum(hourCol.value==1?k+12:k)
-						})
-					};
-				}else{
-					for(let k=hour>12?hour-12:hour;k<=12;k++){
-						hours.push({
-							label:forMatNum(k),
-							value:forMatNum(hourCol.value==1?k+12:k)
-						})
-					};
-				}
-				
-			}else{
-				for(let k=1;k<=12;k++){
-					hours.push({
-						label:forMatNum(k),
-						value:forMatNum(hourCol.value==1?k+12:k)
-					})
-				};
-			};
-			return hours
-		}
-	},
-	//短期日期时间初始化
-	limit:{
-		init(dayStep=7,startHour=8,endHour=20,minuteStep=1,afterStep=30,dVal){
-			let startDate=new Date();
-			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
-			let date=[],hours=[],minutes=[];
-			let hour=bsDate.getHours();
-			let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
-			let weeks=["周日","周一","周二","周三","周四","周五","周六"];
-			let d=0,h=0,m=0;
-			let defaultVal=[];
-			for(let i=0;i<dayStep;i++){
-				let year,month,day,weekday;
-				year=startDate.getFullYear();
-				month=forMatNum(startDate.getMonth()+1);
-				day=forMatNum(startDate.getDate());
-				weekday=weeks[startDate.getDay()];
-				let label="";
-				switch(i){
-					case 0:
-						label="今天";
-						break;
-					case 1:
-						label="明天"
-						break;
-					case 2:
-						label="后天"
-						break;
-					default:
-						label=month+"月"+day+"日"+" "+weekday;
-						break;
-				}
-				date.push({
-					label:label,
-					value:year+"-"+month+"-"+day,
-					flag:i==0?true:false
-				})
-				startDate.setDate(startDate.getDate()+1);
-			}
-			if(hour<startHour){
-				hour=startHour;
-			};
-			if(hour>endHour){
-				hour=endHour;
-			};
-			for(let k=hour*1;k<=endHour*1;k++){
-				hours.push({
-					label:forMatNum(k),
-					value:forMatNum(k),
-					flag:k==hour?true:false
-				})
-			};
-			for(let j=minute;j<60;j+=minuteStep*1){
-				minutes.push({
-					label:forMatNum(j),
-					value:forMatNum(j)
-				});
-			}
-			date.map((v,k)=>{
-				if(v.label==dVal[0]){
-					d=k
-				}
-			})
-			if(d!=0){
-				hours=this.initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date[d].value);
-			}
-			hours.map((v,k)=>{
-				if(v.label==dVal[1]){
-					h=k
-				}
-			})
-			minutes.map((v,k)=>{
-				if(v.label==dVal[2]){
-					m=k
-				}
-			})
-			defaultVal=[d,h,m];
-			return {date,hours,minutes,defaultVal};
-		},
-		initHours(startHour=8,endHour=20,minuteStep=1,afterStep=30,date){
-			let hours=[];
-			let arr=date.split("-");
-			let aDate=new Date();
-			let dYear=aDate.getFullYear();
-			let dMonth=aDate.getMonth()+1;
-			let dDate=aDate.getDate();
-			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
-			let hour=bsDate.getHours();
-			let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
-			if(hour>endHour){
-				hour=endHour;
-			};
-			if(flag){
-				for(let k=hour*1;k<=endHour*1;k++){
-					hours.push({
-						label:forMatNum(k),
-						value:forMatNum(k),
-						flag:k==hour?true:false
-					})
-				};			
-			}else{
-				for(let k=startHour*1;k<=endHour*1;k++){
-					hours.push({
-						label:forMatNum(k),
-						value:forMatNum(k),
-						flag:false
-					})
-				}			
-			};
-			return hours;
-		},
-		initMinutes(startHour=8,endHour=20,minuteStep=1,afterStep=30,date,hour){
-			let minutes=[];
-			let bsDate=new Date(new Date().getTime()+afterStep*60*1000);
-			let arr=date.split("-");
-			let aDate=new Date();
-			let dYear=aDate.getFullYear();
-			let dMonth=aDate.getMonth()+1;
-			let dDate=aDate.getDate();
-			let dHour=bsDate.getHours();;
-			let minute=Math.floor(bsDate.getMinutes()/minuteStep)*minuteStep;
-			let flag=(dYear==arr[0]&&dMonth==arr[1]&&dDate==arr[2])?true:false;
-			if(flag){
-				if(hour==dHour){
-					for(let j=minute;j<60;j+=minuteStep*1){
-						minutes.push({
-							label:forMatNum(j),
-							value:forMatNum(j)
-						});
-					}	
-				}else{
-					for(let j=0;j<60;j+=minuteStep*1){
-						minutes.push({
-							label:forMatNum(j),
-							value:forMatNum(j)
-						})
-					}
-				}
-						
-			}else{
-				for(let j=0;j<60;j+=minuteStep*1){
-					minutes.push({
-						label:forMatNum(j),
-						value:forMatNum(j)
-					})
-				}			
-			}
-			return minutes;
-		}
-	},
-	//选择区间初始化
-	range:{
-		init(start,end,value,flag){
-			let aToday=new Date();
-			let tYear,tMonth,tDay,tHours,tMinutes,tSeconds,defaultVal=[];
-			let initstartDate=new Date(start.toString());
-			let endDate=new Date(end.toString());
-			if(start>end){
-				initstartDate=new Date(end.toString());
-				endDate=new Date(start.toString());
-			};
-			let startYear=initstartDate.getFullYear();
-			let startMonth=initstartDate.getMonth()+1;
-			let endYear=endDate.getFullYear();
-			let fyears=[],fmonths=[],fdays=[],tyears=[],tmonths=[],tdays=[],returnArr=[];
-			let curMonth=flag?value[1]*1:(value[1]+1);
-			let totalDays=new Date(startYear,curMonth,0).getDate();
-			for(let s=startYear;s<=endYear;s++){
-				fyears.push(s+'');
-			};
-			for(let m=1;m<=12;m++){
-				fmonths.push(forMatNum(m));
-			};
-			for(let d=1;d<=totalDays;d++){
-				fdays.push(forMatNum(d));
-			};
-			for(let s=startYear;s<=endYear;s++){
-				tyears.push(s+'');
-			};
-			for(let m=1;m<=12;m++){
-				tmonths.push(forMatNum(m));
-			};
-			for(let d=1;d<=totalDays;d++){
-				tdays.push(forMatNum(d));
-			};
-			defaultVal=[
-				fyears.indexOf(value[0])==-1?0:fyears.indexOf(value[0]),
-				fmonths.indexOf(value[1])==-1?0:fmonths.indexOf(value[1]),
-				fdays.indexOf(value[2])==-1?0:fdays.indexOf(value[2]),
-				0,
-				tyears.indexOf(value[4])==-1?0:tyears.indexOf(value[4]),
-				tmonths.indexOf(value[5])==-1?0:tmonths.indexOf(value[5]),
-				tdays.indexOf(value[6])==-1?0:tdays.indexOf(value[6])
-			];
-			return {
-				fyears,
-				fmonths,
-				fdays,
-				tyears,
-				tmonths,
-				tdays,
-				defaultVal
-			}
-		},
-		initDays(year,month){
-			let totalDays=new Date(year,month,0).getDate();
-			let dates=[];
-			for(let d=1;d<=totalDays;d++){
-				dates.push(forMatNum(d));
-			};
-			return dates;
-		}
-	}
-}
-
-export default initPicker

+ 0 - 992
components/w-picker/w-picker.vue

@@ -1,992 +0,0 @@
-<template>
-	<view class="w-picker">
-		<view class="mask" :class="{'show':showPicker}" @tap="maskTap" @touchmove.stop.prevent catchtouchmove="true"></view>
-		<view class="w-picker-cnt" :class="{'show':showPicker}">
-			<view class="w-picker-hd" @touchmove.stop.prevent catchtouchmove="true">
-			  <view class="w-picker-btn" @tap="pickerCancel">取消</view>
-			  <view class="w-picker-btn" :style="{'color':themeColor}" @tap="pickerConfirm">确定</view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='linkage'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column v-for="(col,colIndex) in data" :key="colIndex">
-						<view class="w-picker-item" v-for="(item,index) in col" :key="index">{{item.label}}</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='half'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.areas" :key="index">{{item.label}}</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='date'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='yearMonth'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='dateTime'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.years" :key="index">{{item}}年</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.months" :key="index">{{item}}月</view>
-					</picker-view-column>
-					<picker-view-column >
-						<view class="w-picker-item" v-for="(item,index) in data.days" :key="index">{{item}}日</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item}}时</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item}}分</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.seconds" :key="index">{{item}}秒</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='range'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.fyears" :key="index">{{item}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.fmonths" :key="index">{{item}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.fdays" :key="index">{{item}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item">-</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.tyears" :key="index">{{item}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.tmonths" :key="index">{{item}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.tdays" :key="index">{{item}}</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='time'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item}}时</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item}}分</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.seconds" :key="index">{{item}}秒</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='region'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.provinces" :key="index">{{item.label}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.citys" :key="index">{{item.label}}</view>
-					</picker-view-column>
-					<picker-view-column v-if="!hideArea">
-						<view class="w-picker-item" v-for="(item,index) in data.areas" :key="index">{{item.label}}</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='selector'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data" :key="index">{{item.label}}</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='limit'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.date" :key="index">{{item.label}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item.label}}时</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.minutes" :key="index">{{item.label}}分</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-			<view class="w-picker-view" v-if="mode=='limitHour'">
-				<picker-view :indicator-style="itemHeight" :value="pickVal" @change="bindChange">
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.date" :key="index">{{item.label}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.areas" :key="index">{{item.label}}</view>
-					</picker-view-column>
-					<picker-view-column>
-						<view class="w-picker-item" v-for="(item,index) in data.hours" :key="index">{{item.label}}时</view>
-					</picker-view-column>
-				</picker-view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import provinces from './city-data/province.js';
-	import citys from './city-data/city.js';
-	import areas from './city-data/area.js';
-	import initPicker from "./w-picker.js";
-	function oneOf (value, validList) {
-		for (let i = 0; i < validList.length; i++) {
-		  if (value === validList[i]) {
-			return true;
-		  }
-		}
-		throw new Error('mode无效,请选择有效的mode!');
-		return false;
-	}
-	export default {
-		data() {
-			return {
-				result:[],
-				data:{},
-				checkArr:[],
-				checkValue:[],
-				pickVal:[],
-				showPicker:false,
-				resultStr:"",
-				itemHeight:`height: ${uni.upx2px(88)}px;`
-			};
-		},
-		computed:{
-			
-		},
-		props:{
-			mode:{
-				type:String,
-				validator(mode){
-					let modeList=['half','date', 'dateTime', 'yearMonth','time','region','selector','limit','limitHour','range','linkage'];//过滤无效mode;
-					return oneOf(mode,modeList);
-				},
-				default(){
-					return "date"
-				}
-			},
-			themeColor:{
-				type:String,
-				default(){
-					return "#f5a200"
-				}
-			},
-			startYear:{
-				type:[String,Number],
-				default(){
-					return "1970"
-				}
-			},
-			endYear:{
-				type:[String,Number],
-				default(){
-					return new Date().getFullYear()+''
-				}
-			},
-			defaultVal:{
-				type:Array,
-				default(){
-					return [0,0,0,0,0,0,0]
-				}
-			},
-			areaCode:{
-				type:Array,
-				default(){
-					return null
-				}
-			},
-			hideArea:{//隐藏省市区三级联动   地区列
-				type:Boolean,
-				default:false
-			},
-			step:{
-				type:[String,Number],
-				default:1
-			},
-			current:{
-				type:Boolean,
-				default:false
-			},
-			selectList:{
-				type:Array,
-				default(){
-					return [];
-				}
-			},
-			//以下参数仅对mode==limit有效
-			dayStep:{
-				type:[String,Number],
-				default:7
-			},
-			startHour:{
-				type:[String,Number],
-				default:8
-			},
-			endHour:{
-				type:[String,Number],
-				default:20
-			},
-			minuteStep:{
-				type:[String,Number],
-				default:10
-			},
-			afterStep:{
-				type:[String,Number],
-				default:30
-			},
-			disabledAfter:{
-				type:Boolean,
-				default:false
-			},
-			linkList:{
-				type:Array,
-				default(){
-					return []
-				}
-			},
-			value:{
-				type:Array,
-				default(){
-					return null
-				}
-			},
-			level:{
-				type:[Number,String],
-				default:2
-			}
-		},
-		watch:{
-			mode(){
-				this.initData();
-			},
-			selectList(){
-				this.initData();
-			},
-			linkList(){
-				this.initData();
-			}
-		},
-		methods:{
-			getLinkageVal(value,flag){
-				let dval=[];
-				let arr=value;
-				let list=this.linkList;
-				let lev=this.level;
-				let k=0;
-				let checkArr=[];
-				let checkValue=[];
-				let resultStr="";
-				let data=[];
-				switch(lev){
-					case 2:
-						dval=[0,0];
-						break;
-					case 3:
-						dval=[0,0,0];
-						break;
-				}
-				const getData=(obj,key,str)=>{
-					if(key<lev){
-						data.push(obj);
-						if(arr.length==7){
-							let item=obj[0];
-							checkArr.push(item.label);
-							checkValue.push(item.value);
-							resultStr+=item.label;
-							if(item.children){
-								getData(item.children,key+=1);
-							}
-						}else{
-							obj.map((v,j)=>{
-								if(flag?v.value==arr[key]:v.label==arr[key]){
-									dval[key]=j;
-									checkArr.push(v.label);
-									checkValue.push(v.value);
-									resultStr+=v.label;
-									if(v.children){
-										getData(v.children,key+=1);
-									}
-								}
-							});
-						}
-						return {
-							data,
-							dval,
-							checkArr,
-							checkValue,
-							resultStr
-						};
-					}else{
-						return false;
-					}
-				};
-				return getData(list,k);
-			},
-			getRegionVal(value,useCode){
-				let province=value[0];
-				let city=value[1];
-				let a=0,b=0,c=0,dval=[];
-				let _this=this;
-				provinces.map((v,k)=>{
-					if(useCode?v.value==province:v.label==province){
-						a=k;
-					}
-				})
-				citys[a].map((v,k)=>{
-					if(useCode?v.value==city:v.label==city){
-						b=k;
-					}
-				})
-				if(!_this.hideArea){
-					let area=value[2];
-					areas[a][b].map((v,k)=>{
-						if(useCode?v.value==area:v.label==area){
-							c=k;
-						}
-					})
-					dval=[a,b,c];
-				}else{
-					dval=[a,b];
-				}
-				return dval;
-			},
-			useCurrent(){
-				let aToday=new Date();
-				let tYear=aToday.getFullYear().toString();
-				let tMonth=this.formatNum(aToday.getMonth()+1).toString();
-				let tDay=this.formatNum(aToday.getDate()).toString();
-				let tHours=this.formatNum(aToday.getHours()).toString();
-				let tMinutes=this.formatNum(aToday.getMinutes()).toString();
-				let tSeconds=this.formatNum(aToday.getSeconds()).toString();
-				if(this.current){
-					return [tYear,tMonth,tDay,tHours,(Math.floor(tMinutes/this.step)*this.step).toString(),tSeconds];
-				}else{
-					return this.defaultVal;
-				}
-			},
-			formatNum(num){
-				return num<10?'0'+num:num+'';
-			},
-			maskTap(){
-				this.showPicker = false;
-			},
-			show(){
-				this.showPicker = true;
-			},
-			hide(){
-				this.showPicker = false;
-			},
-			pickerCancel(){
-				this.$emit("cancel",{
-					checkArr:this.checkArr,
-					defaultVal:this.pickVal
-				});
-				this.showPicker = false;
-			},
-			pickerConfirm(e){
-				switch(this.mode){
-					case "range":
-						let checkArr=this.checkArr;
-						let fDateTime=new Date(checkArr[0],checkArr[1],checkArr[2]);
-						let tDateTime=new Date(checkArr[3],checkArr[4],checkArr[5]);
-						let dVal=this.pickVal;
-						if(fDateTime>tDateTime){
-							this.checkArr=[checkArr[3],checkArr[4],checkArr[5],checkArr[0],checkArr[1],checkArr[2]];
-							this.pickVal=[dVal[4],dVal[5],dVal[6],0,dVal[0],dVal[1],dVal[2]];
-							this.$emit("confirm",{
-								checkArr:this.checkArr,
-								from:checkArr[3]+"-"+checkArr[4]+"-"+checkArr[5],
-								to:checkArr[0]+"-"+checkArr[1]+"-"+checkArr[2],
-								defaultVal:this.pickVal,
-								result:this.resultStr
-							});
-						}else{
-							this.$emit("confirm",{
-								checkArr:this.checkArr,
-								from:checkArr[0]+"-"+checkArr[1]+"-"+checkArr[2],
-								to:checkArr[3]+"-"+checkArr[4]+"-"+checkArr[5],
-								defaultVal:this.pickVal,
-								result:this.resultStr
-							});
-						}
-						break;
-					case "limit":
-						let aTime=new Date().getTime();
-						let bTime=new Date(this.resultStr.replace(/-/g,'/')).getTime();
-						if(aTime>bTime){
-							uni.showModal({
-								title:"提示",
-								content:"选择时间必须大于当前时间",
-								confirmColor:this.themeColor
-							});
-							return;
-						}
-						this.$emit("confirm",{
-							checkArr:this.checkArr,
-							defaultVal:this.pickVal,
-							result:this.resultStr
-						});
-						break;
-					case "region":
-					case "linkage":
-						this.$emit("confirm",{
-							checkArr:this.checkArr,
-							checkValue:this.checkValue,
-							defaultVal:this.pickVal,
-							result:this.resultStr
-						});
-						break;
-					default:
-						this.$emit("confirm",{
-							checkArr:this.checkArr,
-							defaultVal:this.pickVal,
-							result:this.resultStr
-						});
-						break;
-				}
-				this.showPicker = false;
-			},
-			bindChange(val){
-				let _this=this;
-				let arr=val.detail.value;
-				let year="",month="",day="",hour="",minute="",second="",note=[],province,city,area;
-				let checkArr=_this.checkArr;
-				let days=[];
-				let months=[];
-				let mode=_this.mode;
-				let col1,col2,col3,d,a,h,m;
-				let xDate=new Date().getTime();
-				switch(mode){
-					case "limitHour":
-						col1=_this.data.date[arr[0]];
-						col2=_this.data.areas[arr[1]];
-						col3=_this.data.hours[arr[2]];
-						if(col1.value!=checkArr[0].value){
-							arr[1]=0;
-							arr[2]=0;
-							let areas=initPicker.limitHour.initAreas(col1);
-							_this.data.areas=areas;
-							let hours=initPicker.limitHour.initHours(col1,_this.data.areas[arr[1]]);
-							_this.data.hours=hours;
-						};
-						if(col2.value!=checkArr[1].value){
-							arr[2]=0;
-							let hours=initPicker.limitHour.initHours(col1,_this.data.areas[arr[1]]);
-							_this.data.hours=hours;
-						};
-						d=_this.data.date[arr[0]]||_this.data.date[_this.data.date.length-1];
-						a=_this.data.areas[arr[1]]||_this.data.areas[_this.data.areas.length-1];
-						h=_this.data.hours[arr[2]]||_this.data.hours[_this.data.hours.length-1];
-						_this.checkArr=[d,a,h];
-						_this.resultStr=`${d.value+' '+a.label+' '+h.label+"时"}`;
-						break;
-					case "limit":
-						col1=_this.data.date[arr[0]];
-						col2=_this.data.hours[arr[1]];
-						if(col1.value!=checkArr[0].value){
-							let hours=initPicker.limit.initHours(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value);
-							let minutes=initPicker.limit.initMinutes(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value,col2.value);
-							_this.data.hours=hours;
-							_this.data.minutes=minutes;
-						};
-						if(col2.value!=checkArr[1].value){
-							let minutes=initPicker.limit.initMinutes(_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,col1.value,col2.value);
-							_this.data.minutes=minutes;
-						};
-						d=_this.data.date[arr[0]]||_this.data.date[_this.data.date.length-1];
-						h=_this.data.hours[arr[1]]||_this.data.hours[_this.data.hours.length-1];
-						m=_this.data.minutes[arr[2]]||_this.data.minutes[_this.data.minutes.length-1];
-						_this.checkArr=[d,h,m];
-						_this.resultStr=`${d.value+' '+h.value+':'+m.value+":"+"00"}`;
-						break;
-					case "range":
-						let fyear=_this.data.fyears[arr[0]]||_this.data.fyears[_this.data.fyears.length-1];
-						let fmonth=_this.data.fmonths[arr[1]]||_this.data.fmonths[_this.data.fmonths.length-1];
-						let fday=_this.data.fdays[arr[2]]||_this.data.fdays[_this.data.fdays.length-1];
-						let tyear=_this.data.tyears[arr[4]]||_this.data.tyears[_this.data.tyears.length-1];
-						let tmonth=_this.data.tmonths[arr[5]]||_this.data.tmonths[_this.data.tmonths.length-1];
-						let tday=_this.data.tdays[arr[6]]||_this.data.tdays[_this.data.tdays.length-1];
-						if(fyear!=checkArr[0]){
-							days=initPicker.range.initDays(fyear,fmonth);
-							_this.data.fdays=days;
-						};
-						if(fmonth!=checkArr[1]){
-							days=initPicker.range.initDays(fyear,fmonth);
-							_this.data.fdays=days;
-						};
-						if(tyear!=checkArr[3]){
-							days=initPicker.range.initDays(tyear,tmonth);
-							_this.data.tdays=days;
-						};
-						if(tmonth!=checkArr[4]){
-							days=initPicker.range.initDays(tyear,tmonth);
-							_this.data.tdays=days;
-						};
-						_this.checkArr=[fyear,fmonth,fday,tyear,tmonth,tday];
-						_this.resultStr=`${fyear+'-'+fmonth+'-'+fday+'至'+tyear+'-'+tmonth+'-'+tday}`;
-						break;
-					case "half":
-						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
-						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-						area=_this.data.areas[arr[3]]||_this.data.areas[_this.data.areas.length-1];
-						if(year!=checkArr[0]){
-							months=initPicker.date.initMonths(year,_this.disabledAfter);
-							days=initPicker.date.initDays(year,month,_this.disabledAfter);
-							if(_this.disabledAfter){
-								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
-								arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
-								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-								day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							}
-							_this.data.days=days;
-							_this.data.months=months;
-						};
-						if(month!=checkArr[1]){
-							days=initPicker.date.initDays(year,month,_this.disabledAfter);
-							arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
-							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							_this.data.days=days;
-						};
-						_this.checkArr=[year,month,day,area];
-						_this.resultStr=`${year+'-'+month+'-'+day+area.label}`;
-						break;		
-					case "date":
-						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
-						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-						if(year!=checkArr[0]){
-							months=initPicker.date.initMonths(year,_this.disabledAfter);
-							days=initPicker.date.initDays(year,month,_this.disabledAfter);
-							if(_this.disabledAfter){
-								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
-								arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
-								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-								day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							}
-							_this.data.days=days;
-							_this.data.months=months;
-						};
-						if(month!=checkArr[1]){
-							days=initPicker.date.initDays(year,month,_this.disabledAfter);
-							arr[2]=arr[2]>(days.length-1)?days.length-1:arr[2];
-							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							_this.data.days=days;
-						};
-						_this.checkArr=[year,month,day];
-						_this.resultStr=`${year+'-'+month+'-'+day}`;
-						break;
-					case "yearMonth":
-						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
-						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-						if(year!=checkArr[0]){
-							if(_this.disabledAfter){
-								arr[1]=arr[1]>(months.length-1)?months.length-1:arr[1];
-								month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-							}
-							months=initPicker.date.initMonths(year,_this.disabledAfter);
-							_this.data.months=months;
-						};
-						_this.checkArr=[year,month];
-						_this.resultStr=`${year+'-'+month}`;
-						break;
-					case "dateTime":
-						year=_this.data.years[arr[0]]||_this.data.years[_this.data.years.length-1];
-						month=_this.data.months[arr[1]]||_this.data.months[_this.data.months.length-1];
-						day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-						hour=_this.data.hours[arr[3]]||_this.data.hours[_this.data.hours.length-1];
-						minute=_this.data.minutes[arr[4]]||_this.data.minutes[_this.data.minutes.length-1];
-						second=_this.data.seconds[arr[5]]||_this.data.seconds[_this.data.seconds.length-1];
-						if(year!=checkArr[0]){
-							arr[2]=0;
-							days=initPicker.date.initDays(year,month);
-							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							_this.data.days=days;
-						};
-						if(month!=checkArr[1]){
-							arr[2]=0;
-							days=initPicker.date.initDays(year,month);
-							day=_this.data.days[arr[2]]||_this.data.days[_this.data.days.length-1];
-							_this.data.days=days;
-						};
-						_this.checkArr=[year,month,day,hour,minute,second];
-						_this.resultStr=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
-						break;
-					case "time":
-						hour=_this.data.hours[arr[0]]||_this.data.hours[_this.data.hours.length-1];
-						minute=_this.data.minutes[arr[1]]||_this.data.minutes[_this.data.minutes.length-1];
-						second=_this.data.seconds[arr[2]]||_this.data.seconds[_this.data.seconds.length-1];
-						_this.checkArr=[hour,minute,second];
-						_this.resultStr=`${hour+':'+minute+':'+second}`;
-						break;
-					case "linkage":
-						let c1,c2,c3;
-						let list=this.linkList;
-						c1=_this.data[0][arr[0]]||_this.data[0][0];
-						c2=_this.data[1][arr[1]]||_this.data[1][0];
-						if(this.level==3){
-							c3=_this.data[2][arr[2]]||_this.data[2][0];
-							if(c1.label!=checkArr[0]){
-								arr[1] = 0;
-								arr[2] = 0;
-								_this.data[1]=list[arr[0]].children;
-								_this.data[2]=list[arr[0]].children[arr[1]].children;
-								c2=_this.data[1][arr[1]]||_this.data[1][0];
-								c3=_this.data[2][arr[2]]||_this.data[2][0];
-							};
-							if(c2.label!=checkArr[1]){
-								arr[2] = 0;
-								_this.data[2]=list[arr[0]].children[arr[1]].children;
-								c3=_this.data[2][arr[2]]||_this.data[2][0];
-							};
-							_this.checkArr=[c1.label,c2.label,c3.label];
-							_this.checkValue=[
-								_this.data[0][arr[0]]?_this.data[0][arr[0]].value:_this.data[0][0].value,
-								_this.data[1][arr[1]]?_this.data[1][arr[1]].value:_this.data[1][0].value,
-								_this.data[2][arr[2]]?_this.data[2][arr[2]].value:_this.data[2][0].value
-							];
-							_this.resultStr=c1.label+c2.label+c3.label;
-						}else{
-							if(c1.label!=checkArr[0]){
-								_this.data[1]=list[arr[0]].children;
-								arr[1] = 0;
-								c2=_this.data[1][arr[1]]||_this.data[1][0];
-							};
-							_this.checkArr=[c1.label,c2.label];
-							_this.checkValue=[
-								_this.data[0][arr[0]]?_this.data[0][arr[0]].value:_this.data[0][0].value,
-								_this.data[1][arr[1]]?_this.data[1][arr[1]].value:_this.data[1][0].value
-							];
-							_this.resultStr=c1.label+c2.label;
-						}
-						break;
-					case "region":
-						province=_this.data.provinces[arr[0]]||_this.data.provinces[0];
-						city=_this.data.citys[arr[1]]||_this.data.citys[0];
-						if(!_this.hideArea){
-							area=_this.data.areas[arr[2]]||_this.data.areas[0];
-						}
-						
-						if(province.label!=checkArr[0]){
-							_this.data.citys = citys[arr[0]]||citys[0];
-							if(!_this.hideArea){
-								_this.data.areas = areas[arr[0]][0]||areas[0][0];
-							}
-							arr[1] = 0;
-							arr[2] = 0;
-							city=_this.data.citys[arr[1]]||_this.data.citys[0];
-							if(!_this.hideArea){
-								area=_this.data.areas[arr[2]]||_this.data.areas[0];
-							}
-						};
-						if(city.label!=checkArr[1]&&!_this.hideArea){
-							_this.data.areas = areas[arr[0]][arr[1]]||areas[0][0];
-							arr[2]=0;
-							area=_this.data.areas[arr[2]]||_this.data.areas[0];
-						};
-						if(!_this.hideArea){
-							_this.checkArr=[province.label,city.label,area.label];
-							_this.checkValue=[
-								_this.data.provinces[arr[0]]?_this.data.provinces[arr[0]].value:_this.data.provinces[0].value,
-								_this.data.citys[arr[1]]?_this.data.citys[arr[1]].value:_this.data.citys[0].value,
-								_this.data.areas[arr[2]]?_this.data.areas[arr[2]].value:_this.data.areas[0].value
-							];
-							_this.resultStr=province.label+city.label+area.label;
-						}else{
-							_this.checkArr=[province.label,city.label];
-							_this.checkValue=[
-								_this.data.provinces[arr[0]]?_this.data.provinces[arr[0]].value:_this.data.provinces[0].value,
-								_this.data.citys[arr[1]]?_this.data.citys[arr[1]].value:_this.data.citys[0].value
-							];
-							_this.resultStr=province.label+city.label;
-						};
-						break;
-					case "selector":
-						_this.checkArr=_this.data[arr[0]]||_this.data[_this.data.length-1];
-						_this.resultStr=_this.data[arr[0]]?_this.data[arr[0]].label:_this.data[_this.data.length-1].label;
-						break;	
-				}
-				_this.$nextTick(()=>{
-					_this.pickVal=arr;
-				})
-			},
-			initData(){
-				let _this=this;
-				let data={};
-				let mode=_this.mode;
-				let year,month,day,hour,minute,second,province,city,area;
-				let col1,col2,col3;
-				let dVal=[];
-				switch(mode){
-					case "linkage":
-						let init;
-						if(_this.value){
-							init=_this.getLinkageVal(_this.value,true);
-						}else{
-							init=_this.getLinkageVal(_this.defaultVal);
-						}
-						dVal=init.dval;
-						data=init.data;
-						_this.checkArr=init.checkArr;
-						_this.checkValue=init.checkValue;
-						_this.resultStr=init.resultStr;
-						break;
-					case "region":
-						if(_this.areaCode){
-							dVal=_this.getRegionVal(_this.areaCode,true);
-						}else{
-							dVal=_this.getRegionVal(_this.defaultVal);
-						}
-						if(_this.hideArea){
-							data={
-								provinces:provinces,
-								citys:citys[dVal[0]]
-							};
-						}else{
-							data={
-								provinces:provinces,
-								citys:citys[dVal[0]],
-								areas:areas[dVal[0]][dVal[1]]
-							};
-						};
-						break;
-					case "selector":
-						let idx=0;
-						data=_this.selectList;
-						_this.selectList.map((v,k)=>{
-							if(v.label==this.defaultVal[0]){
-								idx=k;
-							}
-						})
-						dVal=[idx];
-						break;
-					case "limit":
-						data=initPicker.limit.init(_this.dayStep,_this.startHour,_this.endHour,_this.minuteStep,_this.afterStep,this.defaultVal);
-						dVal=data.defaultVal||_this.defaultVal;
-						break;
-					case "limitHour":
-						data=initPicker.limitHour.init(_this.dayStep,this.defaultVal);
-						dVal=data.defaultVal||_this.defaultVal;
-						break;	
-					case "range":
-						data=initPicker.range.init(_this.startYear,_this.endYear,_this.useCurrent(),_this.current);
-						dVal=data.defaultVal||_this.defaultVal;
-						break;
-					default:
-						data=initPicker.date.init(_this.startYear,_this.endYear,_this.mode,_this.step,_this.useCurrent(),_this.current,_this.disabledAfter);
-						dVal=data.defaultVal||_this.defaultVal;
-						break;
-				}
-				_this.data=data;
-				switch(mode){
-					case "limitHour":
-						col1=data.date[dVal[0]]||data.date[data.date.length-1];
-						col2=data.areas[dVal[2]]||data.areas[data.areas.length-1];
-						col3=data.hours[dVal[1]]||data.hours[data.hours.length-1];
-						_this.checkArr=[col1,col2,col3];
-						_this.resultStr=`${col1.value+' '+col2.label+' '+col3.label+'时'}`;
-						break;
-					case "limit":
-						col1=data.date[dVal[0]]||data.date[data.date.length-1];
-						col2=data.hours[dVal[1]]||data.hours[data.hours.length-1];
-						col3=data.minutes[dVal[2]]||data.minutes[data.minutes.length-1];
-						_this.checkArr=[col1,col2,col3];
-						_this.resultStr=`${col1.value+' '+col2.value+':'+col3.value+":"+"00"}`;
-						break;
-					case "range":
-						let fYear=data.fyears[dVal[0]]||data.fyears[data.fyears.length-1];
-						let fmonth=data.fmonths[dVal[1]]||data.fmonths[data.fmonths.length-1];
-						let fday=data.fdays[dVal[2]]||data.fdays[data.fdays.length-1];
-						let tYear=data.tyears[dVal[4]]||data.tyears[data.tyears.length-1];
-						let tmonth=data.tmonths[dVal[5]]||data.tmonths[data.tmonths.length-1];
-						let tday=data.tdays[dVal[6]]||data.tdays[data.tdays.length-1];
-						_this.checkArr=[fYear,fmonth,fday,tYear,tmonth,tday];
-						_this.resultStr=`${fYear+'-'+fmonth+'-'+fday+'至'+tYear+'-'+tmonth+'-'+tday}`;
-						break;
-					case "half":
-						year=data.years[dVal[0]]||data.years[data.years.length-1];
-						month=data.months[dVal[1]]||data.months[data.months.length-1];
-						day=data.days[dVal[2]]||data.days[data.days.length-1];
-						area=data.areas[dVal[3]]||data.areas[data.areas.length-1];
-						_this.checkArr=[year,month,day,area];
-						_this.resultStr=`${year+'-'+month+'-'+day+' '+area.label}`;
-						break;	
-					case "date":
-						year=data.years[dVal[0]]||data.years[data.years.length-1];
-						month=data.months[dVal[1]]||data.months[data.months.length-1];
-						day=data.days[dVal[2]]||data.days[data.days.length-1];
-						_this.checkArr=[year,month,day];
-						_this.resultStr=`${year+'-'+month+'-'+day}`;
-						break;
-					case "yearMonth":
-						year=data.years[dVal[0]]||data.years[data.years.length-1];
-						month=data.months[dVal[1]]||data.months[data.months.length-1];
-						_this.checkArr=[year,month];
-						_this.resultStr=`${year+'-'+month}`;
-						break;
-					case "dateTime":
-						year=data.years[dVal[0]]||data.years[data.years.length-1];
-						month=data.months[dVal[1]]||data.months[data.months.length-1];
-						day=data.days[dVal[2]]||data.days[data.days.length-1];
-						hour=data.hours[dVal[3]]||data.hours[data.hours.length-1];
-						minute=data.minutes[dVal[4]]||data.minutes[data.minutes.length-1];
-						second=data.seconds[dVal[5]]||data.seconds[data.seconds.length-1];
-						_this.resultStr=`${year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second}`;
-						_this.checkArr=[year,month,day,hour,minute];
-						break;
-					case "time":
-						hour=data.hours[dVal[0]]||data.hours[data.hours.length-1];
-						minute=data.minutes[dVal[1]]||data.minutes[data.minutes.length-1];
-						second=data.seconds[dVal[2]]||data.seconds[data.seconds.length-1];
-						_this.checkArr=[hour,minute,second];
-						_this.resultStr=`${hour+':'+minute+':'+second}`;
-						break;
-					case "region":
-						province=data.provinces[dVal[0]];
-						city=data.citys[dVal[1]];
-						if(!_this.hideArea){
-							area=data.areas[dVal[2]];
-							_this.checkArr=[province.label,city.label,area.label];
-							_this.checkValue=[province.value,city.value,area.value];
-							_this.resultStr=province.label+city.label+area.label;
-						}else{
-							_this.checkArr=[province.label,city.label];
-							_this.checkValue=[province.value,city.value];
-							_this.resultStr=province.label+city.label;
-						}
-						break;
-					case "selector":
-						_this.checkArr=data[dVal[0]]||data[data.length-1];
-						_this.resultStr=data[dVal[0]].label||data[data.length-1].label;
-						break;
-				}
-				_this.$nextTick(()=>{
-					_this.pickVal=dVal;
-				})
-			}
-		},
-		mounted() {
-			this.initData();
-		}
-	}
-</script>
-
-<style lang="scss">
-	.w-picker{
-		position: relative;
-		z-index: 888;
-		.mask {
-		  position: fixed;
-		  z-index: 1000;
-		  top: 0;
-		  right: 0;
-		  left: 0;
-		  bottom: 0;
-		  background: rgba(0, 0, 0, 0.6);
-		  visibility: hidden;
-		  opacity: 0;
-		  transition: all 0.3s ease;
-		}
-		.mask.show{
-			visibility: visible;
-			opacity: 1;
-		}
-		.w-picker-cnt {
-		  position: fixed;
-		  bottom: 0;
-		  left: 0;
-		  width: 100%;
-		  transition: all 0.3s ease;
-		  transform: translateY(100%);
-		  z-index: 3000;
-		}
-		.w-picker-cnt.show {
-		  transform: translateY(0);
-		}
-		.w-picker-hd {
-		  display: flex;
-		  align-items: center;
-		  padding: 0 30upx;
-		  height: 88upx;
-		  background-color: #fff;
-		  position: relative;
-		  text-align: center;
-		  font-size: 32upx;
-		  justify-content: space-between;
-		  .w-picker-btn{
-		  	font-size: 30upx;
-		  }
-		}
-		
-		.w-picker-hd:after {
-		  content: ' ';
-		  position: absolute;
-		  left: 0;
-		  bottom: 0;
-		  right: 0;
-		  height: 1px;
-		  border-bottom: 1px solid #e5e5e5;
-		  color: #e5e5e5;
-		  transform-origin: 0 100%;
-		  transform: scaleY(0.5);
-		}
-		.w-picker-item {
-		  text-align: center;
-		  width: 100%;
-		  height: 88upx;
-		  line-height: 88upx;
-		  text-overflow: ellipsis;
-		  white-space: nowrap;
-		  font-size: 30upx;
-		}
-		.w-picker-view {
-		  width: 100%;
-		  height: 476upx;
-		  overflow: hidden;
-		  background-color: rgba(255, 255, 255, 1);
-		  z-index: 666;
-		}
-		picker-view{
-			height: 100%;
-		}
-	}
-
-</style>

+ 3 - 0
h5/pages/article/page.vue

@@ -37,6 +37,9 @@
 				case '14':
 					this.activityPath = 'https://www.caimei365.com/investment.html'
 					break;
+				case '99':
+					this.activityPath = 'https://www.caimei365.com/help/1000.html'
+					break;
 			}
 			// console.log(this.activityPath)
 			// uni.setNavigationBarTitle({title:'多重精华,多重修复'});

+ 28 - 2
pages/search/search.vue

@@ -29,6 +29,15 @@
 					<view v-for="(item,index) in serachRecordList" :key="index" @click="keywordsClick(item.searchWord)">{{item.searchWord}}</view>
 				</view>
 			</view>
+			<view class="s-block hot">
+				<view class="header">热门搜索</view>
+				<view class="list">
+					<view v-for="(item,index) in hotSearchList" :key="index" @click="keywordsClick(item.keyword)">
+						{{item.keyword}}
+						<text class="iconfont icon-resou" v-if="item.type === '1'"></text>
+					</view>
+				</view>
+			</view>
 		</view>
 		<view v-else class="commodity-list-wrapper"  :style="{'overflow':'auto','height':(listData.length>4? windowHeight + 'px' : 'auto')}">
 			<scroll-view :style="{'height':(listData.length>4? scrollHeight+'px' : 'auto')}" @scrolltolower="scrolltolower" scroll-y v-if="!showEmpty">
@@ -156,6 +165,16 @@
 				isShowClose:false,	//是否显示清空输入框图标
 				isSearchHistory:false,//是都显示搜索历史
 				serachRecordList:[],//历史搜索记录
+				hotSearchList:[
+					{keyword:'玻尿酸',type:'1',name:''},
+					{keyword:'械字号',type:'1',name:''},
+					{keyword:'导入液含税',type:'1',name:''},
+					{keyword:'热门仪器',type:'1',name:''},
+					{keyword:'除皱',type:'1',name:''},
+					{keyword:'微整形 ',type:'0',name:''},
+					{keyword:'纹绣',type:'0',name:''},
+					{keyword:'美白嫩肤',type:'0',name:''}
+				],
 				isShowWrapper:false,
 				isModallayer:false,
 				isFocus:false,
@@ -502,6 +521,9 @@
 	}
 	.s-block{
 		background: #FFFFFF;
+		&.hot{
+			border-top: 20rpx solid #F7F7F7;
+		}
 		.header{
 			font-size: 32rpx;
 			padding:40rpx 24rpx 22rpx 24rpx;
@@ -531,11 +553,15 @@
 				line-height: 48rpx;
 				border-radius: 24rpx;
 				margin:12rpx;
-				padding:.0 30rpx;
-				overflow: hidden;
+				padding:.0 20rpx;
 				white-space: nowrap;
 				text-overflow: ellipsis;
 				background-color: #F3F3F3;
+				.iconfont{
+					font-size: $font-size-30;
+					color: #E56D00;
+					margin-left: 12rpx;
+				}
 			}
 		}
 	}

+ 0 - 849
pages/tabBar/home/home.vue

@@ -1,849 +0,0 @@
-<template>
-	<view class="container home clearfix" :style="{paddingTop:CustomBar+'px'}">	
-		<cm-custom :navbar-data='nvabarData'></cm-custom>
-		<!-- 头部轮播 -->
-		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="container-home tui-skeleton">
-			<view class="swiper-banner-box" >
-				<swiper class="tui-banner-swiper tui-banner tui-skeleton-fillet" :autoplay="true" :interval="5000" :duration="500"  @change="swiperChange" :circular="true">
-					<swiper-item v-for="(item,index) in bannerImageList" :key="index">
-						<image :src="item" class="tui-slide-image" mode="scaleToFill"/>
-					</swiper-item>
-				</swiper>
-				<view class="swiper__dots-box" v-if="bannerImageList.length > 1">
-					<view v-for="(item,idx) in bannerImageList" 
-						  :key="idx" 
-						  :class="[idx===current?'swiper__dots-long':'none']" 
-						  :data-index="current" class="swiper__dots-item">
-					</view>	  
-				</view>
-			</view>
-			<view class="cate-section clearfix">
-				<!-- 自定义分类导航栏 -->
-				<view class="tabbar clearfix">
-					<view class="cate-item" v-for="(nav,idx) in productsClassifyList" :key="idx" @click.stop="navigateToGoods(nav)">
-						<image class="tui-skeleton-circular" :src="nav.classifyImage"></image>
-						<text class="tui-skeleton-fillet">{{nav.classifyName}}</text>
-					</view>
-				</view>
-				<!-- 优选分类 -->
-				<view class="tabbar bot clearfix">
-					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'1',value:firstModulesName})">
-						<image class="tui-skeleton-circular" :src="firstModulesImage"></image>
-						<text class="tui-skeleton-fillet">{{firstModulesName}}</text>
-					</view>
-					<view class="cate-item-info" @click.stop="this.$api.navToListPage({type:'2',value:secondModulesName})">
-						<image class="tui-skeleton-circular" :src="secondModulesImage"></image>
-						<text class="tui-skeleton-fillet">{{secondModulesName}}</text>
-					</view>
-					<view class="cate-item-info" @click="showTost">
-						<image class="tui-skeleton-circular" :src="navInforList[0].icon"></image>
-						<text class="tui-skeleton-fillet">{{navInforList[0].text}}</text>
-					</view>
-					<view class="cate-item-info">
-						<!-- #ifdef MP-WEIXIN -->
-						<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-							<image class="tui-skeleton-circular" :src="navInforList[1].icon"></image>
-						</button>	
-						<!-- #endif -->
-						<text class="tui-skeleton-fillet">{{navInforList[1].text}}</text>
-					</view>
-				</view>
-			</view>
-			<!-- 热销商品 -->
-			<view class="hotgoods-section">
-				<view class="s-header" @click="this.$api.navToListPage({type:'3',value:thirdModulesName})">
-					<text class="tip tui-skeleton-fillet">{{thirdModulesName}}</text>
-					<text class="tit tui-skeleton-fillet">更多</text>
-					<text class="iconfont icon-xiayibu"></text>
-				</view>
-				<view class="hotgoods-swiper">
-					<view class="scoll-wrapper clearfix">
-						<view class="floor-item" v-for="(item, index) in organizeProducts" :key="index" @click.stop="navToDetailPage(item.productID)">
-							<image class="tui-skeleton-fillet" :src="item.mainImage" mode="aspectFill"></image>
-							<view class="floor-item-content">
-								<view class="title tui-skeleton-rect">
-									<text class="mclap">{{item.name}}</text>
-								</view>
-								<view class="floor-item-act">
-									<template v-if="item.actStatus==1">
-										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-											{{item.promotions.name}}<text v-if="hasLogin && item.price1TextFlag != '1'">:¥{{item.price | NumFormat}}</text>
-										</view>
-										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-									</template>
-									<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-										<view class="floor-tags">阶梯价格</view>	
-									</template>	
-								</view>
-								<view class="" v-if="hasLogin">
-									<view v-if="userIdentity == 4">
-										<view class="title-none" v-show="item.price1TextFlag == '1'">
-											<text class="p big">¥未公开价格</text>
-										</view>
-										<view class="title-none" v-show="item.price1TextFlag == '2'">
-											<text class="p big">¥价格仅会员可见</text>
-										</view>
-										<view class="price tui-skeleton-rect" v-show="item.price1TextFlag == '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-											<text class="p sm">¥</text>
-											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										</view>
-									</view>
-									<view v-else>
-										<view class="title-none" v-if="item.price1TextFlag == '1'">
-											<text class="p big">未公开价格</text>
-										</view>
-										<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-											<text class="p sm">¥</text>
-											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										</view>
-									</view>
-								</view>
-								<view v-else class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-stars :stars="parseInt(item.price1Grade)" :fontSize="36" :widthInfo="180"></uni-stars>
-									</view>
-								</view>	
-							</view>
-						</view>
-					</view>
-				</view>	
-			</view>
-			<!-- 底部 -->
-			<view class="footer-section ">
-				<view class="s-header member  tui-skeleton-fillet">
-					<text class="tip">医美机构正品联盟</text>
-				</view>
-				<view class="f-content tui-skeleton-fillet" @click="navto('/pages/service/member')">
-					<image class="tui-banner" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AEwQlAAjGFdpI2LM357.png" mode="scaleToFill"></image>
-				</view>
-				<view class="f-tab-section">
-					<!-- 优选分类 -->
-					<view class="tabbar clearfix">
-						<view class="cate-item" @click="showTost">
-							<image class="tui-skeleton-circular" :src="navServerList[0].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[0].text}}</text>
-						</view>
-						<view class="cate-item" @click="navto(navServerList[1].path)">
-							<image class="tui-skeleton-circular" :src="navServerList[1].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[1].text}}</text>
-						</view>
-						<view class="cate-item" @click="navto(navServerList[2].path)">
-							<image class="tui-skeleton-circular" :src="navServerList[2].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[2].text}}</text>
-						</view>
-						<view class="cate-item" @click="telPhoneTo">
-							<image class="tui-skeleton-circular" :src="navServerList[3].icon"></image>
-							<text class="tui-skeleton-fillet">{{navServerList[3].text}}</text>
-						</view>
-					</view>
-				</view>
-				<view class="f-text tui-skeleton-fillet">
-					<view class="">
-						<image class="logo" src="https://static.caimei365.com/app/img/icon/logo-c@2x.png" mode=""></image>
-						<text class="">采美365网</text>
-					</view>
-				</view>
-			</view>	
-		</view>
-		<!-- 活动弹窗 -->
-		<!-- <activityAlert :show="isActivity" @click="handleClick" @cancel="handleCancelClick"></activityAlert> -->
-		<!-- 透明模态层 -->
-		<modal-layer v-if='modallayer'></modal-layer>
-		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
-	</view>
-</template>
-
-<script>
-	import tuiSkeleton from "@/components/tui-skeleton/tui-skeleton"
-	import authorize from '@/common/config/authorize.js'
-	import modalLayer from "@/components/modal-layer"
-	import cmCustom from '@/components/cm-module/homeIndex/customer.vue'
-	import activityAlert from '@/components/cm-module/activity/activity_on_1.vue'
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { userInfoLogin } from "@/api/use.js"
-	import { queryPreferred } from "@/api/product.js"
-	import { mapState,mapMutations} from 'vuex';
-	export default {
-		components:{
-			tuiSkeleton,
-			modalLayer,
-			cmCustom,
-			uniStars,
-			activityAlert
-		},
-		data() {
-			return {
-				webviewStyles: {
-					progress: {
-						color: '#FF3333'
-					}
-				},
-				nvabarData: {//顶部自定义导航
-					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
-					showSearch: 0,
-					title: '采美采购商城', // 导航栏 中间的标题
-					haveBack:false,
-					textLeft:this.$store.state.isIphone,
-					textColor:'#FFFFFF'
-				},
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				userID:0,
-				clubStatus:'',
-				current:0,
-				mode:'round',
-				modallayer:false,
-				isLogin:false,
-				bannerImageList:[],
-				skeletonShow: true,
-				userIdentity:'',
-				organizeProducts:[],//常用商品
-				productsClassifyList:[
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'}
-				],//分类导航
-				firstModulesName:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png', //优惠模块1
-				secondModulesName:'', //优惠模块2
-				firstModulesImage:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png',//优惠模块icon1
-				secondModulesImage:'',//优惠模块icon2
-				thirdModulesName:'', //优惠模块3
-				navInforList:[
-					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCABdf_AAAfdMmM_xY655.png'},
-					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9BSAXPobAAApo6I0Tlo684.png'}
-				],
-				navServerList:[
-					{text:'会员优惠',icon:'../../../static/temp/server1@2x.png',path:'/pages/service/member'},
-					{text:'售后无忧',icon:'../../../static/temp/server2@2x.png',path:'/pages/service/aftersale'},
-					{text:'购物须知',icon:'../../../static/temp/server3@2x.png',path:'/pages/service/shoppingnotice'},
-					{text:'联系我们',icon:'../../../static/temp/server4@2x.png',path:''},
-				],
-				isScrollTop:false
-			}
-		},
-		onLoad() {
-			
-		},
-		filters: {
-			NumFormat:function(text) {//处理金额
-				return Number(text).toFixed(2);
-			},
-		},
-		computed: {
-			...mapState(['hasLogin','userInfo','isActivity'])
-		},
-		methods: {
-			...mapMutations(['login','logout']),
-			getWxAuthorize(){
-				authorize.getCode('weixin').then(wechatcode =>{// 根据微信的code获取用户登录状态:1已登录过 -1未登录过
-					authorize.getUserInfo('weixin').then(wxResponse =>{
-						userInfoLogin({code:wechatcode,encryptedData:wxResponse.encryptedData,iv:wxResponse.iv}).then(response =>{
-							this.isLogin = true;
-							this.userID = response.data.userID;						
-							this.userIdentity = response.data.userIdentity;						
-							this.clubStatus = response.data.clubStatus;						
-							this.$store.commit('updateStatus',response.data)
-							this.login(response.data);
-							uni.setStorageSync('token',response.data.token)
-							uni.removeStorageSync('sessionid')
-							uni.setStorageSync('sessionid','JSESSIONID='+response.data.sessionId)
-							if(response.data.userIdentity ==1){
-								this.$api.navigateTo('/seller/pages/index/index')
-							}else if(response.data.userIdentity === 3){
-								// this.$api.navigateTo('/supplier/pages/index/index')
-							}
-							this.getHomeInformation()
-							this.GetHomeFloorInfo()
-							this.getOrganizeProducts()
-						}).catch(error =>{
-							this.isLogin = false;
-							this.logout()
-							uni.removeStorageSync('sessionid')
-							uni.setStorageSync('sessionid','JSESSIONID='+error.data)
-							this.$store.commit('updateStatus',error.data)
-							this.getHomeInformation()
-							this.GetHomeFloorInfo()
-							this.getOrganizeProducts()
-						})
-					})
-				})
-			},		
-			GetHomeFloorInfo(){//初始化首页楼层数据
-				this.CommonService.GetHomeFloorInfo().then(response =>{
-					console.log(response)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			getHomeInformation(){//初始化首页数据	
-				this.CommonService.GetHomeModulesDataInfo({ userId:this.userID }).then(res =>{
-					let data = res.data;
-					this.bannerImageList = data.bannerImageList
-					this.mallPageModules = data.mallPageModules
-					this.firstModulesName= data.firstModulesName
-					this.secondModulesName= data.secondModulesName
-					this.firstModulesImage= data.firstModulesImage
-					this.secondModulesImage= data.secondModulesImage
-					this.thirdModulesName= data.thirdModulesName
-					this.productsClassifyList = data.productsClassifyList
-					this.$store.commit('updateAllNum',data.shoppingCartCount)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			getOrganizeProducts(){//获取模块三商品
-				this.ProductService.queryProductPreferred({userId:this.userID,preferredFlag:100,pageNum:1,pageSize:6}).then(res =>{
-					this.organizeProducts = res.data.results
-					this.getProductPrice()
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			getProductPrice(){//获取商品或者活动价格
-				let productIdArr = [];
-				let productIds ='';
-				this.organizeProducts.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.productID)
-				})
-				productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:productIds}).then(response =>{
-					this.organizeProducts = this.ReturnNewProducts(this.organizeProducts,response.data);
-					this.skeletonShow = false;
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			ReturnNewProducts(Array,list){
-				let NewArray = []
-				Array.map(item=>{
-					for (let i = 0; i < list.length; i++) {
-						if( item.productID == list[i].productId ){
-							NewArray.push(Object.assign(item,list[i])) 
-						}
-					}
-				});
-				return NewArray
-			},
-			PromotionsFormat(promo){//促销活动类型数据处理
-				if(promo!=null){
-					if(promo.type == 1 && promo.mode == 1){
-						return true
-					}else{
-						return false
-					}
-				}
-				return false
-			},
-			//轮播图切换修改背景色
-			swiperChange(e) {
-				const index = e.detail.current;
-				this.current = index;
-			},
-			formatMoney(num){
-				return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
-					return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-						return $1 + ",";
-					});
-				});
-			},
-			handleBannerActivity(item,index){
-				switch(index){
-					case 0:
-						this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
-						break;
-				}
-			},
-			handleClick(data){
-				this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
-				this.$store.commit('setActivity',data)
-			},
-			handleCancelClick(data){
-				this.$store.commit('setActivity',data)
-			},
-			navToListPage(nav){//三个分类模块跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navToListPage({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navigateToGoods(nav){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navigateToGoods({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navToDetailPage(id) {//跳转商品详情页
-				this.modallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-			},
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			showTost(){
-				this.$util.msg("功能开发中,敬请期待~",2000)
-				// this.$api.navigateTo(`/seller/pages/login/login`)
-				// uni.navigateToMiniProgram({
-				// 	appId: 'wx5a5cda32926f55ac',
-				// 	path: '/pages/tabBar/home/index',
-				// 	extraData: {
-				// 		'data1': 'test'
-				// 	},
-				// 	envVersion: 'develop',
-				// 	success(res) {
-				// 		console.log(res)
-				// 		// 打开成功
-				// 	}
-				// })
-			},
-			navto(url){
-				this.$api.navigateTo(url)
-			},
-			swiperNavtopage(link){
-				this.$api.navigateTo(`/h5/pages/activity/activity?productID=4204&path=${link}`)
-			},
-			telPhoneTo(){
-				let self = this;
-				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
-					response => {
-						console.log(response.data.contactNumber)
-						uni.makePhoneCall({
-							phoneNumber:response.data.contactNumber //仅为示例
-						});
-					}
-				)	
-			}
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>50){
-				this.inputActive = 'fixed'
-			}else{
-				this.inputActive = 'float'
-			}	
-			if(e.scrollTop>400){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-		onPullDownRefresh() {//下拉刷新
-			this.getHomeInformation()
-			this.getOrganizeProducts()
-			uni.stopPullDownRefresh()
-		},
-		onShareAppMessage(res){//分享转发
-			if (res.from === 'button') {
-		      // 来自页面内转发按钮
-		    }
-			return {
-			  title: '采美采购商城-生美/医美采购服务平台',
-			  path: 'pages/tabBar/home/index',
-			  imageUrl:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAWWkhAAXDP4-6m_c397.png'
-			}
-		},
-		onShow(){
-			this.modallayer = false;
-			authorize.getSetting().then(res =>{// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
-				if(res == 1){
-					this.getWxAuthorize()
-				}else{
-					this.$api.getComStorage('userInfo').then((resolve) =>{
-						this.userID = resolve.userID ? resolve.userID :0;
-						this.getHomeInformation()
-						this.getOrganizeProducts()
-					}).catch(error =>{
-						this.getHomeInformation()
-						this.getOrganizeProducts()
-					})
-
-				}
-			})			
-		}
-	}
-</script>
-
-<style lang="scss">
-	page,.home{
-		width: 100%;
-		height: auto;
-	}	
-	.container-home{
-		background: #FFFFFF;
-	}
-	.swiper-banner-box{
-		width: 100%;
-		height: 360rpx;
-		padding-top:100rpx;
-		background:#FFFFFF url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCALu9wAAAv45Bdpsk814.png)no-repeat;
-		position: relative;
-		background-size: cover;
-	}	
-	.tui-banner-swiper {
-		width: 700rpx;
-		margin: 0 auto;
-		height: 340rpx;
-		border-radius: 24rpx;
-		overflow: hidden;
-		transform: translateY(0);
-		box-shadow:0px 3px 6px rgba(225,86,22,0.08);
-		margin-top: 16rpx;
-		.banner-item{
-			border-radius: 24rpx;
-		}
-		.tui-slide-image {
-			width: 100%;
-			height: 340rpx;
-			display: block;
-		}
-	}
-	.swiper__dots-box{
-		position: absolute;
-		bottom: 30rpx;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		.swiper__dots-item{
-			width: 8rpx;
-			height: 8rpx;
-			border-radius: 100%;
-			margin-left: 6px;
-			background-color:rgba(255,255,255,.7);
-		}
-		.swiper__dots-long{
-			width: 35rpx;
-			height: 8rpx;
-			border-radius: 4rpx;
-			background-color: #ffff;
-			transition: all 0.4s;
-		}
-	}
-	/* 分类 */
-	.cate-section {
-		width: 702rpx;
-		height: auto;
-		padding:34rpx 24rpx 14rpx 24rpx; 
-		background: #fff;
-		.tabbar{
-			margin-bottom: 26rpx;
-			&.bot{
-				padding: 16rpx 24rpx;
-				border-radius: 20rpx;
-				box-shadow:0px 3px 6px rgba(225,86,22,0.07);
-				border: 1px solid #F9F9F9;
-			}
-		}
-		.cate-item {
-			width: 118rpx;
-			margin-right:28rpx;
-			display: flex;
-			float: left;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-26;
-			color: $text-color;
-			line-height: 36rpx;
-			&:last-child{
-				margin-right: 0;
-			}
-			&:nth-child(5n){
-				margin-right: 0;
-			}
-			image {
-				width: 90rpx;
-				height: 90rpx;
-				margin-bottom: 8rpx;
-				border-radius: 32rpx;
-			}	
-		}
-		.cate-item-info {
-			width: 118rpx;
-			margin-right:59.5rpx;
-			display: flex;
-			float: left;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-26;
-			color: $text-color;
-			line-height: 36rpx;
-			&:last-child{
-				margin-right: 0;
-			}
-			image {
-				width: 90rpx;
-				height: 90rpx;
-				margin-bottom: 16rpx;
-				border-radius: 32rpx;
-			}	
-			button.contact-btn{
-				width: 118rpx;
-				height: 90rpx;
-				margin: 0;
-				padding: 0;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				box-sizing: border-box;
-				text-align: center;
-				text-decoration: none;
-				border-radius: 0;
-				-webkit-tap-highlight-color: transparent;
-				overflow: hidden;
-				background-color:#FFFFFF;
-				margin-bottom: 16rpx;
-				image{
-					width: 90rpx;
-					height: 90rpx;
-					margin-bottom: 0;
-					border-radius: 32rpx;
-				}
-			}
-		}
-	}
-	.hotgoods-section{
-		background: #FFFFFF;
-		.s-header{
-			display:flex;
-			align-items:center;
-			height: 50rpx;
-			line-height: 50rpx;
-			border-radius: 20rpx 20rpx 0 0;
-			.tip{
-				flex: 4;
-				font-size: 30rpx;
-				color: $text-color;
-				font-weight: bolder;
-				padding-left: 24rpx;
-			}
-			.tit{
-				flex: 4.4;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: right;
-			}
-			.icon-xiayibu{
-				flex: 0.6;
-				color: $text-color;
-				text-align: left;
-				font-size: $font-size-24;
-			}
-		}
-	}	
-	.hotgoods-swiper{
-		width: 100%;
-		height: auto;				
-		overflow: hidden;
-		padding-top: 24rpx;
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		margin-bottom: 20rpx;
-		// box-shadow:0px 3px 6px rgba(225,86,22,0.07);
-		.scoll-wrapper{
-			width: 702rpx;
-			height: auto;
-			padding:24rpx 24rpx 0 24rpx;
-			background: #F7F7F7;
-			border-radius: 20rpx;
-			.floor-item{
-				width: 341rpx;
-				height: 568rpx;
-				// height: 500rpx;
-				margin-right: 20rpx;
-				font-size: $font-size-24;
-				color: $text-color;
-				background: #FFFFFF;
-				line-height: 36rpx;
-				border-radius: 20rpx;
-				margin-bottom: 20rpx;
-				float: left;
-				box-sizing: border-box;
-				padding-bottom: 16rpx;
-				&:nth-child(2n){
-					margin-right: 0;
-				}
-				image{
-					width: 341rpx;
-					height: 341rpx;
-					border-radius: 20rpx 20rpx 0 0;
-					display: block;
-					margin-bottom: 20rpx;
-				}
-				.floor-item-content{
-					width: 311rpx;
-					padding: 0 15rpx;
-				}
-				.floor-item-act{
-					display: block;
-					width: 100%;
-					height: 68rpx;
-					text-align: center;
-					box-sizing: border-box;
-					padding: 16rpx 0;
-					margin-top: 8rpx;
-					.floor-tags{
-						height: 28rpx;
-						border-radius: 6rpx;
-						background-color: #FFFFFF;
-						line-height: 28rpx;
-						color: $color-system;
-						text-align: center;
-						display: inline-block;
-						padding:0 16rpx;
-						font-size: $font-size-20;
-						border: 1px solid #E15616;
-						float: left;
-					}
-				}
-				.title-none{
-					font-size: $font-size-26;
-					color: #FF2A2A;
-					line-height: 44rpx;
-					.btn{
-						display: inline-block;
-						float: right;
-						width: 112rpx;
-						height: 44rpx;
-						background: $btn-confirm;
-						line-height: 44rpx;
-						font-size: $font-size-24;
-						color: #FFFFFF;
-						text-align: center;
-						border-radius: 22rpx;
-						margin-top: 17rpx;
-					}
-				}
-				.title{
-					width: 100%;
-					height: 72rpx;
-					display: flex;
-					flex-direction: column;
-					.mclap{
-						width: 100%;
-						line-height: 36rpx;
-						text-overflow:ellipsis;
-						display: -webkit-box;
-						word-break: break-all;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						overflow: hidden;
-						font-size: 26rpx;
-					}
-				}
-				.no-price{
-					height: 54rpx;
-					line-height: 54rpx;
-					display: flex;
-					box-sizing: border-box;
-					.p-no{
-						font-size: $font-size-30;
-						color: $text-color;
-						display: block;
-						float: left;
-					}
-					.p-stars{
-						width: 230rpx;
-						float: left;
-					}
-				}
-				.price{
-					color: #FF2A2A;
-					line-height: 44rpx;
-					&.none{
-						text-decoration: line-through;
-						color: #999999;
-					}
-					.sm{
-						font-size: $font-size-24;
-					}
-					.big{
-						font-size: $font-size-28;
-					}
-				}
-			}
-		}
-	}
-	.footer-section{
-		width: 702rpx;
-		padding: 0  24rpx 0 24rpx;
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		.s-header{
-			display:flex;
-			align-items:center;
-			height: 80rpx;
-			line-height: 80rpx;
-			.tip{
-				flex: 1;
-				font-size: 30rpx;
-				color: $text-color;
-				font-weight: bolder;
-			}
-		}
-		.f-content{
-			width: 100%;
-			image{
-				width: 100%;
-				height: 350rpx;
-			}
-		}
-		/*底部服务导航*/
-		.f-tab-section {
-			width: 100%;
-			height: auto;
-			padding: 38rpx 0; 
-			background: #fff;
-			/*底部服务导航*/
-			.cate-item {
-				width: 99rpx;
-				margin-right: 102rpx;
-				float: left;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				font-size: $font-size-24;
-				color: $text-color;
-				&:last-child{
-					margin-right: 0;
-				}
-				image {
-					width: 75rpx;
-					height: 75rpx;
-					margin-bottom: 8rpx;
-					border-radius: 50%;
-				}
-			}
-		}	
-		.f-text{
-			.logo{
-				width: 80rpx;
-				height: 80rpx;
-				float: left;
-				margin: 0 6rpx;
-			}
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			font-size: $font-size-24;
-			color: $text-color;
-			line-height: 80rpx;
-			padding-top: 20rpx;
-		}
-	}
-</style>

+ 13 - 66
pages/tabBar/home/index.vue

@@ -8,30 +8,13 @@
 			<banner :list="bannerImageList" v-if="isRequest"></banner>
 			<!-- 金刚区菜单 -->
 			<navbars :list="navBarsList" v-if="isRequest"></navbars>
+			<!-- 直播 -->
+			<page-special :list="liveList" v-if="isRequest"></page-special>
 		</view>	
+		<!-- 楼层 -->
 		<view class="container-section tui-skeleton">
-			<view v-for="(item,index) in flootData" :key="index">
-				<template v-if="item.type === 1">
-					<!-- 推荐专区 -->
-					<hot-product :list="RecommendList" :userIdentity="userIdentity" v-if="isRequestHot"></hot-product>
-				</template>
-				<template v-if="item.type === 3">
-					<!-- 供应商专题 -->
-					<supplier-list :list="item.floorData" v-if="isRequest"></supplier-list>
-				</template>
-				<template v-if="item.type === 4">
-					<!-- 商品专题 -->
-					<special-product :list="item.floorData" v-if="isRequest"></special-product>
-				</template>
-				<template v-if="item.type === 5">
-					<!-- 小专题 -->
-					<small-product :list="item.floorData" v-if="isRequest"></small-product>
-				</template>
-				<template v-if="item.type === 6">
-					<!-- 楼层 -->
-					<pages-product :list="item.subFloors" v-if="isRequest"></pages-product>
-				</template>
-			</view>
+			<page-floor :list="pageList" :userIdentity="userIdentity"></page-floor>
+			<supplier-list :list="supplierList" v-if="isRequest"></supplier-list>
 		</view>
 		<!-- 侧边 -->
 		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
@@ -44,23 +27,20 @@
 	import customer from '@/components/cm-module/homeIndex/customer.vue'
 	import banner from '@/components/cm-module/homeIndex/banner.vue'
 	import navbars from '@/components/cm-module/homeIndex/navbars.vue'
-	import hotProduct from '@/components/cm-module/homeIndex/hotProduct.vue'
-	import pagesProduct from '@/components/cm-module/homeIndex/pagesProduct.vue'
-	import specialProduct from '@/components/cm-module/homeIndex/specialProduct.vue'
-	import smallProduct from '@/components/cm-module/homeIndex/smallProduct.vue'
+	import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+	import pageSpecial from '@/components/cm-module/homeIndex/pageSpecial.vue'
 	import supplierList from '@/components/cm-module/homeIndex/supplierList.vue'
+	import { pageList,liveList,supplierDataList } from '@/common/json/data.json.js' //本地数据
 	import { userInfoLogin } from "@/api/use.js"
 	import { mapState,mapMutations} from 'vuex';
 	export default {
 		components:{
 			tuiSkeleton,
 			customer,
-			hotProduct,
 			banner,
 			navbars,
-			pagesProduct,
-			specialProduct,
-			smallProduct,
+			pageFloor,
+			pageSpecial,
 			supplierList
 		},
 		data() {
@@ -90,37 +70,11 @@
 				flootData:[],//楼层
 				bannerImageList:[],//轮播
 				navBarsList:[],//导航分类
-				pagesList:[],//楼层
-				RecommendList:[],//热门推荐
-				specialList:[],//商品专题轮播
-				specialProList:[],//商品专题商品
-				supplierList:[],//供应商列表
-				organizeProducts:[],//常用商品
-				productsClassifyList:[
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'},
-					{classifyImage:'https://admin-b.caimei365.com/userfiles/1/images/photo/2020/04/%E7%BB%84%201238.png',classifyName:'采美'}
-				],//分类导航
-				firstModulesName:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png', //优惠模块1
-				secondModulesName:'', //优惠模块2
-				firstModulesImage:'https://img.caimei365.com/group1/M00/03/8C/Cmis215XHXSAAZU0AACaPrfbB8I435.png',//优惠模块icon1
-				secondModulesImage:'',//优惠模块icon2
-				thirdModulesName:'', //优惠模块3
-				navInforList:[
-					{text:'会员中心',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCABdf_AAAfdMmM_xY655.png'},
-					{text:'在线客服',icon:'https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9BSAXPobAAApo6I0Tlo684.png'}
-				],
-				navServerList:[
-					{text:'会员优惠',icon:'../../../static/temp/server1@2x.png',path:'/pages/service/member'},
-					{text:'售后无忧',icon:'../../../static/temp/server2@2x.png',path:'/pages/service/aftersale'},
-					{text:'购物须知',icon:'../../../static/temp/server3@2x.png',path:'/pages/service/shoppingnotice'},
-					{text:'联系我们',icon:'../../../static/temp/server4@2x.png',path:''},
-				],
+				liveList:liveList,
+				pageList:pageList,//楼层
+				supplierList:supplierDataList,//供应商列表
 				isScrollTop:false,
 				isRequest:false,
-				isRequestHot:false
 			}
 		},
 		onLoad() {
@@ -198,12 +152,6 @@
 					let data = res.data;
 					this.bannerImageList = data.bannerImageList
 					this.mallPageModules = data.mallPageModules
-					this.firstModulesName= data.firstModulesName
-					this.secondModulesName= data.secondModulesName
-					this.firstModulesImage= data.firstModulesImage
-					this.secondModulesImage= data.secondModulesImage
-					this.thirdModulesName= data.thirdModulesName
-					this.productsClassifyList = data.productsClassifyList
 					this.$store.commit('updateAllNum',data.shoppingCartCount)
 					this.GetHomeInit();
 					this.GetHomeRecommendInfo()
@@ -228,7 +176,6 @@
 				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:productIds}).then(response =>{
 					this.RecommendList = this.ReturnNewProducts(this.RecommendList,response.data);
 					this.skeletonShow = false;
-					this.isRequestHot = true
 					this.isRequest = true
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)

+ 8 - 3
pages/tabBar/user/user.vue

@@ -124,15 +124,20 @@
 				</view>
 				<view class="list-cell-item">
 					<view class="list-cell" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-icon"><text class="iconfont icon-lianxiwomen" :class="item.icon"></text></text>
+						<text class="cell-icon"><text class="iconfont icon-lianxiwomen"></text></text>
 						<text class="cell-tit">联系我们</text>
 						<text class="cell-more" @click="toPhone">{{contactNumber}}</text>
 					</view>
-					<view class="list-cell last" @click="this.$api.navigateTo('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
-						<text class="cell-icon"><text class="iconfont icon-guanyuwomen" :class="item.icon"></text></text>
+					<view class="list-cell" @click="this.$api.navigateTo('/pages/user/about/about')" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-icon"><text class="iconfont icon-guanyuwomen"></text></text>
 						<text class="cell-tit">关于我们</text>
 						<text class="cell-more iconfont icon-xiayibu"></text>
 					</view>
+					<view class="list-cell last" @click="this.$api.navigateTo('/h5/pages/article/page?linkType=99')" hover-class="cell-hover" :hover-stay-time="50">
+						<text class="cell-icon"><text class="iconfont icon-bangzhuzhongxin"></text></text>
+						<text class="cell-tit">帮助中心</text>
+						<text class="cell-more iconfont icon-xiayibu"></text>
+					</view>
 				</view>	
 			</view>
 		</view>	

+ 72 - 74
second/pages/form/form.vue

@@ -368,92 +368,90 @@
 			  this.secondParams.secondProductType = e.target.value ;
 			},
 			submitBtn () {
-			  if(this.secondParams.secondHandType == ''){
-					this.$util.msg('请选择分类',2000);
-					return;
-				}
-				if(this.secondParams.secondHandType == 1 ){
-				   if(this.secondParams.instrumentType ==''){
-					this.$util.msg('请完善仪器分类',2000);
-					return;
+				if(this.secondParams.secondHandType == ''){
+						this.$util.msg('请选择分类',2000);
+						return;
+					}
+					if(this.secondParams.secondHandType == 1 ){
+					   if(this.secondParams.instrumentType ==''){
+						this.$util.msg('请完善仪器分类',2000);
+						return;
+						}
+					}
+				if(this.secondParams.brandID == ''){
+						this.$util.msg('请选择商品品牌',2000);
+						return;
 					}
+				if(this.secondParams.name == ''){
+					  this.$util.msg('请输入商品名称',2000);
+						return
 				}
-		     if(this.secondParams.brandID == ''){
-					this.$util.msg('请选择商品品牌',2000);
-		            return;
-		        }
-			 if(this.secondParams.name == ''){
-				  this.$util.msg('请输入商品名称',2000);
-					return
-			 }
-			 if(this.secondParams.secondHandType ==2) {
-				if (this.secondParams.maturityYears=='') {
-					 this.$util.msg('请输入产品到期日',2000);
-					 return
-				} 
-			 }
-			 if(!this.$api.isNumber(this.secondParams.price1)){
-				  this.$util.msg('请输入交易价',2000);
-					return
-			 }
-			 if(this.secondParams.secondHandType ==2) {
-			 if (!this.$api.isNumber(this.secondParams.normalPrice)) {
-					 this.$util.msg('请输入市场价',2000);
-					 return
+				 if(this.secondParams.secondHandType ==2) {
+					if (this.secondParams.maturityYears=='') {
+						 this.$util.msg('请输入产品到期日',2000);
+						 return
+					} 
 				 }
-				 if(!this.$api.isNumber(this.secondParams.originalPrice)){
-					  this.$util.msg('请输入采购价/原价',2000);
+				 if(!this.$api.isNumber(this.secondParams.price1)){
+					  this.$util.msg('请输入交易价',2000);
 						return
-				   }
-				 if(!this.$api.isNumber(this.secondParams.stock)){
-					  this.$util.msg('请输入数量',2000);
+				 }
+				 if(this.secondParams.secondHandType ==2) {
+				 if (!this.$api.isNumber(this.secondParams.normalPrice)) {
+						 this.$util.msg('请输入市场价',2000);
+						 return
+					 }
+					 if(!this.$api.isNumber(this.secondParams.originalPrice)){
+						  this.$util.msg('请输入采购价/原价',2000);
+							return
+					   }
+					 if(!this.$api.isNumber(this.secondParams.stock)){
+						  this.$util.msg('请输入数量',2000);
+							return
+						}
+				 }
+				 if(this.secondParams.productQuality == ''){
+					  this.$util.msg('请输入商品成色',2000);
 						return
-					}
-			 }
-			 if(this.secondParams.productQuality == ''){
-				  this.$util.msg('请输入商品成色',2000);
-					return
-			 }
-			  if(this.secondParams.contactName == ''){
-				  this.$util.msg('请输入联系人姓名',2000);
-					return
-			 }
-			  if(this.secondParams.contactMobile == ''){
-				  console.log(this.secondParams.contactMobile)
-				  this.$util.msg('请输入联系方式',2000);
-					return
-			 }
-			 if(!$reg.isMobile(this.secondParams.contactMobile)){
-				  this.$util.msg('联系方式格式不正确',2000);
-					 return
-			  }
-			  if(this.secondParams.townId == ''|| this.secondParams.townId == undefined){
-				  this.$util.msg('请完善联系地址',2000);
+				 }
+				  if(this.secondParams.contactName == ''){
+					  this.$util.msg('请输入联系人姓名',2000);
+						return
+				 }
+				  if(this.secondParams.contactMobile == ''){
+					  console.log(this.secondParams.contactMobile)
+					  this.$util.msg('请输入联系方式',2000);
+						return
+				 }
+				if(!$reg.isMobile(this.secondParams.contactMobile)){
+					  this.$util.msg('联系方式格式不正确',2000);
+						 return
+				}
+				if(this.secondParams.townId == ''|| this.secondParams.townId == undefined){
+					this.$util.msg('请完善联系地址',2000);
 					return
-			 }
-			   if(this.secondParams.address == ''){
-				  this.$util.msg('请填写详细地址',2000);
+				}
+				if(this.secondParams.address == ''){
+					this.$util.msg('请填写详细地址',2000);
 					return
-			 }
+				}
 				if(this.GoodsImagesList ==''){
 					this.$util.msg('请上传图片',2000);
 					return;
 				}
-			 if(this.checkbox==false){
-				   this.$util.msg('请勾选已阅读',2000);
-					return
-			 }
-			 console.log(this.secondParams)
-			 this.SecondService.SecondHandProduct(this.secondParams).then(res=>{ //提交发布
-				 if (res.code==0){
-				   this.vShow_secondBj = true;
-				   this.playid= res.data;
-				 }else{
-					  this.$util.msg(res.msg,2000)
-					 this.secondBj = false;
-					 return
+				 if(this.checkbox==false){
+					   this.$util.msg('请勾选已阅读',2000);
+						return
 				 }
-			 })
+				console.log(this.secondParams)
+				this.SecondService.SecondHandProduct(this.secondParams).then(res=>{ //提交发布
+					this.vShow_secondBj = true;
+					this.playid= res.data;
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+					this.secondBj = false;
+					return
+				})
 			},
 			quxiao:function(){
 			 this.vShow_secondBj = false;

+ 2 - 2
seller/pages/index/index.vue

@@ -27,12 +27,12 @@
 </template>
 
 <script>
-	import sellerHome from '@/components/cm-module/cm-seller/home.vue'
+	// import sellerHome from '@/components/cm-module/cm-seller/home.vue'
 	import sellerUser from '@/components/cm-module/cm-seller/user.vue'
 	import sellerCategory from '@/components/cm-module/cm-seller/category.vue'
 	export default {
 		components: {
-			sellerHome,//采美采购商城 0
+			// sellerHome,//采美采购商城 0
 			sellerUser,//账户中心     1
 			sellerCategory,//商品分类 2
 		},

+ 2 - 2
services/ajax.env.js

@@ -4,8 +4,8 @@ if(process.env.NODE_ENV === 'development'){
 	// URL_CONFIG = 'http://192.168.2.68:8008'	 //涛涛联调地址
 	// URL_CONFIG = 'http://192.168.2.67:8008'	 //裴裴联调地址
 	// URL_CONFIG = 'http://192.168.2.75:8008'	 //超超联调地址
-    URL_CONFIG = 'https://spi-b.caimei365.com'	 //采美测试地址
-	// URL_CONFIG = 'https://spi.caimei365.com'
+    // URL_CONFIG = 'https://spi-b.caimei365.com'	 //采美测试地址
+	URL_CONFIG = 'https://spi.caimei365.com'
 }else{
     // 生产环境
 	// URL_CONFIG = 'https://spi-b.caimei365.com'

+ 2 - 2
supplier/pages/index/index.vue

@@ -27,12 +27,12 @@
 </template>
 
 <script>
-	import supplierHome from '@/components/cm-module/supplier/home.vue'
+	// import supplierHome from '@/components/cm-module/supplier/home.vue'
 	import supplierUser from '@/components/cm-module/supplier/user.vue'
 	import supplierCategory from '@/components/cm-module/supplier/category.vue'
 	export default {
 		components: {
-			supplierHome,//采美采购商城 0
+			// supplierHome,//采美采购商城 0
 			supplierUser,//账户中心     1
 			supplierCategory,//商品分类 2
 		},

+ 94 - 96
supplier/pages/user/my-shop.vue

@@ -43,74 +43,73 @@
 							<view class="title tui-skeleton-rect">
 								<text class="mclap">{{isInterceptHtmlFn(item.name)}}</text>
 							</view>
-							<view class="" v-if="hasLogin">
-								<template v-if="userIdentity == 4">
-									<view class="title-none" v-if="item.priceFlag == '1'">
-										<text class="p big">¥未公开价格</text>
-									</view>
-									<view class="title-none" v-if="item.priceFlag == '2'">
-										<text class="p big">¥价格仅会员可见</text>
-									</view>
-									<view class="price tui-skeleton-rect" v-if="item.priceFlag == '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										<template v-if="item.actStatus==1">
-											<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-												{{item.promotions.name}}<text v-if="hasLogin && item.priceFlag != '1'">:¥{{item.price | NumFormat}}</text>
-											</view>
-											<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-										</template>
-										<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-											<view class="floor-tags">阶梯价格</view>	
-										</template>
-									</view>
+							<view class="floor-item-act">
+								<template v-if="userIdentity === 3">
+									<template v-if="item.actStatus===1">
+										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+											{{item.promotions.name}}
+											<text v-if="hasLogin && item.p_price_flag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+										</view>
+										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+									</template>
+									<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+										<view class="floor-tags">阶梯价格</view>	
+									</template>
+								</template>	
+								<template v-else>
+									<template v-if="item.actStatus===1">
+										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+											{{item.promotions.name}}
+											<text v-if="hasLogin && item.p_price_flag != 1">:¥{{item.price | NumFormat}}</text>
+										</view>
+										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+									</template>
+									<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+										<view class="floor-tags">阶梯价格</view>	
+									</template>
 								</template>
-								<template v-else-if="userIdentity == 3">
+							</view>	
+							<view class="" v-if="hasLogin">
+								<template v-if="userIdentity == 3">
 									<template v-if="item.supplierId == shopId">
-										<view class="title-none" v-if="item.p_price_flag == '1'">
-											<text class="p big">未公开价格</text>
+										<view class="title-none" v-if="item.p_price_flag === '1'">
+											<text class="p big">未公开价格</text>
 										</view>
 										<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
 											<text class="p sm">¥</text>
 											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-											<template v-if="item.actStatus==1">
-												<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-													{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{item.price | NumFormat}}</text>
-												</view>
-												<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-											</template>
-											<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-												<view class="floor-tags">阶梯价格</view>	
-											</template>
 										</view>
 									</template>	
 									<template v-else>
 										<view class="no-price">
 											<view class="p-stars">
 												<text class="p-no">¥</text>
-												<uni-grader :grade="Number(item.priceGrade)"></uni-grader>
+												<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
 											</view>
 										</view>	
 									</template>
 								</template>
+								<template v-else-if="userIdentity ===4">
+									<view class="title-none" v-if="item.p_price_flag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="title-none"  v-if="item.p_price_flag === '2'">
+										<text class="p big">¥价格仅会员可见</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-if="item.p_price_flag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+									</view>
+								</template>
 								<template v-else>
-									<view class="title-none" v-if="item.priceFlag == '1'">
-										<text class="p big">未公开价格</text>
+									<view class="title-none" v-if="item.p_price_flag === '1'">
+										<text class="p big">未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
 										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										<template v-if="item.actStatus==1">
-											<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-												{{item.promotions.name}}<text v-if="hasLogin && item.priceFlag != '1'">:¥{{item.price | NumFormat}}</text>
-											</view>
-											<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-										</template>
-										<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-											<view class="floor-tags">阶梯价格</view>	
-										</template>
 									</view>
-								</template>
+								</template>	
 							</view>
 							<view v-else class="no-price">
 								<view class="p-stars">
@@ -118,7 +117,7 @@
 									<uni-grader :grade="Number(item.priceGrade)"></uni-grader>
 									<template v-if="item.actStatus==1">
 										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-											{{item.promotions.name}}<text v-if="hasLogin && item.priceFlag != '1'">:¥{{item.price | NumFormat}}</text>
+											{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{item.price | NumFormat}}</text>
 										</view>
 										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
 									</template>
@@ -144,74 +143,73 @@
 							<view class="title tui-skeleton-rect">
 								<text class="mclap">{{isInterceptHtmlFn(item.p_name)}}</text>
 							</view>
-							<view class="" v-if="hasLogin">
-								<template v-if="userIdentity == 4">
-									<view class="title-none" v-if="item.p_price_flag == '1'">
-										<text class="p big">¥未公开价格</text>
-									</view>
-									<view class="title-none" v-if="item.p_price_flag == '2'">
-										<text class="p big">¥价格仅会员可见</text>
-									</view>
-									<view class="price tui-skeleton-rect" v-if="item.p_price_flag == '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										<text class="p sm">¥</text>
-										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										<template v-if="item.actStatus==1">
-											<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-												{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{item.price | NumFormat}}</text>
-											</view>
-											<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-										</template>
-										<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-											<view class="floor-tags">阶梯价格</view>	
-										</template>
-									</view>
+							<view class="floor-item-act">
+								<template v-if="userIdentity === 3">
+									<template v-if="item.actStatus===1">
+										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+											{{item.promotions.name}}
+											<text v-if="hasLogin && item.p_price_flag != 1 && item.supplierId == shopId">:¥{{item.price | NumFormat}}</text>
+										</view>
+										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+									</template>
+									<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+										<view class="floor-tags">阶梯价格</view>	
+									</template>
+								</template>	
+								<template v-else>
+									<template v-if="item.actStatus===1">
+										<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
+											{{item.promotions.name}}
+											<text v-if="hasLogin && item.p_price_flag != 1">:¥{{item.price | NumFormat}}</text>
+										</view>
+										<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
+									</template>
+									<template v-if="item.actStatus ===0  &&  item.ladderPriceFlag===1">
+										<view class="floor-tags">阶梯价格</view>	
+									</template>
 								</template>
-								<template v-else-if="userIdentity == 3">
+							</view>	
+							<view class="" v-if="hasLogin">
+								<template v-if="userIdentity == 3">
 									<template v-if="item.supplierId == shopId">
-										<view class="title-none" v-if="item.p_price_flag == '1'">
-											<text class="p big">未公开价格</text>
+										<view class="title-none" v-if="item.p_price_flag === '1'">
+											<text class="p big">未公开价格</text>
 										</view>
 										<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
 											<text class="p sm">¥</text>
 											<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-											<template v-if="item.actStatus==1">
-												<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-													{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{item.price | NumFormat}}</text>
-												</view>
-												<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-											</template>
-											<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-												<view class="floor-tags">阶梯价格</view>	
-											</template>
 										</view>
 									</template>	
 									<template v-else>
 										<view class="no-price">
 											<view class="p-stars">
 												<text class="p-no">¥</text>
-												<uni-grader :grade="Number(item.p_price_grade)"></uni-grader>
+												<uni-grader :grade="Number(item.priceGrade)" :margin="14"></uni-grader>
 											</view>
 										</view>	
 									</template>
 								</template>
+								<template v-else-if="userIdentity ===4">
+									<view class="title-none" v-if="item.p_price_flag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="title-none"  v-if="item.p_price_flag === '2'">
+										<text class="p big">¥价格仅会员可见</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-if="item.p_price_flag === '0'" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
+									</view>
+								</template>
 								<template v-else>
-									<view class="title-none" v-if="item.p_price_flag == '1'">
-										<text class="p big">未公开价格</text>
+									<view class="title-none" v-if="item.p_price_flag === '1'">
+										<text class="p big">未公开价格</text>
 									</view>
 									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.promotions) ? 'none' : ''">
 										<text class="p sm">¥</text>
 										<text class="p big">{{ (PromotionsFormat(item.promotions) ? item.originalPrice : item.price ) | NumFormat}}</text>
-										<template v-if="item.actStatus==1">
-											<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-												{{item.promotions.name}}<text v-if="hasLogin && item.p_price_flag != '1'">:¥{{item.price | NumFormat}}</text>
-											</view>
-											<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-										</template>
-										<template v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-											<view class="floor-tags">阶梯价格</view>	
-										</template>
 									</view>
-								</template>
+								</template>	
 							</view>
 							<view v-else class="no-price">
 								<view class="p-stars">
@@ -691,13 +689,13 @@
 					display: inline-block;
 					padding:0 16rpx;
 					font-size: $font-size-20;
-					margin-left: 15rpx;
 					border: 1px solid #E15616;
+					float: left;
 				}
 				.title-none{
 					font-size: $font-size-26;
 					color: #FF2A2A;
-					line-height: 70rpx;
+					line-height: 54rpx;
 					.btn{
 						display: inline-block;
 						float: right;
@@ -747,7 +745,7 @@
 				}
 				.price{
 					color: #FF2A2A;
-					line-height:70rpx;
+					line-height:54rpx;
 					&.none{
 						text-decoration: line-through;
 						color: #999999;