Browse Source

管理后台-业务中心

panyong 3 years ago
parent
commit
f32c58cd66

+ 2 - 1
htmldev/manage/src/mixin/page.js

@@ -20,7 +20,8 @@ export default {
         }
       })
       this.tableLoading = true
-      const { code, data } = await this.$fetch('/api/auth' + this.tableUrl, {
+      const api = (/^\/v1/.test(this.tableUrl) ? '' : '/api/auth') + this.tableUrl
+      const { code, data } = await this.$fetch(api, {
         page: this.page,
         page_size: this.page_size,
         ...this.searchForm

+ 6 - 0
htmldev/manage/src/router/modules/business.js

@@ -7,6 +7,12 @@ const businessRouter = {
   meta: { title: '业务中心', icon: 'el-icon-s-shop' },
   redirect: 'noRedirect',
   children: [
+    {
+      path: 'outlet',
+      component: () => import('@/views/business/outlet/index'),
+      name: 'BusinessOutlet',
+      meta: { title: '门店管理', icon: 'el-icon-s-shop' }
+    },
     {
       path: 'place',
       component: () => import('@/views/business/place/index'),

+ 161 - 0
htmldev/manage/src/views/business/outlet/details.vue

@@ -0,0 +1,161 @@
+<template>
+  <div>
+    <el-dialog :title="exData.id ? '编辑': '新增'"
+               :visible.sync="dialog"
+               width="50%"
+               :close-on-click-modal="false"
+               top="50px">
+      <el-form ref="form"
+               :model="form"
+               label-width="140px">
+        <el-form-item label="门店名称:">
+          <el-input v-model="form.bar_name"
+                    placeholder="请输入门店名称"
+                    clearable></el-input>
+        </el-form-item>
+        <el-form-item label="门店地址:">
+          <el-input v-model="form.bar_address"
+                    placeholder="请输入门店地址"
+                    clearable></el-input>
+        </el-form-item>
+        <el-form-item label="门店图片:">
+          <el-upload :on-remove="handleRemove"
+                     :on-success="handleAvatarSuccess"
+                     :before-upload="beforeAvatarUpload"
+                     :accept="'image/*'"
+                     list-type="picture-card"
+                     action="/v1/upload/file"
+                     multiple>
+            <i class="el-icon-plus"></i>
+            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过5M</div>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="门店状态:">
+          <el-radio v-model="form.bar_status"
+                    label="1">有效
+            <el-radio v-model="form.bar_status"
+                      label="0">无效
+            </el-radio>
+          </el-radio>
+        </el-form-item>
+        <el-form-item label="点歌开始时间:">
+          <el-time-select placeholder="起始时间"
+                          v-model="form.bar_song_start_time"
+                          :picker-options="{start: '00:00', step: '00:05', end: '23:59'}">
+          </el-time-select>
+        </el-form-item>
+        <el-form-item label="点歌结束时间:">
+          <el-time-select placeholder="结束时间"
+                          v-model="form.bar_song_end_time"
+                          :picker-options="{start: '00:00', step: '00:05', end: '23:59', minTime: form.bar_song_start_time}">
+          </el-time-select>
+        </el-form-item>
+        <el-form-item label="座位预定开始时间:">
+          <el-time-select placeholder="起始时间"
+                          v-model="form.bar_place_reserve_start_time"
+                          :picker-options="{start: '00:00', step: '00:05', end: '23:59'}">
+          </el-time-select>
+        </el-form-item>
+        <el-form-item label="座位预定结束时间:">
+          <el-time-select placeholder="结束时间"
+                          v-model="form.bar_place_reserve_end_time"
+                          :picker-options="{start: '00:00', step: '00:05', end: '23:59', minTime: form.bar_place_reserve_start_time}">
+          </el-time-select>
+        </el-form-item>
+        <el-form-item label="备注">
+          <el-input
+            type="textarea"
+            :rows="4"
+            placeholder=""
+            v-model="form.note">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer text-center">
+        <el-button @click="dialog = false">取 消</el-button>
+        <el-button type="danger" @click="handleSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+    value: {
+      type: Boolean,
+      default: true
+    },
+    exData: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  data () {
+    return {
+      dialog: !!this.value,
+      form: {
+        bar_name: '', // 门店名称
+        bar_address: '', // 门店地址
+        bar_status: '1', // 门店状态(0无效1有效)
+        bar_song_start_time: '', // 点歌开始时间
+        bar_song_end_time: '', // 点歌结束时间
+        bar_place_reserve_start_time: '', // 座位预定开始时间
+        bar_place_reserve_end_time: '', // 座位预定结束时间
+        note: '' // 备注
+      },
+      bar_img_url: [] // 门店图片
+    }
+  },
+  methods: {
+    beforeAvatarUpload (file) {
+      const isLt2M = file.size / 1024 / 1024 < 5
+      if (!isLt2M) {
+        this.$message.error('上传图片大小不能超过 5MB!')
+      }
+      return isLt2M
+    },
+    handleRemove (file) {
+      const { path } = file.response.data
+      this.bar_img_url = this.bar_img_url.filter(item => item !== path)
+    },
+    handleAvatarSuccess (res) {
+      if (res.code === 200) {
+        const { path } = res.data
+        this.bar_img_url.push(path)
+      } else {
+        this.$message.error('图片上传失败')
+      }
+    },
+    async handleSubmit () {
+      let url = this.exData.id ? '/v1/bar/modify' : '/v1/bar/add'
+      const data = await this.$fetch(url, { ...this.form })
+      if (data.code === 200) {
+        this.$message.success('提交成功')
+        this.$emit('success')
+        this.dialog = false
+      }
+    }
+  },
+  mounted () {
+    if (this.exData.id) {
+      this.form.id = this.exData.id
+    }
+  },
+  watch: {
+    dialog (val) {
+      if (!val) this.$emit('input', val)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.top-tip {
+  margin-top: -20px;
+  margin-bottom: 20px;
+}
+</style>

+ 117 - 0
htmldev/manage/src/views/business/outlet/index.vue

@@ -0,0 +1,117 @@
+<template>
+  <div class="padding-20">
+    <div class="search-box">
+      <el-form ref="form" :inline="true" :model="searchForm" clearable label-width="100px" class="mt-10">
+        <el-form-item label="创建时间:">
+          <el-date-picker
+            :editable="false"
+            v-model="time"
+            @change="timearr => {timearr ? (searchForm.start_time = timearr[0] + ' 00:00:00', searchForm.end_time = timearr[1] + ' 23:59:59') : searchForm.start_time = searchForm.end_time = undefined}"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item label="部门名称:">
+          <el-input v-model="searchForm.department_name" placeholder="请输入部门名称" clearable></el-input>
+        </el-form-item>
+        <el-form-item class="ml-10">
+          <el-button icon="el-icon-search" type="primary" @click="searchSubmit">查询</el-button>
+        </el-form-item>
+        <el-form-item class="ml-10">
+          <el-button icon="el-icon-plus" type="primary" @click="add" v-permission="'department_list_add'">新增</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <el-table :data="tableData"
+              stripe
+              v-loading="tableLoading"
+              fit
+              class="marginT-10 order-table"
+              border
+              :max-height="vheight">
+      <el-table-column label="编号" prop="id"></el-table-column>
+      <el-table-column label="名称" prop="department_name"></el-table-column>
+      <el-table-column label="数量" prop="department_project_name"></el-table-column>
+      <el-table-column label="人数" prop="department_project_name"></el-table-column>
+      <el-table-column label="单价" prop="department_project_name"></el-table-column>
+      <el-table-column label="最晚保留时间(分钟)" prop="department_project_name"></el-table-column>
+      <el-table-column label="最晚到店时间" prop="department_desc"></el-table-column>
+      <el-table-column label="介绍" prop="department_desc"></el-table-column>
+      <el-table-column label="备注" prop="department_desc"></el-table-column>
+      <el-table-column label="操作">
+        <template slot-scope="scope">
+          <el-button type="text" @click="edit(scope.row)" v-permission="'department_list_edit'">编辑</el-button>
+          <el-button type="text" @click="del(scope.row)" v-permission="'department_list_del'">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      class="marginT-20"
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+      :hide-on-single-page="true"
+      :current-page="page"
+      :page-size="page_size"
+      :page-sizes="[10, 20, 100, 200, 300, 400]"
+      background
+      layout="total, sizes, prev, pager, next, jumper"
+      :total="totalCount"/>
+    <detail v-if="detailsDialog.show" v-model="detailsDialog.show" :exData="detailsDialog.exData"
+            @success="init"></detail>
+  </div>
+</template>
+
+<script>
+import page from '@/mixin/page'
+import detail from './details'
+
+export default {
+  mixins: [page],
+  components: {
+    detail,
+  },
+  data () {
+    return {
+      detailsDialog: {
+        show: false,
+        exData: {}
+      },
+      time: [],
+      searchForm: {},
+      tableData: [],
+      tableUrl: '/v1/bar/list'
+    }
+  },
+  methods: {
+    add () {
+      this.detailsDialog.exData = {}
+      this.detailsDialog.show = true
+    },
+    edit (row) {
+      this.detailsDialog.exData = row
+      this.detailsDialog.show = true
+    },
+    del (row) {
+      this.$confirm('确定要删除吗', '确认', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(async () => {
+        const data = await this.$fetch('/api/auth/department/del', { id: row.id })
+        if (data.code === 200) {
+          this.$message.success('删除成功')
+          this.init()
+        }
+      }).catch(() => {})
+    }
+  },
+  mounted () {
+    this.init()
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 7 - 0
htmldev/manage/vue.config.js

@@ -38,6 +38,13 @@ module.exports = {
         pathRewrite: {
           '^/api/auth': '/api/auth'
         }
+      },
+      '/v1': {
+        target: 'http://tingbang-admin.codedreamit.com/api/admin',
+        changeOrigin: true,
+        pathRewrite: {
+          '^/v1': '/v1'
+        }
       }
     }
   },