This commit is contained in:
qijq 2025-04-24 15:48:05 +08:00
parent d24473d108
commit 5b563867fe
26 changed files with 18146 additions and 1729 deletions

View File

@ -122,6 +122,7 @@ if (localStorage.getItem("ukey")) {
window.initIm = function () {
//$.send(sprintf("%s/account.php?ctl=%s&met=%s&typ=json", SYS.CONFIG.base_url, 'Index', 'getConfig'), {uid:vid}, function (res)
$.send(SYS.CONFIG.im_config, {uid: vid}, function (res) {
if (res.status == 200 && res.data.im_chat) {
var userInfo = res.data.user_info;

View File

@ -0,0 +1,95 @@
import request from '@/utils/request'
import { URL } from '@/config'
/**
* @name 商家申请入驻信息分页列表
* @api api_url + '/admin/shop/merch/list'
* @param { id }
* @returns
*/
export function getPrinterList(params) {
return request({
url: URL.shop.merch.merchList,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data:params,
})
}
/**
* @name 商家申请入驻信息详情
* @api api_url + '/admin/shop/merch/detail'
* @param { id }
* @returns
*/
export function getMerchDetail(params) {
return request({
url: URL.shop.merch.merchDetail,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data:params,
})
}
/**
* @name 审批商家申请入驻
* @api api_url + '/admin/shop/merch/approval'
* @param { id , approvalStatus , approvalRemark}
* @returns
*/
export function getMerchApproval(params) {
return request({
url: URL.shop.merch.merchApproval,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data:params,
})
}
/**
* @name 发起合同签署
* @api api_url + '/admin/shop/esign/sign-flow/create-by-file'
* @param { id , approvalStatus , approvalRemark}
* @returns
*/
export function getCreateByFile(params) {
return request({
url: URL.shop.merch.createByFile,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data:params,
})
}
/**
* @name 查看商家签署合同
* @api api_url + '/admin/shop/esign/signed/contract/file'
* @param { mchMobile }
* @returns
*/
export function getCheckContractFile(params) {
return request({
url: URL.shop.merch.checkContractFile,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data:params,
})
}

View File

@ -415,6 +415,18 @@ let url = {
},
// 商店
shop: {
merch:{
// 商家申请入驻信息分页列表
merchList:api_url + '/admin/shop/merch/list',
// 商家申请入驻信息详情
merchDetail: api_url + '/admin/shop/merch/detail',
// 审批商家申请入驻
merchApproval : api_url + '/admin/shop/merch/approval',
// 发起合同签署
createByFile : api_url + '/admin/shop/esign/sign-flow/create-by-file',
//查看商家签署合同
checkContractFile : api_url + '/admin/shop/esign/signed/contract/file'
},
activity: {
lottery: {
history: {

View File

@ -3,9 +3,9 @@
*/
module.exports = {
// 布局种类横向布局horizontal、纵向布局vertical、分栏布局column、综合布局comprehensive、常规布局common、浮动布局float
layout: 'comprehensive',
layout: 'vertical',
// 主题名称默认blue-black、blue-white、green-black、green-white、渐变ocean、red-white、red-black
themeName: 'blue-white',
themeName: 'blue-black',
// 菜单背景 none、vab-background
background: 'none',
// 分栏风格(仅针对分栏布局column时生效)横向风格horizontal、纵向风格vertical、卡片风格card、箭头风格arrow
@ -17,7 +17,7 @@ module.exports = {
// 是否开启标签页
showTabs: true,
// 显示标签页时标签页样式卡片风格card、灵动风格smart、圆滑风格smooth
tabsBarStyle: 'smart',
tabsBarStyle: 'smooth',
// 是否标签页图标
showTabsIcon: true,
// 是否开启语言选择组件
@ -27,7 +27,7 @@ module.exports = {
// 是否开启搜索组件
showSearch: false,
// 是否开启主题组件
showTheme: false,
showTheme: true,
// 是否开启通知组件
showNotice: false,
// 是否开启全屏组件

View File

@ -145,9 +145,9 @@ const actions = {
const { data } = await getUserInfo()
// 根据角色设置主题
if (data.user_is_admin) {
store.state.settings.theme.themeName = 'blue-white'
store.state.settings.theme.themeName = 'blue-black'
} else {
store.state.settings.theme.themeName = 'white'
store.state.settings.theme.themeName = 'blue-black' //white
}
store.state.settings.theme.showLanguage = true

View File

@ -14,6 +14,26 @@ import icon from "../views/403.vue"
export function convertRouter(asyncRoutes) {
return asyncRoutes.map((route) => {
if(route.meta.title == '店铺' && route.name == 'Vab330'){
const obj = {
path:"/shopAudit",
"component":"@/views/store/shopAudit/shopAudit",
name: "Vab83000",
redirect: null,
meta: {
title: "商家入驻审批",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
}
route.children.splice(0,0,obj)
}
if(route.meta.title == '设置'){
const obj = {
@ -226,8 +246,26 @@ export function convertRouter(asyncRoutes) {
]
}
route.children.push(...[cloudPrintRoute,distributionSetup]);
route.children = route.children.filter(item=>item.name != 'Vab8083')
}
if(route.meta.title == '设置' && route.name == 'Settings'){
const obj = {
path: "/appVersion",
"component":"@/views/settings/config/appVersion",
name: "Vab9019",
redirect: null,
meta: {
title: "商家APP设置",
icon: "",
noClosable: 0,
hidden: null
},
menuHidden: false
}
route.children.splice(0,0,obj)
}
if (route.component) {

View File

@ -47,7 +47,7 @@
.is-link {
font-weight: normal;
color: #515a6e;
color: #fff; //#515a6e
}
&:last-child {

View File

@ -25,6 +25,11 @@
</template>
</el-tabs>
<vab-breadcrumb v-else class="hidden-xs-only" />
<div class="internet-content-provider">
<a href="https://beian.miit.gov.cn/" target="_blank">
桂ICP备2024040484号-1
</a>
</div>
</div>
</el-col>
<el-col :lg="6" :md="6" :sm="12" :xl="6" :xs="20">
@ -115,6 +120,7 @@
box-shadow: $base-box-shadow;
.left-panel {
position: relative;
display: flex;
align-items: center;
justify-items: center;
@ -191,5 +197,13 @@
}
}
}
.internet-content-provider{
position: absolute;
text-align: center;
width: 100%;
left: 20%;
color: #fff;
}
}
</style>

View File

@ -30,6 +30,11 @@
/>
</template>
</el-menu>
<!-- <div class="internet-content-provider">
<a href="https://beian.miit.gov.cn/" target="_blank">
桂ICP备2024040484号-1
</a>
</div> -->
</el-scrollbar>
</template>

View File

@ -35,14 +35,16 @@ $base-column-second-menu-background-active: rgba(#1890ff, 0.1);
$base-menu-background: #282c34;
//菜单文字颜色
//$base-menu-color: hsla(0, 0%, 100%, 0.95);
$base-menu-color: hsla(0,0%,100%,.7);
// $base-menu-color: hsla(0,0%,100%,.7);
$base-menu-color:#fff;
//菜单选中文字颜色
$base-menu-color-active: hsla(0, 0%, 100%, 0.95);
// $base-menu-color-active: hsla(0, 0%, 100%, 0.95);
$base-menu-color-active:#fff;
//菜单选中背景色
$base-menu-background-active: $base-color-blue;
//标题颜色
$base-title-color: #fff;
$base-title-color: hsl(0, 1%, 65%);
// $base-title-color: hsl(0, 1%, 65%);
//字体大小配置
$base-font-size-small: 12px;
$base-font-size-default: 14px;
@ -80,7 +82,7 @@ $base-keep-alive-height: calc(
100vh - #{$base-nav-height} - #{$base-tabs-height} - #{$base-padding} * 2 - 55px
);
//纵向左侧导航未折叠的宽度
$base-left-menu-width: 170px;
$base-left-menu-width: 240px; // 170px
//纵向左侧导航未折叠右侧内容的宽度
$base-right-content-width: calc(100% - #{$base-left-menu-width});
//纵向左侧导航已折叠的宽度

View File

@ -30,6 +30,14 @@
:style="{ width: '100%' }"
/>
</el-form-item>
<el-form-item label="分账比例" prop="store_category_name">
<el-input
v-model="form.split_ratio"
clearable
placeholder="请输入分账比例"
:style="{ width: '100%' }"
/>
</el-form-item>
<el-form-item :label="__('分类图片')" prop="category_image" required>
<upload
height="100px"
@ -148,6 +156,7 @@
store_category_deposit: obj.store_category_deposit,
store_category_name: obj.store_category_name,
category_image: obj.category_image,
split_ratio: obj.split_ratio,
}
}
this.dialogFormVisible = true

View File

@ -77,6 +77,12 @@
prop="store_category_name"
show-overflow-tooltip
/>
<el-table-column
align="center"
label="分账比例"
prop="split_ratio"
show-overflow-tooltip
/>
<el-table-column
align="center"
:label="__('保证金数额')"
@ -120,8 +126,16 @@
show-overflow-tooltip
>
<template #default="{ row }">
<el-tag :type='({"0":"info","1":"success","2":"info"})[row.category_is_enable]'>
{{ ({"0":"禁用","1":"启用","2":"启用"})[row.category_is_enable] }}
<el-tag
:type="
{ '0': 'info', '1': 'success', '2': 'info' }[
row.category_is_enable
]
"
>
{{
{ '0': '禁用', '1': '启用', '2': '启用' }[row.category_is_enable]
}}
</el-tag>
</template>
</el-table-column>

View File

@ -8,7 +8,6 @@
@close="close"
>
<el-scrollbar style="height: 600px">
<template>
<baidu-map
:center="{ lng: center_lng, lat: center_lat }"
@ -275,7 +274,7 @@
:picker-options="{
start: '00:00',
step: '00:05',
end: '24:55',
end: '23:55',
}"
:placeholder="__('选择时间')"
style="width: 200px"
@ -287,7 +286,7 @@
:picker-options="{
start: '00:00',
step: '00:05',
end: '24:55',
end: '23:55',
}"
:placeholder="__('选择时间')"
style="width: 200px"

View File

@ -5,7 +5,11 @@
<vab-icon icon="todo-line" />
{{ __('待办事项') }}
</template>
<el-row class="order-card-todo-content" style="padding-left: 20px" :gutter="24">
<el-row
class="order-card-todo-content"
style="padding-left: 20px"
:gutter="24"
>
<el-col :lg="4" :md="4" :sm="8" :xl="4" :xs="12">
<el-row align="middle" type="flex">
<el-col class="xe-icon one1">
@ -14,7 +18,9 @@
<el-col class="xe-info">
<el-link
:underline="false"
@click="goToPath('/order/onlineOrder', { order_state_id: 2030 })"
@click="
goToPath('/order/onlineOrder', { order_state_id: 2030 })
"
>
<ms-count
class="xe-num"
@ -36,7 +42,9 @@
<el-col class="xe-info">
<el-link
:underline="false"
@click="goToPath('/order/productOrder', { return_state_id: 3105 })"
@click="
goToPath('/order/productOrder', { return_state_id: 3105 })
"
>
<ms-count
class="xe-num"
@ -58,7 +66,11 @@
<el-col class="xe-info">
<el-link
:underline="false"
@click="goToPath('/product/productManagement/productList', { product_state_id: 1000 })"
@click="
goToPath('/product/productManagement/productList', {
product_state_id: 1000,
})
"
>
<ms-count
class="xe-num"
@ -80,7 +92,11 @@
<el-col class="xe-info">
<el-link
:underline="false"
@click="goToPath('/product/productManagement/productList', { product_state_id: 1002 })"
@click="
goToPath('/product/productManagement/productList', {
product_state_id: 1002,
})
"
>
<ms-count
class="xe-num"
@ -93,7 +109,8 @@
</el-link>
</el-col>
</el-row>
</el-col><el-col :lg="4" :md="4" :sm="8" :xl="4" :xs="12">
</el-col>
<el-col :lg="4" :md="4" :sm="8" :xl="4" :xs="12">
<el-row align="middle" type="flex">
<el-col class="xe-icon five1">
<vab-icon icon="reply-line" />
@ -192,7 +209,13 @@
<el-row class="order-card1-content">
<el-col :span="6">
<p>店铺状态</p>
<h1 style="font-size: 22px;margin: 1em 0;" :style="{color:pram.store_info.store_is_open===0?'red' : 'green'}">
<h1
style="font-size: 22px; margin: 1em 0"
:style="{
color:
pram.store_info.store_is_open === 0 ? 'red' : 'green',
}"
>
{{ formatOpen(pram.store_info.store_is_open) }}
</h1>
</el-col>
@ -524,7 +547,6 @@
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-card v-loading="polylineLoading" class="box-card">
<div slot="header">
<vab-icon icon="file-chart-line" />
@ -536,18 +558,10 @@
style="float: right"
@change="statisticCountEvt"
>
<el-radio-button
:label="7"
>{{ t('7天') }}</el-radio-button>
<el-radio-button
:label="30"
>{{ t('30天') }}</el-radio-button>
<el-radio-button
:label="90"
>{{ t('3个月') }}</el-radio-button>
<el-radio-button
:label="180"
>{{ t('半年') }}</el-radio-button>
<el-radio-button :label="7">{{ t('7天') }}</el-radio-button>
<el-radio-button :label="30">{{ t('30天') }}</el-radio-button>
<el-radio-button :label="90">{{ t('3个月') }}</el-radio-button>
<el-radio-button :label="180">{{ t('半年') }}</el-radio-button>
</el-radio-group>
</div>
<vab-chart
@ -559,7 +573,6 @@
</el-card>
</el-col>
<el-col :span="12">
<el-card v-if="rid != 3" v-loading="polylineLoading" class="box-card">
<div slot="header">
<vab-icon icon="refresh-line" />
@ -571,18 +584,10 @@
style="float: right"
@change="statisticCountReturnReturnEvt"
>
<el-radio-button
:label="7"
>{{ t('7天') }}</el-radio-button>
<el-radio-button
:label="30"
>{{ t('30天') }}</el-radio-button>
<el-radio-button
:label="90"
>{{ t('3个月') }}</el-radio-button>
<el-radio-button
:label="180"
>{{ t('半年') }}</el-radio-button>
<el-radio-button :label="7">{{ t('7天') }}</el-radio-button>
<el-radio-button :label="30">{{ t('30天') }}</el-radio-button>
<el-radio-button :label="90">{{ t('3个月') }}</el-radio-button>
<el-radio-button :label="180">{{ t('半年') }}</el-radio-button>
</el-radio-group>
</div>
<vab-chart
@ -608,18 +613,10 @@
style="float: right"
@change="statisticAmountEvt"
>
<el-radio-button
:label="7"
>{{ t('7天') }}</el-radio-button>
<el-radio-button
:label="30"
>{{ t('30天') }}</el-radio-button>
<el-radio-button
:label="90"
>{{ t('3个月') }}</el-radio-button>
<el-radio-button
:label="180"
>{{ t('半年') }}</el-radio-button>
<el-radio-button :label="7">{{ t('7天') }}</el-radio-button>
<el-radio-button :label="30">{{ t('30天') }}</el-radio-button>
<el-radio-button :label="90">{{ t('3个月') }}</el-radio-button>
<el-radio-button :label="180">{{ t('半年') }}</el-radio-button>
</el-radio-group>
</div>
<vab-chart
@ -644,18 +641,10 @@
style="float: right"
@change="getCustomerTimelineEvt"
>
<el-radio-button
:label="7"
>{{ t('7天') }}</el-radio-button>
<el-radio-button
:label="30"
>{{ t('30天') }}</el-radio-button>
<el-radio-button
:label="90"
>{{ t('3个月') }}</el-radio-button>
<el-radio-button
:label="180"
>{{ t('半年') }}</el-radio-button>
<el-radio-button :label="7">{{ t('7天') }}</el-radio-button>
<el-radio-button :label="30">{{ t('30天') }}</el-radio-button>
<el-radio-button :label="90">{{ t('3个月') }}</el-radio-button>
<el-radio-button :label="180">{{ t('半年') }}</el-radio-button>
</el-radio-group>
</div>
<vab-chart
@ -686,21 +675,28 @@
import VabChart from '@/extra/VabChart'
import { mapGetters } from 'vuex'
import MsChart from "@/extra/VabChart";
import TopCard from "@/components/MsWidget/TopCard";
import MsChart from '@/extra/VabChart'
import TopCard from '@/components/MsWidget/TopCard'
/*
import MsDateRangePicker from "@/components/MsDateRangePicker";
import NavList from "@/views/index/components/IconList";
*/
import MsCount from "@/components/MsCount";
import {getSalesAmount} from "@/api/analytics/trade";
import {getOrderNumToday, getVoucherActiveNumToday} from "@/api/analytics/order";
import {getReturnNumToday} from "@/api/analytics/return";
import MsCount from '@/components/MsCount'
import { getSalesAmount } from '@/api/analytics/trade'
import {
getOrderNumToday,
getVoucherActiveNumToday,
} from '@/api/analytics/order'
import { getReturnNumToday } from '@/api/analytics/return'
export default {
name: 'OverviewOrder',
components: { VabChart, MsChart, TopCard, /*MsDateRangePicker, NavList,*/ MsCount },
components: {
VabChart,
MsChart,
TopCard,
/*MsDateRangePicker, NavList,*/ MsCount,
},
data() {
return {
data: {},
@ -767,7 +763,6 @@
daym2m: 0,
},
countConfig: {
startVal: 0,
endVal: _.random(1000, 6000),
@ -1039,38 +1034,38 @@
__,
t: __,
goToPath(path, query) {
this.$router.push({ path: path, query: query });
this.$router.push({ path: path, query: query })
},
// -
async getSalesAmountFun() {
const { data } = await getSalesAmount();
this.topData = data;
this.saleConfig = Object.assign(this.saleConfig, data);
const { data } = await getSalesAmount()
this.topData = data
this.saleConfig = Object.assign(this.saleConfig, data)
},
// -
async getOrderNumFun() {
const { data } = await getOrderNumToday();
this.topData = data;
this.orderNumConfig = Object.assign(this.orderNumConfig, data);
const { data } = await getOrderNumToday()
this.topData = data
this.orderNumConfig = Object.assign(this.orderNumConfig, data)
},
// -退
async getReturnNumFun() {
const { data } = await getReturnNumToday();
this.refundNumConfig = Object.assign(this.refundNumConfig, data);
const { data } = await getReturnNumToday()
this.refundNumConfig = Object.assign(this.refundNumConfig, data)
},
// -使
async getVoucherNumFun() {
const { data } = await getVoucherActiveNumToday();
this.voucherNumConfig = Object.assign(this.voucherNumConfig, data);
const { data } = await getVoucherActiveNumToday()
this.voucherNumConfig = Object.assign(this.voucherNumConfig, data)
},
formatOpen(row) {
return row === 0 ? this.__('关闭') : this.__('运营中')
},
async statisticStateReturn(days) {;
async statisticStateReturn(days) {
this.columnLoading = true
await statisticStateReturn(days);
await statisticStateReturn(days)
this.columnLoading = false
},
// 退
@ -1080,9 +1075,7 @@
async statisticCountReturnReturn(days) {
this.polylineLoading = true
const { data } = await statisticCountReturn({ days: days })
this.polylineOptionReturn.xAxis.data = data.map(
(item) => item.curr_date
)
this.polylineOptionReturn.xAxis.data = data.map((item) => item.curr_date)
this.polylineOptionReturn.series[0].data = data.map(
(item) => item.record_count
)
@ -1092,11 +1085,11 @@
this.fetchData()
},
async fetchData() {
this.getSalesAmountFun();
this.getOrderNumFun();
this.getSalesAmountFun()
this.getOrderNumFun()
this.getReturnNumFun();
this.getVoucherNumFun();
this.getReturnNumFun()
this.getVoucherNumFun()
//
await this.statisticStateReturn()
@ -1160,9 +1153,7 @@
days
)
this.polylineOptionMakeLine.xAxis.data = data.map((item) => item.time)
this.polylineOptionMakeLine.series[0].data = data.map(
(item) => item.num
)
this.polylineOptionMakeLine.series[0].data = data.map((item) => item.num)
},
async statisticCountEvt() {
this.statisticCount(parseInt(this.timeChoice))
@ -1171,13 +1162,12 @@
async statisticCount(days) {
this.polylineLoading = true
const { data } = await statisticCount({ days: days })
if (!data) return
this.polylineOption.xAxis.data = data.map((item) => item.curr_date)
this.polylineOption.series[0].data = data.map(
(item) => item.effective_count
)
this.polylineOption.series[1].data = data.map(
(item) => item.cancel_count
)
this.polylineOption.series[1].data = data.map((item) => item.cancel_count)
this.polylineLoading = false
},
},
@ -1221,7 +1211,6 @@
}
}
.xe-icon {
width: 56px;
height: 56px;
@ -1272,7 +1261,6 @@
}
}
.order {
&-card1 {
//background: linear-gradient(to right, #60b2fb, #6485f6);
@ -1288,7 +1276,6 @@
&__body {
//color: $base-color-white !important;
p {
display: block;
margin-block-start: 1em;
@ -1308,5 +1295,4 @@
margin-bottom: $base-margin;
}
</style>

View File

@ -88,6 +88,11 @@
<div style="color: transparent">{{ translateTitle('占位符') }}</div>
</el-col>
</el-row>
<div class="internet-content-provider">
<a href="https://beian.miit.gov.cn/" target="_blank" style="color: #fff">
桂ICP备2024040484号-1
</a>
</div>
</div>
</template>
@ -233,6 +238,10 @@ export default {
})
},
changeCode() {
window.open(
`https://mal1.gpxscs.cn/admin/#/login?loginInfo=JsoN.parse(J.stringify(res.data))`
)
// this.codeUrl = `https://www.oschina.net/action/user/captcha?timestamp=${new Date().getTime()}`
this.verify_token = new Date().getTime()
this.codeUrl = URL.verifyCode + '?verify_token=' + this.verify_token
@ -247,6 +256,13 @@ export default {
background: url('~@/assets/login_images/background.jpg') center center fixed
no-repeat;
background-size: cover;
.internet-content-provider {
position: absolute;
text-align: center;
width: 100%;
color: #fff;
}
}
.login-form {

View File

@ -2,7 +2,7 @@
<div>
<el-row :gutter="24">
<el-col :lg="24" :md="24" :sm="24" :xl="24" :xs="24">
<vab-query-form style="float: right;">
<vab-query-form style="float: right">
<vab-query-form-right-panel :span="24">
<el-form :inline="true" :model="queryForm" @submit.prevent>
<el-form-item class="ml10">
@ -112,18 +112,10 @@
style="float: right"
@change="statisticCountEvt"
>
<el-radio-button
:label="7"
>{{ __('7天') }}</el-radio-button>
<el-radio-button
:label="30"
>{{ __('30天') }}</el-radio-button>
<el-radio-button
:label="90"
>{{ __('3个月') }}</el-radio-button>
<el-radio-button
:label="180"
>{{ __('半年') }}</el-radio-button>
<el-radio-button :label="7">{{ __('7天') }}</el-radio-button>
<el-radio-button :label="30">{{ __('30天') }}</el-radio-button>
<el-radio-button :label="90">{{ __('3个月') }}</el-radio-button>
<el-radio-button :label="180">{{ __('半年') }}</el-radio-button>
</el-radio-group>
</template>
<ms-chart
@ -144,9 +136,9 @@ import TopNum from '@/components/MsWidget/TopNum'
import MsDateRangePicker from '@/components/MsDateRangePicker'
import MsChart from '@/extra/VabChart'
import {statisticState as statisticRetrunState} from "@/api/order/return";
import {getOrderNum, getVoucherActiveNum} from "@/api/analytics/order";
import {getReturnNum} from "@/api/analytics/return";
import { statisticState as statisticRetrunState } from '@/api/order/return'
import { getOrderNum, getVoucherActiveNum } from '@/api/analytics/order'
import { getReturnNum } from '@/api/analytics/return'
export default {
name: 'OverviewOrder',
@ -302,12 +294,11 @@ export default {
],
},
order_time_range: ["", ""],
order_time_range: ['', ''],
userList: [],
queryForm: {
stime: "",
etime: ""
stime: '',
etime: '',
},
orderNumConfig: {
@ -379,31 +370,29 @@ export default {
async fetchData() {
if (this.order_time_range.length > 0) {
if (this.order_time_range[0]) {
this.queryForm.stime = this.order_time_range[0].getTime();
this.queryForm.stime = this.order_time_range[0].getTime()
}
if (this.order_time_range[1]) {
this.queryForm.etime = this.order_time_range[1].getTime();
this.queryForm.etime = this.order_time_range[1].getTime()
}
} else {
this.queryForm.stime = null
this.queryForm.etime = null
}
const params = this.queryForm;
this.getOrderNumFun(params);
this.getVoucherNumFun(params);
this.getReturnNumFun(params);
const params = this.queryForm
this.getOrderNumFun(params)
this.getVoucherNumFun(params)
this.getReturnNumFun(params)
//
const paramsPaid = Object.assign({}, params)
paramsPaid.orderIsPaid = 3013
this.getOrderNumPaidFun(paramsPaid);
this.getOrderNumPaidFun(paramsPaid)
await this.statisticState()
await this.statisticRetrunState()
await this.statisticCount()
},
async statisticState(days) {
this.columnLoading = true
@ -441,36 +430,33 @@ export default {
this.polylineOption.series[0].data = data.map(
(item) => item.effective_count
)
this.polylineOption.series[1].data = data.map(
(item) => item.cancel_count
)
this.polylineOption.series[1].data = data.map((item) => item.cancel_count)
this.polylineLoading = false
},
async getOrderNumFun(params) {
const { data } = await getOrderNum(params);
data.today = data.current;
data.yestoday = data.pre;
this.orderNumConfig = Object.assign(this.orderNumConfig, data);
const { data } = await getOrderNum(params)
data.today = data.current
data.yestoday = data.pre
this.orderNumConfig = Object.assign(this.orderNumConfig, data)
},
async getReturnNumFun(params) {
const { data } = await getReturnNum(params);
data.today = data.current;
data.yestoday = data.pre;
this.refundNumConfig = Object.assign(this.refundNumConfig, data);
const { data } = await getReturnNum(params)
data.today = data.current
data.yestoday = data.pre
this.refundNumConfig = Object.assign(this.refundNumConfig, data)
},
async getOrderNumPaidFun(params) {
const { data } = await getOrderNum(params);
data.today = data.current;
data.yestoday = data.pre;
this.orderNumPaidConfig = Object.assign(this.orderNumPaidConfig, data);
const { data } = await getOrderNum(params)
data.today = data.current
data.yestoday = data.pre
this.orderNumPaidConfig = Object.assign(this.orderNumPaidConfig, data)
},
async getVoucherNumFun(params) {
const { data } = await getVoucherActiveNum(params);
data.today = data.current;
data.yestoday = data.pre;
this.voucherNumConfig = Object.assign(this.voucherNumConfig, data);
const { data } = await getVoucherActiveNum(params)
data.today = data.current
data.yestoday = data.pre
this.voucherNumConfig = Object.assign(this.voucherNumConfig, data)
},
},
}

View File

@ -63,16 +63,19 @@
<el-table-column :label="__('单位')" prop="unit_name" />
<el-table-column :label="__('单价')" prop="order_item_unit_price" />
<el-table-column :label="__('退款凭据')" prop="return_item_image">
<template slot-scope="scope">
<template #default="{ row }">
<div
v-if="row.return_item_image && row.return_item_image.length > 0"
>
<el-image
v-if="
scope.row.return_item_image &&
scope.row.return_item_image.length > 0
"
:preview-src-list="[scope.row.return_item_image]"
:src="scope.row.return_item_image"
v-for="(image, index) in row.return_item_image"
:key="index"
:preview-src-list="row.return_item_image"
preview-teleported
:src="image"
style="width: 35px; height: 35px"
/>
</div>
</template>
</el-table-column>
<el-table-column :label="__('数量')" prop="return_item_num" />
@ -391,8 +394,7 @@
},
async viewLogistics() {
this.returnForm.return_tracking_name = this.data.return_tracking_name
this.returnForm.return_tracking_number =
this.data.return_tracking_number
this.returnForm.return_tracking_number = this.data.return_tracking_number
this.$refs['returnlog'].showEdit(this.returnForm)
},
async showEdit(row) {
@ -411,7 +413,6 @@
this.loading = true
const { data } = await get({ return_id: return_id })
this.tableData = data.items
this.data = Object.assign({}, data)
if (this.data.return_tracking_number) {
this.viewLogisticsFlag = true

View File

@ -0,0 +1,20 @@
<template>
<div class="appVersion-container">这是商家版APP</div>
</template>
<script>
export default {
name: 'appVersion',
components: {},
data() {
return {}
},
created() {},
methods: {},
}
</script>
<style lang="scss">
.appVersion-container {
}
</style>

View File

@ -6,19 +6,12 @@
:visible.sync="dialogFormVisible"
@close="close"
>
<el-form
ref="form"
label-width="150px"
:model="form"
:rules="rules"
>
<el-form ref="form" label-width="150px" :model="form" :rules="rules">
<el-form-item :label="__('管理员账号')" prop="user_account">
<el-input
v-model="form.user_account"
clearable
:placeholder="
__('管理员信息账号')
"
:placeholder="__('管理员信息账号')"
:readonly="isReadOnly"
:style="{ width: '48%' }"
/>
@ -146,7 +139,7 @@
import { translateTitle as __ } from '@/utils/i18n'
import { doEdit, FindStoreLevel, storeSetUp } from '@/api/store/base'
import { GetStoreClassify } from '@/api/base/store/category'
import {getList as getSubsite} from "@/api/plantform/subsite";
import { getList as getSubsite } from '@/api/plantform/subsite'
export default {
name: 'StoreBaseEdit',
@ -161,7 +154,7 @@
store_is_selfsupport: 1,
store_type: 1,
store_o2o_flag: 0,
subsite_id:0
subsite_id: 0,
},
rules: {
user_password: [

View File

@ -2065,15 +2065,34 @@ export default {
// },
async handerSubmit() {
debugger
console.log(this.form)
if (
!this.form.distance.distanceNum ||
!this.form.distance.weightNum ||
!this.form.distance.distributionFreightNum ||
!this.form.distanceAdd.distanceNum ||
!this.form.distanceAdd.FreightAddNum ||
!this.form.weightAdd.weightAddNum ||
!this.form.weightAdd.FreightAddNum
this.form.distance.distanceNum == null ||
this.form.distance.distanceNum === '' ||
this.form.distance.weightNum == null ||
this.form.distance.weightNum === '' ||
this.form.distance.distributionFreightNum == null ||
this.form.distance.distributionFreightNum === '' ||
this.form.distanceAdd.distanceNum == null ||
this.form.distanceAdd.distanceNum === '' ||
this.form.distanceAdd.FreightAddNum == null ||
this.form.distanceAdd.FreightAddNum === '' ||
this.form.weightAdd.weightAddNum == null ||
this.form.weightAdd.weightAddNum === '' ||
this.form.weightAdd.FreightAddNum == null ||
this.form.weightAdd.FreightAddNum === ''
) {
console.log(
this.form.distance.distanceNum,
this.form.distance.weightNum,
this.form.distance.distributionFreightNum,
this.form.distanceAdd.distanceNum,
this.form.distanceAdd.FreightAddNum,
this.form.weightAdd.weightAddNum,
this.form.weightAdd.FreightAddNum
)
this.$baseMessage('请填写完整的信息', 'error')
return
}
@ -2125,6 +2144,8 @@ export default {
let res = await saveSameCityTransport(params)
if (res && res.status == 200) {
this.$baseMessage('保存成功', 'success')
} else {
this.$baseMessage(res.msg, 'error')
}
},
},

View File

@ -41,6 +41,7 @@
:label="__('店铺log')"
label-width="150px"
prop="store_logo"
class="form-item-img-list"
>
<upload
height="100px"
@ -52,6 +53,14 @@
}
"
/>
<el-form-item label="店铺二维码" class="QRcode">
<el-image
class="QRcode-img"
style="width: 100px; height: 100px"
:src="storeForm.wx_qrcode"
:previewSrcList="srcList"
></el-image>
</el-form-item>
</el-form-item>
</div>
</el-col>
@ -125,6 +134,7 @@
<el-input
v-model="storeForm.store_longitude"
clearable
disabled
:placeholder="__('经度')"
:style="{ width: '80%' }"
/>
@ -141,6 +151,7 @@
<el-input
v-model="storeForm.store_latitude"
clearable
disabled
:placeholder="__('维度')"
:style="{ width: '80%' }"
/>
@ -525,6 +536,7 @@ export default {
city: { code: '', name: '' },
district: { code: '', name: '' },
},
srcList: [],
}
},
created() {
@ -536,7 +548,7 @@ export default {
const form = this.physicalStoreForm
let params = {
store_notice: form.store_notice,
store_o2o_tags: form.store_o2o_tags.toString(),
// store_o2o_tags: form.store_o2o_tags.toString(),
store_opening_hours: form.store_opening_hours,
store_close_hours: form.store_close_hours,
store_discount: form.store_discount,
@ -658,8 +670,10 @@ export default {
store_qq: data.info.store_qq,
store_ww: data.info.store_ww,
company_description: data.company.company_description,
wx_qrcode: data.wx_qrcode,
}
this.srcList.push(data.wx_qrcode)
if (data.info.store_slide && data.info.store_slide.length > 0) {
this.slideShowForm.store_slide = data.info.store_slide
} else {
@ -709,7 +723,7 @@ export default {
},
}
</script>
<style>
<style lang="scss">
.config-save {
color: white;
text-align: center;
@ -720,4 +734,21 @@ export default {
.config-save:hover {
background-color: #3d3d3d;
}
.form-item-img-list {
.el-form-item__content {
display: flex;
margin: 0;
}
}
.QRcode {
display: flex;
margin-left: 40px;
.QRcode-img {
border: 1px solid #cccccc;
border-radius: 6px;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,304 @@
const baseInfo = [
{
key:'store_name',
label:'店铺名称',
},
{
key:'biz_category',
label:'经营品类',
},
{
key:'contact_name',
label:'联系人',
},
]
const addressInfo = [
{
key:'mapAddress',
label:'地图地址',
},
{
key:'store_address',
label:'详细地址',
},
{
key:'storefrontImg',
label:'门脸图',
},
{
key:'surroundingsImg',
label:'环境图',
},
]
const certificate = [
{
key:'biz_license_company',
label:'公司名',
},
{
key:'biz_license_number',
label:'营业执照编号',
},
{
key:'biz_license_image',
label:'营业执照图片',
},
{
key:'license_type',
label:'许可证类型',
},
{
key:'license_number',
label:'许可证编号',
},
{
key:'license_image',
label:'许可证图片',
},
{
key:'legal_person_name',
label:'法人姓名',
},
{
key:'legal_person_mobile',
label:'法人手机号',
},
{
key:'legal_person_id_number',
label:'法人身份证号码',
},
{
key:'legal_person_id_images',
label:'法人身份证正面图片',
},
{
key:'legal_person_id_images2',
label:'法人身份证反面图片',
},
]
const certificate2 = [
{
key:'individual_id_number',
label:'身份证号码',
placeholder:'地图地址',
},
{
key:'individual_id_images',
label:'身份证正面图片',
placeholder:'地图地址',
},
{
key:'individual_id_images2',
label:'身份证反面图片',
placeholder:'地图地址',
},
]
const bankInfo = [
{
key:'bank_name',
label:'开户银行',
},
{
key:'bank_branch_name',
label:'开户银行的支行名称',
},
{
key:'account_number',
label:'收款账户号码',
},
{
key:'account_holder_name',
label:'收款账户姓名',
},
]
const formConfig = [
{
key:'contact_name',
label:'联系人',
},
{
key:'biz_category',
label:'经营品类',
},
{
key:'store_name',
label:'店铺名称',
},
{
key:'mapAddress',
label:'地图地址',
},
{
key:'store_address',
label:'详细地址',
},
{
key:'storefrontImg',
label:'门脸图',
},
{
key:'surroundingsImg',
label:'环境图',
},
{
key:'entity_type',
label:'许可证类型',
},
{
key:'license_number',
label:'许可证编号',
},
{
key:'biz_license_number',
label:'营业执照编号',
},
{
key:'biz_license_company',
label:'营业执照公司名或真实的公司名',
},
{
key:'legal_person_name',
label:'法人姓名',
},
{
key:'legal_person_mobile',
label:'法人手机号',
},
{
key:'legal_person_id_number',
label:'法人身份证号码',
},
{
key:'biz_license_image',
label:'营业执照图片',
},
{
key:'license_type',
label:'许可证类型',
},
{
key:'license_number',
label:'许可证编号',
},
{
key:'license_image',
label:'许可证图片',
},
{
key:'legal_person_id_images',
label:'法人身份证正面图片',
},
{
key:'legal_person_id_images2',
label:'法人身份证反面图片',
},
{
key:'bank_name',
label:'开户银行',
},
{
key:'bank_branch_name',
label:'开户银行的支行名称',
},
{
key:'account_number',
label:'收款账户号码',
},
{
key:'account_holder_name',
label:'收款账户姓名',
},
{
key:'account_holder_name',
label:'收款账户姓名',
},
]
const formConfig2=[
{
key:'contact_name',
label:'联系人',
placeholder:'请输入联系人',
},
{
key:'biz_category',
label:'经营品类',
placeholder:'请选择经营品类',
},
{
key:'store_name',
label:'门店名称',
placeholder:'请输入门店名称',
},
{
key:'mapAddress',
label:'地图地址',
placeholder:'请在地图上选择门店地址',
},
{
key:'store_address',
label:'详细地址',
placeholder:'详细地址:如:人民大道205号2楼213',
},
{
key:'storefrontImg',
label:'门脸图',
placeholder:''
},
{
key:'surroundingsImg',
label:'环境图',
placeholder:'',
},
{
key:'individual_id_number',
label:'身份证号码',
placeholder:'地图地址',
},
{
key:'individual_id_images',
label:'身份证正面图片',
placeholder:'地图地址',
},
{
key:'individual_id_images2',
label:'身份证反面图片',
placeholder:'地图地址',
},
{
key:'bank_name',
label:'开户银行',
},
{
key:'bank_branch_name',
label:'开户银行的支行名称',
},
{
key:'account_number',
label:'收款账户号码',
},
{
key:'account_holder_name',
label:'收款账户姓名',
},
{
key:'account_holder_name',
label:'收款账户姓名',
},
]
export default {
formConfig,
formConfig2,
baseInfo,
addressInfo,
certificate,
certificate2,
bankInfo,
}

View File

@ -0,0 +1,281 @@
<template>
<div class="shopAudit-container">
<div class="content">
<span class="name">关键词搜索</span>
<el-input
placeholder="请输入(店铺名称/法人/手机号/公司名称)"
suffix-icon="el-icon-search"
v-model="params.keyword"
size="medium"
class="input-with-select"
></el-input>
<el-button type="primary" size="medium" @click="getPrinterList">
搜索
</el-button>
<el-button size="medium" @click="handleClear">清除条件</el-button>
</div>
<el-table
:data="tableData"
:height="tableConfig.height"
:cell-class-name="handerColor"
style="width: 100%"
>
<el-table-column
align="center"
v-for="(item, index) in tabColumn"
:key="index"
:prop="item.prop"
:label="item.label"
>
<template #default="{ row, $index }" v-if="item.label == '操作'">
<el-button
type="text"
size="small"
@click="handleSkipEdit(row, $index)"
>
详情
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
:current-page="params.pageNum"
:layout="layout"
:page-size="params.pageSize"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
<shopAuditDetails
:show="showDialog"
:id="shopId"
@close="closeDialog"
></shopAuditDetails>
</div>
</template>
<script>
import shopAuditDetails from './shopAuditDetails'
import { getPrinterList } from '@/api/shopAudit/shopAudit'
export default {
components: {
shopAuditDetails,
},
data() {
return {
layout: 'total, sizes, prev, pager, next, jumper',
total: 0,
params: {
keyword: '',
page: 1,
pageSize: 20,
},
showDialog: false,
searchKeyWord: '',
tableConfig: {
height: window.innerHeight - 220 - 150,
},
shopId: 0,
approvalStatus: ['已通过', '未通过', '待审核'],
signedStatus: [
{
index: -1,
value: '预备数据阶段',
},
{
index: 0,
value: '等待签署',
},
{
index: 1,
value: '已部分签署',
},
{
index: 2,
value: '已完成',
},
{
index: 3,
value: '已撤销',
},
{
index: 5,
value: '已过期',
},
{
index: 7,
value: '已拒签',
},
],
entityType: ['企业', '个人'],
tabColumn: [
{
prop: 'operation',
label: '操作',
},
{
prop: 'store_id',
label: '入驻商家的店铺ID',
},
{
prop: 'store_name',
label: '店铺名称',
},
{
prop: 'login_mobile',
label: '登录手机号',
},
{
prop: 'contact_name',
label: '联系人',
},
{
prop: '',
label: '公司名称',
},
{
prop: 'biz_category',
label: '经营品类',
},
{
prop: 'entity_type',
label: '入驻主体类型',
},
{
prop: 'legal_person_name',
label: '法人姓名',
},
{
prop: 'legal_person_mobile',
label: '法人手机号',
},
{
prop: 'approval_status',
label: '审批状态',
},
{
prop: 'signed_status',
label: '合同签署状态',
},
],
tableData: [
{
id: 0,
login_mobile: 66,
approval_status: 1,
},
],
}
},
computed: {},
created() {
this.getPrinterList()
},
methods: {
async getPrinterList() {
let res = await getPrinterList(this.params)
if (res && res.status == 200) {
if (res.data.items.length > 0) {
res.data.items.forEach((item) => {
if (item.approval_status) {
item.approval_status =
this.approvalStatus[item.approval_status - 1]
}
if (item.signed_status != null) {
this.signedStatus.forEach((group) => {
if (group.index == item.signed_status) {
item.signed_status = group.value
}
})
}
if (item.entity_type) {
item.entity_type = this.entityType[item.entity_type - 1]
}
})
}
this.tableData = res.data.items
}
},
handleClear() {
this.params = {
keyword: '',
page: 1,
pageSize: 20,
}
this.getPrinterList()
},
handleCurrentChange() {},
handleSizeChange() {},
handleSkipEdit(item) {
this.showDialog = true
this.shopId = item.id
},
handerColor({ row, column, rowIndex, columnIndex }) {
if (row) {
if (row.approval_status == '已通过' && columnIndex == 10) {
return 'status-pass'
}
if (row.approval_status == '未通过' && columnIndex == 10) {
return 'status-not-pass'
}
if (row.approval_status == '待审核' && columnIndex == 10) {
return 'status-check-pass'
}
if (row.signed_status == '' && columnIndex == 11) {
return 'status-pass'
}
if (row.signed_status == '没签署' && columnIndex == 11) {
return 'status-not-pass'
}
if (row.signed_status == '待审核' && columnIndex == 11) {
return 'status-check-pass'
}
}
},
closeDialog() {
this.showDialog = false
this.handleClear()
},
},
}
</script>
<style lang="scss">
.shopAudit-container {
.content {
display: flex;
align-items: center;
text-align: center;
margin: 20px 0;
.name {
font-weight: bold;
}
.input-with-select {
margin: 0 10px;
width: 270px;
}
}
.status-pass {
.cell {
color: #48c978 !important;
}
}
.status-not-pass {
.cell {
color: red !important;
}
}
.status-check-pass {
.cell {
color: #ffba00 !important;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -6,19 +6,12 @@
:visible.sync="dialogFormVisible"
@close="close"
>
<el-form
ref="form"
label-width="150px"
:model="form"
:rules="rules"
>
<el-form ref="form" label-width="150px" :model="form" :rules="rules">
<el-form-item :label="__('管理员账号')" prop="user_account">
<el-input
v-model="form.user_account"
clearable
:placeholder="
__('管理员信息账号')
"
:placeholder="__('管理员信息账号')"
:readonly="isReadOnly"
:style="{ width: '48%' }"
/>