Explorar o código

feat:增加展会编辑的功能,企业信息编辑的功能

徐志豪 %!s(int64=5) %!d(string=hai) anos
pai
achega
65dbd31e42
Modificáronse 48 ficheiros con 685 adicións e 232 borrados
  1. 2 2
      admin/src/api/company.js
  2. 9 35
      admin/src/api/index.js
  3. 2 2
      admin/src/api/upload.js
  4. 3 4
      admin/src/assets/css/global.less
  5. 25 8
      admin/src/components/map/index.vue
  6. 23 6
      admin/src/components/quillEditor/index.vue
  7. 17 5
      admin/src/components/upload/index.vue
  8. 45 17
      admin/src/components/upload/video.vue
  9. 9 2
      admin/src/layout/index/index.vue
  10. 1 1
      admin/src/libs/request.js
  11. 1 1
      admin/src/store/user.js
  12. 27 37
      admin/src/views/activity/activityEdit.vue
  13. 11 0
      admin/src/views/activity/enterpriseList.vue
  14. 84 11
      admin/src/views/activity/homeAdmin.vue
  15. 58 39
      admin/src/views/enterprise/components/baseForm.vue
  16. 31 1
      admin/src/views/enterprise/components/introPicForm.vue
  17. 35 4
      admin/src/views/enterprise/components/videoForm.vue
  18. 44 11
      admin/src/views/enterprise/index.vue
  19. 1 7
      admin/src/views/system/user/list.vue
  20. 2 2
      admin/vue.config.js
  21. 1 1
      miniprogram/app.json
  22. 1 1
      miniprogram/app.wxss
  23. 1 1
      miniprogram/components/business-card/index.wxml
  24. 43 0
      miniprogram/components/login-pannel/login-pannel.js
  25. 4 0
      miniprogram/components/login-pannel/login-pannel.json
  26. 10 0
      miniprogram/components/login-pannel/login-pannel.wxml
  27. 58 0
      miniprogram/components/login-pannel/login-pannel.wxss
  28. 2 2
      miniprogram/config/config.js
  29. 2 2
      miniprogram/pages/about/about.wxml
  30. 3 2
      miniprogram/pages/exhibition-enterprise/exhibition-enterprise.js
  31. 1 1
      miniprogram/pages/exhibition-enterprise/exhibition-enterprise.wxml
  32. 1 1
      miniprogram/pages/exhibition-enterprise/exhibition-enterprise.wxss
  33. 1 1
      miniprogram/pages/index/index.json
  34. 1 1
      miniprogram/pages/index/index.wxml
  35. 10 0
      miniprogram/pages/index/index.wxss
  36. 1 1
      miniprogram/pages/login/login.json
  37. 1 1
      miniprogram/pages/login/login.wxml
  38. 1 1
      miniprogram/pages/logout/logout.wxml
  39. 18 0
      miniprogram/pages/my/my.js
  40. 1 1
      miniprogram/pages/my/my.wxml
  41. 1 1
      miniprogram/pages/scene/scene.json
  42. 10 6
      miniprogram/pages/search/search.js
  43. 4 4
      miniprogram/pages/search/search.wxml
  44. 8 2
      miniprogram/pages/search/search.wxss
  45. 29 6
      miniprogram/pages/shared/shared.js
  46. 1 1
      miniprogram/pages/shared/shared.wxml
  47. 1 0
      miniprogram/pages/shared/shared.wxss
  48. 40 0
      miniprogram/utils/utils.js

+ 2 - 2
admin/src/api/company.js

@@ -6,14 +6,14 @@ export function addCompany (data) {
 }
 
 export function getCompanyDetail (companyId) {
-  return request.post('company/getCompanyDetail', {companyId})
+  return request.get('company/getCompanyDetail', {params: {companyId}})
 }
 
 export function getCompanyList (params) {
   const defaultParams = {
     pageNum: 1,
     pageSize: 10,
-    keyword: params.searchKey || '',
+    key: params.searchKey || '',
     token: getToken()
   }
   return request.get('company/getCompanyList', {params: Object.assign(defaultParams, params)})

+ 9 - 35
admin/src/api/index.js

@@ -14,33 +14,6 @@ export function login(data) {
   })
 }
 
-// 注册接口
-export function register(data) {
-  return request({
-    url: 'register',
-    method: 'post',
-    data
-  })
-}
-
-// 获取验证码接口
-export function getCode(data) {
-  data.area_num = '86'
-  return request({
-    url: `getMsgAuthCode`,
-    method: 'get',
-    params: data
-  })
-}
-
-// 修改密码
-export function changePassword (data) {
-  return request({
-    url: `changePassword`,
-    method: 'post',
-    data: data
-  })
-}
 
 // 获取管理员列表
 export function fetchUserList (params= {}) {
@@ -52,15 +25,16 @@ export function fetchUserList (params= {}) {
   return request.get('listAdmin', {params: Object.assign(defaultParams, params)})
 }
 
-export function fetchRoleList () {
-  return request.get('sysRole/list')
-}
-// 获取首页统计信息
-export function getHomeData () {
-  return request.get('home')
-}
-
 export function updateUser (data) {
   return request.post('changeInfo', data)
 }
 
+// 修改首页运营的数据
+export function upadteActivity (data) {
+  return request.post('activity/update', data)
+}
+
+// 获取最新一个展会的详情
+export function getActivityDetail () {
+  return request.get('activity/getLatest')
+}

+ 2 - 2
admin/src/api/upload.js

@@ -1,5 +1,5 @@
 import request from 'libs/request'
-// const UploadUrl = '//127.0.0.1:1935'
+const UploadUrl = '//127.0.0.1:1935'
 export function uploadFile (file, opts) {
   if (!file) return new Promise(resolve => resolve())
   if (file.type === 'image/png' || file.type === 'image/jpeg') {
@@ -31,7 +31,7 @@ export function uploadVideo (file) {
   let formData = new FormData()
 
   formData.append('file', file)
-  return request.post(`house/upLoadVideo`, formData)
+  return request.post(`${UploadUrl}/upLoadVideo`, formData)
 }
 
 export function getVideoFirstImage (object_name) {

+ 3 - 4
admin/src/assets/css/global.less

@@ -43,7 +43,6 @@ body,
   }
   .ivu-input-word-count,.ivu-input-group-append {
     background: #161a1a;
-    
   }
   .ivu-input-group-append {
     border-left: none;
@@ -333,9 +332,9 @@ select:-webkit-autofill {
   line-height: 1;
 }
 
-.upload-box {
-  width: 500px;
-}
+// .upload-box {
+//   width: 500px;
+// }
 .house-upload {
   width: 100px;
   height: 100px;

+ 25 - 8
admin/src/components/map/index.vue

@@ -47,6 +47,23 @@ export default {
         this.initMarkerEvent()
       
     },
+    search ({lat, lng}) {
+      this.map.setCenter(new TMap.LatLng(lat,lng))
+      this.marker.remove(["1"])
+        const latLng = {lat, lng}
+        this.markerArr = [{
+          id: '1',
+          styleId: 'marker',
+          position: latLng,
+          properties: {
+            title: '1'
+          }
+        }]
+        this.marker.add(this.markerArr)
+        getLocationByGeocoder(`${latLng.lat},${latLng.lng}`).then(res => {
+          this.$emit('clickMap', {address_component: res.result.address_component,address: res.result.formatted_addresses.recommend, location: res.result.location})
+        })
+    },
     getLocationByIp () {
       if (this.location.location) {
         return
@@ -79,7 +96,7 @@ export default {
       
     },
     initMarkerEvent () {
-      let marker = new TMap.MultiMarker({
+      this.marker = new TMap.MultiMarker({
             id: 'marker-layer',
             map: this.map,
             styles: {
@@ -92,7 +109,7 @@ export default {
             },
             geometries: this.markerArr
         })
-        marker.remove(["1"])
+        this.marker.remove(["1"])
         let latlng = {
               lat: this.latitude,
               lng: this.longitude
@@ -105,9 +122,9 @@ export default {
             title: '1'
           }
         }]
-        marker.add(this.markerArr)
+        this.marker.add(this.markerArr)
         this.map.on('click', (evt) => {
-          marker.remove(["1"])
+          this.marker.remove(["1"])
           const latLng = evt.latLng
           this.markerArr = [{
             id: '1',
@@ -117,7 +134,7 @@ export default {
               title: '1'
             }
           }]
-          marker.add(this.markerArr)
+          this.marker.add(this.markerArr)
           getLocationByGeocoder(`${latLng.lat},${latLng.lng}`).then(res => {
             this.$emit('clickMap', {address_component: res.result.address_component,address: res.result.formatted_addresses.recommend, location: res.result.location})
           })
@@ -131,10 +148,10 @@ export default {
 <style lang="less">
 .qqmap {
   position: relative;
-  width: 800px;
+  width: 100%;
   height: 400px;
   background-color: #28272a;
-  padding-top: 20px;
+  margin-top: 20px;
 }
 .map-tools {
   position: absolute;
@@ -158,7 +175,7 @@ export default {
 }
 .map {
     position: relative;
-    width: 800px;
+    width: 100%;
   height: 400px;
   }
 .map-select {

+ 23 - 6
admin/src/components/quillEditor/index.vue

@@ -75,16 +75,38 @@ const titleConfig = [
 ];
 
 export default {
+  props: {
+    value: String
+  },
+  model: {
+    prop: 'value',
+    event: 'input'
+  },
   data() {
     return {
-      content: "<h2>I am Example</h2>",
       editorOption: {}
     };
   },
+  computed: {
+    content: {
+      set (val) {
+        this.$emit('input', val)
+      },
+      get () {
+        return this.value
+      }
+    },
+    editor() {
+      return this.$refs.myQuillEditor.quill;
+    }
+  },
   components: {
     quillEditor
   },
   methods: {
+    // onEditorInput (e) {
+    //   this.$emit('input', e)
+    // },
     onEditorBlur(quill) {
       console.log("editor blur!", quill);
     },
@@ -107,11 +129,6 @@ export default {
       }
     }
   },
-  computed: {
-    editor() {
-      return this.$refs.myQuillEditor.quill;
-    }
-  },
   mounted() {
     console.log("this is current quill instance object", this.editor);
     this.autotip()

+ 17 - 5
admin/src/components/upload/index.vue

@@ -9,6 +9,7 @@
       action="#"
       :show-upload-list="false"
       :data="data"
+      v-if="!hideUpload"
     >
       <div class="upload">
         <Icon type="md-add" size="40" style="color: #1FE4DC;" />
@@ -25,8 +26,9 @@
         <div
           class="close-btn"
           @click="handleCancleClick(uploadfiles, 'hasUploads')"
+          v-if="!hideUpload"
         >
-          <Icon class="close" custom="iconfont iconform_close" />
+          <Icon type="ios-close" class="close" />
         </div>
         <div
           class="tip "
@@ -46,8 +48,9 @@
         <div
           class="close-btn"
           @click="handleCancleClick(uploadfiles, 'preUploads')"
+          v-if="!hideUpload"
         >
-          <Icon class="close" custom="iconfont iconform_close" />
+          <Icon type="ios-close" class="close" />
         </div>
         <div
           class="tip "
@@ -65,6 +68,7 @@
 import { uploadFile } from 'api/upload'
 export default {
   props: {
+    hideUpload: Boolean,
     preUploads: {
       type: Array,
       default () {
@@ -104,6 +108,13 @@ export default {
   },
   methods: {
     handleBeforeUpload (file) {
+      const { size } = file
+      if (size > this.maxSize * 1024) {
+        this.$Message.error({
+          content: `图片大小超出限制`
+        })
+        return
+      }
       if (this.limit && this.uploads.length >= this.limit) {
         this.$Message.error({
           content: `只能上传${this.limit}张图片`
@@ -127,8 +138,9 @@ export default {
         this.data = opts
       }
       console.log(opts, 'opts')
-      return Promise.all(this.preUploads.map(item => this.uploadTypeFile(item))).then(() => {
-        return this.cover_image
+      console.log(this.preUploads)
+      return Promise.all(this.preUploads.map(item => this.uploadTypeFile(item))).then((res) => {
+        return res
       })
     },
     uploadTypeFile (file) {
@@ -142,7 +154,7 @@ export default {
         file.img = res.data.url
         this.hasUploads.push(file)
         this.preUploads.splice(this.preUploads.indexOf(file), 1)
-        return res
+        return file.img
       })
     },
     handleClickCover (file) {

+ 45 - 17
admin/src/components/upload/video.vue

@@ -8,6 +8,7 @@
       :before-upload="handleBeforeUpload"
       action="#"
       :show-upload-list="false"
+      v-if="!hideUpload"
     >
       <div class="upload">
         <Icon type="md-add" size="40" style="color: #1FE4DC;" />
@@ -18,29 +19,38 @@
         v-for="(uploadfiles) in hasUploads"
         :key="uploadfiles.img"
         class="file-item"
+        @click="selectedVideo = uploadfiles.url;show=true"
       >
         <img :src="uploadfiles.img" />
         <div
           class="close-btn"
-          @click="handleCancleClick(uploadfiles, 'hasUploads')"
+          @click.stop="handleCancleClick(uploadfiles, 'hasUploads')"
+          v-if="!hideUpload"
         >
-          <Icon class="close" custom="iconfont iconform_close" />
+          <Icon type="ios-close" />
         </div>
       </div>
       <div
         v-for="(uploadfiles) in preUploads"
         :key="uploadfiles.img"
         class="file-item"
+        @click="selectedVideo = uploadfiles.url;show=true"
       >
         <img :src="uploadfiles.img" />
         <div
           class="close-btn"
-          @click="handleCancleClick(uploadfiles, 'preUploads')"
+          @click.stop="handleCancleClick(uploadfiles, 'preUploads')"
+          v-if="!hideUpload"
         >
-          <Icon class="close" custom="iconfont iconform_close" />
+          <Icon type="ios-close" />
         </div>
     </div>
     <p class="tips">{{ tips }}</p>
+    <Modal v-model="show" footer-hide>
+      <div>
+        <video width="488" controls="controls" autoplay :src="selectedVideo"></video>
+      </div>
+    </Modal>
   </div>
 </template>
 
@@ -48,6 +58,7 @@
 import { uploadFile } from 'api/upload'
 export default {
   props: {
+    hideUpload: Boolean,
     limit: Number,
     preUploads: Array,
     hasUploads: Array,
@@ -58,10 +69,16 @@ export default {
     tips: {
       type: String,
       default: ''
+    },
+    maxSize: {
+      type: Number,
+      default: 10 * 1024
     }
   },
   data () {
     return {
+      show: false,
+      selectedVideo: ''
     }
   },
   computed: {
@@ -71,6 +88,13 @@ export default {
   },
   methods: {
     handleBeforeUpload (file) {
+      const { size } = file
+      if (size > this.maxSize * 1024) {
+        this.$Message.error({
+          content: '上传视频过大'
+        })
+        return
+      }
       if (this.limit && this.uploads.length >= this.limit) {
         this.$Message.error({
           content: '上传数量已超过限制'
@@ -80,8 +104,9 @@ export default {
       const url = URL.createObjectURL(file)
       this.getVideoBase64(url).then(res => {
         file.img = res
+        file.url = url
         this.preUploads.push(file)
-        URL.revokeObjectURL(url)
+        // URL.revokeObjectURL(url)
       })
       return false
     },
@@ -95,17 +120,16 @@ export default {
           video.setAttribute('height', 100);
           video.setAttribute('autoplay', true);
           video.addEventListener('loadeddata', function () {
-              let canvas = document.createElement("canvas"),
-                  width = video.width, //canvas的尺寸和图片一样
-                  height = video.height;
-              canvas.width = width;
-              canvas.height = height;
-              canvas.getContext("2d").drawImage(video, 0, 0, width, height)
-              canvas.getContext("2d").drawImage(video, 0, 0, width, height); //绘制canvas
-              dataURL = canvas.toDataURL('image/png'); //转换为base64
-              resolve(dataURL);
-          });
-        })
+          let canvas = document.createElement("canvas"),
+          width = video.width, //canvas的尺寸和图片一样
+          height = video.height;
+          canvas.width = width;
+          canvas.height = height;
+          canvas.getContext("2d").drawImage(video, 0, 0, width, height)
+          dataURL = canvas.toDataURL('image/png'); //转换为base64
+          resolve(dataURL);
+        });
+      })
     },
     handleCancleClick (uploadfile, type) {
       this[type].splice(this[type].indexOf(uploadfile), 1)
@@ -117,7 +141,6 @@ export default {
     },
     uploadTypeFile (file) {
       return uploadFile(file).then(res => {
-        console.log(res.data, res.data.image)
         file.video = res.data.video
         file.cover_image = res.data.image
         this.hasUploads.push(file)
@@ -125,6 +148,11 @@ export default {
         return res
       })
     }
+  },
+  beforeDestroy () {
+    this.uploads.forEach(item => {
+      URL.revokeObjectURL(item.url)
+    })
   }
 }
 </script>

+ 9 - 2
admin/src/layout/index/index.vue

@@ -7,7 +7,7 @@
         好玩展-管理后台
       </div>
       <Menu theme="dark" :active-name="$route.name" width="auto" class="layout-menu">
-        <template v-for="(item, index) in menuList[0].children">
+        <template v-for="(item, index) in menuList">
             <MenuItem
               :key="item.name"
               :to="item.path"
@@ -68,6 +68,9 @@
 import { mapActions } from 'vuex'
 import editPassword from 'components/editPassword'
 import CModal from 'components/Modal'
+import { authRoutes } from '@/router/routes'
+import { getAdmin } from '@/libs/token'
+
 export default {
   name: 'Index',
   data() {
@@ -78,7 +81,8 @@ export default {
   },
   computed: {
     menuList() {
-      return this.$store.getters.menuList
+      const menuList = getAdmin().menuList ? getAdmin().menuList.map(item => item.name) : []
+      return this.$store.getters.menuList[0].children.filter(item => menuList.indexOf(item.meta.title) > -1 )
     },
     userName() {
       return this.$store.getters.userName
@@ -91,6 +95,9 @@ export default {
     editPassword,
     CModal
   },
+  mounted () {
+    
+  },
   methods: {
     ...mapActions([
       'logout'

+ 1 - 1
admin/src/libs/request.js

@@ -45,7 +45,7 @@ service.interceptors.response.use(
     // 处理后端响应数据状态码不在预设值得情况下,处理异常,这里预设值为2000
     if (data.code && data.code != 0) {
       // 再进一步判断
-      if (data.code == 3004 || data.code == 3005) {
+      if (data.code == 3101 || data.code == 3005) {
         data.code == 3005 && Message.error({ content: 'token过期,请重新登录' })
         app.$router.push('/login')
         setToken('')

+ 1 - 1
admin/src/store/user.js

@@ -50,7 +50,7 @@ export default {
           res => {
             const { data } = res
             setToken(data.token)
-            setAdmin(data.admin)
+            setAdmin(data)
             commit('setName', data.admin.name || data.user.userName)
             resolve(res)
           }

+ 27 - 37
admin/src/views/activity/activityEdit.vue

@@ -5,71 +5,61 @@
       <div style="min-height: 460px">
         <Form :label-width="86">
           <FormItem label="展会名称">
-            <Input size="large" />
+            <Input size="large" v-model="form.name" />
           </FormItem>
           <FormItem label="展会概况">
             <quill-editor
-              ref="myQuillEditor"
-              v-model="content"
-              :options="editorOption"
-              @blur="onEditorBlur($event)"
-              @focus="onEditorFocus($event)"
-              @ready="onEditorReady($event)"
+              v-model="form.detailContent"
             />
           </FormItem>
           <FormItem label="联系我们">
-            <!-- <quill-editor
-              ref="myQuillEditor"
-              v-model="content"
-              :options="editorOption"
-              @blur="onEditorBlur($event)"
-              @focus="onEditorFocus($event)"
-              @ready="onEditorReady($event)"
-            /> -->
+            <quill-editor
+              v-model="form.contactUs"
+            />
+          </FormItem>
+          <FormItem>
+            <Button type="primary" size="large" @click="upadteActivity">提交</Button>
           </FormItem>
         </Form>
       </div>
     </div>
   </div>
-
-  <!-- Or manually control the data synchronization -->
-  <!-- <quill-editor
-    :content="content"
-    :options="editorOption"
-    @change="onEditorChange($event)"
-  /> -->
 </template>
 
 <script>
 import quillEditor from "@/components/quillEditor";
-
+import { getActivityDetail, upadteActivity } from '@/api'
 export default {
   data() {
     return {
-      content: "<h2>I am Example</h2>",
-      editorOption: {
-        // Some Quill options...
-        // modules: {
-        //   toolbar: [
-        //     [{color: ['#000']}, { 'background': ['#000'] }]
-        //   ]
-        // }
+      form: {
+        contactUs: '',
+        detailContent: ''
       }
     };
   },
   components: {
     quillEditor
   },
-  methods: {
-  },
+  
   computed: {
-    editor() {
-      return this.$refs.myQuillEditor.quill;
-    }
   },
   mounted() {
     console.log("this is current quill instance object", this.editor);
-  }
+    this.getActivityDetail()
+  },
+  methods: {
+    upadteActivity () {
+      upadteActivity(this.form).then(() => {
+        this.$Message.success('更新成功')
+      })
+    },
+    getActivityDetail () {
+      getActivityDetail().then(res => {
+        this.form = res.data
+      })
+    }
+  },
 };
 </script>
 

+ 11 - 0
admin/src/views/activity/enterpriseList.vue

@@ -4,6 +4,7 @@
       :data-api="getCompanyList"
       :delete-api="deleteApi"
       :columns="columns"
+      @toCheck="check"
       deleteIdKey="agency_user_id"
       placeholder="输入公司名称"
       ref="table"
@@ -67,6 +68,16 @@ export default {
   },
   components: {
     tables
+  },
+  methods: {
+    check (item) {
+      this.$router.push({
+        path: '/enterprise',
+        query: {
+          companyId: item.companyId
+        }
+      })
+    }
   }
 }
 </script>

+ 84 - 11
admin/src/views/activity/homeAdmin.vue

@@ -4,7 +4,7 @@
       <div class="header-title">顶部海报</div>
       <Form :label-width="86" class="form">
         <FormItem label="上传海报">
-          <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" :preUploads="postPreUploads" :hasUpload="postHasUploads" />
+          <picUpload tips="只能上传jpg/png文件,且不超过500kb" ref="post-upload" :limit="1" :multiple="false" :preUploads="postPreUploads" :hasUploads="postHasUploads" />
         </FormItem>
       </Form>
       <div class="header-title">明星企业</div>
@@ -12,43 +12,49 @@
         <Row>
           <i-col :span="12">
             <FormItem label="上传海报">
-            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb"  ref="banner1-upload" :limit="1" :multiple="false" :preUploads="banner1PreUploads" :hasUploads="banner1HasUploads" />
           </FormItem>
           </i-col>
           <i-col :span="12">
             <FormItem label="选择企业">
-              <Input size="large" />
+              <Select v-model="banner1" filterable size="large" @on-change="changeBanner(1)">
+                <Option v-for="item in companyList" :value="item.vrLink" :key="item.companyId">{{ item.companyName }}</Option>
+              </Select>
           </FormItem>
           </i-col>
         </Row>
         <Row>
           <i-col :span="12">
             <FormItem label="上传海报">
-            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb"  ref="banner2-upload" :limit="1" :multiple="false" :preUploads="banner2PreUploads" :hasUploads="banner2HasUploads" />
           </FormItem>
           </i-col>
           <i-col :span="12">
             <FormItem label="选择企业">
-              <Input size="large" />
+              <Select v-model="banner2" filterable size="large" @on-change="changeBanner(2)">
+                <Option v-for="item in companyList" :value="item.vrLink" :key="item.companyId">{{ item.companyName }}</Option>
+              </Select>
           </FormItem>
           </i-col>
         </Row>
         <Row>
           <i-col :span="12">
             <FormItem label="上传海报">
-            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb"  ref="banner3-upload" :limit="1" :multiple="false" :preUploads="banner3PreUploads" :hasUploads="banner3HasUploads" />
           </FormItem>
           </i-col>
           <i-col :span="12">
             <FormItem label="选择企业">
-              <Input size="large" />
-          </FormItem>
+              <Select v-model="banner3" filterable size="large" @on-change="changeBanner(3)">
+                <Option v-for="item in companyList" :value="item.vrLink" :key="item.companyId">{{ item.companyName }}</Option>
+              </Select>
+            </FormItem>
           </i-col>
         </Row>
       </Form>
       <div class="actions-w">
-        <Button size="large" type="primary" class="submit-btn">提交</Button>
-        <Button size="large"  class="cancle-btn">取消</Button>
+        <Button size="large" type="primary" class="submit-btn" @click="submit">提交</Button>
+        <!-- <Button size="large"  class="cancle-btn">取消</Button> -->
       </div>
     </div>
     
@@ -57,15 +63,82 @@
 
 <script>
 import picUpload from '@/components/upload'
+import { upadteActivity, getActivityDetail } from '@/api'
+import { getCompanyList } from '@/api/company'
 export default {
   data () {
     return {
       postPreUploads: [],
-      postHasUploads: []
+      postHasUploads: [],
+      form: {
+        firstPageContent: [{},{},{}]
+      },
+      companyList: [],
+      banner1: '',
+      banner2: '',
+      banner3: '',
+      banner1PreUploads: [],
+      banner1HasUploads: [],
+      banner2PreUploads: [],
+      banner2HasUploads: [],
+      banner3PreUploads: [],
+      banner3HasUploads: [],
     }
   },
   components: {
     picUpload
+  },
+  mounted () {
+    this.getCompanyList()
+    this.getActivityDetail()
+  },
+  methods: {
+    upadteActivity () {
+      let form = Object.assign({}, this.form)
+      form.firstPageContent = JSON.stringify(form.firstPageContent)
+      upadteActivity(form).then(() => {
+        this.$Message.success('更新成功')
+      })
+    },
+    getCompanyList () {
+      getCompanyList({pageSize: 9999}).then(res => {
+        this.companyList = res.data.list
+      })
+    },
+    submit () {
+      return Promise.all([this.$refs['post-upload'].uploadfiles(), this.$refs['banner1-upload'].uploadfiles(), this.$refs['banner2-upload'].uploadfiles(), this.$refs['banner3-upload'].uploadfiles()]).then(res => {
+        if (res[0][0]) {
+          this.form.logoUrl = res[0][0]
+        }
+        for (let i = 1; i<res.length; i++) {
+          if (res[i][0]) {
+            if (!this.form.firstPageContent[i-1]) {
+              this.form.firstPageContent[i-1] = {}
+            } 
+            this.form.firstPageContent[i-1].img = res[i][0]
+          }
+        }
+        this.upadteActivity()
+      })
+    },
+    changeBanner (index) {
+      const value = this[`banner${index}`]
+      if (!this.form.firstPageContent[index-1]) {
+              this.form.firstPageContent[index-1] = {}
+            }
+      this.form.firstPageContent[index-1].link = value
+    },
+    getActivityDetail () {
+      getActivityDetail().then(res => {
+        this.form = res.data
+        this.form.firstPageContent = JSON.parse(this.form.firstPageContent)
+        this.postHasUploads = [{img: res.data.logoUrl}]
+        this.form.firstPageContent.forEach((item, index) => {
+          this[`banner${index+1}HasUploads`] = [{ img: item.img }]
+          this[`banner${index+1}`] = item.link
+        })
+      })
+    }
   }
 }
 </script>

+ 58 - 39
admin/src/views/enterprise/components/baseForm.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="base-form">
     <div class="form">
-      <Form :label-width="86" :rules="rules" :model="form">
+      <Form :label-width="86" :rules="rules" :model="form" ref="form">
         <Row :gutter="90">
           <i-col :span="12" class="">
             <FormItem label="公司名称" prop="companyName">
@@ -10,7 +10,7 @@
           </i-col>
           <i-col :span="12" class="">
             <FormItem label="所属行业" prop="companyType">
-              <i-select size="large" :model.sync="form.companyType" @on-change="changeCompanyType">
+              <i-select size="large" v-model="form.companyType" @on-change="changeCompanyType" :disabled="isDetail">
                 <i-option v-for="item in industryList" :key="item.id" :value="item.name">{{ item.name }}</i-option>
               </i-select>
               <!-- <Input type="text" size="large" v-model="form.companyType" :disabled="isDetail" /> -->
@@ -18,7 +18,7 @@
           </i-col>
           <i-col :span="12" class="">
             <FormItem label="成立时间" prop="companyRegisterTime">
-              <Date-picker v-model="form.companyRegisterTime" type="year" size="large" placeholder="选择年"  :disabled="isDetail"></Date-picker>
+              <Date-picker :value="form.companyRegisterTime" type="year" size="large" placeholder=""  :disabled="isDetail" @on-change="changeDate"></Date-picker>
             </FormItem>
           </i-col>
           <i-col :span="12" class="">
@@ -37,40 +37,28 @@
             </FormItem>
           </i-col>
           <i-col :span="12" class="">
-            <FormItem label="公司传真">
-              <Input type="text" size="large" v-model="form.companyFax" :disabled="isDetail" />
-            </FormItem>
-          </i-col>
-          <i-col :span="12" class="">
-            <FormItem label="邮政编码">
-              <Input type="text" size="large" v-model="form.companyType" :disabled="isDetail" />
-            </FormItem>
-          </i-col>
-          <i-col :span="12" class="">
             <FormItem label="公司网址">
-              <Input type="text" size="large" v-model="form.companyType" :disabled="isDetail" />
+              <Input type="text" size="large" v-model="form.companyWebsite" :disabled="isDetail" />
             </FormItem>
           </i-col>
-          <i-col :span="12" class="">
+          <i-col :span="24" class="">
             <FormItem label="公司地址">
-              <i-select size="large" @on-change="changeAddress" filterable :remote-method="changeAddress">
-                <i-option v-for="item in addressList" :value="`${item.title}-${item.address}`" :key="item.id">
-                  <template>
-                    <p class="address-name">{{ item.title }}</p>
-                    <p class="address-detail">{{ item.address }}</p>
-                  </template>
-                </i-option>
-              </i-select>
+              <template>
+                <Input size="large" v-model="form.companyAddress" :disabled="isDetail" />
+                <Button size="large" type="primary" style="margin-left:15px" @click="searchAddress" v-if="!isDetail">查找</Button>
+                <qqMap ref="map" city="珠海" :latitude="form.latitude" :longitude="form.longitude" @clickMap="clickMap" v-if="!isDetail" />
+              </template>
             </FormItem>
           </i-col>
           <i-col :span="24" class="">
             <FormItem label="公司简介" class="textarea-w">
-              <Input type="textarea" size="large" v-model="form.companyType" :disabled="isDetail" />
+              <Input type="textarea" size="large" v-model="form.companyDesc" :disabled="isDetail" maxlength="200" :show-word-limit="!isDetail" />
             </FormItem>
           </i-col>
           <i-col :span="24" class="">
             <FormItem label="公司logo">
-              <picUpload  tips="只能上传jpg/png文件,且不超过500kb" :multiple="false" :limit="1" :preUploads="preLogoUploads" :hasUploads="hasLogoUploads" />
+              <picUpload  ref="logoUpload" tips="只能上传jpg/png文件,且不超过500kb" :multiple="false" :limit="1" :preUploads="preLogoUploads" :hasUploads="hasLogoUploads" v-if="!isDetail" />
+              <img style="width: 100px;height:100px;" :src="form.companyLogo" v-else>
             </FormItem>
           </i-col>
           <!-- <i-col :span="12" class="">
@@ -81,8 +69,8 @@
           <i-col :span="24" class="">
             <FormItem label="场景地址">
               <template>
-                <Input type="text" size="large" v-model="form.vrLink" />
-                <Button type="primary" size="large" class="input-btn" @click="modalShow=true">选择场景</Button>
+                <Input type="text" size="large" v-model="form.vrLink" :disabled="isDetail" />
+                <Button type="primary" size="large" class="input-btn" @click="modalShow=true" v-if="!isDetail">选择场景</Button>
                 <Button type="primary" size="large" class="input-btn">编辑场景</Button>
               </template>
             </FormItem>
@@ -94,9 +82,9 @@
                   <p class="guide-name">{{select_guide.name}}</p>
                   <p class="guide-id">{{select_guide.viewerId}}</p>
                   <p class="guide-phone">{{select_guide.phoneNum}}</p>
-                  <img :src="select_guide.avatar" alt="" class="guide-avatar">
+                  <img v-if="select_guide.avatar" :src="select_guide.avatar" alt="" class="guide-avatar">
                 </div>
-                <Button type="primary" size="large" @click="guideModalShow=true">选择/更换</Button>
+                <Button type="primary" size="large" @click="guideModalShow=true" v-if="!isDetail">选择/更换</Button>
               </template>
             </FormItem>
           </i-col>
@@ -134,14 +122,14 @@ import tables from 'components/tables'
 import * as CompanyApi from '@/api/company'
 import { getGuideList } from '@/api/guide'
 import { searchPlaceByKeyword } from '@/api/qqmap'
-
+import qqMap from '@/components/map'
 export default {
   props: {
-    form: Object
+    form: Object,
+    isDetail: Boolean
   },
   data () {
     return {
-      isDetail: false,
       preLogoUploads: [],
       hasLogoUploads: [],
       select_scene_num: '',
@@ -252,13 +240,35 @@ export default {
     picUpload,
     cModal,
     tables,
+    qqMap
   },
   mounted () {
     this.getIndustryList()
-    
+    this.$watch('form.companyLogo', function (newVal) {
+      if (this.isDetail) {
+        this.hasLogoUploads = [{img: newVal}]
+      }
+    }, {
+      immediate: true
+    })
   },
   methods: {
+    async validate () {
+      const valid = await this.$refs['form'].validate()
+      if (!valid) {
+        this.$Message.error('请完善表单')
+      }
+      return valid
+    },
+    async submit () {
+      let res = await this.$refs['logoUpload'].uploadfiles()
+      this.form.companyLogo = res[0]
+    },
     changeScene () {
+      this.vrLink = this.select_scene_num ? `${process.env.VUE_APP_4DKANKAN_URL}/vrHouse.html?m=${this.select_scene_num}&appname=vrhouse` : ''
+      this.form.vrLink = this.select_scene_num ? encodeURIComponent(`${process.env.VUE_APP_4DKANKAN_URL}/vrHouse.html?m=${this.select_scene_num}&appname=vrhouse`) : ''
+      this.form.sceneNum = this.select_scene_num || ''
+      this.modalShow = false
     },
     changeGuide () {
       this.select_guide = this.$refs['guideTable'].tableData.find(item => item.viewerId === this.select_guide_id)
@@ -271,14 +281,23 @@ export default {
     changeCompanyType (value) {
       this.form.companyType = value
     },
-    changeAddress (value) {
-      if (!value) {
-        this.addressList = []
-        return
-      }
-      searchPlaceByKeyword({keyword: value}).then(res => {
+    searchAddress () {
+      searchPlaceByKeyword({keyword: this.form.companyAddress}).then(res => {
         this.addressList = res.data
+        if (res.data[0]) {
+          this.$refs['map'].search(res.data[0].location)
+        }
+    
       })
+    },
+    clickMap (value) {
+      this.form.companyAddress = value.address
+      this.form.latitude = value.location.latitude
+      this.form.longitude = value.location.longitude
+    },
+    changeDate (date) {
+      console.log(date)
+      this.form.companyRegisterTime = date
     }
   }
 }

+ 31 - 1
admin/src/views/enterprise/components/introPicForm.vue

@@ -3,7 +3,7 @@
     <div class="form">
       <Form :label-width="86">
         <FormItem label="图片上传" :limit="20">
-          <picUpload tips="只能上传jpg/png文件,建议尺寸为960*600,且单张不超过500kb,最多20张" />
+          <picUpload :hideUpload="isDetail" ref="info-upload" tips="只能上传jpg/png文件,建议尺寸为960*600,且单张不超过500kb,最多20张" :limit="20" :preUploads="preUploads" :hasUploads="hasUploads" />
         </FormItem>
       </Form>
     </div>
@@ -14,10 +14,40 @@
 import picUpload from '@/components/upload'
 export default {
   props: {
+    isDetail: Boolean,
     form: Object
   },
+  data () {
+    return {
+      preUploads: [],
+      hasUploads: []
+    }
+  },
   components: {
     picUpload
+  },
+  mounted () {
+    this.$watch('form.introduceImage', function (newVal) {
+      if (this.isDetail) {
+        this.hasUploads = JSON.parse(newVal)
+      }
+    }, {
+      immediate: true
+    })
+  },
+  methods: {
+    async validate () {
+      if (this.hasUploads.length > 0 || this.preUploads.length > 0) {
+        return true
+      }
+      this.$Message.error('请上传介绍图片')
+      return false
+    },
+    async submit () {
+      let res = await this.$refs['info-upload'].uploadfiles()
+
+      this.form.introduceImage = JSON.stringify(this.hasUploads)
+    },
   }
 }
 </script>

+ 35 - 4
admin/src/views/enterprise/components/videoForm.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="video-form">
-    <div class="form">
+    <div class="form" ref="form">
       <Form :label-width="86">
         <FormItem label="视频简介">
-          <Input type="text" size="large" v-model="form.companyName" />
+          <Input type="text" size="large" v-model="form.introduceVideoDesc" :disabled="isDetail" />
         </FormItem>
         <FormItem label="上传视频">
-          <videoUpload tips="只能上传mp4/mov文件,且不超过10mb" />
+          <videoUpload :hideUpload="isDetail" tips="只能上传mp4/mov文件,且不超过10mb" ref="videoUpload" :hasUploads="hasUploads" :preUploads="preUploads" />
         </FormItem>
       </Form>
     </div>
@@ -18,10 +18,41 @@ import videoUpload from '@/components/upload/video'
 
 export default {
   props: {
-    form: Object
+    form: Object,
+    isDetail: Boolean
+  },
+  data () {
+    return {
+      hasUploads: [],
+      preUploads: []
+    }
   },
   components: {
     videoUpload
+  },
+  mounted () {
+    this.$watch('form.introduceVideo', function (newVal) {
+      console.log(newVal, 'new')
+      if (this.isDetail) {
+        this.hasUploads = [{img: `${newVal}?x-oss-process=video/snapshot,t_7000,f_jpg,w_800,h_600,m_fast`, url: newVal}]
+      }
+    }, {
+      immediate: true
+    })
+  },
+  methods: {
+    async validate () {
+      // const valid = await this.$refs['form'].validate()
+      return true
+    },
+    async submit () {
+      let res = await this.$refs['videoUpload'].uploadfiles()
+      console.log(res, 'res')
+      if (res[0]) {
+        this.form.introduceVideo = res[0].data.url
+      }
+      
+    },
   }
 }
 </script>

+ 44 - 11
admin/src/views/enterprise/index.vue

@@ -1,14 +1,16 @@
 <template>
   <div class="enterprise min-container">
-    <div class="header-title">公司概况</div>
-    <baseForm :form="form" />
+    <div class="header-title">公司概况
+      <Button type="primary" size="large" class="fr" @click="isDetail=false" v-if="$route.query.companyId">修改信息</Button>
+    </div>
+    <baseForm :form="form" ref="base-form" :isDetail="isDetail" />
     <div class="header-title">视频介绍</div>
-    <videoForm :form="form" />
+    <videoForm :form="form" ref="video-form" :isDetail="isDetail" />
     <div class="header-title">图片介绍</div>
-    <introPicForm :form="form" />
+    <introPicForm :form="form" ref="intro-form" :isDetail="isDetail" />
     <div class="actions-w">
-      <Button type="primary" size="large" class="submit-btn" @click="submit">提交</Button>
-      <Button  size="large" @click="cancle">取消</Button>
+      <Button type="primary" size="large" class="submit-btn" @click="handleSubmitClick" v-if="!isDetail">提交</Button>
+      <Button  size="large" @click="cancle" v-if="$route.query.companyId && !isDetail">取消</Button>
     </div>
     
   </div>
@@ -22,10 +24,12 @@ import introPicForm from './components/introPicForm'
 export default {
   data () {
     return {
-      
+      isDetail: false,
       form: {
         companyName: '111',
-        companyType: ''
+        companyType: '',
+        sceneNum: 't-jpLXfXA',
+        vrLink: 'http%3A%2F%2F192.168.0.98%3A8080%2Fkanzhan.html%3Fm%3Dt-jpLXfXA'
       },
       
     }
@@ -35,11 +39,37 @@ export default {
     videoForm,
     introPicForm
   },
+  mounted () {
+    this.getCompanyDetail()
+  },
   methods: {
-    submit () {
+    async handleSubmitClick () {
+       return this.validate()
+    },
+    async validate () {
+      this.$refs['base-form'].validate()
+      let res = await Promise.all([this.$refs['base-form'].validate()])
+      let item = res.find(item => !item)
+      if (item === false) {
+        return
+      } else {
+        this.submit()
+      }
+    },
+    async submit () {
+      await Promise.all([this.$refs['base-form'].submit(), this.$refs['video-form'].submit(), this.$refs['intro-form'].submit()])
       return CompanyApi.addCompany(this.form)
     },
-    cancle () {}
+    cancle () {
+      window.location.reload()
+    },
+    getCompanyDetail () {
+      if (!this.$route.query.companyId) return
+      CompanyApi.getCompanyDetail(this.$route.query.companyId).then(res => {
+        this.isDetail = true
+        this.form = res.data
+      })
+    }
   }
 }
 </script>
@@ -83,11 +113,14 @@ export default {
       margin-right: 15px;
     }
   }
-  .ivu-input[disabled] {
+  .ivu-input[disabled], .ivu-select-disabled .ivu-select-selection {
     background: transparent !important;
     color: #fff !important;
     border: none;
     cursor: default;
+    .ivu-icon, .ivu-input-word-count {
+      display: none;
+    }
   }
   textarea {
     resize: none;

+ 1 - 7
admin/src/views/system/user/list.vue

@@ -28,7 +28,7 @@
 
 <script>
 import tables from 'components/tables'
-import { fetchUserList, updateUser, fetchRoleList } from 'api/'
+import { fetchUserList, updateUser } from 'api/'
 import CModal from 'components/Modal'
 
 const roleMap = {
@@ -115,14 +115,8 @@ export default {
     CModal
   },
   mounted () {
-    this.fetchRoleList()
   },
   methods: {
-    fetchRoleList () {
-      fetchRoleList().then(res => {
-        this.roleList = res.data
-      })
-    },
     async changeUser () {
       await updateUser(this.form)
       this.closeModal()

+ 2 - 2
admin/vue.config.js

@@ -25,8 +25,8 @@ module.exports = {
     proxy: {
       '/admin': {
         // target: 'http://120.24.85.77:8087', // 正式环境
-        // target: 'http://192.168.0.83:8085'  // 伟玉本地环境
-        target: 'http://39.108.220.65:8075'    // 测试环境
+        // target: 'http://192.168.0.83:8075'  // 伟玉本地环境
+        target: 'http://120.25.146.52:8075'    // 测试环境
       },
       '/node-upload': {
         target: 'http://39.108.220.65:1935',

+ 1 - 1
miniprogram/app.json

@@ -28,7 +28,7 @@
     "tab-bar": "components/tab-bar/tab-bar"
   },
   "window": {
-    "navigationBarTitleText": "看展4DKanKan",
+    "navigationBarTitleText": "好玩展",
     "navigationBarBackgroundColor": "#fff",
     "navigationBarTextStyle": "black"
   },

+ 1 - 1
miniprogram/app.wxss

@@ -1,6 +1,6 @@
 /**app.wxss**/
 page{
-  height: 100%;
+  min-height: 100%;
   background: #ffffff;
   -webkit-overflow-scrolling : touch;
 }

+ 1 - 1
miniprogram/components/business-card/index.wxml

@@ -15,7 +15,7 @@
       </view>
       <view class="info-item">
         <icon icon="card_mail"></icon>
-        <text class="value">{{info.phoneNum}}</text>
+        <text class="value">{{info.email}}</text>
       </view>
       <view class="info-item">
         <icon icon="card_address"></icon>

+ 43 - 0
miniprogram/components/login-pannel/login-pannel.js

@@ -0,0 +1,43 @@
+import { loginByUserInfo } from './../../utils/login'
+Component({
+  /**
+   * 组件的属性列表
+   */
+  properties: {
+    visible: Boolean
+  },
+
+  /**
+   * 组件的初始数据
+   */
+  data: {
+    show: false
+  },
+  ready () {
+    this.showPannel()
+  },
+  /**
+   * 组件的方法列表
+   */
+  methods: {
+    bindgetuserinfo () {
+      loginByUserInfo().then(res => {
+        this.triggerEvent('loginSuccess')
+      })
+    },
+    showPannel () {
+      this.animation = wx.createAnimation({
+        duration: 200,
+        timingFunction: 'ease'
+      })
+      this.animation.translateY(8).step()
+      this.setData({
+        animationData: this.animation.export(),
+        show: true
+      })
+    },
+    hide () {
+      this.triggerEvent('hide')
+    }
+  }
+})

+ 4 - 0
miniprogram/components/login-pannel/login-pannel.json

@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}

+ 10 - 0
miniprogram/components/login-pannel/login-pannel.wxml

@@ -0,0 +1,10 @@
+<cover-view class="login-pannel-w" >
+  <cover-view class="mask" bind:tap="hide"></cover-view>
+  <cover-view class="login-pannel" animation="{{animationData}}">
+    <cover-view>授权登录</cover-view>
+    <cover-image class="login-logo" src="/image/4Dage/login-logo.png" mode="heightFix"></cover-image>
+    <cover-view class="logo-bottom-tips">四维时代网络科技有限公司申请获取以下权限</cover-view>
+    <cover-view class="tips">·获得您的公开信息(昵称、头像等)</cover-view>
+    <button class="login-btn" open-type="getUserInfo" bindgetuserinfo="bindgetuserinfo">微信授权登录</button>
+  </cover-view>
+</cover-view>

+ 58 - 0
miniprogram/components/login-pannel/login-pannel.wxss

@@ -0,0 +1,58 @@
+.login-pannel-w {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100vw;
+  height: 100vh;
+  z-index: 9999;
+}
+.mask {
+  width: 100vw;
+  height: 100vh;
+  background: rgba(0,0,0,0.3);
+  position: fixed;
+  top: 0;
+  left: 0;
+  z-index: 9999;
+}
+.login-pannel {
+  font-size: 30rpx;
+  color: #111;
+  border-radius: 16rpx 16rpx 0rpx 0rpx;
+  background: #fff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100vw;
+
+  padding: 52rpx 36rpx 100rpx;
+  z-index: 10000;
+  box-sizing: border-box;
+  transform: translateY(315px);
+}
+.login-logo {
+  width: 181.45rpx;
+  height: 120rpx;
+  margin: 0 auto;
+}
+.logo-bottom-tips {
+  padding: 28rpx 0 36rpx;
+  border-bottom: 1px solid rgba(0,0,0,0.1);
+  margin-bottom: 30rpx;
+  font-size: 26rpx;
+  text-align: center;
+}
+.tips {
+  font-size: 26rpx;
+  color: #79868F;
+  margin-bottom: 86rpx;
+  text-align: center;
+}
+.login-btn {
+  border-color: #1FE4DC;
+  background: #1FE4DC;
+  color: #fff;
+  font-size: 30rpx;
+  line-height: 80rpx;
+  border-radius: 8rpx;
+}

+ 2 - 2
miniprogram/config/config.js

@@ -1,5 +1,5 @@
-export const IM_HOST = 'ws://39.108.220.65:8075'
-export const API_BASE_URL = 'http://39.108.220.65:8075'
+export const IM_HOST = 'ws://120.25.146.52:8075'
+export const API_BASE_URL = 'http://120.25.146.52:8075'
 
 
 // export const IM_HOST = 'ws://192.168.0.83:8075'

+ 2 - 2
miniprogram/pages/about/about.wxml

@@ -2,11 +2,11 @@
 <view class="about">
   <view class="about-content">
     <image class="logo" src="/image/4Dage/about/logo.png"></image>
-    <view class="about-title">看房 4DKanKan</view>
+    <view class="about-title">好玩展</view>
     <view class="about-sub-title">找房大平台</view>
   </view>
   <view class="about-bottom">
-    <view class="about-desc">看房 4DKanKan为购房者、租房者提供房源信息搜索、浏览功能、为业主提供房源委托等功能,让你的房产交易更加便捷。</view>
+    <view class="about-desc">好玩展为购房者、租房者提供房源信息搜索、浏览功能、为业主提供房源委托等功能,让你的房产交易更加便捷。</view>
     <view class="about-sub-desc">
       <view>官方网站:www.4dkankan.com</view>
       <view>客服电话:0756-6996790-800</view>

+ 3 - 2
miniprogram/pages/exhibition-enterprise/exhibition-enterprise.js

@@ -17,9 +17,10 @@ VueLikePage([], {
       })
     },
     getCompanyHalls () {
-      return exhibitionApi.getCompanyHalls().then(res => {
+      return exhibitionApi.getTradeList().then(res => {
+        console.log(res)
         return res.data.map(item => {
-          return { name: item, list: [] }
+          return { name: item.name, id: item.id, list: [] }
         })
       })
     },

+ 1 - 1
miniprogram/pages/exhibition-enterprise/exhibition-enterprise.wxml

@@ -12,7 +12,7 @@
       <view class="no-data" wx:if="{{tabs.list.length === 0}}">暂无数据</view>
       <view class="enterprise-list" wx:else>
         <view class="enterprise-item"  wx:for="{{ tabs.list }}" wx:key="index" data-vr_link="{{item.vrLink}}" bindtap="toScene">
-          <view class="number">{{ item.companyBooth }}</view>
+          <!-- <view class="number">{{ item.companyBooth }}</view> -->
           <view class="enterprise-name">{{ item.companyName }}</view>
           <icon icon="my_list_arrow arrow" size="12" />
         </view>

+ 1 - 1
miniprogram/pages/exhibition-enterprise/exhibition-enterprise.wxss

@@ -42,7 +42,7 @@
   position: absolute;
   right: 8rpx;
   top: 50%;
-  transform: translateX(-50%);
+  transform: translateY(-50%);
   color: #909090;
   font-size: 24rpx;
 }

+ 1 - 1
miniprogram/pages/index/index.json

@@ -1,7 +1,7 @@
 {
   "navigationBarBackgroundColor": "#fff",
   "navigationBarTextStyle": "black",
-  "navigationBarTitleText": "看展4DKanKan",
+  "navigationBarTitleText": "好玩展",
   "usingComponents": {
     "search-bar": "/components/search-bar/search-bar"
   }

+ 1 - 1
miniprogram/pages/index/index.wxml

@@ -45,7 +45,7 @@
             <view class="enterprise-list">
                 <view class="enterprise-item" wx:for="{{companyList}}" wx:key="{{index}}" data-vr_link="{{ item.vrLink }}" bindtap="toScene">
                     <view class="enterprise-logo">
-                        <image src="{{ item.companyLogo }}" bindload="imageLoad" data-index="{{ index }}"  style="width:{{ images[index].width }}rpx; height:{{ images[index].height }}rpx;"></image>
+                        <image  src="{{ item.companyLogo }}" bindload="imageLoad" data-index="{{ index }}"  style="width:{{ images[index].width }}rpx; height:{{ images[index].height }}rpx;visibility: {{ images[index].width ? 'visible' : 'hidden' }}"></image>
                     </view>
                     <view>{{ item.companyName }}</view>
                 </view>

+ 10 - 0
miniprogram/pages/index/index.wxss

@@ -114,6 +114,16 @@
   width: 100%;
   height: 108rpx;
   text-align: center;
+  position: relative;
+}
+.enterprise-logo image {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: 2rpx;
+  height: 2rpx;
+  visibility: hidden;
 }
 .enterprise-name {
   padding: 0 30rpx;

+ 1 - 1
miniprogram/pages/login/login.json

@@ -1,4 +1,4 @@
 {
-  "navigationBarTitleText": "看房 4DKanKan",
+  "navigationBarTitleText": "好玩展",
   "usingComponents": {}
 }

+ 1 - 1
miniprogram/pages/login/login.wxml

@@ -5,7 +5,7 @@
   </view>
   <view class='login_text'>
     <image src='{{login_logo}}'></image>
-    <view>看展 4DKanKan</view>
+    <view>好玩展</view>
     <view>在线云看展,足不户逛展会、询展品。</view>
   </view>
   <view class="quanxian">

+ 1 - 1
miniprogram/pages/logout/logout.wxml

@@ -1,7 +1,7 @@
 <view class="user-info-w">
   <view class="phone-w">
     <view class="label">手机号</view>
-    <view class="value">{{ userinfo.phone }}</view>
+    <view class="value">{{ userinfo.phoneNum }}</view>
   </view>
   <view class="logout-btn" bindtap="logout">退出登录</view>
 </view>

+ 18 - 0
miniprogram/pages/my/my.js

@@ -1,6 +1,7 @@
 import login from '../../utils/login'
 import { VueLikePage } from '../../utils/page'
 import Router from '../../utils/routes'
+import { autoSubcrebe, subcrebe } from '../../utils/utils'
 const app = getApp();
 VueLikePage([], {
     options: {
@@ -36,6 +37,14 @@ VueLikePage([], {
                 value: 'logout',
                 needLogin: true
             },
+            {
+                title: '开启消息订阅',
+                icon: 'cus_msg',
+                value: 'message',
+                needLogin: true,
+                hiddenKey: 'isCustomer',
+                hidden: getApp().globalData.userinfo ? getApp().globalData.userinfo.type==='guide' : false
+            },
         ],
         user_code: '',
         isLogined: app.globalData.token ? true : false,
@@ -73,10 +82,19 @@ VueLikePage([], {
             })
         },
         onShow: function () {
+            let cu_items = this.data.cu_items
+            this.isCustomer = app.globalData.userinfo ? app.globalData.userinfo.type !== 'guide' : false
+            cu_items.forEach(item => {
+                if (item.hiddenKey) {
+                    item.hidden = this[item.hiddenKey]
+                }
+            })
             this.setData({
+                cu_items,
                 isLogined: app.globalData.token ? true : false,
                 userinfo: app.globalData.userinfo
             });
+            
         },
         bindgetphonenumber(e) {
             login(e, this.data.user_code).then(res => {

+ 1 - 1
miniprogram/pages/my/my.wxml

@@ -13,7 +13,7 @@
 </view>
 
 <view  class="cu-list icon-text menu card-menu margin-top-sm margin-bottom-xl  radius shadow">
-    <view class="cu-item arrow text-xs" open-type="feedback" bindtap="Navigator_to" data-value="{{item.value}}" data-action="{{item.action}}" wx:for="{{cu_items}}">
+    <view class="cu-item arrow text-xs" open-type="feedback" bindtap="Navigator_to" data-value="{{item.value}}" data-action="{{item.action}}" wx:for="{{cu_items}}" wx:if="{{!item.hidden}}">
         <view class="item-content" >
            <icon class="my-icon" icon="{{item.icon}}"></icon>
             <view class="content-title">{{ item.title }}</view>

+ 1 - 1
miniprogram/pages/scene/scene.json

@@ -1,5 +1,5 @@
 {
   "usingComponents": {},
-  "navigationBarTitleText": "看房4DKanKan",
+  "navigationBarTitleText": "好玩展",
   "pageOrientation": "auto"
 }

+ 10 - 6
miniprogram/pages/search/search.js

@@ -12,12 +12,12 @@ VueLikePage([], {
         text: '企业',
         value: 'company'
       },
-      {
-        text: '产品',
-        value: 'goods'
-      },
+      // {
+      //   text: '产品',
+      //   value: 'goods'
+      // },
     ],
-    activeIndex: 1,
+    activeIndex: 0,
     keyword: ''
   },
   methods: {
@@ -69,12 +69,16 @@ VueLikePage([], {
         const name_key = params.type === 'company' ? 'companyName' : 'name'
         const id_key = params.type === 'company' ? 'companyId' : 'goodsId'
         const img_key = params.type === 'company' ? 'introduceImage' : 'listPicUrl'
+        
         this.setData({
           showResult: true,
           resultList: res.data.list.map(item => {
+            console.log(item[img_key], 'item[img_key]')
+        let img = JSON.parse(item[img_key])
+        console.log(img)
             item.name = item[name_key]
             item.id = item[id_key]
-            item.img = item[img_key]
+            item.img = img[0].img
             return item
           }),
           history: loadSearchHistory(),

+ 4 - 4
miniprogram/pages/search/search.wxml

@@ -2,14 +2,14 @@
 	<view class="search-w">
 		<view class="search-left" bindtap="showSelect">
 			<text>{{ searchTypes[activeIndex].text }}</text>
-			<icon class="icon" icon="scene_tit_arrow" size="12" />
+			<!-- <icon class="icon" icon="scene_tit_arrow" size="12" /> -->
       <!-- 选择框 -->
-      <view class="select-w" catchtap="hideSelect" wx:if="{{ selectShowStatus }}">
+      <!-- <view class="select-w" catchtap="hideSelect" wx:if="{{ selectShowStatus }}">
         <view class="mask"></view>
         <view class="select">
           <view class="options {{ activeIndex === index ? 'active' : ''}}" wx:for="{{searchTypes}}" wx:key="{{index}}" data-index="{{ index }}" bindtap="changeSearchType">{{ item.text }}</view>
         </view>
-      </view>
+      </view> -->
 		</view>
 		<view class="search-right">
 			<icon icon="home_search" size="15" />
@@ -31,7 +31,7 @@
     <view class="search-tip">“{{ keyword }}”搜索结果({{ resultList.length }})</view>
     <view class="result-list">
       <view class="result-item" wx:for="{{resultList}}" wx:key="{{index}}" data-index="{{index}}" bindtap="toResultDetail">
-        <image src="{{item.img}}"></image>
+        <view class="image" style="background-image: url({{item.img}})"></view>
         <view class="result-name">{{ item.name }}</view>
       </view>
     </view>

+ 8 - 2
miniprogram/pages/search/search.wxss

@@ -1,3 +1,6 @@
+page {
+  padding-bottom: 50rpx;
+}
 .page {
   padding: 0 46rpx;
   color: #131D34;
@@ -13,7 +16,7 @@
 }
 
 .search-left {
-  width: 160rpx;
+  width: 120rpx;
   font-size: 26rpx;
   padding-left: 26rpx;
   position: relative;
@@ -104,10 +107,13 @@
 .result-item:nth-child(2n) {
   margin-left: 22rpx;
 }
-.result-item image {
+.result-item .image {
   width: 100%;
   height: 238rpx;
   margin-bottom: 12rpx;
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-size: cover;
 }
 
 .result-name {

+ 29 - 6
miniprogram/pages/shared/shared.js

@@ -1,6 +1,7 @@
 import {
   VueLikePage
 } from '../../utils/page'
+import CompanyApi from './../../apis/company'
 
 VueLikePage([], {
   data: {
@@ -9,12 +10,13 @@ VueLikePage([], {
     editShowStatus: false
   },
   methods: {
-    onLoad: function (options) {
+    onLoad: async function (options) {
+      const { img_url, companyId } = options
+      this.companyId = companyId
       this.setData({
-        shared_img: decodeURIComponent(options.img_url)
+        shared_img: decodeURIComponent(img_url)
       })
-    },
-    onReady() {
+      await this.getCompanyDetail()
       const query = wx.createSelectorQuery()
       query.select('.canvas').boundingClientRect().exec(res => {
         this.canvas_width = res[0].width
@@ -22,6 +24,17 @@ VueLikePage([], {
         this.drawImage()
       })
     },
+    onReady() {
+      
+    },
+    getCompanyDetail () {
+      CompanyApi.getCompanyDetail(this.companyId).then(res => {
+        console.log(res, 'company')
+        this.setData({
+          company: res.data
+        })
+      })
+    },
     showEdit () {
       this.setData({
         editShowStatus: true
@@ -90,11 +103,21 @@ VueLikePage([], {
           this.context.drawImage(res.tempFilePath, 0, 0, img_width, img_height)
           this.context.restore()
           this.context.fillStyle = '#131D34'
-          this.context.fillText('格力新天地 3室2厅', left, img_width + left + this.canvas_height * 15 / 460 + 21)
+          this.context.font = '15px bold'
+          this.context.fillText(this.data.company.companyName, left, img_width + left + this.canvas_height * 15 / 460 + 21)
           this.context.restore()
           this.context.font = '13px bold'
           this.context.fillStyle = '#79868F'
-          this.context.fillText(recommend_text || '我的个性推荐语', left, img_width + left + this.canvas_height * 15 / 460 + 18 + 21)
+          let recommend_text1, recommend_text2
+          if (recommend_text) {
+            recommend_text1 = recommend_text.slice(0,11)
+            recommend_text2 = recommend_text.slice(11)
+          }
+          this.context.fillText(recommend_text1 || '我的个性推荐语', left, img_width + left + this.canvas_height * 15 / 460 + 18 + 21)
+          if (recommend_text2) {
+            this.context.fillText(recommend_text2 || '我的个性推荐语', left, img_width + left + this.canvas_height * 15 / 460 + 18 + 21 + 21)
+          }
+          
           this.context.font = '12px bold'
           this.context.fillStyle = '#000'
           this.context.fillText('3D实景拍摄', left + 80, img_width + left + this.canvas_height * 92 / 460 + 20)

+ 1 - 1
miniprogram/pages/shared/shared.wxml

@@ -36,7 +36,7 @@
     <view class="edit-w">
       <view class="edit-header">我的个性推荐语</view>
       <view class="edit-content">
-        <textarea bindinput="bindinput" placeholder="请输入您的推荐语" maxlength="25" show-confirm-bar="{{ false }}" />
+        <textarea bindinput="bindinput" value="{{recommend_text}}" placeholder="请输入您的推荐语" maxlength="25" show-confirm-bar="{{ false }}" />
         <view class="text-tip">{{ recommend_text.length }}/25</view>
       </view>
       <view class="edit-footer">

+ 1 - 0
miniprogram/pages/shared/shared.wxss

@@ -2,6 +2,7 @@
   width: 100vw;
   height: 100vh;
   background-position: center center;
+  background-size: cover;
   position: relative;
   padding: 90rpx 0 0;
   margin-top: 0;

+ 40 - 0
miniprogram/utils/utils.js

@@ -0,0 +1,40 @@
+export function bindInput(event) {
+  var obj = {},
+    key = event.target.dataset['key'];
+  obj[key] = event.detail.value;
+  console.log(obj)
+  this.setData(obj);
+}
+
+let hasAuth = false
+const subId = 'GApxDrE3tPhysRxHEmGHRn-0mvNJXqtZ4znZ8PJnQ8Q'
+export function subcribe() {
+  
+  return new Promise((resolve, reject) => {
+    wx.requestSubscribeMessage({
+      tmplIds: [subId],
+      success(res) {
+        res.subId = subId
+        resolve(res)
+      },
+      fail(err) {
+        console.log(err, '订阅消息失败')
+        reject(err)
+      }
+    })
+  })
+
+}
+
+export function autoSubcrebe() {
+  wx.getSetting({
+    withSubscriptions: true,
+    success: (setting) => {
+      if (setting.subscriptionsSetting.itemSettings && setting.subscriptionsSetting.itemSettings[subId]) {
+        subcribe()
+        return
+      }
+      console.log('not')
+    }
+  })
+}