stjdydayou 4 年之前
父節點
當前提交
56905b779a

+ 34 - 0
src/api/bz/base/scenery.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+export function findPage(data) {
+  return request({
+    url: '/bz/base/scenery/findPage',
+    method: 'post',
+    data
+  })
+}
+
+export function save(data) {
+  return request({
+    url: '/bz/base/scenery/save',
+    method: 'post',
+    data
+  })
+}
+
+export function updateById(id, data) {
+  return request({
+    url: '/bz/base/scenery/updateById',
+    method: 'post',
+    params: { id },
+    data
+  })
+}
+
+export function deleteByIds(ids) {
+  return request({
+    url: '/bz/base/scenery/deleteByIds',
+    method: 'post',
+    data: ids
+  })
+}

+ 70 - 0
src/components/AMapMarker.vue

@@ -0,0 +1,70 @@
+<template>
+  <div :id="id" style="height: 500px"/>
+</template>
+
+<script>
+
+import AMapLoader from '@amap/amap-jsapi-loader'
+
+export default {
+  props: {
+    id: {
+      type: String,
+      default: 'container'
+    },
+    position: {
+      type: Array,
+      default: function() {
+        return []
+      }
+    }
+  },
+  data() {
+    return {
+      marker: null,
+      amap: null
+    }
+  },
+  created() {
+
+  },
+  mounted() {
+    const _this = this
+
+    AMapLoader.load({
+      key: '173fa0186964179b9c6f43d59f72172f',
+      version: '2.0',
+      plugins: ['AMap.ToolBar', 'AMap.Scale']
+    }).then((AMap) => {
+      const config = { zoom: 15 }
+      if (_this.position && _this.position.length > 0 && _this.position[0]) {
+        config.center = _this.position
+      }
+      console.log(config)
+      _this.amap = new AMap.Map(_this.id, config)
+
+      _this.amap.on('click', function(e) {
+        _this.$emit('click', e)
+        if (_this.marker) {
+          _this.marker.setPosition([e.lnglat.lng, e.lnglat.lat])
+        } else {
+          _this.marker = new AMap.Marker({
+            position: [e.lnglat.lng, e.lnglat.lat],
+            clickable: true,
+            map: _this.amap
+          })
+        }
+      })
+
+      if (_this.position && _this.position.length > 0 && _this.position[0]) {
+        _this.marker = new AMap.Marker({
+          position: _this.position,
+          clickable: true,
+          map: _this.amap
+        })
+      }
+    })
+  },
+  methods: {}
+}
+</script>

+ 156 - 0
src/views/bz/base/scenery/DialogForm.vue

@@ -0,0 +1,156 @@
+<template>
+  <el-dialog
+    v-if="visible"
+    :title="form.id?'编辑场馆':'新建场馆'"
+    :visible.sync="visible"
+    width="900px"
+  >
+    <el-form v-loading="isLoading" :model="form" label-width="100px">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="名称">
+            <el-input v-model="form.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="开放时间">
+            <el-input v-model="form.businessHours" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="图片">
+        <el-upload
+          :file-list="fileList"
+          action="#"
+          list-type="picture-card"
+          name="fileData"
+          :http-request="uploaderHandle"
+          :on-success="uploadSuccess"
+          :auto-upload="true"
+        >
+          <i slot="default" class="el-icon-plus" />
+        </el-upload>
+      </el-form-item>
+      <el-form-item label="地址">
+        <el-input v-model="form.address" />
+      </el-form-item>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="联系人">
+            <el-input v-model="form.contacts" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="联系电话">
+            <el-input v-model="form.contactNumber" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-form-item label="简介">
+        <el-input v-model="form.brief" type="textarea" rows="10" />
+      </el-form-item>
+
+      <div id="amapcontainer" style="width: 100%;height: 400px" />
+
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+
+import { uploaderHandle } from '@/api/upload'
+import AMapLoader from '@amap/amap-jsapi-loader'
+import { save, updateById } from '@/api/bz/base/venue'
+
+export default {
+  data() {
+    return {
+      visible: false,
+      isLoading: false,
+      listAllAuthorities: [],
+      form: {},
+      fileList: [],
+      map: null,
+      marker: null,
+      lng: null,
+      lat: null
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    uploaderHandle,
+    uploadSuccess(res, file, fileList) {
+      file.url = res.url
+      this.fileList = fileList
+    },
+    open(data) {
+      this.visible = true
+      this.isLoading = false
+      this.form = Object.assign({}, data)
+      this.initMap()
+    },
+    initMap() {
+      const _this = this
+      AMapLoader.load({
+        key: '173fa0186964179b9c6f43d59f72172f',
+        version: '2.0',
+        plugins: ['AMap.ToolBar', 'AMap.Scale']
+      }).then((AMap) => {
+        this.map = new AMap.Map('amapcontainer', {
+          zoom: 15
+        })
+
+        _this.map.on('click', function(e) {
+          _this.lng = e.lnglat.lng
+          _this.lat = e.lnglat.lat
+          if (_this.marker) {
+            _this.marker.setPosition([e.lnglat.lng, e.lnglat.lat])
+          } else {
+            _this.marker = new AMap.Marker({
+              position: [e.lnglat.lng, e.lnglat.lat],
+              clickable: true,
+              map: _this.map
+            })
+          }
+        })
+      }).catch(e => {
+        console.log(e)
+      })
+    },
+    handleSubmit() {
+      console.log(this.fileList)
+      console.log(this.lng)
+      console.log(this.lat)
+      console.log(this.form)
+      const litpics = []
+      this.fileList.forEach(o => {
+        litpics.push(o.url)
+      })
+      this.isLoading = true
+      const param = { ...this.form, lng: this.lng, lat: this.lat, litpics }
+      if (this.form.id) {
+        console.log(param)
+        updateById(this.form.id, param).then(() => {
+          this.visible = false
+          this.$emit('ok')
+        }).finally(() => {
+          this.isLoading = false
+        })
+      } else {
+        save(param).then(res => {
+          this.visible = false
+          this.$emit('ok')
+        }).finally(() => {
+          this.isLoading = false
+        })
+      }
+    }
+  }
+}
+</script>

+ 53 - 30
src/views/bz/base/scenery/index.vue

@@ -1,32 +1,24 @@
 <template>
   <div class="app-container">
     <el-form :model="queryForm" inline size="small">
-      <el-form-item label="AppKey">
-        <el-input v-model="queryForm.appKey" placeholder="AppKey" />
+      <el-form-item label="关键词">
+        <el-input v-model="queryForm.keyword" placeholder="关键词" />
       </el-form-item>
-      <el-form-item label="方法名">
-        <el-input v-model="queryForm.method" placeholder="方法名" />
-      </el-form-item>
-      <el-form-item label="版本号">
-        <el-input v-model="queryForm.version" placeholder="版本号" />
-      </el-form-item>
-      <el-form-item label="客户端IP">
-        <el-input v-model="queryForm.clientIp" placeholder="客户端IP" />
-      </el-form-item>
-      <el-form-item label="请求时间">
-        <el-date-picker
-          v-model="queryForm.serviceBeginTime"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-        />
+      <el-form-item label="联系电话">
+        <el-input v-model="queryForm.contactNumber" placeholder="联系电话" />
       </el-form-item>
 
     </el-form>
     <el-row class="action-bar-container" type="flex" justify="end">
       <el-button type="primary" size="small" @click.native="fetchData">查询</el-button>
+      <el-button-group>
+        <el-button v-permission="['bz.base.venue.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+        <el-button v-permission="['bz.base.venue.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
+          删除
+        </el-button>
+      </el-button-group>
     </el-row>
     <el-table
       v-loading="isLoading"
@@ -34,15 +26,25 @@
       border
       fit
       highlight-current-row
+      @selection-change="selectionChange"
     >
-      <el-table-column label="AppKey" prop="appKey" width="150" />
-      <el-table-column label="方法名" prop="method" width="150" />
-      <el-table-column label="版本号" prop="version" width="150" />
-      <el-table-column label="客户端IP" prop="clientIp" width="150" />
-      <el-table-column label="请求时间" prop="serviceBeginTime" :formatter="dateTimeFormatter" width="160" />
-      <el-table-column label="响应时间" prop="serviceEndTime" :formatter="dateTimeFormatter" width="160" />
-      <el-table-column label="请求参数" prop="requestBody" min-width="300" />
-      <el-table-column label="返回结果" prop="responseData" min-width="300" />
+      <el-table-column type="selection" width="55" />
+      <el-table-column label="ID" prop="id" width="150" />
+      <el-table-column label="名称" prop="name" />
+      <el-table-column label="缩略图">
+        <template slot-scope="scope">
+          {{ scope.row.litpics.length }}张
+        </template>
+      </el-table-column>
+      <el-table-column label="简介" prop="brief" />
+      <el-table-column label="地址" prop="address" />
+      <el-table-column label="联系人" prop="contacts" />
+      <el-table-column label="联系电话" prop="contactNumber" />
+      <el-table-column label="位置信息">
+        <template slot-scope="scope">
+          [ {{ scope.row.lng }}, {{ scope.row.lat }} ]
+        </template>
+      </el-table-column>
     </el-table>
     <el-pagination
       class="pagination-container"
@@ -52,14 +54,17 @@
       :page-size="pageData.pageSize"
       @current-change="paginationChange"
     />
+    <dialog-form ref="dialogForm" @ok="fetchData" />
   </div>
 </template>
 
 <script>
-import { findRequestLogsPage } from '@/api/appKey'
+import { findPage, deleteByIds } from '@/api/bz/base/scenery'
 import { dateTimeFormatter } from '@/utils/formater'
+import DialogForm from './DialogForm'
 
 export default {
+  components: { DialogForm },
   data() {
     return {
       queryForm: {},
@@ -74,13 +79,31 @@ export default {
   },
   methods: {
     dateTimeFormatter,
+    selectionChange(val) {
+      const temp = []
+      val.forEach(o => {
+        temp.push(o.id)
+      })
+      this.multipleSelection = temp
+    },
+    deleteByIds(ids) {
+      this.$confirm('确认要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deleteByIds(ids).then(() => {
+          this.fetchData()
+        })
+      })
+    },
     paginationChange(val) {
       this.currentPage = val
       this.fetchData()
     },
     fetchData() {
       this.isLoading = true
-      findRequestLogsPage({ ...this.queryForm, current: this.currentPage })
+      findPage({ ...this.queryForm, current: this.currentPage })
         .then((response) => {
           this.pageData = response
         })

+ 58 - 73
src/views/bz/base/venue/DialogForm.vue

@@ -3,56 +3,61 @@
     v-if="visible"
     :title="form.id?'编辑场馆':'新建场馆'"
     :visible.sync="visible"
-    width="900px"
+    width="1200px"
   >
-    <el-form v-loading="isLoading" :model="form" label-width="100px">
-      <el-row>
+    <el-form v-loading="isLoading" :model="form" label-width="100px" label-position="top">
+      <el-row :gutter="24">
         <el-col :span="12">
-          <el-form-item label="名称">
-            <el-input v-model="form.name" />
+          <el-row :gutter="24">
+            <el-col :span="12">
+              <el-form-item label="名称">
+                <el-input v-model="form.name"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="开放时间">
+                <el-input v-model="form.businessHours"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-form-item label="图片">
+            <el-upload
+              :file-list="fileList"
+              action="#"
+              list-type="picture-card"
+              name="fileData"
+              :http-request="uploaderHandle"
+              :on-success="uploadSuccess"
+              :auto-upload="true"
+            >
+              <i slot="default" class="el-icon-plus"/>
+            </el-upload>
           </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="开放时间">
-            <el-input v-model="form.businessHours" />
+          <el-form-item label="地址">
+            <el-input v-model="form.address"/>
           </el-form-item>
+          <el-row :gutter="24">
+            <el-col :span="12">
+              <el-form-item label="联系人">
+                <el-input v-model="form.contacts"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="联系电话">
+                <el-input v-model="form.contactNumber"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
         </el-col>
-      </el-row>
-      <el-form-item label="图片">
-        <el-upload
-          :file-list="fileList"
-          action="#"
-          list-type="picture-card"
-          name="fileData"
-          :http-request="uploaderHandle"
-          :on-success="uploadSuccess"
-          :auto-upload="true"
-        >
-          <i slot="default" class="el-icon-plus" />
-        </el-upload>
-      </el-form-item>
-      <el-form-item label="地址">
-        <el-input v-model="form.address" />
-      </el-form-item>
-      <el-row>
         <el-col :span="12">
-          <el-form-item label="联系人">
-            <el-input v-model="form.contacts" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="联系电话">
-            <el-input v-model="form.contactNumber" />
+          <el-form-item label="标注位置">
+            <a-map-marker id="amapcontainer" :position="[lng, lat]" @click="aMapClick"/>
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-form-item label="简介">
-        <el-input v-model="form.brief" type="textarea" rows="10" />
+        <el-input v-model="form.brief" type="textarea" rows="10"/>
       </el-form-item>
-
-      <div id="amapcontainer" style="width: 100%;height: 400px" />
-
     </el-form>
     <div slot="footer" class="dialog-footer">
       <el-button @click="visible = false">取 消</el-button>
@@ -64,10 +69,11 @@
 <script>
 
 import { uploaderHandle } from '@/api/upload'
-import AMapLoader from '@amap/amap-jsapi-loader'
+import AMapMarker from '@/components/AMapMarker'
 import { save, updateById } from '@/api/bz/base/venue'
 
 export default {
+  components: { AMapMarker },
   data() {
     return {
       visible: false,
@@ -92,42 +98,22 @@ export default {
     open(data) {
       this.visible = true
       this.isLoading = false
-      this.form = Object.assign({}, data)
-      this.initMap()
-    },
-    initMap() {
-      const _this = this
-      AMapLoader.load({
-        key: '173fa0186964179b9c6f43d59f72172f',
-        version: '2.0',
-        plugins: ['AMap.ToolBar', 'AMap.Scale']
-      }).then((AMap) => {
-        this.map = new AMap.Map('amapcontainer', {
-          zoom: 15
-        })
+      this.fileList = []
 
-        _this.map.on('click', function(e) {
-          _this.lng = e.lnglat.lng
-          _this.lat = e.lnglat.lat
-          if (_this.marker) {
-            _this.marker.setPosition([e.lnglat.lng, e.lnglat.lat])
-          } else {
-            _this.marker = new AMap.Marker({
-              position: [e.lnglat.lng, e.lnglat.lat],
-              clickable: true,
-              map: _this.map
-            })
-          }
+      if (data.litpics) {
+        data.litpics.forEach(o => {
+          this.fileList.push({ url: o })
         })
-      }).catch(e => {
-        console.log(e)
-      })
+      }
+      this.form = Object.assign({}, data)
+      this.lng = data.lng
+      this.lat = data.lat
+    },
+    aMapClick(e) {
+      this.lng = e.lnglat.lng
+      this.lat = e.lnglat.lat
     },
     handleSubmit() {
-      console.log(this.fileList)
-      console.log(this.lng)
-      console.log(this.lat)
-      console.log(this.form)
       const litpics = []
       this.fileList.forEach(o => {
         litpics.push(o.url)
@@ -135,7 +121,6 @@ export default {
       this.isLoading = true
       const param = { ...this.form, lng: this.lng, lat: this.lat, litpics }
       if (this.form.id) {
-        console.log(param)
         updateById(this.form.id, param).then(() => {
           this.visible = false
           this.$emit('ok')

+ 16 - 10
src/views/bz/base/venue/index.vue

@@ -2,10 +2,10 @@
   <div class="app-container">
     <el-form :model="queryForm" inline size="small">
       <el-form-item label="关键词">
-        <el-input v-model="queryForm.keyword" placeholder="关键词" />
+        <el-input v-model="queryForm.keyword" placeholder="关键词"/>
       </el-form-item>
       <el-form-item label="联系电话">
-        <el-input v-model="queryForm.contactNumber" placeholder="联系电话" />
+        <el-input v-model="queryForm.contactNumber" placeholder="联系电话"/>
       </el-form-item>
 
     </el-form>
@@ -28,23 +28,29 @@
       highlight-current-row
       @selection-change="selectionChange"
     >
-      <el-table-column type="selection" width="55" />
-      <el-table-column label="ID" prop="id" width="150" />
-      <el-table-column label="名称" prop="name" />
+      <el-table-column type="selection" width="55"/>
+      <el-table-column label="ID" prop="id" width="150"/>
+      <el-table-column label="名称" prop="name"/>
       <el-table-column label="缩略图">
         <template slot-scope="scope">
           {{ scope.row.litpics.length }}张
         </template>
       </el-table-column>
-      <el-table-column label="简介" prop="brief" />
-      <el-table-column label="地址" prop="address" />
-      <el-table-column label="联系人" prop="contacts" />
-      <el-table-column label="联系电话" prop="contactNumber" />
+      <el-table-column label="简介" prop="brief"/>
+      <el-table-column label="地址" prop="address"/>
+      <el-table-column label="联系人" prop="contacts"/>
+      <el-table-column label="联系电话" prop="contactNumber"/>
       <el-table-column label="位置信息">
         <template slot-scope="scope">
           [ {{ scope.row.lng }}, {{ scope.row.lat }} ]
         </template>
       </el-table-column>
+      <el-table-column label="操作" width="70" fixed="right">
+        <template slot-scope="scope">
+
+          <el-button v-permission="['app.key.edit']"  type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-button>
+        </template>
+      </el-table-column>
     </el-table>
     <el-pagination
       class="pagination-container"
@@ -54,7 +60,7 @@
       :page-size="pageData.pageSize"
       @current-change="paginationChange"
     />
-    <dialog-form ref="dialogForm" @ok="fetchData" />
+    <dialog-form ref="dialogForm" @ok="fetchData"/>
   </div>
 </template>