shaogen1995 2 years ago
parent
commit
963fa4a8f2

+ 48 - 0
houtai/package-lock.json

@@ -16,6 +16,7 @@
         "element-ui": "^2.15.6",
         "js-base64": "^3.7.2",
         "moment": "^2.29.1",
+        "v-viewer": "^1.6.4",
         "vant": "^2.12.45",
         "vue": "^2.6.11",
         "vue-json-excel": "^0.3.0",
@@ -15211,6 +15212,27 @@
         "uuid": "bin/uuid"
       }
     },
+    "node_modules/v-viewer": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmmirror.com/v-viewer/-/v-viewer-1.6.4.tgz",
+      "integrity": "sha512-LVkiUHpmsbsZXebeNXnu8krRCi5i2n07FeLFxoIVGhw8lVvTBO0ffpbDC6mLEuacCjrIh09HjIqpciwUtWE8lQ==",
+      "dependencies": {
+        "throttle-debounce": "^2.0.1",
+        "viewerjs": "^1.5.0"
+      },
+      "engines": {
+        "node": ">=4",
+        "npm": ">=3"
+      }
+    },
+    "node_modules/v-viewer/node_modules/throttle-debounce": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
+      "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/v8-compile-cache": {
       "version": "2.3.0",
       "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz?cache=0&sync_timestamp=1614993639567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.3.0.tgz",
@@ -15271,6 +15293,11 @@
         "extsprintf": "^1.2.0"
       }
     },
+    "node_modules/viewerjs": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/viewerjs/-/viewerjs-1.11.1.tgz",
+      "integrity": "sha512-/VQ2zalHLZJOGIwlxOBtxagLZwNvU3Bf+nm692XlhNFxjBXRxpCVn+GeqmRFg9jK1Y2+Wf8PPGxZgTDN4pHXww=="
+    },
     "node_modules/vm-browserify": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",
@@ -28921,6 +28948,22 @@
       "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
       "dev": true
     },
+    "v-viewer": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmmirror.com/v-viewer/-/v-viewer-1.6.4.tgz",
+      "integrity": "sha512-LVkiUHpmsbsZXebeNXnu8krRCi5i2n07FeLFxoIVGhw8lVvTBO0ffpbDC6mLEuacCjrIh09HjIqpciwUtWE8lQ==",
+      "requires": {
+        "throttle-debounce": "^2.0.1",
+        "viewerjs": "^1.5.0"
+      },
+      "dependencies": {
+        "throttle-debounce": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
+          "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="
+        }
+      }
+    },
     "v8-compile-cache": {
       "version": "2.3.0",
       "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz?cache=0&sync_timestamp=1614993639567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.3.0.tgz",
@@ -28972,6 +29015,11 @@
         "extsprintf": "^1.2.0"
       }
     },
+    "viewerjs": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/viewerjs/-/viewerjs-1.11.1.tgz",
+      "integrity": "sha512-/VQ2zalHLZJOGIwlxOBtxagLZwNvU3Bf+nm692XlhNFxjBXRxpCVn+GeqmRFg9jK1Y2+Wf8PPGxZgTDN4pHXww=="
+    },
     "vm-browserify": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz",

+ 1 - 0
houtai/package.json

@@ -20,6 +20,7 @@
     "vue": "^2.6.11",
     "vue-json-excel": "^0.3.0",
     "vue-router": "^3.2.0",
+    "v-viewer": "^1.6.4",
     "wangeditor": "^4.7.11"
   },
   "devDependencies": {

+ 3 - 3
houtai/src/apis/login.js

@@ -3,7 +3,7 @@ import axios from '../utils/request'
 export const userLogin = (data) => {
   return axios({
     method: 'post',
-    url: '/api/admin/login',
+    url: 'admin/login',
     data
   })
 }
@@ -11,7 +11,7 @@ export const userLogin = (data) => {
 export const updatePwd = (data) => {
   return axios({
     method: 'post',
-    url: '/api/sys/user/updatePwd',
+    url: 'sys/user/updatePwd',
     data
   })
 }
@@ -20,7 +20,7 @@ export const updatePwd = (data) => {
 export const sceneList = (data) => {
   return axios({
     method: 'post',
-    url: '/api/cms/scene/list',
+    url: 'cms/scene/list',
     data
   })
 }

+ 11 - 26
houtai/src/apis/tab2.js

@@ -3,35 +3,28 @@ import axios from '../utils/request'
 export const goodsList = (data) => {
   return axios({
     method: 'post',
-    url: '/api/cms/goods/list',
+    url: 'cms/share/list',
     data
   })
 }
 // 点击删除
 export const goodsRemove = (id) => {
   return axios({
-    url: `/api/cms/goods/remove/${id}`
+    url: `cms/share/remove/${id}`
   })
 }
-// 新增、编辑
-export const goodsSave = (data) => {
-  return axios({
-    method: 'post',
-    url: '/api/cms/goods/save',
-    data
-  })
-}
-// 是否显示
-export const goodsDisplay = (id, display) => {
+
+// 通过id获取详情
+export const goodsDetail = (id) => {
   return axios({
-    url: `/api/cms/goods/display/${id}/${display}`
+    url: `cms/share/detail/${id}`
   })
 }
 
-// 通过id获取详情
-export const goodsDetail = (id) => {
+// 审核status: 1:通过, 2:不通过
+export const shareAudit = (id, status) => {
   return axios({
-    url: `/api/cms/goods/detail/${id}`
+    url: `cms/share/audit/${id}/${status}`
   })
 }
 
@@ -39,7 +32,7 @@ export const goodsDetail = (id) => {
 export const logList = (data) => {
   return axios({
     method: 'post',
-    url: '/api/sys/log/list',
+    url: 'sys/log/list',
     data
   })
 }
@@ -48,15 +41,7 @@ export const logList = (data) => {
 export const dictGetTree = (data) => {
   return axios({
     method: 'post',
-    url: '/api/cms/dict/getTree',
-    data
-  })
-}
-
-// ------------------------------统计
-export const goodsReport = (data) => {
-  return axios({
-    url: '/api/cms/goods/report',
+    url: 'cms/dict/getTree',
     data
   })
 }

+ 31 - 0
houtai/src/assets/css/base.css

@@ -162,3 +162,34 @@ input[type="number"] {
 .el-message-box__title{
   color: #b9412e;
 }
+.viewer-toolbar {
+  display: none !important;
+}
+
+.viewer-title {
+  display: none !important;
+}
+
+.viewer-prev {
+  display: none !important;
+}
+
+.viewer-next {
+  display: none !important;
+}
+
+.viewer-navbar {
+  display: none !important;
+}
+
+.viewer-close {
+  display: none !important;
+}
+
+.viewer-rotate-left,
+.viewer-rotate-right,
+.viewer-flip-horizontal,
+.viewer-flip-vertical {
+  display: none !important;
+}
+

+ 4 - 3
houtai/src/main.js

@@ -3,10 +3,11 @@ import ElementUI from 'element-ui'
 import 'element-ui/lib/theme-chalk/index.css'
 import App from './App.vue'
 import router from './router'
-// 表格导出
-import JsonExcel from 'vue-json-excel'
+import 'viewerjs/dist/viewer.css'
+import Viewer from 'v-viewer'
+
 import './assets/css/base.css'
-Vue.component('downloadExcel', JsonExcel)
+Vue.use(Viewer)
 
 Vue.config.productionTip = false
 const imgErr = {

+ 2 - 1
houtai/src/utils/request.js

@@ -1,7 +1,8 @@
 import axios from 'axios'
 const service = axios.create({
   // baseURL: 'http://192.168.20.55:8032', // 本地调试
-  baseURL: process.env.NODE_ENV === 'development' ? 'https://hnbwg.4dage.com' : '',
+  baseURL: process.env.NODE_ENV === 'development' ? 'http://192.168.20.55:8037/api/' : '/api/',
+  // baseURL: process.env.NODE_ENV === 'development' ? 'https://hnbwg.4dage.com' : '',
   timeout: 5000
 })
 // 请求拦截器

+ 5 - 3
houtai/src/views/layout/index.vue

@@ -19,10 +19,10 @@
     <div class="con">
       <div class="left">
         <div
-          class="biaoji el-icon-message"
+          class="biaoji"
           :class="{ biaojiAc: $route.meta.myInd === 2 }"
         >
-          内容管理
+          建筑可对话
         </div>
         <ul>
           <li
@@ -36,6 +36,7 @@
         </ul>
 
         <div
+          v-show="0"
           class="biaoji el-icon-setting"
           :class="{ biaojiAc: $route.meta.myInd === 3 }"
         >
@@ -43,6 +44,7 @@
         </div>
         <ul>
           <li
+            v-show="0"
             v-for="item in tab2"
             :key="item.id"
             :class="{ active: $route.meta.myInd === item.id }"
@@ -124,7 +126,7 @@ export default {
       userName: '',
       cut: false,
       isShow: false,
-      tab1: [{ name: '建筑可对话-发布', id: 2, url: '/layout/tab2' }],
+      tab1: [{ name: '发布审核', id: 2, url: '/layout/tab2' }],
       tab2: [{ name: '操作日志', id: 3, url: '/layout/tab3' }]
     }
   },

+ 94 - 556
houtai/src/views/tab2/add.vue

@@ -1,267 +1,64 @@
 <!--  -->
 <template>
   <div class="tab2Add">
-    <div class="top">
-      典藏信息 > {{ ruleForm.type === "img" ? "精品图片" : "三维模型" }} >
-      {{ ruleForm.id ? "编辑" : "新增" }}
-    </div>
+    <div class="top">建筑可对话-发布审核</div>
     <div class="conten">
-      <el-form
-        :model="ruleForm"
-        ref="ruleForm"
-        label-width="120px"
-        class="demo-ruleForm"
-      >
-        <!-- 名称 -->
-        <div class="checkBox2">
-          <el-form-item label="名称:">
-            <i class="biaoshi biaoshi2"></i>
-            <el-input
-              v-model="ruleForm.name"
-              maxlength="10"
-              show-word-limit
-            ></el-input>
-          </el-form-item>
-          <!-- 总登记号 -->
-          <el-form-item label="总登记号:">
-            <el-input
-              v-model="ruleForm.registerNum"
-              maxlength="25"
-              show-word-limit
-            ></el-input>
-          </el-form-item>
-        </div>
-        <div class="checkBox">
-          <!-- 日期 -->
-          <el-form-item label="日期:">
-            <i class="biaoshi biaoshi2"></i>
-            <el-date-picker
-              format="yyyy-MM-dd"
-              value-format="yyyy-MM-dd"
-              v-model="day"
-              type="date"
-              placeholder="选择日期"
-            >
-            </el-date-picker>
-          </el-form-item>
-
-          <!-- 类型 -->
-          <el-form-item label="类别:">
-            <el-select
-              v-model="ruleForm.dictTextureId"
-              clearable
-              placeholder="请选择类别"
-            >
-              <el-option
-                v-for="i in dictTextureArr"
-                :key="i.value"
-                :label="i.label"
-                :value="i.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <!-- 年代 -->
-          <el-form-item label="年代:">
-            <el-cascader
-              ref="elCascader"
-              clearable
-              v-model="dictAgeId"
-              :options="options"
-            >
-            </el-cascader>
-          </el-form-item>
-          <!-- 级别 -->
-          <el-form-item label="级别:">
-            <el-select
-              v-model="ruleForm.dictLevelId"
-              clearable
-              placeholder="请选择级别"
-            >
-              <el-option
-                v-for="i in dictLevelArr"
-                :key="i.value"
-                :label="i.label"
-                :value="i.value"
-              >
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </div>
-        <!-- 尺寸 -->
-        <el-form-item label="尺寸:" class="sizeInput">
-          <el-input v-model="chang" maxlength="100" show-word-limit></el-input>
-        </el-form-item>
-
-        <!-- 图片 -->
-        <el-form-item label="图片:">
-          <i class="biaoshi biaoshi1"></i>
-          <el-upload
-            accept=".png,.jpg,.jpeg,.gif"
-            :data="{ type: 'img' }"
-            class="avatar-uploader"
-            :action="baseURL + '/api/cms/goods/upload'"
-            :headers="{ token }"
-            :show-file-list="true"
-            :before-upload="beforethumbUpload"
-            :on-success="upload_thumb_success"
+      <div class="row">
+        <div class="ll">标题:</div>
+        <div class="rr">{{ info.name }}</div>
+      </div>
+      <div class="row">
+        <div class="ll">正文:</div>
+        <div class="rr" v-html="info.description"></div>
+      </div>
+      <div class="row">
+        <div class="ll">话题:</div>
+        <div class="rr">{{ info.dictTopicName }}</div>
+      </div>
+      <div class="row">
+        <div class="ll">位置:</div>
+        <div class="rr">{{ info.positionName }}</div>
+      </div>
+      <div class="row">
+        <div class="ll">图片:</div>
+        <div class="rr img">
+          <div
+            @click="lookImg(baseURL + item.filePath)"
+            title="查看大图"
+            v-for="(item, index) in imgList"
+            :key="item.id"
           >
-            <div v-if="ruleForm.thumb" class="imgdiv">
-              <img
-                style="
-                  width: 150px;
-                  height: 150px;
-                  display: block;
-                  object-fit: cover;
-                "
-                :src="baseURL + ruleForm.thumb"
-              />
-              <i
-                class="el-icon-circle-close"
-                @click.stop="ruleForm.thumb = ''"
-              ></i>
-            </div>
-            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-          </el-upload>
-          <p class="upHint">
-            格式要求:支持png、jpg、gif和jpeg的图片格式;最大支持20MB。
-          </p>
-        </el-form-item>
-        <!-- 说明 -->
-        <el-form-item label="说明:">
-          <div class="txtBtn">
-            <el-button
-              :disabled="ruleForm.description.length >= 128"
-              size="small"
-              round
-              @click="ruleForm.description += '&emsp;&emsp;'"
-              >首行缩进</el-button
-            >
-            <el-button
-              :disabled="ruleForm.description.length >= 135"
-              size="small"
-              round
-              @click="ruleForm.description += '<br/>'"
-              >换行</el-button
-            >
+            <img :src="baseURL + item.filePath" alt="" />
+            <p v-show="index === 0">封 面</p>
           </div>
-          <el-input
-            type="textarea"
-            v-model="ruleForm.description"
-            maxlength="140"
-            show-word-limit
-          ></el-input>
-        </el-form-item>
-        <!-- 附件 -->
-        <div class="rowFrom">
-          <el-form-item label="模型文件:" v-if="ruleForm.type === 'model'">
-            <i class="biaoshi"></i>
-            <el-upload
-              accept=".4dage"
-              multiple
-              drag
-              class="upload-demo"
-              :data="{ type: 'model' }"
-              :file-list="fileList"
-              :action="baseURL + '/api/cms/goods/upload'"
-              :headers="{ token }"
-              :before-upload="beforeFujian"
-              :on-success="successFujian"
-              :before-remove="beforeRemove"
-              :on-remove="handleRemove"
-              :limit="1"
-              :on-exceed="handleExceed"
-              :show-file-list="true"
-            >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                将文件拖到此处,或<em>点击上传</em>
-              </div>
-              <div class="el-upload__text smEl">
-                仅支持.4dage格式的模型文件,大小不得超过500MB
-              </div>
-            </el-upload>
-          </el-form-item>
-          &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
-          <el-form-item label="音频文件:" v-if="ruleForm.type === 'model'">
-            <el-upload
-              accept=".mp3"
-              multiple
-              drag
-              class="upload-demo"
-              :data="{ type: 'audio' }"
-              :file-list="fileList2"
-              :action="baseURL + '/api/cms/goods/upload'"
-              :headers="{ token }"
-              :before-upload="beforeFujian2"
-              :on-success="successFujian2"
-              :before-remove="beforeRemove2"
-              :on-remove="handleRemove2"
-              :limit="1"
-              :on-exceed="handleExceed2"
-              :show-file-list="true"
-            >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                将文件拖到此处,或<em>点击上传</em>
-              </div>
-              <div class="el-upload__text smEl">
-                仅支持MP3格式的音频文件,大小不得超过10MB
-              </div>
-            </el-upload>
-          </el-form-item>
         </div>
-      </el-form>
+      </div>
     </div>
     <!-- 底部按钮 -->
     <div class="con_btn">
-      <el-button @click="goBack">取 消</el-button>&emsp;
-      <el-button type="primary" @click="saveGood">保 存</el-button>
+      <el-button @click="goBack">返 回</el-button>&emsp;
+      <el-button @click="saveGood(2)">不 通 过</el-button>&emsp;
+      <el-button type="primary" @click="saveGood(1)">通 过</el-button>
     </div>
+    <viewer class="viewerCla" ref="viewer" :images="lookPics">
+      <img :src="lookPics[0]" alt="" />
+    </viewer>
   </div>
 </template>
 
 <script>
-import { goodsSave, goodsDetail, dictGetTree } from '../../apis/tab2'
+import { goodsDetail, shareAudit } from '../../apis/tab2'
 import axios from '@/utils/request'
 export default {
   name: 'tab2Add',
   components: {},
   data () {
-    // 这里存放数据
     return {
-      // 日期
-      day: '',
-
+      info: {},
+      imgList: [],
       // 服务器前缀地址
       baseURL: '',
-      // 尺寸
-      chang: '',
-      // 年代
-      dictAgeId: [],
-      options: [],
-      // 类型数组
-      dictTextureArr: [],
-      // 级别数组
-      dictLevelArr: [],
-      ruleForm: {
-        // 总登记号
-        registerNum: '',
-        // 类别
-        dictTextureId: '',
-        // 级别
-        dictLevelId: '',
-        name: '',
-        type: null,
-        description: '',
-        thumb: '',
-        // 上传模型
-        filePath: '',
-        fileName: ''
-      },
-      fileList: [],
-      // ---------音频
-      fileList2: []
+      lookPics: []
     }
   },
   // 监听属性 类似于data概念
@@ -270,207 +67,39 @@ export default {
   watch: {},
   // 方法集合
   methods: {
+    // 点击查看大图
+    lookImg (url) {
+      const dom = this.$refs.viewer.$viewer
+      this.lookPics = [url]
+      dom.show()
+    },
     // 点击取消
     goBack () {
       let k = this.$route.query.k
       if (!k) k = '1'
       this.$router.push({
         path: '/layout/tab2',
-        query: { typeU: this.ruleForm.type, k }
+        query: { k }
       })
     },
-    // 点击保存
-    async saveGood () {
-      if (this.ruleForm.name.trim() === '') {
-        return this.$message.warning('名称不能为空')
-      }
-      if (this.ruleForm.thumb === '') {
-        return this.$message.warning('图片不能为空')
-      }
-      if (this.ruleForm.filePath === '' && this.ruleForm.type === 'model') {
-        return this.$message.warning('文件不能为空')
-      }
-      if (!this.day) return this.$message.warning('日期不能为空')
-      const obj = { ...this.ruleForm }
-      obj.day = this.day
-      // 年代数据判断
-      if (this.dictAgeId && this.dictAgeId[1]) {
-        obj.dictAgeId = this.dictAgeId[1]
-        // eslint-disable-next-line no-constant-condition
-        const tempArr = this.$refs.elCascader.getCheckedNodes()[0].pathLabels
-        obj.dictAgeFront = tempArr.join('/')
-      }
-      // 长宽高判断
-      if (this.chang) obj.sizeLength = this.chang
-      const res = await goodsSave(obj)
+    async saveGood (val) {
+      const res = await shareAudit(this.info.id, val)
       if (res.code === 0) {
         this.$message.success('操作成功')
         this.goBack()
       } else this.$message.warning(res.msg)
-    },
-    // 上传图片
-    beforethumbUpload (file) {
-      // console.log(998, file)
-      // 限制图片大小和格式
-      const sizeOk = file.size / 1024 / 1024 < 20
-      const typeOk =
-        file.type === 'image/png' ||
-        (file.type === 'image/jpeg' && !file.name.includes('.jfif')) ||
-        file.type === 'image/gif'
-
-      return new Promise((resolve, reject) => {
-        if (!typeOk) {
-          this.$message.error('图片格式有误!')
-          reject(file)
-        } else if (!sizeOk) {
-          this.$message.error('图片大小超过20M!')
-          reject(file)
-        } else {
-          resolve(file)
-        }
-      })
-    },
-    upload_thumb_success (data) {
-      this.$message.success('上传成功')
-      this.ruleForm.thumb = data.data.filePath
-    },
-    // 上传附件
-    beforeFujian (file) {
-      console.log('附件上传前', file)
-      const sizeOk = file.size / 1024 / 1024 < 500
-      const typeOk = file.type === '' && file.name.includes('.4dage')
-      return new Promise((resolve, reject) => {
-        if (!sizeOk) {
-          this.$message.error('模型大小超过500M!')
-          reject(file)
-        } else if (!typeOk) {
-          this.$message.error('模型格式有误!')
-          reject(file)
-        } else {
-          resolve(file)
-        }
-      })
-    },
-    successFujian (file) {
-      console.log('上传附件成功', file)
-      if (file.code === 0) {
-        this.ruleForm.filePath = file.data.filePath
-        this.ruleForm.fileName = file.data.fileName
-        this.$message.success('上传成功')
-      } else if (file.code === -1) {
-        this.$message.warning('上传失败,不支持的文件格式')
-      }
-    },
-    beforeRemove (file, fileList) {
-      if (file && file.status === 'success') {
-        return this.$confirm(`确定移除 ${file.name}?`)
-      }
-    },
-    handleRemove (file, fileList) {
-      this.ruleForm.filePath = ''
-      this.ruleForm.fileName = ''
-    },
-    handleExceed (files, fileList) {
-      this.$message.warning('只能上传一个文件,请删除原文件后操作')
-    },
-
-    // 上传音频-------------
-    beforeFujian2 (file) {
-      console.log('附件上传前222', file)
-      const sizeOk = file.size / 1024 / 1024 < 10
-      const typeOk = file.type === 'audio/mpeg'
-      return new Promise((resolve, reject) => {
-        if (!sizeOk) {
-          this.$message.error('音频大小超过10M!')
-          reject(file)
-        } else if (!typeOk) {
-          this.$message.error('音频格式有误!')
-          reject(file)
-        } else {
-          resolve(file)
-        }
-      })
-    },
-    successFujian2 (file) {
-      console.log('上传附件成功222', file)
-      if (file.code === 0) {
-        this.ruleForm.audioPath = file.data.filePath
-        this.ruleForm.audioName = file.data.fileName
-        this.$message.success('上传成功')
-      } else if (file.code === -1) {
-        this.$message.warning('上传失败,不支持的文件格式')
-      }
-    },
-    beforeRemove2 (file, fileList) {
-      if (file && file.status === 'success') {
-        return this.$confirm(`确定移除 ${file.name}?`)
-      }
-    },
-    handleRemove2 (file, fileList) {
-      this.ruleForm.audioPath = ''
-      this.ruleForm.audioName = ''
-    },
-    handleExceed2 (files, fileList) {
-      this.$message.warning('只能上传一个文件,请删除原文件后操作')
     }
   },
   // 生命周期 - 创建完成(可以访问当前this实例)
   async created () {
     // 获取服务器前缀地址
     this.baseURL = axios.defaults.baseURL
-    // 获取用户token
-    this.token = localStorage.getItem('HNBWY_token')
-    // 拿到路由跳转传过来的数据
-    this.ruleForm.type = this.$route.query.typeU
-
-    // 几个下拉框的数据
-    // --------年代
-    const res = await dictGetTree({ type: 'age' })
-    const temp = []
-    res.data.forEach((v, i) => {
-      temp.push({ value: v.id, label: v.name, children: [] })
-      v.children.forEach((p) => {
-        temp[i].children.push({ value: p.id, label: p.name })
-      })
-    })
-    this.options = [...temp]
-
-    // -------类别
-    const res2 = await dictGetTree({ type: 'texture' })
-    this.dictTextureArr = res2.data.map((v) => {
-      return { value: v.id, label: v.name }
-    })
-    // -------级别
-    const res3 = await dictGetTree({ type: 'level' })
-    this.dictLevelArr = res3.data.map((v) => {
-      return { value: v.id, label: v.name }
-    })
-
-    // 如果是编辑
     let id = this.$route.query.id
     if (id) {
       id = Number(id)
-      const resSon = await goodsDetail(id)
-      this.ruleForm = resSon.data
-      // 附件回显
-      this.fileList = [{ name: resSon.data.fileName }]
-      // 音频回显
-      if (resSon.data.audioName) {
-        this.fileList2 = [{ name: resSon.data.audioName }]
-      }
-
-      // 年代回显
-      if (resSon.data.dictAgeId) {
-        res.data.forEach((v) => {
-          v.children.forEach((p) => {
-            if (p.id === resSon.data.dictAgeId) this.dictAgeId = [v.id, p.id]
-          })
-        })
-      }
-      // 尺寸回显
-      this.chang = resSon.data.sizeLength
-      // 日期回显
-      this.day = resSon.data.day
+      const res = await goodsDetail(id)
+      this.info = res.data.entity
+      this.imgList = res.data.file
     }
   },
   // 生命周期 - 挂载完成(可以访问DOM元素)
@@ -488,19 +117,9 @@ export default {
 .tab2Add {
   width: 100%;
   height: 100%;
-
-  .rowFrom {
-    display: flex;
-
-    /deep/.el-upload-list {
-      width: 360px;
-    }
-
-    /deep/.el-upload-list li {
-      width: 360px !important;
-    }
+  .viewerCla img {
+    display: none;
   }
-
   .top {
     margin-top: -20px;
     height: 50px;
@@ -511,136 +130,55 @@ export default {
   }
 
   .conten {
-    padding-right: 300px;
-    padding-top: 20px;
-
-    .upHint {
-      position: absolute;
-      bottom: 40px;
-      left: 160px;
-    }
-
-    .avatar-uploader .el-upload {
-      border-radius: 6px;
-      cursor: pointer;
-      position: relative;
-      overflow: hidden;
-    }
-
-    .avatar-uploader .el-upload:hover {
-      border-color: #3e5eb3;
-    }
-
-    .avatar-uploader-icon {
-      border: 1px dashed #ccc;
-      font-size: 28px;
-      color: #8c939d;
-      width: 150px;
-      height: 150px;
-      line-height: 150px;
-      text-align: center;
-    }
-
-    .biaoshi1::before {
-      left: -64px;
-    }
-
-    .biaoshi2::before {
-      top: -11px;
-      left: -64px;
-    }
-
-    /deep/.el-form-item {
-      margin-bottom: 12px;
-    }
-
-    /deep/.el-textarea textarea {
-      margin-top: 10px;
-      height: 55px;
-      resize: none;
-    }
-
-    /deep/.el-textarea .el-input__count {
-      position: absolute;
-      bottom: -24px;
-      right: 4px;
-      background-color: transparent;
-      height: 30px;
-      line-height: 30px;
-    }
-
-    .smEl {
-      color: #ccc;
-      font-size: 12px;
-      margin-top: -15px;
+    max-height: 670px;
+    overflow-y: auto;
+    padding: 20px 50px 50px;
+    .row {
+      display: flex;
+      margin-bottom: 15px;
+      .ll {
+        width: 80px;
+        font-weight: 700;
+      }
+      .rr {
+        width: calc(100% - 100px);
+      }
+      .img {
+        display: flex;
+        flex-wrap: wrap;
+        & > div {
+          cursor: pointer;
+          width: 150px;
+          height: 150px;
+          margin: 0 18px 18px 0;
+          position: relative;
+          & > p {
+            position: absolute;
+            bottom: 0;
+            left: 0;
+            width: 100%;
+            height: 30px;
+            background-color: rgba(0, 0, 0, 0.6);
+            color: #fff;
+            text-align: center;
+            line-height: 30px;
+          }
+          & > img {
+            width: 150px;
+            height: 150px;
+            object-fit: cover;
+          }
+        }
+      }
     }
   }
-
   .con_btn {
     position: absolute;
-    bottom: 20px;
+    bottom: 10px;
     left: 50%;
     transform: translateX(-50%);
-  }
-
-  .txtBtn {
-    position: absolute;
-    top: -32px;
-    right: 4px;
-  }
-
-  /deep/.imgdiv .el-icon-circle-close {
-    font-size: 20px;
-  }
-
-  .checkBox {
     display: flex;
-  }
-
-  .checkBox2 {
-    width: 100%;
-    display: flex;
-
-    & > div {
-      width: 50%;
-    }
-  }
-
-  .fromSize {
-    /deep/.el-form-item__content {
-      display: flex;
-    }
-
-    /deep/.el-input {
-      width: 100px;
-    }
-
-    /deep/.el-input--suffix {
-      width: 90px;
-    }
-
-    /deep/.el-input__inner {
-      padding: 0 5px !important;
-    }
-
-    .sizeRow {
-      margin-right: 90px;
-    }
-
-    .sizeRow2 {
-      /deep/.el-input {
-        width: 110px;
-      }
-    }
-  }
-  .sizeInput{
-    /deep/input{
-      padding-right: 70px !important;
-    }
-  }
-
-  /deep/.el-upload-list {
-    margin-top: -12px;
+    justify-content: center;
   }
 }
 </style>

+ 37 - 19
houtai/src/views/tab2/index.vue

@@ -1,13 +1,15 @@
 <template>
   <div class="tab2">
-    <div class="insideTop">建筑可对话-发布</div>
+    <div class="insideTop">建筑可对话-发布列表</div>
     <div class="obstruct"></div>
     <div class="conten">
       <!-- 右侧主要内容 -->
       <div class="con_right" v-loading="loading">
         <div class="search">
           <span class="search_k">审核状态:</span>
-          <el-select v-model="formData.dictTextureId" placeholder="请选择">
+          <el-select v-model="status" placeholder="请选择">
+            <el-option label="全部" value=""> </el-option>
+            <el-option label="待审核" :value="0"> </el-option>
             <el-option label="通过" :value="1"> </el-option>
             <el-option label="不通过" :value="2"> </el-option>
           </el-select>
@@ -23,9 +25,8 @@
                 }}
               </template>
             </el-table-column>
-            <el-table-column label="标题" prop="name"> </el-table-column>
-            <el-table-column label="话题" prop="name"> </el-table-column>
-            <el-table-column label="位置" prop="name"> </el-table-column>
+            <el-table-column label="发布者名字" prop="nickName">
+            </el-table-column>
 
             <el-table-column label="封面图片" width="120">
               <template #default="{ row }">
@@ -37,17 +38,22 @@
                 />
               </template>
             </el-table-column>
-            <el-table-column prop="day" label="发布时间"> </el-table-column>
-            <el-table-column prop="day" label="审核状态"> </el-table-column>
+            <el-table-column prop="createTime" label="发布时间">
+            </el-table-column>
+            <el-table-column label="审核状态">
+              <template #default="{ row }">
+                {{ statusObj[row.status] }}
+              </template>
+            </el-table-column>
             <el-table-column label="操作">
               <template #default="{ row }">
-                <el-button type="text">审核</el-button>
+                <el-button type="text" @click="editGood(row.id)"
+                  >审核</el-button
+                >
                 <el-button
                   type="text"
                   style="color: #d9001b"
-                  :disabled="!!row.display"
                   @click="delGoods(row.id)"
-                  :class="{ disNo: row.display }"
                   >删除</el-button
                 >
               </template>
@@ -85,17 +91,20 @@ export default {
   data () {
     // 这里存放数据
     return {
+      statusObj: {
+        0: '待审核',
+        1: '通过',
+        2: '不通过'
+      },
       loading: false,
 
       baseURL: '',
       total: 0,
-
+      status: '',
       formData: {
-        startTime: '',
-        endTime: '',
+        status: '',
         pageNum: 1,
-        pageSize: 10,
-        dictTextureId: ''
+        pageSize: 10
       },
       tableData: []
     }
@@ -103,7 +112,12 @@ export default {
   // 监听属性 类似于data概念
   computed: {},
   // 监控data中的数据变化
-  watch: {},
+  watch: {
+    status (val) {
+      this.formData.status = val
+      this.goodsList(this.formData)
+    }
+  },
   // 方法集合
   methods: {
     // 分页器方法
@@ -118,6 +132,13 @@ export default {
       this.formData.pageSize = val
       this.goodsList(this.formData)
     },
+    // 点击审核文物
+    editGood (id) {
+      this.$router.push({
+        path: '/layout/tab2Add',
+        query: { id, k: this.formData.pageNum }
+      })
+    },
     // 点击删除
     delGoods (id) {
       this.$confirm('删除后,信息无法恢复,是否继续?', '提示', {
@@ -154,9 +175,6 @@ export default {
     this.baseURL = axios.defaults.baseURL
     // 判断是第一次进来还是修改或者新增或者查看后返回
     // 拿到路由跳转传过来的数据
-    if (this.$route.query.typeU) {
-      this.formData.type = this.$route.query.typeU
-    }
     const k = this.$route.query.k
     if (k) this.formData.pageNum = Number(k)
     this.goodsList(this.formData)

+ 3 - 2
yfyc/src/App.vue

@@ -3,7 +3,8 @@
     <Router-view />
     <!-- 发送接口出现的loading -->
     <div class="loadingApp">
-      <van-loading color="#1989fa" />
+      <van-loading color="#fff" size="24px" vertical>加载中...</van-loading>
+      <!-- <van-loading /> -->
     </div>
   </div>
 </template>
@@ -34,7 +35,7 @@ export default {
   overflow: hidden;
   .loadingApp {
     display: none;
-    background-color: rgba(0, 0, 0, 0.4);
+    background-color: rgba(0, 0, 0, 0.6);
     position: fixed;
     top: 0;
     left: 0;

+ 17 - 1
yfyc/src/api/interact.js

@@ -11,7 +11,7 @@ export const uploadImgAPI = (fd) => {
   return axios({
     method: 'post',
     url: 'cms/share/upload',
-    data:fd
+    data: fd
   })
 }
 
@@ -44,4 +44,20 @@ export const getLoctionAPI = () => {
     method: 'post',
     url: 'show/position/list',
   })
+}
+
+// 获取列表
+export const getListAPI = (data) => {
+  return axios({
+    method: 'post',
+    url: 'show/share/listPage',
+    data
+  })
+}
+
+// 根据id获取详情
+export const getInfoAPI = (id) => {
+  return axios({
+    url: `show/share/detail/${id}`,
+  })
 }

BIN
yfyc/src/assets/media/home.mp4


+ 1 - 1
yfyc/src/router/index.js

@@ -59,7 +59,7 @@ const routes = [{
   },
   // 悦·互动详情
   {
-    path: '/layout/interact/info',
+    path: '/layout/interact/info/:id',
     name: 'InteractInfo',
     meta: {
       myTitle: '建筑可对话详情'

+ 3 - 3
yfyc/src/utils/request.js

@@ -2,8 +2,8 @@ import axios from 'axios'
 import {
   Toast
 } from "vant";
-export const baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.20.55:8037/api' : '/api'
-//export const baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.20.55:8037/api' : '/api'
+export const baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.20.55:8037/api/' : '/api/'
+//export const baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.20.55:8037/api/' : '/api/'
 let axajInd = 0
 const service = axios.create({
   baseURL: baseURL,
@@ -34,7 +34,7 @@ service.interceptors.response.use(function (response) {
   // console.log('触发相应拦截器', response)
   // 对响应数据做点什么--response就是发送每个请求的返回值
   if (response.data.code === 5001 || response.data.code === 5002) {
-    Toast.fail('未登录,请先登录!')
+    Toast.fail('登录失效!')
     localStorage.removeItem('YFYC_token')
   }
   if (axajInd === 0) document.querySelector('.loadingApp').style.display = 'none'

+ 24 - 18
yfyc/src/views/Interact/components/InteractInfo.vue

@@ -4,13 +4,13 @@
     <div class="title">
       <van-swipe class="my-swipe" :autoplay="5000" indicator-color="white">
         <van-swipe-item
-          @click="lookImg(require(`@/assets/img/interact/1/row${i}.png`))"
-          v-for="i in 4"
-          :key="i"
+          @click="lookImg(baseURL+item.filePath)"
+          v-for="item in imgList"
+          :key="item.id"
         >
           <img
             class="bacImg"
-            v-lazy="require(`@/assets/img/interact/1/row${i}.png`)"
+            v-lazy="baseURL+item.filePath"
             alt=""
           />
         </van-swipe-item>
@@ -19,37 +19,38 @@
     <!-- 畅游芜湖 -->
     <div class="titLoc">
       <div class="ll">
-        <img src="../../../assets/img/interact/user.png" alt="" />
+        <img :src="info.avatarUrl" alt="" />
       </div>
       <div class="rr">
-        <h3>畅游芜湖</h3>
-        <p><van-icon name="location" />安徽省芜湖市镜湖区北京西路44号</p>
+        <h3>{{info.nickName}}</h3>
+        <p><van-icon name="location" />{{info.positionName}}</p>
       </div>
     </div>
     <!-- 文字内容 -->
     <div class="txt">
-      <h3>芜湖虾仔面</h3>
-      <p>
-        芜湖人最爱吃虾籽面,以前在困难时期,能吃上一碗虾籽面绝对是真正的奢侈享受,常有人在生病或生日时慨叹一句:“要是有碗虾籽面吃就好了。”而虾籽面成了人人能吃得起的平价小吃,但质量和细节一如既往的讲究,因此成为江城老百姓心中的代表美食,并且还入选了安徽省非物质文化遗产。
-      </p>
-      <p>
-        虾仔面是采用长江中青虾的籽,配以多种佐料,制成膏汤,再加手工揉制的小刀面,煮制而成。面有韧性,味极鲜美,营养价值高。
-      </p>
+      <h3>{{info.name}}</h3>
+      <div v-html="info.description"></div>
       <div class="lastInfo">
-        <div>#美食</div>
-        <p>2022.11.03 16:13</p>
+        <div>#{{info.dictTopicName}}</div>
+        <p>{{info.createTime}}</p>
       </div>
     </div>
   </div>
 </template>
 
 <script>
+import { baseURL } from "@/utils/request";
+import {getInfoAPI} from '@/api/interact'
 import { ImagePreview } from "vant";
 export default {
   name: "InteractInfo",
   components: {},
   data() {
-    return {};
+    return {
+      baseURL,
+      info:{},
+      imgList:[]
+    };
   },
   computed: {},
   watch: {},
@@ -61,7 +62,12 @@ export default {
       });
     },
   },
-  created() {},
+async  created() {
+    const id =this.$route.params.id
+    const res =await getInfoAPI(id)
+    this.info=res.data.entity
+    this.imgList=res.data.file
+  },
   mounted() {},
   beforeCreate() {}, //生命周期 - 创建之前
   beforeMount() {}, //生命周期 - 挂载之前

+ 1 - 1
yfyc/src/views/Interact/components/InteractIssue.vue

@@ -191,7 +191,7 @@ export default {
       const obj = {
         description: this.txt2
           .replaceAll("\n", "<br/>")
-          .replaceAll(" ", "&ensp;"),
+          .replaceAll(" ", "&emsp;"),
         positionId: this.locationInfo.id,
         dictTopicId: this.topic,
         fileIds: imgArr.join(","),

+ 43 - 27
yfyc/src/views/Interact/index.vue

@@ -15,28 +15,35 @@
     <!-- 精彩必体验 -->
     <div class="titleTit">精彩必体验</div>
     <div class="bsBox">
-      <div v-for="item in bsData" :key="item.id">{{ item.name }}</div>
+      <div
+        @click="bsInd = item.id"
+        :class="{ bsAc: bsInd === item.id }"
+        v-for="item in bsData"
+        :key="item.id"
+      >
+        {{ item.name }}
+      </div>
     </div>
     <!-- 主体内容 -->
     <div class="mainBoxNull" v-if="dataShow.length === 0">暂无内容</div>
     <div class="mainBox" v-else>
       <div
         class="row"
-        @click="$router.push('/layout/interact/info')"
+        @click="$router.push(`/layout/interact/info/${item.id}`)"
         v-for="item in dataShow"
         :key="item.id"
       >
         <img
-          v-lazy="require(`@/assets/img/interact/row${item.id}.png`)"
+          v-lazy="baseURL + item.thumb"
           alt=""
         />
         <div class="name">{{ item.name }}</div>
         <div class="author">
           <div class="author_ll">
-            <img src="../../assets/img/interact/user.png" alt="" />
-            <p>{{ item.author }}</p>
+            <img :src="item.avatarUrl" alt="" />
+            <p>{{ item.nickName }}</p>
           </div>
-          <div class="author_rr">{{ item.time }}</div>
+          <div class="author_rr">{{ item.createTime.slice(0,10) }}</div>
         </div>
       </div>
     </div>
@@ -52,34 +59,31 @@
 </template>
 
 <script>
-import { getCodeAPI, getDictAPI } from "@/api/interact.js";
+import { baseURL } from "@/utils/request";
+import { getCodeAPI, getDictAPI, getListAPI } from "@/api/interact.js";
 export default {
   components: {},
   data() {
     return {
+      baseURL,
       txt: "",
+      bsInd: null,
       bsData: [
         // { id: 1, name: "景点" },
         // { id: 2, name: "美食" },
         // { id: 3, name: "游玩" },
         // { id: 4, name: "酒店" },
       ],
-      spotData: [
-        {
-          id: 1,
-          name: "方特梦幻王国万圣夜方特梦幻王国万圣夜圣夜",
-          author: "王大锤王大锤王大锤王大锤王大锤",
-          time: "2022-11-16",
-        },
-        { id: 2, name: "芜湖老海关", author: "孔连顺", time: "2022-11-16" },
-        { id: 3, name: "中江塔", author: "子墨", time: "2022-11-16" },
-        { id: 4, name: "鸠兹古镇", author: "张本钰", time: "2022-11-16" },
-      ],
+
       dataShow: [],
     };
   },
   computed: {},
-  watch: {},
+  watch: {
+    bsInd() {
+      this.getListFu();
+    },
+  },
   methods: {
     // 封装获取用户code的方法
     getUserCode() {
@@ -106,28 +110,36 @@ export default {
       } else this.getUserCode();
     },
     searchFu() {
-      this.getList();
-    },
-    // 获取列表的方法
-    getList() {
-      if (this.txt.trim() === "") this.dataShow = this.spotData;
-      else
-        this.dataShow = this.spotData.filter((v) => v.name.includes(this.txt));
+      this.getListFu();
     },
+
     // 获取地址栏参数的方法
     getQueryCode() {
       return this.$route.query.code ? this.$route.query.code : "";
     },
+    // 封装一个获取列表的方法
+    async getListFu() {
+      const obj = {
+        dictTopicId: this.bsInd,
+        pageNum: 1,
+        pageSize: 9999,
+        searchKey: this.txt,
+      };
+      const res = await getListAPI(obj);
+      this.dataShow = res.data.records;
+    },
   },
   async created() {
     document.querySelector("#app").style.maxWidth = "500px";
 
-    this.getList();
+    this.getListFu();
 
     // 获取话题列表
     const res1 = await getDictAPI("topic");
     this.bsData = res1.data;
+    this.bsData.unshift({id:null,name:'全部'})
 
+    
     let code = this.getQueryCode();
     if (code) {
       let res = await getCodeAPI(code);
@@ -241,6 +253,10 @@ export default {
       font-size: 12px;
       color: #333333;
     }
+    .bsAc {
+      background-color: #333333;
+      color: #f4f4f4;
+    }
   }
   .mainBoxNull {
     width: 100%;