DELL 3 gadi atpakaļ
vecāks
revīzija
6d5d6db00f

+ 31 - 0
src/api/business/couponPkg.js

@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+//查询列表
+export function getCouponList(urlParams, data) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/pkg/list',
+    method: 'post',
+    data,
+    urlParams
+  })
+}
+
+//删除券包
+export function delCoupon(couponId) {
+  return request({
+    url: `/api/v1/mp/admin/coupon/pkg/delete/${couponId}`,
+    method: 'post',
+    headers: {
+      'Content-Type': 'application/x-www-form-urlencoded'
+    },
+  })
+}
+
+//上架下架
+export function setCouponStatus(data) {
+  return request({
+    url: '/api/v1/mp/admin/coupon/status',
+    method: 'post',
+    data
+  })
+}

+ 121 - 0
src/api/business/ticketPkg.js

@@ -0,0 +1,121 @@
+import request from '@/utils/request'
+
+// 优惠券列表
+export function getTicketList(urlParams, data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/list',
+    method: 'post',
+    data,
+    urlParams
+  })
+}
+
+// 步进器修改
+export function setListData(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/update/sortWeight',
+    method: 'post',
+    data
+  })
+}
+
+// 创建盲票组
+export function ticketBoxCreate(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/create',
+    method: 'post',
+    data
+  })
+}
+
+// 盲票组详情
+export function ticketBoxDetail(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/detail',
+    method: 'post',
+    data
+  })
+}
+
+//
+export function urlschemaGeneratee(data) {
+  return request({
+    url: '/api/v1/mp/wx/urlschema/generate',
+    method: 'post',
+    data
+  })
+}
+
+// 盲票组导出
+export function exportTicket(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/export',
+    method: 'post',
+    timeout: 15 * 60 * 1000,
+    data
+  })
+}
+
+// 导出印刷
+export function exportDraw(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/exportDraw',
+    method: 'post',
+    timeout: 15 * 60 * 1000,
+    data
+  })
+}
+
+// 下载批量导入模板
+export function importTemplate(){
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/importTemplate',
+    method: 'get'
+  })
+}
+
+
+// 批量导入
+export function importTicket(data, config = {}){
+  var formData  = new FormData()
+  Object.keys(data).forEach(key => {
+    formData.append(key, data[key])
+  })
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/importTicket',
+    method: 'post',
+    data: formData ,
+    ...config,
+    headers: {
+      'Content-Type': 'multipart/form-data'
+    }
+  })
+}
+
+// 上架、下架
+export function ticketBoxPut(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/put',
+    method: 'post',
+    data
+  })
+}
+
+// 删除
+export function ticketBoxRemove(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/remove',
+    method: 'post',
+    data
+  })
+}
+
+
+// 编辑盲票组
+export function setListDetail(data) {
+  return request({
+    url: '/api/v1/mp/admin/ticket/box/update',
+    method: 'post',
+    data
+  })
+}

+ 108 - 0
src/views/business/couponPkg/components/selectTicket.vue

@@ -0,0 +1,108 @@
+<template>
+  <el-dialog title="添加券" :visible.sync="selectShow" width="800px" :close-on-click-modal="false" :destroy-on-close="true">
+    <el-form :model="queryParams" ref="queryForm" label-width="80px" size="small">
+      <el-row :gutter="10">
+        <el-col :span="7">
+          <el-form-item label="券名称">
+            <el-input
+              v-model="queryParams.title"
+              placeholder="请输入券名称"
+              clearable
+              @keyup.enter.native="queryParams.pageNum = 1;getList()"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="3">
+          <el-form-item label-width="0">
+            <el-button type="primary" icon="el-icon-search" @click="queryParams.pageNum = 1;getList()">搜索</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table v-loading="loading" :data="tableData" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" />
+      <el-table-column label="券编号" prop="boxId" width="80" />
+      <el-table-column label="图片" prop="picUrl" align="center" width="80">
+        <template slot-scope="{row}">
+          <a target="_black" v-if="row.picUrl && row.picUrl.split(',').length > 0" :href="`${IMG_URL + row.picUrl}`"><img :src="`${IMG_URL + row.picUrl.split(',')[0]}`" style="max-height: 37px;max-width: 54px"></a>
+          <span v-else>-</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="名称" prop="title" />
+      <el-table-column label="使用场景" prop="type">
+        <template slot-scope="{row}">
+          {{ JSON.parse(row.type).desc }}
+        </template>
+      </el-table-column>
+      <el-table-column label="金额" prop="facePrice" />
+      <el-table-column label="有效期限" prop="status">
+        <template slot-scope="{row}">
+          <el-tag :type="JSON.parse(row.status).value === 'on' ? 'success' : 'info'">{{ JSON.parse(row.status).desc }}</el-tag>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList()" />
+    <span slot="footer">
+      <el-button type="info" plain @click="selectShow = false">取消</el-button>
+      <el-button type="primary" @click="update">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+<script>
+import { getTicketList, setListData } from "@/api/business/ticketPkg"
+import { publicFileGetUrl } from "@/api/common"
+export default {
+  name: "SelectTicket",
+  props: {
+    value: {
+      type: Array,
+      default: []
+    }
+  },
+  data() {
+    return {
+      IMG_URL: publicFileGetUrl,
+      loading: false,
+      selectShow: false,
+      tableData: [],
+      queryParams: {},
+      total: 0,
+      selection: []
+    }
+  },
+  methods: {
+    show() {
+      this.getList(true)
+      this.selectShow = true
+      this.selection = this.value
+      // this.$refs.table.toggleRowSelection(this.selection)
+    },
+    getList(reset) {
+      if (this.loading) {
+        return
+      }
+      this.loading = true
+      if (reset) {
+        this.queryParams = { pageNum: 1, pageSize: 20 }
+      }
+      getTicketList('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
+      })
+    },
+    handleSelectionChange(val) {
+      this.selection = val
+    },
+    update() {
+      this.$emit('input', this.selection)
+      this.selectShow = false
+    }
+  }
+}
+</script>

+ 71 - 3
src/views/business/couponPkg/create.vue

@@ -1,13 +1,81 @@
 <template>
-  <div></div>
+  <div class="app-container coupon-add">
+    <el-row  style="width: 700px">
+        <el-form ref="addItem" :model="addData" :rules="rules" label-width="100px">
+          <el-form-item label="券包名称:" prop="title">
+            <el-input v-model="addData.title" :readonly="readonly" placeholder="请输入券包名称" :maxlength="32" show-word-limit />
+          </el-form-item>
+        </el-form>
+    </el-row>
+    <br>
+    <el-button v-if="!readonly" type="primary" size="small" plain @click="$refs.select.show()">添加优惠券</el-button>
+    <br>
+    <br>
+    <span style="font-size: 14px; line-height: 40px">面值总额:¥{{ addData.ticketBoxList.length }}</span>
+    <span style="margin-left: 80px;font-size: 14px; line-height: 40px">优惠券数量:{{ addData.ticketBoxList.length }}</span>
+    <el-table v-if="addData.useArea === 5" :data="addData.ticketBoxList">
+      <el-table-column label="券编号" prop="" align="center" />
+      <el-table-column label="券名称" prop="title" />
+      <el-table-column label="券金额" prop="facePrice" />
+      <el-table-column label="使用场景" prop="type">
+        <template slot-scope="{row}">
+          {{ JSON.parse(row.type).desc }}
+        </template>
+      </el-table-column>
+      <el-table-column label="数量" prop="title" />
+      <el-table-column label="有效期限" prop="status">
+        <template slot-scope="{row}">
+          <el-tag :type="JSON.parse(row.status).value === 'on' ? 'success' : 'info'">{{ JSON.parse(row.status).desc }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column v-if="!readonly" prop="date" label="操作">
+        <template slot-scope="{ $index }">
+          <el-button type="text" class="del" @click="addData.ticketBoxList.splice($index, 1)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <br>
+    <el-row v-if="!readonly">
+      <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>
+    <!-- 弹出层 -->
+    <SelectTicket ref="select" v-model="addData.ticketBoxList" />
+  </div>
 </template>
 <script>
+import Upload from '@/components/ImageUpload'
+import SelectTicket from '../couponPkg/components/selectTicket'
+import { publicFileGetUrl } from '@/api/common'
+import { getCouponDetail, addCoupon } from '@/api/business/coupon'
+import { accDiv, accMul } from '@/utils/util'
+import {addData} from "../../../api/system/dict/data";
 export default {
+  components: {
+    Upload,
+    SelectTicket
+  },
   data() {
-    return {};
+    return {
+      IMG_URL: publicFileGetUrl,
+      id: this.$route.query.id,
+      readonly: this.$route.name === 'CouponPkgQuery',
+      addData: {
+        ticketBoxList:[],
+        useArea: 5,
+        type: 2,
+      },
+      addIng: false,
+      rules: {
+        title: [{ required: true, message: '请输入券包名称', trigger: 'blur' }]
+      }
+
+    };
   },
   methods: {},
 };
 </script>
 <style>
-</style>
+</style>

+ 4 - 2
src/views/business/couponPkg/detail.vue

@@ -1,5 +1,7 @@
 <template>
-  <div></div>
+  <div>
+    查看
+  </div>
 </template>
 <script>
 export default {
@@ -10,4 +12,4 @@ export default {
 };
 </script>
 <style>
-</style>
+</style>

+ 122 - 7
src/views/business/couponPkg/index.vue

@@ -1,17 +1,132 @@
 <template>
-  <div>
-      <el-button @click="$router.push({ name: 'CouponPkgAdd' })">添加券包</el-button>
-      <el-button @click="$router.push({ name: 'CouponPkgQuery' })">查看券包</el-button>
-      <el-button @click="$router.push({ name: 'CouponPkgEdit' })">修改券包</el-button>
+  <div class="app-container coupon-list">
+    <el-form v-show="showSearch" :model="queryParams" ref="queryForm" :inline="true" size="small">
+      <el-form-item label="券名称">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入券名称"
+          clearable
+          @keyup.enter.native="queryParams.pageNum = 1;getList()"
+        />
+      </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({ name: 'CouponPkgAdd' })"
+          v-hasPermi="['business:couponPkg: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="券包编号" prop="id" width="80" />
+      <el-table-column label="券包名称" prop="title" />
+      <el-table-column label="券数量" prop="couponNum" />
+      <el-table-column label="总面值" prop="facePrice">
+        <template slot-scope="{row}">
+          ¥{{$numberFormat(row.discount)}}
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" prop="status">
+        <template slot-scope="{row}">
+          <el-tag v-if="row.status == 0">待上架</el-tag>
+          <el-tag v-else-if="row.status == 1">上架</el-tag>
+          <el-tag v-else-if="row.status == 2">下架</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" align="right" label="操作" width="150">
+        <template slot-scope="{row}">
+          <el-button v-hasPermi="['business:couponPkg:query']" type="text" @click="$router.push({ name: 'CouponPkgQuery', query: { id: row.couponId } })">查看</el-button>
+          <el-button v-if="row.status === 0" v-hasPermi="['business:couponPkg:edit']" type="text" @click="$router.push({ name: 'CouponPkgEdit', query: { id: row.couponId } })">编辑</el-button>
+          <el-button v-if="JSON.parse(row.status).value === 'off' || JSON.parse(row.status).value === 'init'" v-hasPermi="['business:couponPkg:on']" type="text" @click="setStatus(row, 'on')">上架</el-button>
+          <el-button v-if="JSON.parse(row.status).value === 'on'" v-hasPermi="['business:couponPkg:off']" type="text" @click="setStatus(row, 'off')">下架</el-button>
+          <el-button v-if="JSON.parse(row.status).value === 'init'" v-hasPermi="['business:couponPkg:remove']" class="del" type="text" @click="del(row)">删除</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, delCoupon, setCouponStatus } from '@/api/business/couponPkg'
+import { accDiv } from '@/utils/util'
 export default {
   data() {
-    return {};
+    return {
+      loading: false,
+      showSearch: true,
+      queryParams: {},
+      tableData: [],
+      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) {
+          console.log(res)
+          this.tableData = res.rows
+          this.total = res.total
+        }
+      }).catch(() => {
+        this.loading = false
+      })
+
+    },
+
+    setStatus(item, status) {
+      this.$confirm(`确认${status === 'on' ? '上架' : '下架'}券 “${item.title}” 吗?`, `${status === 'on' ? '上架' : '下架'}券`, {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        setCouponStatus({
+          couponId: item.couponId,
+          status
+        }).then(res => {
+          if (res.code === 0) {
+            this.$message.success('操作已完成!')
+            this.getList()
+          }
+        })
+      })
+    },
+
+    del(item) {
+      this.$confirm(`确认删除券 “${item.title}” 吗?`, '删除券', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        delCoupon(item.couponId).then(res => {
+          if (res.code === 0) {
+            this.$message.success('操作已完成!')
+            this.getList()
+          }
+        })
+      })
+    },
   },
-  methods: {},
 };
 </script>
 <style>
-</style>
+</style>