Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	components/home/Carousel.vue
yangc 8 years ago
parent
commit
85ccd7c6c8
51 changed files with 1521 additions and 248 deletions
  1. 5 0
      app.html
  2. 1004 0
      assets/scss/help.css
  3. 24 9
      components/common/buyOrCar/buyComponent.vue
  4. 1 1
      components/common/image-upload/imageUpload.vue
  5. 6 6
      components/common/page/pageComponent.vue
  6. 10 1
      components/default/Header.vue
  7. 0 3
      components/default/LeaveMessage.vue
  8. 8 5
      components/default/RightBar.vue
  9. 1 1
      components/help/helpHeader.vue
  10. 12 12
      components/help/left.vue
  11. 90 0
      components/home/Carousel.vue
  12. 73 40
      components/messageBoard/MessageBoard.vue
  13. 1 2
      components/news/Left.vue
  14. 1 1
      components/news/Right.vue
  15. 44 8
      components/product/BrandList.vue
  16. 0 1
      components/product/CategoryProperty.vue
  17. 21 16
      components/product/ComponentGoods.vue
  18. 1 1
      components/product/KindBox.vue
  19. 1 1
      components/product/Recommends.vue
  20. 13 10
      components/product/brand/BrandComponent.vue
  21. 12 6
      components/product/brand/CategoriesList.vue
  22. 6 0
      components/product/component/ComponentDetail.vue
  23. 3 0
      components/product/component/StoreInfo.vue
  24. 1 0
      components/provider/Carousel.vue
  25. 1 1
      components/provider/HotCommodity.vue
  26. 1 1
      components/provider/RecommendOriginal.vue
  27. 12 6
      components/provider/Suppliers.vue
  28. 5 1
      components/search/GoodList.vue
  29. 85 25
      components/store/CommodityInfo.vue
  30. 24 20
      components/store/CommodityList.vue
  31. 3 3
      components/store/RecommendProduct.vue
  32. 0 3
      layouts/default.vue
  33. 0 3
      layouts/login.vue
  34. 10 6
      layouts/main.vue
  35. 0 3
      layouts/shop.vue
  36. 1 1
      pages/help/helpDetail/_id.vue
  37. 6 12
      pages/help/helpList/_id.vue
  38. 16 2
      pages/help/home.vue
  39. 1 1
      pages/index.vue
  40. 0 2
      pages/news/_id.vue
  41. 1 2
      pages/product/original.vue
  42. 2 4
      pages/provider/factories.vue
  43. 2 2
      pages/provider/home.vue
  44. 0 2
      pages/provider/list.vue
  45. 1 1
      pages/store/_uuid/_batchCode.vue
  46. 0 3
      pages/store/_uuid/description.vue
  47. 0 3
      pages/user/index.vue
  48. 0 3
      pages/vendor/index.vue
  49. 1 1
      server.js
  50. 2 2
      store/index.js
  51. 9 11
      store/provider.js

+ 5 - 0
app.html

@@ -1,6 +1,11 @@
 <!DOCTYPE html>
 <html {{ HTML_ATTRS }}>
 <head>
+  <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"/>
+  <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
+  <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/element-ui/1.3.7/theme-default/index.css"/>
+  <link rel="stylesheet" type="text/css" href="https://at.alicdn.com/t/font_0d1jjt5tukcblnmi.css"/>
+  <link rel="stylesheet" type="text/css" href="https://cdn.bootcss.com/Swiper/3.4.2/css/swiper.css"/>
   {{ HEAD }}
   <script>
     (function (w, d) {

+ 1004 - 0
assets/scss/help.css

@@ -254,3 +254,1007 @@
   height: 26px;
   line-height: 26px;
 }
+
+
+/*编辑器基本样式*/
+/*!
+ * Quill Editor v1.2.4
+ * https://quilljs.com/
+ * Copyright (c) 2014, Jason Chen
+ * Copyright (c) 2013, salesforce.com
+ */
+.ql-container {
+  box-sizing: border-box;
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  height: 100%;
+  margin: 0px;
+  position: relative;
+}
+.ql-container.ql-disabled .ql-tooltip {
+  visibility: hidden;
+}
+.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before {
+  pointer-events: none;
+}
+.ql-clipboard {
+  left: -100000px;
+  height: 1px;
+  overflow-y: hidden;
+  position: absolute;
+  top: 50%;
+}
+.ql-clipboard p {
+  margin: 0;
+  padding: 0;
+}
+.ql-editor {
+  box-sizing: border-box;
+  cursor: text;
+  line-height: 1.42;
+  height: 100%;
+  outline: none;
+  overflow-y: auto;
+  /*padding: 12px 15px;*/
+  tab-size: 4;
+  -moz-tab-size: 4;
+  text-align: left;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+}
+.ql-editor p,
+.ql-editor ol,
+.ql-editor ul,
+.ql-editor pre,
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6 {
+  margin: 0;
+  padding: 0;
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol,
+.ql-editor ul {
+  padding-left: 1.5em;
+}
+.ql-editor ol > li,
+.ql-editor ul > li {
+  list-style-type: none;
+}
+.ql-editor ul > li::before {
+  content: '\2022';
+}
+.ql-editor ul[data-checked=true],
+.ql-editor ul[data-checked=false] {
+  pointer-events: none;
+}
+.ql-editor ul[data-checked=true] > li *,
+.ql-editor ul[data-checked=false] > li * {
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before,
+.ql-editor ul[data-checked=false] > li::before {
+  color: #777;
+  cursor: pointer;
+  pointer-events: all;
+}
+.ql-editor ul[data-checked=true] > li::before {
+  content: '\2611';
+}
+.ql-editor ul[data-checked=false] > li::before {
+  content: '\2610';
+}
+.ql-editor li::before {
+  display: inline-block;
+  margin-right: 0.3em;
+  text-align: right;
+  white-space: nowrap;
+  width: 1.2em;
+}
+.ql-editor li:not(.ql-direction-rtl)::before {
+  margin-left: -1.5em;
+}
+.ql-editor ol li,
+.ql-editor ul li {
+  padding-left: 1.5em;
+}
+.ql-editor ol li {
+  counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+  counter-increment: list-num;
+}
+.ql-editor ol li:before {
+  content: counter(list-num, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-increment: list-1;
+}
+.ql-editor ol li.ql-indent-1:before {
+  content: counter(list-1, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-1 {
+  counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-increment: list-2;
+}
+.ql-editor ol li.ql-indent-2:before {
+  content: counter(list-2, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-2 {
+  counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-increment: list-3;
+}
+.ql-editor ol li.ql-indent-3:before {
+  content: counter(list-3, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-3 {
+  counter-reset: list-4 list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-increment: list-4;
+}
+.ql-editor ol li.ql-indent-4:before {
+  content: counter(list-4, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-4 {
+  counter-reset: list-5 list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-increment: list-5;
+}
+.ql-editor ol li.ql-indent-5:before {
+  content: counter(list-5, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-5 {
+  counter-reset: list-6 list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-increment: list-6;
+}
+.ql-editor ol li.ql-indent-6:before {
+  content: counter(list-6, decimal) '. ';
+}
+.ql-editor ol li.ql-indent-6 {
+  counter-reset: list-7 list-8 list-9;
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-increment: list-7;
+}
+.ql-editor ol li.ql-indent-7:before {
+  content: counter(list-7, lower-alpha) '. ';
+}
+.ql-editor ol li.ql-indent-7 {
+  counter-reset: list-8 list-9;
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-increment: list-8;
+}
+.ql-editor ol li.ql-indent-8:before {
+  content: counter(list-8, lower-roman) '. ';
+}
+.ql-editor ol li.ql-indent-8 {
+  counter-reset: list-9;
+}
+.ql-editor ol li.ql-indent-9 {
+  counter-increment: list-9;
+}
+.ql-editor ol li.ql-indent-9:before {
+  content: counter(list-9, decimal) '. ';
+}
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 3em;
+}
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+  padding-left: 4.5em;
+}
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 3em;
+}
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+  padding-right: 4.5em;
+}
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 6em;
+}
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+  padding-left: 7.5em;
+}
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 6em;
+}
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+  padding-right: 7.5em;
+}
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 9em;
+}
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+  padding-left: 10.5em;
+}
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 9em;
+}
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+  padding-right: 10.5em;
+}
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 12em;
+}
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+  padding-left: 13.5em;
+}
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 12em;
+}
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+  padding-right: 13.5em;
+}
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 15em;
+}
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+  padding-left: 16.5em;
+}
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 15em;
+}
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+  padding-right: 16.5em;
+}
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 18em;
+}
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+  padding-left: 19.5em;
+}
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 18em;
+}
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+  padding-right: 19.5em;
+}
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 21em;
+}
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+  padding-left: 22.5em;
+}
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 21em;
+}
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+  padding-right: 22.5em;
+}
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 24em;
+}
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+  padding-left: 25.5em;
+}
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 24em;
+}
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+  padding-right: 25.5em;
+}
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 27em;
+}
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+  padding-left: 28.5em;
+}
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 27em;
+}
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+  padding-right: 28.5em;
+}
+.ql-editor .ql-video {
+  display: block;
+  max-width: 100%;
+}
+.ql-editor .ql-video.ql-align-center {
+  margin: 0 auto;
+}
+.ql-editor .ql-video.ql-align-right {
+  margin: 0 0 0 auto;
+}
+.ql-editor .ql-bg-black {
+  background-color: #000;
+}
+.ql-editor .ql-bg-red {
+  background-color: #e60000;
+}
+.ql-editor .ql-bg-orange {
+  background-color: #f90;
+}
+.ql-editor .ql-bg-yellow {
+  background-color: #ff0;
+}
+.ql-editor .ql-bg-green {
+  background-color: #008a00;
+}
+.ql-editor .ql-bg-blue {
+  background-color: #06c;
+}
+.ql-editor .ql-bg-purple {
+  background-color: #93f;
+}
+.ql-editor .ql-color-white {
+  color: #fff;
+}
+.ql-editor .ql-color-red {
+  color: #e60000;
+}
+.ql-editor .ql-color-orange {
+  color: #f90;
+}
+.ql-editor .ql-color-yellow {
+  color: #ff0;
+}
+.ql-editor .ql-color-green {
+  color: #008a00;
+}
+.ql-editor .ql-color-blue {
+  color: #06c;
+}
+.ql-editor .ql-color-purple {
+  color: #93f;
+}
+.ql-editor .ql-font-serif {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-editor .ql-font-monospace {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-editor .ql-font-Microsoft_YaHei {
+  font-family: "Microsoft Yahei", "微软雅黑";
+}
+.ql-editor .ql-font-Song {
+  font-family: 宋体;
+}
+.ql-editor .ql-font-Black {
+  font-family: 黑体;
+}
+.ql-editor .ql-size-12 {
+  font-size: 12px;
+}
+.ql-editor .ql-size-14 {
+  font-size: 14px;
+}
+.ql-editor .ql-size-16 {
+  font-size: 16px;
+}
+.ql-editor .ql-size-18 {
+  font-size: 18px;
+}
+.ql-editor .ql-size-20 {
+  font-size: 20px;
+}
+.ql-editor .ql-size-22 {
+  font-size: 22px;
+}
+.ql-editor .ql-size-25 {
+  font-size: 25px;
+}
+.ql-editor .ql-size-28 {
+  font-size: 28px;
+}
+.ql-editor .ql-size-32 {
+  font-size: 32px;
+}
+.ql-editor .ql-direction-rtl {
+  direction: rtl;
+  text-align: inherit;
+}
+.ql-editor .ql-align-center {
+  text-align: center;
+}
+.ql-editor .ql-align-justify {
+  text-align: justify;
+}
+.ql-editor .ql-align-right {
+  text-align: right;
+}
+.ql-editor.ql-blank::before {
+  color: rgba(0,0,0,0.6);
+  content: attr(data-placeholder);
+  font-style: italic;
+  pointer-events: none;
+  position: absolute;
+}
+.ql-snow.ql-toolbar:after,
+.ql-snow .ql-toolbar:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-snow.ql-toolbar button,
+.ql-snow .ql-toolbar button {
+  background: none;
+  border: none;
+  cursor: pointer;
+  display: inline-block;
+  float: left;
+  height: 24px;
+  padding: 3px 5px;
+  width: 28px;
+}
+.ql-snow.ql-toolbar button svg,
+.ql-snow .ql-toolbar button svg {
+  float: left;
+  height: 100%;
+}
+.ql-snow.ql-toolbar button:active:hover,
+.ql-snow .ql-toolbar button:active:hover {
+  outline: none;
+}
+.ql-snow.ql-toolbar input.ql-image[type=file],
+.ql-snow .ql-toolbar input.ql-image[type=file] {
+  display: none;
+}
+.ql-snow.ql-toolbar button:hover,
+.ql-snow .ql-toolbar button:hover,
+.ql-snow.ql-toolbar button.ql-active,
+.ql-snow .ql-toolbar button.ql-active,
+.ql-snow.ql-toolbar .ql-picker-label:hover,
+.ql-snow .ql-toolbar .ql-picker-label:hover,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active,
+.ql-snow.ql-toolbar .ql-picker-item:hover,
+.ql-snow .ql-toolbar .ql-picker-item:hover,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected {
+  color: #06c;
+}
+.ql-snow.ql-toolbar button:hover .ql-fill,
+.ql-snow .ql-toolbar button:hover .ql-fill,
+.ql-snow.ql-toolbar button.ql-active .ql-fill,
+.ql-snow .ql-toolbar button.ql-active .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill {
+  fill: #06c;
+}
+.ql-snow.ql-toolbar button:hover .ql-stroke,
+.ql-snow .ql-toolbar button:hover .ql-stroke,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-snow.ql-toolbar button:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar button:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter {
+  stroke: #06c;
+}
+.ql-snow {
+  box-sizing: border-box;
+}
+.ql-snow * {
+  box-sizing: border-box;
+}
+.ql-snow .ql-hidden {
+  display: none;
+}
+.ql-snow .ql-out-bottom,
+.ql-snow .ql-out-top {
+  visibility: hidden;
+}
+.ql-snow .ql-tooltip {
+  position: absolute;
+  transform: translateY(10px);
+}
+.ql-snow .ql-tooltip a {
+  cursor: pointer;
+  text-decoration: none;
+}
+.ql-snow .ql-tooltip.ql-flip {
+  transform: translateY(-10px);
+}
+.ql-snow .ql-formats {
+  display: inline-block;
+  vertical-align: middle;
+}
+.ql-snow .ql-formats:after {
+  clear: both;
+  content: '';
+  display: table;
+}
+.ql-snow .ql-stroke {
+  fill: none;
+  stroke: #444;
+  stroke-linecap: round;
+  stroke-linejoin: round;
+  stroke-width: 2;
+}
+.ql-snow .ql-stroke-miter {
+  fill: none;
+  stroke: #444;
+  stroke-miterlimit: 10;
+  stroke-width: 2;
+}
+.ql-snow .ql-fill,
+.ql-snow .ql-stroke.ql-fill {
+  fill: #444;
+}
+.ql-snow .ql-empty {
+  fill: none;
+}
+.ql-snow .ql-even {
+  fill-rule: evenodd;
+}
+.ql-snow .ql-thin,
+.ql-snow .ql-stroke.ql-thin {
+  stroke-width: 1;
+}
+.ql-snow .ql-transparent {
+  opacity: 0.4;
+}
+.ql-snow .ql-direction svg:last-child {
+  display: none;
+}
+.ql-snow .ql-direction.ql-active svg:last-child {
+  display: inline;
+}
+.ql-snow .ql-direction.ql-active svg:first-child {
+  display: none;
+}
+.ql-snow .ql-editor h1 {
+  font-size: 2em;
+}
+.ql-snow .ql-editor h2 {
+  font-size: 1.5em;
+}
+.ql-snow .ql-editor h3 {
+  font-size: 1.17em;
+}
+.ql-snow .ql-editor h4 {
+  font-size: 1em;
+}
+.ql-snow .ql-editor h5 {
+  font-size: 0.83em;
+}
+.ql-snow .ql-editor h6 {
+  font-size: 0.67em;
+}
+.ql-snow .ql-editor a {
+  text-decoration: underline;
+}
+.ql-snow .ql-editor blockquote {
+  border-left: 4px solid #ccc;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding-left: 16px;
+}
+.ql-snow .ql-editor code,
+.ql-snow .ql-editor pre {
+  background-color: #f0f0f0;
+  border-radius: 3px;
+}
+.ql-snow .ql-editor pre {
+  white-space: pre-wrap;
+  margin-bottom: 5px;
+  margin-top: 5px;
+  padding: 5px 10px;
+}
+.ql-snow .ql-editor code {
+  font-size: 85%;
+  padding-bottom: 2px;
+  padding-top: 2px;
+}
+.ql-snow .ql-editor code:before,
+.ql-snow .ql-editor code:after {
+  content: "\A0";
+  letter-spacing: -2px;
+}
+.ql-snow .ql-editor pre.ql-syntax {
+  background-color: #23241f;
+  color: #f8f8f2;
+  overflow: visible;
+}
+.ql-snow .ql-editor img {
+  max-width: 100%;
+}
+.ql-snow .ql-picker {
+  color: #444;
+  display: inline-block;
+  float: left;
+  font-size: 14px;
+  font-weight: 500;
+  height: 24px;
+  position: relative;
+  vertical-align: middle;
+}
+.ql-snow .ql-picker-label {
+  cursor: pointer;
+  display: inline-block;
+  height: 100%;
+  padding-left: 8px;
+  padding-right: 2px;
+  position: relative;
+  width: 100%;
+}
+.ql-snow .ql-picker-label::before {
+  display: inline-block;
+  line-height: 22px;
+}
+.ql-snow .ql-picker-options {
+  background-color: #fff;
+  display: none;
+  min-width: 100%;
+  padding: 4px 8px;
+  position: absolute;
+  white-space: nowrap;
+}
+.ql-snow .ql-picker-options .ql-picker-item {
+  cursor: pointer;
+  display: block;
+  padding-bottom: 5px;
+  padding-top: 5px;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label {
+  color: #ccc;
+  z-index: 2;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill {
+  fill: #ccc;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
+  stroke: #ccc;
+}
+.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+  display: block;
+  margin-top: -1px;
+  top: 100%;
+  z-index: 1;
+}
+.ql-snow .ql-color-picker,
+.ql-snow .ql-icon-picker {
+  width: 28px;
+}
+.ql-snow .ql-color-picker .ql-picker-label,
+.ql-snow .ql-icon-picker .ql-picker-label {
+  padding: 2px 4px;
+}
+.ql-snow .ql-color-picker .ql-picker-label svg,
+.ql-snow .ql-icon-picker .ql-picker-label svg {
+  right: 4px;
+}
+.ql-snow .ql-icon-picker .ql-picker-options {
+  padding: 4px 0px;
+}
+.ql-snow .ql-icon-picker .ql-picker-item {
+  height: 24px;
+  width: 24px;
+  padding: 2px 4px;
+}
+.ql-snow .ql-color-picker .ql-picker-options {
+  padding: 3px 5px;
+  width: 152px;
+}
+.ql-snow .ql-color-picker .ql-picker-item {
+  border: 1px solid transparent;
+  float: left;
+  height: 16px;
+  margin: 2px;
+  padding: 0px;
+  width: 16px;
+}
+.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
+  position: absolute;
+  margin-top: -9px;
+  right: 0;
+  top: 50%;
+  width: 18px;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before {
+  content: attr(data-label);
+}
+.ql-snow .ql-picker.ql-header {
+  width: 98px;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  content: 'Heading 1';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  content: 'Heading 2';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  content: 'Heading 3';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  content: 'Heading 4';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  content: 'Heading 5';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  content: 'Heading 6';
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
+  font-size: 2em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
+  font-size: 1.5em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
+  font-size: 1.17em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
+  font-size: 1em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
+  font-size: 0.83em;
+}
+.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
+  font-size: 0.67em;
+}
+.ql-snow .ql-picker.ql-font {
+  width: 108px;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item::before {
+  content: 'Sans Serif';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  content: 'Serif';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  content: 'Monospace';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft_YaHei]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft_YaHei]::before {
+  content: '微软雅黑';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Song]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Song]::before {
+  content: '宋体';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Black]::before,
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Black]::before {
+  content: '黑体';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before {
+  font-family: Georgia, Times New Roman, serif;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before {
+  font-family: Monaco, Courier New, monospace;
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft_YaHei]::before {
+  font-family: Georgia, Times New Roman, 'Microsoft YaHei';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Song]::before {
+  font-family: Georgia, Times New Roman, '宋体';
+}
+.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Black]::before {
+  font-family: Georgia, Times New Roman, '黑体';
+}
+.ql-snow .ql-picker.ql-size {
+  width: 98px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item::before {
+  content: 'Normal';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='12']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='12']::before {
+  content: '12';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='14']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='14']::before {
+  content: '14';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='16']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='16']::before {
+  content: '16';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='18']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='18']::before {
+  content: '18';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='20']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='20']::before {
+  content: '20';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='22']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='22']::before {
+  content: '22';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='25']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='25']::before {
+  content: '25';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='28']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='28']::before {
+  content: '28';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='32']::before,
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='32']::before {
+  content: '32';
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='12']::before {
+  font-size: 12px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='14']::before {
+  font-size: 14px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='16']::before {
+  font-size: 16px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='18']::before {
+  font-size: 18px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='20']::before {
+  font-size: 20px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='22']::before {
+  font-size: 22px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='25']::before {
+  font-size: 25px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='28']::before {
+  font-size: 28px;
+}
+.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='32']::before {
+  font-size: 32px;
+}
+.ql-snow .ql-color-picker.ql-background .ql-picker-item {
+  background-color: #fff;
+}
+.ql-snow .ql-color-picker.ql-color .ql-picker-item {
+  background-color: #000;
+}
+.ql-toolbar.ql-snow {
+  border: 1px solid #ccc;
+  box-sizing: border-box;
+  font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif, 'Microsoft YaHei', '宋体', '黑体';
+  padding: 8px;
+}
+.ql-toolbar.ql-snow .ql-formats {
+  margin-right: 15px;
+}
+.ql-toolbar.ql-snow .ql-picker-label {
+  border: 1px solid transparent;
+}
+.ql-toolbar.ql-snow .ql-picker-options {
+  border: 1px solid transparent;
+  box-shadow: rgba(0,0,0,0.2) 0 2px 8px;
+}
+.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label {
+  border-color: #ccc;
+}
+.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+  border-color: #ccc;
+}
+.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,
+.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover {
+  border-color: #000;
+}
+.ql-toolbar.ql-snow + .ql-container.ql-snow {
+  border-top: 0px;
+}
+.ql-snow .ql-tooltip {
+  background-color: #fff;
+  border: 1px solid #ccc;
+  box-shadow: 0px 0px 5px #ddd;
+  color: #444;
+  padding: 5px 12px;
+  white-space: nowrap;
+}
+.ql-snow .ql-tooltip::before {
+  content: "Visit URL:";
+  line-height: 26px;
+  margin-right: 8px;
+}
+.ql-snow .ql-tooltip input[type=text] {
+  display: none;
+  border: 1px solid #ccc;
+  font-size: 13px;
+  height: 26px;
+  margin: 0px;
+  padding: 3px 5px;
+  width: 170px;
+}
+.ql-snow .ql-tooltip a.ql-preview {
+  display: inline-block;
+  max-width: 200px;
+  overflow-x: hidden;
+  text-overflow: ellipsis;
+  vertical-align: top;
+}
+.ql-snow .ql-tooltip a.ql-action::after {
+  border-right: 1px solid #ccc;
+  content: 'Edit';
+  margin-left: 16px;
+  padding-right: 8px;
+}
+.ql-snow .ql-tooltip a.ql-remove::before {
+  content: 'Remove';
+  margin-left: 8px;
+}
+.ql-snow .ql-tooltip a {
+  line-height: 26px;
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-preview,
+.ql-snow .ql-tooltip.ql-editing a.ql-remove {
+  display: none;
+}
+.ql-snow .ql-tooltip.ql-editing input[type=text] {
+  display: inline-block;
+}
+.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
+  border-right: 0px;
+  content: 'Save';
+  padding-right: 0px;
+}
+.ql-snow .ql-tooltip[data-mode=link]::before {
+  content: "Enter link:";
+}
+.ql-snow .ql-tooltip[data-mode=formula]::before {
+  content: "Enter formula:";
+}
+.ql-snow .ql-tooltip[data-mode=video]::before {
+  content: "Enter video:";
+}
+.ql-snow a {
+  color: #06c;
+}
+.ql-container.ql-snow {
+  border: 1px solid #ccc;
+}

+ 24 - 9
components/common/buyOrCar/buyComponent.vue

@@ -25,10 +25,17 @@
               this.$http.post('trade/order/buyNow', [{
                 uuid: this.item.uuid,
                 batchCode: this.item.batchCode,
-                number: this.item.minBuyQty
+                number: this.item.minBuyQty,
+                storeid: this.item.storeid,
+                currencyName: this.item.currencyName
               }])
                 .then(response => {
-                  window.location.href = '/user#/order/pay/' + this.enidfilter(response.data.orderid)
+          //        window.location.href = '/user#/order/pay/' + this.enidfilter(response.data.orderid)
+                  if (response.data.message) {
+                    this.$message.error(response.data.message)
+                  } else {
+                    window.location.href = '/user#/order/pay/' + this.enidfilter(response.data.data.orderid)
+                  }
                 }, err => {
                   console.log(err)
                 })
@@ -37,15 +44,23 @@
               this.$http.post('trade/cart/add', {
                 uuid: this.item.uuid,
                 batchCode: this.item.batchCode,
-                number: this.item.minBuyQty
+                number: this.item.minBuyQty,
+                storeid: this.item.storeid,
+                currencyName: this.item.currencyName
               })
                 .then(response => {
-                  console.log(response.data)
                   if (response.data.success) {
-                    this.$message({
-                      message: '添加购物车成功',
-                      type: 'success'
-                    })
+                    if (response.data.message) {
+                      this.$message({
+                        message: response.data.message,
+                        type: 'success'
+                      })
+                    } else {
+                      this.$message({
+                        message: '添加购物车成功',
+                        type: 'success'
+                      })
+                    }
                   } else {
                     this.$message.error(response.data.message)
                     // console.log(response.data.message)
@@ -127,7 +142,7 @@
   }
 </script>
 
-<style scoped>
+<style>
   /* 物品列表按钮 */
   .btn-buy-now {
     background-color: #5078CB;

+ 1 - 1
components/common/image-upload/imageUpload.vue

@@ -41,7 +41,7 @@
     }
   }
 </script>
-<style scoped>
+<style>
   input[type="file"] {
     display: none;
   }

+ 6 - 6
components/common/page/pageComponent.vue

@@ -9,12 +9,12 @@
       v-if="total/pageSize>=1">
     </el-pagination>
     <ul class="pagination" style="float:right;margin-left:20px;">
-        <li>
-          <input type="text" class="page-number" v-model="nowPage">
-        </li>
-        <li>
-          <a class="page-a" @click="changePage">GO</a>
-        </li>
+      <li>
+        <input type="text" class="page-number" v-model="nowPage">
+      </li>
+      <li>
+        <a class="page-a" @click="changePage">GO</a>
+      </li>
     </ul>
   </div>
 </template>

+ 10 - 1
components/default/Header.vue

@@ -38,7 +38,7 @@
           </template>
           <template v-else>
             <a class="item" @click="onLoginClick()">登录</a>
-            <a class="item" href="http://account.ubtob.com/sso/register">注册</a>
+            <a class="item" @click="onRegisterClick">注册</a>
             <nuxt-link class="item" :to="'/'">商城首页</nuxt-link>
           </template>
           <nuxt-link class="item" to="/help/home">帮助中心</nuxt-link>
@@ -79,10 +79,19 @@
         this.$http.get('/login/page').then(response => {
           if (response.data) {
             this.$router.push('/auth/login')
+     //       window.location.href = response.data.content
           }
         })
         // TODO 待Account Center改版
       },
+      onRegisterClick () {
+        this.$http.get('/register/page').then(response => {
+          if (response.data) {
+        //    this.$router.push('/auth/login')
+            window.location.href = response.data.content
+          }
+        })
+      },
       toggleEnterprises () {
         this.showEnterprises = !this.showEnterprises
       },

+ 0 - 3
components/default/LeaveMessage.vue

@@ -6,6 +6,3 @@
     name: 'leave-message'
   }
 </script>
-<style>
-
-</style>

+ 8 - 5
components/default/RightBar.vue

@@ -28,7 +28,7 @@
         </li>
         <li class="right-bar-item contact-menu">
           <a href="javascript:void(0)" class="title" @click="goWebChat" @mouseenter="getChatCount">
-            <i class="fa fa-comments-o" aria-hidden="true" style="font-size: 18px;color: #FFFFFF;">
+            <i class="fa fa-comments-o" aria-hidden="true" style="color: #FFFFFF;">
             </i>
           </a>
           <div class="sidebar-menu" title="优软互联"><a @click="goWebChat">优软互联<span v-if="user.logged">({{chatCount}})</span></a></div>
@@ -39,13 +39,13 @@
           <a @click="goHistory" class="title" target="_blank">
             <i class="iconfont icon-zuji icon-xlg"></i>
           </a>
-          <div class="sidebar-menu" v-if="!user.logged"><a @click="goHistory" title="浏览记录" target="_blank">浏览记录</a></div>
-          <div class="sidebar-menu" v-if="user.logged && listMe(history).length == 0"><a href="/user#/browsingHistory" title="浏览记录" target="_blank">浏览记录</a></div>
+          <div class="sidebar-menu" v-if="!user.logged"><a @click="goHistory" title="浏览记录">浏览记录</a></div>
+          <div class="sidebar-menu" v-if="user.logged && listMe(history).length == 0"><a href="/user#/browsingHistory" title="浏览记录">浏览记录</a></div>
           <div class="foot-record sidebar-menu" v-if="user.logged && listMe(history).length > 0">
-            <h3><a>浏览历史</a></h3>
+            <h3><a href="/user#/browsingHistory">浏览历史</a></h3>
             <dl>
               <dd v-for="item in listMe(history)">
-                  <a :href="'/store/' + item.storeid + '/' + item.batchCode" :title="item.code" v-text="item.code" v-if="item.status== 1"></a>
+                  <a :href="'/store/' + item.storeid + '/' + item.batchCode" target="_blank" :title="item.code" v-text="item.code" v-if="item.status== 1"></a>
                   <a :title="item.code" v-text="item.code" v-if="item.status== 0" disabled="disabled"></a>
                   <div class="hover-shows">
                       <em :class="{ 'off' : item.status== 0}"></em>
@@ -380,6 +380,9 @@
     text-align: left;
     padding-right: 44px;
   }
+  .right-bar ul li a i{
+    font-size: 20px;
+  }
   .right-bar ul li li a:hover div.foot-record{
     display: inline-block !important;
   }

+ 1 - 1
components/help/helpHeader.vue

@@ -31,7 +31,7 @@
     name: 'helpHeader'
   }
 </script>
-<style>
+<style scoped>
   .user_center {
     width: 100%;
     margin: 0px auto;

+ 12 - 12
components/help/left.vue

@@ -16,17 +16,11 @@
 </template>
 <script>
   // 升序
-  function compare (propertyName) {
-    return function (object1, object2) {
-      let value1 = object1[propertyName]
-      let value2 = object2[propertyName]
-      if (value1 > value2) {
-        return 1
-      } else if (value1 > value2) {
-        return -1
-      } else {
-        return 0
-      }
+  function compare (property) {
+    return function (a, b) {
+      var value1 = a[property]
+      var value2 = b[property]
+      return value1 - value2
     }
   }
   export default {
@@ -41,7 +35,13 @@
     },
     computed: {
       helps () {
-        return this.$store.state.help.snapsho.data.sort(compare('detno'))
+        let list = this.$store.state.help.snapsho.data.sort(compare('detno'))
+        if (list) {
+          for (let i = 0; i < list.length; i++) {
+            list[i].children = list[i].children.sort(compare('detno'))
+          }
+        }
+        return list
       }
     },
     methods: {

+ 90 - 0
components/home/Carousel.vue

@@ -0,0 +1,90 @@
+<template>
+  <div class="carousel" :style="{backgroundColor: activeColor}">
+    <div class="container">
+      <slot></slot>
+      <div class="carousel-container">
+        <div v-swiper:mySwiper="swiperOption">
+          <div class="swiper-wrapper">
+            <div class="swiper-slide" v-for="banner in banners.data">
+              <a :href="banner.hrefUrl" target="_blank">
+                <img :src="banner.pictureUrl"/>
+              </a>
+            </div>
+            <div class="swiper-button-prev"><i class="iconfont icon-arrow-left"></i></div>
+            <div class="swiper-button-next"><i class="iconfont icon-arrow-right"></i></div>
+          </div>
+          <div class="swiper-pagination swiper-pagination-bullets"></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'carousel',
+    data () {
+      return {
+        activeSlide: 0,
+        swiperOption: {
+          autoplay: 6000,
+          pagination: '.swiper-pagination',
+          paginationClickable: true,
+          mousewheelControl: false,
+          effect: 'fade',
+          lazyLoading: true,
+          loop: true,
+          prevButton: '.swiper-button-prev',
+          nextButton: '.swiper-button-next',
+          onTransitionStart: (swiper) => {
+            // 不要通过vue刷新dom,会导致pagination无法刷新
+            // this.activeSlide = swiper.activeIndex
+            if (this.banners.data.length && swiper.activeIndex > this.banners.data.length) {
+              swiper.activeIndex = 1
+            }
+            if (this.banners.data.length && swiper.activeIndex <= 0) {
+              swiper.activeIndex = this.banners.data.length
+            }
+            document.querySelector('.carousel').style.backgroundColor =
+              this.banners.data[swiper.activeIndex - 1].metadata['background-color']
+          }
+        }
+      }
+    },
+    computed: {
+      banners () {
+        return this.$store.state.carousel.banners
+      },
+      activeColor () {
+        return this.banners.data.length ? this.banners.data[this.activeSlide].metadata['background-color'] : null
+      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  @import '~assets/scss/variables';
+
+  $carousel_width: 990px;
+  $carousel_height: 477px;
+
+  .carousel {
+    transition: background-color .3s;
+    position: relative;
+    margin-bottom: $lg-pad;
+
+    .carousel-container {
+      width: $carousel_width;
+      height: $carousel_height;
+      margin-left: 200px;
+      overflow: hidden;
+
+      .swiper-wrapper {
+        .swiper-slide {
+          img {
+            display: block;
+            height: $carousel_height;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 73 - 40
components/messageBoard/MessageBoard.vue

@@ -93,7 +93,7 @@
               </div>
             </div>
           </div>
-            <button class="btn" @click="confirm">提交</button>
+          <button class="btn" @click="confirm">提交</button>
         </div>
       </div>
       <div class="msg-table" v-else-if="!showHistory && user.userUU">
@@ -116,12 +116,8 @@
         </div>
       </div>
       <div class="page" v-if="!showHistory">
-        <page-component
-          :total="messageBoardCurrent.totalElements"
-          :page-size="pageParams.count"
-          :current="pageParams.page"
-          v-on:childEvent="listenPage">
-        </page-component>
+        <page :total="messageBoardCurrent.totalElements" :page-size="pageParams.count"
+              :current="pageParams.page" @childEvent="listenPage"></page>
       </div>
       <div class="msg-slide1" @click="isOpenHistory" v-if="showHistory">
         <i class="fa fa-angle-left"></i><span>留言记录</span>
@@ -134,7 +130,7 @@
 </template>
 <script>
   import ImageUpload from '~components/common/image-upload/imageUpload.vue'
-  import PageComponent from '~components/common/page/pageComponent.vue'
+  import Page from '~components/common/page/pageComponent.vue'
   export default {
     name: 'messageBoard',
     data () {
@@ -157,15 +153,15 @@
     },
     components: {
       ImageUpload,
-      PageComponent
+      Page
     },
     computed: {
-//      messageBoard () {
-//        return this.$store.state.messageBoard.information.data
-//      },
-//      user () {
-//        return this.$store.state.messageBoardIsLogin.login.data
-//      },
+      messageBoardInfo () {
+        return this.$store.state.messageBoard.information.data
+      },
+      logged () {
+        return this.$store.state.option.user.logged
+      },
       user () {
         return this.$store.state.option.user.data
       },
@@ -218,24 +214,61 @@
         this.isEmail = (/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/).test(this.messageBoard.email)
       },
       confirm () {
-        this.$store.dispatch('uploadMessageBoardInformation', {question: this.messageBoard.question, role: this.messageBoard.role, submitTitle: '【优软商城】IC电子元器件现货采购交易平台商城', submitUrl: window.location.href, type: this.messageBoard.type, imgs: this.dialogImageUrl, userTel: '13333333333'})
-        if (this.messageBoard) {
+        if (!this.logged) {
           if (!this.messageBoard.question) {
             this.$message.info('您还没有填写反馈内容')
           } else if (!this.messageBoard.role) {
             this.$message.info('请选择您的身份信息')
           } else if (!this.messageBoard.type) {
             this.$message.info('请选择一种反馈类型')
-          } else if (!this.user) {
-            if (!this.messageBoard.userTel && !this.messageBoard.email) {
-              this.$message.info('请填写任意一种联系方式')
+          } else if (!this.messageBoard.userTel && !this.messageBoard.email) {
+            this.$message.info('请填写任意一种联系方式')
+          } else {
+            console.log(this.isMobile)
+            console.log(this.isEmail)
+            if (this.isMobile === false) {
+              this.$message.info('请输入正确的手机号码')
+            } else if (this.isEmail === false) {
+              this.$message.info('请输入正确的邮箱')
+            } else {
+              this.$store.dispatch('uploadMessageBoardInformation', {
+                question: this.messageBoard.question,
+                role: this.messageBoard.role,
+                submitTitle: '【优软商城】IC电子元器件现货采购交易平台商城',
+                submitUrl: window.location.href,
+                type: this.messageBoard.type,
+                imgs: this.dialogImageUrl,
+                userTel: this.messageBoard.userTel ? this.messageBoard.userTel : '',
+                email: this.messageBoard.email ? this.messageBoard.email : ''
+              })
+              this.isOpendMessage()
+              this.$message.info('感谢您的宝贵意见')
+              this.messageBoard = {}
             }
+          }
+        } else {
+          if (!this.messageBoard.question) {
+            this.$message.info('您还没有填写反馈内容')
+          } else if (!this.messageBoard.role) {
+            this.$message.info('请选择您的身份信息')
+          } else if (!this.messageBoard.type) {
+            this.$message.info('请选择一种反馈类型')
           } else {
-            this.$store.dispatch('uploadMessageBoardInformation', {question: this.messageBoard.question, role: this.messageBoard.role, submitTitle: '【优软商城】IC电子元器件现货采购交易平台商城', submitUrl: window.location.href, type: this.messageBoard.type, imgs: this.dialogImageUrl, userTel: '13333333333'})
-            this.isOpendMessage()
-            this.$message.info('感谢您的宝贵意见')
-//            window.location.reload()
-            this.messageBoard = {}
+            this.$store.dispatch('uploadMessageBoardInformation', {
+              question: this.messageBoard.question,
+              role: this.messageBoard.role,
+              submitTitle: '【优软商城】IC电子元器件现货采购交易平台商城',
+              submitUrl: window.location.href,
+              type: this.messageBoard.type,
+              imgs: this.dialogImageUrl
+            })
+            if (this.messageBoardInfo.question) {
+              this.isOpendMessage()
+              this.$message.info('感谢您的宝贵意见')
+              this.messageBoard = {}
+            } else {
+              this.$message.info('联系方式不可为空,请填写任意一种联系方式')
+            }
           }
         }
       }
@@ -243,21 +276,6 @@
   }
 </script>
 <style scoped>
-  /*分页*/
-  .page {
-    text-align: center;
-  }
-  .page .page-wrap{
-    float: none;
-  }
-  .page-wrap ul, .page-wrap div {
-    float: none !important;
-    display: inline-block;
-    margin: 0;
-  }
-  body,textarea,button.btn{
-    font-family: "MicrosoftYaHei Regual", "微软雅黑" !important;
-  }
   .messageBoard {
     width: 680px;
     font-size: 14px;
@@ -583,4 +601,19 @@
   .radioLabel input[type="radio"]{
     display: none;
   }
+  /*分页*/
+  .page {
+    text-align: center;
+  }
+  .page .page-wrap{
+    float: none;
+  }
+  .page-wrap ul, .page-wrap div {
+    float: none !important;
+    display: inline-block;
+    margin: 0;
+  }
+  body,textarea,button.btn{
+    font-family: "MicrosoftYaHei Regual", "微软雅黑" !important;
+  }
 </style>

+ 1 - 2
components/news/Left.vue

@@ -47,8 +47,7 @@
     }
   }
 </script>
-<style scoped>
-
+<style>
   .hot-news{
     border: 1px solid #e8e8e8;
     width:260px;

+ 1 - 1
components/news/Right.vue

@@ -70,7 +70,7 @@
 
 </script>
 
-<style scoped>
+<style>
   .news-content{
     padding-left: 0;
     float: right;

+ 44 - 8
components/product/BrandList.vue

@@ -26,11 +26,39 @@
 </template>
 
 <script>
+  function sortList (letter) {
+    return function (a, b) {
+      var value1 = a[letter]
+      var value2 = b[letter]
+      if (value1 > value2) {
+        return 1
+      } else if (value1 < value2) {
+        return -1
+      } else {
+        return 0
+      }
+    }
+  }
   export default {
     name: 'brandList',
     computed: {
       brandList () {
-        return this.$store.state.product.brand.brandList.data
+        let brandsList = this.$store.state.product.brand.brandList.data
+        if (brandsList) {
+          for (let i in brandsList) {
+            brandsList[i] = brandsList[i].sort(sortList('nameEn'))
+          }
+        }
+        let temp = {}
+        let keys = []
+        for (let key in brandsList) {
+          keys.push(key)
+        }
+        keys = keys.sort()
+        for (let i = 0; i < keys.length; i++) {
+          temp[keys[i]] = brandsList[keys[i]]
+        }
+        return temp
       }
     }
   }
@@ -41,14 +69,14 @@
   #brandsList {
     clear: both;
     width: 1190px;
-    padding: 0px;
+    padding: 0;
   }
 
   #brandsList .hr-blue {
     border-bottom: 2px solid #6493FF;
-    border-right: 0px;
-    border-top: 0px;
-    border-left: 0px;
+    border-right: 0;
+    border-top: 0;
+    border-left: 0;
     width: 100%;
   }
 
@@ -57,7 +85,7 @@
   }
 
   #brandsList .row {
-    margin: 20px 0px;
+    margin: 20px 0;
   }
 
   #brandsList .row .initial {
@@ -67,7 +95,7 @@
     color: #787878;
   }
 
-  #brandsList .row .initial:hover{
+  #brandsList .row .initial:hover a,#brandsList .row li.initial.active a {
     color: #5078CB;
     font-weight: bold;
     cursor: pointer;
@@ -77,7 +105,15 @@
     color: #5078CB;
     font-weight: bold;
   }
-
+  #brandsList .row .initial a{
+    font-size: 16px;
+    color: #787878;
+  }
+  #brandsList .row .initial:hover a{
+    color: #5078CB;
+    font-weight: bold;
+    cursor: pointer;
+  }
   #brands .container {
     width: 1190px;
     padding: 0px;

+ 0 - 1
components/product/CategoryProperty.vue

@@ -195,7 +195,6 @@
   .clear, .clr {
     clear: both;
   }
-
   /* breadcrumbs */
   .breadcrumbs {
     margin-top: 20px;

+ 21 - 16
components/product/ComponentGoods.vue

@@ -24,12 +24,12 @@
       <tr v-for="compGoods in componentGoods.content">
         <td>
           <!--store/{{compGoods.storeId}}#/batchInfo/{{compGoods.batchCode}}-->
-          <nuxt-link v-if="compGoods.batchCode" :to="`/product/component/${compGoods.uuid}`">
+          <nuxt-link v-if="compGoods.batchCode" :to="`/store/${compGoods.storeId}/${compGoods.batchCode}`" target="_blank">
             <img :src="compGoods.img || '/images/all/default.png'"/>
           </nuxt-link>
           <img v-if="!compGoods.batchCode" :src="compGoods.img || '/images/all/default.png'"/>
           <!--store/{{compGoods.storeId}}#/home-->
-          <nuxt-link :to="'/store/' + compGoods.storeId" class="contact" :title="compGoods.storeName">{{compGoods.storeName}}</nuxt-link>
+          <nuxt-link :to="'/store/' + compGoods.storeId" class="contact" :title="compGoods.storeName" target="_blank">{{compGoods.storeName}}</nuxt-link>
         </td>
         <td class="brand-code">
           <div class="brand"><nuxt-link :to="`/product/brand/${compGoods.brand.uuid}/`" title="compGoods.brand.nameEn">{{compGoods.brand.nameEn}}</nuxt-link></div>
@@ -86,10 +86,12 @@
           </div>
         </td>
         <td>
-          <div v-if="!compGoods.reserve">
+          <div v-show="!compGoods.reserve">
             <span>—</span>
           </div>
-          <buy :item="compGoods"></buy>
+          <div v-if="compGoods.reserve > 0">
+            <buy :item="compGoods"></buy>
+          </div>
         </td>
       </tr>
       <tr v-if="componentGoods.totalElements == 0">
@@ -100,24 +102,21 @@
       </tbody>
     </table>
     <div style="float: right; margin-bottom: 15px;">
-      <el-pagination
-        :current-page.sync="pageParams.page"
-        :page-size="pageParams.count"
-        layout="prev, pager, next, jumper"
-        :total="componentGoods.totalElements"
-        @current-change="handleCurrentChange">
-      </el-pagination>
+      <page :total="componentGoods.totalElements" :page-size="pageParams.count"
+            :current="pageParams.page" @childEvent="handleCurrentChange"></page>
     </div>
   </div>
 </template>
 
 <script>
   import Buy from '~components/common/buyOrCar/buyComponent.vue'
+  import Page from '~components/common/page/pageComponent.vue'
   export default {
     layout: 'mian',
     props: ['brandid', 'propertyJSON'],
     components: {
-      Buy
+      Buy,
+      Page
     },
     data () {
       return {
@@ -148,7 +147,8 @@
         this.pageParams.page = 1
         this.pageCmpGoods(this.pageParams)
       },
-      async pageCmpGoods (pageParams) {
+//      async pageCmpGoods (pageParams) {
+      pageCmpGoods (pageParams) {
         let params = {}
         params.filter = { kindid: pageParams.filter.kindid }
         if (pageParams.filter.brandid && pageParams.filter.brandid !== '') {
@@ -159,13 +159,18 @@
         }
         params.page = pageParams.page
         params.count = pageParams.count
-        let { data } = await this.$http.get('/api/product/product/getCompGoodsByKindid', { params })
-        this.$store.commit('product/component/GET_CMPGOODS_SUCCESS', data)
+//        let { data } = await this.$http.get('/api/product/product/getCompGoodsByKindid', { params })
+//        this.$store.commit('product/component/GET_CMPGOODS_SUCCESS', data)
+        this.$http.get('/api/product/product/getCompGoodsByKindid', { params })
+          .then(response => {
+            this.$store.commit('product/component/GET_CMPGOODS_SUCCESS', response.data)
+          })
       },
       handleCurrentChange (page) {
         this.pageParams.page = page
         this.pageParams.filter.brandid = this.brandid
         this.pageParams.filter.propertyJSON = this.propertyJSON
+        this.pageParams.filter.kindid = this.$route.params.id
         console.log(this.pageParams)
         this.pageCmpGoods(this.pageParams)
       }
@@ -279,7 +284,7 @@
     background-color: #5078cb;
     border-color: #337ab7;
   }
-  <!-- 分页 -->
+  /*<!-- 分页 -->*/
   .el-pagination .el-pager li.active {
     border-color: #5078cb !important;
     background-color: #5078cb !important;

+ 1 - 1
components/product/KindBox.vue

@@ -69,7 +69,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .box {
     margin-bottom: 20px;
   }

+ 1 - 1
components/product/Recommends.vue

@@ -51,7 +51,7 @@
     width: 1190px;
     padding: 0px;
   }
-  #recommends .hr-blue {
+  .hr-blue {
     border-bottom: 2px solid #6493FF;
     border-right: 0px;
     border-top: 0px;

+ 13 - 10
components/product/brand/BrandComponent.vue

@@ -40,17 +40,13 @@
       </tbody>
     </table>
     <div style="float: right;">
-      <el-pagination
-        :current-page.sync="pageParams.page"
-        :page-size="pageParams.count"
-        layout="prev, pager, next, jumper"
-        :total="list.totalElements"
-        @current-change="handleCurrentChange">
-      </el-pagination>
+      <page :total="list.totalElements" :page-size="pageParams.count"
+            :current="pageParams.page" @childEvent="handleCurrentChange"></page>
     </div>
   </div>
 </template>
 <script>
+  import Page from '~components/common/page/pageComponent.vue'
   export default {
     name: 'BrandComponent',
     data () {
@@ -63,6 +59,9 @@
         searchCode: ''
       }
     },
+    components: {
+      Page
+    },
     computed: {
       lists () {
         return this.$store.state.brandComponent.component
@@ -85,9 +84,13 @@
         this.pageParams.page = 1
         this.pageCmpGoods(this.pageParams)
       },
-      async pageCmpGoods (params) {
-        let { data } = await this.$http.get('/api/product/component/list', { params })
-        this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', data)
+//      async pageCmpGoods (params) {
+      pageCmpGoods (params) {
+//        let { data } = await this.$http.get('/api/product/component/list', { params })
+//        this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', data)
+        this.$http.get('/api/product/component/list', { params }).then(response => {
+          this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', response)
+        })
       },
       handleCurrentChange (page) {
         this.pageParams.page = page

+ 12 - 6
components/product/brand/CategoriesList.vue

@@ -102,13 +102,19 @@
         this.pageParams.filter.kindid = data.id
         this.pageCommodity(this.pageParams, this.ids)
       },
-      async pageCommodity (params) {
-        try {
-          let { data } = await this.$http.get('/api/product/component/list', { params })
-          this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', data)
-        } catch (err) {
+//      async pageCommodity (params) {
+      pageCommodity (params) {
+//        try {
+//          let { data } = await this.$http.get('/api/product/component/list', { params })
+//          this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', data)
+//        } catch (err) {
+//          this.$store.commit('brandComponent/GET_COMPONENT_FAILURE', err)
+//        }
+        this.$http.get('/api/product/component/list', { params }).then(response => {
+          this.$store.commit('brandComponent/GET_COMPONENT_SUCCESS', response)
+        }, err => {
           this.$store.commit('brandComponent/GET_COMPONENT_FAILURE', err)
-        }
+        })
       }
     }
   }

+ 6 - 0
components/product/component/ComponentDetail.vue

@@ -207,6 +207,12 @@
     float: left;
     font-size: 14px;
   }
+  .componentDetail .container .component-message .message-body a {
+    color: #337ab7;
+  }
+  .componentDetail .container .component-message .message-body:hover a{
+    color: #23527c;
+  }
   .componentDetail .message-item:first-child {
     padding-left: 0;
   }

+ 3 - 0
components/product/component/StoreInfo.vue

@@ -250,6 +250,9 @@
     vertical-align: middle;
     text-align: center;
   }
+  .storeInfo .goodsList tbody tr td a {
+    color: #474443;
+  }
   .storeInfo .goodsList tbody tr td:hover a{
     color: #474443;
   }

+ 1 - 0
components/provider/Carousel.vue

@@ -58,6 +58,7 @@
     height: $carousel_height;
     transition: background-color .3s;
     position: relative;
+    overflow: hidden;
 
     .swiper-wrapper {
       .swiper-slide {

+ 1 - 1
components/provider/HotCommodity.vue

@@ -62,7 +62,7 @@ export default {
   }
 
   .hot-commodity-box img {
-    width: 238px;
+    width: 226px;
     height: 180px;
     margin-top: 10px;
   }

+ 1 - 1
components/provider/RecommendOriginal.vue

@@ -39,7 +39,7 @@ export default {
 		padding: 0px;
 	}
 
-	#recommends .title-icon {
+  .title-icon {
 	  font-size: 24px;
     color: #323232;
     margin-top: 30px;

+ 12 - 6
components/provider/Suppliers.vue

@@ -87,15 +87,21 @@ export default {
       }
       return description.slice(0, 160)
     },
-    async pageCommodity (pageParams) {
+//    async pageCommodity (pageParams) {
+    pageCommodity (pageParams) {
       pageParams.op = 'pageByType'
 
-      try {
-        let { data } = await this.$http.get('/api/store-service/stores', { params: pageParams })
-        this.$store.commit('provider/stores/GET_STORE_LIST_SUCCESS', data)
-      } catch (err) {
+//      try {
+//        let { data } = await this.$http.get('/api/store-service/stores', { params: pageParams })
+//        this.$store.commit('provider/stores/GET_STORE_LIST_SUCCESS', data)
+//      } catch (err) {
+//        this.$store.commit('provider/stores/GET_STORE_LIST_FAILURE', err)
+//      }
+      this.$http.get('/api/store-service/stores', { params: pageParams }).then(response => {
+        this.$store.commit('provider/stores/GET_STORE_LIST_SUCCESS', response)
+      }, err => {
         this.$store.commit('provider/stores/GET_STORE_LIST_FAILURE', err)
-      }
+      })
     },
     handleCurrentChange (page) {
       this.pageParams.page = page

+ 5 - 1
components/search/GoodList.vue

@@ -115,7 +115,11 @@
               <div v-show="!item.b2cMinDelivery">
                 <span>—</span>
               </div>
-              <div v-if="item.b2cMinDelivery">交期: <span v-text="item.b2cMinDelivery + '-' + item.b2cMaxDelivery"></span></div>
+              <div v-if="item.b2cMinDelivery">交期:
+                <!--<span v-text="item.b2cMinDelivery + '-' + item.b2cMaxDelivery"></span>-->
+                <span v-if="item.b2cMinDelivery != item.b2cMaxDelivery" v-text="item.b2cMinDelivery + '-' + item.b2cMaxDelivery"></span>
+                <span v-if="item.b2cMinDelivery == item.b2cMaxDelivery" v-text="item.b2cMinDelivery"></span>
+              </div>
             </td>
             <td>
               <div v-show="!item.reserve">

+ 85 - 25
components/store/CommodityInfo.vue

@@ -60,16 +60,25 @@
             <div class="com-info form-inline">
               <span class="name">数&nbsp;量</span>:
               <div class="input-group" style="width: 120px">
-                <div class="input-group-addon operate" @click="subNum()" :disabled="!fragment.canAdd">-</div>
+                <div :class="fragment.canSub ? ' input-group-addon operate':'input-group-addon'" @click="fragment.canSub ?subNum():''" :style="!fragment.canSub ?'cursor: not-allowed;':''">-</div>
                 <input type="text" class="form-control" placeholder="数量" v-model="fragment.num" @change="inputNum()"style="padding: 0;min-width: 100px;text-align: center;"/>
-                <div class="input-group-addon operate" @click="addNum()" :disabled="!fragment.canSub">+</div>
+                <div :class="fragment.canAdd ?'input-group-addon operate':'input-group-addon'" @click="fragment.canAdd ?addNum():''" :style="!fragment.canAdd ?'cursor: not-allowed;':''">+</div>
+             <!--   <div class="input-group-addon operate" @click="subNum()">-</div>
+                <input type="text" class="form-control" placeholder="数量" v-model="fragment.num" @change="inputNum()"style="padding: 0;min-width: 100px;text-align: center;"/>
+                <div class="input-group-addon operate" @click="addNum()">+</div>-->
               </div>
               ×
-              <div class="select">
+              <!--<div class="select">
                 <select class="form-control"  :disabled="commodity.currencyName != 'RMB-USD'" v-model="fragment.currency" @change="changeCurrency()">
                   <option value="RMB">RMB</option>
                   <option value="USD">USD</option>
                 </select>
+              </div>-->
+              <div class="select">
+                <span v-if="fragment.currency == 'RMB'">¥</span>
+                <span v-if="fragment.currency == 'USD'">$</span>
+                <span>{{(fragment.prices.rMBPrice || 0)}}</span>
+                <span v-if="fragment.currency == 'RMB'" class="tax"> ( 含税 ) </span>
               </div>
               <span class="money">
@@ -134,6 +143,8 @@ function initFragment (commodity) {
   } else {
     fragment.price = prices.uSDPrice
   }
+  fragment.canAdd = true
+  fragment.canSub = false
   return fragment
 }
 function getFragment (commodity, fragment) {
@@ -155,7 +166,12 @@ export default {
   name: 'commodity-info',
   data () {
     return {
-      fragment: { currency: 'RMB', num: 0, price: 0, canAdd: true }
+      fragment: {
+        currency: 'RMB',
+        num: 0,
+        price: 0,
+        canAdd: true,
+        canSub: true}
     }
   },
   computed: {
@@ -196,32 +212,63 @@ export default {
         this.fragment.price = this.fragment.prices.uSDPrice
       }
     },
-    subNum () {
-      let newNum = this.fragment.num - this.commodity.minPackQty
-      if (newNum >= this.commodity.minBuyQty) {
-        this.fragment.num = newNum
-      } else {
+    changeNum: function (newNum) {
+      let pack = this.commodity.minPackQty
+      let buy = this.commodity.minBuyQty
+      let reserve = this.commodity.reserve
+      if (newNum < buy) {
+        this.$message.error('该商品最少购买' + buy + '件')
+        this.fragment.num = buy
         this.fragment.canSub = false
+        if (this.fragment.num > reserve) {
+          this.$message.error('库存不足')
+          this.fragment.num = reserve - (reserve % pack)
+          this.fragment.canAdd = false
+        } else {
+          if (reserve - this.fragment.num - pack < 0) {
+            this.fragment.canAdd = false
+          } else {
+            this.fragment.canAdd = true
+          }
+        }
+      } else {
+        if (newNum - buy - pack < 0) {
+          this.fragment.canSub = false
+        } else {
+          this.fragment.canSub = true
+        }
+    //    console.log(newNum) 2222
+        if (newNum % pack === 0) {
+          this.fragment.num = newNum
+        } else {
+          this.fragment.num = (Math.floor(newNum / pack) + 1) * pack
+        }
+        if (this.fragment.num > reserve) {
+          this.$message.error('库存不足')
+          this.fragment.num = reserve - (reserve % pack)
+          this.fragment.canAdd = false
+        } else {
+          if (reserve - this.fragment.num - pack < 0) {
+            this.fragment.canAdd = false
+          } else {
+            this.fragment.canAdd = true
+          }
+        }
       }
-      this.fragment.canAdd = true
+      console.log(this.fragment)
+    },
+    subNum () {
+      let newNum = this.fragment.num - this.commodity.minPackQty
+      this.changeNum(newNum)
       getFragment(this.commodity, this.fragment)
     },
     addNum () {
       let newNum = this.fragment.num + this.commodity.minPackQty
-      if (newNum <= this.commodity.reserve) {
-        this.fragment.num = newNum
-      } else {
-        this.fragment.canAdd = false
-      }
-      this.fragment.canSub = true
+      this.changeNum(newNum)
       getFragment(this.commodity, this.fragment)
     },
     inputNum () {
-      if (this.fragment.num < this.commodity.minBuyQty) {
-        this.fragment.num = this.commodity.minBuyQty
-      } else if (this.fragment.num > this.commodity.reserve) {
-        this.fragment.num = this.commodity.reserve
-      }
+      this.changeNum(this.fragment.num)
       getFragment(this.commodity, this.fragment)
     },
     buyNow: function (isBuy, item) {
@@ -411,8 +458,13 @@ export default {
 	.content .com-info .name {
 		letter-spacing: 15px;
 	}
-
-	.commodity-info-detail {
+  .content .com-info a{
+    color: #1162a4;
+  }
+  .content .com-info:hover a{
+    color: #23527c;
+  }
+  .commodity-info-detail {
 		float: left;
 		padding-top: 10px;
 		width: 582px;
@@ -452,8 +504,15 @@ export default {
 
 	.com-info div.select {
 		display: inline-block;
-	}
-
+    font-weight: 600;
+    color: red;
+    font-size: 14px;
+	}
+  .com-info div.select .tax {
+    font-weight: normal;
+    color: black;
+    font-size: 12px;
+  }
 	.com-info .operate {
 		cursor: pointer;
 	}
@@ -466,6 +525,7 @@ export default {
 	.com-info .money {
 		font-weight: 600;
 		color: red;
+    font-size: 14px;
 	}
 
 	.com-info select {

+ 24 - 20
components/store/CommodityList.vue

@@ -37,7 +37,7 @@
             <th width="90">数量</th>
             <th width="90">香港交货<span style="font-size: 12px;">($)</span></th>
             <th width="100">大陆交货<span style="font-size: 12px;">(¥)</span></th>
-            <th width="100">交期</th>
+            <th width="100">交期(天)</th>
             <th width="100">操作</th>
           </tr>
           </thead>
@@ -83,7 +83,11 @@
               <div v-for="price in commodity.prices" v-text="price.rMBPrice"></div>
             </td>
             <td>
-              <div v-if="commodity.b2cMinDelivery">交期:{{commodity.b2cMinDelivery || 0}}-{{commodity.b2cMaxDelivery || 0}}天</div>
+              <div v-if="commodity.b2cMinDelivery">交期:
+                <!--{{commodity.b2cMinDelivery || 0}}-{{commodity.b2cMaxDelivery || 0}}天-->
+                <span v-if="commodity.b2cMinDelivery != commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery + '-' + commodity.b2cMaxDelivery"></span>
+                <span v-if="commodity.b2cMinDelivery == commodity.b2cMaxDelivery" v-text="commodity.b2cMinDelivery"></span>
+              </div>
             </td>
             <td>
               <buy :item="commodity"></buy>
@@ -105,13 +109,8 @@
           </tbody>
         </table>
         <div style="float: right;">
-          <el-pagination
-            :current-page.sync="pageParams.page"
-            :page-size="pageParams.count"
-            layout="prev, pager, next, jumper"
-            :total="commodities.totalElements"
-            @current-change="handleCurrentChange">
-          </el-pagination>
+          <page :total="commodities.totalElements" :page-size="pageParams.count"
+                :current="pageParams.page" @childEvent="handleCurrentChange"></page>
         </div>
       </div>
     </div>
@@ -136,11 +135,13 @@ function getAllLeafIds (kind) {
   }
 }
 import Buy from '~components/common/buyOrCar/buyComponent.vue'
+import Page from '~components/common/page/pageComponent.vue'
 export default {
   name: 'commodity-list',
   props: ['kinds'],
   components: {
-    Buy
+    Buy,
+    Page
   },
   data () {
     return {
@@ -182,17 +183,23 @@ export default {
       this.pageParams.page = 1
       this.pageCommodity(this.pageParams, this.ids, keyword)
     },
-    async pageCommodity (pageParams, kindId, keyword) {
+//    async pageCommodity (pageParams, kindId, keyword) {
+    pageCommodity (pageParams, kindId, keyword) {
       let params = { storeid: this.$route.params.uuid, origin: 'store', kindUuid: kindId, code: keyword }
       params.page = pageParams.page
       params.count = pageParams.count
 
-      try {
-        let { data } = await this.$http.get('/api/commodity/commodities', { params })
-        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', data)
-      } catch (err) {
+//      try {
+//        let { data } = await this.$http.get('/api/commodity/commodities', { params })
+//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', data)
+//      } catch (err) {
+//        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
+//      }
+      this.$http.get('/api/commodity/commodities', { params }).then(response => {
+        this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_SUCCESS', response)
+      }, err => {
         this.$store.commit('shop/storeInfo/GET_STORE_COMMODITY_FAILURE', err)
-      }
+      })
     },
     handleCurrentChange (page) {
       this.pageParams.page = page
@@ -204,7 +211,7 @@ export default {
   }
 }
 </script>
-<style scoped>
+<style>
 /*  产品分类调整*/
   .category-content .el-tree{
     border: none;
@@ -244,9 +251,6 @@ export default {
 .el-tree-node__expand-icon:before{
   content: "\E621";
 }
-  #goods-list-fragment{
-		font-family: "Microsoft Yahei", "微软雅黑";
-	}
 	#goods-list-fragment .category-title {
 		height: 34px;
 		background-color: #5078cb;

+ 3 - 3
components/store/RecommendProduct.vue

@@ -3,7 +3,7 @@
     <div class="recommend-list">
       <ul>
         <li v-for="commodity in commodities">
-          <div class="img"><a href="javascript:void(0);"><img :src="commodity.comImg || '/images/store/common/default.png'"/></a></div>
+          <div class="img"><a href="javascript:void(0);"><img :src="commodity.comImg.startsWith('static')?'/'+commodity.comImg:commodity.comImg"/></a></div>
           <div class="content">
             <p v-text="commodity.comCode">MRFE6S9045NF001</p>
             <p class="color666" v-text="commodity.brandNameCn">PANFAEFQ</p>
@@ -63,10 +63,10 @@
                   console.log(err)
                 })
             } else {
+              console.log(item)
               // this.$store.dispatch('user/addCar', {uuid: item.uuid, batchCode: item.batchCode, number: item.minBuyQty})
-              axios.post('trade/cart/add', {uuid: item.uuid, batchCode: item.batchCode, number: item.minBuyQty})
+              axios.post('trade/cart/add', {uuid: item.comUuid, batchCode: item.batchCode, number: item.minBuyQty, currencyName: item.currency})
                 .then(response => {
-                  console.log(response.data)
                   if (response.data.success) {
                     this.$message({
                       message: '添加购物车成功',

+ 0 - 3
layouts/default.vue

@@ -18,6 +18,3 @@
     }
   }
 </script>
-<style>
-
-</style>

+ 0 - 3
layouts/login.vue

@@ -9,6 +9,3 @@
     name: 'login'
   }
 </script>
-<style>
-
-</style>

+ 10 - 6
layouts/main.vue

@@ -19,12 +19,16 @@
       RightBar,
       MainHeader,
       MainNav
-    },
-    created () {
-     // console.log(window.location.href)
     }
+//    data () {
+//      return {
+//        url: window.location.href
+//      }
+//    },
+//    watch: {
+//      url: function (val, oldVal) {
+//        console.log(val)
+//      }
+//    }
   }
 </script>
-<style>
-
-</style>

+ 0 - 3
layouts/shop.vue

@@ -23,6 +23,3 @@
     }
   }
 </script>
-<style>
-
-</style>

+ 1 - 1
pages/help/helpDetail/_id.vue

@@ -56,7 +56,7 @@
     }
   }
 </script>
-<style>
+<style scoped>
   @import '~assets/scss/help.css';
   .help-center-details .ql-container img {
     max-width: 840px;

+ 6 - 12
pages/help/helpList/_id.vue

@@ -36,17 +36,11 @@
 </template>
 <script>
   // 升序
-  function compare (propertyName) {
-    return function (object1, object2) {
-      let value1 = object1[propertyName]
-      let value2 = object2[propertyName]
-      if (value1 > value2) {
-        return 1
-      } else if (value1 < value2) {
-        return -1
-      } else {
-        return 0
-      }
+  function compare (property) {
+    return function (a, b) {
+      var value1 = a[property]
+      var value2 = b[property]
+      return value1 - value2
     }
   }
   import { left, helpHeader } from '~components/help'
@@ -73,6 +67,6 @@
     }
   }
 </script>
-<style>
+<style scoped>
   @import '~assets/scss/help.css';
 </style>

+ 16 - 2
pages/help/home.vue

@@ -31,6 +31,14 @@
   </div>
 </template>
 <script>
+  // 升序
+  function compare (property) {
+    return function (a, b) {
+      var value1 = a[property]
+      var value2 = b[property]
+      return value1 - value2
+    }
+  }
   import { left, helpHeader } from '~components/help'
   export default {
     name: 'help',
@@ -45,11 +53,17 @@
     },
     computed: {
       helpNav () {
-        return this.$store.state.help.snapsho.data
+        let list = this.$store.state.help.snapsho.data.sort(compare('detno'))
+        if (list) {
+          for (let i = 0; i < list.length; i++) {
+            list[i].children = list[i].children.sort(compare('detno'))
+          }
+        }
+        return list
       }
     }
   }
 </script>
-<style>
+<style scoped>
   @import '~assets/scss/help.css';
 </style>

+ 1 - 1
pages/index.vue

@@ -18,7 +18,7 @@
     fetch ({ store }) {
       return Promise.all([
         store.dispatch('loadFloors'),
-        store.dispatch('loadBanners'),
+        store.dispatch('loadBanners', {type: 'home'}),
         store.dispatch('loadProductKinds', { id: 0 }),
         store.dispatch('loadNewsSnapshot', { page: 1, pageSize: 10 })
       ])

+ 0 - 2
pages/news/_id.vue

@@ -24,5 +24,3 @@
     }
   }
 </script>
-<style scoped>
-</style>

+ 1 - 2
pages/product/original.vue

@@ -17,5 +17,4 @@
     }
   }
 </script>
-<style  scoped>
-</style>
+

+ 2 - 4
pages/provider/factories.vue

@@ -16,10 +16,10 @@ export default {
   layout: 'main',
   fetch ({ store }) {
     return Promise.all([
-      store.dispatch('loadBanners'),
+      store.dispatch('loadBanners', {type: 'Brand'}),
       store.dispatch('provider/loadSalesStore', { isOriginal: true }),
       store.dispatch('provider/loadNewStores', { types: 'ORIGINAL_FACTORY' }),
-      store.dispatch('provider/loadRecommendOriginal'),
+      store.dispatch('provider/loadRecommendOriginal', { types: 'ORIGINAL_FACTORY', num: 5 }),
       store.dispatch('provider/findStoreList', { page: 1, count: 10, types: 'ORIGINAL_FACTORY' })
     ])
   },
@@ -35,5 +35,3 @@ export default {
   }
 }
 </script>
-<style>
-</style>

+ 2 - 2
pages/provider/home.vue

@@ -15,10 +15,10 @@ export default{
   layout: 'main',
   fetch ({ store }) {
     return Promise.all([
-      store.dispatch('loadBanners'),
+      store.dispatch('loadBanners', {type: 'Agent'}),
       store.dispatch('provider/loadSalesStore', { isOriginal: false }),
       store.dispatch('provider/loadNewStores', { types: 'AGENCY-DISTRIBUTION' }),
-      store.dispatch('provider/loadRecommendStores'),
+      store.dispatch('provider/loadRecommendStores', { types: 'AGENCY-DISTRIBUTION', num: 5 }),
       store.dispatch('provider/loadHotComponents')
     ])
   },

+ 0 - 2
pages/provider/list.vue

@@ -22,5 +22,3 @@ export default {
   }
 }
 </script>
-<style>
-</style>

+ 1 - 1
pages/store/_uuid/_batchCode.vue

@@ -21,7 +21,7 @@ export default {
   }
 }
 </script>
-<style scoped>
+<style>
   .container.commodity {
 		width: 1190px;
 		padding-left: 0px;

+ 0 - 3
pages/store/_uuid/description.vue

@@ -18,6 +18,3 @@ export default {
   }
 }
 </script>
-<style>
-
-</style>

+ 0 - 3
pages/user/index.vue

@@ -10,6 +10,3 @@ export default {
   middleware: 'authenticated'
 }
 </script>
-<style>
-
-</style>

+ 0 - 3
pages/vendor/index.vue

@@ -10,6 +10,3 @@ export default {
   middleware: 'authenticated'
 }
 </script>
-<style>
-
-</style>

+ 1 - 1
server.js

@@ -13,7 +13,7 @@ config.dev = !(process.env.NODE_ENV === 'production')
 
 // 请求代理,dev模式下使用,接口服务器如果支持跨域可去掉
 const proxyTable = config.proxyTable
-if (config.dev && proxyTable) {
+if (proxyTable) {
   // 本地代理支持localhost、127.0.0.1等不同地址跨域
   app.use((req, res, next) => {
     res.header('Access-Control-Allow-Origin', '*')

+ 2 - 2
store/index.js

@@ -72,9 +72,9 @@ export const actions = {
       })
   },
   // 获取轮播配置
-  loadBanners ({ commit }) {
+  loadBanners ({ commit }, params = {}) {
     commit('carousel/REQUEST_BANNER')
-    return axios.get('/api/carousel/home%20page%20banner')
+    return axios.get('/api/carousel/' + params.type + '%20' + (params.type === 'home' ? 'page' : 'zone') + '%20banner')
       .then(response => {
         commit('carousel/GET_BANNER_SUCCESS', response.data)
       }, err => {

+ 9 - 11
store/provider.js

@@ -65,21 +65,19 @@ export const actions = {
     })
   },
   // 获取原厂推荐信息
-  loadRecommendOriginal ({ commit }) {
-    let params = { type: 'ORIGINAL_FACTORY' }
+  loadRecommendOriginal ({ commit }, params = {}) {
     commit('storeCms/REQUEST_RECOMMEND_STORE')
-    return axios.get('/api/store-cms/contents/store/5', {
-      params: params
-    }).then(response => {
-      commit('storeCms/GET_RECOMMEND_STORE_SUCCESS', response.data)
-    }, err => {
-      commit('storeCms/GET_RECOMMEND_STORE_FAILURE', err)
-    })
+    return axios.get('/api/store-service/stores/five', { params })
+      .then(response => {
+        commit('storeCms/GET_RECOMMEND_STORE_SUCCESS', response.data)
+      }, err => {
+        commit('storeCms/GET_RECOMMEND_STORE_FAILURE', err)
+      })
   },
   // 获取优秀商家信息
-  loadRecommendStores ({ commit }) {
+  loadRecommendStores ({ commit }, params = {}) {
     commit('storeCms/REQUEST_RECOMMEND_STORE')
-    return axios.get('/api/cms-service/storeIn/5')
+    return axios.get('/api/cms-service/storeIn', { params })
       .then(response => {
         commit('storeCms/GET_RECOMMEND_STORE_SUCCESS', response.data)
       }, err => {