1.1
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@
|
|||||||
"dragula": "^3.7.2",
|
"dragula": "^3.7.2",
|
||||||
"driver.js": "0.9.5",
|
"driver.js": "0.9.5",
|
||||||
"dropzone": "5.5.1",
|
"dropzone": "5.5.1",
|
||||||
"echarts": "4.2.1",
|
"echarts": "^4.2.1",
|
||||||
"element-ui": "2.12.0",
|
"element-ui": "2.12.0",
|
||||||
"file-saver": "2.0.1",
|
"file-saver": "2.0.1",
|
||||||
"fuse.js": "3.4.4",
|
"fuse.js": "3.4.4",
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import axiosApi from './AxiosApi.js'
|
||||||
|
|
||||||
|
const apiList = {
|
||||||
|
addPromotion: `/authority/promotion`
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
addPromotion(data) {
|
||||||
|
return axiosApi({
|
||||||
|
method: 'POST',
|
||||||
|
url: apiList.addPromotion,
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,11 +52,11 @@
|
|||||||
placeholder="请输入生效日期"
|
placeholder="请输入生效日期"
|
||||||
/>
|
/>
|
||||||
</form-item>
|
</form-item>
|
||||||
<form-item label="生效时限" prop="expireLimitYear">
|
<form-item label="生效时限(年)" prop="expireLimitYear">
|
||||||
<Input
|
<Input
|
||||||
v-model="formParams.expireLimitYear"
|
v-model="formParams.expireLimitYear"
|
||||||
size="medium"
|
size="medium"
|
||||||
placeholder="请输入生效日期"
|
placeholder="请输入生效时限"
|
||||||
maxlength="4"
|
maxlength="4"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
clearable
|
clearable
|
||||||
@@ -234,19 +234,20 @@ export default {
|
|||||||
this.$refs.addForm && this.$refs.addForm.resetFields()
|
this.$refs.addForm && this.$refs.addForm.resetFields()
|
||||||
},
|
},
|
||||||
async addManagement() {
|
async addManagement() {
|
||||||
this.addLoading = true
|
const vm = this
|
||||||
const res = await Management.addTenant(this.formParams).then(() => {
|
vm.addLoading = true
|
||||||
this.addLoading = false
|
Management.addTenant(vm.formParams).then((res) => {
|
||||||
})
|
vm.addLoading = false
|
||||||
const resData = res.data
|
// const resData = res.data
|
||||||
this.addLoading = false
|
vm.addLoading = false
|
||||||
if (resData.code === 0) {
|
// if (resData.code === 0) {
|
||||||
this.resetForm()
|
vm.resetForm()
|
||||||
this.$message({
|
vm.$message({
|
||||||
message: '创建成功!',
|
message: '创建成功!',
|
||||||
type: 'success'
|
type: 'success'
|
||||||
})
|
})
|
||||||
}
|
// }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
<template>
|
||||||
|
<div class="full-size">
|
||||||
|
<div
|
||||||
|
ref="myEchart"
|
||||||
|
class="full-size"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import echarts from 'echarts'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
chartData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
chartData: {
|
||||||
|
deep: true,
|
||||||
|
handler (newVal) {
|
||||||
|
this.chartData = newVal
|
||||||
|
this.draw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.draw()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
draw () {
|
||||||
|
const myEchart = echarts.init(this.$refs.myEchart, 'light')
|
||||||
|
const o = this.chartData
|
||||||
|
// y轴设置
|
||||||
|
const y = Object.assign(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
name: '金额/万元',
|
||||||
|
nameLocation: 'end',
|
||||||
|
nameTextStyle: {
|
||||||
|
color: '#999999',
|
||||||
|
fontSize: 14,
|
||||||
|
padding: [0, 10, -5, 0]
|
||||||
|
|
||||||
|
},
|
||||||
|
type: 'value',
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
color: 'rgba(163,167,174,0.5)',
|
||||||
|
type: 'dotted'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
lineStyle: {
|
||||||
|
color: '#E0E5EB'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
color: '#999999',
|
||||||
|
fontSize: 14
|
||||||
|
},
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
o.yAxis
|
||||||
|
)
|
||||||
|
const option = {
|
||||||
|
// 图标的位置
|
||||||
|
grid: {
|
||||||
|
top: '15%',
|
||||||
|
bottom: '15%',
|
||||||
|
left: '10%'
|
||||||
|
},
|
||||||
|
// x轴
|
||||||
|
xAxis: {
|
||||||
|
name: '时间',
|
||||||
|
nameLocation: 'end',
|
||||||
|
nameTextStyle: {
|
||||||
|
color: '#999999',
|
||||||
|
fontSize: 14,
|
||||||
|
padding: [0, 0, 0, -10]
|
||||||
|
|
||||||
|
},
|
||||||
|
data: o.xData,
|
||||||
|
axisLabel: {
|
||||||
|
color: '#999999',
|
||||||
|
fontSize: 14
|
||||||
|
},
|
||||||
|
axisTick: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
lineStyle: {
|
||||||
|
color: '#E0E5EB'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// y轴
|
||||||
|
yAxis: y,
|
||||||
|
// 柱状图和线状图数据展示
|
||||||
|
series: o.series
|
||||||
|
}
|
||||||
|
myEchart.setOption(option)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<template>
|
||||||
|
<div class="full-size">
|
||||||
|
<div
|
||||||
|
ref="myEchart"
|
||||||
|
class="full-size"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import echarts from 'echarts'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
chartData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
chartData: {
|
||||||
|
deep: true,
|
||||||
|
handler (newVal) {
|
||||||
|
this.chartData = newVal
|
||||||
|
this.draw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.draw()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
draw () {
|
||||||
|
const myEchart = echarts.init(this.$refs.myEchart, 'light')
|
||||||
|
const o = this.chartData
|
||||||
|
|
||||||
|
const option = {
|
||||||
|
color: ['#3A68F2', '#DEDEDE'],
|
||||||
|
series: [
|
||||||
|
Object.assign({}, {
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['45%', '60%'],
|
||||||
|
center: ['50%', '55%'],
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: true,
|
||||||
|
formatter: function (p) {
|
||||||
|
// const t = o.lineBreak ? '\n' : ' '
|
||||||
|
// ${p.value + o.unit}
|
||||||
|
return `{a|${p.name}}{b| ${p.percent}%}`
|
||||||
|
},
|
||||||
|
rich: {
|
||||||
|
a: {
|
||||||
|
color: '#666666',
|
||||||
|
fontSize: 16
|
||||||
|
},
|
||||||
|
b: {
|
||||||
|
color: '#666666',
|
||||||
|
fontSize: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}, o.series),
|
||||||
|
o.firstSeries || ''
|
||||||
|
]
|
||||||
|
}
|
||||||
|
myEchart.setOption(option)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,225 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="usermap" class="full-size"></div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import map from './geo'
|
||||||
|
import echarts from 'echarts'
|
||||||
|
import 'echarts/lib/chart/map'
|
||||||
|
import 'echarts/lib/component/geo'
|
||||||
|
import 'echarts/map/js/china'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
mapdata: { type: Array, default: () => [] }
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
seriesData: {
|
||||||
|
seriesData: [{ name: '南海诸岛', value: 0, itemStyle: { normal: { opacity: 0, label: { show: false }}}}],
|
||||||
|
minMaxData: {
|
||||||
|
min: 0,
|
||||||
|
max: 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
mapdata: {
|
||||||
|
handler(newVal) {
|
||||||
|
if (newVal.length !== 0) {
|
||||||
|
this.seriesData = map.getCityGeo(newVal)
|
||||||
|
console.log(newVal, 1212)
|
||||||
|
} else {
|
||||||
|
this.seriesData = {
|
||||||
|
seriesData: [],
|
||||||
|
minMaxData: { min: 0, max: 0 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.userMap()
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.userMap()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
userMap() {
|
||||||
|
// const mychart = this.$echarts.init(document.getElementById('user-map'));
|
||||||
|
const mychart = echarts.init(this.$refs.usermap)
|
||||||
|
// const d = this.seriesData
|
||||||
|
const d = map.getCityGeo(this.mapdata)
|
||||||
|
// const fontColor = '#bbb';
|
||||||
|
// const visualMapColor = ['#ff0030', '#fe00f5', '#fbff04', '#48fe00', '#02fffe'];
|
||||||
|
const option = {
|
||||||
|
// title: {
|
||||||
|
// left: '5%',
|
||||||
|
// top: '6%',
|
||||||
|
// text: '登录情况分布',
|
||||||
|
// textStyle: {
|
||||||
|
// color: '#fff',
|
||||||
|
// fontSize: '18',
|
||||||
|
// fontWeight: '400'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
animation: true,
|
||||||
|
animationDuration: 1000,
|
||||||
|
animationEasing: 'cubicInOut',
|
||||||
|
animationDurationUpdate: 1000,
|
||||||
|
animationEasingUpdate: 'cubicInOut',
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'item',
|
||||||
|
formatter: (params) => {
|
||||||
|
let value = params.value
|
||||||
|
if (value instanceof Array) value = params.value[2]
|
||||||
|
return `${params.name}总登录次数: ${value}次`
|
||||||
|
},
|
||||||
|
extraCssText: 'width:150px;height:30px;'
|
||||||
|
},
|
||||||
|
// legend: {
|
||||||
|
// orient: 'vertical',
|
||||||
|
// y: 'bottom',
|
||||||
|
// x: 'right',
|
||||||
|
// data: ['访问次数'],
|
||||||
|
// textStyle: {
|
||||||
|
// color: '#FFFFFF'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
visualMap: [
|
||||||
|
// {
|
||||||
|
// show: false,
|
||||||
|
// min: this.seriesData.minMaxData.min,
|
||||||
|
// max: this.seriesData.minMaxData.max,
|
||||||
|
// color: visualMapColor,
|
||||||
|
// dimension: 0,
|
||||||
|
// seriesIndex: 2
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
// min: this.seriesData.minMaxData.min,
|
||||||
|
// max: this.seriesData.minMaxData.max,
|
||||||
|
// text: ['高', '低'],
|
||||||
|
// calculable: true,
|
||||||
|
// itemWidth: 10,
|
||||||
|
// itemHeight: 100,
|
||||||
|
// color: visualMapColor,
|
||||||
|
// textStyle: {
|
||||||
|
// color: fontColor
|
||||||
|
// },
|
||||||
|
// itemSymbol: 'circle',
|
||||||
|
// seriesIndex: [0, 1]
|
||||||
|
min: d.minMaxData.min,
|
||||||
|
max: d.minMaxData.max,
|
||||||
|
calculable: true,
|
||||||
|
type: 'piecewise',
|
||||||
|
itemWidth: 8,
|
||||||
|
itemHeight: 8,
|
||||||
|
inRange: {
|
||||||
|
color: ['#50a3ba', '#eac736', '#d94e5d']
|
||||||
|
},
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 10
|
||||||
|
},
|
||||||
|
orient: 'horizontal',
|
||||||
|
left: '50%',
|
||||||
|
itemGap: 5,
|
||||||
|
textGap: 5,
|
||||||
|
seriesIndex: [0, 1],
|
||||||
|
formatter(a, b) {
|
||||||
|
const fn = function (v) {
|
||||||
|
if (v > 999) {
|
||||||
|
return `${(v / 1000).toFixed(1)}k`
|
||||||
|
}
|
||||||
|
if (v > 9 && v < 1000) {
|
||||||
|
return Math.floor(v / 10) * 10
|
||||||
|
}
|
||||||
|
return parseInt(v, 0)
|
||||||
|
}
|
||||||
|
return fn(b)
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
geo: [{
|
||||||
|
map: 'china',
|
||||||
|
roam: true,
|
||||||
|
scaleLimit: { min: 1, max: 3 },
|
||||||
|
z: 1,
|
||||||
|
zoom: 1,
|
||||||
|
label: {
|
||||||
|
emphasis: {
|
||||||
|
show: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// right: '40%',
|
||||||
|
// left: '5%',
|
||||||
|
// top: '10%',
|
||||||
|
// bottom: '10%',
|
||||||
|
itemStyle: {
|
||||||
|
color: {
|
||||||
|
type: 'linear',
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
x2: 0,
|
||||||
|
y2: 1,
|
||||||
|
colorStops: [{
|
||||||
|
offset: 0, color: 'red' // 0% 处的颜色
|
||||||
|
}, {
|
||||||
|
offset: 1, color: 'blue' // 100% 处的颜色
|
||||||
|
}],
|
||||||
|
globalCoord: false // 缺省为 false
|
||||||
|
},
|
||||||
|
borderWidth: 1,
|
||||||
|
shadowBlur: 8,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.3)',
|
||||||
|
areaColor: '#0040b6', // '#0E0930'
|
||||||
|
borderColor: '#84a3dd'
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: true,
|
||||||
|
// areaColor: '#3369D9',
|
||||||
|
// opacity: 0.2
|
||||||
|
itemStyle: {
|
||||||
|
areaColor: '#034fdb'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
grid: {
|
||||||
|
right: '40%'
|
||||||
|
// top: 100,
|
||||||
|
// bottom: 40,
|
||||||
|
// width: '28%'
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
name: '访问次数',
|
||||||
|
type: 'scatter',
|
||||||
|
coordinateSystem: 'geo',
|
||||||
|
data: d.seriesData,
|
||||||
|
// symbolSize: (val) => {
|
||||||
|
// return Math.max(val[2] / 200, 8);
|
||||||
|
// },
|
||||||
|
symbolSize: 10,
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
formatter: '{b}',
|
||||||
|
position: 'right',
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
emphasis: {
|
||||||
|
show: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: 'rgba(7,58,249,1)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
mychart.setOption(option, true)
|
||||||
|
window.addEventListener('resize', () => { mychart.resize() })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
<template>
|
||||||
|
<div class="full-size">
|
||||||
|
<div
|
||||||
|
ref="myEchart"
|
||||||
|
class="full-size"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import echarts from 'echarts'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
chartData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
chartData: {
|
||||||
|
deep: true,
|
||||||
|
handler (newVal) {
|
||||||
|
this.chartData = newVal
|
||||||
|
this.draw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.draw()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
draw () {
|
||||||
|
const myEchart = echarts.init(this.$refs.myEchart, 'light')
|
||||||
|
const o = this.chartData
|
||||||
|
const data = o.series.data
|
||||||
|
let sum = 0
|
||||||
|
const obj = {}
|
||||||
|
data.forEach(item => {
|
||||||
|
obj[item.name] = item.value
|
||||||
|
sum += item.value
|
||||||
|
})
|
||||||
|
const option = {
|
||||||
|
color: ['#3AA0FF', '#35CACA', '#4FCB74', '#FAD337', '#F1627B', '#965DE4'],
|
||||||
|
legend: {
|
||||||
|
orient: 'vertical',
|
||||||
|
y: 'center',
|
||||||
|
left: '52%',
|
||||||
|
formatter(name) {
|
||||||
|
const text = Number(obj[name]) === 0 ? '0' : `${(parseFloat(obj[name] / sum) * 100).toFixed(2)}%`
|
||||||
|
return '{b|' + name + '} ' + '{a|' + text + '}' + `¥${obj[name]}`
|
||||||
|
},
|
||||||
|
itemGap: 25,
|
||||||
|
textStyle: {
|
||||||
|
rich: {
|
||||||
|
b: {
|
||||||
|
align: 'left',
|
||||||
|
fontSize: 16,
|
||||||
|
width: 120
|
||||||
|
|
||||||
|
},
|
||||||
|
a: {
|
||||||
|
align: 'left',
|
||||||
|
fontSize: 16,
|
||||||
|
width: 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fontSize: 16,
|
||||||
|
color: '#666666',
|
||||||
|
textAlign: 'right'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
Object.assign({}, {
|
||||||
|
type: 'pie',
|
||||||
|
radius: ['45%', '60%'],
|
||||||
|
center: ['26%', '55%'],
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: false,
|
||||||
|
formatter: function (p) {
|
||||||
|
const t = o.lineBreak ? '\n' : ' '
|
||||||
|
return `{a|${p.name + t}}{b|${p.value + o.unit} ${p.percent}%}`
|
||||||
|
},
|
||||||
|
rich: {
|
||||||
|
a: {
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 16
|
||||||
|
},
|
||||||
|
b: {
|
||||||
|
color: '#A4B5DA',
|
||||||
|
fontSize: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}, o.series),
|
||||||
|
o.firstSeries || ''
|
||||||
|
]
|
||||||
|
}
|
||||||
|
myEchart.setOption(option)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
+59
-4
@@ -71,13 +71,68 @@ const constRouter = [
|
|||||||
component: resolve => require(['@/views/dashboard/index'], resolve),
|
component: resolve => require(['@/views/dashboard/index'], resolve),
|
||||||
name: 'Dashboard',
|
name: 'Dashboard',
|
||||||
meta: { title: 'dashboard', icon: 'dashboard', affix: true }
|
meta: { title: 'dashboard', icon: 'dashboard', affix: true }
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
// path: '/cash',
|
||||||
|
// name: '提现申请',
|
||||||
|
// component: () => import('@/views/cash/index'),
|
||||||
|
// meta: { title: '提现申请', affix: true }
|
||||||
|
// }
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/cash',
|
path: '/marketing',
|
||||||
name: '提现申请',
|
component: Layout,
|
||||||
component: () => import('@/views/cash/index'),
|
name: '营销活动',
|
||||||
meta: { title: '提现申请', affix: true }
|
children: [
|
||||||
|
{
|
||||||
|
path: '/marketing',
|
||||||
|
component: () => import('@/views/marketing/index'),
|
||||||
|
meta: {
|
||||||
|
title: '营销活动',
|
||||||
|
affix: true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/marketing/add',
|
||||||
|
component: () => import('@/views/marketing/add/index'),
|
||||||
|
meta: {
|
||||||
|
title: '新建活动',
|
||||||
|
affix: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/marketing/details',
|
||||||
|
component: () => import('@/views/marketing/details/index'),
|
||||||
|
meta: {
|
||||||
|
title: '活动详情',
|
||||||
|
affix: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/finance',
|
||||||
|
component: Layout,
|
||||||
|
name: '财务',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/finance/cash',
|
||||||
|
component: () => import('@/views/finance/cash/index'),
|
||||||
|
meta: {
|
||||||
|
title: '提现申请',
|
||||||
|
affix: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/finance/cash-deposit',
|
||||||
|
component: () => import('@/views/finance/cash-deposit/index'),
|
||||||
|
meta: {
|
||||||
|
title: '保证金',
|
||||||
|
affix: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -50,12 +50,37 @@ export default {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/cash',
|
path: '/marketing',
|
||||||
|
name: '营销活动',
|
||||||
|
meta: {
|
||||||
|
title: '营销活动',
|
||||||
|
icon: 'el-icon-s-ticket'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/finance',
|
||||||
|
meta: {
|
||||||
|
title: '财务',
|
||||||
|
icon: 'el-icon-coin'
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '/finance/cash',
|
||||||
name: '提现申请',
|
name: '提现申请',
|
||||||
meta: {
|
meta: {
|
||||||
title: '提现申请',
|
title: '提现申请',
|
||||||
icon: 'el-icon-s-finance'
|
icon: 'el-icon-s-finance'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/finance/cash-deposit',
|
||||||
|
name: '保证金',
|
||||||
|
meta: {
|
||||||
|
title: '保证金',
|
||||||
|
icon: 'el-icon-s-finance'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ const initPublic = [
|
|||||||
isCustom: false
|
isCustom: false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
console.log(initPublic)
|
// console.log(initPublic)
|
||||||
export default {
|
export default {
|
||||||
namespaced: true,
|
namespaced: true,
|
||||||
state: {
|
state: {
|
||||||
|
|||||||
@@ -327,3 +327,8 @@ aside {
|
|||||||
margin-left: 0 !important;
|
margin-left: 0 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.full-size {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
@@ -7,7 +7,8 @@ import 'nprogress/nprogress.css'
|
|||||||
|
|
||||||
const service = axios.create({
|
const service = axios.create({
|
||||||
baseURL: process.env.VUE_APP_BASE_API,
|
baseURL: process.env.VUE_APP_BASE_API,
|
||||||
timeout: 10000,
|
// timeout: 10000,
|
||||||
|
timeout: 30000,
|
||||||
responseType: 'json',
|
responseType: 'json',
|
||||||
validateStatus (status) {
|
validateStatus (status) {
|
||||||
return status === 200
|
return status === 200
|
||||||
@@ -16,7 +17,8 @@ const service = axios.create({
|
|||||||
|
|
||||||
const refresh_service = axios.create({
|
const refresh_service = axios.create({
|
||||||
baseURL: process.env.VUE_APP_BASE_API,
|
baseURL: process.env.VUE_APP_BASE_API,
|
||||||
timeout: 10000,
|
// timeout: 10000,
|
||||||
|
timeout: 30000,
|
||||||
responseType: 'json',
|
responseType: 'json',
|
||||||
validateStatus (status) {
|
validateStatus (status) {
|
||||||
return status === 200
|
return status === 200
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h1>保证金</h1>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped></style>
|
||||||
|
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="login-container">
|
<div class="login-container">
|
||||||
<el-form ref="loginForm" :model="loginForm" :rules="rules" autocomplete="off" class="login-form" label-position="left">
|
<el-form
|
||||||
|
ref="loginForm" :model="loginForm" :rules="rules"
|
||||||
|
autocomplete="off"
|
||||||
|
class="login-form" label-position="left"
|
||||||
|
>
|
||||||
<div class="title-container">
|
<div class="title-container">
|
||||||
<h3 class="title">{{ $t('login.title') }}平台登录</h3>
|
<h3 class="title">{{ $t('login.title') }}平台登录</h3>
|
||||||
<!-- <lang-select class="set-language" /> -->
|
<!-- <lang-select class="set-language" /> -->
|
||||||
@@ -44,7 +48,7 @@
|
|||||||
@keyup.enter.native="handleLogin"
|
@keyup.enter.native="handleLogin"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<img :src="imageCode" alt="codeImage" class="code-image" @click="getCodeImage">
|
<img :src="imageCode" alt="codeImage" class="code-image" @click="getCodeImage" />
|
||||||
<el-button :loading="loading" style="width:100%;margin-bottom:14px;" type="primary" @click.native.prevent="handleLogin">{{ $t('login.logIn') }}</el-button>
|
<el-button :loading="loading" style="width:100%;margin-bottom:14px;" type="primary" @click.native.prevent="handleLogin">{{ $t('login.logIn') }}</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
closeDialog() {
|
closeDialog() {
|
||||||
console.log(111)
|
|
||||||
this.dialogVisible = false
|
this.dialogVisible = false
|
||||||
},
|
},
|
||||||
query(params) {
|
query(params) {
|
||||||
|
|||||||
@@ -0,0 +1,306 @@
|
|||||||
|
<template>
|
||||||
|
<div class="edit_add_page">
|
||||||
|
<div class="content">
|
||||||
|
<div class="title">
|
||||||
|
活动列表/报名
|
||||||
|
<div class="btn_list">
|
||||||
|
<span @click="cancel">取消</span>
|
||||||
|
<span @click="save">保存</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form ref="form" :model="form" label-width="100px">
|
||||||
|
<h2>基础信息</h2>
|
||||||
|
<el-form-item label="活动名称:">
|
||||||
|
<el-input v-model="form.name" placeholder="请输入活动名称" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="活动介绍:">
|
||||||
|
<el-input v-model="form.description" type="textarea" placeholder="请输入活动介绍" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="活动时间:">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="date1"
|
||||||
|
type="datetimerange"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始时间"
|
||||||
|
end-placeholder="结束时间"
|
||||||
|
value-format="yyyy-MM-dd HH:mm"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="起止时间:">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="date2"
|
||||||
|
type="datetimerange"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始时间"
|
||||||
|
end-placeholder="结束时间"
|
||||||
|
value-format="yyyy-MM-dd HH:mm"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="活动保证金:">
|
||||||
|
<el-radio-group v-model="form.isNeedSecurityDeposit">
|
||||||
|
<el-radio :label="1">需要</el-radio>
|
||||||
|
<el-radio :label="2">不需要</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item v-if="form.isNeedSecurityDeposit===1" label="保证金金额:">
|
||||||
|
<el-input v-model="form.securityDeposit" placeholder="请输入活动保证金金额" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="活动标签">
|
||||||
|
<el-input v-model="form.tag" placeholder="请输入活动标签" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<h2>优惠规则</h2>
|
||||||
|
<el-form-item label="优惠方式:">
|
||||||
|
<el-radio-group v-model="form.promotionType" @change="selectDiscount">
|
||||||
|
<el-radio :label="1">满减</el-radio>
|
||||||
|
<el-radio :label="2">优惠券</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="优惠方案:">
|
||||||
|
<el-radio-group v-model="form.promotionPlan" @change="selectPreScheme">
|
||||||
|
<el-radio :label="1" :disabled="form.promotionType ===2">叠加优惠</el-radio>
|
||||||
|
<el-radio :label="2">阶梯优惠</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item v-for="(item,index) in list" :key="index">
|
||||||
|
<el-col :span="10">
|
||||||
|
每满
|
||||||
|
<el-input v-model="item.fullAmount" style="width: 80%;" />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="10">
|
||||||
|
减
|
||||||
|
<el-input v-model="item.discountAmount" style="width: 80%;" />
|
||||||
|
</el-col>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item v-if="form.promotionPlan===2">
|
||||||
|
<el-button type="primary" @click="add">添加层级</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<div class="photo">
|
||||||
|
<el-upload
|
||||||
|
class="avatar-uploader"
|
||||||
|
:headers="headers"
|
||||||
|
:data="dataObj"
|
||||||
|
action="/api/authority/file/upload"
|
||||||
|
:show-file-list="false"
|
||||||
|
:on-success="handleAvatarSuccess"
|
||||||
|
:disabled="type"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
v-if="form.image"
|
||||||
|
:src="form.image" class="avatar"
|
||||||
|
width="80"
|
||||||
|
height="80"
|
||||||
|
/>
|
||||||
|
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||||
|
<el-button size="small" type="primary">点击上传</el-button>
|
||||||
|
</el-upload>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import db from '@/utils/localstorage'
|
||||||
|
import Marketing from '@/api/Marketing'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
name: '',
|
||||||
|
description: '',
|
||||||
|
isNeedSecurityDeposit: 2,
|
||||||
|
securityDeposit: '',
|
||||||
|
tag: '',
|
||||||
|
promotionType: 1,
|
||||||
|
promotionPlan: 1,
|
||||||
|
image: ''
|
||||||
|
|
||||||
|
},
|
||||||
|
list: [
|
||||||
|
{ fullAmount: '', discountAmount: '' }
|
||||||
|
],
|
||||||
|
date1: [],
|
||||||
|
date2: [],
|
||||||
|
type: false,
|
||||||
|
headers: {
|
||||||
|
Authorization: ''
|
||||||
|
},
|
||||||
|
dataObj: {
|
||||||
|
folderId: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.headers.token = 'Bearer ' + db.get('TOKEN', '')
|
||||||
|
this.headers.tenant = 'MDAwMA=='
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
selectDiscount(v) {
|
||||||
|
if (v === 2) {
|
||||||
|
this.form.promotionPlan = 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectPreScheme(v) {
|
||||||
|
if (v === 1) {
|
||||||
|
this.list = [
|
||||||
|
{ fullAmount: '', discountAmount: '' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
add() {
|
||||||
|
if (this.form.promotionPlan === 2) {
|
||||||
|
this.list.push({ fullAmount: '', discountAmount: '' })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
this.$router.go(-1)
|
||||||
|
},
|
||||||
|
save() {
|
||||||
|
const vm = this
|
||||||
|
Object.assign(vm.form, { activityStartTime: vm.date1[0] || '', activityEndTime: vm.date1[1] || '', applyStartTime: vm.date2[0] || '', applyEndTime: vm.date2[1] || '', promotionDetail: vm.list })
|
||||||
|
Marketing.addPromotion(vm.form).then(res => {
|
||||||
|
const r = res.data
|
||||||
|
if (r.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: '新增成功',
|
||||||
|
type: 'success'
|
||||||
|
})
|
||||||
|
vm.reset()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleAvatarSuccess (response) {
|
||||||
|
const { url } = response.data
|
||||||
|
this.form.image = url
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
name: '',
|
||||||
|
description: '',
|
||||||
|
isNeedSecurityDeposit: 2,
|
||||||
|
securityDeposit: '',
|
||||||
|
tag: '',
|
||||||
|
promotionType: 1,
|
||||||
|
promotionPlan: 1,
|
||||||
|
image: '',
|
||||||
|
promotionDetail: '',
|
||||||
|
activityStartTime: '',
|
||||||
|
activityEndTime: '',
|
||||||
|
applyStartTime: '',
|
||||||
|
applyEndTime: ''
|
||||||
|
}
|
||||||
|
this.list = [
|
||||||
|
{ fullAmount: '', discountAmount: '' }
|
||||||
|
]
|
||||||
|
this.date1 = []
|
||||||
|
this.date2 = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.edit_add_page {
|
||||||
|
padding: 20px;
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
position: relative;
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
height: 24px;
|
||||||
|
width: 4px;
|
||||||
|
background-color: #3A68F2;
|
||||||
|
position: absolute;
|
||||||
|
left: -10px;
|
||||||
|
top: 2px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 0 50px 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
.title {
|
||||||
|
height: 100px;
|
||||||
|
line-height: 100px;;
|
||||||
|
font-size:24px;
|
||||||
|
position: relative;
|
||||||
|
border-bottom: 1px solid #E0E5EB;
|
||||||
|
.btn_list {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
height: 50px;
|
||||||
|
span {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
width: 100px;
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 16px;
|
||||||
|
border-radius:4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
&:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
&:nth-child(1) {
|
||||||
|
background:rgba(255,255,255,1);
|
||||||
|
order:1px solid rgba(224,229,235,1);
|
||||||
|
margin-right: 20px;
|
||||||
|
border:1px solid rgba(224,229,235,1);
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
background:rgba(58,104,242,1);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-form {
|
||||||
|
.el-form-item {
|
||||||
|
label.el-form-item__label {
|
||||||
|
font-size:16px !important;
|
||||||
|
color: red !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.photo {
|
||||||
|
padding:70px 100px;
|
||||||
|
.avatar-uploader {
|
||||||
|
width: 180px;
|
||||||
|
.el-icon-plus, img {
|
||||||
|
width: 180px;
|
||||||
|
height: 180px;
|
||||||
|
line-height: 180px;
|
||||||
|
border: 1px #bbb solid;
|
||||||
|
border-radius:4px 4px 0px 4px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
text-align: center
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<div class="goods_page">
|
||||||
|
<el-table
|
||||||
|
:data="tableData.records"
|
||||||
|
border
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="value1"
|
||||||
|
label="动态"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value2"
|
||||||
|
label="时间"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value3"
|
||||||
|
label="操作人"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value4"
|
||||||
|
label="其它信息"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.total > 0"
|
||||||
|
:limit.sync="formParams.size"
|
||||||
|
:page.sync="formParams.current"
|
||||||
|
:total="Number(tableData.total)"
|
||||||
|
@pagination="fetch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Pagination
|
||||||
|
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formParams: {
|
||||||
|
size: 10,
|
||||||
|
current: 1
|
||||||
|
},
|
||||||
|
tableData: {
|
||||||
|
records: [
|
||||||
|
{ value1: '报名', value2: '2020-06-20 17:54', value3: '飞猪旗舰店', value4: '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈' }
|
||||||
|
],
|
||||||
|
total: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.goods_page {
|
||||||
|
.product-img {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-table {
|
||||||
|
th {
|
||||||
|
background: #EEF3FF;
|
||||||
|
color:#333333;
|
||||||
|
font-size:16px;
|
||||||
|
font-weight: 400;
|
||||||
|
border-color: #E0E5EB;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<div class="goods_page">
|
||||||
|
<el-table
|
||||||
|
:data="tableData.records"
|
||||||
|
border
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
label="产品主图"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<img
|
||||||
|
class="product-img"
|
||||||
|
height="90"
|
||||||
|
width="90"
|
||||||
|
:src="scope.row.value1"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="value2"
|
||||||
|
label="产品名称"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value3"
|
||||||
|
label="产品id"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value4"
|
||||||
|
label="售价 (元)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value5"
|
||||||
|
label="原价 (元)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value6"
|
||||||
|
label="库存 (件)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value7"
|
||||||
|
label="累计销量 (件)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value8"
|
||||||
|
label="上架状态"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.total > 0"
|
||||||
|
:limit.sync="formParams.size"
|
||||||
|
:page.sync="formParams.current"
|
||||||
|
:total="Number(tableData.total)"
|
||||||
|
@pagination="fetch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Pagination
|
||||||
|
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formParams: {
|
||||||
|
size: 10,
|
||||||
|
current: 1
|
||||||
|
},
|
||||||
|
tableData: {
|
||||||
|
records: [
|
||||||
|
{ value1: 'http://cereshop.oss-cn-shenzhen.aliyuncs.com/0000/2020/06/3453cdcc-640d-4f97-afe1-f1bffdf61bc1.jpg', value2: 'BB霜',
|
||||||
|
value3: '231243544', value4: '99.9', value5: '169', value6: '888', value7: '19877', value8: '上架' }
|
||||||
|
],
|
||||||
|
total: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.goods_page {
|
||||||
|
.product-img {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-table {
|
||||||
|
th {
|
||||||
|
background: #EEF3FF;
|
||||||
|
color:#333333;
|
||||||
|
font-size:16px;
|
||||||
|
font-weight: 400;
|
||||||
|
border-color: #E0E5EB;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<template>
|
||||||
|
<div class="marketing_details">
|
||||||
|
<div class="content">
|
||||||
|
<el-tabs @tab-click="selectItem">
|
||||||
|
<el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.name" :name="item.id" />
|
||||||
|
</el-tabs>
|
||||||
|
<div class="components">
|
||||||
|
<component :is="compoentsName" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import info from './info'
|
||||||
|
import shop from './shop'
|
||||||
|
import marketData from './marketData'
|
||||||
|
export default {
|
||||||
|
components: { info, shop, marketData },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tabList: [
|
||||||
|
{ name: '活动信息', id: 'info' },
|
||||||
|
{ name: '参与店铺', id: 'shop' },
|
||||||
|
{ name: '活动数据', id: 'marketData' }
|
||||||
|
],
|
||||||
|
compoentsName: 'info'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
selectItem(v) {
|
||||||
|
this.compoentsName = v.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.marketing_details {
|
||||||
|
background: #fff;
|
||||||
|
.content {
|
||||||
|
padding:20px 20px;
|
||||||
|
.components {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<template>
|
||||||
|
<div class="info-page">
|
||||||
|
<h2>基础信息</h2>
|
||||||
|
<div class="info">
|
||||||
|
<ul>
|
||||||
|
<li v-for="(item, index) in list" :key="index">
|
||||||
|
<p>{{ item.name }}</p>
|
||||||
|
<p>
|
||||||
|
<span>
|
||||||
|
{{ item.value }}
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="image">
|
||||||
|
<img :src="img" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2>优惠规则</h2>
|
||||||
|
<div class="rule">
|
||||||
|
<ul>
|
||||||
|
<li v-for="(item, index) in list1" :key="index">
|
||||||
|
<p>{{ item.name }}</p>
|
||||||
|
<p>{{ item.value }}</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p></p>
|
||||||
|
<p>每满500减50</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: [
|
||||||
|
{ name: '活动名称:', value: '满减活动' },
|
||||||
|
{ name: '活动介绍:', value: '满减活动满减活动满减活动满减活动满减活动满减活动满减活动满减活动满减活减活动满减活动满减活动满减活动满减活动满减活动' },
|
||||||
|
{ name: '报名时间:', value: '2020-09-21 15:00 — 2020-11-23 15:00' },
|
||||||
|
{ name: '起止时间:', value: '2020-09-21 15:00 — 2020-11-23 15:00' },
|
||||||
|
{ name: '活动保证金:', value: '需要' },
|
||||||
|
{ name: '保证金金额:', value: '2000' },
|
||||||
|
{ name: '活动标签:', value: '618活动' }
|
||||||
|
],
|
||||||
|
list1: [
|
||||||
|
{ name: '优惠方式:', value: '满减' },
|
||||||
|
{ name: '优惠方案:', value: '叠加优惠' }
|
||||||
|
],
|
||||||
|
img: 'http://cereshop.oss-cn-shenzhen.aliyuncs.com/0000/2020/06/3453cdcc-640d-4f97-afe1-f1bffdf61bc1.jpg'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.info-page {
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
position: relative;
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
height: 24px;
|
||||||
|
width: 4px;
|
||||||
|
background-color: #3A68F2;
|
||||||
|
position: absolute;
|
||||||
|
left: -10px;
|
||||||
|
top: 2px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
padding: 50px 100px;
|
||||||
|
.info, .rule {
|
||||||
|
ul {
|
||||||
|
width: 45%;
|
||||||
|
list-style: none;
|
||||||
|
overflow: hidden;
|
||||||
|
li {
|
||||||
|
p {
|
||||||
|
float: left;
|
||||||
|
font-size: 16px;
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: 100px;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
width: calc(100% - 120px);
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
overflow: hidden;
|
||||||
|
ul {
|
||||||
|
float: left;
|
||||||
|
li {
|
||||||
|
&:last-child {
|
||||||
|
p {
|
||||||
|
&:nth-child(2) {
|
||||||
|
span {
|
||||||
|
color:#fff;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 5px;
|
||||||
|
background-color: #FF7911;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.image {
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
padding-left: 50px;
|
||||||
|
float: left;
|
||||||
|
img {
|
||||||
|
width: 180px;
|
||||||
|
height: 180px;
|
||||||
|
border-radius:4px 4px 0px 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,443 @@
|
|||||||
|
<template>
|
||||||
|
<div class="market_data_page">
|
||||||
|
<div class="data_list">
|
||||||
|
<ul>
|
||||||
|
<li v-for="(item,index) in dataList" :key="index">
|
||||||
|
<p>{{ item.value }}</p>
|
||||||
|
<p>{{ item.name }} <i class="el-icon-warning-outline" :title="item.tips"></i></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="visit_data">
|
||||||
|
<div class="item_box">
|
||||||
|
<p class="echart_title">访问分布情况</p>
|
||||||
|
<map-chart :mapdata="mapData" />
|
||||||
|
</div>
|
||||||
|
<div class="item_box">
|
||||||
|
<div class="item_box-chart">
|
||||||
|
<p class="echart_title">访问占比</p>
|
||||||
|
<div class="chart_box"><cake :chart-data="cakeData" /></div>
|
||||||
|
<div class="chart_box"><cake :chart-data="cakeData" /></div>
|
||||||
|
</div>
|
||||||
|
<div class="item_box-chart">
|
||||||
|
<p class="echart_title">终端分布</p>
|
||||||
|
<div class="chart_box"><cake :chart-data="cakeData" /></div>
|
||||||
|
<div class="chart_box"><cake :chart-data="cakeData" /></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tendency_data">
|
||||||
|
<div class="item_box">
|
||||||
|
<p class="echart_title">趋势图</p>
|
||||||
|
<el-tabs @tab-click="selectItem">
|
||||||
|
<el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.name" :name="item.id" />
|
||||||
|
</el-tabs>
|
||||||
|
<bar :chart-data="tendencyData" style="height: calc(100% - 54px)" />
|
||||||
|
</div>
|
||||||
|
<div class="item_box">
|
||||||
|
<p class="title">
|
||||||
|
商家成交排行榜
|
||||||
|
<span>成交额/元</span>
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li v-for="(item,index) in rankList" :key="index">
|
||||||
|
<p>
|
||||||
|
<span>{{ index + 1 }}</span>
|
||||||
|
</p>
|
||||||
|
<p>{{ item.name }}</p>
|
||||||
|
<p>{{ item.value }}</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="sale_data">
|
||||||
|
<div class="item_box">
|
||||||
|
<p class="echart_title">销售类别分类</p>
|
||||||
|
<pie :chart-data="saleData" />
|
||||||
|
</div>
|
||||||
|
<div class="item_box">
|
||||||
|
<p class="title">
|
||||||
|
畅销商品排行榜
|
||||||
|
<span>售卖数/个</span>
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li v-for="(item,index) in rankList" :key="index">
|
||||||
|
<p>
|
||||||
|
<span>{{ index + 1 }}</span>
|
||||||
|
</p>
|
||||||
|
<p>{{ item.name }}</p>
|
||||||
|
<p>{{ item.value }}</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="merchants_detail">
|
||||||
|
<p>
|
||||||
|
商家数据明细
|
||||||
|
<span>导出</span>
|
||||||
|
</p>
|
||||||
|
<el-table
|
||||||
|
:data="tableData.records"
|
||||||
|
border
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="value1"
|
||||||
|
label="店铺名称"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value2"
|
||||||
|
label="店铺编码"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value3"
|
||||||
|
label="参与商品数 (件)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value4"
|
||||||
|
label="访客数 (人)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value5"
|
||||||
|
label="订单数 (笔)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value6"
|
||||||
|
label="成交客户数 (笔)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value7"
|
||||||
|
label="客单件 (元)"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="value8"
|
||||||
|
label="成交总额 (元)"
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.total > 0"
|
||||||
|
:limit.sync="formParams.size"
|
||||||
|
:page.sync="formParams.current"
|
||||||
|
:total="Number(tableData.total)"
|
||||||
|
@pagination="fetch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
import bar from '@/components/marketEchart/bar'
|
||||||
|
import pie from '@/components/marketEchart/pie'
|
||||||
|
import echarts from 'echarts'
|
||||||
|
import mapChart from '@/components/marketEchart/map'
|
||||||
|
import cake from '@/components/marketEchart/cake'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Pagination,
|
||||||
|
bar,
|
||||||
|
pie,
|
||||||
|
cake,
|
||||||
|
mapChart
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dataList: [
|
||||||
|
{ name: '成交总额(元)', value: '12454323', tips: '活动开始之后参与活动的商品总成交额' },
|
||||||
|
{ name: '支付订单数(笔)', value: '3450', tips: '活动期间活动商品带来的支付成功订单数,不包括退款订单' },
|
||||||
|
{ name: '支付客户数(人)', value: '3450', tips: '对活动商品进行支付的客户数' },
|
||||||
|
{ name: '参与商家数(家)', value: '3450', tips: '本活动报名成功的商家数量' },
|
||||||
|
{ name: '参与商品数(件)', value: '4322', tips: '本活动报名中的商家所有的活动商品数,不按最小SKU算' }
|
||||||
|
|
||||||
|
],
|
||||||
|
rankList: [
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' },
|
||||||
|
{ name: '阿里巴巴小店', value: '12321,3232' }
|
||||||
|
|
||||||
|
],
|
||||||
|
tabList: [
|
||||||
|
{ name: '销售额', id: 'sale' },
|
||||||
|
{ name: '访问量', id: 'visit' }
|
||||||
|
],
|
||||||
|
tendencyData: {
|
||||||
|
xData: ['2/1', '2/2', '2/3', '2/4', '2/5', '2/6', '2/7', '2/8', '2/9', '2/10', '2/11', '2/12'],
|
||||||
|
series: {
|
||||||
|
type: 'bar',
|
||||||
|
itemStyle: {
|
||||||
|
normal: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
|
||||||
|
offset: 0,
|
||||||
|
color: '#74D6FF'
|
||||||
|
}, {
|
||||||
|
offset: 1,
|
||||||
|
color: '#3A68F1'
|
||||||
|
}])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
normal: {
|
||||||
|
show: true,
|
||||||
|
position: 'top',
|
||||||
|
color: '#fff',
|
||||||
|
formatter: function (p) {
|
||||||
|
return p.value || ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: [100, 200, 80, 400, 680, 270, 700, 950, 567, 675, 234, 567],
|
||||||
|
barMaxWidth: '20px'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
saleData: {
|
||||||
|
series: {
|
||||||
|
data: [
|
||||||
|
{ name: '家用电器', value: 4544 },
|
||||||
|
{ name: '食用酒水', value: 4544 },
|
||||||
|
{ name: '个护健康', value: 4544 },
|
||||||
|
{ name: '服饰箱包', value: 4544 },
|
||||||
|
{ name: '母婴产品', value: 4544 },
|
||||||
|
{ name: '其它', value: 4544 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cakeData: {
|
||||||
|
series: {
|
||||||
|
data: [
|
||||||
|
{ name: '湖北省', value: 75 },
|
||||||
|
{ name: '广东省', value: 20 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mapData: [{ fProvince: "北京", fCity: '北京', fVisitCount: 199 }],
|
||||||
|
formParams: {
|
||||||
|
size: 10,
|
||||||
|
current: 1
|
||||||
|
},
|
||||||
|
tableData: {
|
||||||
|
records: [
|
||||||
|
{ value1: '艾莉小店', value2: 'MG239', value3: '66', value4: '66', value5: '66', value6: '66', value7: 323.2, value8: '324234.09' }
|
||||||
|
],
|
||||||
|
total: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
|
||||||
|
},
|
||||||
|
selectItem(v) {
|
||||||
|
console.log(v.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.market_data_page {
|
||||||
|
.data_list {
|
||||||
|
box-shadow:0px 0px 10px 0px rgba(51,51,51,0.15);
|
||||||
|
border-radius:4px;
|
||||||
|
ul {
|
||||||
|
height: 140px;
|
||||||
|
overflow: hidden;
|
||||||
|
list-style: none;
|
||||||
|
li {
|
||||||
|
float: left;
|
||||||
|
width: 20%;
|
||||||
|
text-align: center;
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
i {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
&:nth-child(1) {
|
||||||
|
font-size:40px;
|
||||||
|
color:rgba(255,173,17,1);
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 100px;
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
font-size:18px;
|
||||||
|
color:rgba(51,51,51,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.visit_data {
|
||||||
|
overflow: hidden;
|
||||||
|
.item_box {
|
||||||
|
position: relative;
|
||||||
|
height: 520px;
|
||||||
|
width: calc(50% - 10px);
|
||||||
|
margin: 10px 0;
|
||||||
|
float: left;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius:4px;
|
||||||
|
&:nth-child(1) {
|
||||||
|
margin-right: 20px;
|
||||||
|
border-left: 1px solid rgba(51,51,51,0.15);
|
||||||
|
box-shadow:0px 0px 10px 0px rgba(51,51,51,0.15);
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
.item_box-chart {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
height: calc(50% - 10px);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
box-shadow:0px 0px 10px 0px rgba(51,51,51,0.15);
|
||||||
|
border-right: 1px solid rgba(51,51,51,0.15);
|
||||||
|
.chart_box {
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.tendency_data, .sale_data {
|
||||||
|
overflow: hidden;
|
||||||
|
.item_box {
|
||||||
|
position: relative;
|
||||||
|
float: left;
|
||||||
|
height: 520px;
|
||||||
|
margin: 10px 0;
|
||||||
|
box-shadow:0px 0px 10px 0px rgba(51,51,51,0.15);
|
||||||
|
border-radius:4px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
&:nth-child(1) {
|
||||||
|
width: calc(60% - 20px);
|
||||||
|
margin-right: 20px;
|
||||||
|
border-left: 1px solid rgba(51,51,51,0.15);
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
width: 40%;
|
||||||
|
border-right: 1px solid rgba(51,51,51,0.15);
|
||||||
|
padding: 20px;
|
||||||
|
p.title {
|
||||||
|
font-size:18px;
|
||||||
|
color: #333333;
|
||||||
|
span {
|
||||||
|
font-size:16px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul {
|
||||||
|
li {
|
||||||
|
display: flex;
|
||||||
|
p {
|
||||||
|
flex: 2;
|
||||||
|
margin: 0;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
&:nth-child(1) {
|
||||||
|
span {
|
||||||
|
display: inline-block;
|
||||||
|
width:26px;
|
||||||
|
height:26px;
|
||||||
|
line-height: 26px;
|
||||||
|
text-align: center;
|
||||||
|
background:rgba(221,221,221,1);
|
||||||
|
border-radius:50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
flex: 7;
|
||||||
|
}
|
||||||
|
&:nth-child(3) {
|
||||||
|
flex: 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:nth-child(-n + 3) {
|
||||||
|
p {
|
||||||
|
&:nth-child(1) {
|
||||||
|
span {
|
||||||
|
background:rgba(255,121,17,1);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tendency_data {
|
||||||
|
.item_box {
|
||||||
|
&:nth-child(1) {
|
||||||
|
padding: 50px 80px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.merchants_detail {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 10px;
|
||||||
|
box-shadow:0px 0px 10px 0px rgba(51,51,51,0.15);
|
||||||
|
min-height: 100px;
|
||||||
|
border-radius:4px;
|
||||||
|
p {
|
||||||
|
font-size:18px;
|
||||||
|
color: #333333;
|
||||||
|
line-height: 38px;
|
||||||
|
height:38px;
|
||||||
|
span {
|
||||||
|
display: inline-block;
|
||||||
|
float: right;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
width:60px;
|
||||||
|
height:38px;
|
||||||
|
font-size:14px;
|
||||||
|
background:rgba(58,104,241,1);
|
||||||
|
border-radius:4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-table {
|
||||||
|
th {
|
||||||
|
background: #EEF3FF;
|
||||||
|
color:#333333;
|
||||||
|
font-size:16px;
|
||||||
|
font-weight: 400;
|
||||||
|
border-color: #E0E5EB;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.echart_title {
|
||||||
|
font-size:18px;
|
||||||
|
position: absolute;
|
||||||
|
top: 30px;
|
||||||
|
left: 20px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-tabs {
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
<template>
|
||||||
|
<div class="shop_page">
|
||||||
|
<div class="toolbar">
|
||||||
|
<el-form
|
||||||
|
:inline="true"
|
||||||
|
:model="formParams"
|
||||||
|
>
|
||||||
|
<el-form-item label="店铺名称">
|
||||||
|
<el-input v-model="formParams.name" size="mini" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="店铺编码">
|
||||||
|
<el-input v-model="formParams.code" size="mini" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="审核状态">
|
||||||
|
<el-select
|
||||||
|
v-model="formParams.status"
|
||||||
|
size="mini"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in statusList"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
@click="query"
|
||||||
|
>
|
||||||
|
查询
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content_table">
|
||||||
|
<div class="table">
|
||||||
|
<el-table
|
||||||
|
:data="tableData.records"
|
||||||
|
border
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="name"
|
||||||
|
label="店铺名称"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="status"
|
||||||
|
label="店铺编码"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="type"
|
||||||
|
label="参与商品数"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="custom"
|
||||||
|
label="审核次数"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="goods"
|
||||||
|
label="审核状态"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template
|
||||||
|
slot-scope="scope"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="details(scope.row)"
|
||||||
|
>
|
||||||
|
查看商品
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="records(scope.row)"
|
||||||
|
>
|
||||||
|
审核记录
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="handle(scope.row)"
|
||||||
|
>
|
||||||
|
处理
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="quit(scope.row)"
|
||||||
|
>
|
||||||
|
清退
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.total > 0"
|
||||||
|
:limit.sync="formParams.size"
|
||||||
|
:page.sync="formParams.current"
|
||||||
|
:total="Number(tableData.total)"
|
||||||
|
@pagination="fetch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Dialog
|
||||||
|
:title="dialog.title"
|
||||||
|
:visible.sync="dialog.visible"
|
||||||
|
:fullscreen="!true"
|
||||||
|
width="55%"
|
||||||
|
>
|
||||||
|
<goods v-if="dialog.type===1" />
|
||||||
|
<audit-log v-if="dialog.type===2" />
|
||||||
|
</Dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
import goods from './component/goods'
|
||||||
|
import auditLog from './component/auditLog'
|
||||||
|
import { Dialog } from 'element-ui'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Pagination,
|
||||||
|
goods,
|
||||||
|
Dialog,
|
||||||
|
auditLog
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formParams: {
|
||||||
|
name: '',
|
||||||
|
code: '',
|
||||||
|
status: '',
|
||||||
|
size: 10,
|
||||||
|
current: 1
|
||||||
|
},
|
||||||
|
statusList: [
|
||||||
|
{ label: '全部', value: '' },
|
||||||
|
{ label: '待审核', value: '1' },
|
||||||
|
{ label: '审核不通过', value: '2' },
|
||||||
|
{ label: '审核通过', value: '3' }
|
||||||
|
],
|
||||||
|
tableData: {
|
||||||
|
records: [
|
||||||
|
{ name: '阿里小店', status: 'N95', type: '23', custom: 12, goods: '待审核' }
|
||||||
|
],
|
||||||
|
total: 1
|
||||||
|
},
|
||||||
|
dialog: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetch() {
|
||||||
|
|
||||||
|
},
|
||||||
|
query() {
|
||||||
|
|
||||||
|
},
|
||||||
|
details() {
|
||||||
|
this.dialog = {
|
||||||
|
title: '活动商品',
|
||||||
|
visible: true,
|
||||||
|
type: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
records() {
|
||||||
|
this.dialog = {
|
||||||
|
title: '审核记录',
|
||||||
|
visible: true,
|
||||||
|
type: 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handle() {
|
||||||
|
|
||||||
|
},
|
||||||
|
quit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
.shop_page {
|
||||||
|
.content_table {
|
||||||
|
.table {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-table {
|
||||||
|
th {
|
||||||
|
background: #EEF3FF;
|
||||||
|
color:#333333;
|
||||||
|
font-size:16px;
|
||||||
|
font-weight: 400;
|
||||||
|
border-color: #E0E5EB;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-dialog__wrapper {
|
||||||
|
.el-dialog__header {
|
||||||
|
height: 70px;
|
||||||
|
background-color: #3A68F2;
|
||||||
|
.el-dialog__title {
|
||||||
|
font-size:24px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,221 @@
|
|||||||
|
<template>
|
||||||
|
<div class="marketing_page">
|
||||||
|
<div class="content">
|
||||||
|
<div class="toolbar">
|
||||||
|
<el-form
|
||||||
|
:inline="true"
|
||||||
|
:model="formParams"
|
||||||
|
>
|
||||||
|
<el-form-item label="活动名称">
|
||||||
|
<el-input v-model="formParams.name" size="mini" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="活动状态">
|
||||||
|
<el-select
|
||||||
|
v-model="formParams.status"
|
||||||
|
size="mini"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in statusList"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="营销方式">
|
||||||
|
<el-select
|
||||||
|
v-model="formParams.type"
|
||||||
|
size="mini"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in typeList"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
@click="query"
|
||||||
|
>
|
||||||
|
查询
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
@click="add"
|
||||||
|
>
|
||||||
|
新建活动
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content_table">
|
||||||
|
<div class="table">
|
||||||
|
<el-table
|
||||||
|
:data="tableData.records"
|
||||||
|
border
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="name"
|
||||||
|
label="活动名称"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="status"
|
||||||
|
label="活动状态"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="type"
|
||||||
|
label="营销方式"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="custom"
|
||||||
|
label="商家数"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="goods"
|
||||||
|
label="商品数量"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template
|
||||||
|
slot-scope="scope"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="details(scope.row)"
|
||||||
|
>
|
||||||
|
详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="edit(scope.row)"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="stop(scope.row)"
|
||||||
|
>
|
||||||
|
结束
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
@click.native.prevent="deletes(scope.row)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.total > 0"
|
||||||
|
:limit.sync="formParams.size"
|
||||||
|
:page.sync="formParams.current"
|
||||||
|
:total="Number(tableData.total)"
|
||||||
|
@pagination="fetch"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Pagination
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formParams: {
|
||||||
|
name: '',
|
||||||
|
status: '',
|
||||||
|
type: '',
|
||||||
|
size: 10,
|
||||||
|
current: 1
|
||||||
|
},
|
||||||
|
statusList: [
|
||||||
|
{ label: '全部', value: '' },
|
||||||
|
{ label: '报名进行中', value: 1 },
|
||||||
|
{ label: '报名未开始', value: 2 },
|
||||||
|
{ label: '活动进行中', value: 3 },
|
||||||
|
{ label: '活动已结束', value: 4 },
|
||||||
|
{ label: '活动待开始', value: 5 }
|
||||||
|
],
|
||||||
|
typeList: [
|
||||||
|
{ label: '全部', value: '' },
|
||||||
|
{ label: '满减', value: 1 },
|
||||||
|
{ label: '优惠券', value: 2 }
|
||||||
|
],
|
||||||
|
tableData: {
|
||||||
|
records: [
|
||||||
|
{ name: '618大促', status: '报名状态中', type: '满减', custom: 12, goods: 15 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
query() {},
|
||||||
|
add() {
|
||||||
|
this.$router.push({ path: '/marketing/add' })
|
||||||
|
},
|
||||||
|
details() {
|
||||||
|
this.$router.push({ path: '/marketing/details' })
|
||||||
|
},
|
||||||
|
edit() {
|
||||||
|
|
||||||
|
},
|
||||||
|
stop() {
|
||||||
|
|
||||||
|
},
|
||||||
|
deletes() {
|
||||||
|
|
||||||
|
},
|
||||||
|
fetch() {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang='less' scoped>
|
||||||
|
|
||||||
|
.marketing_page {
|
||||||
|
padding: 10px 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.content {
|
||||||
|
background-color: #fff;
|
||||||
|
.toolbar {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .el-table {
|
||||||
|
th {
|
||||||
|
background: #EEF3FF;
|
||||||
|
color:#333333;
|
||||||
|
font-size:16px;
|
||||||
|
font-weight: 400;
|
||||||
|
border-color: #E0E5EB;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
Reference in New Issue
Block a user