diff --git a/admin-web/config/router.config.js b/admin-web/config/router.config.js
index de37a709c..d8426e9e0 100644
--- a/admin-web/config/router.config.js
+++ b/admin-web/config/router.config.js
@@ -130,6 +130,16 @@ export default [
name: 'coupon-card-template-list',
component: './Promotion/CouponCardTemplateList',
},
+ {
+ path: '/promotion/time-limit-discount-list',
+ name: 'time-limit-discount-list',
+ component: './Promotion/TimeLimitedDiscountList',
+ },
+ {
+ path: '/promotion/full-privilege-list',
+ name: 'full-privilege-list',
+ component: './Promotion/FullPrivilegeList',
+ }
],
},
{
diff --git a/admin-web/src/locales/zh-CN/menu.js b/admin-web/src/locales/zh-CN/menu.js
index a9b5533bc..86202bdbd 100644
--- a/admin-web/src/locales/zh-CN/menu.js
+++ b/admin-web/src/locales/zh-CN/menu.js
@@ -58,4 +58,6 @@ export default {
'menu.promotion.promotion-banner-list': '首页广告',
'menu.promotion.product-recommend-list': '商品推荐',
'menu.promotion.coupon-card-template-list': '优惠劵管理',
+ 'menu.promotion.time-limit-discount-list': '限时折扣',
+ 'menu.promotion.full-privilege-list': '满减送',
};
diff --git a/admin-web/src/models/promotion/fullPrivilegeList.js b/admin-web/src/models/promotion/fullPrivilegeList.js
new file mode 100644
index 000000000..a2cda79a7
--- /dev/null
+++ b/admin-web/src/models/promotion/fullPrivilegeList.js
@@ -0,0 +1,126 @@
+import { message } from 'antd';
+import { productSpuPage, productSpuUpdateSort } from '../../services/product';
+import {routerRedux} from "dva/router";
+import PaginationHelper from '../../../helpers/PaginationHelper';
+import {getPromotionActivityPage} from "../../services/promotion";
+
+const SEARCH_PARAMS_DEFAULT = {
+ title: '',
+ activityType: 2,
+ status: 'ALL',
+};
+
+export default {
+ namespace: 'fullPrivilegeList',
+
+ state: {
+ // 分页列表相关
+ list: [],
+ listLoading: false,
+ pagination: PaginationHelper.defaultPaginationConfig,
+ searchParams: SEARCH_PARAMS_DEFAULT,
+
+ // 添加 or 修改表单相关
+ },
+
+ effects: {
+ *page({ payload }, { call, put }) {
+ // const { queryParams } = payload;
+ // const response = yield call(productSpuPage, payload);
+ // message.info('查询成功!');
+ // yield put({
+ // type: 'treeSuccess',
+ // payload: {
+ // list: response.data,
+ // },
+ // });
+
+ // 显示加载中
+ yield put({
+ type: 'changeListLoading',
+ payload: true,
+ });
+
+ // 请求
+ const response = yield call(getPromotionActivityPage, payload);
+ // 响应
+ yield put({
+ type: 'setAll',
+ payload: {
+ list: response.data.list,
+ pagination: PaginationHelper.formatPagination(response.data, payload),
+ searchParams: {
+ title: payload.title,
+ status: payload.status,
+ activityType: payload.activityType,
+ }
+ },
+ });
+
+ // 隐藏加载中
+ yield put({
+ type: 'changeListLoading',
+ payload: false,
+ });
+ },
+ *updateSort({ payload }, { call, put }) {
+ // 显示加载中
+ yield put({
+ type: 'changeSortModalLoading',
+ payload: true,
+ });
+
+ // 请求
+ const { callback, body } = payload;
+ // 响应
+ const response = yield call(productSpuUpdateSort, body);
+ if(response.code === 0) {
+ if (callback) {
+ callback(response);
+ }
+ yield put({
+ type: 'page',
+ payload: {
+ ...this.state.pagination,
+ ...this.state.searchParams,
+ },
+ });
+ }
+
+ // 隐藏加载中
+ yield put({
+ type: 'changeSortModalLoading',
+ payload: false,
+ });
+ },
+ },
+
+ reducers: {
+ treeSuccess(state, { payload }) {
+ return {
+ ...state,
+ ...payload,
+ };
+ },
+ // 修改加载中的状态
+ changeSortModalLoading(state, { payload }) {
+ return {
+ ...state,
+ sortModalLoading: payload,
+ };
+ },
+ changeListLoading(state, { payload }) {
+ return {
+ ...state,
+ listLoading: payload,
+ };
+ },
+ // 设置所有属性
+ setAll(state, { payload }) {
+ return {
+ ...state,
+ ...payload,
+ };
+ }
+ },
+};
diff --git a/admin-web/src/models/promotion/productRecommendList.js b/admin-web/src/models/promotion/productRecommendList.js
index f3e0b63fa..c1fd57ded 100644
--- a/admin-web/src/models/promotion/productRecommendList.js
+++ b/admin-web/src/models/promotion/productRecommendList.js
@@ -7,7 +7,7 @@ import {
updateProductRecommendStatus,
} from '../../services/promotion';
import PaginationHelper from '../../../helpers/PaginationHelper';
-import {productSpuList, productSpuSearchList} from "../../services/product";
+import {productSpuSearchList} from "../../services/product";
const SEARCH_PARAMS_DEFAULT = {
type: undefined,
diff --git a/admin-web/src/models/promotion/timeLimitedDiscountList.js b/admin-web/src/models/promotion/timeLimitedDiscountList.js
new file mode 100644
index 000000000..e69773cfb
--- /dev/null
+++ b/admin-web/src/models/promotion/timeLimitedDiscountList.js
@@ -0,0 +1,126 @@
+import { message } from 'antd';
+import { productSpuPage, productSpuUpdateSort } from '../../services/product';
+import {routerRedux} from "dva/router";
+import PaginationHelper from '../../../helpers/PaginationHelper';
+import {getPromotionActivityPage} from "../../services/promotion";
+
+const SEARCH_PARAMS_DEFAULT = {
+ title: '',
+ activityType: 1,
+ status: 'ALL',
+};
+
+export default {
+ namespace: 'timeLimitedDiscountList',
+
+ state: {
+ // 分页列表相关
+ list: [],
+ listLoading: false,
+ pagination: PaginationHelper.defaultPaginationConfig,
+ searchParams: SEARCH_PARAMS_DEFAULT,
+
+ // 添加 or 修改表单相关
+ },
+
+ effects: {
+ *page({ payload }, { call, put }) {
+ // const { queryParams } = payload;
+ // const response = yield call(productSpuPage, payload);
+ // message.info('查询成功!');
+ // yield put({
+ // type: 'treeSuccess',
+ // payload: {
+ // list: response.data,
+ // },
+ // });
+
+ // 显示加载中
+ yield put({
+ type: 'changeListLoading',
+ payload: true,
+ });
+
+ // 请求
+ const response = yield call(getPromotionActivityPage, payload);
+ // 响应
+ yield put({
+ type: 'setAll',
+ payload: {
+ list: response.data.list,
+ pagination: PaginationHelper.formatPagination(response.data, payload),
+ searchParams: {
+ title: payload.title,
+ status: payload.status,
+ activityType: payload.activityType,
+ }
+ },
+ });
+
+ // 隐藏加载中
+ yield put({
+ type: 'changeListLoading',
+ payload: false,
+ });
+ },
+ *updateSort({ payload }, { call, put }) {
+ // 显示加载中
+ yield put({
+ type: 'changeSortModalLoading',
+ payload: true,
+ });
+
+ // 请求
+ const { callback, body } = payload;
+ // 响应
+ const response = yield call(productSpuUpdateSort, body);
+ if(response.code === 0) {
+ if (callback) {
+ callback(response);
+ }
+ yield put({
+ type: 'page',
+ payload: {
+ ...this.state.pagination,
+ ...this.state.searchParams,
+ },
+ });
+ }
+
+ // 隐藏加载中
+ yield put({
+ type: 'changeSortModalLoading',
+ payload: false,
+ });
+ },
+ },
+
+ reducers: {
+ treeSuccess(state, { payload }) {
+ return {
+ ...state,
+ ...payload,
+ };
+ },
+ // 修改加载中的状态
+ changeSortModalLoading(state, { payload }) {
+ return {
+ ...state,
+ sortModalLoading: payload,
+ };
+ },
+ changeListLoading(state, { payload }) {
+ return {
+ ...state,
+ listLoading: payload,
+ };
+ },
+ // 设置所有属性
+ setAll(state, { payload }) {
+ return {
+ ...state,
+ ...payload,
+ };
+ }
+ },
+};
diff --git a/admin-web/src/pages/Promotion/FullPrivilegeList.js b/admin-web/src/pages/Promotion/FullPrivilegeList.js
new file mode 100644
index 000000000..75b76a266
--- /dev/null
+++ b/admin-web/src/pages/Promotion/FullPrivilegeList.js
@@ -0,0 +1,325 @@
+/* eslint-disable */
+
+import React, { PureComponent, Fragment } from 'react';
+import { connect } from 'dva';
+import moment from 'moment';
+import {
+ Card,
+ Form,
+ Input,
+ Row,
+ Col,
+ Button,
+ Modal,
+ message,
+ Table,
+ Divider,
+ Tree,
+ Tabs,
+ TreeSelect,
+ Spin,
+ InputNumber
+} from 'antd';
+const TabPane = Tabs.TabPane;
+import PageHeaderWrapper from '@/components/PageHeaderWrapper';
+
+import styles from './FullPrivilegeList.less';
+import PaginationHelper from "../../../helpers/PaginationHelper";
+
+const FormItem = Form.Item;
+
+const statuses = {
+ 10: '未开始',
+ 20: '进行中',
+ 30: '已结束',
+ 40: '已撤销',
+ 50: '已删除',
+};
+
+const meetTypes = {
+ 1: '满 N 元减/送',
+ 2: '满 N 件减/送',
+};
+
+// 列表
+function List({ dataSource, loading, pagination, searchParams, dispatch,}) {
+
+ const handleTabsChange = (value) => {
+ dispatch({
+ type: 'fullPrivilegeList/page',
+ payload: {
+ ...searchParams,
+ status: value,
+ ...PaginationHelper.defaultPayload,
+ }
+ })
+ };
+
+ function onPageChange(page) { // 翻页
+ dispatch({
+ type: 'fullPrivilegeList/page',
+ payload: {
+ pageNo: page.current,
+ pageSize: page.pageSize,
+ ...searchParams
+ }
+ })
+ }
+
+ function formatFullPrivilegeText(activity) {
+ let text = '';
+ let fullPrivilege = activity.fullPrivilege;
+ for (let i in fullPrivilege.privileges) {
+ let privilege = fullPrivilege.privileges[i];
+ if (i > 0) {
+ text += ';';
+ }
+ if (fullPrivilege.cycled) {
+ text += '每';
+ }
+ if (privilege.meetType === 1) {
+ text += '满 ' + privilege.meetValue / 100.0 + ' 元,';
+ } else if (privilege.meetType === 2) {
+ text += '满 ' + privilege.meetValue + ' 件,';
+ }
+ if (privilege.preferentialType === 1) {
+ text += '减 ' + privilege.preferentialValue / 100.0 + ' 元';
+ } else if (privilege.preferentialType === 2) {
+ text += '打 ' + privilege.preferentialValue / 10.0 + ' 折';
+ }
+ }
+ return text;
+ };
+
+ const columns = [
+ // {
+ // title: 'id',
+ // dataIndex: 'id',
+ // render: text => {text},
+ // },
+ {
+ title: '活动名称',
+ dataIndex: 'title',
+ },
+ {
+ title: '类型',
+ dataIndex: 'fullPrivilege',
+ render: val => meetTypes[val.privileges[0].meetType + ''],
+ },
+ {
+ title: '活动详情',
+ render: (text, record) => formatFullPrivilegeText(record),
+ },
+ {
+ title: '活动时间',
+ render: (text, record) => (
+
+ {moment(record.startTime).format('YYYY-MM-DD HH:mm:ss')}
+ 至
+ {moment(record.endTime).format('YYYY-MM-DD HH:mm:ss')}
+
+ ),
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ render: val => statuses[val + ''],
+ },
+ {
+ title: '创建时间',
+ dataIndex: 'createTime',
+ render: val => {moment(val).format('YYYY-MM-DD')},
+ },
+ {
+ title: '操作',
+ width: 300,
+ render: (text, record) => (
+