添加:商户分割为商户、酒道馆、供应商

This commit is contained in:
wuhui_zzw 2024-02-04 11:42:03 +08:00
parent ad1e81ae73
commit 945ebdfc51
8 changed files with 1098 additions and 163 deletions

View File

@ -210,8 +210,8 @@ export function merchantIsCloseApi(id, status) {
/**
* @description 商户列表 -- 开启商户数
*/
export function merchantCountApi() {
return request.get(`system/merchant/count`)
export function merchantCountApi(data) {
return request.get(`system/merchant/count`,data)
}
/**

View File

@ -1,127 +1,145 @@
import Layout from '@/layout'
import { roterPre } from '@/settings'
import {roterPre} from '@/settings'
const merchantRouter =
{
path: `${roterPre}/merchant`,
name: 'merchant',
meta: {
icon: 'dashboard',
title: '商户管理'
{
path: `${roterPre}/merchant`,
name: 'merchant',
meta: {
icon: 'dashboard',
title: '商户管理'
},
alwaysShow: true,
component: Layout,
children: [
{
path: 'system',
name: 'MerchantSystem',
meta: {
title: '商户权限管理',
noCache: true
},
component: () => import('@/views/merchant/system/index')
},
alwaysShow: true,
component: Layout,
children: [
{
path: 'system',
name: 'MerchantSystem',
meta: {
title: '商户权限管理',
noCache: true
},
component: () => import('@/views/merchant/system/index')
{
path: 'list',
name: 'MerchantList',
meta: {
title: '商户列表',
noCache: true
},
{
path: 'list',
name: 'MerchantList',
meta: {
title: '商户列表',
noCache: true
},
component: () => import('@/views/merchant/list/index')
component: () => import('@/views/merchant/list/index')
},
{
path: 'shop',
name: 'MerchantShopList',
meta: {
title: '酒道馆',
noCache: true
},
{
path: 'list/reconciliation/:id/:type?',
name: 'MerchantRecord',
component: () => import('@/views/merchant/list/record'),
meta: {
title: '商户对账',
noCache: true,
activeMenu: `${roterPre}/merchant/list`
},
hidden: true
component: () => import('@/views/merchant/list/shop')
},
{
path: 'supplier',
name: 'MerchantSupplierList',
meta: {
title: '供应商',
noCache: true
},
{
path: 'classify',
name: 'MerchantClassify',
meta: {
title: '商户分类',
noCache: true
},
component: () => import('@/views/merchant/classify')
component: () => import('@/views/merchant/list/supplier')
},
{
path: 'list/reconciliation/:id/:type?',
name: 'MerchantRecord',
component: () => import('@/views/merchant/list/record'),
meta: {
title: '商户对账',
noCache: true,
activeMenu: `${roterPre}/merchant/list`
},
{
path: 'application',
name: 'MerchantApplication',
meta: {
title: '商户申请',
noCache: true
},
component: () => import('@/views/merchant/application')
hidden: true
},
{
path: 'classify',
name: 'MerchantClassify',
meta: {
title: '商户分类',
noCache: true
},
{
path: 'agree',
name: 'MerchantAgreement',
meta: {
title: '入驻协议',
noCache: true
},
component: () => import('@/views/merchant/agreement')
component: () => import('@/views/merchant/classify')
},
{
path: 'application',
name: 'MerchantApplication',
meta: {
title: '商户申请',
noCache: true
},
{
path: 'type',
name: 'storeType',
meta: {
title: '店铺类型',
noCache: true
},
component: () => import('@/views/merchant/type/index')
},
{
path: 'applyMents',
name: 'MerchantApplyMents',
meta: {
title: '服务申请',
noCache: true
},
component: () => import('@/views/merchant/applyments/index')
},
{
path: 'applyList',
name: 'ApplyList',
meta: {
title: '分账商户列表'
},
component: () => import('@/views/merchant/applyments/list')
},
{
path: 'type/description',
name: 'MerTypeDesc',
meta: {
title: '店铺类型说明',
noCache: true,
},
component: () => import('@/views/merchant/type/description')
},
{
path: 'deposit_list',
name: 'DepositList',
meta: {
title: '店铺保证金管理',
noCache: true
},
component: () => import('@/views/merchant/deposit/index')
},
{
path: 'recharge_record',
name: 'RechargeRecord',
meta: {
title: '商户充值记录',
noCache: true
},
component: () => import('@/views/merchant/rechargeRecord/index')
},
]
}
component: () => import('@/views/merchant/application')
},
{
path: 'agree',
name: 'MerchantAgreement',
meta: {
title: '入驻协议',
noCache: true
},
component: () => import('@/views/merchant/agreement')
},
{
path: 'type',
name: 'storeType',
meta: {
title: '店铺类型',
noCache: true
},
component: () => import('@/views/merchant/type/index')
},
{
path: 'applyMents',
name: 'MerchantApplyMents',
meta: {
title: '服务申请',
noCache: true
},
component: () => import('@/views/merchant/applyments/index')
},
{
path: 'applyList',
name: 'ApplyList',
meta: {
title: '分账商户列表'
},
component: () => import('@/views/merchant/applyments/list')
},
{
path: 'type/description',
name: 'MerTypeDesc',
meta: {
title: '店铺类型说明',
noCache: true,
},
component: () => import('@/views/merchant/type/description')
},
{
path: 'deposit_list',
name: 'DepositList',
meta: {
title: '店铺保证金管理',
noCache: true
},
component: () => import('@/views/merchant/deposit/index')
},
{
path: 'recharge_record',
name: 'RechargeRecord',
meta: {
title: '商户充值记录',
noCache: true
},
component: () => import('@/views/merchant/rechargeRecord/index')
},
]
}
export default merchantRouter

View File

@ -72,13 +72,13 @@
<div v-else class="head">
<div class="text">
<div class="title">
<span class="bold">添加商户</span>
<span class="bold">添加{{ defaultMerchantType == 1 ? '酒道馆' : (defaultMerchantType == 2 ? '供应商' :'商户') }}</span>
</div>
</div>
</div>
<!--详情-->
<merEditForm ref="editForm" :merId="merId" :isAdd="isAdd" :merData="merData" @modifyCopy="modifyCopy" @success="editSuccess" v-if="isEdit || isAdd"></merEditForm>
<mer-info ref="merInfo" :merData="merData" v-else-if="!isEdit && !isAdd"></mer-info>
<merEditForm ref="editForm" :defaultMerchantType="defaultMerchantType" :merId="merId" :isAdd="isAdd" :merData="merData" @modifyCopy="modifyCopy" @success="editSuccess" v-if="isEdit || isAdd"></merEditForm>
<mer-info ref="merInfo" :defaultMerchantType="defaultMerchantType" :merData="merData" v-else-if="!isEdit && !isAdd"></mer-info>
</div>
<div v-if="isAdd" class="footer">
<el-button size="small" @click="handleClose">取消</el-button>
@ -101,6 +101,10 @@ export default {
type: Boolean,
default: false,
},
defaultMerchantType: {
type: [Number, String],
default: 0,
},
},
components: { merInfo, merEditForm },
data() {
@ -116,8 +120,7 @@ export default {
};
},
filters: {
},
filters: {},
methods: {
handleClose() {
if(this.isEdit || this.isAdd) {

View File

@ -13,16 +13,16 @@
<div class="title">基础信息</div>
<el-row :gutter="24" class="mt20">
<el-col :span="12">
<el-form-item label="商户名称:" prop="mer_name">
<el-form-item :label="mar_type_name + '名称:'" prop="mer_name">
<el-input
v-model="merData.mer_name"
placeholder="请填写商户名称"
:placeholder="'请填写' + mar_type_name + '名称'"
class="selWidth"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商户地址:" prop="mer_address">
<el-form-item :label="mar_type_name + '地址:'" prop="mer_address">
<el-input
v-model="merData.mer_address"
placeholder="请填写详细地址"
@ -33,7 +33,7 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="商户分类:" prop="category_id">
<el-form-item :label="mar_type_name + '分类:'" prop="category_id">
<el-select
v-model="merData.category_id"
placeholder="请选择"
@ -49,7 +49,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商户类型:" prop="is_trader">
<el-form-item :label="mar_type_name + '类型:'" prop="is_trader">
<el-radio-group
v-model="merData.is_trader"
>
@ -77,7 +77,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="推荐商户:" prop="is_best">
<el-form-item :label="'推荐' + mar_type_name + ''" prop="is_best">
<el-switch
v-model="merData.is_best"
:active-value="1"
@ -100,7 +100,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商户状态:" prop="status">
<el-form-item :label="mar_type_name + '状态:'" prop="status">
<el-switch
v-model="merData.status"
:active-value="1"
@ -133,8 +133,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="商户标签:" prop="mer_label">
<el-input type="textarea" v-model="merData.mer_label" placeholder="请填写商户标签,多个以逗号隔开!" class="selWidth" />
<el-form-item :label="mar_type_name + '标签:'" prop="mer_label">
<el-input type="textarea" v-model="merData.mer_label" placeholder="请填写标签,多个以逗号隔开!" class="selWidth" />
</el-form-item>
</el-col>
</el-row>
@ -160,7 +160,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="商户手续费单独设置:" label-width="150px" prop="commission_rate">
<el-form-item :label="mar_type_name + '手续费单独设置:'" label-width="150px" prop="commission_rate">
<el-switch
v-model="merData.commission_switch"
:active-value="1"
@ -169,7 +169,7 @@
active-text="开启"
inactive-text="关闭"
/>
<span class="info info-red">(此处如未设置手续费系统会自动读取商户分类下对应手续费此处已设置则优先以此处设置为准)</span>
<span class="info info-red">(此处如未设置手续费系统会自动读取{{ mar_type_name }}分类下对应手续费此处已设置则优先以此处设置为准)</span>
</el-form-item>
</el-col>
<el-col v-if="merData.commission_switch" :span="24">
@ -231,8 +231,8 @@
<div class="mt20">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="商户关键字:" prop="mer_keyword">
<el-input v-model="merData.mer_keyword" placeholder="请填写商户关键字" class="selWidth" />
<el-form-item :label="mar_type_name + '关键字:'" prop="mer_keyword">
<el-input v-model="merData.mer_keyword" placeholder="请填写关键字" class="selWidth" />
</el-form-item>
</el-col>
</el-row>
@ -252,7 +252,7 @@
<div class="title">登录账号</div>
<el-row :gutter="24" class="mt20">
<el-col :span="12">
<el-form-item label="商户账号:" prop="mer_account">
<el-form-item :label="mar_type_name + '账号:'" prop="mer_account">
<el-input
type="text"
v-model="merData.mer_account"
@ -296,16 +296,18 @@
<div class="title">财务帐号</div>
<el-row :gutter="24" class="mt20">
<el-col :span="12">
<el-form-item label="分账商户号:" prop="sub_mchid">
<el-form-item :label="'分账' + mar_type_name + '号:'" prop="sub_mchid">
<el-input
placeholder="请填写分账商户号"
:placeholder="'请填写分账' + mar_type_name + '号'"
v-model="merData.sub_mchid"
class="selWidth"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<div class="info-red" style="margin-left: 120px;">当开启自动分账时每个子商户在微信后台的分账商户号即特约子商户号</div>
<div class="info-red" style="margin-left: 120px;">
当开启自动分账时每个子{{ mar_type_name }} 在微信后台的分账{{ mar_type_name }} 即特约子{{ mar_type_name }}
</div>
</el-col>
</el-row>
</div>
@ -321,6 +323,17 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" class="mt20">
<el-col :span="12">
<el-form-item :label="mar_type_name +' 类别:'" prop="merchant_type">
<el-select v-model="merData.merchant_type" disabled placeholder="请选择" class="selWidth">
<el-option label="普通商户" :value="0" />
<el-option label="酒道馆" :value="1" />
<el-option label="供应商" :value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<!--<el-row :gutter="24" class="mt20">
<el-col :span="24">
<el-form-item label="商户积分兑换平台积分比例:" prop="mer_integral_platform_rate" label-width="200">
@ -359,7 +372,11 @@ export default {
isAdd: {
type: Boolean,
default: false,
}
},
defaultMerchantType: {
type: [Number, String],
default: 0,
},
},
data() {
const validatePhone = (rule, value, callback) => {
@ -372,6 +389,7 @@ export default {
}
}
return {
mar_type_name: '商户',
loading: false,
merId: '',
direction: 'rtl',
@ -380,13 +398,13 @@ export default {
storeType: [],
ruleValidate: {
mer_name: [
{ required: true, message: '请输入商户名称', trigger: 'blur' }
{ required: true, message: `请输入${this.mar_type_name}名称`, trigger: 'blur' }
],
mer_account: [
{ required: true, message: '请输入商户账号', trigger: 'blur' }
{ required: true, message: `请输入${this.mar_type_name}账号`, trigger: 'blur' }
],
category_id: [
{ required: true, message: '请选择商户分类', trigger: 'change' }
{ required: true, message: `请选择${this.mar_type_name}分类`, trigger: 'change' }
],
type_id: [
{ required: true, message: '请选择店铺类型', trigger: 'change' }
@ -395,7 +413,15 @@ export default {
},
};
},
filters: {
filters: {},
watch: {
merData: {
handler() {
this.merData.merchant_type = this.defaultMerchantType || 0;
this.mar_type_name = this.defaultMerchantType == 1 ? '酒道馆' : (this.defaultMerchantType == 2 ? '供应商' :'商户');
},
deep: true
}
},
mounted() {
this.getCategorySelect();
@ -457,10 +483,10 @@ export default {
this.$message.error(res.message);
});
} else {
if(!this.merData.mer_name)return this.$message.error('请填写基本信息-商户名称');
if(!this.merData.category_id)return this.$message.error('请选择基本信息-商户分类');
if(!this.merData.mer_name)return this.$message.error(`请填写基本信息-${mar_type_name}名称`);
if(!this.merData.category_id)return this.$message.error(`请选择基本信息-${mar_type_name}分类`);
if(!this.merData.type_id)return this.$message.error('请选择基本信息-店铺类型');
if(!this.merData.mer_account)return this.$message.error('请填写账号信息-商户账号');
if(!this.merData.mer_account)return this.$message.error(`请填写账号信息-${mar_type_name}账号`);
if(!this.merData.mer_phone)return this.$message.error('请填写账号信息-联系电话');
}
});

View File

@ -6,24 +6,24 @@
<div class="title">基础信息</div>
<ul class="list">
<li class="item">
<div>商户名称</div>
<div>{{ mar_type_name }}名称</div>
<div class="value">
{{merData.mer_name}}
</div>
</li>
<li class="item">
<div>商户类型</div>
<div>{{ mar_type_name }}类型</div>
<div class="value">{{merData.is_trader == 1 ? "自营" : "非自营"}}</div>
</li>
<li class="item">
<div>商户分类</div>
<div>{{ mar_type_name }}分类</div>
<div v-if="merData.merchantCategory" class="value">
{{merData.merchantCategory.category_name}}
<span class="info info-red">(该分类下的商户手续费是{{merData.merchantCategory.commission_rate*100}}%)</span>
<span class="info info-red">(该分类下的{{ mar_type_name }}手续费是{{merData.merchantCategory.commission_rate*100}}%)</span>
</div>
</li>
<li class="item">
<div>推荐商户</div>
<div>推荐{{ mar_type_name }}</div>
<div class="value">{{merData.is_best == 1 ? "是" : "否"}}</div>
</li>
<li v-if="merData.merchantType" class="item">
@ -31,7 +31,7 @@
<div class="value">{{merData.merchantType.type_name}}</div>
</li>
<li class="item">
<div>商户状态</div>
<div>{{ mar_type_name }}状态</div>
<div class="value">{{merData.status == 1 ? "开启" : "关闭"}}</div>
</li>
<li class="item">
@ -51,7 +51,7 @@
<div class="value">{{merData.avg_consumption}}</div>
</li>
<li class="item">
<div>商户标签</div>
<div>{{ mar_type_name }}标签</div>
<div class="value">{{merData.mer_label}}</div>
</li>
</ul>
@ -62,16 +62,16 @@
<div class="title">费用信息</div>
<ul class="list">
<li class="item item100">
<div>商户手续费单独设置</div>
<div>{{ mar_type_name }}手续费单独设置</div>
<div class="value">
{{merData.commission_switch ? "开启" : "关闭"}}
</div>
</li>
<li v-if="merData.commission_switch" class="item item100">
<div>商户手续费</div>
<div>{{ mar_type_name }}手续费</div>
<div class="value">
{{ merData.commission_rate}}%
<span class="info info-red">(此处如未设置手续费系统会自动读取商户分类下对应手续费此处已设置则优先以此处设置为准)</span>
<span class="info info-red">(此处如未设置手续费系统会自动读取{{ mar_type_name }}分类下对应手续费此处已设置则优先以此处设置为准)</span>
</div>
</li>
<li class="item">
@ -113,7 +113,7 @@
<div class="title">其他信息</div>
<ul class="list">
<li class="item item100">
<div>搜索商户关键字</div>
<div>搜索{{ mar_type_name }}关键字</div>
<div class="value">{{merData.mer_keyword}}</div>
</li>
<li class="item item100">
@ -121,7 +121,7 @@
<div class="value">{{merData.copy_product_num}}</div>
</li>
<li class="item item100">
<div>商户资质</div>
<div>{{ mar_type_name }}资质</div>
<div class="value">
<el-image
v-for="(item, index) in merData.mer_certificate"
@ -140,7 +140,7 @@
<div class="title">登录账号</div>
<ul class="list">
<li class="item">
<div>商户账号</div>
<div>{{ mar_type_name }}账号</div>
<div class="value">
{{merData.mer_account}}
</div>
@ -172,7 +172,7 @@
<div class="title">财务帐号</div>
<ul class="list">
<li class="item">
<div>微信分账商户</div>
<div>微信分账{{ mar_type_name }}</div>
<div class="value">{{merData.sub_mchid}}</div>
</li>
</ul>
@ -187,6 +187,13 @@
<div class="value" v-if="merData.mer_exchange_quota_multiple > 0">{{merData.mer_exchange_quota_multiple}}</div>
<div class="value" v-else>未设置</div>
</li>
<li class="item">
<div>{{ mar_type_name }}类别</div>
<!--商户类别0=普通商户1=酒道馆2=供应商-->
<div class="value" v-if="merData.merchant_type == 0">普通商户</div>
<div class="value" v-else-if="merData.merchant_type == 1">酒道馆</div>
<div class="value" v-else-if="merData.merchant_type == 2">供应商</div>
</li>
<!--<li class="item">
<div>商户积分兑换平台积分比例</div>
<div class="value">
@ -214,6 +221,10 @@ export default {
type: Object,
default: {},
},
defaultMerchantType: {
type: [Number, String],
default: 0,
},
},
data() {
return {
@ -223,7 +234,15 @@ export default {
activeName: 'detail',
};
},
filters: {
filters: {},
watch: {
merData: {
handler() {
this.merData.merchant_type = this.defaultMerchantType || 0;
this.mar_type_name = this.defaultMerchantType == 1 ? '酒道馆' : (this.defaultMerchantType == 2 ? '供应商' :'商户');
},
deep: true
}
},
methods: {
lookImg(item) {

View File

@ -207,6 +207,7 @@
@handleTimes="handleTimes"
@getList="getList"
:drawer="drawer"
:defaultMerchantType="0"
></mer-detail>
</div>
</template>

View File

@ -0,0 +1,434 @@
<template>
<div class="divBox">
<el-card class="box-card">
<div slot="header" class="clearfix">
<div class="container">
<el-form size="small" label-width="100px" :inline="true">
<el-form-item label="选择时间:" style="display: inline-block">
<el-radio-group
v-model="tableFrom.date"
size="small"
@change="selectChange(tableFrom.date)"
>
<el-radio-button
v-for="(itemn,indexn) in fromList.fromTxt"
:key="indexn"
:label="itemn.val"
>{{ itemn.text }}</el-radio-button>
</el-radio-group>
<el-date-picker
v-model="timeVal"
type="daterange"
placeholder="选择日期"
format="yyyy/MM/dd"
value-format="yyyy/MM/dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="onchangeTime"
/>
</el-form-item>
<el-form-item label="关键字:" label-width="80px" style="display: inline-block;">
<el-input
v-model="tableFrom.keyword"
@keyup.enter.native="getList(1)"
placeholder="请输入店铺关键字/店铺名/联系电话"
class="selWidth"
>
<el-button slot="append" icon="el-icon-search" class="el-button-solt" @click="getList(1)" />
</el-input>
</el-form-item>
<el-form-item label="酒道馆类别:">
<el-select
v-model="tableFrom.is_trader"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option label="自营" value="1" />
<el-option label="非自营" value="0" />
</el-select>
</el-form-item>
<el-form-item label="酒道馆分类:">
<el-select
v-model="tableFrom.category_id"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option
v-for="item in merCateList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="店铺类型:">
<el-select
v-model="tableFrom.type_id"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option
v-for="item in storeType"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否推荐:">
<el-select
v-model="tableFrom.is_best"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option key="1" label="是" value="1"/>
<el-option key="0" label="否" value="0"/>
</el-select>
</el-form-item>
<el-tabs v-if="headeNum.length > 0" v-model="tableFrom.status" @tab-click="getList(1),getHeadNum()">
<el-tab-pane
v-for="(item,index) in headeNum"
:key="index"
:name="item.type.toString()"
:label="item.title +'('+item.count +')' "
/>
</el-tabs>
</el-form>
</div>
<el-button size="small" type="primary" @click="onAdd">添加酒道馆</el-button>
</div>
<el-table
v-loading="listLoading"
:data="tableData.data"
style="width: 100%"
size="small"
highlight-current-row
class="switchTable"
>
<el-table-column prop="mer_id" label="ID" min-width="60" />
<el-table-column prop="mer_name" label="酒道馆名称" min-width="150" />
<el-table-column prop="real_name" label="酒道馆姓名" min-width="150" />
<el-table-column prop="status" label="推荐" min-width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.is_best"
:active-value="1"
:inactive-value="0"
active-text="是"
inactive-text="否"
disabled
@click.native="onchangeIsShow(scope.row)"
/>
</template>
</el-table-column>
<el-table-column prop="status" label="开启/关闭" min-width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
:active-value="1"
:inactive-value="0"
active-text="开启"
inactive-text="关闭"
disabled
@click.native="onchangeIsClose(scope.row)"
/>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建时间" min-width="150" />
<el-table-column prop="margin" label="保证金" min-width="150">
<template slot-scope="scope">
<span>{{scope.row.is_margin == 1 ? '未支付' : scope.row.is_margin == 0 ? '无' : '已支付'}}</span>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="100" />
<el-table-column prop="mark" label="备注" min-width="200" />
<el-table-column label="操作" min-width="150" fixed="right" align="center">
<template slot-scope="scope">
<!-- <router-link
v-if="tableFrom.status === '1'"
:to="{path: roterPre+ '/merchant/list/reconciliation/' + scope.row.mer_id + '/1' }"
>
<el-button type="text" size="small" class="mr10">对账</el-button>
</router-link> -->
<el-button
v-if="tableFrom.status === '1'"
type="text"
size="small"
@click="onLogo(scope.row.mer_id)"
>登录</el-button>
<el-button type="text" size="small" @click="onEdit(scope.row.mer_id)">编辑</el-button>
<el-button type="text" size="small" @click="onDetails(scope.row.mer_id)">详情</el-button>
<el-button
v-if="tableFrom.status === '0'"
type="text"
size="small"
@click="handleDelete(scope.row.mer_id, scope.$index)"
>删除</el-button>
<!-- <el-button
v-if="tableFrom.status === '1'"
type="text"
size="small"
@click="onDeduct(scope.row.mer_id)"
>扣除保证金</el-button> -->
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
:page-sizes="[20, 40, 60, 80]"
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="total, sizes, prev, pager, next, jumper"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</el-card>
<!--酒道馆详情-->
<mer-detail
ref="merDetail"
:merId="merId"
@closeDrawer="closeDrawer"
@changeDrawer="changeDrawer"
@onPassword="onPassword"
@handleTimes="handleTimes"
@getList="getList"
:drawer="drawer"
:defaultMerchantType="1"
></mer-detail>
</div>
</template>
<script>
import {
merchantListApi,
merchantCreateApi,
merchantUpdateApi,
merchantDeleteForm,
merchantStatuseApi,
merchantPasswordApi,
merchantLoginApi,
changeCopyApi,
merchantCountApi,
merchantIsCloseApi,
getstoreTypeApi,
getMerCateApi, marginDeductionForm
} from "@/api/merchant";
import merDetail from './handle/merDetails.vue';
import { fromList } from "@/libs/constants.js";
import { roterPre } from "@/settings";
import SettingMer from "@/libs/settingMer";
import Cookies from "js-cookie";
export default {
name: "MerchantList",
components: { merDetail },
data() {
return {
fromList: fromList,
roterPre: roterPre,
isChecked: false,
listLoading: true,
merCateList: [],
storeType: [],
headeNum: [
{
count: '',
type: "1",
title: "正常开启的酒道馆"
},
{
count: '',
type: "0",
title: "已关闭酒道馆"
}
],
tableData: {
data: [],
total: 0
},
tableFrom: {
page: 1,
limit: 20,
date: "",
status: "1",
keyword: "",
is_trader: "",
is_best: "",
category_id: '',
type_id: "",
merchant_type: 1
},
autoUpdate: true,
merId: "",
drawer: false,
timeVal: []
};
},
mounted() {
this.getHeadNum();
this.getMerCategory();
this.getStoreType();
this.getList("");
},
methods: {
onLogo(id) {
merchantLoginApi(id)
.then(res => {
Cookies.set("merchantToken", res.data.token);
window.open(SettingMer.httpUrl + res.data.url);
})
.catch(res => {
this.$message.error(res.message);
});
},
//
selectChange(tab) {
this.tableFrom.date = tab;
this.timeVal = [];
this.tableFrom.page = 1;
this.getList("");
},
//
onchangeTime(e) {
this.timeVal = e;
this.tableFrom.date = this.timeVal ? this.timeVal.join("-") : "";
this.tableFrom.page = 1;
this.getList("");
},
//
getHeadNum() {
merchantCountApi(this.tableFrom)
.then(res => {
this.headeNum[0]["count"] = res.data.valid;
this.headeNum[1]["count"] = res.data.invalid;
})
.catch(res => {});
},
//
getMerCategory() {
getMerCateApi().then(res => {
this.merCateList = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
getStoreType(){
getstoreTypeApi().then(res => {
this.storeType = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
//
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
merchantListApi(this.tableFrom)
.then(res => {
this.tableData.data = res.data.list;
this.tableData.total = res.data.count;
this.listLoading = false;
})
.catch(res => {
this.listLoading = false;
this.$message.error(res.message);
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList("");
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList(1);
},
//
onchangeIsShow(row) {
const title = row.is_best === 0 ? "是否开启推荐酒道馆" : "是否关闭推荐酒道馆";
this.$modalSure(title).then(() => {
merchantStatuseApi(row.mer_id, row.is_best === 1 ? 0 : 1)
.then(({ message }) => {
this.$message.success(message);
this.getList("");
})
.catch(({ message }) => {
this.$message.error(message);
});
});
},
//
onchangeIsClose(row) {
merchantIsCloseApi(row.mer_id, row.status === 1 ? 0 : 1)
.then(({ message }) => {
this.$message.success(message);
this.getList("");
})
.catch(({ message }) => {
this.$message.error(message);
});
},
//
onAdd() {
// this.$modalForm(merchantCreateApi()).then(() => this.getList(""));
this.drawer = true;
this.$refs.merDetail.initData();
},
//
onEdit(id) {
this.merId = id;
this.$refs.merDetail.isEdit = true;
this.$refs.merDetail.getInfo(id);
this.drawer = true;
},
//
onDetails(id) {
this.merId = id;
this.$refs.merDetail.isEdit = false;
this.$refs.merDetail.getInfo(id);
this.drawer = true;
},
changeDrawer(v) {
this.drawer = v;
},
closeDrawer() {
this.drawer = false;
},
//
handleDelete(id) {
this.$modalForm(merchantDeleteForm(id)).then(() => this.getList(""));
},
//
onDeduct(id) {
this.$modalForm(marginDeductionForm(id)).then(() => this.getList(""));
},
//
handleTimes(id) {
this.$modalForm(changeCopyApi(id)).then(() => this.getList(""));
},
//
onPassword(id) {
this.$modalForm(merchantPasswordApi(id));
}
}
};
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,434 @@
<template>
<div class="divBox">
<el-card class="box-card">
<div slot="header" class="clearfix">
<div class="container">
<el-form size="small" label-width="100px" :inline="true">
<el-form-item label="选择时间:" style="display: inline-block">
<el-radio-group
v-model="tableFrom.date"
size="small"
@change="selectChange(tableFrom.date)"
>
<el-radio-button
v-for="(itemn,indexn) in fromList.fromTxt"
:key="indexn"
:label="itemn.val"
>{{ itemn.text }}</el-radio-button>
</el-radio-group>
<el-date-picker
v-model="timeVal"
type="daterange"
placeholder="选择日期"
format="yyyy/MM/dd"
value-format="yyyy/MM/dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="onchangeTime"
/>
</el-form-item>
<el-form-item label="关键字:" label-width="80px" style="display: inline-block;">
<el-input
v-model="tableFrom.keyword"
@keyup.enter.native="getList(1)"
placeholder="请输入店铺关键字/店铺名/联系电话"
class="selWidth"
>
<el-button slot="append" icon="el-icon-search" class="el-button-solt" @click="getList(1)" />
</el-input>
</el-form-item>
<el-form-item label="供应商类别:">
<el-select
v-model="tableFrom.is_trader"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option label="自营" value="1" />
<el-option label="非自营" value="0" />
</el-select>
</el-form-item>
<el-form-item label="供应商分类:">
<el-select
v-model="tableFrom.category_id"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option
v-for="item in merCateList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="店铺类型:">
<el-select
v-model="tableFrom.type_id"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option
v-for="item in storeType"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否推荐:">
<el-select
v-model="tableFrom.is_best"
clearable
placeholder="请选择"
class="selWidth"
@change="getList(1)"
>
<el-option key="1" label="是" value="1"/>
<el-option key="0" label="否" value="0"/>
</el-select>
</el-form-item>
<el-tabs v-if="headeNum.length > 0" v-model="tableFrom.status" @tab-click="getList(1),getHeadNum()">
<el-tab-pane
v-for="(item,index) in headeNum"
:key="index"
:name="item.type.toString()"
:label="item.title +'('+item.count +')' "
/>
</el-tabs>
</el-form>
</div>
<el-button size="small" type="primary" @click="onAdd">添加供应商</el-button>
</div>
<el-table
v-loading="listLoading"
:data="tableData.data"
style="width: 100%"
size="small"
highlight-current-row
class="switchTable"
>
<el-table-column prop="mer_id" label="ID" min-width="60" />
<el-table-column prop="mer_name" label="供应商名称" min-width="150" />
<el-table-column prop="real_name" label="供应商姓名" min-width="150" />
<el-table-column prop="status" label="推荐" min-width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.is_best"
:active-value="1"
:inactive-value="0"
active-text="是"
inactive-text="否"
disabled
@click.native="onchangeIsShow(scope.row)"
/>
</template>
</el-table-column>
<el-table-column prop="status" label="开启/关闭" min-width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
:active-value="1"
:inactive-value="0"
active-text="开启"
inactive-text="关闭"
disabled
@click.native="onchangeIsClose(scope.row)"
/>
</template>
</el-table-column>
<el-table-column prop="create_time" label="创建时间" min-width="150" />
<el-table-column prop="margin" label="保证金" min-width="150">
<template slot-scope="scope">
<span>{{scope.row.is_margin == 1 ? '未支付' : scope.row.is_margin == 0 ? '无' : '已支付'}}</span>
</template>
</el-table-column>
<el-table-column prop="sort" label="排序" min-width="100" />
<el-table-column prop="mark" label="备注" min-width="200" />
<el-table-column label="操作" min-width="150" fixed="right" align="center">
<template slot-scope="scope">
<!-- <router-link
v-if="tableFrom.status === '1'"
:to="{path: roterPre+ '/merchant/list/reconciliation/' + scope.row.mer_id + '/1' }"
>
<el-button type="text" size="small" class="mr10">对账</el-button>
</router-link> -->
<el-button
v-if="tableFrom.status === '1'"
type="text"
size="small"
@click="onLogo(scope.row.mer_id)"
>登录</el-button>
<el-button type="text" size="small" @click="onEdit(scope.row.mer_id)">编辑</el-button>
<el-button type="text" size="small" @click="onDetails(scope.row.mer_id)">详情</el-button>
<el-button
v-if="tableFrom.status === '0'"
type="text"
size="small"
@click="handleDelete(scope.row.mer_id, scope.$index)"
>删除</el-button>
<!-- <el-button
v-if="tableFrom.status === '1'"
type="text"
size="small"
@click="onDeduct(scope.row.mer_id)"
>扣除保证金</el-button> -->
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
:page-sizes="[20, 40, 60, 80]"
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="total, sizes, prev, pager, next, jumper"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</el-card>
<!--供应商详情-->
<mer-detail
ref="merDetail"
:merId="merId"
@closeDrawer="closeDrawer"
@changeDrawer="changeDrawer"
@onPassword="onPassword"
@handleTimes="handleTimes"
@getList="getList"
:drawer="drawer"
:defaultMerchantType="2"
></mer-detail>
</div>
</template>
<script>
import {
merchantListApi,
merchantCreateApi,
merchantUpdateApi,
merchantDeleteForm,
merchantStatuseApi,
merchantPasswordApi,
merchantLoginApi,
changeCopyApi,
merchantCountApi,
merchantIsCloseApi,
getstoreTypeApi,
getMerCateApi, marginDeductionForm
} from "@/api/merchant";
import merDetail from './handle/merDetails.vue';
import { fromList } from "@/libs/constants.js";
import { roterPre } from "@/settings";
import SettingMer from "@/libs/settingMer";
import Cookies from "js-cookie";
export default {
name: "MerchantList",
components: { merDetail },
data() {
return {
fromList: fromList,
roterPre: roterPre,
isChecked: false,
listLoading: true,
merCateList: [],
storeType: [],
headeNum: [
{
count: '',
type: "1",
title: "正常开启的供应商"
},
{
count: '',
type: "0",
title: "已关闭供应商"
}
],
tableData: {
data: [],
total: 0
},
tableFrom: {
page: 1,
limit: 20,
date: "",
status: "1",
keyword: "",
is_trader: "",
is_best: "",
category_id: '',
type_id: "",
merchant_type: 2
},
autoUpdate: true,
merId: "",
drawer: false,
timeVal: []
};
},
mounted() {
this.getHeadNum();
this.getMerCategory();
this.getStoreType();
this.getList("");
},
methods: {
onLogo(id) {
merchantLoginApi(id)
.then(res => {
Cookies.set("merchantToken", res.data.token);
window.open(SettingMer.httpUrl + res.data.url);
})
.catch(res => {
this.$message.error(res.message);
});
},
//
selectChange(tab) {
this.tableFrom.date = tab;
this.timeVal = [];
this.tableFrom.page = 1;
this.getList("");
},
//
onchangeTime(e) {
this.timeVal = e;
this.tableFrom.date = this.timeVal ? this.timeVal.join("-") : "";
this.tableFrom.page = 1;
this.getList("");
},
//
getHeadNum() {
merchantCountApi(this.tableFrom)
.then(res => {
this.headeNum[0]["count"] = res.data.valid;
this.headeNum[1]["count"] = res.data.invalid;
})
.catch(res => {});
},
//
getMerCategory() {
getMerCateApi().then(res => {
this.merCateList = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
getStoreType(){
getstoreTypeApi().then(res => {
this.storeType = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
//
getList(num) {
this.listLoading = true;
this.tableFrom.page = num ? num : this.tableFrom.page;
merchantListApi(this.tableFrom)
.then(res => {
this.tableData.data = res.data.list;
this.tableData.total = res.data.count;
this.listLoading = false;
})
.catch(res => {
this.listLoading = false;
this.$message.error(res.message);
});
},
pageChange(page) {
this.tableFrom.page = page;
this.getList("");
},
handleSizeChange(val) {
this.tableFrom.limit = val;
this.getList(1);
},
//
onchangeIsShow(row) {
const title = row.is_best === 0 ? "是否开启推荐供应商" : "是否关闭推荐供应商";
this.$modalSure(title).then(() => {
merchantStatuseApi(row.mer_id, row.is_best === 1 ? 0 : 1)
.then(({ message }) => {
this.$message.success(message);
this.getList("");
})
.catch(({ message }) => {
this.$message.error(message);
});
});
},
//
onchangeIsClose(row) {
merchantIsCloseApi(row.mer_id, row.status === 1 ? 0 : 1)
.then(({ message }) => {
this.$message.success(message);
this.getList("");
})
.catch(({ message }) => {
this.$message.error(message);
});
},
//
onAdd() {
// this.$modalForm(merchantCreateApi()).then(() => this.getList(""));
this.drawer = true;
this.$refs.merDetail.initData();
},
//
onEdit(id) {
this.merId = id;
this.$refs.merDetail.isEdit = true;
this.$refs.merDetail.getInfo(id);
this.drawer = true;
},
//
onDetails(id) {
this.merId = id;
this.$refs.merDetail.isEdit = false;
this.$refs.merDetail.getInfo(id);
this.drawer = true;
},
changeDrawer(v) {
this.drawer = v;
},
closeDrawer() {
this.drawer = false;
},
//
handleDelete(id) {
this.$modalForm(merchantDeleteForm(id)).then(() => this.getList(""));
},
//
onDeduct(id) {
this.$modalForm(marginDeductionForm(id)).then(() => this.getList(""));
},
//
handleTimes(id) {
this.$modalForm(changeCopyApi(id)).then(() => this.getList(""));
},
//
onPassword(id) {
this.$modalForm(merchantPasswordApi(id));
}
}
};
</script>
<style scoped lang="scss">
</style>