|
@@ -2,147 +2,53 @@
|
|
|
<div class="orderManage app-container">
|
|
|
<div class="search">
|
|
|
<div>
|
|
|
- <el-input
|
|
|
- v-model="query.billId"
|
|
|
- size="small"
|
|
|
- placeholder="请输入计费号"
|
|
|
- class="item-width-200"
|
|
|
- ></el-input>
|
|
|
- <el-input
|
|
|
- v-model="query.groupName"
|
|
|
- size="small"
|
|
|
- placeholder="请输入集团名称"
|
|
|
- class="item-width-200 ml10"
|
|
|
- ></el-input>
|
|
|
- <el-input
|
|
|
- v-model="query.planningName"
|
|
|
- size="small"
|
|
|
- placeholder="请输入产品策划名称"
|
|
|
- class="item-width-200 ml10"
|
|
|
- ></el-input>
|
|
|
- <el-input
|
|
|
- v-model="query.orderNo"
|
|
|
- size="small"
|
|
|
- placeholder="请输入订单号"
|
|
|
- class="item-width-200 ml10"
|
|
|
- ></el-input>
|
|
|
- <el-select
|
|
|
- v-model="query.groupType"
|
|
|
- size="small"
|
|
|
- clearable
|
|
|
- class="item-width-200 ml10"
|
|
|
- placeholder="请选择状态"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in statusOptions"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
+ <el-input v-model="query.billId" size="small" placeholder="请输入计费号" class="item-width-200"></el-input>
|
|
|
+ <el-input v-model="query.groupName" size="small" placeholder="请输入集团名称" class="item-width-200 ml10"></el-input>
|
|
|
+ <el-input v-model="query.planningName" size="small" placeholder="请输入产品策划名称"
|
|
|
+ class="item-width-200 ml10"></el-input>
|
|
|
+ <el-input v-model="query.orderNo" size="small" placeholder="请输入订单号" class="item-width-200 ml10"></el-input>
|
|
|
+ <el-select v-model="query.groupType" size="small" clearable class="item-width-200 ml10" placeholder="请选择状态">
|
|
|
+ <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
- <el-select
|
|
|
- v-model="query.actionID"
|
|
|
- size="small"
|
|
|
- clearable
|
|
|
- class="item-width-200 ml10"
|
|
|
- placeholder="请选择订单状态"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in orderStatusoptions"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- >
|
|
|
+ <el-select v-model="query.actionID" size="small" clearable class="item-width-200 ml10" placeholder="请选择订单状态">
|
|
|
+ <el-option v-for="item in orderStatusoptions" :key="item.value" :label="item.label" :value="item.value">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
- <el-button
|
|
|
- class="ml10"
|
|
|
- type="primary"
|
|
|
- size="small"
|
|
|
- icon="el-icon-search"
|
|
|
- @click="handleSearch"
|
|
|
- >
|
|
|
+ <el-button class="ml10" type="primary" size="small" icon="el-icon-search" @click="handleSearch">
|
|
|
搜索
|
|
|
</el-button>
|
|
|
</div>
|
|
|
+ <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer" @click="exportAllExcel">
|
|
|
+ 导出
|
|
|
+ </el-button>
|
|
|
</div>
|
|
|
|
|
|
- <el-table
|
|
|
- :data="tableData"
|
|
|
- tooltip-effect="dark"
|
|
|
- border
|
|
|
- v-loading="loading"
|
|
|
- style="width: 100%"
|
|
|
- >
|
|
|
- <el-table-column
|
|
|
- align="center"
|
|
|
- label="计费号"
|
|
|
- prop="billId"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table :data="tableData" tooltip-effect="dark" border v-loading="loading" style="width: 100%">
|
|
|
+ <el-table-column align="center" label="计费号" prop="billId" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="groupName"
|
|
|
- align="center"
|
|
|
- label="集团名称"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="groupName" align="center" label="集团名称" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="orderNo"
|
|
|
- align="center"
|
|
|
- label="订单号"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="orderNo" align="center" label="订单号" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="groupPlanName"
|
|
|
- align="center"
|
|
|
- label="订购产品策划名称"
|
|
|
- show-overflow-tooltip
|
|
|
- ></el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="orderPrice"
|
|
|
- align="center"
|
|
|
- label="订购产品单价(元)"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="groupPlanName" align="center" label="订购产品策划名称" show-overflow-tooltip></el-table-column>
|
|
|
+ <el-table-column prop="orderPrice" align="center" label="订购产品单价(元)" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
<el-table-column align="center" label="订购数量" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">
|
|
|
{{ scope.row.orderNum || "--" }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="orderDate"
|
|
|
- align="center"
|
|
|
- label="订购时间"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="orderDate" align="center" label="订购时间" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="invalidDate"
|
|
|
- align="center"
|
|
|
- label="失效时间"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="invalidDate" align="center" label="失效时间" show-overflow-tooltip>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- align="center"
|
|
|
- label="和校园推送时间"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column align="center" label="和校园推送时间" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">
|
|
|
{{ timeFormat(scope.row.createTime) }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="groupType"
|
|
|
- align="center"
|
|
|
- label="状态"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="groupType" align="center" label="状态" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">
|
|
|
<span v-if="scope.row.groupType === 1">已生成</span>
|
|
|
<span v-if="scope.row.groupType === 2">待生成</span>
|
|
@@ -162,12 +68,7 @@
|
|
|
<el-table-column align="center" label="所属小程序" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">{{ "慧研学惠生活" }}</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="action"
|
|
|
- align="center"
|
|
|
- label="订单状态"
|
|
|
- show-overflow-tooltip
|
|
|
- >
|
|
|
+ <el-table-column prop="action" align="center" label="订单状态" show-overflow-tooltip>
|
|
|
<template slot-scope="scope">
|
|
|
<el-tag v-if="scope.row.action === 1" type="success">订购</el-tag>
|
|
|
<el-tag type="danger" v-else-if="scope.row.action === 2">退订</el-tag>
|
|
@@ -177,42 +78,19 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="address" align="center" label="操作">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-button
|
|
|
- type="text"
|
|
|
- size="small"
|
|
|
- v-if="scope.row.groupType === 2&&btnAuthObj.createVipActivationl"
|
|
|
- @click="gotoGenerating(scope.row)"
|
|
|
- >生成激活码</el-button
|
|
|
- >
|
|
|
- <el-button
|
|
|
- type="text"
|
|
|
- size="small"
|
|
|
- v-if="scope.row.groupType != 2&&btnAuthObj.vipActivationDetail"
|
|
|
- @click="codeDetails(scope.row)"
|
|
|
- >查看激活码</el-button
|
|
|
- >
|
|
|
+ <el-button type="text" size="small" v-if="scope.row.groupType === 2"
|
|
|
+ @click="gotoGenerating(scope.row)">生成激活码</el-button>
|
|
|
+ <el-button type="text" size="small" v-else @click="codeDetails(scope.row)">查看激活码</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<div class="page-box">
|
|
|
- <el-pagination
|
|
|
- @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange"
|
|
|
- background
|
|
|
- :current-page="query.page"
|
|
|
- :page-sizes="[10, 20, 30, 40]"
|
|
|
- :page-size="query.size"
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
- :total="total"
|
|
|
- >
|
|
|
+ <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" background
|
|
|
+ :current-page="query.page" :page-sizes="[10, 20, 30, 40]" :page-size="query.size"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper" :total="total">
|
|
|
</el-pagination>
|
|
|
</div>
|
|
|
- <el-dialog
|
|
|
- title="生成激活码"
|
|
|
- :visible.sync="vipDialogVisible"
|
|
|
- :before-close="closeVipDialog"
|
|
|
- width="50%"
|
|
|
- >
|
|
|
+ <el-dialog title="生成激活码" :visible.sync="vipDialogVisible" :before-close="closeVipDialog" width="50%">
|
|
|
<el-descriptions class="margin-top" :column="3" border>
|
|
|
<el-descriptions-item>
|
|
|
<template slot="label"> 计费号 </template>
|
|
@@ -240,124 +118,75 @@
|
|
|
</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
<div class="codeInfo">激活码信息</div>
|
|
|
- <el-form
|
|
|
- :model="setQuery"
|
|
|
- ref="setQuery"
|
|
|
- :rules="rules"
|
|
|
- label-width="130px"
|
|
|
- size="small"
|
|
|
- >
|
|
|
+ <el-form :model="setQuery" ref="setQuery" :rules="rules" label-width="130px" size="small">
|
|
|
<el-form-item label="激活码有效期:" prop="validDay">
|
|
|
- <el-input
|
|
|
- v-model="setQuery.validDay"
|
|
|
- onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
- onafterpaste="this.value=this.value.replace(/\D/g,'')"
|
|
|
- class="item-width-100"
|
|
|
- ></el-input>
|
|
|
+ <el-input v-model="setQuery.validDay" onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
+ onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"></el-input>
|
|
|
天
|
|
|
</el-form-item>
|
|
|
<el-form-item label="会员套餐:" prop="selectType">
|
|
|
- <el-select
|
|
|
- v-model="setQuery.selectType"
|
|
|
- @change="selectChange"
|
|
|
- placeholder="请选择套餐"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item, index) in optionsList"
|
|
|
- :key="item.value"
|
|
|
- :label="item.setMealName"
|
|
|
- :value="{ value: item.setMealCode, label: item.setMealName }"
|
|
|
- ></el-option>
|
|
|
+ <el-select v-model="setQuery.selectType" @change="selectChange" placeholder="请选择套餐">
|
|
|
+ <el-option v-for="(item, index) in optionsList" :key="item.value" :label="item.setMealName"
|
|
|
+ :value="{ value: item.setMealCode, label: item.setMealName }"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="会员有效期:" prop="activationType">
|
|
|
<el-radio-group v-model="setQuery.activationType">
|
|
|
- <el-radio
|
|
|
- v-for="item in radioOptions"
|
|
|
- :key="item.value"
|
|
|
- :value="item.value"
|
|
|
- :label="item.label"
|
|
|
- ></el-radio>
|
|
|
+ <el-radio v-for="item in radioOptions" :key="item.value" :value="item.value" :label="item.label"></el-radio>
|
|
|
</el-radio-group>
|
|
|
<div v-if="setQuery.activationType == '时间段'">
|
|
|
<el-form-item prop="startTime">
|
|
|
- <el-date-picker
|
|
|
- v-model="date"
|
|
|
- type="daterange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- >
|
|
|
+ <el-date-picker v-model="date" type="daterange" range-separator="至" start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期">
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
<div v-if="setQuery.activationType == '天数'">
|
|
|
<el-form-item prop="activationDay">
|
|
|
- <el-input
|
|
|
- v-model="setQuery.activationDay"
|
|
|
- onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
- onafterpaste="this.value=this.value.replace(/\D/g,'')"
|
|
|
- class="item-width-100"
|
|
|
- ></el-input>
|
|
|
+ <el-input v-model="setQuery.activationDay" onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
+ onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"></el-input>
|
|
|
天
|
|
|
</el-form-item>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
- <div
|
|
|
- style="
|
|
|
+ <div style="
|
|
|
color: red;
|
|
|
font-size: 12px;
|
|
|
line-height: 16px;
|
|
|
margin-left: 40px;
|
|
|
- "
|
|
|
- >
|
|
|
+ ">
|
|
|
注:会员有效期为用户使用激活码后会员生效时间。时间段为用户使用激活码后仅在对应时间段内拥有会员权益;天数为用户使用激活码后对应天数内拥有会员权益。时间段激活码无法叠加使用,天数激活码可叠加使用累计天数。
|
|
|
</div>
|
|
|
<el-form-item label="激活码数量:">
|
|
|
- <el-input
|
|
|
- v-model="setQuery.totalTicket"
|
|
|
- onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
- onafterpaste="this.value=this.value.replace(/\D/g,'')"
|
|
|
- class="item-width-100"
|
|
|
- @blur="totalTicketChange"
|
|
|
- ></el-input>
|
|
|
- <span style="color: red; font-size: 12px; margin-left: 10px"
|
|
|
- >注:默认为订购数量,激活码数量必须大于订购数量,输入数字须为整数</span
|
|
|
- >
|
|
|
+ <el-input v-model="setQuery.totalTicket" onkeyup="this.value=this.value.replace(/\D/g,'')"
|
|
|
+ onafterpaste="this.value=this.value.replace(/\D/g,'')" class="item-width-100"
|
|
|
+ @blur="totalTicketChange"></el-input>
|
|
|
+ <span style="color: red; font-size: 12px; margin-left: 10px">注:默认为订购数量,激活码数量必须大于订购数量,输入数字须为整数</span>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="激活码开头:" prop="startString">
|
|
|
- <el-input
|
|
|
- v-model="setQuery.startString"
|
|
|
- class="item-width-100"
|
|
|
- maxlength="6"
|
|
|
- ></el-input>
|
|
|
- <span style="color: red; font-size: 12px; margin-left: 10px"
|
|
|
- >注:只能输入大小写英文和数字,最长单位为6位,创建激活码时放在激活码开头</span
|
|
|
- >
|
|
|
+ <el-input v-model="setQuery.startString" class="item-width-100" maxlength="6"></el-input>
|
|
|
+ <span style="color: red; font-size: 12px; margin-left: 10px">注:只能输入大小写英文和数字,最长单位为6位,创建激活码时放在激活码开头</span>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
|
<el-button @click="activationCancel('setQuery')">取 消</el-button>
|
|
|
- <el-button
|
|
|
- type="primary"
|
|
|
- :loading="updataLoading"
|
|
|
- @click="vipsubmitForm('setQuery')"
|
|
|
- >生成</el-button
|
|
|
- >
|
|
|
+ <el-button type="primary" :loading="updataLoading" @click="vipsubmitForm('setQuery')">生成</el-button>
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { debounce } from "@/utils/index";
|
|
|
import { getGroupList, generateCode, getList } from "@/api/common";
|
|
|
import { timeFormat } from "@/utils/index";
|
|
|
-
|
|
|
+import FileSaver from 'file-saver';
|
|
|
+import XLSX from 'xlsx';
|
|
|
export default {
|
|
|
name: "orderManage",
|
|
|
data() {
|
|
|
return {
|
|
|
+ downloadLoading: false,
|
|
|
+ totalTicketNumber: '',
|
|
|
date: "",
|
|
|
updataLoading: false,
|
|
|
codeData: {},
|
|
@@ -457,7 +286,7 @@ export default {
|
|
|
},
|
|
|
],
|
|
|
startString: [
|
|
|
- { required: true,pattern:/^[a-z0-9A-Z]+$/, message: "请正确输入激活码开头", trigger: "blur" },
|
|
|
+ { required: true, pattern: /^[a-z0-9A-Z]+$/, message: "请正确输入激活码开头", trigger: "blur" },
|
|
|
],
|
|
|
},
|
|
|
vipDialogVisible: false,
|
|
@@ -506,6 +335,7 @@ export default {
|
|
|
this.codeData = item;
|
|
|
this.setQuery.groupOrderNo = item.orderNo;
|
|
|
this.setQuery.totalTicket = Math.floor(item.orderNum);
|
|
|
+ this.totalTicketNumber = Math.floor(item.orderNum);
|
|
|
},
|
|
|
|
|
|
// 套餐选择
|
|
@@ -519,7 +349,7 @@ export default {
|
|
|
totalTicketChange() {
|
|
|
if (Math.trunc(this.codeData.orderNum) > this.setQuery.totalTicket) {
|
|
|
this.$message.error("激活码数量必须大于订购数量");
|
|
|
- this.setQuery.totalTicket = "";
|
|
|
+ this.setQuery.totalTicket = this.totalTicketNumber;
|
|
|
return;
|
|
|
}
|
|
|
},
|
|
@@ -579,6 +409,67 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
|
|
|
+ // 导出
|
|
|
+ exportAllExcel() {
|
|
|
+ this.downloadLoading=true
|
|
|
+ const allData = [];
|
|
|
+ let query = JSON.parse(JSON.stringify(this.query))
|
|
|
+ query.size = this.total
|
|
|
+ query.page=0
|
|
|
+ getGroupList(query).then(res => {
|
|
|
+ this.downloadLoading=false
|
|
|
+ if(res.state == "Success"){
|
|
|
+ allData.push(...res.content.content);
|
|
|
+ this.exportExcel(allData);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 导出数据处理
|
|
|
+ exportExcel(r) {
|
|
|
+ const data = r.map((item) => {
|
|
|
+ let status = "";
|
|
|
+ let orderStatus = "";
|
|
|
+ if (item.groupType == 1) {
|
|
|
+ status = "已生成"
|
|
|
+ } else if (item.groupType == 2) {
|
|
|
+ status = "未生成"
|
|
|
+ } else {
|
|
|
+ status = "全部激活"
|
|
|
+ }
|
|
|
+ if (item.action == 1) {
|
|
|
+ orderStatus = '订购'
|
|
|
+ } else if (item.action == 2) {
|
|
|
+ orderStatus = '退订'
|
|
|
+ } else if (item.action == 3) {
|
|
|
+ orderStatus = '激活'
|
|
|
+ } else {
|
|
|
+ orderStatus = '暂停'
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ "计费号": item.billId,
|
|
|
+ "集团名称": item.groupName,
|
|
|
+ "订单号": item.orderNo,
|
|
|
+ "订购产品策划名称": item.groupPlanName,
|
|
|
+ "订购产品单价(元)": item.orderPrice,
|
|
|
+ "订购数量": item.orderNum,
|
|
|
+ "订购时间": item.orderDate,
|
|
|
+ "失效时间": item.invalidDate,
|
|
|
+ "和校园推送时间": timeFormat(item.createTime),
|
|
|
+ "状态": status,
|
|
|
+ "未激活数量": item.totalTicket - item.useTicket,
|
|
|
+ "已激活数量": item.useTicket,
|
|
|
+ "所属小程序": '慧研学惠生活',
|
|
|
+ "订单状态": orderStatus,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const worksheet = XLSX.utils.json_to_sheet(data);
|
|
|
+ const workbook = { Sheets: { data: worksheet }, SheetNames: ['data'] };
|
|
|
+ const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
|
|
|
+ const blob = new Blob([excelBuffer], { type: 'application/octet-stream' });
|
|
|
+ FileSaver.saveAs(blob, '集团列表.xlsx');
|
|
|
+ },
|
|
|
+
|
|
|
handleSearch() {
|
|
|
this.query.page = 1;
|
|
|
this.getList();
|