stjdydayou 4 سال پیش
والد
کامیت
760c417cd5

+ 4 - 4
src/api/base/category_extend_column.js

@@ -2,7 +2,7 @@ import request from '@/utils/request'
 
 export function findPage(data) {
   return request({
-    url: '/category/base/extend/column/findPage',
+    url: '/bz/data/type/extend/column/findPage',
     method: 'post',
     data
   })
@@ -10,7 +10,7 @@ export function findPage(data) {
 
 export function save(data) {
   return request({
-    url: '/category/base/extend/column/save',
+    url: '/bz/data/type/extend/column/save',
     method: 'post',
     data
   })
@@ -18,7 +18,7 @@ export function save(data) {
 
 export function updateById(id, data) {
   return request({
-    url: '/category/base/extend/column/updateById',
+    url: '/bz/data/type/extend/column/updateById',
     method: 'post',
     params: { id },
     data
@@ -27,7 +27,7 @@ export function updateById(id, data) {
 
 export function deleteByIds(ids) {
   return request({
-    url: '/category/base/extend/column/deleteByIds',
+    url: '/bz/data/type/extend/column/deleteByIds',
     method: 'post',
     data: ids
   })

+ 49 - 0
src/api/base/data_info.js

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

+ 4 - 4
src/api/base/category.js → src/api/base/data_type.js

@@ -2,7 +2,7 @@ import request from '@/utils/request'
 
 export function findPage(data) {
   return request({
-    url: '/category/base/findPage',
+    url: '/bz/data/type/findPage',
     method: 'post',
     data
   })
@@ -10,7 +10,7 @@ export function findPage(data) {
 
 export function save(data) {
   return request({
-    url: '/category/base/save',
+    url: '/bz/data/type/save',
     method: 'post',
     data
   })
@@ -18,7 +18,7 @@ export function save(data) {
 
 export function updateById(id, data) {
   return request({
-    url: '/category/base/updateById',
+    url: '/bz/data/type/updateById',
     method: 'post',
     params: { id },
     data
@@ -27,7 +27,7 @@ export function updateById(id, data) {
 
 export function deleteByIds(ids) {
   return request({
-    url: '/category/base/deleteByIds',
+    url: '/bz/data/type/deleteByIds',
     method: 'post',
     data: ids
   })

+ 84 - 0
src/components/ExtendColumn.vue

@@ -0,0 +1,84 @@
+<template>
+  <div>
+    <el-input
+      v-if="extendColumnInfo.fieldType==='string'"
+      v-model="extendColumnInfo.fieldValue"
+    />
+    <el-input-number
+      v-if="extendColumnInfo.fieldType==='number'"
+      v-model="extendColumnInfo.fieldValue"
+      :min="0"
+    />
+    <el-switch
+      v-if="extendColumnInfo.fieldType==='bool'"
+      v-model="extendColumnInfo.fieldValue"
+      active-color="#13ce66"
+      inactive-color="#ff4949"
+    />
+    <el-input
+      v-if="extendColumnInfo.fieldType==='bstring'"
+      v-model="extendColumnInfo.fieldValue"
+      type="textarea"
+    />
+    <template v-if="extendColumnInfo.fieldType==='radio' && extendColumnInfo.defaultValue">
+      <el-radio
+        v-for="item in extendColumnInfo.defaultValue.split(',')"
+        :key="item"
+        v-model="extendColumnInfo.fieldValue"
+        :label="item"
+      >
+        {{ item }}
+      </el-radio>
+    </template>
+    <template v-if="extendColumnInfo.fieldType==='checkbox' && extendColumnInfo.defaultValue">
+      <el-checkbox-group v-model="extendColumnInfo.fieldValue">
+        <el-checkbox
+          v-for="item in extendColumnInfo.defaultValue.split(',')"
+          :key="item"
+          :label="item"
+          :value="item"
+        />
+      </el-checkbox-group>
+    </template>
+
+    <template v-if="extendColumnInfo.fieldType==='select' && extendColumnInfo.defaultValue">
+      <el-select v-model="extendColumnInfo.fieldValue" placeholder="请选择">
+        <el-option
+          v-for="item in extendColumnInfo.defaultValue.split(',')"
+          :key="item"
+          :label="item"
+          :value="item"
+        />
+      </el-select>
+    </template>
+  </div>
+</template>
+
+<script>
+
+export default {
+  props: {
+    extendColumnInfo: {
+      type: Object,
+      default: function() {
+        return {}
+      }
+    },
+    form: {
+      type: Object,
+      default: function() {
+        return {}
+      }
+    }
+  },
+  data() {
+    return {}
+  },
+  created() {
+
+  },
+  mounted() {
+  },
+  methods: {}
+}
+</script>

+ 4 - 2
src/components/TencentMap.vue

@@ -1,5 +1,5 @@
 <template>
-  <div :id="id" :style="{'height':height+'px','width':'100%'}" />
+  <div :id="id" :style="{'height':height+'px','width':'100%'}"/>
 </template>
 
 <script>
@@ -43,9 +43,11 @@ export default {
   mounted() {
     const _this = this
 
-    const config = { zoom: 12 }
+    const config = { zoom: 14 }
     if (_this.position && _this.position.length > 0 && _this.position[0]) {
       config.center = new TMap.LatLng(_this.position[0], _this.position[1])
+    } else {
+      config.center = new TMap.LatLng(24.655554, 109.248488)
     }
 
     _this.map = new TMap.Map(_this.id, config)

+ 9 - 9
src/router/index.js

@@ -87,23 +87,23 @@ export const asyncRoutes = [
     component: Layout,
     name: 'bz',
     meta: {
-      title: '基础数据资源管理',
+      title: '文旅场所管理',
       icon: 'el-icon-receiving',
-      authorities: ['category.base.find']
+      authorities: ['bz.data.type.find']
     },
-    redirect: '/base',
+    redirect: '/bz/data',
     children: [
       {
-        path: 'category',
-        name: 'BaseCategory',
+        path: 'type',
+        name: 'BzDataType',
         component: () => import('@/views/base/category'),
-        meta: { title: '分类管理', authorities: ['category.base.find'] }
+        meta: { title: '分类管理', authorities: ['bz.data.type.find'] }
       },
       {
-        path: 'info',
+        path: 'baseInfo',
         name: 'BzBaseInfo',
-        component: () => import('@/views/bz/base/venue/index'),
-        meta: { title: '基础数据管理', authorities: ['bz.base.venue.find'] }
+        component: () => import('@/views/base/baseInfo'),
+        meta: { title: '基础数据管理', authorities: ['bz.data.info.find'] }
       },
       {
         path: 'venue',

+ 172 - 0
src/views/base/baseInfo/DialogForm.vue

@@ -0,0 +1,172 @@
+<template>
+  <el-dialog
+    v-if="visible"
+    :title="form.id?'编辑场馆':'新建场馆'"
+    :visible.sync="visible"
+  >
+    <el-form v-loading="isLoading" :model="form" label-width="100px" label-position="top">
+      <el-tabs v-model="activeTabPaneName">
+        <el-tab-pane label="基本信息" name="base">
+          <el-row :gutter="16">
+            <el-col :span="12">
+              <el-form-item label="场所类型">
+                <el-select v-model="form.dataTypeId" placeholder="请选择场所类型" clearable @change="changeDataType">
+                  <el-option v-for="item in listDataType" :key="item.id" :label="item.name" :value="item.id"/>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="场所名称">
+                <el-input v-model="form.name"/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <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-tab-pane>
+        <el-tab-pane label="扩展信息" name="extend">
+          <el-form-item v-for="item in listExtendColumn" :key="item.id" :label="item.fieldLabel">
+            <extend-column :extend-column-info="item" :form="form"/>
+          </el-form-item>
+          <el-form-item label="简介">
+            <el-input v-model="form.brief" type="textarea" rows="10"/>
+          </el-form-item>
+        </el-tab-pane>
+        <el-tab-pane label="图片" name="image">
+          <el-form-item label="图片">
+            <el-upload
+              :file-list="fileList"
+              action="#"
+              list-type="picture-card"
+              name="fileData"
+              :http-request="uploaderHandle"
+              :on-success="uploadSuccess"
+              :on-remove="handleRemove"
+              :auto-upload="true"
+            >
+              <i slot="default" class="el-icon-plus"/>
+            </el-upload>
+          </el-form-item>
+        </el-tab-pane>
+        <el-tab-pane label="地图标记" name="map">
+          <tencent-map v-if="activeTabPaneName==='map'" id="amapcontainer" :position="[lat,lng]" @click="mapClick"/>
+        </el-tab-pane>
+      </el-tabs>
+    </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 { save, updateById } from '@/api/base/data_info'
+import TencentMap from '@/components/TencentMap'
+import { findAllDataType, findDataTypeExtendColumn } from '@/api/base/data_info'
+import ExtendColumn from '@/components/ExtendColumn'
+
+export default {
+  components: { TencentMap, ExtendColumn },
+  data() {
+    return {
+      activeTabPaneName: 'base',
+      visible: false,
+      isLoading: false,
+      listDataType: [],
+      listExtendColumn: [],
+      form: {
+        checkbox: []
+      },
+      fileList: [],
+      lng: null,
+      lat: null
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    uploaderHandle,
+    handleRemove(file, fileList) {
+      this.fileList = fileList
+    },
+    uploadSuccess(res, file, fileList) {
+      file.url = res.url
+      this.fileList = fileList
+    },
+    changeDataType(dataTypeId) {
+      console.log(dataTypeId)
+      findDataTypeExtendColumn(dataTypeId).then(listExtendColumn => {
+        listExtendColumn.forEach(v => {
+          v.fieldType = v.fieldType.name
+        })
+        this.listExtendColumn = listExtendColumn
+      })
+    },
+    open(data) {
+      this.visible = true
+      this.isLoading = false
+      this.fileList = []
+      this.form = {}
+      findAllDataType().then(listDataType => {
+        this.listDataType = listDataType
+      })
+      // if (data && data.id) {
+      //   if (data.litpics) {
+      //     data.litpics.forEach(o => {
+      //       this.fileList.push({ url: o })
+      //     })
+      //   }
+      //
+      //   this.lng = data?.lng
+      //   this.lat = data?.lat
+      //
+      //   this.form = Object.assign({}, data)
+      // }
+    },
+    mapClick(e) {
+      this.lng = e.latLng.lng
+      this.lat = e.latLng.lat
+    },
+    handleSubmit() {
+      const litpics = []
+      this.fileList.forEach(o => {
+        litpics.push(o.url)
+      })
+      const param = { ...this.form, listExtends: this.listExtendColumn, lng: this.lng, lat: this.lat, litpics }
+
+      console.log(param.listExtends)
+      if (this.form.id) {
+        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>

+ 116 - 0
src/views/base/baseInfo/index.vue

@@ -0,0 +1,116 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryForm" inline size="small">
+      <el-form-item label="关键词">
+        <el-input v-model="queryForm.keyword" 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.data.info.add']" size="small" @click.native="$refs.dialogForm.open({})">
+          新建
+        </el-button>
+        <el-button v-permission="['bz.data.info.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
+          删除
+        </el-button>
+      </el-button-group>
+    </el-row>
+    <el-table
+      v-loading="isLoading"
+      :data="pageData.records"
+      border
+      fit
+      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="baseDataInfo.name" />
+      <el-table-column label="开放时间" prop="businessHours" />
+      <el-table-column label="缩略图" width="80">
+        <template slot-scope="scope">
+          {{ scope.row.baseDataInfo.litpics.length }}张
+        </template>
+      </el-table-column>
+      <!--      <el-table-column label="简介" prop="baseDataInfo.brief"/>-->
+      <el-table-column label="地址" prop="baseDataInfo.address" />
+      <el-table-column label="联系人" prop="baseDataInfo.contacts" width="150" />
+      <el-table-column label="联系电话" prop="baseDataInfo.contactNumber" width="150" />
+      <el-table-column label="位置信息" width="200">
+        <template slot-scope="scope">
+          [ {{ scope.row.baseDataInfo.lng }}, {{ scope.row.baseDataInfo.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"
+      background
+      layout="prev, pager, next"
+      :total="pageData.total"
+      :page-size="pageData.pageSize"
+      @current-change="paginationChange"
+    />
+    <dialog-form ref="dialogForm" @ok="fetchData" />
+  </div>
+</template>
+
+<script>
+import { deleteByIds, findPage } from '@/api/bz/base/venue'
+import { dateTimeFormatter } from '@/utils/formater'
+import DialogForm from './DialogForm'
+
+export default {
+  components: { DialogForm },
+  data() {
+    return {
+      queryForm: {},
+      isLoading: true,
+      pageData: {},
+      currentPage: 1,
+      multipleSelection: []
+    }
+  },
+  created() {
+    this.fetchData()
+  },
+  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
+      findPage({ ...this.queryForm, current: this.currentPage })
+        .then((response) => {
+          this.pageData = response
+        })
+        .finally(() => (this.isLoading = false))
+    }
+  }
+}
+</script>

+ 1 - 1
src/views/base/category/DialogForm.vue

@@ -39,7 +39,7 @@
 
 <script>
 
-import { save, updateById } from '@/api/base/category'
+import { save, updateById } from '@/api/base/data_type'
 
 export default {
   data() {

+ 5 - 5
src/views/base/category/ExtendColumnDialogForm.vue

@@ -56,27 +56,27 @@ export default {
       visible: false,
       isLoading: false,
       form: {},
-      categoryId: null
+      dataTypeId: null
     }
   },
   mounted() {
   },
   methods: {
-    open(data, categoryId) {
+    open(data, dataTypeId) {
       this.visible = true
       this.isLoading = false
       this.form = {}
-      console.log(data, categoryId)
+      console.log(data, dataTypeId)
       this.form = Object.assign({}, data)
       if (this.form.fieldType) {
         this.form.fieldType = this.form.fieldType.name
       }
-      this.categoryId = categoryId
+      this.dataTypeId = dataTypeId
     },
     handleSubmit() {
       const param = {
         ...this.form,
-        'categoryId': this.categoryId
+        'dataTypeId': this.dataTypeId
       }
       if ((!param.defaultValue || param.defaultValue === '') && (param.fieldType === 'radio' || param.fieldType === 'checkbox' || param.fieldType === 'select')) {
         Message({

+ 3 - 3
src/views/base/category/ExtendColumnIndex.vue

@@ -17,10 +17,10 @@
     <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="['category.base.extend.column']" size="small" @click.native="$refs.extendColumnDialogForm.open({},baseInfo.id)">
+        <el-button v-permission="['bz.data.type.extend.column']" size="small" @click.native="$refs.extendColumnDialogForm.open({},baseInfo.id)">
           新建
         </el-button>
-        <el-button v-permission="['category.base.extend.column']" size="small" @click.native="deleteByIds(multipleSelection)">
+        <el-button v-permission="['bz.data.type.extend.column']" size="small" @click.native="deleteByIds(multipleSelection)">
           删除
         </el-button>
       </el-button-group>
@@ -40,7 +40,7 @@
       <el-table-column label="默认值" prop="defaultValue" min-width="300"/>
       <el-table-column label="操作" width="80" fixed="right">
         <template slot-scope="scope">
-          <el-button v-permission="['category.base.extend.column']" type="text" @click.native="$refs.extendColumnDialogForm.open(scope.row)">编辑</el-button>
+          <el-button v-permission="['bz.data.type.extend.column']" type="text" @click.native="$refs.extendColumnDialogForm.open(scope.row)">编辑</el-button>
         </template>
       </el-table-column>
     </el-table>

+ 5 - 5
src/views/base/category/index.vue

@@ -9,10 +9,10 @@
     <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="['category.base.add']" size="small" @click.native="$refs.dialogForm.open({})">
+        <el-button v-permission="['bz.data.type.add']" size="small" @click.native="$refs.dialogForm.open({})">
           新建
         </el-button>
-        <el-button v-permission="['category.base.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
+        <el-button v-permission="['bz.data.type.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
           删除
         </el-button>
       </el-button-group>
@@ -33,8 +33,8 @@
       <el-table-column label="创建时间" prop="createdTime" :formatter="dateTimeFormatter" width="180"/>
       <el-table-column label="操作" width="150" fixed="right">
         <template slot-scope="scope">
-          <el-button v-permission="['category.base.edit']" type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-button>
-          <el-button v-permission="['category.base.extend.column']" type="text" @click.native="$refs.extendColumnIndex.open(scope.row)">扩展字段</el-button>
+          <el-button v-permission="['bz.data.type.edit']" type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-button>
+          <el-button v-permission="['bz.data.type.extend.column']" type="text" @click.native="$refs.extendColumnIndex.open(scope.row)">扩展字段</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -52,7 +52,7 @@
 </template>
 
 <script>
-import { deleteByIds, findPage } from '@/api/base/category'
+import { deleteByIds, findPage } from '@/api/base/data_type'
 import { dateTimeFormatter } from '@/utils/formater'
 import DialogForm from './DialogForm'
 import ExtendColumnIndex from './ExtendColumnIndex'