徐志豪 5 gadi atpakaļ
vecāks
revīzija
7af0677d03
40 mainītis faili ar 1323 papildinājumiem un 275 dzēšanām
  1. BIN
      admin.rar
  2. 1 0
      admin/package.json
  3. 0 26
      admin/src/api/agency.js
  4. 52 0
      admin/src/api/company.js
  5. 0 32
      admin/src/api/estate.js
  6. 11 0
      admin/src/api/guide.js
  7. 0 66
      admin/src/api/house.js
  8. 1 1
      admin/src/api/qqmap.js
  9. 0 34
      admin/src/api/region.js
  10. 0 26
      admin/src/api/store.js
  11. 28 3
      admin/src/assets/css/global.less
  12. 1 0
      admin/src/components/Modal/index.vue
  13. 149 0
      admin/src/components/quillEditor/index.vue
  14. 5 3
      admin/src/components/tables/handle-btns.vue
  15. 4 4
      admin/src/components/tables/tables.vue
  16. 37 4
      admin/src/components/upload/index.vue
  17. 19 1
      admin/src/components/upload/video.vue
  18. 48 19
      admin/src/layout/index/index.vue
  19. 49 23
      admin/src/router/routes.js
  20. 100 0
      admin/src/views/activity/activityEdit.vue
  21. 78 0
      admin/src/views/activity/enterpriseList.vue
  22. 90 0
      admin/src/views/activity/homeAdmin.vue
  23. 0 0
      admin/src/views/activity/index.vue
  24. 328 0
      admin/src/views/enterprise/components/baseForm.vue
  25. 23 0
      admin/src/views/enterprise/components/introPicForm.vue
  26. 27 0
      admin/src/views/enterprise/components/videoForm.vue
  27. 96 0
      admin/src/views/enterprise/index.vue
  28. 9 0
      admin/src/views/industry/index.vue
  29. 124 0
      admin/src/views/industry/list.vue
  30. 2 2
      admin/vue.config.js
  31. 2 1
      miniprogram/apis/fetcher/request.js
  32. 4 0
      miniprogram/apis/goods.js
  33. 8 8
      miniprogram/components/tab-bar/tab-bar.js
  34. 8 4
      miniprogram/pages/goods-detail/goods-detail.js
  35. 3 3
      miniprogram/pages/goods-detail/goods-detail.wxml
  36. 3 3
      miniprogram/pages/index/index.js
  37. 2 2
      miniprogram/pages/index/index.wxml
  38. 1 1
      miniprogram/pages/index/index.wxss
  39. 6 6
      miniprogram/pages/my/my.js
  40. 4 3
      miniprogram/project.config.json

BIN
admin.rar


+ 1 - 0
admin/package.json

@@ -27,6 +27,7 @@
     "view-design": "^4.2.0",
     "vue": "2.6.10",
     "vue-i18n": "^8.17.7",
+    "vue-quill-editor": "^3.0.6",
     "vue-router": "3.0.6",
     "vuex": "3.1.0"
   },

+ 0 - 26
admin/src/api/agency.js

@@ -1,26 +0,0 @@
-import request from 'libs/request'
-
-/*
-** @decs 获取小区列表
-*/
-export function fetchAgencyList (data) {
-  data.store = data.tools_0 || ''
-  data.keyword = data.searchKey
-  return request.get('agency/queryList', {params: data})
-}
-
-export function createAgency (data) {
-  return request.post('agency/add', data)
-}
-
-export function fetchAgencyDetail (agency_id) {
-  return request.get('agency/detail', { params: { agency_user_id: agency_id } })
-}
-
-export function updateAgency (data) {
-  return request.post('agency/update', data)
-}
-
-export function deleteAgency (strIds) {
-  return request.post('agency/delete', { strIds })
-}

+ 52 - 0
admin/src/api/company.js

@@ -0,0 +1,52 @@
+import request from 'libs/request'
+import { getToken } from 'libs/token'
+
+export function addCompany (data) {
+  return request.post('company/add', data)
+}
+
+export function getCompanyDetail (companyId) {
+  return request.post('company/getCompanyDetail', {companyId})
+}
+
+export function getCompanyList (params) {
+  const defaultParams = {
+    pageNum: 1,
+    pageSize: 10,
+    keyword: params.searchKey || '',
+    token: getToken()
+  }
+  return request.get('company/getCompanyList', {params: Object.assign(defaultParams, params)})
+}
+
+export function updateCompany (data) {
+  return request.post('company/update', data)
+}
+
+export function fetchAllScene (data) {
+  const defaultParams = {
+    page_num: 1,
+    page_size: 10,
+    searchKey: '',
+    token: getToken()
+  }
+  return request.post('house/getAllScene', Object.assign(defaultParams, data))
+}
+
+export function getIndustry (params) {
+  const defaultParams = {
+    pageNum: 1,
+    pageSize: 10,
+    keyword: params.searchKey || '',
+    token: getToken()
+  }
+  return request.get('activity/trade/queryOrGetTradeList', {params: Object.assign(defaultParams, params)})
+}
+
+export function createIndustry (data) {
+  return request.post('activity/trade/add', data)
+}
+
+export function updateIndustry (data) {
+  return request.post('activity/trade/update', data)
+}

+ 0 - 32
admin/src/api/estate.js

@@ -1,32 +0,0 @@
-import request from 'libs/request'
-
-/*
-** @decs 获取小区列表
-*/
-export function fetchEstateList (data={}) {
-  const defaultParams = {
-    page_size: 10,
-    page_num: 1,
-    province: '',
-    city: '',
-    district: '',
-    query_name: data.searchKey || ''
-  }
-  return request.get('estate/queryAll', {params: Object.assign(defaultParams, data)})
-}
-
-export function createEstate (data) {
-  return request.post('estate/add', data)
-}
-
-export function fetchEstateDetail (estate_id) {
-  return request.get('estate/detail', { params: {estate_id} })
-}
-
-export function updateEstate (data) {
-  return request.post('estate/update', data)
-}
-
-export function deleteEstate (strIds) {
-  return request.post('estate/delete', { strIds })
-}

+ 11 - 0
admin/src/api/guide.js

@@ -0,0 +1,11 @@
+import request from 'libs/request'
+import { getToken } from 'libs/token'
+
+export function getGuideList (data) {
+  let defaultOpt = {
+    pageSize: 20,
+    pageNum: 1,
+    keyword: ''
+  }
+  return request.get('viewer/queryGuidList', {params: Object.assign(defaultOpt, data)})
+}

+ 0 - 66
admin/src/api/house.js

@@ -1,66 +0,0 @@
-import request from 'libs/request'
-import { getToken } from 'libs/token'
-/*
-** @decs 获取房源列表
-*/
-export function fetchHouseList (data) {
-  data.estate_name = data.tools_0 || ''
-  data.sale_type = data.tools_1 || ''
-  data.query_name = data.searchKey || ''
-  return request.get('house/queryAll', {params: data})
-}
-
-export function createHouse (data) {
-  return request.post('house/add', data)
-}
-
-export function fetchHouseDetail (house_id) {
-  return request.get('house/house', { params: {house_id} })
-}
-
-export function updateHouse (data) {
-  return request.post('house/update', data)
-}
-
-export function fetchUnAgentHouse (params) {
-  const defaultParams = {
-    sale_type: 1,
-    page_size: 10,
-    page_num: 1,
-    query_name: ''
-  }
-  params = Object.assign(defaultParams, params)
-  return request.get('house/queryHouse', { params })
-}
-
-/*
-** @desc 增加关联经纪人
-** @params agency_user_id 经纪人id
-** @params house_ids Array 房源id集合
-*/
-export function attachAgency (data) {
-  return request.post('house/attachAgency', data)
-}
-
-/*
-** @desc 修改关联经纪人
-** @params agencyUserIdNew 准绑定经纪人id
-** @params agencyUserIdOld 老绑定经纪人id
-** @params house_id String 房源id
-*/
-export function changeAgency (data) {
-  return request.post('house/changeAgency', data)
-}
-export function deleteHouse (strIds) {
-  return request.post('house/delete', { strIds })
-}
-
-export function fetchAllScene (data) {
-  const defaultParams = {
-    page_num: 1,
-    page_size: 10,
-    searchKey: '',
-    token: getToken()
-  }
-  return request.post('house/getAllScene', Object.assign(defaultParams, data))
-}

+ 1 - 1
admin/src/api/qqmap.js

@@ -20,7 +20,7 @@ export function getDistrictList () {
   return request(`district/v1/list`, {})
 }
 
-export function searchPlaceByKeyword ({keyword, boundary}) {
+export function searchPlaceByKeyword ({keyword, boundary=`region(珠海,0)`}) {
   return request('place/v1/search', {keyword, boundary})
 }
 

+ 0 - 34
admin/src/api/region.js

@@ -1,34 +0,0 @@
-import request from 'libs/request'
-
-export function fetchCityList (params) {
-  const defalutParams = {
-    type: '',
-    query_name: params.searchKey || '',
-  }
-  return request.get('region/list', {params: Object.assign(defalutParams, params)})
-}
-
-export function createCity (data) {
-  return request.post('region/save', data)
-}
-
-export function fetchChildCity (parent_id) {
-  return request.get('region/child/list', {params: {parent_id}})
-}
-
-export function delRegion (ids) {
-  return request.post('region/delete', { ids })
-}
-
-export function fetchRegionDetail (region_id) {
-  return request.get(`region/info/${region_id}`)
-}
-
-export function updateRegion (data) {
-  return request.post('region/update', data)
-}
-
-export function deleteRegion (strIds) {
-  return request.post('region/delete', { strIds })
-}
-

+ 0 - 26
admin/src/api/store.js

@@ -1,26 +0,0 @@
-import request from 'libs/request'
-
-export function fetchStoreList (params) {
-  const defaultParams = {
-    keyword: params.searchKey || '',
-    page_size: 10,
-    page_num: 1
-  }
-  return request.get('store/queryList', {params: Object.assign(defaultParams, params)})
-}
-
-export function createStore (data) {
-  return request.post('store/add', data)
-}
-
-export function updateStore (data) {
-  return request.post('store/update', data)
-}
-
-export function fetchAllStore (params) {
-  return request.get('store/all', {params})
-}
-
-export function deleteStore (intIds) {
-  return request.post('store/delete', { intIds })
-}

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

@@ -17,13 +17,16 @@ body,
     font-size: 14px;
   }
   .ivu-btn {
-    // border-color: #1FE4DC;
-    // background-color: transparent;
-    // color: #1FE4DC;
+    border-color: rgba(255,255,255,0.88);
+    background-color: transparent;
+    color:rgba(255,255,255,0.88);
+    // min-width: 88px;
   }
   .ivu-btn-primary {
+    border-color: #1FE4DC;
     background-color: #1FE4DC;
     color: #fff;
+    // min-width: 116px;
   }
   .ivu-btn-ghost.ivu-btn-primary {
     color: #1FE4DC;
@@ -108,6 +111,16 @@ body,
   .ivu-select-large.ivu-select-multiple .ivu-tag {
     background-color: transparent;
   }
+  .ivu-form .ivu-form-item-label {
+    padding: 13px 20px 13px 0;
+    text-align: left;
+  }
+  .ivu-form-item {
+    margin-bottom: 30px;
+  }
+  .ivu-form-item-required .ivu-form-item-label:before {
+    display: none;
+  }
 }
 
 // 覆盖 view-design 默认样式 start
@@ -332,4 +345,16 @@ select:-webkit-autofill {
   position: fixed;
   left: 99999px;
   top: 99999px;
+}
+
+.min-container {
+  width: 936px;
+  margin: 0 auto;
+}
+
+.header-title {
+  color: rgba(255,255,255,0.8);
+  border-bottom: 1px solid rgba(255,255,255,0.8);
+  padding: 25px 0 18px;
+  font-size: 16px;
 }

+ 1 - 0
admin/src/components/Modal/index.vue

@@ -43,6 +43,7 @@ export default {
   line-height: 50px;
   padding-left: 20px;
   font-size: 16px;
+  border-bottom:1px solid rgba(255,255,255,0.05);
 }
 .btn-w {
   text-align: right;

+ 149 - 0
admin/src/components/quillEditor/index.vue

@@ -0,0 +1,149 @@
+<template>
+  <div class="quillEditor">
+    <div style="min-height: 460px">
+      <quill-editor
+        ref="myQuillEditor"
+        v-model="content"
+        :options="editorOption"
+        @blur="onEditorBlur($event)"
+        @focus="onEditorFocus($event)"
+        @ready="onEditorReady($event)"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import "quill/dist/quill.core.css";
+import "quill/dist/quill.snow.css";
+import "quill/dist/quill.bubble.css";
+import { quillEditor } from "vue-quill-editor";
+
+const titleConfig = [
+  { Choice: ".ql-bold", title: "加粗" },
+  { Choice: ".ql-italic", title: "斜体" },
+  { Choice: ".ql-underline", title: "下划线" },
+  { Choice: ".ql-header", title: "段落格式" },
+  { Choice: ".ql-strike", title: "删除线" },
+  { Choice: ".ql-blockquote", title: "块引用" },
+  { Choice: ".ql-code", title: "插入代码" },
+  { Choice: ".ql-code-block", title: "插入代码段" },
+  { Choice: ".ql-font", title: "字体" },
+  { Choice: ".ql-size", title: "字体大小" },
+  { Choice: '.ql-list[value="ordered"]', title: "编号列表" },
+  { Choice: '.ql-list[value="bullet"]', title: "项目列表" },
+  { Choice: ".ql-direction", title: "文本方向" },
+  { Choice: '.ql-header[value="1"]', title: "h1" },
+  { Choice: '.ql-header[value="2"]', title: "h2" },
+  { Choice: ".ql-align", title: "对齐方式" },
+  { Choice: ".ql-color", title: "字体颜色" },
+  { Choice: ".ql-background", title: "背景颜色" },
+  { Choice: ".ql-image", title: "图像" },
+  { Choice: ".ql-video", title: "视频" },
+  { Choice: ".ql-link", title: "添加链接" },
+  { Choice: ".ql-formula", title: "插入公式" },
+  { Choice: ".ql-clean", title: "清除字体格式" },
+  { Choice: '.ql-script[value="sub"]', title: "下标" },
+  { Choice: '.ql-script[value="super"]', title: "上标" },
+  { Choice: '.ql-indent[value="-1"]', title: "向左缩进" },
+  { Choice: '.ql-indent[value="+1"]', title: "向右缩进" },
+  { Choice: ".ql-header .ql-picker-label", title: "标题大小" },
+  { Choice: '.ql-header .ql-picker-item[data-value="1"]', title: "标题一" },
+  { Choice: '.ql-header .ql-picker-item[data-value="2"]', title: "标题二" },
+  { Choice: '.ql-header .ql-picker-item[data-value="3"]', title: "标题三" },
+  { Choice: '.ql-header .ql-picker-item[data-value="4"]', title: "标题四" },
+  { Choice: '.ql-header .ql-picker-item[data-value="5"]', title: "标题五" },
+  { Choice: '.ql-header .ql-picker-item[data-value="6"]', title: "标题六" },
+  { Choice: ".ql-header .ql-picker-item:last-child", title: "标准" },
+  { Choice: '.ql-size .ql-picker-item[data-value="small"]', title: "小号" },
+  { Choice: '.ql-size .ql-picker-item[data-value="large"]', title: "大号" },
+  { Choice: '.ql-size .ql-picker-item[data-value="huge"]', title: "超大号" },
+  { Choice: ".ql-size .ql-picker-item:nth-child(2)", title: "标准" },
+  { Choice: ".ql-align .ql-picker-item:first-child", title: "居左对齐" },
+  {
+    Choice: '.ql-align .ql-picker-item[data-value="center"]',
+    title: "居中对齐"
+  },
+  {
+    Choice: '.ql-align .ql-picker-item[data-value="right"]',
+    title: "居右对齐"
+  },
+  {
+    Choice: '.ql-align .ql-picker-item[data-value="justify"]',
+    title: "两端对齐"
+  }
+];
+
+export default {
+  data() {
+    return {
+      content: "<h2>I am Example</h2>",
+      editorOption: {}
+    };
+  },
+  components: {
+    quillEditor
+  },
+  methods: {
+    onEditorBlur(quill) {
+      console.log("editor blur!", quill);
+    },
+    onEditorFocus(quill) {
+      console.log("editor focus!", quill);
+    },
+    onEditorReady(quill) {
+      console.log("editor ready!", quill);
+    },
+    onEditorChange({ quill, html, text }) {
+      console.log("editor change!", quill, html, text);
+      this.content = html;
+    },
+    autotip (){
+      document.getElementsByClassName('ql-editor')[0].dataset.placeholder=''
+      for(let item of titleConfig){
+          let tip = document.querySelector('.quill-editor '+ item.Choice)
+          if (!tip) continue
+          tip.setAttribute('title',item.title)
+      }
+    }
+  },
+  computed: {
+    editor() {
+      return this.$refs.myQuillEditor.quill;
+    }
+  },
+  mounted() {
+    console.log("this is current quill instance object", this.editor);
+    this.autotip()
+  }
+};
+</script>
+
+<style lang="less">
+.act-edit {
+  padding: 30px;
+  .ql-snow .ql-picker {
+    color: #fff;
+  }
+  .ql-snow .ql-stroke {
+    stroke: #fff;
+  }
+  .ql-snow .ql-fill,
+  .ql-snow .ql-stroke.ql-fill {
+    fill: #fff;
+  }
+  .ql-editor {
+    background: #161a1a;
+    min-height: 460px;
+  }
+  .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+    color: #000;
+  }
+  .ql-snow .ql-icon-picker .ql-picker-item svg line {
+    stroke: #444;
+  }
+  .ql-snow .ql-picker-label::before {
+    vertical-align: top;
+  }
+}
+</style>

+ 5 - 3
admin/src/components/tables/handle-btns.vue

@@ -45,11 +45,13 @@ export default {
         view: 'toViewLayout',
         author: 'toAuthorLayout',
         edit: 'toEdit',
-        del: 'toDel'
+        del: 'toDel',
+        check: 'toCheck'
       },
       btn_text: {
         edit: '编辑',
-        del: '删除'
+        del: '删除',
+        check: '查看'
       }
     }
   },
@@ -83,7 +85,7 @@ export default {
 .btn {
   cursor: pointer;
 }
-.btn-edit {
+.btn-edit, .btn-check {
   color: #1FE4DC;
   margin-right: 15px;
   &:last-child {

+ 4 - 4
admin/src/components/tables/tables.vue

@@ -43,7 +43,7 @@
           v-if="pageParam.total > 0"
           :current.sync="pageParam.current"
           :total="pageParam.total"
-          :page-size="pageParam.page_size"
+          :page-size="pageParam.pageSize"
           class-name="tatle-page"
           size="small"
           show-total
@@ -111,7 +111,7 @@ export default {
       // 工具按钮组
       toolsBtnGroup: [],
       time: null,
-      pageParam: { page_num: 1, page_size: 10, searchKey: '', total: 0, current: 1, tools_0: '', tools_1: '' }
+      pageParam: { pageNum: 1, pageSize: 10, searchKey: '', total: 0, current: 1, tools_0: '', tools_1: '' }
     }
   },
   computed: {
@@ -122,7 +122,7 @@ export default {
   watch: {
     // 监听搜索框,并在用户在时间间隔内只发送一次请求
     'pageParam.searchKey'() {
-      this.$bebounce(this.handleTableData, { page_num: 1, current: 1 })
+      this.$bebounce(this.handleTableData, { pageNum: 1, current: 1 })
     },
     columns() {
       this.handleTableData()
@@ -238,7 +238,7 @@ export default {
     },
     // 分页
     changePage(page) {
-      this.handleTableData({ page_num: page })
+      this.handleTableData({ pageNum: page })
     }
   }
 }

+ 37 - 4
admin/src/components/upload/index.vue

@@ -12,9 +12,10 @@
     >
       <div class="upload">
         <Icon type="md-add" size="40" style="color: #1FE4DC;" />
-        <p>本地上传</p>
+        <!-- <p>本地上传</p> -->
       </div>
     </Upload>
+    <p class="tips">{{ tips }}</p>
       <div
         v-for="(uploadfiles) in hasUploads"
         :key="uploadfiles.img"
@@ -64,15 +65,33 @@
 import { uploadFile } from 'api/upload'
 export default {
   props: {
-    preUploads: Array,
-    hasUploads: Array,
+    preUploads: {
+      type: Array,
+      default () {
+        return []
+      }
+    },
+    hasUploads: {
+      type: Array,
+      default () {
+        return []
+      }
+    },
     cover_image: String,
     limit: Number,
     multiple: {
       type: Boolean,
       default: true
     },
-    data: {}
+    data: {},
+    tips: {
+      type: String,
+      default: ''
+    },
+    maxSize: {
+      type: Number,
+      default: 500
+    }
   },
   data () {
     return {
@@ -132,3 +151,17 @@ export default {
   }
 }
 </script>
+
+<style lang="less" scoped>
+.upload {
+  padding: 30px 0 !important;
+  
+}
+.tips {
+    position: absolute;
+    bottom: -8px;
+    font-size: 12px;
+    color:rgba(255,255,255,0.38);
+    line-height: 1;
+  }
+</style>

+ 19 - 1
admin/src/components/upload/video.vue

@@ -11,7 +11,7 @@
     >
       <div class="upload">
         <Icon type="md-add" size="40" style="color: #1FE4DC;" />
-        <p>本地上传</p>
+        <!-- <p>本地上传</p> -->
       </div>
     </Upload>
       <div
@@ -40,6 +40,7 @@
           <Icon class="close" custom="iconfont iconform_close" />
         </div>
     </div>
+    <p class="tips">{{ tips }}</p>
   </div>
 </template>
 
@@ -53,6 +54,10 @@ export default {
     multiple: {
       type: Boolean,
       default: true
+    },
+    tips: {
+      type: String,
+      default: ''
     }
   },
   data () {
@@ -123,3 +128,16 @@ export default {
   }
 }
 </script>
+
+<style lang="less" scoped>
+.upload {
+  padding: 30px 0 !important;
+}
+.tips {
+    position: absolute;
+    bottom: -8px;
+    font-size: 12px;
+    color:rgba(255,255,255,0.38);
+    line-height: 1;
+  }
+</style>

+ 48 - 19
admin/src/layout/index/index.vue

@@ -4,11 +4,10 @@
     <Sider width="310">
       
       <div class="layout-logo">
-        看房4DKanKan-管理后台
+        好玩展-管理后台
       </div>
       <Menu theme="dark" :active-name="$route.name" width="auto" class="layout-menu">
-        <MenuGroup >
-          <template v-for="(item, index) in menuList[0].children">
+        <template v-for="(item, index) in menuList[0].children">
             <MenuItem
               :key="item.name"
               :to="item.path"
@@ -22,41 +21,43 @@
             </MenuItem>
             <Submenu :name="index" v-else>
                 <template slot="title">
-                    <Icon class="menu-icon" :custom="`iconfont icon${item.meta.icon}`" />
+                    <div class="menu-item">
+                      <Icon class="menu-icon" :custom="`iconfont icon${item.meta.icon}`" />
                     {{ item.meta.title }}
+                    </div>
                 </template>
-                <MenuItem :name="`${index}-${childIndex}`" :to="`${item.path}/${child.path}`" v-for="(child, childIndex) in item.children" :key="child.path">{{child.meta.title}}</MenuItem>
+                <MenuItem :name="child.name" :to="`${item.path}/${child.path}`" v-for="(child) in item.children" :key="`${item.path}/${child.path}`">{{child.meta.title}}</MenuItem>
             </Submenu>
           </template>
-        </MenuGroup>
       </Menu>
     </Sider>
     <Layout>
       <Header class="layout-header">
+        <template>
+          <div class="layout-navigation">
+          <Breadcrumb separator="/">
+            <BreadcrumbItem class="bread-navigation" v-for="item in breadcrumb" :key="item">{{ item }}</BreadcrumbItem>
+          </Breadcrumb>
+        </div>
         <div class="header-user">
           <span class="user-name">{{ userName }}</span>
             <span class="user-btn" @click="changeEditShow(true)"><Icon custom="iconfont iconnav_password" /><span>修改密码</span></span>
             <span class="user-btn" @click="logoutModal=true"><Icon custom="iconfont iconnav_exit" /><span>退出登录</span></span>
             <i class="iconfont iconarrow_down" />
         </div>
+        </template>
       </Header>
-      <div class="layout-navigation">
-        <Breadcrumb separator=">">
-          <BreadcrumbItem class="bread-navigation" v-for="item in breadcrumb" :key="item">{{ item }}</BreadcrumbItem>
-        </Breadcrumb>
-      </div>
+      
       <Content class="layout-main">
         <!-- <keep-alive>
           <router-view v-if="!$route.meta.noKeepAlive" />
         </keep-alive>
         <router-view v-if="$route.meta.noKeepAlive" /> -->
-        <router-view />
+        <div class="container">
+          <router-view />
+        </div>
       </Content>
     </Layout>
-    <Modal v-model="show" class="edit-modal" width="420" footer-hide>
-      <div class="modal-header" slot="header">修改密码</div>
-      <editPassword v-if="show" @change="changeEditShow" />
-    </Modal>
     <CModal :show="logoutModal" :width="420" title="提示" @close="logoutModal=false" @submit="handleLogout" submitText="确定">
       <div style="height:60px">确定退出登录吗?</div>
     </CModal>
@@ -121,11 +122,16 @@ export default {
   }
 
   &-menu {
+    padding-top: 30px;
     .menu-item {
       height: 28px;
       line-height: 28px;
+      font-size: 16px;
+      display: flex;
+      align-items: center;
       .menu-icon {
-        margin-right: 10px;
+        margin-right: 15px;
+        color: #17D2D2;
       }
     }
   }
@@ -133,6 +139,9 @@ export default {
   &-header {
     border-bottom: 1px solid #555a5a;
     height: 64px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
     .header-user {
       float: right;
       // cursor: pointer;
@@ -150,7 +159,13 @@ export default {
       }
     }
   }
-
+  .layout-main {
+    padding: 30px;
+    .container {
+      // min-height: 100%;
+      background: #252828;
+    }
+  }
   &-navigation {
     height: 48px;
     padding: 12px 29px;
@@ -164,7 +179,21 @@ export default {
 
   .ivu-menu-dark.ivu-menu-vertical
     .ivu-menu-item-active:not(.ivu-menu-submenu) {
-    color: #fff;
+  }
+  .ivu-menu-vertical .ivu-menu-submenu-title {
+    font-size: 16px;
+  }
+  .ivu-menu-dark.ivu-menu-vertical .ivu-menu-item-active:not(.ivu-menu-submenu) {
+    background: transparent;
+  }
+  .ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu .ivu-menu-item-active {
+    background: transparent !important;
+    color: #1FE4DC;
+  }
+  
+  .layout-navigation {
+    border-left: none;
+    padding: 0;
   }
 }
 .user-btn {

+ 49 - 23
admin/src/router/routes.js

@@ -30,13 +30,58 @@ export default [
       },
       component: resolve => require(['views/enterprise'], resolve) 
     }, 
-    
+    {
+      path: '/activity',
+      name: 'activity',
+      meta: {
+        title: '展会管理',
+        icon: 'nav_system'
+      },
+      component: resolve => require(['views/industry'], resolve),
+      children: [
+        {
+          path: 'home',
+          name: 'home',
+          meta: {
+            title: '首页管理',
+            noKeepAlive: true
+          },
+          component: resolve => require(['views/activity/homeAdmin'], resolve),
+        },
+        {
+          path: 'edit',
+          name: 'actEdit',
+          meta: {
+            title: '展会概况'
+          },
+          component: resolve => require(['views/activity/activityEdit'], resolve),
+        },
+        {
+          path: 'enterpriseList',
+          name: 'enterpriseList',
+          meta: {
+            title: '展商名录',
+            noKeepAlive: true
+          },
+          component: resolve => require(['views/activity/enterpriseList'], resolve),
+        },
+        {
+          path: 'industry',
+          name: 'industry',
+          meta: {
+            title: '企业行业',
+            noKeepAlive: true
+          },
+          component: resolve => require(['views/industry/list'], resolve),
+        },
+      ]
+    },
     {
       path: '/system',
       name: 'system',
       meta: {
-        title: '系统管理',
-        icon: 'iconnav_sys',
+        title: '用户信息',
+        icon: 'nav_user',
         // 不需要缓存路由组件
         noKeepAlive: true
         // access: ['admin']
@@ -61,26 +106,7 @@ export default [
             hideInMenu: true
           },
           component: resolve => require(['views/system/user/list'], resolve),
-        },
-        {
-          path: 'address',
-          name: 'system',
-          meta: {
-            title: '地址管理',
-            noKeepAlive: true
-          },
-          component: resolve => require(['views/system/address/list'], resolve),
-        },
-        {
-          path: 'store',
-          name: 'system',
-          meta: {
-            title: '门店管理',
-            noKeepAlive: true
-          },
-          component: resolve => require(['views/system/store/list'], resolve),
-        },
-        
+        }
       ]
     }
   ]

+ 100 - 0
admin/src/views/activity/activityEdit.vue

@@ -0,0 +1,100 @@
+<template>
+  <!-- Two-way Data-Binding -->
+  <div class="act-edit">
+    <div class="min-container">
+      <div style="min-height: 460px">
+        <Form :label-width="86">
+          <FormItem label="展会名称">
+            <Input size="large" />
+          </FormItem>
+          <FormItem label="展会概况">
+            <quill-editor
+              ref="myQuillEditor"
+              v-model="content"
+              :options="editorOption"
+              @blur="onEditorBlur($event)"
+              @focus="onEditorFocus($event)"
+              @ready="onEditorReady($event)"
+            />
+          </FormItem>
+          <FormItem label="联系我们">
+            <!-- <quill-editor
+              ref="myQuillEditor"
+              v-model="content"
+              :options="editorOption"
+              @blur="onEditorBlur($event)"
+              @focus="onEditorFocus($event)"
+              @ready="onEditorReady($event)"
+            /> -->
+          </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";
+
+export default {
+  data() {
+    return {
+      content: "<h2>I am Example</h2>",
+      editorOption: {
+        // Some Quill options...
+        // modules: {
+        //   toolbar: [
+        //     [{color: ['#000']}, { 'background': ['#000'] }]
+        //   ]
+        // }
+      }
+    };
+  },
+  components: {
+    quillEditor
+  },
+  methods: {
+  },
+  computed: {
+    editor() {
+      return this.$refs.myQuillEditor.quill;
+    }
+  },
+  mounted() {
+    console.log("this is current quill instance object", this.editor);
+  }
+};
+</script>
+
+<style lang="less">
+.act-edit {
+  padding: 30px;
+  .ql-snow .ql-picker {
+    color: #fff;
+  }
+  .ql-snow .ql-stroke {
+    stroke: #fff;
+  }
+  .ql-snow .ql-fill,
+  .ql-snow .ql-stroke.ql-fill {
+    fill: #fff;
+  }
+  .ql-editor {
+    background: #161a1a;
+    min-height: 460px;
+  }
+  .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
+    color: #000;
+  }
+  .ql-snow .ql-icon-picker .ql-picker-item svg line {
+    stroke: #444;
+  }
+}
+</style>

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

@@ -0,0 +1,78 @@
+<template>
+  <div class="enterprise-list">
+    <tables
+      :data-api="getCompanyList"
+      :delete-api="deleteApi"
+      :columns="columns"
+      deleteIdKey="agency_user_id"
+      placeholder="输入公司名称"
+      ref="table"
+    />
+  </div>
+</template>
+
+<script>
+import tables from 'components/tables'
+import { getCompanyList } from '@/api/company'
+export default {
+  data () {
+    return {
+      getCompanyList,
+      deleteApi: getCompanyList,
+      columns: [
+        {
+          type: 'index',
+          title: '序号',
+          align: 'center',
+          width: 80
+        },
+        {
+          title: '公司名称',
+          key: 'companyName',
+          align: 'center'
+        },
+        {
+          title: '所属行业',
+          key: 'companyType',
+          align: 'center'
+        },
+        {
+          title: '公司地址',
+          key: 'companyAddress',
+          align: 'center'
+        },
+        {
+          title: '成立时间',
+          key: 'createTime',
+          align: 'center'
+        },
+        {
+          title: '讲解人员',
+          key: 'name',
+          align: 'center'
+        },
+        {
+          title: '手机号码',
+          key: 'name',
+          align: 'center'
+        },
+        {
+          title: '操作',
+          slot: 'action',
+          tools: ['check', 'del' ],
+          align: 'center'
+        }
+      ],
+    }
+  },
+  components: {
+    tables
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.enterprise-list {
+  padding: 30px;
+}
+</style>

+ 90 - 0
admin/src/views/activity/homeAdmin.vue

@@ -0,0 +1,90 @@
+<template>
+  <div class="home-admin">
+    <div class="min-container">
+      <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" />
+        </FormItem>
+      </Form>
+      <div class="header-title">明星企业</div>
+      <Form :label-width="86" class="form">
+        <Row>
+          <i-col :span="12">
+            <FormItem label="上传海报">
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+          </FormItem>
+          </i-col>
+          <i-col :span="12">
+            <FormItem label="选择企业">
+              <Input size="large" />
+          </FormItem>
+          </i-col>
+        </Row>
+        <Row>
+          <i-col :span="12">
+            <FormItem label="上传海报">
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+          </FormItem>
+          </i-col>
+          <i-col :span="12">
+            <FormItem label="选择企业">
+              <Input size="large" />
+          </FormItem>
+          </i-col>
+        </Row>
+        <Row>
+          <i-col :span="12">
+            <FormItem label="上传海报">
+            <picUpload tips="只能上传jpg/png文件,且不超过500kb" :limit="1" :multiple="false" />
+          </FormItem>
+          </i-col>
+          <i-col :span="12">
+            <FormItem label="选择企业">
+              <Input size="large" />
+          </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>
+      </div>
+    </div>
+    
+  </div>
+</template>
+
+<script>
+import picUpload from '@/components/upload'
+export default {
+  data () {
+    return {
+      postPreUploads: [],
+      postHasUploads: []
+    }
+  },
+  components: {
+    picUpload
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.home-admin {
+  padding: 0 30px 30px;
+}
+.form {
+  padding-top: 30px;
+}
+.actions-w {
+  padding-left: 86px;
+  .submit-btn {
+    width: 116px;
+  }
+  .cancle-btn {
+    width: 88px;
+    margin-left: 15px;
+  }
+}
+</style>

+ 0 - 0
admin/src/views/activity/index.vue


+ 328 - 0
admin/src/views/enterprise/components/baseForm.vue

@@ -0,0 +1,328 @@
+<template>
+  <div class="base-form">
+    <div class="form">
+      <Form :label-width="86" :rules="rules" :model="form">
+        <Row :gutter="90">
+          <i-col :span="12" class="">
+            <FormItem label="公司名称" prop="companyName">
+              <Input type="text" size="large" v-model="form.companyName" :disabled="isDetail" />
+            </FormItem>
+          </i-col>
+          <i-col :span="12" class="">
+            <FormItem label="所属行业" prop="companyType">
+              <i-select size="large" :model.sync="form.companyType" @on-change="changeCompanyType">
+                <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" /> -->
+            </FormItem>
+          </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>
+            </FormItem>
+          </i-col>
+          <i-col :span="12" class="">
+            <FormItem label="员工人数" prop="staffNum">
+              <Input type="text" size="large" v-model="form.staffNum" :disabled="isDetail" />
+            </FormItem>
+          </i-col>
+          <i-col :span="12" class="">
+            <FormItem label="注册资金" prop="registerFund">
+              <Input type="text" size="large" v-model="form.registerFund"  :disabled="isDetail"/>
+            </FormItem>
+          </i-col>
+          <i-col :span="12" class="">
+            <FormItem label="主要产品" prop="mainProductDesc">
+              <Input type="text" size="large" v-model="form.mainProductDesc" :disabled="isDetail" />
+            </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" />
+            </FormItem>
+          </i-col>
+          <i-col :span="12" 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>
+            </FormItem>
+          </i-col>
+          <i-col :span="24" class="">
+            <FormItem label="公司简介" class="textarea-w">
+              <Input type="textarea" size="large" v-model="form.companyType" :disabled="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" />
+            </FormItem>
+          </i-col>
+          <!-- <i-col :span="12" class="">
+            <FormItem label="资质认证">
+              <picUpload tips="只能上传jpg/png文件,且不超过500kb" :multiple="false" :limit="1" />
+            </FormItem>
+          </i-col> -->
+          <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>
+                <Button type="primary" size="large" class="input-btn">编辑场景</Button>
+              </template>
+            </FormItem>
+          </i-col>
+          <i-col :span="24" class="">
+            <FormItem label="讲解人员">
+              <template>
+                <div class="guide-info">
+                  <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">
+                </div>
+                <Button type="primary" size="large" @click="guideModalShow=true">选择/更换</Button>
+              </template>
+            </FormItem>
+          </i-col>
+        </Row>
+      </Form>
+    </div>
+    <cModal :show="modalShow"  class="scene-modal" :width="960" title="添加/选择场景" @close="modalShow=false" @submit="changeScene">
+      <template>
+        <tables 
+          :data-api="dataApi"
+          :columns="tableColumns"
+          placeholder="场景名称"
+        />
+        <div style="height:20px"></div>
+      </template>
+    </cModal>
+    <cModal :show="guideModalShow"  class="scene-modal" :width="960" title="选择讲解员" @close="guideModalShow=false" @submit="changeGuide">
+      <template>
+        <tables 
+          :data-api="getGuideList"
+          :columns="guideTableColumns"
+          placeholder="经纪人"
+          ref="guideTable"
+        />
+        <div style="height:20px"></div>
+      </template>
+    </cModal>
+  </div>
+</template>
+
+<script>
+import picUpload from '@/components/upload'
+import cModal from '@/components/Modal'
+import tables from 'components/tables'
+import * as CompanyApi from '@/api/company'
+import { getGuideList } from '@/api/guide'
+import { searchPlaceByKeyword } from '@/api/qqmap'
+
+export default {
+  props: {
+    form: Object
+  },
+  data () {
+    return {
+      isDetail: false,
+      preLogoUploads: [],
+      hasLogoUploads: [],
+      select_scene_num: '',
+      select_guide_id: '',
+      select_guide: {},
+      rules: {
+        name: [{ required: true, message: '请填写公司名', trigger: 'blur' }],
+        companyType: [{ required: true, message: '请选择所属行业', trigger: 'change'}],
+        companyRegisterTime: [{ required: true, message: '请填写成立时间', trigger: 'change'}],
+        staffNum: [{ required: true, message: '请填写员工人数', trigger: 'blur' }],
+        registerFund: [{ required: true, message: '请填写注册资金', trigger: 'blur' }],
+        mainProductDesc: [{ required: true, message: '请填写主要产品描述', trigger: 'blur' }],
+      },
+      tableColumns: [
+        {
+          align: 'center',
+          width: 80,
+          render: (h, params ) => h('Checkbox', {
+            props: {
+              trueValue: params.row.num,
+              falseValue: false,
+              value: params.row.num === this.select_scene_num ? params.row.num : false
+            },
+            on: {
+              'on-change': (val) => {
+                this.select_scene_num = val
+              }
+            }
+          })
+        },
+        {
+          type: 'index',
+          title: '序号',
+          align: 'center',
+          width: 80
+        },
+        {
+          title: '场景名称',
+          key: 'sceneName',
+          align: 'center'
+        },
+        {
+          title: '分类',
+          key: 'title',
+          align: 'center',
+          render: h => h('div', '其它')
+        },
+        {
+          title: '拍摄时间',
+          key: 'createTime',
+          align: 'center'
+        }
+      ],
+      guideTableColumns: [
+        {
+          align: 'center',
+          width: 80,
+          render: (h, params ) => h('Checkbox', {
+            props: {
+              trueValue: params.row.viewerId,
+              falseValue: false,
+              value: params.row.viewerId === this.select_guide_id ? params.row.viewerId : false
+            },
+            on: {
+              'on-change': (val) => {
+                this.select_guide_id = val
+              }
+            }
+          })
+        },
+        {
+          type: 'index',
+          title: '序号',
+          align: 'center',
+          width: 80
+        },
+        {
+          title: '头像',
+          key: 'avatar',
+          align: 'center',
+          render: (h, params) => h('img', {
+            attrs: {
+              style: "width: 40px;height:40px;border-radius: 50%;",
+              src: params.row.avatar
+            }
+          })
+        },
+        {
+          title: '名称',
+          key: 'name',
+          align: 'center'
+        },
+        {
+          title: '联系方式',
+          key: 'phoneNum',
+          align: 'center'
+        }
+      ],
+      industryList: [],
+      dataApi: CompanyApi.fetchAllScene,
+      getGuideList,
+      modalShow: false,
+      guideModalShow: false,
+      addressList: []
+    }
+  },
+  components: {
+    picUpload,
+    cModal,
+    tables,
+  },
+  mounted () {
+    this.getIndustryList()
+    
+  },
+  methods: {
+    changeScene () {
+    },
+    changeGuide () {
+      this.select_guide = this.$refs['guideTable'].tableData.find(item => item.viewerId === this.select_guide_id)
+    },
+    getIndustryList () {
+      CompanyApi.getIndustry({pageSize: 9999}).then(res => {
+        this.industryList = res.data.list
+      })
+    },
+    changeCompanyType (value) {
+      this.form.companyType = value
+    },
+    changeAddress (value) {
+      if (!value) {
+        this.addressList = []
+        return
+      }
+      searchPlaceByKeyword({keyword: value}).then(res => {
+        this.addressList = res.data
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+.base-form {
+
+  .address-detail {
+    font-size: 12px;
+    color: #909090;
+  }
+  .ivu-select .ivu-select-dropdown {
+    width: 337px;
+    overflow: auto;
+    overflow-x: hidden;
+  }
+}
+.guide-info {
+  width: 380px;
+  padding: 12px 15px 16px;
+  font-size: 14px;
+  background: #161A1A;
+  border:1px solid rgba(255,255,255,0.4);
+  position: relative;
+  line-height: 19px;
+  display: inline-block;
+  margin-right: 15px;
+  min-height: 104px;
+  vertical-align: top;
+  p {
+    margin-bottom: 10px;
+  }
+  .guide-phone {
+    margin-bottom: 0;
+  }
+  .guide-avatar {
+    position: absolute;
+    right: 15px;
+    top: 15px;
+    width: 60px;
+    height: 60px;
+    border-radius: 50%;
+  }
+  
+}
+</style>

+ 23 - 0
admin/src/views/enterprise/components/introPicForm.vue

@@ -0,0 +1,23 @@
+<template>
+  <div class="intro-pic-form">
+    <div class="form">
+      <Form :label-width="86">
+        <FormItem label="图片上传" :limit="20">
+          <picUpload tips="只能上传jpg/png文件,建议尺寸为960*600,且单张不超过500kb,最多20张" />
+        </FormItem>
+      </Form>
+    </div>
+  </div>
+</template>
+
+<script>
+import picUpload from '@/components/upload'
+export default {
+  props: {
+    form: Object
+  },
+  components: {
+    picUpload
+  }
+}
+</script>

+ 27 - 0
admin/src/views/enterprise/components/videoForm.vue

@@ -0,0 +1,27 @@
+<template>
+  <div class="video-form">
+    <div class="form">
+      <Form :label-width="86">
+        <FormItem label="视频简介">
+          <Input type="text" size="large" v-model="form.companyName" />
+        </FormItem>
+        <FormItem label="上传视频">
+          <videoUpload tips="只能上传mp4/mov文件,且不超过10mb" />
+        </FormItem>
+      </Form>
+    </div>
+  </div>
+</template>
+
+<script>
+import videoUpload from '@/components/upload/video'
+
+export default {
+  props: {
+    form: Object
+  },
+  components: {
+    videoUpload
+  }
+}
+</script>

+ 96 - 0
admin/src/views/enterprise/index.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="enterprise min-container">
+    <div class="header-title">公司概况</div>
+    <baseForm :form="form" />
+    <div class="header-title">视频介绍</div>
+    <videoForm :form="form" />
+    <div class="header-title">图片介绍</div>
+    <introPicForm :form="form" />
+    <div class="actions-w">
+      <Button type="primary" size="large" class="submit-btn" @click="submit">提交</Button>
+      <Button  size="large" @click="cancle">取消</Button>
+    </div>
+    
+  </div>
+</template>
+
+<script>
+import * as CompanyApi from '@/api/company'
+import baseForm from './components/baseForm'
+import videoForm from './components/videoForm'
+import introPicForm from './components/introPicForm'
+export default {
+  data () {
+    return {
+      
+      form: {
+        companyName: '111',
+        companyType: ''
+      },
+      
+    }
+  },
+  components: {
+    baseForm,
+    videoForm,
+    introPicForm
+  },
+  methods: {
+    submit () {
+      return CompanyApi.addCompany(this.form)
+    },
+    cancle () {}
+  }
+}
+</script>
+<style lang="less">
+.enterprise {
+  color: rgba(255,255,255,0.60);
+  .form {
+    margin-top: 30px;
+  }
+  
+  .ivu-date-picker {
+    width: 100%;
+  }
+  .ivu-date-picker-cells-year .ivu-date-picker-cells-cell-focused, .ivu-date-picker-cells-month .ivu-date-picker-cells-cell-focused, .ivu-date-picker-cells-cell:hover em {
+    background: #17D2D2 !important;
+    color: #fff;
+  }
+  
+  .m-t-30 {
+    margin-top: 30px;
+  }
+  .ivu-input-wrapper {
+    max-width: 337px;
+  }
+  .textarea-w {
+    .ivu-input-wrapper {
+      max-width: 100%;
+      
+    }
+    textarea.ivu-input {
+      height: 104px;
+    }
+  }
+  .input-btn {
+    margin: 0 0 0 15px;
+  }
+  .actions-w {
+    padding-left: 86px;
+    padding-bottom: 30px;
+    .submit-btn {
+      margin-right: 15px;
+    }
+  }
+  .ivu-input[disabled] {
+    background: transparent !important;
+    color: #fff !important;
+    border: none;
+    cursor: default;
+  }
+  textarea {
+    resize: none;
+  }
+}
+</style>

+ 9 - 0
admin/src/views/industry/index.vue

@@ -0,0 +1,9 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  
+}
+</script>

+ 124 - 0
admin/src/views/industry/list.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="industry-list">
+    <tables
+      :buttonList="buttonList"
+      :data-api="getIndustry"
+      :delete-api="deleteApi"
+      :columns="columns"
+      @create="create"
+      @toEdit="toEdit"
+      deleteIdKey="agency_user_id"
+      placeholder="输入行业名称"
+      ref="table"
+    />
+    <cModal :show="modalShow" :width="526" title="新增行业" @close="modalShow=false" @submit="createIndustry">
+      <div class="form">
+        <Form :label-width="86">
+          <FormItem label="行业名称">
+            <Input size="large" v-model="form.name" />
+          </FormItem>
+        </Form>
+      </div>
+    </cModal>
+  </div>
+</template>
+
+<script>
+import { getIndustry, createIndustry, updateIndustry } from '@/api/company'
+import tables from 'components/tables'
+import cModal from 'components/Modal'
+
+export default {
+  data () {
+    return {
+      getIndustry,
+      // 传递给tables的表格列数据
+      buttonList: [
+        {
+          text: '新增',
+          handle: 'create'
+        }
+      ],
+      dataApi: getIndustry,
+      deleteApi: getIndustry,
+      columns: [
+        {
+          type: 'index',
+          title: '序号',
+          align: 'center',
+          width: 80
+        },
+        {
+          title: '行业名称',
+          key: 'name',
+          align: 'center'
+        },
+        {
+          title: '状态',
+          key: 'isValide',
+          align: 'center',
+          render: (h, params) => {
+            return h('i-switch', {
+              props: {
+                trueValue: 1,
+                falseValue: 0,
+                value: params.row.isValide,
+                // disabled: params.row.roleKey === 'admin'
+              },
+              on: {
+                'on-change': (val) => {
+                  updateIndustry(Object.assign(params.row, {isValide: val}))
+                }
+              }
+            })
+          }
+        },
+        {
+          title: '创建时间',
+          key: 'createTime',
+          align: 'center',
+          render: (h, params) => h('p', params.row.createTime.replace('T', ' '))
+        },
+        {
+          title: '操作',
+          slot: 'action',
+          tools: ['edit', 'del' ],
+          align: 'center'
+        }
+      ],
+      modalShow: false,
+      form: {
+        name: ''
+      }
+    }
+  },
+  components: {
+    tables,
+    cModal
+  },
+  methods: {
+    create () {
+      this.form = {
+        name: ''
+      }
+      this.modalShow = true
+    },
+    toEdit (item) {
+      this.modalShow = true
+      this.form = Object.assign({}, item)
+    },
+    async createIndustry () {
+      let api = this.form.id ? updateIndustry : createIndustry
+      let res = await api(this.form)
+      this.$refs['table'].handleTableData()
+      this.modalShow = false
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.industry-list {
+  padding: 30px;
+}
+</style>

+ 2 - 2
admin/vue.config.js

@@ -26,7 +26,7 @@ module.exports = {
       '/admin': {
         // target: 'http://120.24.85.77:8087', // 正式环境
         // target: 'http://192.168.0.83:8085'  // 伟玉本地环境
-        target: 'http://39.108.220.65:8085'    // 测试环境
+        target: 'http://39.108.220.65:8075'    // 测试环境
       },
       '/node-upload': {
         target: 'http://39.108.220.65:1935',
@@ -37,7 +37,7 @@ module.exports = {
   configureWebpack: {
     // provide the app's title in webpack's name field, so that
     // it can be accessed in index.html to inject the correct title.
-    name: '看房4DKanKan-管理后台',
+    name: '好玩展-管理后台',
     resolve: {
       alias: {
         '@': resolve('src'),

+ 2 - 1
miniprogram/apis/fetcher/request.js

@@ -30,11 +30,12 @@ function request (url, options) {
       url: url.indexOf('://') === -1 ? BASE_URL + url : url,
       method: options.method,
       data: options.data,
+      header: options.header || {},
       // header: {
       //   token: app.globalData.token
       // },
       success (res) {
-        if (res.data.code == 0 || res.data.code == 200) {
+        if (res.data.code == 0 || res.data.code == 200 || res.data.errno === 0) {
           resolve(res.data)
         } else if (needLoginErrorCode.indexOf(Number(res.data.code)) !== -1) {
           wx.navigateTo({

+ 4 - 0
miniprogram/apis/goods.js

@@ -63,5 +63,9 @@ export default {
       viewerId: getApp().globalData.userinfo.viewerId
     }
     return request.get('goods/cancelGoodsCollect', data)
+  },
+
+  getShopGoodsDetail (goodsId) {
+    return request.post('https://testshop.4dkankan.com/platform-framework/api/goods/detail', {id: Number(goodsId)}, { header: {'Content-Type': 'application/x-www-form-urlencoded'}})
   }
 }

+ 8 - 8
miniprogram/components/tab-bar/tab-bar.js

@@ -31,14 +31,14 @@ Component({
           active: '/assets/images/tabs/home-active.svg'
         }
       },
-      {
-        title: '直播',
-        url: 'live',
-        icon: {
-          normal: '/assets/images/tabs/live.svg',
-          active: '/assets/images/tabs/home-active.svg'
-        }
-      },
+      // {
+      //   title: '直播',
+      //   url: 'live',
+      //   icon: {
+      //     normal: '/assets/images/tabs/live.svg',
+      //     active: '/assets/images/tabs/home-active.svg'
+      //   }
+      // },
       {
         title: '发现',
         url: 'find',

+ 8 - 4
miniprogram/pages/goods-detail/goods-detail.js

@@ -12,17 +12,21 @@ VueLikePage([], {
     async onLoad (options) {
       const { goods_id } = options
       this.goods_id = goods_id
-      const res = await this.getGoodsDetail()
+      const goodsDetail = await this.getGoodsDetail()
       this.getGuide()
       this.getGoodsCollectStatus()
       this.setData({
-        detail: res.data
+        detail: goodsDetail
       })
       const companyRes = await CompanyApi.getCompanyDetail(res.data.companyId)
       this.company = companyRes.data
     },
-    getGoodsDetail () {
-      return GoodsApi.getGoodsDetail(this.goods_id)
+    async getGoodsDetail () {
+      let res = await GoodsApi.getShopGoodsDetail(this.goods_id)
+      console.log(res, 'res')
+      let goodsDetail = res.data
+      goodsDetail.banner = goodsDetail.gallery.map(item => item.img_url)
+      return goodsDetail
     },
     getGoodsCollectStatus () {
       return GoodsApi.getGoodsCollectStatus(this.goods_id).then(res => {

+ 3 - 3
miniprogram/pages/goods-detail/goods-detail.wxml

@@ -1,13 +1,13 @@
 <scroll-view class="goods-detail" scroll-y="true">
 	<swiper class="swiper" circular indicator-dots indicator-active-color="#17D2D2" autoplay indicator-color="#fff">
-		<swiper-item>
-			<image class="banner-img" src="https://houseoss.4dkankan.com/4dHouse/admin/upload/202006301659_126.png?x-oss-process=image/quality,q_75"></image>
+		<swiper-item wx:for="{{ detail.banner }}" wx:key="{{index}}">
+			<image class="banner-img" src="{{item}}"></image>
 		</swiper-item>
 	</swiper>
 
 	<view class="container">
 		<view class="goods-name-w">
-			<view class="goods-name">{{ detail.name }}</view>
+			<view class="goods-name">{{ detail.info.name }}</view>
 			<view class="goods-price">¥{{ detail.price }}</view>
 		</view>
 

+ 3 - 3
miniprogram/pages/index/index.js

@@ -14,17 +14,17 @@ VueLikePage([], {
         categoryList: [],
         companyList: [],
         tabList: [{
-                label: '展会概况',
+                label: '科技珠海',
                 route: 'exhibitionDetail',
                 icon: '/image/4Dage/index/img_tags_situation.svg'
             },
             {
-                label: '展商名录',
+                label: '企业名录',
                 route: 'exhibitionEnterprise',
                 icon: '/image/4Dage/index/img_tags_directories.svg'
             },
             {
-                label: '观展登记',
+                label: '联系我们',
                 route: 'exhibitionRegister',
                 icon: '/image/4Dage/index/img_tags_register.svg'
             },

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

@@ -21,7 +21,7 @@
             </swiper>
         </view>
         <!-- 展会产品 -->
-        <view class="category-w">
+        <!-- <view class="category-w">
             <view class="category-header clearfix">
                 <view class="category-title fl">展会产品</view>
                 <view class="more fr" bindtap="toGoodsTab">更多></view>
@@ -34,7 +34,7 @@
                     <view class="desc">{{item.translateTwo}}</view>
                 </view>
             </view>
-        </view>
+        </view> -->
 
         <!-- 参展企业 -->
         <view class="enterprise-w">

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

@@ -80,7 +80,7 @@
 }
 
 .enterprise-w {
-  margin-top: 52rpx;
+  /* margin-top: 52rpx; */
   background: #fff;
   /* height: 978rpx; */
   width: 100%;

+ 6 - 6
miniprogram/pages/my/my.js

@@ -24,12 +24,12 @@ VueLikePage([], {
             //     icon: 'my_enterprise',
             //     value: 'collectEnterprise',
             // },
-            {
-                title: '数据报表',
-                icon: 'my_reportform',
-                value: 'dataReport',
-                needLogin: true
-            },
+            // {
+            //     title: '数据报表',
+            //     icon: 'my_reportform',
+            //     value: 'dataReport',
+            //     needLogin: true
+            // },
             {
                 title: '账号设置',
                 icon: 'my_set',

+ 4 - 3
miniprogram/project.config.json

@@ -375,10 +375,10 @@
 					"scene": null
 				},
 				{
-					"id": -1,
-					"name": "pages/goods-detail/goods-detail",
+					"id": 45,
+					"name": "商圈商品详情",
 					"pathName": "pages/goods-detail/goods-detail",
-					"query": "goods_id=fdasf2",
+					"query": "goods_id=1181276",
 					"scene": null
 				},
 				{
@@ -448,6 +448,7 @@
 					"id": -1,
 					"name": "dataReport/pages/data-report/data-report",
 					"pathName": "dataReport/pages/data-report/data-report",
+					"query": "",
 					"scene": null
 				}
 			]