parent
60efd770ae
commit
0c4abfe1d1
|
|
@ -0,0 +1,14 @@
|
|||
import request from './request'
|
||||
|
||||
// 配置 - 获取配置
|
||||
export function getPromoterConfig() {
|
||||
return request.get('promoter/get_config')
|
||||
}
|
||||
|
||||
// 配置 - 编辑配置
|
||||
export function setPromoterConfig(data) {
|
||||
return request.get('promoter/set_config',data)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<div class="ivu-global-footer i-copyright" v-if="openVersion !== '0'">
|
||||
<div v-if="version.status == -1" class="ivu-global-footer-copyright">{{ `Copyright ${version.year} ` }}<a :href="`${version.url}`" target="_blank">{{ version.version }}</a></div>
|
||||
<div v-else class="ivu-global-footer-copyright">{{ version.Copyright }}</div>
|
||||
</div>
|
||||
<!--<div class="ivu-global-footer i-copyright" v-if="openVersion !== '0'">-->
|
||||
<!-- <div v-if="version.status == -1" class="ivu-global-footer-copyright">{{ `Copyright ${version.year} ` }}<a :href="`${version.url}`" target="_blank">{{ version.version }}</a></div>-->
|
||||
<!-- <div v-else class="ivu-global-footer-copyright">{{ version.Copyright }}</div>-->
|
||||
<!-- </div>-->
|
||||
</template>
|
||||
<script>
|
||||
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ export default {
|
|||
},
|
||||
//判断当前页面父级菜单
|
||||
pathCompute(data) {
|
||||
console.log(this.$route)
|
||||
// console.log(this.$route)
|
||||
const loop = child => {
|
||||
// 是否有子节点,有则继续遍历下一级,无则是叶子节点
|
||||
for (let i = 0; i < child.length; i++) {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import productRouter from './modules/product'
|
|||
import marketingRouter from './modules/marketing'
|
||||
import orderRouter from './modules/order'
|
||||
import accountsRouter from './modules/accounts'
|
||||
import promoterRouter from './modules/promoter'
|
||||
import userRouter from './modules/user'
|
||||
import stationRouter from './modules/station'
|
||||
import exprotFileRouter from './modules/exportFile'
|
||||
|
|
@ -57,6 +58,7 @@ export const constantRoutes = [
|
|||
marketingRouter,
|
||||
orderRouter,
|
||||
accountsRouter,
|
||||
promoterRouter,
|
||||
userRouter,
|
||||
stationRouter,
|
||||
exprotFileRouter,
|
||||
|
|
|
|||
|
|
@ -69,8 +69,7 @@ const productRouter =
|
|||
name: 'ProductSpecs',
|
||||
meta: {
|
||||
title: '商品参数',
|
||||
noCache: true,
|
||||
|
||||
noCache: true
|
||||
},
|
||||
component: () => import('@/views/product/specs/list.vue')
|
||||
},
|
||||
|
|
@ -83,7 +82,7 @@ const productRouter =
|
|||
activeMenu: `${roterPre}/product/specs`
|
||||
},
|
||||
component: () => import('@/views/product/specs/create.vue')
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
import Layout from '@/layout'
|
||||
import { roterPre } from '@/settings'
|
||||
const promoterRouter =
|
||||
{
|
||||
path: `${roterPre}/promoter`,
|
||||
name: 'promoter',
|
||||
meta: {
|
||||
icon: '',
|
||||
title: '设置'
|
||||
},
|
||||
alwaysShow: true,
|
||||
component: Layout,
|
||||
children: [
|
||||
{
|
||||
path: 'config',
|
||||
name: 'PromoterConfig',
|
||||
meta: {
|
||||
title: '分销配置',
|
||||
noCache: true
|
||||
},
|
||||
component: () => import('@/views/promoter/config/index')
|
||||
},
|
||||
{
|
||||
path: 'orderList',
|
||||
name: 'OrderList',
|
||||
meta: {
|
||||
title: '分销订单',
|
||||
noCache: true
|
||||
},
|
||||
component: () => import('@/views/promoter/order/index')
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
export default promoterRouter
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
<template>
|
||||
<div class="divBox">
|
||||
<el-card class="box-card">
|
||||
<el-form ref="promoterForm" :model="promoterForm" :rules="rules" label-width="200px" class="demo-promoterForm">
|
||||
<el-form-item prop="extension_status">
|
||||
<span slot="label">
|
||||
<span>分销启用:</span>
|
||||
<el-tooltip class="item" effect="dark" content="商户是否开启分销功能" placement="top-start">
|
||||
<i class="el-icon-warning-outline" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-radio-group v-model="promoterForm.extension_status">
|
||||
<el-radio :label="1">开启</el-radio>
|
||||
<el-radio :label="0">关闭</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<div v-if="promoterForm.extension_status == 1">
|
||||
<el-form-item prop="extension_one_rate">
|
||||
<span slot="label">
|
||||
<span>一级返佣比例:</span>
|
||||
<el-tooltip class="item" effect="dark" content="订单交易成功后给上级返佣的比例0 - 100,例:5 = 反订单金额的5%" placement="top-start">
|
||||
<i class="el-icon-warning-outline" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-input-number v-model="promoterForm.extension_one_rate" :precision="2" :step="0.1" :min="0" class="selWidth"></el-input-number>
|
||||
<span>%</span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="extension_two_rate">
|
||||
<span slot="label">
|
||||
<span>二级返佣比例:</span>
|
||||
<el-tooltip class="item" effect="dark" content="订单交易成功后给上级返佣的比例0 ~ 100,例:5 = 反订单金额的5%" placement="top-start">
|
||||
<i class="el-icon-warning-outline" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<el-input-number v-model="promoterForm.extension_two_rate" :precision="2" :step="0.1" :min="0" class="selWidth"></el-input-number>
|
||||
<span>%</span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="extension_level_set">
|
||||
<span slot="label">
|
||||
<span>等级上浮比例:</span>
|
||||
<el-tooltip class="item" effect="dark" content="在分销佣金基础上浮(0-100)百分比" placement="top-start">
|
||||
<i class="el-icon-warning-outline" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
<div class="level_list">
|
||||
<div class="level-list-line" v-for="(item,index) in promoterForm.extension_level_set" :key="index">
|
||||
<span>{{ item.brokerage_name }}: 一级返佣上浮比例 </span>
|
||||
<el-input-number v-model="item.one_rate" :precision="2" :step="0.1" :min="0" class="selWidth"></el-input-number>
|
||||
<span>%,二级返佣上浮比例 </span>
|
||||
<el-input-number v-model="item.two_rate" :precision="2" :step="0.1" :min="0" class="selWidth"></el-input-number>
|
||||
<span>%</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="loading" @click="submitForm('promoterForm')">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getPromoterConfig, setPromoterConfig } from '@/api/promoter'
|
||||
export default {
|
||||
name: 'Index',
|
||||
data() {
|
||||
return {
|
||||
// 配置信息
|
||||
promoterForm: {},
|
||||
// 加载及验证
|
||||
loading: false,
|
||||
rules: {
|
||||
extension_status: [
|
||||
{ required: true, message: '请选择是否启用分销', trigger: 'change'}
|
||||
],
|
||||
extension_one_rate: [
|
||||
{ required: true, message: '请输入一级返佣比例', trigger: 'blur'}
|
||||
],
|
||||
extension_two_rate: [
|
||||
{ required: true, message: '请输入二级返佣比例', trigger: 'blur'}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getConfig()
|
||||
},
|
||||
methods: {
|
||||
// 配置 - 获取配置
|
||||
getConfig() {
|
||||
getPromoterConfig().then(res => {
|
||||
this.promoterForm = res.data
|
||||
}).catch((res) => {
|
||||
this.$message.error(res.message)
|
||||
})
|
||||
},
|
||||
// 提交信息
|
||||
submitForm(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
setPromoterConfig(this.promoterForm).then(message => {
|
||||
this.loading = false
|
||||
this.$message.success(message)
|
||||
}).catch((res) => {
|
||||
this.loading = false
|
||||
this.$message.error(res.message)
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.selWidth{
|
||||
width: 300px;
|
||||
}
|
||||
.item-text{
|
||||
display: inline-block;
|
||||
margin-left: 30px;
|
||||
color: #606266;
|
||||
.title{
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.font-red{
|
||||
color: #ff4949;
|
||||
}
|
||||
.level_list{
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
overflow: auto;
|
||||
.level-list-line{
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
min-width: 900px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,291 @@
|
|||
<template>
|
||||
<div class="divBox">
|
||||
分销订单
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
components: { },
|
||||
data() {
|
||||
return {
|
||||
orderId: 0,
|
||||
tableData: {
|
||||
data: [],
|
||||
total: 0,
|
||||
},
|
||||
activity: [
|
||||
{name: "普通订单",type: 0},
|
||||
{name: "秒杀订单",type: 1},
|
||||
{name: "预售订单",type: 2},
|
||||
{name: "助力订单",type: 3},
|
||||
{name: "拼团订单",type: 4}
|
||||
],
|
||||
listLoading: true,
|
||||
tableFrom: {
|
||||
order_sn: this.$route.query.order_sn ? this.$route.query.order_sn : "",
|
||||
group_order_sn: '',
|
||||
keywords: "",
|
||||
username: "",
|
||||
store_name: "",
|
||||
status: "",
|
||||
date: "",
|
||||
mer_id: "",
|
||||
page: 1,
|
||||
limit: 20,
|
||||
is_trader: '',
|
||||
pay_type: "",
|
||||
filter_delivery: '',
|
||||
filter_product : '',
|
||||
activity_type: ''
|
||||
},
|
||||
dliveryWayList: [
|
||||
{ value: 1, label: '快递订单' },
|
||||
{ value: 2, label: '配送订单' },
|
||||
{ value: 4, label: '核销订单' },
|
||||
{ value: 3, label: '虚拟发货' },
|
||||
{ value: 6, label: '自动发货' }
|
||||
], //发货方式
|
||||
productTypeList: [
|
||||
{ value: 1, label: '实物商品' },
|
||||
{ value: 2, label: '虚拟商品' },
|
||||
{ value: 3, label: '卡密商品' }
|
||||
], //商品类型
|
||||
orderChartType: {},
|
||||
timeVal: [],
|
||||
fromList: fromList,
|
||||
selectionList: [],
|
||||
ids: "",
|
||||
uid: "",
|
||||
cancel_time: "",
|
||||
visibleDetail: false,
|
||||
tableFromLog: {
|
||||
page: 1,
|
||||
limit: 10,
|
||||
},
|
||||
tableDataLog: {
|
||||
data: [],
|
||||
total: 0,
|
||||
},
|
||||
LogLoading: false,
|
||||
dialogVisible: false,
|
||||
cardLists: [],
|
||||
orderDatalist: null,
|
||||
merSelect: [],
|
||||
drawer: false,
|
||||
userDrawer: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
if (this.$route.query.hasOwnProperty("order_sn")) {
|
||||
this.tableFrom.order_sn = this.$route.query.order_sn;
|
||||
} else {
|
||||
this.tableFrom.order_sn = "";
|
||||
}
|
||||
this.headerList();
|
||||
this.getMerSelect();
|
||||
this.getList('');
|
||||
},
|
||||
// 被缓存接收参数
|
||||
activated() {
|
||||
// if (this.$route.query.hasOwnProperty("order_sn")) {
|
||||
// this.tableFrom.order_sn = this.$route.query.order_sn;
|
||||
// } else {
|
||||
// this.tableFrom.order_sn = "";
|
||||
// }
|
||||
// this.headerList();
|
||||
// this.getMerSelect();
|
||||
// this.getList('');
|
||||
},
|
||||
methods: {
|
||||
// 订单筛选
|
||||
orderFilter(item) {
|
||||
let status = false;
|
||||
item.orderProduct.forEach((el) => {
|
||||
if (el.refund_num > 0 && el.refund_num < el.product_num) {
|
||||
status = true;
|
||||
}
|
||||
});
|
||||
return status;
|
||||
},
|
||||
// 表格某一行添加特定的样式
|
||||
addTdClass(val) {
|
||||
if (val.row.status > 0 && val.row.paid == 1) {
|
||||
for (let i = 0; i < val.row.orderProduct.length; i++) {
|
||||
if (val.row.orderProduct[i].refund_num > 0 && val.row.orderProduct[i].refund_num < val.row.orderProduct[i].product_num) {
|
||||
return "row-bg";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return " ";
|
||||
}
|
||||
},
|
||||
// 商户列表;
|
||||
getMerSelect() {
|
||||
merSelectApi()
|
||||
.then((res) => {
|
||||
this.merSelect = res.data;
|
||||
})
|
||||
.catch((res) => {
|
||||
this.$message.error(res.message);
|
||||
});
|
||||
},
|
||||
// 用户信息
|
||||
onUserDetails(uid) {
|
||||
this.uid = uid
|
||||
this.userDrawer = true
|
||||
this.$refs.userDetails.getData(uid);
|
||||
},
|
||||
closeDrawer() {
|
||||
this.drawer = false
|
||||
this.userDrawer = false
|
||||
},
|
||||
changeDrawer(v) {
|
||||
this.drawer = v;
|
||||
this.userDrawer = v;
|
||||
},
|
||||
async exports() {
|
||||
let excelData = JSON.parse(JSON.stringify(this.tableFrom)), data = []
|
||||
excelData.page = 1
|
||||
let pageCount = 1
|
||||
let lebData = {};
|
||||
for (let i = 0; i < pageCount; i++) {
|
||||
lebData = await this.downData(excelData)
|
||||
pageCount = Math.ceil(lebData.count/excelData.limit)
|
||||
if (lebData.export.length) {
|
||||
data = data.concat(lebData.export)
|
||||
excelData.page++
|
||||
}
|
||||
}
|
||||
createWorkBook(lebData.header, lebData.title, data, lebData.foot,lebData.filename);
|
||||
return
|
||||
},
|
||||
/**订单列表 */
|
||||
downData(excelData) {
|
||||
return new Promise((resolve, reject) => {
|
||||
exportOrderApi(excelData).then((res) => {
|
||||
return resolve(res.data)
|
||||
})
|
||||
})
|
||||
},
|
||||
// 导出
|
||||
exportRecord() {
|
||||
exportOrderApi(this.tableFrom)
|
||||
.then((res) => {
|
||||
const h = this.$createElement;
|
||||
this.$msgbox({
|
||||
title: '提示',
|
||||
message: h('p', null, [
|
||||
h('span', null, '文件正在生成中,请稍后点击"'),
|
||||
h('span', { style: 'color: teal' }, '导出记录'),
|
||||
h('span', null, '"查看~ '),
|
||||
]),
|
||||
confirmButtonText: '我知道了',
|
||||
}).then(action => {
|
||||
|
||||
});
|
||||
})
|
||||
.catch((res) => {
|
||||
this.$message.error(res.message)
|
||||
})
|
||||
},
|
||||
// 详情
|
||||
onOrderDetails(id) {
|
||||
this.orderId = id;
|
||||
this.$refs.orderDetail.getInfo(id);
|
||||
this.drawer = true;
|
||||
// this.$refs.orderDetail.onOrderDetails(id);
|
||||
// this.$refs.orderDetail.onOrderLog(id);
|
||||
},
|
||||
pageChangeLog(page) {
|
||||
this.tableFromLog.page = page;
|
||||
this.getList('');
|
||||
},
|
||||
handleSizeChangeLog(val) {
|
||||
this.tableFromLog.limit = val;
|
||||
this.getList('');
|
||||
},
|
||||
// 选择时间
|
||||
selectChange(tab) {
|
||||
this.tableFrom.date = tab;
|
||||
this.tableFrom.page = 1;
|
||||
this.timeVal = [];
|
||||
this.getList(1);
|
||||
},
|
||||
// 具体日期
|
||||
onchangeTime(e) {
|
||||
this.timeVal = e;
|
||||
this.tableFrom.date = e ? this.timeVal.join("-") : "";
|
||||
this.tableFrom.page = 1;
|
||||
this.getList(1);
|
||||
},
|
||||
// 列表
|
||||
getList(num) {
|
||||
this.listLoading = true;
|
||||
this.tableFrom.page = num ? num : this.tableFrom.page;
|
||||
spreadOrderLst(this.tableFrom)
|
||||
.then((res) => {
|
||||
this.tableData.data = res.data.list;
|
||||
this.tableData.total = res.data.count;
|
||||
this.listLoading = false;
|
||||
|
||||
})
|
||||
.catch((res) => {
|
||||
this.$message.error(res.message);
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
|
||||
pageChange(page) {
|
||||
this.tableFrom.page = page;
|
||||
this.getList('');
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.tableFrom.limit = val;
|
||||
this.getList('');
|
||||
},
|
||||
headerList() {
|
||||
spreadChartApi()
|
||||
.then((res) => {
|
||||
this.orderChartType = res.data;
|
||||
})
|
||||
.catch((res) => {
|
||||
this.$message.error(res.message);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.demo-table-expand {
|
||||
/deep/ label {
|
||||
width: 83px !important;
|
||||
}
|
||||
}
|
||||
.selWidth {
|
||||
width: 300px;
|
||||
}
|
||||
.el-dropdown-link {
|
||||
cursor: pointer;
|
||||
color: #409eff;
|
||||
font-size: 12px;
|
||||
}
|
||||
.el-icon-arrow-down {
|
||||
font-size: 12px;
|
||||
}
|
||||
.tabBox_tit {
|
||||
max-width: 60%;
|
||||
font-size: 12px !important;
|
||||
margin: 0 2px 0 10px;
|
||||
letter-spacing: 1px;
|
||||
padding: 5px 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/deep/.row-bg {
|
||||
.cell {
|
||||
color: red !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in New Issue