Quellcode durchsuchen

feat: 增加商品与代金券部分页面

Sun vor 3 Jahren
Ursprung
Commit
99ccee99fa

+ 44 - 0
src/api/business/coupon.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+export function getCouponList(urlParams, data) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/list',
+    method: 'post',
+    data,
+    urlParams
+  })
+}
+
+export function getCouponDetail(couponId) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/detail',
+    method: 'post',
+    data: {
+      couponId
+    }
+  })
+}
+
+export function addCoupon(data) {
+  return request({
+    url: `/api/v1/mp/admin/coupon/${data.couponId ? 'update' : 'create'}`,
+    method: 'post',
+    data
+  })
+}
+
+export function delCoupon(couponId) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/delete',
+    method: 'post',
+    data: { couponId }
+  })
+}
+
+export function setCouponStatus(data) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/status',
+    method: 'post',
+    data
+  })
+}

+ 44 - 0
src/api/business/goods.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+export function getGoodsList(urlParams, data) {
+  return request({
+    url: '/api/v1/mp/admin/goods/list',
+    method: 'post',
+    data,
+    urlParams
+  })
+}
+
+export function getGoodsDetail(goodsId) {
+  return request({
+    url: '/api/v1/mp/admin/goods/detail',
+    method: 'post',
+    data: {
+      goodsId
+    }
+  })
+}
+
+export function addGoods(data) {
+  return request({
+    url: `/api/v1/mp/admin/goods/${data.goodsId ? 'update' : 'create'}`,
+    method: 'post',
+    data
+  })
+}
+
+export function delGoods(goodsId) {
+  return request({
+    url: '/api/v1/mp/admin/goods/delete',
+    method: 'post',
+    data: { goodsId }
+  })
+}
+
+export function setGoodsStatus(data) {
+  return request({
+    url: '/api/v1/mp/admin/goods/status',
+    method: 'post',
+    data
+  })
+}

+ 107 - 0
src/views/business/coupon/add.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="app-container coupon-add">
+    <el-row>
+      <el-col :span="23">
+        <el-form ref="addItem" :model="addData" :rules="rules" label-width="160px">
+          <el-form-item label="代金券名称:" prop="title">
+            <el-input v-model="addData.title" placeholder="请输入代金券名称" :maxlength="32" show-word-limit />
+          </el-form-item>
+          <!-- <el-form-item label="主图:" prop="mainImg">
+            <Upload v-model="addData.mainImg" :accept="accept" :limit="isVideoMode? 1:3" :type="4"/>
+            <div class="tip" style="font-size: 12px;color: #777"> 可选上传3张图片 或 1个视频(限.mp4格式)。</div>
+          </el-form-item> -->
+          <el-form-item label="面值:" prop="discount">
+            <el-input v-model.number="addData.discount" type="number" placeholder="请输入代金券面值">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="门店默认承担比例:" prop="bili">
+            <el-input v-model.number="addData.amount" type="number" placeholder="请输入面值">
+              <template slot="append">%</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="最低消费金额:" prop="discount">
+            <el-input v-model.number="addData.discount" type="number" placeholder="请输入可使用的最低消费金额">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="有效期类型:" prop="contactTel">
+            <el-input v-model="addData.contactTel" placeholder="请输入有效期类型">
+              <template slot="prepend">领取之日起</template>
+              <template slot="append">天有效</template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="使用说明:" prop="detailAddress">
+            <el-input type="textarea" rows="4" v-model="addData.detailAddress" placeholder="使用说明仅用户可见"/>
+          </el-form-item>
+          <el-form-item label="使用范围:" prop="detailAddress">
+            <el-radio-group v-model="radio">
+              <el-radio :label="1">进票门店</el-radio>
+              <el-radio :label="2">所有盲票</el-radio>
+              <el-radio :label="3">制定盲票</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="23" style="text-align: right">
+        <el-button type="info" @click="$router.go(-1)">取消</el-button>
+        <el-button :loading="addIng" type="primary" @click="update()">保存</el-button>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+
+export default {
+  name: 'CouponAdd',
+  data() {
+    return {
+      id: this.$route.query.id,
+      addData: {},
+      addIng: false,
+      rules: {
+        title: [
+          { required: true, message: '请输入代金券名称', trigger: 'blur' }
+        ],
+      }
+    }
+  },
+  created() {
+    if (this.id) {
+      getCouponDetail(this.id).then(res => {
+        this.addData = res.data
+      })
+    }
+  },
+  methods: {
+    update() {
+      this.$refs.addItem.validate((valid, items) => {
+        if (valid) {
+          this.addIng = true
+          action(this.addData).then(res => {
+            this.addIng = false
+            if (res.code === 0) {
+              this.$message({
+                message: this.addData.id ? '修改成功!' : '添加成功!',
+                type: 'success'
+              })
+              this.$router.go(-1)
+            }
+          }).catch(() => {
+            this.addIng = false
+          })
+        } else {
+          if (items && Object.keys(items).length > 0) {
+            this.$message({
+              message: items[Object.keys(items)[0]][0].message,
+              type: 'warning'
+            })
+          }
+        }
+      })
+    }
+  }
+}
+</script>

+ 93 - 0
src/views/business/coupon/index.vue

@@ -0,0 +1,93 @@
+<template>
+  <div class="app-container coupon-list">
+    <el-form v-show="showSearch" :model="queryParams" ref="queryForm" :inline="true" size="small">
+      <el-form-item label="代金券名称" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入代金券名称"
+          clearable
+          @keyup.enter.native="queryParams.pageNum = 1;getList()"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择代金券状态" clearable>
+          <el-option label="上架" value="1" />
+          <el-option label="下架" value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="queryParams.pageNum = 1;getList()">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="getList(true)">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="10">
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="$router.push('/coupon/add')"
+          v-hasPermi="['business:coupon:add']"
+        >添加门店代金券</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table v-loading="loading" :data="tableData">
+      <el-table-column label="代金券ID" prop="id" min-width="70" />
+      <el-table-column label="代金券名称" prop="title" />
+      <el-table-column label="代金券金额" prop="amount" />
+      <el-table-column label="已领取数量" prop="quiety" />
+      <el-table-column label="有效期限" prop="lastMessageTime" />
+      <el-table-column label="状态" prop="status">
+        <template slot-scope="{row}">
+          {{ JSON.parse(row.status).desc }}
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" align="right" label="操作" width="120">
+        <template slot-scope="{row}">
+          <el-button type="text">查看</el-button>
+          <el-button type="text">下架</el-button>
+          <!-- <el-button type="text">门店承担比例</el-button> -->
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList()" />
+  </div>
+</template>
+<script>
+import { getCouponList } from '@/api/business/coupon'
+export default {
+  name: 'CouponList',
+  data() {
+    return {
+      loading: false,
+      showSearch: true,
+      queryParams: {},
+      total: 0
+    }
+  },
+  created() {
+    this.getList(true)
+  },
+  methods: {
+    getList(reset) {
+      if (this.loading) {
+        return
+      }
+      this.loading = true
+      if (reset) {
+        this.queryParams = { pageNum: 1, pageSize: 20 }
+      }
+      getCouponList('pageNum='+this.queryParams.pageNum + '&pageSize='+this.queryParams.pageSize+'&', this.queryParams).then(res => {
+        this.loading = false
+        if (res.code === 0) {
+          this.tableData = res.rows
+          this.total = res.total
+        }
+      }).catch(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>

+ 101 - 0
src/views/business/goods/index.vue

@@ -0,0 +1,101 @@
+<template>
+  <div class="app-container coupon-list">
+    <el-form v-show="showSearch" :model="queryParams" ref="queryForm" :inline="true" size="small">
+      <el-form-item label="商品名称" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入商品名称"
+          clearable
+          @keyup.enter.native="queryParams.pageNum = 1;getList()"
+        />
+      </el-form-item>
+      <el-form-item label="商品ID" prop="goodsId">
+        <el-input
+          v-model="queryParams.goodsId"
+          placeholder="请输入商品名称"
+          clearable
+          @keyup.enter.native="queryParams.pageNum = 1;getList()"
+        />
+      </el-form-item>
+      <el-form-item label="上架状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择商品状态" clearable>
+          <el-option label="上架" value="1" />
+          <el-option label="下架" value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="queryParams.pageNum = 1;getList()">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="getList(true)">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="10">
+        <el-button v-hasPermi="['business:goods:add']" type="primary" icon="el-icon-plus" size="mini" @click="$router.push('/goods/add')">添加商品</el-button>
+        <el-button v-hasPermi="['business:goods:on']" type="primary" plain size="mini">上架</el-button>
+        <el-button v-hasPermi="['business:goods:off']" type="primary" plain size="mini">下架</el-button>
+        <el-button v-hasPermi="['business:goods:remove']" type="danger" plain size="mini">删除</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+    <el-table v-loading="loading" :data="tableData">
+      <el-table-column label="商品ID" prop="id" min-width="70" />
+      <el-table-column label="商品图片" prop="title" />
+      <el-table-column label="商品名称" prop="title" />
+      <el-table-column label="价格" prop="amount" />
+      <el-table-column label="兑换盲豆" prop="quiety" />
+      <el-table-column label="销量" prop="lastMessageTime" />
+      <el-table-column label="库存" prop="lastMessageTime" />
+      <el-table-column label="状态" prop="status">
+        <template slot-scope="{row}">
+          {{ JSON.parse(row.status).desc }}
+        </template>
+      </el-table-column>
+      <el-table-column label="排序" prop="lastMessageTime" />
+      <el-table-column fixed="right" align="right" label="操作" width="140">
+        <template slot-scope="{row}">
+          <el-button v-hasPermi="['business:goods:query']" type="text">查看</el-button>
+          <el-button v-hasPermi="['business:goods:edit']" type="text">编辑</el-button>
+          <el-button v-hasPermi="['business:goods:off']" type="text">下架</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList()" />
+  </div>
+</template>
+<script>
+import { getGoodsList } from '@/api/business/goods'
+export default {
+  name: 'GoodsList',
+  data() {
+    return {
+      loading: false,
+      showSearch: true,
+      queryParams: {},
+      total: 0
+    }
+  },
+  created() {
+    this.getList(true)
+  },
+  methods: {
+    getList(reset) {
+      if (this.loading) {
+        return
+      }
+      this.loading = true
+      if (reset) {
+        this.queryParams = { pageNum: 1, pageSize: 20 }
+      }
+      getGoodsList('pageNum='+this.queryParams.pageNum + '&pageSize='+this.queryParams.pageSize+'&', this.queryParams).then(res => {
+        this.loading = false
+        if (res.code === 0) {
+          this.tableData = res.rows
+          this.total = res.total
+        }
+      }).catch(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>