Commit 4bbee5c9 authored by unknown's avatar unknown

营销能力

parent 92142653
This diff is collapsed.
This diff is collapsed.
{
"marketingAbility.neirong": "内容",
"marketingAbility.tupianlianjie": "图片链接",
"marketingAbility.yangshi": "样式",
"marketingAbility.youhuiquan": "优惠券",
"marketingAbility.wenbenneirong": "文本内容",
"marketingAbility.guanggaotu": "广告图",
"marketingAbility.huodongtuijian": "活动推荐",
"marketingAbility.zidingyiquyu": "自定义区域",
"marketingAbility.tianjiashangpinjiedian": "添加商品节点",
"marketingAbility.tianjiazijiedian": "添加子节点",
"marketingAbility.zujianshu": "组件树",
"marketingAbility.tejiacuxiao": "特价促销",
"marketingAbility.zhijiangcuxiao": "直降促销",
"marketingAbility.zhekoucuxiao": "折扣促销",
"marketingAbility.duojiancuxiao": "多件促销",
"marketingAbility.zuhecuxiao": "组合促销",
"marketingAbility.pintuan": "拼团",
"marketingAbility.kanjia": "砍价",
"marketingAbility.miaosha": "秒杀",
"marketingAbility.yushou": "预售",
"marketingAbility.taocan": "套餐",
"marketingAbility.shiyong": "试用",
"marketingAbility.zhongzhile": "重置了",
"marketingAbility.youhuijuanID": "优惠劵ID",
"marketingAbility.meihuiyuanIDzonggongkelingqu": "每会员ID总共可领取",
"marketingAbility.quedingyaotijiaoma?": "确定要提交吗?",
"marketingAbility.manliangcuxiao": "满量促销",
"marketingAbility.manecuxiao": "满额促销",
"marketingAbility.zengsongcuxiao": "赠送促销",
"marketingAbility.choujiang": "抽奖",
"marketingAbility.huangou": "换购",
"marketingAbility.zijianyingxiaohuodongguanli": "自建营销活动管理",
"marketingAbility.yijieshu": "已结束",
"marketingAbility.xunjiabaojiaxiadan": "询价报价下单",
"marketingAbility.wenzhoulongchangshoudaiyouxiangongsi": "温州龙昌手袋有限公司",
"marketingAbility.tijiaoyingxiaohuodong": "提交营销活动",
"marketingAbility.gongyingshang": "供应商",
"marketingAbility.shenheyingxiaohuodong": "审核营销活动",
"marketingAbility.pingtai": "平台",
"marketingAbility.shangxianyingxiaohuodong": "上线营销活动",
"marketingAbility.daipingtaishenhe": "待平台审核",
"marketingAbility.tongyi": "同意",
"marketingAbility.daishangxianhuodong": "待上线活动",
"marketingAbility.xinzengyingxiaohuodong": "新增营销活动",
"marketingAbility.shenheyingxiaohuodong(yiji)": "审核营销活动(一级)",
"marketingAbility.shenheyingxiaohuodong(erji)": "审核营销活动(二级)",
"marketingAbility.yunyingzongjian": "运营总监",
"marketingAbility.yunyingrenyuan": "运营人员",
"marketingAbility.yunyingbu": "运营部",
"marketingAbility.zhangsan": "张三",
"marketingAbility.daishenhe(yiji)": "待审核(一级)",
"marketingAbility.liuzhuanjindu": "流转进度",
"marketingAbility.jibenxinxi": "基本信息",
"marketingAbility.huodongguize": "活动规则",
"marketingAbility.huodongshangpin": "活动商品",
"marketingAbility.huodongyonghu": "活动用户",
"marketingAbility.shiyongshangcheng": "适用商城",
"marketingAbility.liuzhuanjilu": "流转记录",
"marketingAbility.huodongID": "活动ID",
"marketingAbility.huodongmingcheng": "活动名称",
"marketingAbility.neibuzhuangtai": "内部状态",
"marketingAbility.youhuiquanleixing": "优惠券类型",
"marketingAbility.quanmiane": "券面额",
"marketingAbility.faquanshuliang": "发券数量",
"marketingAbility.ling(fa)quankaishishijian": "领(发)券开始时间",
"marketingAbility.ling(fa)quanjieshushijian": "领(发)券结束时间",
"marketingAbility.manliangcuxiaoleixing": "满量促销类型",
"marketingAbility.manliangjian": "满量减",
"marketingAbility.zengsongcuxiaoleixing": "赠送促销类型",
"marketingAbility.youhuiguize": "优惠规则",
"marketingAbility.huangouleixing": "换购类型",
"marketingAbility.diejiahuodongleixing": "叠加活动类型",
"marketingAbility.chengtuanrenshu": "成团人数",
"marketingAbility.choujiangleixing": "抽奖类型",
"marketingAbility.choujiangcishu": "抽奖次数",
"marketingAbility.meicikanjiajine": "每次砍价金额",
"marketingAbility.yonghuxianzhicishu": "用户限制次数",
"marketingAbility.meirimiaoshashijianduan": "每日秒杀时间段",
"marketingAbility.dingjinzhifushijian": "定金支付时间",
"marketingAbility.chouquyonghushijian": "抽取用户时间",
"marketingAbility.huodongmiaoshu": "活动描述",
"marketingAbility.huodongqineijinyunxuyonghuyihuodongjiagegoumaiyijian,chaoguoyijianyonghuxuyiyuanjiagoumai": "活动期内仅允许用户以活动价格购买一件,超过一件用户须以原价购买",
"marketingAbility.zengpinleixing": "赠品类型",
"marketingAbility.diejiayouhuiquan": "叠加优惠券",
"marketingAbility.yunxudiejia": "允许叠加",
"marketingAbility.chengtuanshijian": "成团时间",
"marketingAbility.weikuanzhifushijian": "尾款支付时间",
"marketingAbility.shiyongjieshushijian": "试用结束时间",
"marketingAbility.manliangzhe": "满量折",
"marketingAbility.chaoxianguize": "超限规则",
"marketingAbility.yuanjiagoumai": "原价购买",
"marketingAbility.yonghucantuanxianzhi": "用户参团限制",
"marketingAbility.kaishifahuoshijian": "开始发货时间",
"marketingAbility.shangpintupian": "商品图片",
"marketingAbility.shangpinID": "商品ID",
"marketingAbility.shangpinmingcheng": "商品名称",
"marketingAbility.pinlei": "品类",
"marketingAbility.pinpai": "品牌",
"marketingAbility.danwei": "单位",
"marketingAbility.shangpinjiage": "商品价格",
"marketingAbility.gerenxiangoushuliang": "个人限购数量",
"marketingAbility.huodongxiangouzongshuliang": "活动限购总数量",
"marketingAbility.huodongjiagebiaoshishangchengzhijieyigaishangpindehuodongjiagejinxingxiaoshou": "活动价格表示商城直接以该商品的活动价格进行销售",
"marketingAbility.shiyongyonghu": "适用用户",
"marketingAbility.huodongjiage": "活动价格",
"marketingAbility.huodongleixing": "活动类型",
"marketingAbility.huodongkaishishijian": "活动开始时间",
"marketingAbility.huodongjieshushijian": "活动结束时间",
"marketingAbility.baomingshijian": "报名时间",
"marketingAbility.canyukehushu": "参与客户数",
"marketingAbility.yizhixingdingdanshu": "已执行订单数",
"marketingAbility.waibuzhuangtai": "外部状态",
"marketingAbility.daitijiaoshenhe": "待提交审核",
"marketingAbility.sousuo": "搜索",
"marketingAbility.kaopingzhuti": "考评主题",
"marketingAbility.kaopingkaishishijian": "考评开始时间",
"marketingAbility.kaopingwanchengshijian": "考评完成时间",
"marketingAbility.neibuzhuangtai(quanbu)": "内部状态(全部)",
"marketingAbility.chaxun": "查询",
"marketingAbility.daitijiaobaopingtaishenhe": "待提交报平台审核",
"marketingAbility.yonghuzongshu": "用户总数",
"marketingAbility.xinyonghu": "新用户",
"marketingAbility.xinhuiyuan": "新会员",
"marketingAbility.laoyonghu": "老用户",
"marketingAbility.laohuiyuan": "老会员",
"marketingAbility.goumaijine": "购买金额",
"marketingAbility.dingdanshuliang": "订单数量",
"marketingAbility.jinri": "今日",
"marketingAbility.zuijin7ri": "最近7日",
"marketingAbility.quanbu": "全部",
"marketingAbility.dangqianshangpinshuju": "当前商品数据",
"marketingAbility.jinrihuodongshangpingoumaipaiming": "今日活动商品购买排名",
"marketingAbility.dangqianshangpinyonghulaiyuanfenxi": "当前商品用户来源分析",
"marketingAbility.dangqianshangpinkehuqushifenxi": "当前商品客户趋势分析",
"marketingAbility.dangqianshangpinhuodongxiaoguoqushifenxi": "当前商品活动效果趋势分析",
"marketingAbility.dangqianshangpinyonghuleixingfenxi": "当前商品用户类型分析",
"marketingAbility.dangqianshangpinhuiyuandengjifenxi": "当前商品会员等级分析"
}
\ No newline at end of file
const axios = require("axios");
const fs = require('fs')
const { readdir } = require('fs/promises')
const path = require('path')
const { pinyin } = require('pinyin-pro');
// 判断是不是中文 \u4e00-\u9fa5
// () 为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串 $1
// [] 定义匹配的字符范围。比如[a-zA-Z0-9]表示匹配英文字符和数字。[\s*表示空格或者*号]
// + 一次或多次 * 零次或多次 ? 零次或一次
// (1)'' (2)"" (3) > < (4) ='' (5) ="" (6)``
// /'([\u4e00-\u9fa5]+)'/g
// /'([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)'/g
const reg1 = /'([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)'/g
const reg2 = /"([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)"/g
const reg3 = />\s*([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)\s*</g
const reg4 = /=\s*'([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)'/g
const reg5 = /=\s*"([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)"/g
const reg6 = /`([\u4e00-\u9fa5][\u4e00-\u9fa5a-zA-Z0-9??!!%,::()...]*)`/g
const list = new Set()
const unique = []
const map = {}
const fileList = []
function create(file) {
const arr = file.split('\\').slice(6)
return arr.join('-').split('.')[0].replace(/\-/g, '.')
}
async function translateToID(value) {
const str = encodeURI(value);
// 有道翻译api 发送请求 (接口不可用时,请自主替换)
const res = await axios.get('http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=' + str)
let resID = res.data.translateResult[0][0].tgt
// 预处理 转ID 驼峰命名
if (resID.indexOf(" ") != -1) { // 翻译结果为多个单词
resID = resID.split(' ')
// 去除翻译中的(),' 为了省事,直接筛掉含这些的单词
resID = resID.filter( v => !(v.includes("(") || v.includes(")") || v.includes("'") || v.includes(",")) )
// 翻译结果 英文太长 进行裁剪
if (resID.length > 5) {
resID = resID.filter(v => {
return v.length > 5
})
}
resID = resID.map((v, k) => {
// 驼峰命名
if (k == 0) return v.toLowerCase()
return v.charAt(0).toUpperCase() + v.slice(1)
}).join('')
}
return resID
}
async function sleep(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, time)
})
}
const exec = async (reg, str, file) => {
let res;
// 反复调用 exec() 方法来遍历字符串中的所有匹配文本
do {
res = reg.exec(str);
if (res && res[1]) {
const f = create(file)
if (!unique.includes(res[1])) {
// let resID = await translateToID(res[1])
// await sleep(500)
let resID = pinyin(res[1],{ toneType: 'none', type: 'array' }).join('');
unique.push(res[1])
list.add(`${res[1]}.${f}`)
map[`${f.slice(22,38)}.${resID}`] = res[1]
// map[`${f}.${res[1]}`] = res[1]
}
}
} while (res)
}
async function readFile(filePath) {
try {
// 返回一个Stats对象,其中包含文件路径的详细信息
const stats = fs.statSync(filePath)
// 判断是否为文件 true false
const isFile = stats.isFile();
// 判断是否为目录 true false
const isDir = stats.isDirectory();
if (isFile) {
fileList.push(filePath)
}
if (isDir) {
await myReaddir(filePath)
}
} catch (err) {
console.log(err)
}
}
async function readFiles(dir, files, index = 0) {
if (index < files.length) {
const filePath = path.join(dir, files[index])
await readFile(filePath)
await readFiles(dir, files, index + 1)
}
}
async function myReaddir(dir) {
try {
// fsPromises.readdir 读取目录内容 返回目录中文件的名称数组(不包括 '.' 和 '..')
const files = await readdir(dir)
await readFiles(dir, files)
} catch (err) {
console.log(err)
}
}
async function generateMap(file) {
try {
// 读文件
const data = fs.readFileSync(file).toString()
await exec(reg1, data, file)
await exec(reg2, data, file)
await exec(reg3, data, file)
await exec(reg4, data, file)
await exec(reg5, data, file)
await exec(reg6, data, file)
} catch (err) {
console.log(err)
}
}
async function generate(index = 0) {
if (index < fileList.length) {
await generateMap(fileList[index])
await generate(index + 1)
}
}
async function transfer() {
const o = require('./map')
const map = Object.keys(o).reduce((obj, key) => {
obj[o[key]] = key
return obj
}, {})
const fileList = require('./fileList')
fileList.forEach(async file => {
let flag = false;
try {
const res = fs.readFileSync(file)
// const data = "import { useIntl } from 'umi';\r\n" + res.toString()
const data = res.toString()
// 注意匹配的顺序
let tData = data.replace(reg4, function (match, $1) {
flag = true;
return `={intl.formatMessage({ id: '${map[$1]}' })}`
})
tData = tData.replace(reg5, function (match, $1) {
flag = true;
return `={intl.formatMessage({ id: '${map[$1]}'})}`
})
tData = tData.replace(reg1, function (match, $1) {
flag = true;
return "`${intl.formatMessage({ id: '" + map[$1] + "'})}`"
})
tData = tData.replace(reg6, function (match, $1) {
flag = true;
return "`${intl.formatMessage({ id: '" + map[$1] + "'})}`"
})
tData = tData.replace(reg2, function (match, $1) {
flag = true;
return "`${intl.formatMessage({ id: '" + map[$1] + "'})}`"
})
tData = tData.replace(reg3, function (match, $1) {
flag = true;
return ">{ intl.formatMessage({ id: '" + map[$1] + "'}) }<"
})
if(flag) {
tData = "import { useIntl } from 'umi';\r\n" + tData
fs.writeFileSync(file, tData)
}
} catch (err) {
console.log(err)
}
})
}
async function tarverse() {
await myReaddir(path.join(__dirname, './src/pages/transaction/marketingAbility'))
// await myReaddir(path.join(__dirname, './src/pages/member/memberEvaluate'))
await generate()
fs.writeFileSync(path.join(__dirname, './list.js'), JSON.stringify(Array.from(list), null, 2))
fs.writeFileSync(path.join(__dirname, './map.js'), JSON.stringify(map, null, 2))
// string.endsWith('XXX') 是否以XXX结尾
fs.writeFileSync(path.join(__dirname, './fileList.js'), JSON.stringify(fileList.filter(file => file.endsWith('tsx') || file.endsWith('ts')), null, 2))
}
// 先执行第一个方法,生成三个文件夹
tarverse()
// 再执行第二个方法,进行umi国际化 intl.formatMessage({id:'resID'}) 替换
// transfer()
\ No newline at end of file
......@@ -406,4 +406,23 @@ export default {
'marketingAbility.shijian': '时间',
'marketingAbility.zhijiangjiageweishangpin':
'直降价格为商品价格的直降价格,如原价每件¥20.00的商品,每件降价¥2.00,则直降价格输入框中输入 ¥2.00',
'marketingAbility.haisheng59miao': '还剩 59 秒',
'marketingAbility.shuruhuiyuanming': '输入 会员名称 进行搜索',
'marketingAbility.2020nian9yuetejiacuxiao': '2020年9月特价促销活动',
'marketingAbility.jinricanyukehushu': '今日参与客户数 (人)',
'marketingAbility.jinridingdanshudan': '今日订单数 (单)',
'marketingAbility.jinrigoumaishuliang': '今日购买数量 (件)',
'marketingAbility.jinrigoumaijine': '今日购买金额 (元)',
'marketingAbility.jinkoutoucenghuangniupi': '进口头层黄牛皮荔枝纹/红色/XL',
'marketingAbility.jianxiangbizuori': '件,相比昨日',
'marketingAbility.zhizhanshiqian10ming': '只展示前 10 名数据',
'marketingAbility.WEBqiyeshangcheng': 'WEB 企业商城',
'marketingAbility.jinrizhengzaizhixinghuodong': '今日正在执行活动数量 (个)',
'marketingAbility.jinricanyuhuodongzongke': '今日参与活动总客户数 (人)',
'marketingAbility.jinrihuodongshangpinzongding': '今日活动商品总订单数量 (单)',
'marketingAbility.jinrihuodongshangpinzonggou': '今日活动商品总购买金额 (元)',
'marketingAbility.huodongshangpinliebiao': '活动商品列表 (28)',
'marketingAbility.xinhuiyuanpingtaihuiyuan': '新会员(平台会员)',
'marketingAbility.laohuiyuanpingtaihuiyuan': '老会员(平台会员)',
}
......@@ -8,6 +8,8 @@ import IMG_LEVEL1 from '@/assets/imgs/level1.png';
import IMG_LEVEL2 from '@/assets/imgs/level2.png';
import IMG_LEVEL3 from '@/assets/imgs/level3.png';
import IMG_LEVEL4 from '@/assets/imgs/level4.png';
import { getIntl} from 'umi'
const intl = getIntl();
interface ActivityUserLayoutProps {
/** 标题 */
......@@ -28,6 +30,7 @@ const PIC_MAP = {
};
const ActivityUserLayout: React.FC<ActivityUserLayoutProps> = (props: any) => {
const intl = useIntl();
const { title, isFlag, dataScoure, allUsers } = props;
const [data, setData] = useState<any>({});
const [memberLevelList, setMemberLevelList] = useState<any[]>([]);
......@@ -65,8 +68,8 @@ const ActivityUserLayout: React.FC<ActivityUserLayoutProps> = (props: any) => {
<h5 className={style.label}>{ intl.formatMessage({ id: 'marketingAbility.shiyongyonghu:'}) }</h5>
<h5 className={style.content}>
<Space>
{data.newMember && <div className={style.selector}>新会员(平台会员)</div>}
{data.oldMember && <div className={style.selector}>老会员(平台会员)</div>}
{data.newMember && <div className={style.selector}>{intl.formatMessage({ id: 'marketingAbility.xinhuiyuanpingtaihuiyuan' })}</div>}
{data.oldMember && <div className={style.selector}>{intl.formatMessage({ id: 'marketingAbility.laohuiyuanpingtaihuiyuan' })}</div>}
</Space>
</h5>
</div>
......
import { ComponentSchemaType, PROPS_SETTING_TYPES, PROPS_TYPES } from '@lingxi-design/core';
import { getIntl} from 'umi'
const intl = getIntl();
const View: ComponentSchemaType = {
propsConfig: {
children: {
label: '内容',
label: `${intl.formatMessage({ id: 'marketingAbility.neirong'})}`,
type: PROPS_TYPES.string,
}
},
......@@ -15,11 +17,11 @@ const Advertisement: ComponentSchemaType = {
type: "Advertisement" as any,
},
imageUrl: {
label: '图片链接',
label: `${intl.formatMessage({ id: 'marketingAbility.tupianlianjie'})}`,
type: PROPS_TYPES.string,
},
style: {
label: '样式',
label: `${intl.formatMessage({ id: 'marketingAbility.yangshi'})}`,
type: PROPS_TYPES.object,
}
},
......@@ -30,7 +32,7 @@ const Coupon = {
Coupon: {
propsConfig: {
children: {
label: '内容',
label: `${intl.formatMessage({ id: 'marketingAbility.neirong'})}`,
type: PROPS_TYPES.string,
},
componentType: {
......@@ -44,7 +46,7 @@ const Coupon = {
type: "CouponSetting",
},
children: {
label: '内容',
label: `${intl.formatMessage({ id: 'marketingAbility.neirong'})}`,
type: PROPS_TYPES.string,
}
},
......@@ -58,7 +60,7 @@ const MarketingCard = {
"MarketingCard.CouponsItem": {
propsConfig: {
componentType: {
label: '优惠券',
label: `${intl.formatMessage({ id: 'marketingAbility.youhuiquan'})}`,
type: PROPS_SETTING_TYPES.category
},
},
......@@ -68,7 +70,7 @@ const MarketingCard = {
const Commodity = {
propsConfig: {
children: {
label: '文本内容',
label: `${intl.formatMessage({ id: 'marketingAbility.wenbenneirong'})}`,
type: PROPS_TYPES.string,
},
},
......
import { useIntl } from 'umi';
import React, { useEffect, useState } from 'react';
import { updatePageConfig } from '@lingxi-design/react';
import DEFAULT_DATA from '../mock/index.json';
......@@ -6,6 +7,8 @@ import { usePageStatus } from '@/hooks/usePageStatus';
import { arrayToMap } from '@/utils';
import { getMarketingAdornActivityGoodsAdorn, postMarketingCouponActivityPageSelectDetail } from '@/services/MarketingV2Api';
import { getTemplateWebActivityPageGet } from '@/services/TemplateV2Api';
import { getIntl} from 'umi'
const intl = getIntl();
type DataSourceItemType = {
sort: number,
......@@ -172,10 +175,10 @@ const afterRequestFormat = {
};
const title = {
top: '广告图',
coupon: '优惠券',
hot: '活动推荐',
suggestProduct: '自定义区域'
top: `${intl.formatMessage({ id: 'marketingAbility.guanggaotu'})}`,
coupon: `${intl.formatMessage({ id: 'marketingAbility.youhuiquan'})}`,
hot: `${intl.formatMessage({ id: 'marketingAbility.huodongtuijian'})}`,
suggestProduct: `${intl.formatMessage({ id: 'marketingAbility.zidingyiquyu'})}`
};
function useGetLayout() {
......@@ -245,7 +248,7 @@ function useGetLayout() {
};
const suggestProductSonProps = _row.key === 'suggestProduct' ? {
childComponentName: `CommodityList.Item`,
addBtnText: '添加商品节点',
addBtnText: `${intl.formatMessage({ id: 'marketingAbility.tianjiashangpinjiedian'})}`,
childProps: {
otherProps: {
type: `suggestProductItem`
......@@ -254,7 +257,7 @@ function useGetLayout() {
} : {};
const childPropsData = _row.key === 'top' ? {} : {
childComponentName: `${CHILD_COMPONENT_NAME[_row.key]}`,
addBtnText: '添加子节点',
addBtnText: `${intl.formatMessage({ id: 'marketingAbility.tianjiazijiedian'})}`,
childProps: {
otherProps: {
type: _row.key === 'suggestProduct' ? 'suggestProduct' : `${_row.key}Item`
......@@ -315,7 +318,7 @@ function useGetLayout() {
},
childNodes: [],
childComponentName: `CommodityList.Item`,
addBtnText: '添加子节点',
addBtnText: `${intl.formatMessage({ id: 'marketingAbility.tianjiazijiedian'})}`,
childProps: {
otherProps: {
type: `suggestProductItem`
......@@ -364,7 +367,7 @@ function useGetLayout() {
pageConfig = {
0: {
"componentName": "MallLayout",
title: '组件树',
title: `${intl.formatMessage({ id: 'marketingAbility.zujianshu'})}`,
"props": {
"style": {
"width": "100%",
......
import { useIntl } from 'umi';
/*
* @Author: XieZhiXiong
* @Date: 2021-06-22 14:37:24
......@@ -39,7 +40,7 @@ export const querySchema: ISchema = {
id: {
type: 'string',
'x-component-props': {
placeholder: '优惠劵ID',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.youhuijuanID'})}`,
allowClear: true,
style: {
width: 160,
......
import { useIntl } from 'umi';
/*
* @Author: XieZhiXiong
* @Date: 2021-06-24 14:05:57
......@@ -176,7 +177,7 @@ const schema: ISchema = {
type: 'string',
required: true,
'x-mega-props': {
addonBefore: '每会员ID总共可领取',
addonBefore: `${intl.formatMessage({ id: 'marketingAbility.meihuiyuanIDzonggongkelingqu'})}`,
},
'x-component-props': {
allowClear: false,
......
import { useIntl } from 'umi';
/*
* @Author: XieZhiXiong
* @Date: 2021-06-23 17:41:57
......@@ -50,7 +51,7 @@ export const querySchema: ISchema = {
id: {
type: 'string',
'x-component-props': {
placeholder: '优惠劵ID',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.youhuijuanID'})}`,
allowClear: true,
},
},
......
......@@ -100,7 +100,7 @@ const ReadySubmit = () => {
title: `${intl.formatMessage({ id: 'paltformSign.operation'})}`,
key: 'state',
dataIndex: 'state',
render: (text, record) => <Popconfirm title="确定要提交吗?" okButtonProps={{ loading: confirmLoading }} disabled={!record.id} okText={intl.formatMessage({ id: 'paltformSign.is'})} cancelText={intl.formatMessage({ id: 'paltformSign.no'})} onConfirm={() => fetchSubmitBatch(record.id)}>
render: (text, record) => <Popconfirm title={intl.formatMessage({ id: 'marketingAbility.quedingyaotijiaoma?'})} okButtonProps={{ loading: confirmLoading }} disabled={!record.id} okText={intl.formatMessage({ id: 'paltformSign.is'})} cancelText={intl.formatMessage({ id: 'paltformSign.no'})} onConfirm={() => fetchSubmitBatch(record.id)}>
<Button type='link' disabled={!record.id}>{ intl.formatMessage({ id: 'paltformSign.submit'}) }</Button>
</Popconfirm>
},
......
import { getIntl} from 'umi'
const intl = getIntl();
/**
* 活动类型
*/
......@@ -40,20 +42,20 @@ export enum ACTIVITYTYPE {
* 活动类型文字
*/
export const ACTIVITYTYPENAME = {
1: "特价促销",
2: "直降促销",
3: "折扣促销",
4: "满量促销",
5: "满额促销",
6: "赠送促销",
7: "多件促销",
8: "组合促销",
9: "拼团",
10: "抽奖",
11: "砍价",
12: "秒杀",
13: "换购",
14: "预售",
15: "套餐",
16: "试用",
1: `${intl.formatMessage({ id: 'marketingAbility.tejiacuxiao'})}`,
2: `${intl.formatMessage({ id: 'marketingAbility.zhijiangcuxiao'})}`,
3: `${intl.formatMessage({ id: 'marketingAbility.zhekoucuxiao'})}`,
4: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`,
5: `${intl.formatMessage({ id: 'marketingAbility.manecuxiao'})}`,
6: `${intl.formatMessage({ id: 'marketingAbility.zengsongcuxiao'})}`,
7: `${intl.formatMessage({ id: 'marketingAbility.duojiancuxiao'})}`,
8: `${intl.formatMessage({ id: 'marketingAbility.zuhecuxiao'})}`,
9: `${intl.formatMessage({ id: 'marketingAbility.pintuan'})}`,
10: `${intl.formatMessage({ id: 'marketingAbility.choujiang'})}`,
11: `${intl.formatMessage({ id: 'marketingAbility.kanjia'})}`,
12: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
13: `${intl.formatMessage({ id: 'marketingAbility.huangou'})}`,
14: `${intl.formatMessage({ id: 'marketingAbility.yushou'})}`,
15: `${intl.formatMessage({ id: 'marketingAbility.taocan'})}`,
16: `${intl.formatMessage({ id: 'marketingAbility.shiyong'})}`,
}
import { getIntl} from 'umi'
const intl = getIntl();
export const _data = {
id: 1,
activityId: 888,
activityName: '自建营销活动管理',
activityName: `${intl.formatMessage({ id: 'marketingAbility.zijianyingxiaohuodongguanli'})}`,
marketingNo: 'XJBX888888',
externalState: 5,
externalStateName: '已结束',
externalStateName: `${intl.formatMessage({ id: 'marketingAbility.yijieshu'})}`,
interiorState: 5,
interiorStateName: '已结束',
interiorStateName: `${intl.formatMessage({ id: 'marketingAbility.yijieshu'})}`,
activityType: 1,
orderModal: '询价报价下单',
membersName: '温州龙昌手袋有限公司',
orderModal: `${intl.formatMessage({ id: 'marketingAbility.xunjiabaojiaxiadan'})}`,
membersName: `${intl.formatMessage({ id: 'marketingAbility.wenzhoulongchangshoudaiyouxiangongsi'})}`,
creationTime: 1624603001552,
activityStartTime: 1624603001552,
activityEndTime: 1624603001552,
externalLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "供应商",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "平台",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.pingtai'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "上线营销活动",
roleName: "供应商",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shangxianyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 1,
stateName: null,
},
......@@ -43,51 +45,51 @@ export const _data = {
createMemberRoleId: 11,
createTime: 1624600139800,
id: 1,
operation: "提交营销活动",
operation: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
purchaseInquiryId: 956,
roleName: "供应商",
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 2,
stateName: "待平台审核",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daipingtaishenhe'})}`,
},
{
auditOpinion: "同意",
auditOpinion: `${intl.formatMessage({ id: 'marketingAbility.tongyi'})}`,
createMemberId: 20,
createMemberRoleId: 11,
createTime: 1624600139800,
id: 2,
operation: "审核营销活动",
operation: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
purchaseInquiryId: 956,
roleName: "平台",
roleName: `${intl.formatMessage({ id: 'marketingAbility.pingtai'})}`,
state: 2,
stateName: "待上线活动",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daishangxianhuodong'})}`,
},
],
interiorLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "新增营销活动",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.xinzengyingxiaohuodong'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "审核营销活动(一级)",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong(yiji)'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动(二级)",
roleName: "运营总监",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong(erji)'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.yunyingzongjian'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "提交营销活动",
roleName: "运营人员",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.yunyingrenyuan'})}`,
state: 1,
stateName: null,
},
......@@ -98,16 +100,16 @@ export const _data = {
createMemberId: 20,
createRoleId: 11,
createTime: 1624600137942,
department: "运营人员",
department: `${intl.formatMessage({ id: 'marketingAbility.yunyingrenyuan'})}`,
id: 3968,
memberId: null,
memberRoleId: null,
operation: "新增营销活动",
position: "运营部",
operation: `${intl.formatMessage({ id: 'marketingAbility.xinzengyingxiaohuodong'})}`,
position: `${intl.formatMessage({ id: 'marketingAbility.yunyingbu'})}`,
purchaseInquiryId: 956,
roleName: "张三",
roleName: `${intl.formatMessage({ id: 'marketingAbility.zhangsan'})}`,
state: 1,
stateName: "待审核(一级)",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daishenhe(yiji)'})}`,
step: 1,
},
],
......
import { useIntl } from 'umi';
import React from 'react';
import TableLayout from '../../../components/tableLayout';
......@@ -5,50 +6,51 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ColumnType } from 'antd/lib/table/interface';
import StatusTag from '@/components/StatusTag';
const Search = () => {
const intl = useIntl();
const columns: ColumnType<any>[] = [{
title: 'ID',
dataIndex: 'id',
align: 'left',
},
{
title: '活动名称',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongmingcheng'})}`,
dataIndex: 'activityName',
align: 'left',
render: (text) =>
<span style={{ color: '#00B37A' }}>{text}</span>
},
{
title: '活动类型',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongleixing'})}`,
dataIndex: 'activityType',
align: 'left',
},
{
title: '活动开始时间',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongkaishishijian'})}`,
dataIndex: 'startTime',
align: 'left',
},
{
title: '活动结束时间',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongjieshushijian'})}`,
dataIndex: 'endTime',
align: 'left',
},
{
title: '报名时间',
title: `${intl.formatMessage({ id: 'marketingAbility.baomingshijian'})}`,
dataIndex: 'startTime',
align: 'left',
},
{
title: '参与客户数',
title: `${intl.formatMessage({ id: 'marketingAbility.canyukehushu'})}`,
dataIndex: 'id',
align: 'left',
},
{
title: '已执行订单数',
title: `${intl.formatMessage({ id: 'marketingAbility.yizhixingdingdanshu'})}`,
dataIndex: 'id',
align: 'left',
},
{
title: '外部状态',
title: `${intl.formatMessage({ id: 'marketingAbility.waibuzhuangtai'})}`,
dataIndex: 'outerStatus',
align: 'left',
render: (text) => (
......@@ -56,7 +58,7 @@ const Search = () => {
)
},
{
title: '内部状态',
title: `${intl.formatMessage({ id: 'marketingAbility.neibuzhuangtai'})}`,
dataIndex: 'innerStatus',
align: 'left',
}]
......@@ -64,29 +66,29 @@ const Search = () => {
{
id: '1',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
},
{
id: '2',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
},
{
id: '3',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
}
]
/* 多选返回的 */
......@@ -119,8 +121,8 @@ const Search = () => {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
tip: '输入 会员名称 进行搜索',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.sousuo'})}`,
tip: intl.formatMessage({ id: 'marketingAbility.shuruhuiyuanming' }),
},
},
},
......@@ -137,7 +139,7 @@ const Search = () => {
subject: {
type: 'string',
'x-component-props': {
placeholder: '考评主题',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.kaopingzhuti'})}`,
allowClear: true,
style: {
width: 160,
......@@ -147,7 +149,7 @@ const Search = () => {
'[appraisalDayStart,appraisalDayEnd]': {
type: 'daterange',
'x-component-props': {
placeholder: ['考评开始时间', '考评完成时间'],
placeholder: [`${intl.formatMessage({ id: 'marketingAbility.kaopingkaishishijian'})}`, `${intl.formatMessage({ id: 'marketingAbility.kaopingwanchengshijian'})}`],
allowClear: true,
style: {
width: 240,
......@@ -159,7 +161,7 @@ const Search = () => {
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.neibuzhuangtai(quanbu)'})}`,
allowClear: true,
style: {
width: 160,
......@@ -173,7 +175,7 @@ const Search = () => {
span: 1,
},
'x-component-props': {
children: '查询',
children: `${intl.formatMessage({ id: 'marketingAbility.chaxun'})}`,
},
},
},
......
......@@ -2,15 +2,17 @@ import React from 'react';
import { Row, Col, Typography } from 'antd';
import style from './index.less';
import { BellOutlined, CheckCircleOutlined, ClockCircleOutlined, StockOutlined } from '@ant-design/icons';
import { useIntl} from 'umi'
const ActivityLayout = () => {
const intl = useIntl();
return (
<Row gutter={[16, 16]}>
<Col xl={{ span: 6 }} span={12}>
<div className={style.col}>
<div className={style.col_20}>
<Typography.Title level={4}>10</Typography.Title>
<Typography.Text type='secondary'>今日正在执行活动数量 (个)</Typography.Text>
<Typography.Text type='secondary'>{intl.formatMessage({ id: 'marketingAbility.jinrizhengzaizhixinghuodong' })}</Typography.Text>
</div>
<div className={style.col_4}>
<div className={style.col_icon} style={{ backgroundColor: '#00A98F' }}>
......@@ -23,7 +25,7 @@ const ActivityLayout = () => {
<div className={style.col}>
<div className={style.col_20}>
<Typography.Title level={4}>100</Typography.Title>
<Typography.Text type='secondary'>今日参与活动总客户数 (人)</Typography.Text>
<Typography.Text type='secondary'>{intl.formatMessage({ id: 'marketingAbility.jinricanyuhuodongzongke' })}</Typography.Text>
</div>
<div className={style.col_4}>
<div className={style.col_icon} style={{ backgroundColor: '#007BFC' }}>
......@@ -36,7 +38,7 @@ const ActivityLayout = () => {
<div className={style.col}>
<div className={style.col_20}>
<Typography.Title level={4}>100</Typography.Title>
<Typography.Text type='secondary'>今日活动商品总订单数量 (单)</Typography.Text>
<Typography.Text type='secondary'>{intl.formatMessage({ id: 'marketingAbility.jinrihuodongshangpinzongding' })}</Typography.Text>
</div>
<div className={style.col_4}>
<div className={style.col_icon} style={{ backgroundColor: '#EB9B00' }}>
......@@ -49,7 +51,7 @@ const ActivityLayout = () => {
<div className={style.col}>
<div className={style.col_20}>
<Typography.Title level={4}>10,000.00</Typography.Title>
<Typography.Text type='secondary'>今日活动商品总购买金额 (元)</Typography.Text>
<Typography.Text type='secondary'>{intl.formatMessage({ id: 'marketingAbility.jinrihuodongshangpinzonggou' })}</Typography.Text>
</div>
<div className={style.col_4}>
<div className={style.col_icon} style={{ backgroundColor: '#EF3346' }}>
......
......@@ -2,11 +2,13 @@ import React from 'react';
import { Row, Col, Image } from 'antd';
import style from './index.less';
import CardLayout from '../../../selfManagement/readySubmitExamine/components/card';
import { useIntl} from 'umi'
const ActivityProductList = () => {
const intl = useIntl();
return (
<CardLayout
title='活动商品列表 (28)'
title={intl.formatMessage({ id: 'marketingAbility.huodongshangpinliebiao' })}
id='activityProductList'
weight
classNames={style.cardLayout}
......@@ -18,7 +20,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......@@ -29,7 +31,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......@@ -40,7 +42,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......@@ -51,7 +53,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......@@ -62,7 +64,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......@@ -73,7 +75,7 @@ const ActivityProductList = () => {
<Image width={32} height={32} src='https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png' />
</div>
<div className={style.product_item}>
<h5 className={style.product_item_title}>进口头层黄牛皮荔枝纹/红色/XL</h5>
<h5 className={style.product_item_title}>{intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupili' })}</h5>
<span className={style.product_item_progress}>50%</span>
</div>
</div>
......
import { useIntl } from 'umi';
import React, { useState } from 'react';
import { Progress } from 'antd';
import style from './index.less';
const ActivityTypeLayout = () => {
const [dataSource, setDataSource] = useState([1, 2, 3, 4])
const intl = useIntl();
return (
<div className={style.list_box}>
<div className={style.list_items} style={{ width: dataSource.length * 320 + 'px' }}>
{dataSource.map(item => (
<div className={style.list_item_row} key={item}>
<span className={style.list_item_tag}>特价促销</span>
<h5 className={style.list_item_title}>2020年9月特价促销活动</h5>
<span className={style.list_item_tag}>{ intl.formatMessage({ id: 'marketingAbility.tejiacuxiao'}) }</span>
<h5 className={style.list_item_title}>{intl.formatMessage({ id: 'marketingAbility.2020nian9yuetejiacuxiao' })}</h5>
<div className={style.list_item_date}>2020-09-01 10:00:00 ~ 2020-10-01 10:00:00</div>
<Progress percent={80} format={(percent) => percent + '%'} />
</div>
......
import { useIntl } from 'umi';
import React from 'react';
import { Row, Col, Badge, Space, Divider, Typography } from 'antd';
import CardLayout from '../../../selfManagement/readySubmitExamine/components/card';
......@@ -12,22 +13,23 @@ interface AnalysisLayoutProps {
const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
const { title } = props;
const intl = useIntl();
const data = [
{
type: "新用户",
type: `${intl.formatMessage({ id: 'marketingAbility.xinyonghu'})}`,
value: 27,
},
{
type: "老用户",
type: `${intl.formatMessage({ id: 'marketingAbility.laoyonghu'})}`,
value: 25,
},
{
type: "新会员",
type: `${intl.formatMessage({ id: 'marketingAbility.xinhuiyuan'})}`,
value: 18,
},
{
type: "老会员",
type: `${intl.formatMessage({ id: 'marketingAbility.laohuiyuan'})}`,
value: 15,
},
];
......@@ -58,7 +60,7 @@ const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
statistic={{
title: {
formatter: (text) => {
return '用户总数'
return `${intl.formatMessage({ id: 'marketingAbility.yonghuzongshu'})}`
},
offsetY: -10,
style: {
......@@ -84,7 +86,7 @@ const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
<Row gutter={[16, 16]} style={{ marginTop: '26px' }}>
<Col span={12}>
<Space size={12}>
<Badge color='#00A98F' text='新用户' />
<Badge color='#00A98F' text={intl.formatMessage({ id: 'marketingAbility.xinyonghu' })} />
<Divider type="vertical" />
<Typography.Text type='secondary'>20%</Typography.Text>
<Typography.Text>12</Typography.Text>
......@@ -92,7 +94,7 @@ const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
</Col>
<Col span={12}>
<Space size={12}>
<Badge color='#EB9B00' text='新会员' />
<Badge color='#EB9B00' text={intl.formatMessage({ id: 'marketingAbility.xinhuiyuan' })} />
<Divider type="vertical" />
<Typography.Text type='secondary'>20%</Typography.Text>
<Typography.Text>12</Typography.Text>
......@@ -100,7 +102,7 @@ const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
</Col>
<Col span={12}>
<Space size={12}>
<Badge color='#007BFC' text='老用户' />
<Badge color='#007BFC' text={intl.formatMessage({ id: 'marketingAbility.laoyonghu' })} />
<Divider type="vertical" />
<Typography.Text type='secondary'>20%</Typography.Text>
<Typography.Text>12</Typography.Text>
......@@ -108,7 +110,7 @@ const AnalysisLayout: React.FC<AnalysisLayoutProps> = (props: any) => {
</Col>
<Col span={12}>
<Space size={12}>
<Badge color='#EF3346' text='老会员' />
<Badge color='#EF3346' text={intl.formatMessage({ id: 'marketingAbility.laohuiyuan' })} />
<Divider type="vertical" />
<Typography.Text type='secondary'>20%</Typography.Text>
<Typography.Text>12</Typography.Text>
......
import { useIntl } from 'umi';
import React from 'react';
import { Radio, Badge, Space } from 'antd';
import { Axis, Chart, LineAdvance } from 'bizcharts';
......@@ -15,6 +16,7 @@ interface ChartLineAdvanceProps {
}
const ChartLineAdvance: React.FC<ChartLineAdvanceProps> = (props: any) => {
const intl = useIntl();
const { title, type = 'lineAdvance' } = props;
const scale = {
count: {
......@@ -128,14 +130,14 @@ const ChartLineAdvance: React.FC<ChartLineAdvanceProps> = (props: any) => {
const extraButtonType = <Space>
{type === 'lineInterval' && (
<>
<Badge color='green' text='购买金额' />
<Badge color='blue' text='订单数量' />
<Badge color='green' text={intl.formatMessage({ id: 'marketingAbility.goumaijine' })} />
<Badge color='blue' text={intl.formatMessage({ id: 'marketingAbility.dingdanshuliang' })} />
</>
)}
<Radio.Group defaultValue={1} size="small">
<Radio.Button value={1}>今日</Radio.Button>
<Radio.Button value={2}>最近7日</Radio.Button>
<Radio.Button value={3}>全部</Radio.Button>
<Radio.Button value={1}>{ intl.formatMessage({ id: 'marketingAbility.jinri'}) }</Radio.Button>
<Radio.Button value={2}>{ intl.formatMessage({ id: 'marketingAbility.zuijin7ri'}) }</Radio.Button>
<Radio.Button value={3}>{ intl.formatMessage({ id: 'marketingAbility.quanbu'}) }</Radio.Button>
</Radio.Group>
</Space>
......
import { useIntl } from 'umi';
import React from 'react';
import { Row, Col } from 'antd';
import style from './index.less';
......@@ -5,16 +6,17 @@ import CardLayout from '../../../selfManagement/readySubmitExamine/components/ca
import { CaretUpOutlined } from '@ant-design/icons';
const DataLayout = () => {
const intl = useIntl();
return (
<CardLayout
weight
title='当前商品数据'
title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinshuju' })}
classNames={style.cardLayout}
>
<Row gutter={[16, 16]}>
<Col xl={{ span: 6 }} span={12}>
<div className={style.dataLayout_wrap}>
<h5 className={style.dataLayout_wran}>今日参与客户数 (人)</h5>
<h5 className={style.dataLayout_wran}>{intl.formatMessage({ id: 'marketingAbility.jinricanyukehushu' })}</h5>
<div className={style.dataLayout_item}>
<h4 className={style.dataLayout_num}>10</h4>
<div className={style.dataLayout_value}><CaretUpOutlined className={style.info_icon_style} />25%</div>
......@@ -23,7 +25,7 @@ const DataLayout = () => {
</Col>
<Col xl={{ span: 6 }} span={12}>
<div className={style.dataLayout_wrap}>
<h5 className={style.dataLayout_wran}>今日订单数 (单)</h5>
<h5 className={style.dataLayout_wran}>{intl.formatMessage({ id: 'marketingAbility.jinridingdanshudan' })}</h5>
<div className={style.dataLayout_item}>
<h4 className={style.dataLayout_num}>10</h4>
<div className={style.dataLayout_value}><CaretUpOutlined className={style.info_icon_style} />25%</div>
......@@ -32,7 +34,7 @@ const DataLayout = () => {
</Col>
<Col xl={{ span: 6 }} span={12}>
<div className={style.dataLayout_wrap}>
<h5 className={style.dataLayout_wran}>今日购买数量 (件)</h5>
<h5 className={style.dataLayout_wran}>{intl.formatMessage({ id: 'marketingAbility.jinrigoumaishuliang' })}</h5>
<div className={style.dataLayout_item}>
<h4 className={style.dataLayout_num}>200</h4>
<div className={style.dataLayout_value}><CaretUpOutlined className={style.info_icon_style} />25%</div>
......@@ -41,7 +43,7 @@ const DataLayout = () => {
</Col>
<Col xl={{ span: 6 }} span={12}>
<div className={style.dataLayout_wrap}>
<h5 className={style.dataLayout_wran}>今日购买金额 (元)</h5>
<h5 className={style.dataLayout_wran}>{intl.formatMessage({ id: 'marketingAbility.jinrigoumaijine' })}</h5>
<div className={style.dataLayout_item}>
<h4 className={style.dataLayout_num}>1,000.00</h4>
<div className={style.dataLayout_value}><CaretUpOutlined className={style.info_icon_style} />25%</div>
......
import { useIntl } from 'umi';
import React from 'react';
import { Typography, Image } from 'antd';
import style from './index.less';
......@@ -11,22 +12,23 @@ interface ProductListLayoutProps {
}
const ProductListLayout: React.FC<ProductListLayoutProps> = (props: any) => {
const intl = useIntl();
const { title, dataSource } = props;
const data = [
{ sort: 1, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 2, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 3, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 4, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 5, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 6, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 7, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 8, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 9, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 10, name: '进口头层黄牛皮荔枝纹/红色/XL', tag: '满量促销', img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 1, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 2, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 3, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 4, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 5, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 6, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 7, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 8, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 9, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
{ sort: 10, name: intl.formatMessage({ id: 'marketingAbility.jinkoutoucenghuangniupi' }), tag: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`, img: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', number: '300', percentum: '25' },
]
return (
<div className={style.card}>
<div className={style.card_title}>今日活动商品购买排名</div>
<div className={style.card_title}>{ intl.formatMessage({ id: 'marketingAbility.jinrihuodongshangpingoumaipaiming'}) }</div>
<div className={style.card_list}>
{data.map(item => (
<div className={style.card_list_item} key={item.sort}>
......@@ -39,14 +41,14 @@ const ProductListLayout: React.FC<ProductListLayoutProps> = (props: any) => {
<div className={style.card_list_item_info}>
<Typography.Paragraph ellipsis={{ rows: 1, expandable: false }}>{item.name}</Typography.Paragraph>
<div>
<Typography.Text type="secondary">{item.number}件,相比昨日</Typography.Text>
<Typography.Text type="secondary">{item.number}{intl.formatMessage({ id: 'marketingAbility.jianxiangbizuori' })}</Typography.Text>
<Typography.Text type="danger"><CaretUpOutlined className={style.info_icon_style} />{item.percentum}%</Typography.Text>
</div>
</div>
<div className={style.card_list_item_tag}>{item.tag}</div>
</div>
))}
<Typography.Text className={style.card_list_wran} type='secondary'>只展示前 10 名数据</Typography.Text>
<Typography.Text className={style.card_list_wran} type='secondary'>{intl.formatMessage({ id: 'marketingAbility.zhizhanshiqian10ming' })}</Typography.Text>
</div>
</div>
)
......
import { useIntl } from 'umi';
import React from 'react';
import { Row, Col, Space, Avatar, Typography } from 'antd';
import CardLayout from '../../../selfManagement/readySubmitExamine/components/card';
import style from './index.less';
const SourceLayout = () => {
const intl = useIntl();
return (
<CardLayout
title='当前商品用户来源分析'
title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinyonghulaiyuanfenxi' })}
weight
classNames={style.cardLayout}
>
......@@ -18,11 +20,11 @@ const SourceLayout = () => {
<Avatar shape="square" size={32}>Logo</Avatar>
</div>
<div className={style.sourceLayout_content}>
<div className={style.sourceLayout_content_title}>WEB 企业商城</div>
<div className={style.sourceLayout_content_title}>{intl.formatMessage({ id: 'marketingAbility.WEBqiyeshangcheng' })}</div>
<div className={style.sourceLayout_content_data}>
<Space>
<Typography.Text type='success'>15%</Typography.Text>
<Typography.Text type='secondary'>456</Typography.Text>
<Typography.Text type='secondary'>456{intl.formatMessage({ id: 'marketingAbility.ren' })}</Typography.Text>
</Space>
</div>
</div>
......@@ -36,7 +38,7 @@ const SourceLayout = () => {
<Avatar shape="square" size={32}>Logo</Avatar>
</div>
<div className={style.sourceLayout_content}>
<div className={style.sourceLayout_content_title}>WEB 企业商城</div>
<div className={style.sourceLayout_content_title}>{intl.formatMessage({ id: 'marketingAbility.WEBqiyeshangcheng' })}</div>
<div className={style.sourceLayout_content_data}>
<Space>
<Typography.Text type='success'>15%</Typography.Text>
......@@ -54,11 +56,11 @@ const SourceLayout = () => {
<Avatar shape="square" size={32}>Logo</Avatar>
</div>
<div className={style.sourceLayout_content}>
<div className={style.sourceLayout_content_title}>WEB 企业商城</div>
<div className={style.sourceLayout_content_title}>{intl.formatMessage({ id: 'marketingAbility.WEBqiyeshangcheng' })}</div>
<div className={style.sourceLayout_content_data}>
<Space>
<Typography.Text type='success'>15%</Typography.Text>
<Typography.Text type='secondary'>456</Typography.Text>
<Typography.Text type='secondary'>456{intl.formatMessage({ id: 'marketingAbility.ren' })}</Typography.Text>
</Space>
</div>
</div>
......@@ -72,11 +74,11 @@ const SourceLayout = () => {
<Avatar shape="square" size={32}>Logo</Avatar>
</div>
<div className={style.sourceLayout_content}>
<div className={style.sourceLayout_content_title}>WEB 企业商城</div>
<div className={style.sourceLayout_content_title}>{intl.formatMessage({ id: 'marketingAbility.WEBqiyeshangcheng' })}</div>
<div className={style.sourceLayout_content_data}>
<Space>
<Typography.Text type='success'>15%</Typography.Text>
<Typography.Text type='secondary'>456</Typography.Text>
<Typography.Text type='secondary'>456{intl.formatMessage({ id: 'marketingAbility.ren' })}</Typography.Text>
</Space>
</div>
</div>
......
import { useIntl } from 'umi';
import React from 'react';
import { Row, Col, Card } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
......@@ -11,6 +12,7 @@ import SourceLayout from './components/sourceLayout';
import AnalysisLayout from './components/analysisLayout';
const SelfManagementMonitor = () => {
const intl = useIntl();
return (
<PageHeaderWrapper>
<ActivityLayout />
......@@ -19,17 +21,17 @@ const SelfManagementMonitor = () => {
<ActivityTypeLayout />
<ActivityProductList />
<DataLayout />
<ChartLineAdvance title='当前商品客户趋势分析' />
<ChartLineAdvance title='当前商品活动效果趋势分析' type='lineInterval' />
<ChartLineAdvance title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinkehuqushifenxi' })} />
<ChartLineAdvance title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinhuodongxiaoguoqushifenxi' })} type='lineInterval' />
<Row gutter={[16, 16]}>
<Col span={8}>
<SourceLayout />
</Col>
<Col span={8}>
<AnalysisLayout title='当前商品用户类型分析' />
<AnalysisLayout title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinyonghuleixingfenxi' })} />
</Col>
<Col span={8}>
<AnalysisLayout title='当前商品会员等级分析' />
<AnalysisLayout title={intl.formatMessage({ id: 'marketingAbility.dangqianshangpinhuiyuandengjifenxi' })} />
</Col>
</Row>
</Col>
......
import { getIntl} from 'umi'
const intl = getIntl();
/**
* 活动类型
*/
......@@ -40,20 +42,20 @@ export enum ACTIVITYTYPE {
* 活动类型文字
*/
export const ACTIVITYTYPENAME = {
1: "特价促销",
2: "直降促销",
3: "折扣促销",
4: "满量促销",
5: "满额促销",
6: "赠送促销",
7: "多件促销",
8: "组合促销",
9: "拼团",
10: "抽奖",
11: "砍价",
12: "秒杀",
13: "换购",
14: "预售",
15: "套餐",
16: "试用",
1: `${intl.formatMessage({ id: 'marketingAbility.tejiacuxiao'})}`,
2: `${intl.formatMessage({ id: 'marketingAbility.zhijiangcuxiao'})}`,
3: `${intl.formatMessage({ id: 'marketingAbility.zhekoucuxiao'})}`,
4: `${intl.formatMessage({ id: 'marketingAbility.manliangcuxiao'})}`,
5: `${intl.formatMessage({ id: 'marketingAbility.manecuxiao'})}`,
6: `${intl.formatMessage({ id: 'marketingAbility.zengsongcuxiao'})}`,
7: `${intl.formatMessage({ id: 'marketingAbility.duojiancuxiao'})}`,
8: `${intl.formatMessage({ id: 'marketingAbility.zuhecuxiao'})}`,
9: `${intl.formatMessage({ id: 'marketingAbility.pintuan'})}`,
10: `${intl.formatMessage({ id: 'marketingAbility.choujiang'})}`,
11: `${intl.formatMessage({ id: 'marketingAbility.kanjia'})}`,
12: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
13: `${intl.formatMessage({ id: 'marketingAbility.huangou'})}`,
14: `${intl.formatMessage({ id: 'marketingAbility.yushou'})}`,
15: `${intl.formatMessage({ id: 'marketingAbility.taocan'})}`,
16: `${intl.formatMessage({ id: 'marketingAbility.shiyong'})}`,
}
import { getIntl} from 'umi'
const intl = getIntl();
export const _data = {
id: 1,
activityId: 888,
activityName: '自建营销活动管理',
activityName: `${intl.formatMessage({ id: 'marketingAbility.zijianyingxiaohuodongguanli'})}`,
marketingNo: 'XJBX888888',
externalState: 5,
externalStateName: '已结束',
externalStateName: `${intl.formatMessage({ id: 'marketingAbility.yijieshu'})}`,
interiorState: 5,
interiorStateName: '已结束',
interiorStateName: `${intl.formatMessage({ id: 'marketingAbility.yijieshu'})}`,
activityType: 1,
orderModal: '询价报价下单',
membersName: '温州龙昌手袋有限公司',
orderModal: `${intl.formatMessage({ id: 'marketingAbility.xunjiabaojiaxiadan'})}`,
membersName: `${intl.formatMessage({ id: 'marketingAbility.wenzhoulongchangshoudaiyouxiangongsi'})}`,
creationTime: 1624603001552,
activityStartTime: 1624603001552,
activityEndTime: 1624603001552,
externalLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "供应商",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "平台",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.pingtai'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "上线营销活动",
roleName: "供应商",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shangxianyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 1,
stateName: null,
},
......@@ -43,51 +45,51 @@ export const _data = {
createMemberRoleId: 11,
createTime: 1624600139800,
id: 1,
operation: "提交营销活动",
operation: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
purchaseInquiryId: 956,
roleName: "供应商",
roleName: `${intl.formatMessage({ id: 'marketingAbility.gongyingshang'})}`,
state: 2,
stateName: "待平台审核",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daipingtaishenhe'})}`,
},
{
auditOpinion: "同意",
auditOpinion: `${intl.formatMessage({ id: 'marketingAbility.tongyi'})}`,
createMemberId: 20,
createMemberRoleId: 11,
createTime: 1624600139800,
id: 2,
operation: "审核营销活动",
operation: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
purchaseInquiryId: 956,
roleName: "平台",
roleName: `${intl.formatMessage({ id: 'marketingAbility.pingtai'})}`,
state: 2,
stateName: "待上线活动",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daishangxianhuodong'})}`,
},
],
interiorLogStates: [
{
isExecute: 1,
operationalProcess: "提交营销活动",
roleName: "新增营销活动",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.xinzengyingxiaohuodong'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动",
roleName: "审核营销活动(一级)",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong(yiji)'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "审核营销活动(二级)",
roleName: "运营总监",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.shenheyingxiaohuodong(erji)'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.yunyingzongjian'})}`,
state: 1,
stateName: null,
},
{
isExecute: 0,
operationalProcess: "提交营销活动",
roleName: "运营人员",
operationalProcess: `${intl.formatMessage({ id: 'marketingAbility.tijiaoyingxiaohuodong'})}`,
roleName: `${intl.formatMessage({ id: 'marketingAbility.yunyingrenyuan'})}`,
state: 1,
stateName: null,
},
......@@ -98,16 +100,16 @@ export const _data = {
createMemberId: 20,
createRoleId: 11,
createTime: 1624600137942,
department: "运营人员",
department: `${intl.formatMessage({ id: 'marketingAbility.yunyingrenyuan'})}`,
id: 3968,
memberId: null,
memberRoleId: null,
operation: "新增营销活动",
position: "运营部",
operation: `${intl.formatMessage({ id: 'marketingAbility.xinzengyingxiaohuodong'})}`,
position: `${intl.formatMessage({ id: 'marketingAbility.yunyingbu'})}`,
purchaseInquiryId: 956,
roleName: "张三",
roleName: `${intl.formatMessage({ id: 'marketingAbility.zhangsan'})}`,
state: 1,
stateName: "待审核(一级)",
stateName: `${intl.formatMessage({ id: 'marketingAbility.daishenhe(yiji)'})}`,
step: 1,
},
],
......
import { useIntl } from 'umi';
import React from 'react';
import TableLayout from '../../../components/tableLayout';
......@@ -5,50 +6,51 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
import { ColumnType } from 'antd/lib/table/interface';
import StatusTag from '@/components/StatusTag';
const Search = () => {
const intl = useIntl();
const columns: ColumnType<any>[] = [{
title: 'ID',
dataIndex: 'id',
align: 'left',
},
{
title: '活动名称',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongmingcheng'})}`,
dataIndex: 'activityName',
align: 'left',
render: (text) =>
<span style={{ color: '#00B37A' }}>{text}</span>
},
{
title: '活动类型',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongleixing'})}`,
dataIndex: 'activityType',
align: 'left',
},
{
title: '活动开始时间',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongkaishishijian'})}`,
dataIndex: 'startTime',
align: 'left',
},
{
title: '活动结束时间',
title: `${intl.formatMessage({ id: 'marketingAbility.huodongjieshushijian'})}`,
dataIndex: 'endTime',
align: 'left',
},
{
title: '报名时间',
title: `${intl.formatMessage({ id: 'marketingAbility.baomingshijian'})}`,
dataIndex: 'startTime',
align: 'left',
},
{
title: '参与客户数',
title: `${intl.formatMessage({ id: 'marketingAbility.canyukehushu'})}`,
dataIndex: 'id',
align: 'left',
},
{
title: '已执行订单数',
title: `${intl.formatMessage({ id: 'marketingAbility.yizhixingdingdanshu'})}`,
dataIndex: 'id',
align: 'left',
},
{
title: '外部状态',
title: `${intl.formatMessage({ id: 'marketingAbility.waibuzhuangtai'})}`,
dataIndex: 'outerStatus',
align: 'left',
render: (text) => (
......@@ -56,7 +58,7 @@ const Search = () => {
)
},
{
title: '内部状态',
title: `${intl.formatMessage({ id: 'marketingAbility.neibuzhuangtai'})}`,
dataIndex: 'innerStatus',
align: 'left',
}]
......@@ -64,29 +66,29 @@ const Search = () => {
{
id: '1',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
},
{
id: '2',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
},
{
id: '3',
activityName: 'tony',
activityType: '秒杀',
activityType: `${intl.formatMessage({ id: 'marketingAbility.miaosha'})}`,
startTime: '2020-05-12 08:08',
endTime: '还剩 59 秒',
outerStatus: "待提交报平台审核",
innerStatus: '待提交审核',
endTime: intl.formatMessage({ id: 'marketingAbility.haisheng59miao' }),
outerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaobaopingtaishenhe'})}`,
innerStatus: `${intl.formatMessage({ id: 'marketingAbility.daitijiaoshenhe'})}`,
}
]
/* 多选返回的 */
......@@ -119,8 +121,8 @@ const Search = () => {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
tip: '输入 会员名称 进行搜索',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.sousuo'})}`,
tip: intl.formatMessage({ id: 'marketingAbility.shuruhuiyuanming' }),
},
},
},
......@@ -137,7 +139,7 @@ const Search = () => {
subject: {
type: 'string',
'x-component-props': {
placeholder: '考评主题',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.kaopingzhuti'})}`,
allowClear: true,
style: {
width: 160,
......@@ -147,7 +149,7 @@ const Search = () => {
'[appraisalDayStart,appraisalDayEnd]': {
type: 'daterange',
'x-component-props': {
placeholder: ['考评开始时间', '考评完成时间'],
placeholder: [`${intl.formatMessage({ id: 'marketingAbility.kaopingkaishishijian'})}`, `${intl.formatMessage({ id: 'marketingAbility.kaopingwanchengshijian'})}`],
allowClear: true,
style: {
width: 240,
......@@ -159,7 +161,7 @@ const Search = () => {
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
placeholder: `${intl.formatMessage({ id: 'marketingAbility.neibuzhuangtai(quanbu)'})}`,
allowClear: true,
style: {
width: 160,
......@@ -173,7 +175,7 @@ const Search = () => {
span: 1,
},
'x-component-props': {
children: '查询',
children: `${intl.formatMessage({ id: 'marketingAbility.chaxun'})}`,
},
},
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment