Bladeren bron

feat:更新下

xzh 4 jaren geleden
bovenliggende
commit
266d09a097
100 gewijzigde bestanden met toevoegingen van 949 en 284 verwijderingen
  1. BIN
      mobile/src/assets/images/refactor/about/img_about_age@2x.png
  2. BIN
      mobile/src/assets/images/refactor/agent/banner.jpg
  3. BIN
      mobile/src/assets/images/refactor/agent/banner.png
  4. BIN
      mobile/src/assets/images/refactor/home/plate02-1.jpg
  5. BIN
      mobile/src/assets/images/refactor/home/plate02-2.jpg
  6. BIN
      mobile/src/assets/images/refactor/home/plate02-3.jpg
  7. BIN
      mobile/src/assets/images/refactor/home/plate02-4.jpg
  8. BIN
      mobile/src/assets/images/refactor/home/plate02-5.jpg
  9. BIN
      mobile/src/assets/images/refactor/home/playBtn.png
  10. BIN
      mobile/src/assets/images/refactor/news/banner1.jpg
  11. 1 1
      mobile/src/components/Paging/index.vue
  12. 3 0
      mobile/src/components/browse/index.vue
  13. 47 11
      mobile/src/components/cinvoices/index.vue
  14. 64 0
      mobile/src/components/cinvoices/style.scss
  15. 44 36
      mobile/src/components/citySelect/index.vue
  16. 236 0
      mobile/src/components/citySelect/newModule.vue
  17. 5 5
      mobile/src/components/createInvoice/index.vue
  18. 1 1
      mobile/src/components/editInvoice/edit.vue
  19. 2 2
      mobile/src/components/invoices/index.vue
  20. 131 0
      mobile/src/components/payType/index.vue
  21. 1 1
      mobile/src/lang/en/modules/agent.js
  22. 7 4
      mobile/src/lang/en/modules/conduct.js
  23. 6 5
      mobile/src/lang/en/modules/home.js
  24. 4 1
      mobile/src/lang/en/modules/mall.js
  25. 59 35
      mobile/src/lang/en/modules/news.js
  26. 3 3
      mobile/src/lang/zh/modules/conduct.js
  27. 6 5
      mobile/src/lang/zh/modules/home.js
  28. 4 1
      mobile/src/lang/zh/modules/mall.js
  29. 1 0
      mobile/src/pages/about/index.vue
  30. 4 0
      mobile/src/pages/about/style.scss
  31. 1 1
      mobile/src/pages/account/codeLogin/index.vue
  32. 1 1
      mobile/src/pages/account/forget/components/emailForget.vue
  33. 2 2
      mobile/src/pages/account/forget/components/phoneForget.vue
  34. 1 1
      mobile/src/pages/account/login/index.vue
  35. 1 1
      mobile/src/pages/account/mailRegister/index.vue
  36. 2 2
      mobile/src/pages/account/register/index.vue
  37. 1 0
      mobile/src/pages/account/register/style.scss
  38. 2 1
      mobile/src/pages/agent/index.vue
  39. 10 0
      mobile/src/pages/agent/style.scss
  40. 3 1
      mobile/src/pages/cases/index.vue
  41. 1 0
      mobile/src/pages/cases/style.scss
  42. 3 3
      mobile/src/pages/conduct/subject/index.vue
  43. 2 2
      mobile/src/pages/coreProduct/index.vue
  44. 6 5
      mobile/src/pages/home/components/plate2.vue
  45. 4 9
      mobile/src/pages/home/index.vue
  46. 6 4
      mobile/src/pages/layout/header.vue
  47. 10 0
      mobile/src/pages/layout/style.scss
  48. 1 1
      mobile/src/pages/location/index.vue
  49. 5 4
      mobile/src/pages/news/index.vue
  50. 9 0
      mobile/src/pages/pricedetail/index.vue
  51. 7 3
      mobile/src/pages/purchase/index.vue
  52. 15 0
      mobile/src/pages/purchase/style.scss
  53. 8 1
      mobile/src/pages/purchasezhijia/index.vue
  54. 2 1
      mobile/src/pages/service/plugin/list.vue
  55. 1 1
      mobile/src/pages/service/useimg.vue
  56. 2 9
      mobile/src/pages/userCenter/addressForm/index.vue
  57. 6 2
      mobile/src/pages/userCenter/cart/index.vue
  58. 15 3
      mobile/src/pages/userCenter/confirm/index.vue
  59. 3 2
      mobile/src/pages/userCenter/confirm/style.scss
  60. 4 1
      mobile/src/pages/userCenter/submit/index.vue
  61. 18 0
      mobile/src/pages/userCenter/submit/style.scss
  62. 8 2
      mobile/src/router/index.js
  63. 1 1
      mobile/src/store/language/cn/eight.js
  64. 2 2
      mobile/src/store/language/cn/manage.js
  65. 2 2
      mobile/src/store/language/cn/purchase.js
  66. 1 1
      mobile/src/store/language/cn/purchasezhijia.js
  67. 1 1
      mobile/src/store/language/cn/toast.js
  68. 1 1
      mobile/src/store/language/en/eight.js
  69. 2 2
      mobile/src/store/language/en/purchase.js
  70. 1 1
      mobile/src/store/language/en/purchasezhijia.js
  71. 1 1
      mobile/src/store/language/home_cn.js
  72. 1 1
      mobile/src/store/language/home_en.js
  73. 1 1
      pc/build/webpack.base.conf.js
  74. BIN
      pc/src/assets/images/core-products/banner.png
  75. BIN
      pc/src/assets/images/distributor/banner.jpg
  76. BIN
      pc/src/assets/images/online/house/item-3-en.png
  77. BIN
      pc/src/assets/images/refactor/conductShop/item-2-en.jpg
  78. BIN
      pc/src/assets/images/refactor/mall/ali-pay.png
  79. BIN
      pc/src/assets/images/refactor/mall/cartNoGoods-en.png
  80. BIN
      pc/src/assets/images/refactor/mall/wechat-pay.png
  81. 4 1
      pc/src/lang/en/modules/conduct.js
  82. 6 0
      pc/src/lang/en/modules/home.js
  83. 5 2
      pc/src/lang/zh/modules/conduct.js
  84. 11 1
      pc/src/page/conduct/conductHouse/index.vue
  85. 11 1
      pc/src/page/conduct/conductShop/index.vue
  86. 17 7
      pc/src/page/conduct/conductSubject/index.vue
  87. 13 2
      pc/src/page/coreProducts/index.vue
  88. 1 0
      pc/src/page/distributor/index.vue
  89. 3 2
      pc/src/page/home2/index.vue
  90. 1 1
      pc/src/page/location/index.vue
  91. 26 3
      pc/src/page/mall/cart/index.vue
  92. 3 3
      pc/src/page/mall/confirm/components/addressModule.vue
  93. 6 0
      pc/src/page/mall/confirm/components/invoiceModule.vue
  94. 1 1
      pc/src/page/mall/confirm/index.vue
  95. 12 12
      pc/src/page/mall/kankanPro/index.vue
  96. 21 56
      pc/src/page/service/temp/config.js
  97. 3 2
      pc/src/page/service/temp/use.vue
  98. 1 1
      pc/src/store/language/cn/eight.js
  99. 1 1
      pc/src/store/language/cn/purchase.js
  100. 0 0
      pc/src/store/language/en/eight.js

BIN
mobile/src/assets/images/refactor/about/img_about_age@2x.png


BIN
mobile/src/assets/images/refactor/agent/banner.jpg


BIN
mobile/src/assets/images/refactor/agent/banner.png


BIN
mobile/src/assets/images/refactor/home/plate02-1.jpg


BIN
mobile/src/assets/images/refactor/home/plate02-2.jpg


BIN
mobile/src/assets/images/refactor/home/plate02-3.jpg


BIN
mobile/src/assets/images/refactor/home/plate02-4.jpg


BIN
mobile/src/assets/images/refactor/home/plate02-5.jpg


BIN
mobile/src/assets/images/refactor/home/playBtn.png


BIN
mobile/src/assets/images/refactor/news/banner1.jpg


+ 1 - 1
mobile/src/components/Paging/index.vue

@@ -7,7 +7,7 @@
       :key="page"
       @click="clickHandle(page)"
       :class="{active: index === page}"
-      >{{page}}</a><a class="more" @click="clickHandle(pages[pages.length-1] + 2)" v-if="pages[pages.length-1]+2<=maxPage" >...</a><a @click="clickHandle(maxPage)" v-if="maxPage!==1" :class="{active: index === maxPage}" >{{maxPage}}</a>
+      >{{page}}</a><a class="more" @click="clickHandle(pages[pages.length-1] + 2)" v-if="maxPage.length>1 && pages[pages.length-1]+2<=maxPage" >...</a><a @click="clickHandle(maxPage)" v-if="maxPage!==1" :class="{active: index === maxPage}" >{{maxPage}}</a>
       <i class="iconfont icon-youjiantou" @click="clickHandle(index + 1)" v-show="index != maxPage" ></i>
   </div>
 </template>

+ 3 - 0
mobile/src/components/browse/index.vue

@@ -108,6 +108,9 @@ export default {
 .swiper-pagination-bullet-active{
   background: #1fe4dc!important;
 }
+.swiper-pagination-bullet {
+  background: #ebebeb;
+}
 .video-bg {
   width: 100%;
   height: 100%;

+ 47 - 11
mobile/src/components/cinvoices/index.vue

@@ -41,9 +41,9 @@
         </div>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title">税务登记号</div>
+            <div class="top-title">纳税人识别号</div>
             <div class="ant-input">
-              <input @blur="blurHandle" oninput="value=value.replace(/[^\d]/g,'')" maxlength='18' v-model="tempInvoice3.code" type="text" placeholder="请输入18位税务登记号" />
+              <input @blur="blurHandle" oninput="value=value.replace(/[^\d]/g,'')" maxlength='18' v-model="tempInvoice3.code" type="text" placeholder="请输入18位纳税人识别号" />
             </div>
           </div>
         </div>
@@ -79,6 +79,10 @@
             </div>
           </div>
         </div>
+        <div class="wenxin-tip">
+          <p>{{$t('mall.wenxinTip')}}:</p>
+          <p>{{$t('mall.wenxinTipContent')}}</p>
+        </div>
         <button @click="saveInvoice" type="submit" class="ant-btn ant-btn-primary">
           <span>保 存</span>
         </button>
@@ -111,28 +115,46 @@
       <template v-else>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title">发票抬头</div>
+            <div class="top-title">电子邮箱</div>
             <div class="ant-input">
-              <input @blur="blurHandle" maxlength='15' v-model="tempInvoice2.title" type="text" placeholder="请输入发票抬头" />
+              <input @blur="blurHandle" v-model="tempInvoice2.emailAddress" type="text" placeholder="请输入电子邮箱" />
             </div>
           </div>
         </div>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title no-require">税务登记号</div>
-            <div class="ant-input">
-              <input @blur="blurHandle" oninput="value=value.replace(/[^\d]/g,'')" maxlength='18' v-model="tempInvoice2.code" type="text" placeholder="请输入18位税务登记号" />
+            <div class="top-title">抬头类型</div>
+            <div style="position: relative;">
+              <div class="invoice-select" @click="selected=!selected">
+              <div class="select-txt">{{ selectedTxt }}</div>
+              <i class="iconfont icon-xia"></i>
+            </div>
+            <ul class="invoice-item" :class="{'invoice-active':selected}">
+              <li v-for="(item,i) in invoiceType" :key="i" @click="handleItem(item)">{{item}}</li>
+            </ul>
             </div>
           </div>
         </div>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title">电子邮箱</div>
+            <div class="top-title">发票抬头</div>
             <div class="ant-input">
-              <input @blur="blurHandle" v-model="tempInvoice2.emailAddress" type="text" placeholder="请输入电子邮箱" />
+              <input @blur="blurHandle" maxlength='15' v-model="tempInvoice2.title" type="text" placeholder="请输入发票抬头" />
             </div>
           </div>
         </div>
+        <div class="address-input-item" v-if="selectedTxt === '企业'">
+          <div class="address-sub">
+            <div class="top-title no-require">纳税人识别号</div>
+            <div class="ant-input">
+              <input @blur="blurHandle" oninput="value=value.replace(/[^\d]/g,'')" maxlength='18' v-model="tempInvoice2.code" type="text" placeholder="请输入18位纳税人识别号" />
+            </div>
+          </div>
+        </div>
+        <div class="wenxin-tip">
+          <p>{{$t('mall.wenxinTip')}}:</p>
+          <p>{{$t('mall.wenxinTipContent')}}</p>
+        </div>
         <button @click="saveInvoice" type="submit" class="ant-btn ant-btn-primary">
           <span>保 存</span>
         </button>
@@ -177,7 +199,10 @@ export default {
   data () {
     return {
       isShowInvoice3: true,
-      isShowInvoice2: true
+      isShowInvoice2: true,
+      selected: false,
+      invoiceType: ['个人', '企业'],
+      selectedTxt: '个人'
     }
   },
   watch: {
@@ -265,7 +290,7 @@ export default {
             val: title
           },
           {
-            name: '税务登记号',
+            name: '纳税人识别号',
             En: 'Code',
             val: code
           },
@@ -323,6 +348,10 @@ export default {
             }
           })
         })
+    },
+    handleItem (item) {
+      this.selectedTxt = item
+      this.selected = false
     }
   }
 }
@@ -330,4 +359,11 @@ export default {
 
 <style lang="scss" scoped>
 @import "./style.scss";
+.wenxin-tip {
+  padding: 8px 10px;
+  background: #f7f7f7;
+  font-size: 10px;
+  color: #202020;
+  line-height: 15px;
+}
 </style>

+ 64 - 0
mobile/src/components/cinvoices/style.scss

@@ -202,4 +202,68 @@
       margin-bottom: 8px;
     }
   }
+}
+.invoice-con{
+  position: relative;
+  .iconfont{
+    position: absolute;
+    right: 11px;
+    top: 50%;
+    transform: translateY(-50%);
+    transition: all .15s cubic-bezier(.645,.045,.355,1);
+  }
+  .invoice-select{
+    display: block;
+    margin-top: 8px;
+    box-sizing: border-box;
+    background-color: #fff;
+    border: 1px solid #EBEBEB;
+    border-radius: 4px;
+    outline: none;
+    transition: all .3s cubic-bezier(.645,.045,.355,1);
+    user-select: none;
+    height: 48px;
+    padding: 0 11px;
+    position: relative;
+    .select-txt{
+      height: 48px;
+      line-height: 48px;
+      font-size: 12px;
+      color: #202020;
+    }
+  }
+  .invoice-item{
+    position: absolute;
+    top: 56px;
+    background: #fff;
+    width: 100%;
+    box-shadow: 0 0 8px rgba(0,0,0,.2);
+    border-radius: 4px;
+    z-index: 99999;
+    transition: all .15s cubic-bezier(.645,.045,.355,1);
+    max-height: 0;
+    overflow: hidden;
+    li{
+      padding: 0 11px;
+      line-height: 30px;
+      height: 30px;
+      font-size: 12px;
+      color: #202020;
+    }
+  }
+  .invoice-active{
+    max-height: 100px;
+  }
+}
+.invoice-focus{
+  .invoice-select{
+    border-color: #1fe4dc; 
+    border-right-width: 1px!important;
+    outline: 0;
+    box-shadow: 0 0 0 2px rgba(31,228,220,.2);
+  }
+  .iconfont{
+    top: 52%;
+    transform: translateY(-50%) rotate(180deg);
+  }
 }

+ 44 - 36
mobile/src/components/citySelect/index.vue

@@ -3,15 +3,13 @@
     <div class="address-input-con">
       <div class="address-input-item">
         <div class="address-sub address-name">
-          <div class="top-title">{{ $t('mall.receiver') }}</div>
+          <div class="top-title">{{langAccount.placeholder.name}}</div>
           <div class="ant-input">
-            <input v-model="tempAddress.shipName" type="text" :placeholder="langAccount.placeholder.name" maxlength="10" />
+            <input v-model="tempAddress.shipName" type="text" :placeholder="langAccount.placeholder.name" />
           </div>
         </div>
-      </div>
-      <div class="address-input-item">
         <div class="address-sub address-phone">
-          <div class="top-title">{{ $t('mall.phone') }}</div>
+          <div class="top-title">{{langAccount.placeholder.phone}}</div>
           <div class="ant-input">
             <input v-model="tempAddress.shipMobile" oninput="value=value.replace(/[^\d]/g,'')" maxlength='11' type="text" :placeholder="langAccount.placeholder.phone" />
           </div>
@@ -19,7 +17,7 @@
       </div>
       <div class="address-input-item">
         <div class="address-sub prov-name">
-          <div class="top-title">{{$t('mall.receiveAddress')}}</div>
+          <div class="top-title">{{langAccount.placeholder.prov}}</div>
           <div class="ant-input prov" @click="handleSelect('prov')">
             {{citylist[currentPID]['p']||'省份'}}
             <ul v-if="prov">
@@ -27,8 +25,8 @@
             </ul>
           </div>
         </div>
-        <div class="address-sub prov-name">
-          <div class="top-title notrequired"></div>
+        <div class="address-sub city-phone">
+          <div class="top-title">{{langAccount.placeholder.city}}</div>
           <div class="ant-input city" @click="handleSelect('city')">
             {{currentProv[currentCID]['n']||'城市'}}
             <ul v-if="city">
@@ -36,35 +34,28 @@
             </ul>
           </div>
         </div>
-        <div class="address-sub prov-name" @click="handleSelect('dist')">
-          <div class="top-title notrequired"></div>
-          <div class="ant-input city" @click="handleSelect('dist')">
+      </div>
+      <div class="address-input-item">
+        <div class="address-sub">
+          <div class="top-title">{{langAccount.placeholder.address}}</div>
+          <div class="ant-input dist" @click="handleSelect('dist')">
             {{currentCity[currentSID]['s']||'区/县'}}
             <ul v-if="dist">
               <li v-for="(item,i) in currentCity" :key="i" @click="handleClick('currentSID',i)">{{item.s}}</li>
             </ul>
           </div>
-        </div>
-      </div>
-      <div class="address-input-item">
-        <div class="address-sub">
-          <!-- <div class="top-title">{{langAccount.placeholder.address}}</div> -->
           <div class="ant-input">
-            <input v-model="tempAddress.shipAddress" type="text" :placeholder="langAccount.placeholder.address" maxlength="50" />
+            <input v-model="tempAddress.shipAddress" type="text" :placeholder="langAccount.placeholder.address" />
           </div>
         </div>
       </div>
-      <div class="address-input-item">
-        <p class="p-dec">{{ langAccount.recaddress }}</p>
-      </div>
-      <div class="actions-w">
-        <button type="submit" class="ant-btn ant-btn-primary cancel" @click="$emit('cancle', true)">
-          <span>{{langAccount.cancel}}</span>
-        </button>
-        <button type="submit" class="ant-btn ant-btn-primary" @click="uAddress">
-          <span>{{langAccount.save}}</span>
-        </button>
-      </div>
+      <p class="p-dec">{{langAccount.recaddress}}</p>
+      <button type="submit" class="ant-btn ant-btn-primary" @click="uAddress">
+        <span>{{langAccount.save}}</span>
+      </button>
+      <button type="submit" class="ant-btn ant-btn-primary cancel" @click="$emit('closeSelect', true)">
+        <span>{{langAccount.cancel}}</span>
+      </button>
     </div>
   </div>
 </template>
@@ -118,9 +109,9 @@ export default {
       prov: false,
       city: false,
       dist: false,
-      currentPID: idArr[0] || 18,
-      currentCID: idArr[1] || 3,
-      currentSID: idArr[2] || 2,
+      currentPID: idArr[0] !== '' ? idArr[0] : 18,
+      currentCID: idArr[1] !== '' ? idArr[1] : 3,
+      currentSID: idArr[2] !== '' ? idArr[2] : 2,
       areaPath: cloneObj(this.address.areaPath)
     }
   },
@@ -145,6 +136,8 @@ export default {
   watch: {
     currentProv () {
       this.currentCID = 0
+    },
+    currentCID () {
       this.currentSID = 0
     }
   },
@@ -159,8 +152,7 @@ export default {
         province,
         city,
         shipMobile,
-        shipName,
-        id
+        shipName
       } = this.tempAddress
 
       let isObject = function (obj) {
@@ -173,8 +165,7 @@ export default {
         province,
         city,
         shipMobile,
-        shipName,
-        id
+        shipName
       }
       let test = Object.keys(params)
       for (let i = 0; i < test.length; i++) {
@@ -182,7 +173,24 @@ export default {
           return this.$toast.show('warn', this.langAccount.fill)
         }
       }
-      this.$emit('submit', params)
+      params['id'] = this.address.id
+      let url = this.address.id ? 'updateAddress' : 'insertAddress'
+      this.$http
+        .post(`/user/${url}`, params, {
+          headers: {
+            token: this.token
+          }
+        })
+        .then(data => {
+          let res = data.data
+          if (res.code === 0) {
+            this.$emit('closeSelect', true)
+            this.$store.dispatch('getInfo', {
+              url: '/user/getReceiverInfo',
+              name: 'address'
+            })
+          }
+        })
     },
     handleSelect (item) {
       sle.forEach(i => {

+ 236 - 0
mobile/src/components/citySelect/newModule.vue

@@ -0,0 +1,236 @@
+<template>
+  <div class="select-layout">
+    <div class="address-input-con">
+      <div class="address-input-item">
+        <div class="address-sub address-name">
+          <div class="top-title">{{ $t('mall.receiver') }}</div>
+          <div class="ant-input">
+            <input v-model="tempAddress.shipName" type="text" :placeholder="langAccount.placeholder.name" maxlength="10" />
+          </div>
+        </div>
+      </div>
+      <div class="address-input-item">
+        <div class="address-sub address-phone">
+          <div class="top-title">{{ $t('mall.phone') }}</div>
+          <div class="ant-input">
+            <input v-model="tempAddress.shipMobile" oninput="value=value.replace(/[^\d]/g,'')" maxlength='11' type="text" :placeholder="langAccount.placeholder.phone" />
+          </div>
+        </div>
+      </div>
+      <div class="address-input-item">
+        <div class="address-sub prov-name">
+          <div class="top-title">{{$t('mall.receiveAddress')}}</div>
+          <div class="ant-input prov" @click="handleSelect('prov')">
+            {{citylist[currentPID]['p']||'省份'}}
+            <ul v-if="prov">
+              <li v-for="(item,i) in citylist" :key="i" @click="handleClick('currentPID',i)">{{item.p}}</li>
+            </ul>
+          </div>
+        </div>
+        <div class="address-sub prov-name">
+          <div class="top-title notrequired"></div>
+          <div class="ant-input city" @click.stop="handleSelect('city')">
+            {{currentProv[currentCID]['n']||'城市'}}
+            <ul v-if="city">
+              <li v-for="(item,i) in currentProv" :key="i" @click="handleClick('currentCID',i)">{{item.n}}</li>
+            </ul>
+          </div>
+        </div>
+        <div class="address-sub prov-name">
+          <div class="top-title notrequired"></div>
+          <div class="ant-input city" @click.stop="handleSelect('dist')">
+            {{currentCity[currentSID]['s']||'区/县'}}
+            <ul v-if="dist">
+              <li v-for="(item,i) in currentCity" :key="i" @click="handleClick('currentSID',i)">{{item.s}}</li>
+            </ul>
+          </div>
+        </div>
+      </div>
+      <div class="address-input-item">
+        <div class="address-sub">
+          <!-- <div class="top-title">{{langAccount.placeholder.address}}</div> -->
+          <div class="ant-input">
+            <input v-model="tempAddress.shipAddress" type="text" :placeholder="langAccount.placeholder.address" maxlength="50" />
+          </div>
+        </div>
+      </div>
+      <div class="address-input-item">
+        <p class="p-dec">{{ langAccount.recaddress }}</p>
+      </div>
+      <div class="actions-w">
+        <button type="submit" class="ant-btn ant-btn-primary cancel" @click="$emit('cancle', true)">
+          <span>{{langAccount.cancel}}</span>
+        </button>
+        <button type="submit" class="ant-btn ant-btn-primary" @click="uAddress">
+          <span>{{langAccount.save}}</span>
+        </button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { citylist } from './city'
+import { mapState } from 'vuex'
+
+let sle = ['prov', 'city', 'dist']
+var cloneObj = function (obj) {
+  var newObj = {}
+  if (obj instanceof Array) {
+    newObj = []
+  }
+  for (var key in obj) {
+    var val = obj[key] || ''
+    newObj[key] = typeof val === 'object' ? cloneObj(val) : val
+  }
+  return newObj
+}
+export default {
+  props: ['address', 'token'],
+  data () {
+    let idArr = ['', '', '']
+    if (this.address.shipAreaPath) {
+      let tempArr = this.address.shipAreaPath.split(',')
+      let [p, c, d] = tempArr
+      idArr = (() => {
+        let tmp = []
+        citylist.forEach((item, index) => {
+          if (item.p === p) {
+            tmp.push(index)
+            item.c.forEach((t2, i2) => {
+              if (t2.n === c) {
+                tmp.push(i2)
+                t2.a.forEach((t3, i3) => {
+                  if (t3.s === d) {
+                    tmp.push(i3)
+                  }
+                })
+              }
+            })
+          }
+        })
+        return tmp
+      })()
+    }
+
+    return {
+      citylist,
+      prov: false,
+      city: false,
+      dist: false,
+      currentPID: idArr[0] || 18,
+      currentCID: idArr[1] || 3,
+      currentSID: idArr[2] || 2,
+      areaPath: cloneObj(this.address.areaPath)
+    }
+  },
+  computed: {
+    ...mapState({
+      langAccount: state => state.language.home.manage.account
+    }),
+    tempAddress: function () {
+      return cloneObj(this.address)
+    },
+
+    currentProv: function () {
+      let tmp = this.citylist[this.currentPID]
+      return tmp.c
+    },
+    currentCity: function () {
+      let cprov = this.citylist[this.currentPID]
+      let tmp = cprov.c[this.currentCID]
+      return tmp.a
+    }
+  },
+  watch: {
+    currentProv () {
+      this.currentCID = 0
+      this.currentSID = 0
+    }
+  },
+  methods: {
+    uAddress () {
+      this.tempAddress.province = this.areaPath[0]
+      this.tempAddress.city = this.areaPath[1]
+      this.tempAddress.shipAreaPath = this.areaPath.join(',')
+      let {
+        shipAddress,
+        shipAreaPath,
+        province,
+        city,
+        shipMobile,
+        shipName,
+        id
+      } = this.tempAddress
+
+      let isObject = function (obj) {
+        return JSON.stringify(obj) === '{}' ? '' : obj
+      }
+
+      let params = {
+        shipAddress,
+        shipAreaPath,
+        province,
+        city,
+        shipMobile,
+        shipName,
+        id
+      }
+      let test = Object.keys(params)
+      for (let i = 0; i < test.length; i++) {
+        if (!isObject(params[test[i]])) {
+          return this.$toast.show('warn', this.langAccount.fill)
+        }
+      }
+      params['id'] = this.address.id
+      let url = this.address.id ? 'updateAddress' : 'insertAddress'
+      this.$http
+        .post(`/user/${url}`, params, {
+          headers: {
+            token: this.token
+          }
+        })
+        .then(data => {
+          let res = data.data
+          if (res.code === 0) {
+            this.$emit('closeSelect', true)
+            this.$store.dispatch('getInfo', {
+              url: '/user/getReceiverInfo',
+              name: 'address'
+            })
+            this.$emit('submit', params)
+          }
+        })
+    },
+    handleSelect (item) {
+      sle.forEach(i => {
+        console.log(i, item)
+        if (i === item) {
+          this[i] = !this[i]
+        } else {
+          this[i] = false
+        }
+      })
+    },
+    handleClick (id, i) {
+      this[id] = i
+      this.handleChange()
+    },
+    handleChange () {
+      setTimeout(() => {
+        let prov = this.citylist[this.currentPID]
+        let city = prov.c[this.currentCID]
+        let dist = city.a[this.currentSID]
+        this.areaPath = [prov.p, city.n, dist.s]
+      })
+    }
+  },
+  mounted () {
+    this.handleChange()
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import './style.scss';
+</style>

+ 5 - 5
mobile/src/components/createInvoice/index.vue

@@ -69,9 +69,9 @@
         </div>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title">税务登记号</div>
+            <div class="top-title">纳税人识别号</div>
             <div class="ant-input">
-              <input v-model="tempInvoice3.code" oninput="value=value.replace(/[^\w\.\/]/ig,'')" maxlength='18' type="text" placeholder="请输入18位税务登记号" />
+              <input v-model="tempInvoice3.code" oninput="value=value.replace(/[^\w\.\/]/ig,'')" maxlength='18' type="text" placeholder="请输入18位纳税人识别号" />
             </div>
           </div>
         </div>
@@ -119,9 +119,9 @@
         </div>
         <div class="address-input-item">
           <div class="address-sub">
-            <div class="top-title no-require" >税务登记号</div>
+            <div class="top-title no-require" >纳税人识别号</div>
             <div class="ant-input">
-              <input v-model="tempInvoice2.code" type="text" oninput="value=value.replace(/[^\w\.\/]/ig,'')" maxlength='18' placeholder="请输入18位税务登记号" />
+              <input v-model="tempInvoice2.code" type="text" oninput="value=value.replace(/[^\w\.\/]/ig,'')" maxlength='18' placeholder="请输入18位纳税人识别号" />
             </div>
           </div>
         </div>
@@ -413,7 +413,7 @@ export default {
             val: title
           },
           {
-            name: '税务登记号',
+            name: '纳税人识别号',
             En: 'Code',
             val: code
           },

+ 1 - 1
mobile/src/components/editInvoice/edit.vue

@@ -236,7 +236,7 @@ export default {
             val: title
           },
           {
-            name: '税务登记号',
+            name: '纳税人识别号',
             En: 'Code',
             val: code
           },

+ 2 - 2
mobile/src/components/invoices/index.vue

@@ -27,7 +27,7 @@
         <div class="address-sub">
           <div class="top-title">税号</div>
           <div class="ant-input" >
-            <input @blur="blurHandle" v-model="tempInvoice3.code" type="text" placeholder="请输入税务登记号" />
+            <input @blur="blurHandle" v-model="tempInvoice3.code" type="text" placeholder="请输入纳税人识别号" />
           </div>
         </div>
       </div>
@@ -83,7 +83,7 @@
         <div class="address-sub">
           <div class="top-title">税号</div>
           <div class="ant-input" >
-            <input @blur="blurHandle" v-model="tempInvoice2.code" type="text" placeholder="税务登记号" />
+            <input @blur="blurHandle" v-model="tempInvoice2.code" type="text" placeholder="纳税人识别号" />
           </div>
         </div>
       </div>

+ 131 - 0
mobile/src/components/payType/index.vue

@@ -0,0 +1,131 @@
+<template>
+  <div class="paytype-layout">
+    <div class="paytype-session">
+      <div class="paytype">
+        <div class="common-sub-header no-border">
+          支付方式
+        </div>
+        <div class="pay-item" v-for="(item,i) in data" :key="i" @click="goPay(item)">
+          <img :src="item.img" alt="">
+          <span>{{item.name}}</span>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+import browser from '@/util/browser'
+
+export default {
+  computed: {
+    ...mapState({
+      info: state => state.user.info,
+      payinfo: state => {
+        let type = Object.prototype.toString.call(state.user.payinfo)
+        if (type === '[object Object]') {
+          return state.user.payinfo
+        }
+        let condition = state.user.payinfo && state.user.payinfo !== 'null' && type !== '[object Array]'
+        return condition ? JSON.parse(state.user.payinfo) : {}
+      }
+    })
+  },
+  data () {
+    let data = [{
+      name: '支付宝',
+      img: require('@/assets/images/refactor/userCenter/ali_pay.png'),
+      id: 1
+    }, {
+      id: 0,
+      name: '微信支付',
+      img: require('@/assets/images/refactor/userCenter/wx_pay.png')
+    }]
+    let weichatdata = [{
+      id: 0,
+      name: '微信支付',
+      img: require('@/assets/images/refactor/userCenter/wx_pay.png')
+    }]
+    return {
+      data: browser.weixin ? weichatdata : data
+    }
+  },
+  methods: {
+    goPay (item) {
+      let temp = this.payinfo
+      temp['payType'] = item.id
+      temp['payTypeName'] = item.name
+
+      this.$store.commit('PAYINFO', temp)
+      this.$emit('change', temp)
+      // this.$router.push({path: '/submit'})
+    },
+    getSum () {
+      let sum = 0
+      let count = 0
+      this.payinfo.goods.forEach(item => {
+        sum += item.goodsCount * item.price
+        count += item.goodsCount
+      })
+      return [count, sum]
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+// @import './style.scss';
+.paytype-header {
+  padding: 27px 20px 17px;
+  text-align: center;
+  font-size: 14px;
+  font-weight: bold;
+  line-height: 21px;
+  border-bottom: 1px solid #EBEBEB;
+  position: relative;
+  .back {
+    position: absolute;
+    left: 20px;
+    top: 27px;
+  }
+}
+.paytype-session {
+}
+.common-sub-header {
+  color: #202020;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 18px;
+  padding: 17px 0 11px;
+  border-bottom: 1px solid #EBEBEB;
+  &.no-border {
+    border-bottom: none;
+  }
+}
+.pay-item {
+  height: 40px;
+  display: flex;
+  width: 100%;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 10px;
+  padding: 0 10px;
+  border: 1px solid #EBEBEB;
+  color: #202020;
+  img {
+    height: 28px;
+  }
+}
+.order-money {
+  margin-top: 17px;
+  font-size: 12px;
+  line-height: 18px;
+}
+.total_num {
+  color: #1FE4DC;
+  font-size: 16px;
+  line-height: 18px;
+  font-weight: bold;
+}
+</style>

+ 1 - 1
mobile/src/lang/en/modules/agent.js

@@ -1,5 +1,5 @@
 module.exports = {
-    "bannerTitle": "Become a distributor of 4DKanKan",
+    "bannerTitle": "Become a distributor<br/>of 4DKanKan",
     "planTitle": "Outline of 4DKanKan Distributor Program",
     "planDesc1": "The Patented AI Space Reconstruction Algorithm Technology from 4Dage Has Won Numerous Awards and Has Reconstructed More than 300,000 Space Models Worldwide.",
     "planDesc2": "This Innovative Approach of Space Reconstruction Is Gradually Changing the Business Model of Various Industries (Real-estate, Architecture, Museum, Tourism, Jounalist, Insurance Claims, Criminal Investigation, Etc.).",

+ 7 - 4
mobile/src/lang/en/modules/conduct.js

@@ -13,14 +13,14 @@ module.exports = {
     "coreTech": {
         "bannerTitle": "Technology",
         "itemTitle1": "Space Digitization",
-        "itemText1": "Record and calculate the spatial position of the camera when shooting, and extract the corresponding 3D point cloud, so as to obtain the real situation of 3D space",
+        "itemText1": "Record and calculate the spatial position of the camera when shooting, and extract the corresponding 3D point cloud, so as to obtain the real situation of 3D space.",
         "itemTitle2": "Space Interaction",
-        "itemText2": "Automatic tour with preset route, panoramic and box videos enhance the interaction, different forms of dynamic hot-spot, let the space tell the story",
+        "itemText2": "Automatic tour with preset route, panoramic and box videos enhance the interaction, different forms of dynamic hot-spot, let the space tell the story.",
         "item2Name1": "Dynamic Hot-spot",
         "item2Name2": "Interactive Video",
         "item2Name3": "Automatic Tour",
         "itemTitle3": "Space Display",
-        "itemText3": "Offers a 720° Immersive Roaming Experience on Mobile Phone, Tablet, PC and VR Glasses without Plug-ins",
+        "itemText3": "Offers a 720° Immersive Roaming Experience on Mobile Phone, Tablet, PC and VR Glasses without Plug-ins.",
         "item3Name1": "VR",
         "item3Name2": "PC",
         "item3Name3": "Mobile"
@@ -48,7 +48,10 @@ module.exports = {
         "itemTitle2": "Various Forms of Spatial Interaction, Carrying Rich Historical Heritage",
         "itemTitle3": "Simultaneous Operation by Multi-user, Listening to Historical Stories",
         "itemTitle4": "Promote Social Science Education and Help Cultural Communication",
-        caseTitle: 'Showcases'
+        caseTitle: 'Showcases',
+        item5SubItem1Title: 'Hetjens- German Museum of Ceramics',
+        item5SubItem2Title: 'Liangjiahe Digital Museum',
+        item5SubItem3Title: 'The Archaeological Excavations at the Royal Cemetery of Haihunhou Kingdom in Han Dynasty'
     },
     "conductShop": {
         "bannerTitle": "E-commerce",

+ 6 - 5
mobile/src/lang/en/modules/home.js

@@ -29,11 +29,12 @@ module.exports = {
     "plate1Item3Desc2": "Space Interaction, Let the Space to Express More Historical Connotations",
     "plate1Item3Desc3": "Under the Master’s Explanation, Multi-user Can Participate on the Same Screen",
     "plate1Item3Desc4": "Promote Social Science Education and Promote Everyone to Participate",
-    "plate1Item4SubTitle": "Mass Reconstruction of the Real Houses",
-    "plate1Item4Desc1": "AI Automatic Modeling, Efficient Reconstruct the Real Houses",
-    "plate1Item4Desc2": "VR Guidance/ VR Explanation,Display All the Details",
-    "plate1Item4Desc3": "Easy to Operation, Everyone Can Be A Master",
-    "plate1Item4Desc4": "Professional Real-estate Marketing System, More Efficient for Sales and Rental Decisions",
+    "plate1Item4SubTitle": "3D Business District, New Immersive Experience",
+    "plate1Item4Desc1": "Reconstruct the Real Space, Go Shopping at Home",
+    "plate1Item4Desc2": "Go Shopping with Real Friends, Communicate Freely on the Same Screen",
+    "plate1Item4Desc3": "High Quality Stores Live Broadcast, Real-time Online Share Quality Products.",
+    "plate1Item4Desc4": "Personal AI Assistant, Real-time Online Reply.",
+    "plate1Item4Desc5": "Gather Customers Together Online, Boost Offline Economy Effectively.",
     "plate1Item5SubTitle": "Efficient Reconstruct Disaster Scenes,Create Comprehensive 3D Files",
     "plate1Item5Desc1": "Efficient Reconstruct Disaster Scenes,Create Comprehensive 3D Files",
     "plate1Item5Desc2": "Pre-collection is Available,Reduce the Claims Disputes",

+ 4 - 1
mobile/src/lang/en/modules/mall.js

@@ -60,5 +60,8 @@ module.exports = {
     "phone": "Tel",
     "area": "Area",
     "addressDetail": "Address",
-    "nashui": "Taxpayer ID"
+    "nashui": "Taxpayer ID",
+    read1: 'The above contents and charging standards fee structure may be altered according to the cost changes or operating policies of the third-party cloud storage.',
+    read2: 'Any adjustment will be announced on the official website without prior notice.',
+    smallTip: 'Note: All configurations and specifications listed on this page shall prevail the actural product launched to the market, and are subject to alteration without notice.'
 }

File diff suppressed because it is too large
+ 59 - 35
mobile/src/lang/en/modules/news.js


+ 3 - 3
mobile/src/lang/zh/modules/conduct.js

@@ -49,9 +49,9 @@ module.exports = {
         "itemTitle3": "多人实时同屏互动<br/>听专家讲述文化故事",
         "itemTitle4": "推动社科教育宣传<br/>助力历史文化传播",
         caseTitle: '精选案例',
-        case1: '德国国立陶瓷博物馆',
-        case2: '梁家河数字博物馆',
-        case3: '南昌汉代海昏侯国考古成果展'
+        item5SubItem1Title: '德国国立陶瓷博物馆',
+        item5SubItem2Title: '梁家河数字博物馆',
+        item5SubItem3Title: '南昌汉代海昏侯国考古成果展'
     },
     "conductShop": {
         "bannerTitle": "四维看店",

+ 6 - 5
mobile/src/lang/zh/modules/home.js

@@ -29,11 +29,12 @@ module.exports = {
     "plate1Item3Desc2": "空间交互,让空间表达更多历史内涵",
     "plate1Item3Desc3": "大师讲解,一带多同屏讲述文化故事",
     "plate1Item3Desc4": "推动社科教育,促进社会参与",
-    "plate1Item4SubTitle": "海量复刻真房源",
-    "plate1Item4Desc1": "AI自动建模,高效复刻真实房源",
-    "plate1Item4Desc2": "云带看/云讲房,全方位介绍房源信息",
-    "plate1Item4Desc3": "易上手操作,人人都能掌握拍摄流程",
-    "plate1Item4Desc4": "专业地产营销系统,高效管理租售信息",
+    "plate1Item4SubTitle": "3D数字化商圈,沉浸式购物新体验",
+    "plate1Item4Desc1": "真实复刻空间,宅在家中云逛街",
+    "plate1Item4Desc2": "与好友一起逛,同屏带看实时沟通",
+    "plate1Item4Desc3": "好店带货直播,在线分享优质商品",
+    "plate1Item4Desc4": "私人智能客服,实时在线答复",
+    "plate1Item4Desc5": "汇聚线上客流,有效拉动线下经济",
     "plate1Item5SubTitle": "高效复刻灾害现场,记录全面三维档案",
     "plate1Item5Desc1": "高效复刻灾害现场,记录全面三维档案",
     "plate1Item5Desc2": "支持预先采集存档,减少理赔纠纷",

+ 4 - 1
mobile/src/lang/zh/modules/mall.js

@@ -60,5 +60,8 @@ module.exports = {
     phone: '手机号码',
     area: '所在地区',
     addressDetail: '详细地址',
-    nashui: '纳税人识别号'
+    nashui: '纳税人识别号',
+    read1: '以上说明内容及收费标准,可能会根据第三方云存储的费用变化或运营政策而调整。',
+    read2: '如有调整,将于官网公布,恕不另行通知。',
+    smallTip: '注:本页面所列配置及参数均以实际上市产品为准,如有变更,恕不另行通知。'
 }

+ 1 - 0
mobile/src/pages/about/index.vue

@@ -16,6 +16,7 @@
     <div class="plate03">
       <div class="e-node">
         <h2 class="common-title">{{langAbout.events.title}}</h2>
+        <img src="@/assets/images/refactor/about/img2.png" />
         <ul>
           <li v-for="(item,idx) in langAbout.events.nodes" :key="idx">
             <h3>{{item.year}}</h3>

+ 4 - 0
mobile/src/pages/about/style.scss

@@ -53,6 +53,10 @@
     margin: 44px auto 0;
     padding: 58px 0 54px;
     background: #F7F7F7;
+    img {
+      width: 335px;
+      margin-bottom: 18px;
+    }
     .e-node {
       text-align: left;
       margin:0 25px;

+ 1 - 1
mobile/src/pages/account/codeLogin/index.vue

@@ -113,7 +113,7 @@ export default {
 
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 1 - 1
mobile/src/pages/account/forget/components/emailForget.vue

@@ -135,7 +135,7 @@ export default {
       }
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 2 - 2
mobile/src/pages/account/forget/components/phoneForget.vue

@@ -127,7 +127,7 @@ export default {
       }
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         }
@@ -165,7 +165,7 @@ export default {
       }
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 1 - 1
mobile/src/pages/account/login/index.vue

@@ -58,7 +58,7 @@ export default {
       }
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 1 - 1
mobile/src/pages/account/mailRegister/index.vue

@@ -129,7 +129,7 @@ export default {
           val: this.nickname
         },
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 2 - 2
mobile/src/pages/account/register/index.vue

@@ -109,7 +109,7 @@ export default {
       }
       let checkStr = [
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         }
@@ -157,7 +157,7 @@ export default {
         //   val: this.nickname
         // },
         {
-          name: '手机',
+          name: '手机号码',
           En: 'Phone number',
           val: this.phone
         },

+ 1 - 0
mobile/src/pages/account/register/style.scss

@@ -148,6 +148,7 @@ input[type='password']{
 .send-btn {
   font-size: 14px;
   padding: 0 10px;
+  white-space: nowrap;
 }
 
 @media screen and (max-width: 340px) {

+ 2 - 1
mobile/src/pages/agent/index.vue

@@ -2,7 +2,8 @@
   <div class="agent-layout">
     <div class="mobile1">
       <div class="top">
-        <img class="top-bg" src="@/assets/images/refactor/agent/banner.png" alt />
+        <p v-html="$t('agent.bannerTitle')"></p>
+        <img class="top-bg" src="@/assets/images/refactor/agent/banner.jpg" alt />
       </div>
     </div>
     <div class="mobile2">

+ 10 - 0
mobile/src/pages/agent/style.scss

@@ -39,6 +39,16 @@
         width: 100%;
         vertical-align: middle;
       }
+      p {
+        color: #202020;
+        font-size: 20px;
+        font-weight: bold;
+        position: absolute;
+        top: 50%;
+        transform: translate(0, -50%);
+        margin-left: 20px;
+        text-align: left;
+      }
     }
   }
   .mobile2 {

+ 3 - 1
mobile/src/pages/cases/index.vue

@@ -47,7 +47,7 @@
           <!-- <p class="b-text3">{{langCases.view}}:{{item.viewCount}}</p> -->
         </div>
       </template>
-      <div class="scene-nothing" v-else>
+      <div class="scene-nothing" v-else-if="hasLoaded">
         <img :src="`${$cdn}images/nothing.png`" alt="">
         <div>{{langCases.norecord}}</div>
       </div>
@@ -115,6 +115,7 @@ export default {
       activeName: '全部',
       scene: [],
       showSelectType: false,
+      hasLoaded: false,
       swiperOption: {
         slidesPerView: 'auto',
         autoplay: false,
@@ -229,6 +230,7 @@ export default {
       let data = result.data.data
       this.scene = data.list
       this.total = data.total
+      this.hasLoaded = true
     }
   },
   mounted () {

+ 1 - 0
mobile/src/pages/cases/style.scss

@@ -142,6 +142,7 @@
       margin: 0 auto 19px;
       img{
         width: 100%;
+        height: 168.75px;
       }
       .b-text3{
         width: 100%;

+ 3 - 3
mobile/src/pages/conduct/subject/index.vue

@@ -49,17 +49,17 @@ export default {
       ],
       cases: [
         {
-          name: i18n.t('conduct.conductSubject.case1'),
+          name: i18n.t('conduct.conductSubject.item5SubItem1Title'),
           img: require('@/assets/images/refactor/conduct/subject/case1.png'),
           link: 'https://www.4dkankan.com/showPC.html?m=X99yIvTq'
         },
         {
-          name: i18n.t('conduct.conductSubject.case2'),
+          name: i18n.t('conduct.conductSubject.item5SubItem2Title'),
           img: require('@/assets/images/refactor/conduct/subject/case2.png'),
           link: 'https://4dkanzhan.4dkankan.com/LiangJiaHe/index.html'
         },
         {
-          name: i18n.t('conduct.conductSubject.case3'),
+          name: i18n.t('conduct.conductSubject.item5SubItem3Title'),
           img: require('@/assets/images/refactor/conduct/subject/case3.png'),
           link: 'https://admin.4dmuseum.cn/showPC.html?m=55&bigScene=&novr='
         }

+ 2 - 2
mobile/src/pages/coreProduct/index.vue

@@ -7,7 +7,7 @@
       <li v-for="item in videoArr" :key="item.name">
         <h1 class="common-title" v-html="item.name"></h1>
         <div class="player">
-          <video class="video" controls="controls" playsinline="playsinline" muted="muted" :poster="`${$cdn}images/postv${item.post}.png`">
+          <video class="video" controls="controls" playsinline="playsinline" muted="muted" :poster="isNaN(item.post) ? `${$cdn}video/homevideo/v${item.img}.mp4${item.post}` : `${$cdn}images/postv${item.post}.png`">
             <source :src="`${$cdn}video/homevideo/v${item.img}.mp4`" type="video/mp4">
           </video>
         </div>
@@ -38,7 +38,7 @@ export default {
         {
           name: i18n.t('conduct.coreProduct.itemTitle4'),
           img: 6,
-          post: 6,
+          post: '?x-oss-process=video/snapshot,t_100,f_jpg,m_fast',
           runAnimation: true
         },
         {

+ 6 - 5
mobile/src/pages/home/components/plate2.vue

@@ -32,14 +32,14 @@ export default {
           title: this.$t('home.plate1Item1'),
           title_sub: this.$t('home.plate1Item1'),
           desc: this.$t('home.plate1Item1SubTitle'),
-          img: require('@/assets/images/refactor/home/plate02-1.png'),
+          img: require('@/assets/images/refactor/home/plate02-1.jpg'),
           list: [this.$t('home.plate1Item1Desc1'), this.$t('home.plate1Item1Desc2'), this.$t('home.plate1Item1Desc3'), this.$t('home.plate1Item1Desc4')],
           link: '/conduct/house'
         }, {
           title: this.$t('home.plate1Item2'),
           title_sub: this.$t('home.plate1Item2'),
           desc: this.$t('home.plate1Item2SubTitle'),
-          img: require('@/assets/images/refactor/home/plate02-2.png'),
+          img: require('@/assets/images/refactor/home/plate02-2.jpg'),
           list: [this.$t('home.plate1Item2Desc1'), this.$t('home.plate1Item2Desc2'), this.$t('home.plate1Item2Desc3'), this.$t('home.plate1Item2Desc4')],
           link: '/conduct/exhibition'
         },
@@ -47,7 +47,7 @@ export default {
           title: this.$t('home.plate1Item3'),
           title_sub: this.$t('home.plate1Item3'),
           desc: this.$t('home.plate1Item3SubTitle'),
-          img: require('@/assets/images/refactor/home/plate02-1.png'),
+          img: require('@/assets/images/refactor/home/plate02-3.jpg'),
           list: [this.$t('home.plate1Item3Desc1'), this.$t('home.plate1Item3Desc2'), this.$t('home.plate1Item3Desc3'), this.$t('home.plate1Item3Desc4')],
           link: '/conduct/subject'
         },
@@ -55,7 +55,7 @@ export default {
           title: this.$t('home.plate1Item4'),
           title_sub: this.$t('home.plate1Item4'),
           desc: this.$t('home.plate1Item4SubTitle'),
-          img: require('@/assets/images/refactor/home/plate02-1.png'),
+          img: require('@/assets/images/refactor/home/plate02-4.jpg'),
           list: [this.$t('home.plate1Item4Desc1'), this.$t('home.plate1Item4Desc2'), this.$t('home.plate1Item4Desc3'), this.$t('home.plate1Item4Desc4')],
           link: '/conduct/shop'
         },
@@ -63,7 +63,7 @@ export default {
           title: this.$t('home.plate1Item5'),
           title_sub: this.$t('home.plate1Item5'),
           desc: this.$t('home.plate1Item5SubTitle'),
-          img: require('@/assets/images/refactor/home/plate02-1.png'),
+          img: require('@/assets/images/refactor/home/plate02-5.jpg'),
           list: [this.$t('home.plate1Item5Desc1'), this.$t('home.plate1Item5Desc2')],
           link: '/conduct/secury'
         }
@@ -105,6 +105,7 @@ export default {
       width: 286px;
       img {
         width: 286px;
+        vertical-align: middle;
       }
       &:last-child {
         margin-right: 20px;

+ 4 - 9
mobile/src/pages/home/index.vue

@@ -112,15 +112,10 @@ export default {
 <style lang="scss" scoped>
 @import './style.scss';
 .play-btn {
-  display: inline-block;
-  border: 6px solid #fff;
-  border-top-color: transparent;
-  border-right-color: transparent;
-  border-bottom-color: transparent;
-  border-left-width: 12px;
-  position: absolute;
-  top: 15px;
-  left: 49%;
+  // display: inline-block;
+  // position: absolute;
+  // top: 15px;
+  // left: 49%;
 }
 </style>
 

+ 6 - 4
mobile/src/pages/layout/header.vue

@@ -20,15 +20,16 @@
     <div class="h-right">
       <div class="h-user"  v-if="isAccout||isLogin">
           <i class="iconfont icon-cart" :style="{opacity:language==='en'?0:1}" @click="gocart"><span>{{count>99?'99+':count}}</span></i>
-          <img ref="userList" :src="`${$cdn}images/icon/nav_icon.png`" @click="userList=!userList,active = false" alt="">
-          <ul :style="{width:language==='en'?'160px':'110px'}" :class="{'ul-active':userList}" >
+          <img ref="userList" v-if="!info.head" :src="`${$cdn}images/icon/nav_icon.png`" @click="userList=!userList,active = false" alt="">
+          <div ref="userList" v-else :style="{'background-image': `url(${info.head})`}" @click="userList=!userList,active = false" alt="" class="user-avatar" />
+          <ul  :class="{'ul-active':userList, 'isEn': language==='en'}" >
             <li v-for="(item,i) in langHeader.manage" :key="i" @click="handleClick(item)">{{item.name}}</li>
           </ul>
       </div>
       <div class="btn-buy" v-else-if="$route.name!=='purchase'&&$route.name!=='purchasetwo'&&$route.name!=='purchasezhijia'" @click="buy" >{{$t('header.online_shop')}}</div>
     </div>
     <div class="nav-active" :style="{maxHeight:active?'100vh':'0'}">
-      <div class="nav-mask" :style="{position: active? 'fixed' : 'absolute'}"></div>
+      <div class="nav-mask" :style="{position: active? 'fixed' : 'absolute'}" @click.stop="active=false"></div>
       <div class="nav-content">
         <ul v-for="(item, index) in navs" :key="index">
           <li>
@@ -94,7 +95,8 @@ let noEngList = {
   'confirm': true,
   'paytype': true,
   'openInvoice': true,
-  'vieworder': true
+  'vieworder': true,
+  'submit': true
 }
 
 let titleName = {

+ 10 - 0
mobile/src/pages/layout/style.scss

@@ -132,6 +132,13 @@ $bannerHeight:50px;
         width: 50%;
         height: 100%;
       }
+      .user-avatar {
+        width: 50%;
+        height: 30px;
+        background-size: cover;
+        border-radius: 50%;
+        background-position: center center;
+      }
        ul{
           position: absolute;
           top: 48px;
@@ -145,6 +152,9 @@ $bannerHeight:50px;
           overflow: hidden;
           max-height: 0;
           text-align: center;
+          &.isEn {
+            width: 160px;
+          }
           li{
             padding: 0 11px;
             line-height: 32px;

+ 1 - 1
mobile/src/pages/location/index.vue

@@ -7,7 +7,7 @@
       <h1 class="common-title">{{ $t('conduct.coreTech.itemTitle1') }}</h1>
       <p class="desc">{{ $t('conduct.coreTech.itemText1') }}</p>
       <div class="video">
-        <video autoplay controls src="@/assets/images/refactor/location/AI AR SLAM 01(剪辑版2).mp4"></video>
+        <video autoplay controls :src="`${$cdn}video/location-video.mp4?t=1`" :poster="`${$cdn}video/location-video.mp4?x-oss-process=video/snapshot,t_21000,f_jpg,m_fast`"></video>
       </div>
     </div>
     <div class="plate2" id="plate2">

+ 5 - 4
mobile/src/pages/news/index.vue

@@ -48,7 +48,7 @@ export default {
       },
       banners: [
         {
-          text: '36Kr独家报道<br/>四维时代发布<br/>3D相机四维看看Pro',
+          text: '四维时代发布新一代3D空间相机',
           img: require('@/assets/images/refactor/news/banner1.jpg'),
           link: 'https://36kr.com/p/782262201344647?from=groupmessage&isappinstalled=0'
         },
@@ -92,13 +92,12 @@ export default {
   background-position: center center;
   position: relative;
   font-size: 18px;
-  color: #202020;
+  color: #fff;
   line-height: 27px;
   font-weight: bold;
-  padding-right: 20px;
   display: flex;
   align-items: center;
-  justify-content: flex-end;
+  justify-content: center;
   text-align: right;
   &.swiper-item2 {
     color: #fff;
@@ -107,6 +106,8 @@ export default {
   }
   &.swiper-item3 {
     color: #fff;
+    justify-content: flex-end;
+      padding-right: 20px;
   }
 }
 

+ 9 - 0
mobile/src/pages/pricedetail/index.vue

@@ -20,6 +20,8 @@
             <p v-html="item.a"></p>
           </li>
         </ul>
+        <p>{{ $t('mall.read1') }}</p>
+        <p>{{ $t('mall.read2') }}</p>
       </div>
     </div>
   </div>
@@ -98,6 +100,13 @@ export default {
       margin-top: 60px;
       background: #f7f7f7;
       padding: 56px 20px;
+      p {
+        color: #666;
+        font-size: 12px;
+        text-align: left;
+        line-height: 20px;
+        margin-top: 10px;
+      }
     }
 }
 </style>

+ 7 - 3
mobile/src/pages/purchase/index.vue

@@ -70,7 +70,7 @@
         </ul>
       </div>
       <div v-show="plate02ShowType === 'tech'">
-        <div class="common-title">{{langPurchase.guige.name}}</div>
+        <div class="common-title">{{ $t('mall.techDetail') }}</div>
         <div class="p2-pramas">
           <div v-for="(item,i) in langPurchase.guige.arr" :key="i">
             <p class="title">{{item.name}}</p>
@@ -81,8 +81,12 @@
             </div>
           </div>
         </div>
-        <div class="p2-imgc">
-          <img :src="`${$cdn}images/m-paramspro.png`" alt="">
+        <div class="plate02-white">
+          <div class="common-title">{{ $t('mall.widthDetail') }}</div>
+          <div class="p2-imgc">
+            <img :src="`${$cdn}images/m-paramspro.png`" alt="">
+          </div>
+          <p class="small-tip">*{{ $t('mall.smallTip') }}</p>
         </div>
       </div>
     </div>

+ 15 - 0
mobile/src/pages/purchase/style.scss

@@ -165,6 +165,9 @@
         color: #909090;
         padding-bottom: 17px;
         border-bottom: 1px solid #EBEBEB;
+        &:last-child {
+          border-bottom: none;
+        }
       }
     }
   }
@@ -264,3 +267,15 @@
 .select-w {
   padding: 0 20px;
 }
+
+.plate02-white {
+  width: 100vw;
+  margin: 0 -20px;
+  background: #fff;
+  padding: 57px 20px 57px;
+  .small-tip {
+    font-size: 12px;
+    color: #666;
+    line-height: 20px;
+  }
+}

+ 8 - 1
mobile/src/pages/purchasezhijia/index.vue

@@ -14,7 +14,7 @@
         <div class="attr-con">
           <div class="attr">{{langzhijia.color.key}}</div>
           <div class="box color">
-            <i class="iconfont icon-yuandian">{{langzhijia.color.val}}</i>
+            <i class="iconfont icon-yuandian" style="margin-right:4px;"></i>{{$t('mall.zhijiaColor')}}
           </div>
           <div class="attr">{{langzhijia.peijian.key}}</div>
           <div class="box service">
@@ -76,6 +76,7 @@
             </span>
           </div>
         </div>
+        <p class="small-tip">{{$t('mall.smallTip')}}</p>
       </div>
     </div>
    </div>
@@ -189,4 +190,10 @@ export default {
 
 <style lang="scss" scoped>
 @import './style.scss';
+.small-tip {
+  font-size: 12px;
+  color: #666;
+  line-height: 20px;
+  margin-top: 20px;
+}
 </style>

+ 2 - 1
mobile/src/pages/service/plugin/list.vue

@@ -33,7 +33,8 @@ $bannerHeight:48px;
         top: 0;
         right: 0;
         height: 24px;
-        transform: rotate(0deg);
+        transform: rotate(0deg) translateY(-50%);
+        top: 50%;
       }
       .active{
         transform: rotate(90deg);

+ 1 - 1
mobile/src/pages/service/useimg.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="img-layout" :class="{agreement:$route.params.name==='agreement'}">
     <img :src="images" alt="">
-    <img v-if="$route.params.name==='agreement'" :src="`${$cdn}images/agreement/eight/${language === 'en' ? 'en' : 'zh'}/2-more.jpg`" alt="">
+    <!-- <img v-if="$route.params.name==='agreement'" :src="`${$cdn}images/agreement/eight/${language === 'en' ? 'en' : 'zh'}/2-more.jpg`" alt=""> -->
   </div>
 </template>
 

+ 2 - 9
mobile/src/pages/userCenter/addressForm/index.vue

@@ -9,7 +9,7 @@
 </template>
 
 <script>
-import citySelect from '@/components/citySelect'
+import citySelect from '@/components/citySelect/newModule'
 import { mapState } from 'vuex'
 import API from '@/apis'
 
@@ -44,14 +44,7 @@ export default {
   },
   methods: {
     createAddress (form) {
-      API.updateAddress(form).then(async res => {
-        if (res.data.code === 0) {
-          await this.getAddressList()
-          this.$toast.show('success', this.langToast['47'], () => {
-            this.$router.back()
-          })
-        }
-      })
+      this.$router.back()
     },
     getAddressList () {
       return API.getReceiverList().then(res => {

+ 6 - 2
mobile/src/pages/userCenter/cart/index.vue

@@ -131,7 +131,7 @@ export default {
       pictures,
       detail,
       cameraName,
-      checked: true,
+      checked: false,
       goodsDetail: mallConfig.goodsMap,
       checkedArr: {
         0: '',
@@ -143,7 +143,7 @@ export default {
   },
   mounted () {
     this.cart && this.cart.forEach((item, i) => {
-      this.checkedArr[i] = item
+      this.checkedArr[i] = ''
     })
   },
   methods: {
@@ -190,6 +190,10 @@ export default {
         this.checked = false
       } else {
         this.checkedArr[index] = item
+        let arr = Object.keys(this.checkedArr).filter(item => !this.checkedArr[item])
+        if (arr.length === Object.keys(this.checkedArr).length - this.cart.length) {
+          this.checked = true
+        }
       }
     },
     toPay () {

+ 15 - 3
mobile/src/pages/userCenter/confirm/index.vue

@@ -10,11 +10,14 @@
             <div>{{address.shipMobile}}</div>
           </div>
           <div class="bc-locotion">
-            {{`${address.shipAreaPath}${address.shipAddress}`}}
+            <p>{{address.shipAreaPath}}</p>
+            <p>{{address.shipAddress}}</p>
           </div>
         </div>
         <div class="actions-w">
-          <span @click="$router.push('/addressCreate')"><h-icon type="edit" />编辑</span>
+          <span @click="$router.push('/addressCreate')"><h-icon type="edit" />
+            <span class="actions-w-txt">编辑</span>
+          </span>
         </div>
       </div>
     </div>
@@ -32,6 +35,9 @@
       </div>
     </div>
     <div class="box-con">
+      <payTypeModule />
+    </div>
+    <div class="box-con">
       <div class="bc-title">商品信息</div>
       <div class="confirm-products">
         <div class="confirm-products-item" v-for="(item,i) in payinfo.goods" :key="i">
@@ -85,6 +91,8 @@
 <script>
 import { mapState } from 'vuex'
 import cinvoices from '@/components/cinvoices'
+import payTypeModule from '@/components/payType'
+
 var cloneObj = function (obj) {
   var newObj = {}
   if (obj instanceof Array) {
@@ -100,7 +108,8 @@ var cloneObj = function (obj) {
 export default {
   components: {
     cinvoices,
-    showinvoice: true
+    showinvoice: true,
+    payTypeModule
   },
   computed: {
     ...mapState({
@@ -284,6 +293,9 @@ export default {
 }
 .actions-w {
   margin-top: 7px;
+  .actions-w-txt {
+    margin-left: 1px;
+  }
 }
 
 </style>

+ 3 - 2
mobile/src/pages/userCenter/confirm/style.scss

@@ -73,9 +73,10 @@
           justify-content: space-between;
         }
         .bc-locotion{
-          font-size: 10px;
+          font-size: 12px;
           color: rgba(0,0,0,.45);
-          line-height: 12px;
+          line-height: 18px;
+          margin: 2px 0;
         }
       }
       .bc-edit{

+ 4 - 1
mobile/src/pages/userCenter/submit/index.vue

@@ -26,7 +26,10 @@
         <span @click="$router.back()">修改</span>
       </div>
       <div class="bc-item pay-item">
-        <div class="item-method">{{payinfo.payTypeName}}</div>
+        <div class="item-method">
+          <span :class="`pay-icon ${payinfo.payTypeName === '支付宝' ? 'ali' : 'wechat'}`"></span>
+          <span>{{ payinfo.payTypeName }}</span>
+        </div>
         <div class="item-time">提交订单后,请您在新打开的页面完成支付</div>
       </div>
     </div>

+ 18 - 0
mobile/src/pages/userCenter/submit/style.scss

@@ -108,6 +108,24 @@
         font-size: 12px;
         color: rgba(0, 0, 0, 0.7);
         line-height: 18px;
+        display: flex;
+        border: 1px solid #EBEBEB;
+        height: 40px;
+        line-height: 40px;
+        justify-content: space-between;
+        align-items: center;
+        padding: 0 10px 0 6px;
+      }
+      .pay-icon {
+        display: inline-block;
+        width: 28px;
+        height: 28px;
+        background: url(~@/assets/images/refactor/userCenter/ali_pay.png) center center;
+        background-size: cover;
+        background-repeat: no-repeat;
+        &.wechat {
+          background-image: url(~@/assets/images/refactor/userCenter/wx_pay.png);
+        }
       }
       .item-time{
         font-size: 10px;

+ 8 - 2
mobile/src/router/index.js

@@ -123,7 +123,10 @@ let router = new Router({
       name: 'submit',
       path: '/submit',
       component: resolve => require(['@/pages/userCenter/submit'], resolve),
-      meta: {requireAuth: true}
+      meta: {
+        requireAuth: true,
+        noEnglish: true
+      }
     },
     // 重构版未做的
     {
@@ -269,7 +272,10 @@ let router = new Router({
     {
       path: '/payresult/:isSuccess',
       name: 'payresult',
-      component: resolve => require(['@/pages/payresult'], resolve)
+      component: resolve => require(['@/pages/payresult'], resolve),
+      meta: {
+        noEnglish: true
+      }
     },
     {
       path: '/useimg/:id/:type/:name',

+ 1 - 1
mobile/src/store/language/cn/eight.js

@@ -161,7 +161,7 @@ export default{
       }, {
         label: '设备接口',
         name: '',
-        dec: ['TYPE C']
+        dec: ['TYPE-C']
       }
     ]
   }

+ 2 - 2
mobile/src/store/language/cn/manage.js

@@ -100,7 +100,7 @@ export default{
       name: '姓名',
       address: '详细地址',
       title: '请输入发票抬头',
-      code: '请输入18位税务登记号',
+      code: '请输入18位纳税人识别号',
       raddress: '注册地址',
       rphone: '注册电话',
       bank: '开户银行',
@@ -179,7 +179,7 @@ export default{
     type2: '增值税普票(电子发票)',
     type3: '增值税专用发票',
     title: '发票抬头',
-    code: '18位税务登记号',
+    code: '18位纳税人识别号',
     email: '电子邮箱',
     organizedAddress: '注册地址',
     registerPhone: '注册电话',

+ 2 - 2
mobile/src/store/language/cn/purchase.js

@@ -48,7 +48,7 @@ export default{
       {
         name: '设备接口',
         val: [
-          'TYPE C'
+          'TYPE-C'
         ]
       }
     ]
@@ -114,7 +114,7 @@ export default{
       }, {
         label: '设备接口',
         name: '',
-        dec: ['TYPE C']
+        dec: ['TYPE-C']
       }
     ]
   },

+ 1 - 1
mobile/src/store/language/cn/purchasezhijia.js

@@ -57,7 +57,7 @@ export default{
       {
         name: '设备接口',
         val: [
-          'TYPE C'
+          'TYPE-C'
         ]
       }
     ]

+ 1 - 1
mobile/src/store/language/cn/toast.js

@@ -19,7 +19,7 @@ export default{
   '18': '请先保存收货信息',
   '19': '请完善收货信息',
   '20': '请完善发票信息',
-  '21': '请输入18位的税务登记号',
+  '21': '请输入18位的纳税人识别号',
   '22': '请输入正确的手机号码',
   '23': '注册成功,是否立刻登录?',
   '24': '密码修改成功,请重新登录',

+ 1 - 1
mobile/src/store/language/en/eight.js

@@ -159,7 +159,7 @@ export default{
       }, {
         label: 'USB',
         name: '',
-        dec: ['TYPE C']
+        dec: ['TYPE-C']
       }
     ]
   }

+ 2 - 2
mobile/src/store/language/en/purchase.js

@@ -52,7 +52,7 @@ export default{
       {
         name: 'Device Port',
         val: [
-          'TYPE C'
+          'TYPE-C'
         ]
       }
     ]
@@ -116,7 +116,7 @@ export default{
       }, {
         label: 'Device Port',
         name: '',
-        dec: ['TYPE C']
+        dec: ['TYPE-C']
       }
     ]
   },

+ 1 - 1
mobile/src/store/language/en/purchasezhijia.js

@@ -57,7 +57,7 @@ export default{
       {
         name: '设备接口',
         val: [
-          'TYPE C'
+          'TYPE-C'
         ]
       }
     ]

+ 1 - 1
mobile/src/store/language/home_cn.js

@@ -347,6 +347,6 @@ export default {
       name: '四维模库',
       url: 'http://www.4dmodel.com/'
     } ],
-    copyright: ['Copyright © 2020 4DAGE Co., Ltd. All rights reserved.', '粤ICP备14078495号-1']
+    copyright: ['Copyright © 2020 4DAGE Co., Ltd. All rights reserved.', '粤ICP备14078495号-3']
   }
 }

+ 1 - 1
mobile/src/store/language/home_en.js

@@ -348,6 +348,6 @@ export default {
       name: '4DModel',
       url: 'http://www.4dmodel.com/'
     }],
-    copyright: ['Copyright © 2020 4DAGE Co., Ltd. All rights reserved.', '粤ICP备14078495号-1']
+    copyright: ['Copyright © 2020 4DAGE Co., Ltd. All rights reserved.', '粤ICP备14078495号-3']
   }
 }

+ 1 - 1
pc/build/webpack.base.conf.js

@@ -58,7 +58,7 @@ module.exports = {
         options: {
           limit: 10000,
           name: utils.assetsPath('img/[name].[hash:7].[ext]'),
-          publicPath: isProd ? 'https://4dscene.4dage.com/new4dkk/v2' : ''
+          publicPath: isProd ? '/new4Dkankan/www/static/' : ''
         }
       },
       {

BIN
pc/src/assets/images/core-products/banner.png


BIN
pc/src/assets/images/distributor/banner.jpg


BIN
pc/src/assets/images/online/house/item-3-en.png


BIN
pc/src/assets/images/refactor/conductShop/item-2-en.jpg


BIN
pc/src/assets/images/refactor/mall/ali-pay.png


BIN
pc/src/assets/images/refactor/mall/cartNoGoods-en.png


BIN
pc/src/assets/images/refactor/mall/wechat-pay.png


+ 4 - 1
pc/src/lang/en/modules/conduct.js

@@ -45,7 +45,10 @@ module.exports = {
         "itemTitle2": "Various Forms of Spatial Interaction, Carrying Rich Historical Heritage",
         "itemTitle3": "Simultaneous Operation by Multi-user, Listening to Historical Stories",
         "itemTitle4": "Promote Social Science Education and Help Cultural Communication",
-        "itemTitle5": "Showcases"
+        "itemTitle5": "Showcases",
+        item5SubItem1Title: 'Hetjens- German Museum of Ceramics',
+        item5SubItem2Title: 'Liangjiahe Digital Museum',
+        item5SubItem3Title: 'The Archaeological Excavations at the Royal Cemetery of Haihunhou Kingdom in Han Dynasty'
     },
     "conductShop": {
         "bannerTitle": "4DKanKan<br/>E-commerce,Free Shopping<br/>without Any Limitations",

+ 6 - 0
pc/src/lang/en/modules/home.js

@@ -29,6 +29,12 @@ module.exports = {
     "plate1Item3Desc2": "Space Interaction, Let the Space to Express More Historical Connotations",
     "plate1Item3Desc3": "Under the Master’s Explanation, Multi-user Can Participate on the Same Screen",
     "plate1Item3Desc4": "Promote Social Science Education and Promote Everyone to Participate",
+    "plate1Item4SubTitle": "3D Business District, New Immersive Experience",
+    "plate1Item4Desc1": "Reconstruct the Real Space, Go Shopping at Home",
+    "plate1Item4Desc2": "Go Shopping with Real Friends, Communicate Freely on the Same Screen",
+    "plate1Item4Desc3": "High Quality Stores Live Broadcast, Real-time Online Share Quality Products.",
+    "plate1Item4Desc4": "Personal AI Assistant, Real-time Online Reply.",
+    "plate1Item4Desc5": "Gather Customers Together Online, Boost Offline Economy Effectively.",
     "plate1Item5SubTitle": "Efficient Reconstruct Disaster Scenes,Create Comprehensive 3D Files",
     "plate1Item5Desc1": "Efficient Reconstruct Disaster Scenes,Create Comprehensive 3D Files",
     "plate1Item5Desc2": "Pre-collection is Available,Reduce the Claims Disputes",

+ 5 - 2
pc/src/lang/zh/modules/conduct.js

@@ -45,7 +45,10 @@ module.exports = {
         "itemTitle2": "空间交互形式多样,承载丰富历史底蕴",
         "itemTitle3": "多人实时同屏互动,听专家讲述文化故事",
         "itemTitle4": "推动社科教育宣传,助力历史文化传播",
-        itemTitle5: '精选案例'
+        itemTitle5: '精选案例',
+        item5SubItem1Title: '德国国立陶瓷博物馆',
+        item5SubItem2Title: '梁家河数字博物馆',
+        item5SubItem3Title: '南昌汉代海昏侯国考古成果展'
     },
     "conductShop": {
         "bannerTitle": "看店 • 宅家中 云逛街 轻松买",
@@ -55,7 +58,7 @@ module.exports = {
         "itemTitle4": "私人专属客服 同屏带看实时沟通"
     },
     "conductSecury": {
-        "bannerTitle": "安防勘",
+        "bannerTitle": "安防勘",
         "itemTitle1": "高效复刻灾害现场,记录全面三维档案",
         "itemTitle2": "可将现场说明直接添加至三维空间中,提高沟通质量与工作效率",
         "itemTitle3": "支持预先采集存档,减少理赔纠纷"

+ 11 - 1
pc/src/page/conduct/conductHouse/index.vue

@@ -48,7 +48,7 @@ export default {
         },
         {
           name: this.$t('conduct.conductHouse.itemTitle4'),
-          img: require('@/assets/images/online/house/item-3.jpg'),
+          img: this.language === 'zh' ? require('@/assets/images/online/house/item-3.jpg') : require('@/assets/images/online/house/item-3-en.png'),
           runAnimation: true
         },
         // {
@@ -59,10 +59,20 @@ export default {
       ],
     }
   },
+  computed: {
+    ...mapState({
+      language: state => state.language.current
+    })
+  },
   components: {
     sequence
   },
   mounted () {
+    this.$set(this.sequenceArr, 3, {
+      name: this.$t('conduct.conductHouse.itemTitle4'),
+      img: this.language === 'zh' ? require('@/assets/images/online/house/item-3.jpg') : require('@/assets/images/online/house/item-3-en.png'),
+      runAnimation: true
+    })
   },
   destroyed () {
   },

+ 11 - 1
pc/src/page/conduct/conductShop/index.vue

@@ -46,10 +46,20 @@ export default {
       ]
     }
   },
+  computed: {
+    ...mapState({
+      language: state => state.language.current
+    })
+  },
   components: {
     sequence
   },
   mounted () {
+    this.$set(this.sequenceArr, 1, {
+      name: this.$t('conduct.conductShop.itemTitle2'),
+      img: this.language === 'zh' ? require('@/assets/images/refactor/conductShop/item-2.png') : require('@/assets/images/refactor/conductShop/item-2-en.jpg'),
+      runAnimation: true
+    })
   },
   destroyed () {
   },
@@ -72,7 +82,7 @@ export default {
   .item {
     padding: 110px 0 0;
     img {
-      
+      width: 100%;
     }
   }
   .boom {

+ 17 - 7
pc/src/page/conduct/conductSubject/index.vue

@@ -11,7 +11,9 @@
         </div>
       </div>
       <div class="container item">
-        <h1 class="common-title">{{ $t('conduct.conductSubject.itemTitle5') }}</h1>
+        <h1 class="common-title">{{ $t('conduct.conductSubject.itemTitle5') }}
+          <span class="more" @click="$router.push('/cases/文博')">{{ $t('common.more') }}></span>
+        </h1>
         <ul class="sub-list">
           <li v-for="(item, index) in sub_arr" :key="index" @click="toLink(item)">
             <img :src="item.img" alt="">
@@ -56,19 +58,19 @@ export default {
       ],
       sub_arr: [
         {
-          text: '德国国立陶瓷博物馆',
+          text: this.$t('conduct.conductSubject.item5SubItem1Title'),
           img: require('@/assets/images/online/subjects/sub_item-1.png'),
           link: 'https://www.4dkankan.com/showPC.html?m=X99yIvTq',
           qrCode: `${this.$cdn}v2/img/%E5%BE%B7%E5%9B%BD.png`
         },
         {
-          text: '梁家河数字博物馆',
+          text: this.$t('conduct.conductSubject.item5SubItem2Title'),
           img: require('@/assets/images/online/subjects/sub_item-2.png'),
           link: 'https://4dkanzhan.4dkankan.com/LiangJiaHe/index.html',
           qrCode: `${this.$cdn}v2/img/%E6%A2%81%E5%AE%B6%E6%B2%B3.png`
         },
         {
-          text: '南昌汉代海昏侯国考古成果展',
+          text: this.$t('conduct.conductSubject.item5SubItem3Title'),
           img: require('@/assets/images/online/subjects/sub_item-3.png'),
           link: 'https://admin.4dmuseum.cn/showPC.html?m=55&bigScene=&novr=',
           qrCode: `${this.$cdn}v2/img/%E5%8D%97%E6%98%8C.png`
@@ -117,13 +119,12 @@ export default {
     font-size: 30px;
   }
   .sub-list {
+    display: flex;
+    padding-bottom: 70px;
     li {
-      display: inline-block;
-      vertical-align: middle;
       text-align: center;
       width: 412px;
       margin-right: 20px;
-      padding-bottom: 70px;
       cursor: pointer;
       position: relative;
       img {
@@ -148,6 +149,15 @@ export default {
   .plate-w {
     margin-bottom: 110px;
   }
+  .more {
+    color: #909090;
+    font-size: 16px;
+    text-decoration: underline;
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    cursor: pointer;
+  }
 }
 
 

+ 13 - 2
pc/src/page/coreProducts/index.vue

@@ -7,7 +7,7 @@
       <div class="plate item" v-for="(item,i) in sequenceArr" :key="i">
         <div class="container">
           <h2 class="common-title">{{item.name}}</h2>
-          <sequence :runAnimation="item.runAnimation" :img="item.img.indexOf('http') > -1 ? item.img :`${$cdn}images/sequence/v${item.img}.jpg`" />
+          <sequence :runAnimation="item.runAnimation" :img="item.img.indexOf('http') > -1 ? item.img :`${$cdn}images/sequence/v${language === 'zh' ? item.img : item.enImg}.jpg`" />
         </div>
       </div>
     </div>
@@ -25,11 +25,13 @@ export default {
         {
           name: this.$t('conduct.coreProduct.itemTitle1'),
           img: '6',
+          enImg: '1en',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle2'),
-          img: '7test',
+          img: '7',
+          enImg: '7',
           runAnimation: true
         },
         {
@@ -40,21 +42,29 @@ export default {
         {
           name: this.$t('conduct.coreProduct.itemTitle5'),
           img: '8',
+          enImg: '8en',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle6'),
           img: '9',
+          enImg: '9',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle7'),
           img: '10',
+          enImg: '10en',
           runAnimation: true
         }
       ]
     }
   },
+  computed: {
+    ...mapState({
+      language: state => state.language.current
+    })
+  },
   components: {
     sequence
   },
@@ -92,6 +102,7 @@ export default {
   margin-bottom: 110px;
   line-height: 420px;
   font-size: 40px;
+  background-size: cover;
 }
 .item {
   padding: 50px 0;

+ 1 - 0
pc/src/page/distributor/index.vue

@@ -295,6 +295,7 @@ export default {
     margin-bottom: 110px;
     line-height: 420px;
     font-size: 40px;
+    background-size: cover;
   }
   .common-title {
     margin-bottom: 75px;

+ 3 - 2
pc/src/page/home2/index.vue

@@ -2,7 +2,7 @@
   <div class="home-layout">
     <div class="plate01">
       <div class="my-video">
-        <video src="https://4dscene.oss-cn-shenzhen.aliyuncs.com/new4dkk/v2/video/2020%E5%AE%98%E7%BD%91Version2%20%E4%B8%8D%E5%B8%A6%E5%AD%97_3%281%29.mp4" autoplay muted loop></video>
+        <video :src="`${$cdn}v2/video/bannerVideoV2.mp4`" autoplay muted loop></video>
         <div class="container">
           <div class="video-info">
           <h1>{{ $t('common.kankan') }}</h1>
@@ -216,7 +216,8 @@ export default {
       this.$router.push(item.link)
     },
     detailVideo() {
-      this.$bus.$emit('toggleVideo', { url: `https://4d-tjw.oss-cn-shenzhen.aliyuncs.com/4dHouse/%E5%9B%9B%E7%BB%B4%E7%9C%8B%E7%9C%8BPro-%202020-7-22%E7%89%88%E6%9C%AC%288K%29.mp4` })
+      const videoUrl = this.language === 'zh' ?`https://4d-tjw.oss-cn-shenzhen.aliyuncs.com/4dHouse/%E5%9B%9B%E7%BB%B4%E7%9C%8B%E7%9C%8BPro-%202020-7-22%E7%89%88%E6%9C%AC%288K%29.mp4` : `${this.$cdn}v2/video/4DKanKanPro-en.mp4`
+      this.$bus.$emit('toggleVideo', { url: videoUrl })
     },
     toNewsLink (link) {
       window.open(link)

+ 1 - 1
pc/src/page/location/index.vue

@@ -69,7 +69,7 @@ export default {
           name: this.$t('conduct.coreTech.itemTitle1'),
           desc: this.$t('conduct.coreTech.itemText1'),
           // img: require('@/assets/images/refactor/coreTech/item-1.png'),
-          video: require('@/assets/images/refactor/coreTech/AI AR SLAM 01(剪辑版2).mp4'),
+          video: `${this.$cdn}v2/video/location-video.mp4?t=1`,
           runAnimation: true
         }
       ],

+ 26 - 3
pc/src/page/mall/cart/index.vue

@@ -66,7 +66,11 @@
               <span class="price">{{ formatNum(totalPrice) }}</span>
             </p>
             <div class="cart-actions clear">
-              <img src="@/assets/images/refactor/mall/pay-channel.png" alt="" class="pay-channel">
+              <div  class="pay-channel">
+                <div class="ali-pay"></div>
+                <div class="wechat-pay"></div>
+              </div>
+              
               <div class="actions-w fr">
                 <div class="btn" @click="$router.push('/mall/kankanPro')">{{ $t('mall.continueBuy') }}</div>
                 <div class="btn submit-btn" @click="toConfirm">{{ $t('mall.nowJieSuan') }}</div>
@@ -85,7 +89,7 @@
           <h-icon type="vip_false" size="20" />
         </div>
       </div>
-      <div class="cart-section noGoods">
+      <div class="cart-section noGoods" :class="{'is-en': language !== 'zh'}">
         <div class="btn" @click="$router.push('/mall/kankanPro')">{{ $t('mall.nowBuy') }}</div>
       </div>
     </div>
@@ -108,6 +112,7 @@ export default {
   },
   computed: {
     ...mapState({
+      language: state => state.language.current,
       langToast: state => state.language.home.toast,
       cart: state => {
         let list = []
@@ -449,7 +454,25 @@ export default {
       text-align: center;
       cursor: pointer;
     }
+    &.is-en {
+      background-image: url(~@/assets/images/refactor/mall/cartNoGoods-en.png);
+      background-size: 387px auto;
+    }
+  }
+}
+.pay-channel {
+  display: flex;
+  &>div {
+    width: 79px;
+    height: 28px;
+    background: url(~@/assets/images/refactor/mall/ali-pay.png) no-repeat center center;
+    background-size: 79px auto;
+    margin-right: 28px;
+  }
+  .wechat-pay {
+    width: 84.87px;
+    background: url(~@/assets/images/refactor/mall/wechat-pay.png) no-repeat center center;
+    background-size: 84.87px auto;
   }
 }
-
 </style>

+ 3 - 3
pc/src/page/mall/confirm/components/addressModule.vue

@@ -258,7 +258,7 @@ export default {
   }
   .address-detail {
     font-size: 12px;
-    line-height: 15px;
+    line-height: 16px;
     color: #909090;
   }
   .address-add {
@@ -274,7 +274,7 @@ export default {
   }
   .action-w {
     font-size: 12px;
-    margin-top: 2px;
+    margin-top: 8px;
     position: relative;
     &>div {
       display: inline-block;
@@ -288,7 +288,7 @@ export default {
         width: 11px;
         height: 11px;
         background: url(~@/assets/images/refactor/mall/edit-icon.png) no-repeat center center;
-        margin-right: 2px;
+        margin-right: 4px;
         &.delete-icon {
           background-image: url(~@/assets/images/refactor/mall/delete-icon.png);
         }

+ 6 - 0
pc/src/page/mall/confirm/components/invoiceModule.vue

@@ -417,6 +417,9 @@ export default {
           background: #1FE4DC;
         }
       }
+      &:last-child {
+        margin-right: 0;
+      }
     }
   }
   .modal-tips {
@@ -437,6 +440,9 @@ export default {
     display: flex;
     width: 100%;
     margin-top: 40px;
+    .submit-btn {
+      margin-top: 0;
+    }
     & > div {
       flex: 1;
       height: 55px;

+ 1 - 1
pc/src/page/mall/confirm/index.vue

@@ -64,7 +64,7 @@
       </div>
       <div class="xieyi" v-if="language === 'zh'">
         <input type="checkbox" checked v-model="checked">
-        <span @click="showAgreement">{{$t('login.cluse')}}</span>
+        <span @click="showAgreement">同意四维看看销售协议</span>
       </div>
       <div class="submit-btn fr" @click="pay">{{$t('mall.payOrder')}}</div>
     </div>

+ 12 - 12
pc/src/page/mall/kankanPro/index.vue

@@ -78,7 +78,7 @@
         <div class="plate item" v-for="(item,i) in sequenceArr" :key="i">
           <div class="container">
             <h2 class="common-title">{{item.name}}</h2>
-            <sequence :runAnimation="item.runAnimation" :img="`${$cdn}images/sequence/v${item.img}.jpg`" />
+            <sequence :runAnimation="item.runAnimation" :img="item.img.indexOf('http') > -1 ? item.img :`${$cdn}images/sequence/v${language === 'zh' ? item.img : item.enImg}.jpg`" />
           </div>
         </div>
       </div>
@@ -218,37 +218,37 @@ export default {
       sequenceArr: [
         {
           name: this.$t('conduct.coreProduct.itemTitle1'),
-          img: 6,
+          img: '6',
+          enImg: '1en',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle2'),
-          img: '7test',
-          runAnimation: true
-        },
-        {
-          name: this.$t('conduct.coreProduct.itemTitle3'),
-          img: '7test',
+          img: '7',
+          enImg: '7',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle4'),
-          img: '7test',
+          img: 'https://4dscene.oss-cn-shenzhen.aliyuncs.com/new4dkk/v2/video/qiumu.mp4',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle5'),
-          img: 8,
+          img: '8',
+          enImg: '8en',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle6'),
-          img: 9,
+          img: '9',
+          enImg: '9',
           runAnimation: true
         },
         {
           name: this.$t('conduct.coreProduct.itemTitle7'),
-          img: 10,
+          img: '10',
+          enImg: '10en',
           runAnimation: true
         }
       ]

+ 21 - 56
pc/src/page/service/temp/config.js

@@ -108,7 +108,7 @@ const use = {
   pro: {
     detail: {
       id: 'eight',
-      size: 30
+      size: 23
     },
     cp: 'iuse',
     isbefore: false,
@@ -164,133 +164,98 @@ const use = {
       },
       {
         cover: 8,
-        txtEn: 'Settings',
-        text: '基础设置'
-      },
-      {
-        cover: 9,
         txtEn: 'Set the first perspective to enter the model',
         text: '设置模型的初始化面'
       },
       {
-        cover: 10,
+        cover: 9,
         txtEn: 'Set background music',
         text: '设置背景音乐'
       },
       {
-        cover: 11,
+        cover: 10,
         txtEn: 'Grand Logo',
         text: '设置地面LOGO'
       },
       {
-        cover: 12,
+        cover: 11,
         txtEn: 'Add a hotspot',
         text: '添加热点'
       },
       {
-        cover: 13,
+        cover: 12,
         txtEn: 'Make a tour guide',
         text: '制作自动导览'
       },
       {
-        cover: 14,
+        cover: 13,
         txtEn: 'Trim a model',
         text: '修整模型'
       },
       {
-        cover: 15,
+        cover: 14,
         txtEn: 'Edit a Model on PC',
         text: 'PC端编辑模型',
         hard: true
       },
       {
-        cover: 15,
+        cover: 14,
         txtEn: 'Log in your account',
         text: '登陆账号'
       },
       {
-        cover: 16,
-        txtEn: 'Settings',
-        text: '基础设置'
-      },
-      {
-        cover: 17,
-        txtEn: 'SetBGM',
-        text: '设置背景音乐'
+        cover: 15,
+        txtEn: 'Check the basic information of the model',
+        text: '查阅模型的基础信息'
       },
       {
-        cover: 18,
+        cover: 16,
         txtEn: 'Change scene information',
         text: '更改场景信息'
       },
       {
-        cover: 19,
-        txtEn: 'Change Logo',
-        text: '更换logo'
-      },
-      {
-        cover: 20,
+        cover: 17,
         txtEn: 'Set the screen cover to enter the model',
         text: '设置模型的初始化面'
       },
       {
-        cover: 21,
+        cover: 18,
         txtEn: 'Add a hotspot to the model',
         text: '添加热点'
       },
       {
-        cover: 22,
+        cover: 19,
         txtEn: 'Make an auto guidance for viewing',
         text: '制作自动导览'
       },
       {
-        cover: 23,
-        txtEn: 'Box Video',
-        text: '广告视频'
-      },
-      {
-        cover: 24,
+        cover: 20,
         txtEn: 'Customize spot logo',
         text: '自定义地面LOGO'
       },
       {
-        cover: 25,
+        cover: 21,
         txtEn: 'Set roaming possibility',
         text: '设置漫游可行'
       },
       {
-        cover: 26,
+        cover: 22,
         txtEn: 'Trim a model',
         text: '修整模型'
       },
       {
-        cover: 27,
-        txtEn: 'Download / Upload Model',
-        text: '模型下载/上传'
-      },
-      {
-        cover: 28,
-        txtEn: 'Download / Upload Panorama',
-        text: '全景图片下载/上传'
-      },
-      {
-        cover: 29,
-        txtEn: 'Download / Upload Panoramic Video',
-        text: '球幕视频下载/上传'
-      },
-      {
-        cover: 30,
+        cover: 23,
         text: '浏览分享',
         txtEn: 'Browse and Share',
         hard: true
       },
       {
-        cover: 30,
+        cover: 23,
         txtEn: 'Compatible with multiple platforms and terminals',
         text: '兼容多平台、多终端'
       },
       {
-        cover: 30,
+        cover: 23,
         txtEn: 'Browse Mode',
         text: '浏览模式'
       }

+ 3 - 2
pc/src/page/service/temp/use.vue

@@ -15,7 +15,7 @@
 
       <scrollbar :scorlltop='scorlltop'>
         <div slot="con" class="use-con" ref="dcon" id="dcon">
-          <img class="img" v-for="(item,i) in current.size" :src="`${$cdn}v2/use/${current.id}/${language==='en'?'en':'zh'}/${i+1}.jpg`" :key="i" :alt="i+1">
+          <img class="img" v-for="(item,i) in current.size" :src="`${$cdn}images/use/${current.id}/${language==='en'?'en':'zh'}/${i+1}.jpg`" :key="i" :alt="i+1">
         </div>
       </scrollbar>
     </template>
@@ -23,7 +23,7 @@
     <template v-else>
       <lselect :options="navs" :selected="navActive" class="select" :class="{oy: navs.length > 15}" @change="handleChange" />
       <div class="use-con" style="position:static" ref="dcon" id="dcon">
-        <img class="img" v-for="(item,i) in current.size" :src="`${$cdn}v2/use/${current.id}/${language==='en'?'en':'zh'}/${i+1}.jpg`" :key="i" :alt="i+1">
+        <img class="img" v-for="(item,i) in current.size" :src="`${$cdn}images/use/${current.id}/${language==='en'?'en':'zh'}/${i+1}.jpg`" :key="i" :alt="i+1">
       </div>
     </template>
 
@@ -62,6 +62,7 @@ export default {
         document.querySelector('#dcon').scrollTop = offTop
         let fixTop = Math.round(offTop / this.$refs.dcon.scrollHeight * 100)
         this.scorlltop = fixTop + '%'
+        console.log(offTop)
         setTimeout(() => {
           this.$refs.dcon.addEventListener('scroll', this.listen)
         }, 500)

+ 1 - 1
pc/src/store/language/cn/eight.js

@@ -160,7 +160,7 @@ export default{
       value: ['802.11a/b/g/n网络协议', '支持2.4/5GHz通信']
     }, {
       label: '设备接口',
-      value: ['TYPE C']
+      value: ['TYPE-C']
     }]
   }
 }

+ 1 - 1
pc/src/store/language/cn/purchase.js

@@ -49,7 +49,7 @@ export default{
       {
         name: '设备接口',
         val: [
-          'TYPE C'
+          'TYPE-C'
         ]
       }
     ]

+ 0 - 0
pc/src/store/language/en/eight.js


Some files were not shown because too many files changed in this diff