tremble 5 năm trước cách đây
mục cha
commit
5240ccc485

+ 1 - 1
mobile/build/webpack.dev.conf.js

@@ -10,7 +10,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
 const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
 const portfinder = require('portfinder')
 
-const HOST = '192.168.0.123'
+const HOST = '192.168.0.172'
 const PORT = process.env.PORT && Number(process.env.PORT)
 
 const devWebpackConfig = merge(baseWebpackConfig, {

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

@@ -79,7 +79,7 @@
     </div> -->
     <div class="hover-btns">
       <div class="h-price">
-       {{language!=='en'? `RMB ${selectParts?count*(9800 + 899):count*9800}`:'USD 1799'}}
+       {{language!=='en'? `RMB ${selectParts?count*(12800 + 899):count*12800}`:'USD 1799'}}
       </div>
       <div class="h-btns">
         <span v-if="language!=='en'" @click="addcart">加入购物车</span>
@@ -169,7 +169,7 @@ export default {
 
       let params = {
         goodsId: 4,
-        price: 9800,
+        price: 12800,
         goodsCount: this.count,
         skuSn: 'U15609161635760015'
       }

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

@@ -82,7 +82,7 @@
 
     <div class="hover-btns">
       <div class="h-price">
-       {{language!=='en'? `RMB ${count*9800}`:'USD 209'}}
+       {{language!=='en'? `RMB ${count*12800}`:'USD 209'}}
       </div>
       <div class="h-btns">
         <span v-if="language!=='en'" @click="addcart">加入购物车</span>

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

@@ -5,7 +5,7 @@ let baseUrl = vue.$cdn
 export default{
   introduce: {
     title: ['四维看看 Pro', '专业精准建模,高效复刻空间'],
-    price: 'RMB 9,800',
+    price: 'RMB 12,800',
     dec: '高清八镜头 精准复刻空间',
     btn: '立即购买',
     subTitle: '让三维空间获得数字新生',

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

@@ -4,7 +4,7 @@ let baseUrl = vue.$cdn
 
 export default{
   watch: '观看产品介绍',
-  buy: '早鸟价: RMB 9,800',
+  buy: 'RMB 12,800',
   tech: {
     title: '核心技术',
     dec: [

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

@@ -2,10 +2,10 @@ export default{
   top1: '概览',
   top2: '技术规格',
   dec: '高清八镜头 精准复刻空间',
-  yushou: '【早鸟价】',
-  price: 'RMB 9,800',
+  yushou: '',
+  price: 'RMB 12,800',
   why: '为什么要购买容量?',
-  addzhijia: 'RMB 10,395',
+  addzhijia: 'RMB 13,395',
   buy: '立即购买',
   tiaokuan: '* 付款成功后5个工作日内发货,默认顺丰快递包邮',
   guige: {

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

@@ -5,7 +5,7 @@ let baseUrl = vue.$cdn
 export default{
   introduce: {
     title: ['四维看看 Pro', '专业精准建模,高效复刻空间'],
-    price: 'RMB 9,800',
+    price: 'RMB 12,800',
     dec: '4DKanKan Pro generates 3D digital model of space automatically and takes measurements in real time. Results are displayed in 12K definition, and allow 4x magnification.',
     btn: 'Shop Now',
     subTitle: 'Bring Space to Life in Digital 3D',

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

@@ -10,7 +10,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
 const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
 const portfinder = require('portfinder')
 
-const HOST = '192.168.0.123'
+const HOST = '192.168.0.172'
 const PORT = process.env.PORT && Number(process.env.PORT)
 
 const devWebpackConfig = merge(baseWebpackConfig, {

BIN
pc/src/assets/images/zaonianjia.png


BIN
pc/src/assets/images/zaonianjia1.png


+ 81 - 0
pc/src/components/toast/cooperation.vue

@@ -0,0 +1,81 @@
+<template>
+  <div
+    class="toast-layout"
+    :style="{background:false?'none':'rgba(0, 0, 0, 0.3)'}"
+    :class="{'toast-active':visible}"
+  >
+    <div class="toast-con bind-con" :style="{minWidth:'505px'}">
+      <div class="t-header ">
+        <span>{{lang==='en'?'分配协助':'分配协助'}}</span>
+        <i class="iconfont icon-cuowu" @click="handleClick"></i>
+      </div>
+      <div class="binding-con" style="height:150px">
+        <div class="binding-body" style="width:450px;top:25px">
+          <div class="toclient">分配场景给用户</div>
+          <div class="b-input" >
+            <input v-model="userName" :placeholder="lang==='en'?'请输入用户账号':'请输入用户账号'" type="text">
+          </div>
+        </div>
+      </div>
+
+      <div class="bind-btn coo-btn" >
+        <span @click="addCooperation">{{lang==='en'?'确定':'确定'}}</span>
+        <span class="default" @click="handleClick">{{lang==='en'?'取消':'取消'}}</span>
+      </div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+
+export default {
+  props: ['sceneNum', 'visible'],
+  data () {
+    return {
+      userName: '',
+      lang: localStorage.getItem('language')
+    }
+  },
+  computed: {
+
+  },
+  watch: {
+    visible: function (newVal) {
+      this.userName = ''
+      this.lang = localStorage.getItem('language')
+    }
+  },
+  methods: {
+    handleClick () {
+      this.$emit('closePoint')
+    },
+    async addCooperation () {
+      let token = localStorage.getItem('token')
+
+      let result = await this.$http({
+        method: 'post',
+        data: {
+          userName: this.userName,
+          sceneNum: this.sceneNum
+        },
+        headers: {
+          token
+        },
+        url: '/user/scene/cooperation/save'
+      })
+      let data = result.data
+      if (data.code === 0) {
+        this.handleClick()
+        this.$toast.show('success', '分配成功')
+      } else {
+        return this.$toast.show('warn', data.msg, () => {})
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./style.scss";
+</style>

+ 6 - 1
pc/src/components/toast/index.vue

@@ -5,6 +5,8 @@
     <editInvoice :edititem=editItem :visible='editVisible' @closePoint="invoicehandle"/>
     <showInvoice :showitem=showItem :visible='showVisible' @closePoint="()=>{showVisible = false}"/>
     <binding :btype="bindingType" :visible='bindingVisible' @closePoint="()=>{bindingVisible = false,emitCallback()}"/>
+    <cooperation :sceneNum="sceneNum" :visible='cooperationVisible' @closePoint="()=>{cooperationVisible = false,emitCallback()}"/>
+
     <div
       class="toast-layout"
       :style="{background:isLoaing?'none':'rgba(0, 0, 0, 0.3)'}"
@@ -55,6 +57,7 @@ import capacityRecharge from './capacityRecharge'
 import editInvoice from './editInvoice'
 import showInvoice from './showInvoice'
 import binding from './binding'
+import cooperation from './cooperation'
 import { mapState } from 'vuex'
 
 let types = {
@@ -69,17 +72,19 @@ let typesEn = {
   success: 'Success'
 }
 export default {
-  components: {pointRecharge, binding, capacityRecharge, editInvoice, showInvoice},
+  components: {pointRecharge, binding, cooperation, capacityRecharge, editInvoice, showInvoice},
   data () {
     return {
       visible: false,
       bindingType: 1,
+      sceneNum: '',
       capacitytype: '',
       capacityvisible: false,
       ponintVisible: false,
       editVisible: false,
       showVisible: false,
       bindingVisible: false,
+      cooperationVisible: false,
       editItem: '',
       showItem: '',
       capacitydetail: '',

+ 16 - 0
pc/src/components/toast/style.scss

@@ -299,6 +299,12 @@ $border-color: #e7e7e7;
         left: 50%;
         transform: translateX(-50%);
         width: 420px;
+
+        .toclient{
+          color: #202020;
+          margin-bottom: 24px;
+          font-size: 14px;
+        }
         .b-input{
           width: 100%;
           input{
@@ -359,6 +365,16 @@ $border-color: #e7e7e7;
         cursor: pointer;
       }
     }
+    .coo-btn{
+      text-align: right;
+      padding-right: 30px;
+      >span{
+        text-align: center;
+      }
+      .default{
+        background-color: #E6E6E6;
+      }
+    }
     .invoice-con{
       background: #fff;
       padding: 30px;

+ 6 - 0
pc/src/components/toast/toast.js

@@ -70,6 +70,12 @@ Toast.install = function (Vue) {
       instance.callback = callback || function () {
       }
     },
+    showCooperation: (sceneNum, callback) => {
+      instance.sceneNum = sceneNum
+      instance.cooperationVisible = true
+      instance.callback = callback || function () {
+      }
+    },
     showInvoice: (item, callback) => {
       instance.editVisible = true
       instance.editItem = item

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

@@ -198,6 +198,7 @@ export default {
   // 生命周期 - 挂载完成(可以访问DOM元素)
   mounted () {
     document.addEventListener('click', (e) => {
+      console.log(this.$refs.mbMenu.contains)
       if (this.$refs.mbMenu) {
         if (!this.$refs.mbMenu.contains(e.target)) {
           this.selectActive = false

+ 118 - 38
pc/src/page/manage/temp/scene.vue

@@ -9,10 +9,11 @@
       />
       <i class="iconfont icon-sousuo" @click="gotoSearch(searchKey)"></i>
     </div>
-    <ul v-if="total">
+    <ul v-if="total" ref="ulMenu">
       <li v-for="(item,index) in myscene.list" :key="index">
         <div @click="((item.status === 1||item.status===-2)&&item.payStatus !== -2) && goto(item.webSite)" class="a-tap">
           <div class="share-btn" v-if="((item.status === 1||item.status===-2)&&item.payStatus !== -2)" @click.stop="handleShare(item)"></div>
+          <div class="cooperation" v-if="item.cooperationUserName"><i class="iconfont icon-geren"></i><span>{{item.cooperationUserName}}</span></div>
           <div class="card-img" :style="{backgroundImage: `url(${getSceneImg(item)})`}"></div>
           <div class="loading-hover" v-if="item.status === 0">
             <div class="loading-icon">
@@ -27,17 +28,26 @@
             <p class="huifu" @click.stop="rechargeTip(item)">{{langScenes.limit.recharge}}</p>
           </div>
         </div>
-        <div class="name">
+        <div class="name" >
           <div class="title">{{item.sceneName}}</div>
           <div class="oper">
-            <div v-if="item.status !== 0" @click="del(item)">
+            <div @click="handleMenu(index)">
+              <span class="spot"></span>
+            </div>
+            <ul v-if="ulActive === index">
+              <li v-if="item.status === 1||item.status===-2" @click="gotoEdit(item)">{{langScenes.edit}}</li>
+              <li @click="handleCooperation(item)">{{item.cooperationUserId?'取消协作':'分配协作'}}</li>
+              <li v-if="item.status !== 0" @click="del(item)">{{langScenes.delete}}</li>
+            </ul>
+            <!-- <div v-if="item.status !== 0" @click="del(item)">
               <span >{{langScenes.delete}}</span>
             </div>
             <div
               v-if="item.status === 1||item.status===-2"
               class="primary"
-              @click="gotoEdit(item)"
-            ><span>{{langScenes.edit}}</span></div>
+              @click="gotoEdit(item)">
+              <span>{{langScenes.edit}}</span>
+            </div> -->
           </div>
         </div>
         <div>
@@ -90,7 +100,7 @@
             <div>"{{lheight}}"</div>
             <p>src=</p>
             <div>"{{url}}"</div>
-            <p>frameborder=</p>
+            <p>allowfullscreen="true" frameborder=</p>
             <div>"0"</div>
             <div>{{'&gt;&lt;/iframe>'}}</div>
           </div>
@@ -134,7 +144,8 @@ export default {
       lwidth: 853,
       lheight: 480,
       url: 'https://www.4dkankan.com/showProPC.html?m=KcMeJlOr8',
-      item: ''
+      item: '',
+      ulActive: ''
     }
   },
   watch: {
@@ -182,10 +193,17 @@ export default {
       }
     }),
     htmlCode () {
-      return `<iframe src="${this.url}" width="${this.lwidth}" height="${this.lheight}" frameborder="0"></iframe>`
+      return `<iframe src="${this.url}" width="${this.lwidth}" height="${this.lheight}" allowfullscreen="true" frameborder="0"></iframe>`
     }
   },
   mounted () {
+    document.addEventListener('click', (e) => {
+      if (this.$refs.ulMenu) {
+        if (!this.$refs.ulMenu.contains(e.target)) {
+          this.ulActive = ''
+        }
+      }
+    })
     if (this.deviceLogin) {
       this.$bus.$off('mycid')
       this.$bus.$on('mycid', item => {
@@ -198,6 +216,35 @@ export default {
     }
   },
   methods: {
+    async handleCooperation (item) {
+      if (item.cooperationUserId) {
+        let result = await this.$http({
+          method: 'post',
+          data: {
+            sceneNum: item.num
+          },
+          headers: {
+            token: this.token
+          },
+          url: '/user/scene/cooperation/delete'
+        })
+        let data = result.data
+        if (data.code === 0) {
+          this.$toast.show('success', '取消协作成功', () => {
+            this.getList()
+          })
+        } else {
+          return this.$toast.show('warn', data.msg, () => {})
+        }
+      } else {
+        this.$toast.showCooperation(item.num, () => {
+          this.getList()
+        })
+      }
+    },
+    handleMenu (index) {
+      this.ulActive = index === this.ulActive ? '' : index
+    },
     rechargeTip (item) {
       this.$toast.showConfirm('warn', this.langToast['28'], () => {
         let routeData = this.$router.resolve({name: 'introduce', params: {id: item.childName}})
@@ -231,7 +278,6 @@ export default {
       }
 
       window.open([r, f].join(''), '', ['toolbar=0,status=0,resizable=1,width=620,height=450,left=', ((n.width) / 2) - 310, ',top=', ((n.height) / 2) - 225].join('')) || (u.href = [r, f].join(''))
-      // window.open('http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://m.goczx.com/&title=【东莞厂房租售网|东莞厂房招租信息|东莞厂房网】-东莞i厂房网&desc=东莞i厂房网&summary=东莞i厂房网&site={{100*100}}&pics=http://img6.zcf8.com/black_logo1.png?imageView/3/w/67/h/27')
     },
     handleShare (item) {
       this.url = item.webSite.replace('http://', 'https://')
@@ -242,8 +288,6 @@ export default {
     },
     goto (url) {
       let temp = url.replace('show.html', 'showPC.html')
-      // let temp1 = temp.replace('//www', '//test')
-      // window.open(temp.replace('//www', '//test'), '_blank')
       window.open(temp.replace('http://', 'https://') + (this.language === 'en' ? '&lang=en' : ''), '_blank')
     },
     getSceneImg (item) {
@@ -374,9 +418,9 @@ export default {
 }
 .scene-layout {
   width: 100%;
-  ul {
+  > ul {
     padding: 30px 0 0 40px;
-    li {
+    > li {
       width: 270px;
       display: inline-block;
       position: relative;
@@ -416,7 +460,20 @@ export default {
         background-repeat: no-repeat;
         background-size: cover;
         border-radius: 50%;
-        //  :src="`${$cdn}images/share-btn.png`"
+      }
+      .cooperation{
+        background:rgba(0,0,0,0.5);
+        position: absolute;
+        bottom: 0;
+        width: 100%;
+        height: 30px;
+        text-align: center;
+        line-height: 30px;
+        color: #FFFFFF;
+        >span{
+          display: inline-block;
+          margin-left: 6px;
+        }
       }
       .name {
         display: flex;
@@ -435,33 +492,56 @@ export default {
         .oper {
           flex: 1;
           text-align: right;
-          div {
+          cursor: pointer;
+          position: relative;
+          >div {
             display: inline-block;
-            background: #fff;
-            color: #000;
-            border: 1px solid #777777;
-            border-radius: 2px;
-            font-size: 12px;
-            width: 52px;
-            height: 22px;
-            line-height: 22px;
-            text-align: center;
-            vertical-align: middle;
-            margin-left: 4px;
-            box-sizing: border-box;
-            cursor: pointer;
-            position: relative;
-            span{
-              position: absolute;
-              top: 50%;
-              left: 50%;
-              transform: translate(-50%,-50%);
-              width: 100%;
+            width: 20%;
+            .spot{
+              width: 4px;
+              height: 4px;
+              display: inline-block;
+              background-color: #202020;
+              border-radius: 50%;
+              position: relative;
+              margin-right: 10px;
+              &::after,&::before{
+                content: '';
+                position: absolute;
+                width: 4px;
+                height: 4px;
+                display: inline-block;
+                background-color: #202020;
+                border-radius: 50%;
+                left: -8px;
+                top: 50%;
+                transform: translateY(-50%);
+              }
+              &::before{
+                right: -8px;
+                left: unset;
+              }
             }
           }
-          .primary{
-            background: #1fe4dc;
-            border: 1px solid #1fe4dc;
+
+          >ul{
+            position: absolute;
+            top: 30px;
+            z-index: 9;
+            left: 58%;
+            background: #F7F7F7;
+            min-width: 90px;
+            box-shadow:0px 1px 6px rgba(0,0,0,0.16);
+            >li{
+              text-align: center;
+              width: 100%;
+              line-height: 2.5;
+              padding: 0 10px;
+              color: #202020;
+              &:hover{
+                background-color: #EBEBEB;
+              }
+            }
           }
         }
       }

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

@@ -235,7 +235,7 @@ export default {
         sku: [{
           goodsId: 4,
           goodsCount: this.count,
-          price: 9800,
+          price: 12800,
           skuSn: 'U15609161635760015'
         }],
         fromList: false

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

@@ -5,7 +5,7 @@ let baseUrl = vue.$cdn
 export default{
   introduce: {
     title: ['四维看看 Pro', '专业精准建模,高效复刻空间'],
-    price: 'RMB 9,800',
+    price: 'RMB 12,800',
     dec: '高精度3D空间相机,12K高清分辨率,支持4倍细节放大,720°空间漫游。',
     btn: '立即购买',
     subTitle: '让三维空间获得数字新生',

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

@@ -4,9 +4,9 @@ export default{
   top1: '概览',
   top2: '技术规格',
   dec: '高清八镜头  精准复刻空间',
-  yushou: '【早鸟价】',
-  price: 'RMB 9,800',
-  addzhijia: 'RMB 10,395',
+  yushou: '',
+  price: 'RMB 12,800',
+  addzhijia: 'RMB 13,395',
   buy: '立即购买',
   why: '为什么要购买容量?',
   tiaokuan: '* 付款成功后5个工作日内发货,默认顺丰快递包邮',

+ 1 - 1
pc/src/util/http.js

@@ -6,7 +6,7 @@ import Vue from 'vue'
 let vue = new Vue()
 // import qs from 'qs'
 const exceptUrls = ['/sso/user/logout', '/sso/user/sendUserInfo', '/user/order/queryOrderStatus', '/user/checkToken']
-axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'https://www.4dkankan.com/api' : '/api'
+axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'https://test.4dkankan.com/api' : '/api'
 
 // axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.0.207:8087/api' : '/api'
 // 请求超时时限