会员商品

This commit is contained in:
余同学 2024-12-19 20:03:16 +08:00
parent a571294109
commit c6bed5ab74
7 changed files with 425 additions and 308 deletions

View File

@ -106,4 +106,44 @@ export const marketing = {
params: data,
});
},
//批量新增会员积分商品
batchAddPointsProduct: (data) => {
return $http.request({
url: `/merchant-api/memberUnitPointsProduct/batchAdd`,
method: "post",
data,
});
},
// 会员积分商品详情
PointsProductDetail: (data) => {
return $http.request({
url: `/merchant-api/memberUnitPointsProduct/detail`,
method: "post",
data,
});
},
// 会员积分商品修改
updatePointsProductSave: (data) => {
return $http.request({
url: `/merchant-api/memberUnitPointsProduct/update`,
method: "post",
data,
});
},
// 会员积分商品删除
deletePointsProduct: (data) => {
return $http.request({
url: `/merchant-api/memberUnitPointsProduct/delete`,
method: "post",
data,
});
},
// 会员积分商品上下架
reverseEnablePointsProduct: (data) => {
return $http.request({
url: `/merchant-api/memberUnitPointsProduct/reverseEnable`,
method: "post",
data,
});
},
};

View File

@ -36,14 +36,14 @@
class="site-navbar__menu site-navbar__menu--right"
mode="horizontal"
>
<el-menu-item index="0" @click="openBigScreen">
<!-- <el-menu-item index="0" @click="openBigScreen">
<template slot="title">
<el-badge value="">
<i class="el-icon-s-data"></i>
数据驾驶舱
</el-badge>
</template>
</el-menu-item>
</el-menu-item> -->
<el-menu-item index="1" @click="$router.push({ name: 'theme' })">
<template slot="title">
<!-- 暂时不要右上角的图标 -->

View File

@ -109,7 +109,7 @@
<el-form-item label="下单时间">
<el-date-picker
@change="changeValue"
value-format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd"
v-model="value"
type="datetimerange"
start-placeholder="开始日期"
@ -120,7 +120,7 @@
<el-form-item label="结算时间">
<el-date-picker
@change="changeValueOne"
value-format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd"
v-model="valueOne"
type="datetimerange"
start-placeholder="开始日期"
@ -297,25 +297,25 @@ export default {
});
},
getCurrentDate() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDate();
console.log(year, month, day);
this.value = [
year + "-" + month + "-" + day + " 00:00:00",
year + "-" + month + "-" + day + " 23:59:59",
];
this.formData.payBeginDate = year + "-" + month + "-" + day + " 00:00:00";
this.formData.payEndDate = year + "-" + month + "-" + day + " 23:59:59";
this.valueOne = [
year + "-" + month + "-" + day + " 00:00:00",
year + "-" + month + "-" + day + " 23:59:59",
];
this.formData.settleBeginDate =
year + "-" + month + "-" + day + " 00:00:00";
this.formData.settleEndDate =
year + "-" + month + "-" + day + " 23:59:59";
// let now = new Date();
// let year = now.getFullYear();
// let month = now.getMonth() + 1;
// let day = now.getDate();
// console.log(year, month, day);
// this.value = [
// year + "-" + month + "-" + day,
// year + "-" + month + "-" + day,
// ];
// this.formData.payBeginDate = year + "-" + month + "-" + day;
// this.formData.payEndDate = year + "-" + month + "-" + day;
// this.valueOne = [
// year + "-" + month + "-" + day,
// year + "-" + month + "-" + day,
// ];
// this.formData.settleBeginDate =
// year + "-" + month + "-" + day;
// this.formData.settleEndDate =
// year + "-" + month + "-" + day;
this.getList();
},
changeValue(e) {
@ -349,9 +349,9 @@ export default {
},
getStatus(row) {
if (row == 0) {
return "禁用";
return "待结算";
} else if (row == 1) {
return "启用";
return "部分结算";
} else if (row == 2) {
return " 已结算";
} else {

View File

@ -121,6 +121,7 @@
:data="productList.viewPeopleList"
border
style="width: 100%"
height="35vh"
>
<el-table-column
align="center"
@ -160,6 +161,7 @@
:data="productList.payConversionList"
border
style="width: 100%"
height="35vh"
>
<el-table-column
align="center"

View File

@ -48,36 +48,11 @@
></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="积分数量">
<el-col :span="11">
<el-input-number
style="width: 150px"
controls-position="right"
:precision="0"
v-model="formInline.oneGoodsViewPoints"
:min="0"
label="请输入"
></el-input-number>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-input-number
style="width: 150px"
controls-position="right"
:precision="0"
v-model="formInline.oneGoodsViewPoints"
:min="0"
label="请输入"
></el-input-number>
</el-col>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="$refs.oTable.reload()"
>查询</el-button
>
<el-button type="primary" @click="$refs.oTable.reload()"
>重置</el-button
>
<el-button type="primary" @click="reset">重置</el-button>
</el-form-item>
</el-form>
<div class="mb-2">
@ -110,6 +85,9 @@ export default {
marketId: "",
shopId: "",
unitType: "",
productId: "",
productName: "",
redeemEnable: "",
},
tableProp: {
"auto-resize": true,
@ -134,15 +112,6 @@ export default {
});
},
methods: {
getData() {
this.$api.marketing.PointsProductPage(this.formInline).then((res) => {
this.storeList = res.data.data;
// this.formInline.shopId = res.data.data[0].shopId;
this.$nextTick(() => {
this.$refs.oTable.reload();
});
});
},
queryList(pageNo, pageSize) {
this.$api.marketing
.PointsProductPage({
@ -164,6 +133,14 @@ export default {
add() {
this.$refs.addOrUpdate.toggle().add();
},
reset() {
this.formInline = {
unitType: JSON.parse(sessionStorage.getItem("userInfo")).unitType,
marketId: this.marketId,
shopId: this.shopId,
};
this.$refs.oTable.reload();
},
},
computed: {
tableCols() {
@ -178,54 +155,146 @@ export default {
{
title: "商品名称",
align: "center",
field: "publisher",
type: "jsx",
render: ({ row }) => {
if (row.publisher === "MERCHANT") {
return <span>店铺</span>;
} else if (row.publisher == "PLATFORM") {
return <span>平台</span>;
}
},
field: "productName",
},
{
title: "兑换积分",
align: "center",
field: "name",
field: "maxPoints",
type: "jsx",
render: ({ row }) => {
if (row.minPoints == row.maxPoints) {
return <span>{row.minPoints}</span>;
} else {
return (
<span>
{row.minPoints}-{row.maxPoints}
</span>
);
}
},
},
{
title: "剩余兑换库存",
align: "center",
field: "name",
field: "totalInventory",
},
{
title: "兑换状态",
align: "center",
field: "name",
field: "redeemEnable",
type: "jsx",
render: ({ row }) => {
let changStatus = () => {
if (row.redeemEnable) {
this.$confirm("是否开启积分商品兑换, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$api.marketing
.reverseEnablePointsProduct({
id: row.id,
})
.then((res) => {
this.$refs.oTable.reload();
})
.catch((err) => {
this.$refs.oTable.reload();
});
})
.catch(() => {
this.$refs.oTable.reload();
});
} else {
this.$confirm("是否关闭积分商品兑换, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$api.marketing
.reverseEnablePointsProduct({
id: row.id,
})
.then((res) => {
this.$refs.oTable.reload();
})
.catch((err) => {
this.$refs.oTable.reload();
});
})
.catch(() => {
this.$refs.oTable.reload();
});
}
};
return (
<el-switch
onChange={changStatus}
v-model={row.redeemEnable}
active-text="启用"
inactive-text="关闭"
></el-switch>
);
},
},
{
title: "已兑换数",
align: "center",
field: "name",
field: "totalRedeemQuantity",
},
{
title: "操作",
fixed: "right",
type: "jsx",
align: "center",
width: "140px",
render: (row) => {
width: "200px",
render: ({ row }) => {
let edit = () => {
// this.$refs.viewDetails.toggle(row).update();
this.$api.marketing
.PointsProductDetail({
id: row.id,
})
.then((res) => {
this.$refs.addOrUpdate
.toggle({ ...res.data.data, productName: row.productName })
.update();
})
.catch((err) => {});
};
let deleteProduct = () => {
this.$api.marketing
.deletePointsProduct({ id: row.id })
.then((res) => {
this.$message.success("删除成功");
this.$refs.oTable.reload();
})
.catch((err) => {});
};
return (
<div>
<el-button size="mini" type="primary" onClick={edit}>
<el-button
style="margin-right:10px"
size="mini"
type="primary"
onClick={edit}
>
编辑
</el-button>
<el-button size="mini" type="danger" onClick={edit}>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
onConfirm={deleteProduct}
title="确定删除吗?"
>
<el-button size="mini" slot="reference" type="danger">
删除
</el-button>
</el-popconfirm>
</div>
);
},

View File

@ -54,7 +54,7 @@
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column align="center" label="是否预售" width="80">
<!-- <el-table-column align="center" label="是否兑换" width="80">
<template slot-scope="scope">
<el-checkbox
:true-label="1"
@ -62,12 +62,16 @@
v-model="scope.row.isAdvanceSell"
></el-checkbox>
</template>
</el-table-column>
<el-table-column align="center" label="SKU-ID" prop="id" />
</el-table-column> -->
<el-table-column
align="center"
label="SKU-ID"
prop="productSpecId"
/>
<el-table-column
align="center"
label="规格"
prop="attributeList"
prop="attributeValue"
>
<template slot-scope="scope">
<span>{{ scope.row.attributeValue }}</span>
@ -88,191 +92,190 @@
prop="marketPrice"
width="120"
/>
<el-table-column align="center" label="*是否预售" width="200">
<el-table-column
align="center"
label="*兑换所需积分"
width="200"
>
<template slot="header">
<span style="color: red">*预售价</span>
<span style="color: red">*兑换所需积分</span>
</template>
<template slot-scope="scope">
<el-input-number
v-if="scope.row.isAdvanceSell"
@change="
scope.row.balancePayment =
scope.row.presalePrice - scope.row.earnestMoney
"
v-model="scope.row.presalePrice"
v-model="scope.row.redeemRequiredPoints"
:min="0"
:max="scope.row.marketPrice"
label="请输入销售价"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="*定金" width="200">
<template slot="header">
<span style="color: red">*定金</span>
</template>
<template slot-scope="scope">
<el-input-number
@change="
scope.row.balancePayment =
scope.row.presalePrice - scope.row.earnestMoney
"
v-if="scope.row.isAdvanceSell"
v-model="scope.row.earnestMoney"
:min="0"
:max="scope.row.presalePrice"
label="请输入订金"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="尾款" width="200">
<template slot-scope="scope">
<span v-if="scope.row.isAdvanceSell">{{
scope.row.presalePrice
? scope.row.presalePrice - scope.row.earnestMoney
: ""
}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="*预售库存" width="200">
<template slot="header">
<span style="color: red">*预售库存</span>
</template>
<template slot-scope="scope">
<el-input-number
v-if="scope.row.isAdvanceSell"
v-model="scope.row.advanceSellStockNum"
:min="0"
:max="999999"
:step="10"
:precision="0"
label="请输入预售库存"
label="请输入兑换所需积分"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="*兑换库存" width="200">
<template slot="header">
<span style="color: red">*兑换库存</span>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.redeemInventory"
:min="0"
:precision="0"
:step="10"
label="请输入兑换库存"
></el-input-number>
</template>
</el-table-column>
<el-table-column
align="center"
label="*限制兑换输入0则不限"
width="200"
>
<template slot="header">
<span style="color: red">*限制兑换输入0则不限</span>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.redeemRestrictions"
:min="0"
:precision="0"
label="请输入限制兑换"
></el-input-number>
</template>
</el-table-column>
<el-table-column
align="center"
label="*限制兑换类型"
width="200"
>
<template slot="header">
<span style="color: red">*限制兑换类型</span>
</template>
<template slot-scope="scope">
<el-select
size="mini"
v-model="scope.row.redeemRestrictionsType"
placeholder="请选择"
>
<el-option
v-for="item in [
{ value: 1, label: '每天' },
{ value: 2, label: '永久' },
]"
:key="item.value"
:value="item.value"
:label="item.label"
>
</el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</div>
<el-empty
v-show="ruleForm.productList.length == 0"
v-show="ruleForm.list?.length == 0"
description="请选择商品"
></el-empty>
</div>
<div v-else style="padding: 20px">
<div style="border-top: 1px solid #ccc; padding: 10px 0 0 0">
<div style="font-size: 16px; margin-bottom: 20px">
<span>商品ID:{{ ruleForm.productId }}</span>
<span>商品ID:{{ ruleForm.id }}</span>
<span style="margin-left: 20px"
>商品名称:{{ ruleForm.name }}</span
>商品名称:{{ ruleForm.productName }}</span
>
</div>
<el-table
border
ref="multipleTable"
:data="ruleForm.productSpecificationList"
:data="ruleForm.pointsProductSpecList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column align="center" label="是否预售" width="80">
<template slot-scope="scope">
<el-checkbox
:true-label="1"
:false-label="0"
v-model="scope.row.isAdvanceSell"
></el-checkbox>
</template>
</el-table-column>
<el-table-column align="center" label="SKU-ID" prop="id" />
<el-table-column
align="center"
label="规格"
prop="attributeList"
>
<template slot-scope="scope">
<span>{{ scope.row.attributeValue }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="属性" prop="address">
<template slot-scope="scope">
<span>{{
scope.row.attributeList
? scope.row.attributeList[0].attributeName
: "无"
}}</span>
</template>
</el-table-column>
<el-table-column
align="center"
label="销售价"
prop="marketPrice"
width="120"
label="SKU-ID"
prop="productSpecId"
/>
<el-table-column align="center" label="*是否预售" width="200">
<el-table-column
align="center"
label="*兑换所需积分"
width="200"
>
<template slot="header">
<span style="color: red">*预售价</span>
<span style="color: red">*兑换所需积分</span>
</template>
<template slot-scope="scope">
<el-input-number
v-if="scope.row.isAdvanceSell"
@change="
scope.row.balancePayment =
scope.row.presalePrice - scope.row.earnestMoney
"
v-model="scope.row.presalePrice"
v-model="scope.row.redeemRequiredPoints"
:min="0"
:max="scope.row.marketPrice"
label="请输入销售价"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="*定金" width="200">
<template slot="header">
<span style="color: red">*定金</span>
</template>
<template slot-scope="scope">
<el-input-number
@change="
scope.row.balancePayment =
scope.row.presalePrice - scope.row.earnestMoney
"
v-if="scope.row.isAdvanceSell"
v-model="scope.row.earnestMoney"
:min="0"
:max="scope.row.presalePrice"
label="请输入订金"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="尾款" width="200">
<template slot-scope="scope">
<span v-if="scope.row.isAdvanceSell">{{
scope.row.presalePrice
? scope.row.presalePrice - scope.row.earnestMoney
: ""
}}</span>
</template>
</el-table-column>
<el-table-column align="center" label="*预售库存" width="200">
<template slot="header">
<span style="color: red">*预售库存</span>
</template>
<template slot-scope="scope">
<el-input-number
v-if="scope.row.isAdvanceSell"
v-model="scope.row.advanceSellStockNum"
:min="0"
:max="999999"
:step="10"
:precision="0"
label="请输入预售库存"
label="请输入兑换所需积分"
></el-input-number>
</template>
</el-table-column>
<el-table-column align="center" label="*兑换库存" width="200">
<template slot="header">
<span style="color: red">*兑换库存</span>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.redeemInventory"
:min="0"
:precision="0"
:step="10"
label="请输入兑换库存"
></el-input-number>
</template>
</el-table-column>
<el-table-column
align="center"
label="*限制兑换输入0则不限"
width="200"
>
<template slot="header">
<span style="color: red">*限制兑换输入0则不限</span>
</template>
<template slot-scope="scope">
<el-input-number
v-model="scope.row.redeemRestrictions"
:min="0"
:precision="0"
label="请输入限制兑换"
></el-input-number>
</template>
</el-table-column>
<el-table-column
align="center"
label="*限制兑换类型"
width="200"
>
<template slot="header">
<span style="color: red">*限制兑换类型</span>
</template>
<template slot-scope="scope">
<el-select
size="mini"
v-model="scope.row.redeemRestrictionsType"
placeholder="请选择"
>
<el-option
v-for="item in [
{ value: 1, label: '每天' },
{ value: 2, label: '永久' },
]"
:key="item.value"
:value="item.value"
:label="item.label"
>
</el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</div>
<el-empty
v-show="ruleForm.productList?.length == 0"
<!-- <el-empty
v-show="ruleForm.list?.length == 0"
description="请选择商品"
></el-empty>
></el-empty> -->
</div>
</el-form>
</div>
@ -354,27 +357,7 @@ export default {
};
},
init(row) {
console.log(row.startTime, row.endTime);
this.orderTime = [row.startTime, row.endTime];
this.arrears = [row.balancePaymentStartTime, row.balancePaymentEndTime];
this.delivery = [
row.estimatedStartDeliveryTime,
row.estimatedEndDeliveryTime,
];
(this.ruleForm = {
productId: row.id,
advanceSellId: row.advanceSellId,
startTime: row.startTime,
name: row.name,
endTime: row.endTime,
balancePaymentStartTime: row.balancePaymentStartTime,
balancePaymentEndTime: row.balancePaymentEndTime,
estimatedStartDeliveryTime: row.estimatedStartDeliveryTime,
estimatedEndDeliveryTime: row.estimatedEndDeliveryTime,
isRefundEarnestMoney: row.isRefundEarnestMoney,
productSpecificationList: row.productSpecificationList,
}),
console.log(this.orderTime, this.arrears, this.delivery);
this.ruleForm = row;
// this.ruleForm = row;
},
@ -391,14 +374,26 @@ export default {
console.log(e);
},
getProduct(row) {
this.ruleForm.productList = row.map((item) => {
this.ruleForm.list = row.map((item) => {
let data = item.productSpecificationList.map((i) => {
return {
productSpecId: i.id,
redeemRequiredPoints: 0,
redeemInventory: 0,
redeemRestrictions: 0,
redeemRestrictionsType: 1,
attributeValue: i.attributeValue,
attributeList: i.attributeList,
marketPrice: i.marketPrice,
};
});
return {
productId: item.id,
name: item.name,
productSpecificationList: item.productSpecificationList,
redeemEnable: false,
pointsProductSpecList: data,
};
});
console.log(this.ruleForm.productList, this.ruleForm.productList.length);
console.log("获取商品");
},
@ -421,8 +416,8 @@ export default {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
console.log(valid);
this.$api.preSale
.addPreSaleProducts(this.ruleForm)
this.$api.marketing
.batchAddPointsProduct(this.ruleForm)
.then((res) => {
this.$emit("queryList");
this.toggle();
@ -433,8 +428,8 @@ export default {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
console.log(valid);
this.$api.preSale
.updatePreSaleProducts(this.ruleForm)
this.$api.marketing
.updatePointsProductSave(this.ruleForm)
.then((res) => {
this.$emit("queryList");
this.toggle();

View File

@ -9,29 +9,36 @@
@query="queryList"
v-model="dataList"
:tableEvent="tableEvent"
:enableAutoQuery="false"
>
<template slot="tableTop">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="订单号">
<el-input
v-model="formInline.name"
placeholder="订单号搜索"
></el-input>
</el-form-item>
<el-form-item label="商品名称">
<el-input
v-model="formInline.name"
placeholder="商品名称或id"
></el-input>
</el-form-item>
<el-form-item label="下单时间">
<el-date-picker
v-model="value1"
type="datetimerange"
start-placeholder="开始日期"
end-placeholder="结束日期"
<el-select v-model="formInline.group" placeholder="请选择">
<el-option
v-for="item in statusList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-date-picker>
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="storeList.length > 1" label="摊铺">
<el-select
class="filter-item"
style="width: 200px"
v-model="formInline.shopId"
placeholder="请选择摊铺"
>
<el-option
v-for="item in storeList"
:key="item.shopId"
:label="item.shopName"
:value="item.shopId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="$refs.oTable.reload()"
@ -60,7 +67,7 @@
</template>
<script>
import content from './content.vue'
import content from "./content.vue";
import { mapState } from "vuex";
export default {
components: { content },
@ -71,8 +78,7 @@ export default {
advanceSellStatus: "",
dataList: [],
formInline: {
name: "",
marketId: "",
group: "",
shopId: "",
},
tableProp: {
@ -84,39 +90,43 @@ export default {
},
statusList: [
{
label: "全部",
value: "5",
},
{
label: "代发货",
label: "历史订单",
value: "0",
},
{
label: "带收货",
label: "进行中",
value: "1",
},
{
label: "待评价",
label: "新订单",
value: "2",
},
{
label: "已取消",
label: "待备货",
value: "3",
},
{
label: "交易关闭",
value: "3",
label: "待配送",
value: "4",
},
{
label: "已完成",
value: "3",
label: "售后订单",
value: "5",
},
],
productFilterType: "SALE",
selectList: [],
};
},
created() {},
created() {
this.formInline = {
group: "0",
shopId: this.shopId,
};
this.$nextTick(() => {
this.$refs.oTable.reload();
});
},
methods: {
// getData() {
// this.$api.mer_admin
@ -160,9 +170,7 @@ export default {
.orderPage({
pageNumber: pageNo,
pageSize: pageSize,
group: 0,
shopId: this.shopId,
// ...this.formInline,
...this.formInline,
})
.then((res) => {
console.log(res);
@ -177,9 +185,8 @@ export default {
},
Reset() {
this.formInline = {
name: "",
marketId: JSON.parse(sessionStorage.getItem("userInfo")).markets[0]
.marketId,
group: "0",
shopId: this.shopId,
};
this.$refs.oTable.reload();
},
@ -200,7 +207,24 @@ export default {
tableCols() {
return [
// { type: "checkbox", width: "60px", fixed: "left" },
{ type: "seq", width: "60px", align: "center", title: "序号" },
{
type: "seq",
width: "60px",
fixed: "left",
align: "center",
title: "序号",
},
{
title: "商品详情",
// align: "center",
// width: "120px",
// field: "unitOrderStatus",
type: "jsx-out",
render: (col) => {
console.log(col);
return <content />;
},
},
{
title: "总订单号",
align: "center",
@ -213,19 +237,6 @@ export default {
width: "120px",
field: "unitOrderNo",
},
{
// title: "",
// align: "center",
// width: "120px",
// field: "unitOrderStatus",
type: "jsx-out",
render: (col) => {
console.log(col);
return (
<content />
);
},
},
{
title: "总商品数量",
align: "center",