# Conflicts:
#	fuintAdmin_zt/src/views/Site/index.vue
#	fuintAdmin_zt/src/views/login.vue
This commit is contained in:
DESKTOP-369JRHT\12997 2024-07-09 16:44:03 +08:00
commit b13c529045
51 changed files with 1104 additions and 180 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -117,3 +117,10 @@
font-weight: bold;
}
}
.el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #FF9655 !important;
}
.el-pagination.is-background .el-pager li:hover{
color: #FF9655 !important;/*hover时候的文字颜色*/
}

View File

@ -371,18 +371,46 @@
<el-input v-model="form2.mobile"
type="textarea"
maxlength="12000"
style="width: 85%;height: 300px;"
style="width: 85%;margin-left: 13px"
show-word-limit
placeholder="请输入会员手机号,多个手机号换行操作每行一个会员手机号单次最大支持1000个会员手机号认证~">
placeholder="请输入会员手机号,多个手机号用中文或英文 ‘或’ 隔开!单次最大支持1000个会员手机号认证">
</el-input>
<div>
<div style="color: grey;font-size: 12px;height: 18px;margin-left: 8%">
多个会员手机号换行操作,每行为一个会员手机号单次最大支持1000个会员手机号认证,请确保用户手机号已注册为油站会员(在会员列表已显示),否则无法添加认证信息
</div>
<!-- <div style="color: grey;font-size: 12px;margin-left: 8%">-->
<!-- 多个会员手机号换行操作,每行为一个会员手机号单次最大支持1000个会员手机号认证,请确保用户手机号已注册为油站会员(在会员列表已显示),否则无法添加认证信息-->
<!-- </div>-->
</div>
</el-form-item>
</el-col>
</el-row>
<div style="margin: 50px 0;display: flex">
<el-upload
class="upload-demo"
v-loading="uploading"
action="/fuint-application/business/userManager/certifiedMember/import"
:headers="headers"
:limit="1"
:on-change="handleChange"
style="margin-left: 50px"
:file-list="fileList">
<div style="display: flex;margin-left: 20px">
<div style="position: relative" >
<img src="../../assets/images/scimg.png" style="width: 167px;height: 144px;">
<div style=" width: 100%; position: absolute;left: 50%;transform: translate(-50%,50%);bottom: 36px"> <span style="color: #FF9655">点击导入</span> 文件</div>
</div>
<div style="margin-top: 120px">
<a style="margin-left: 50px;color: #FF9655;"
href="/fuint-application/business/userManager/certifiedMember/export"> 导入模板下载.xlsx </a>
</div>
</div>
<!-- <el-button size="small" type="success" icon="el-icon-upload">点击上传</el-button>-->
<div slot="tip" style="margin-top: 20px;color: grey;font-size: 12px;line-height: 20px">
只能上传xls/xlsx文件单次最大支持1000个会员手机号认证且不超过1M 超出请分文件处理,请确保用户手机号已注册为油站会员(在会员列表已显示),否则无法添加认证信息
批星导入会员手机号单次最大支持5000个会员手机号认证请确保用户手机号已注册为油站会员(在会员列表已显示)否则无法添加认证官享
</div>
</el-upload>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormMembers"> </el-button>
@ -841,6 +869,9 @@ export default {
headers: {
'Access-Token': getToken(),
},
uploading: false,
//
fileList: [],
result:{},
isEdit:false,
//
@ -1316,6 +1347,20 @@ export default {
}
});
},
//
handleChange(file, fileList) {
this.uploading = true;
if(file.status === 'success'){
this.uploading = false;
this.fileList.splice(0,1)
this.openMembers = false;
this.openResult = true;
this.title = "会员认证结果";
this.result = file.response.data;
this.reset2();
this.getListMember();
}
},
//
submitFormMembers: function() {
this.$refs["form2"].validate(valid => {

View File

@ -49,7 +49,7 @@
<el-select
v-model="queryParams.gradeId"
clearable
placeholder="全部"
placeholder="会员等级"
>
<el-option v-for="grade in userGradeList" :key="grade.id+''" :label="grade.name" :value="grade.id+''"/>
</el-select>
@ -58,7 +58,7 @@
<el-select
v-model="ifBalance"
clearable
placeholder="全部"
placeholder="有无储值余额"
>
<el-option label="有储值余额" value="haveBalance"/>
<el-option label="无储值余额" value="noHaveBalance"/>
@ -92,7 +92,7 @@
</div>
<div class="k-three">
<div class="title_">充值总人数</div>
<div class="num-size">{{balance}}</div>
<div class="num-size">{{rechargeTotal || 0}}</div>
<img class="r-bot-img" src="./imgs/hy-3.png" alt="">
</div>
<div class="k-four">
@ -477,6 +477,7 @@ export default {
addNum:'',
//
yesterdayAddNum:'',
rechargeTotal:"",
//
loading: true,
uploading: false,
@ -612,6 +613,7 @@ export default {
listStatistic(this.addDateRange(this.queryParams, dateRange)).then( response => {
this.addNum = response.data.addNum;
this.yesterdayAddNum = response.data.yesterdayAddNum;
this.rechargeTotal = response.data.rechargeTotal;
if (!response.data.balance) {
this.balance = 0
}else {

View File

@ -91,7 +91,7 @@
<!-- 统计-->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>统计</span>
<span>挂账订单统计</span>
</div>
<div class="box-gang">
<div class="box">

View File

@ -51,7 +51,7 @@
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span></span>
<span>收银台订单统计</span>
</div>
<div class="box-gang">
<div class="box">

View File

@ -81,7 +81,7 @@
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span></span>
<span>商品交易订单统计</span>
</div>
<div class="box-gang">
<div class="box">

View File

@ -77,7 +77,7 @@
<!-- 统计-->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span></span>
<span>会员充值订单统计</span>
</div>
<div class="box-gang">

View File

@ -0,0 +1,19 @@
import request from '@/utils/request'
// 查询首页店铺数量信息
export function storeTotalIndex(query) {
return request({
url: '/backendApi/store/getStoreTotal',
method: 'get',
params: query
})
}
// 查询首页店铺金额信息
export function storeAmountIndex(query) {
return request({
url: '/business/allOrderInfo/getAmount',
method: 'get',
params: query
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

View File

@ -117,3 +117,17 @@
font-weight: bold;
}
}
.el-switch.is-checked .el-switch__core{
background-color: #0DC291 !important;
border-color: #0DC291 !important;
}
.el-switch__core{
background-color: #FF4347 !important;
border-color: #FF4347 !important;
}
.el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #FF9655 !important;
}
.el-pagination.is-background .el-pager li:hover{
color: #FF9655 !important;/*hover时候的文字颜色*/
}

View File

@ -43,7 +43,7 @@ export default {
}
.fixed-header+.app-main {
padding-top: 130px;
padding-top: 90px;
}
}
</style>

View File

@ -1,19 +1,38 @@
<template>
<div class="navbar">
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<div style="display: flex;align-items: center" >
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
<div class="title-logo">
<div>
百业兴智慧油站欢迎您
</div>
</div>
</div>
<!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>-->
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
<!-- <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>-->
<div class="right-menu">
<template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" />
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<FuintDoc id="fuint-doc" class="right-menu-item hover-effect" />
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img :src="avatar" class="user-avatar">
<!-- <template v-if="device!=='mobile'">-->
<!-- <search id="header-search" class="right-menu-item" />-->
<!-- <screenfull id="screenfull" class="right-menu-item hover-effect" />-->
<!-- <FuintDoc id="fuint-doc" class="right-menu-item hover-effect" />-->
<!-- </template>-->
<div class="d-s"style="margin-right: 20px">
<img src="../../assets/images/qp.png" style="width: 28px;height: 28px;margin-right: 5px">
<div>全屏</div>
</div>
<div class="d-s"style="margin-right: 20px">
<img src="../../assets/images/tzzx.png" style="width: 28px;height: 28px;margin-right: 5px">
<div>通知中心</div>
</div>
<el-dropdown class="d-s" trigger="click">
<div class="d-s">
<div class="title_">百业兴总部</div>
<img :src="avatar" style="width: 28px;height: 28px;margin: 0px 10px" />
<span class="user-name">{{ name }}</span>
<i class="el-icon-caret-bottom"/>
</div>
@ -27,13 +46,7 @@
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="title-logo">
<div>
百业兴智慧油站欢迎您
</div>
</div>
</div>
</template>
@ -101,6 +114,16 @@ export default {
</script>
<style lang="scss" scoped>
.d-s{
display: flex;
align-items: center;
}
.title_{
font-weight: bold;
font-size: 18px;
color: #333333;
}
.navbar {
height: 90px;
overflow: hidden;
@ -113,7 +136,9 @@ export default {
box-shadow: 0 1px 4px rgba(0,21,41,.08);
box-sizing: border-box;
padding-top:25px ;
display: flex;
align-items: center;
justify-content: space-between;
.hamburger-container {
line-height: 46px;
height: 100%;
@ -154,9 +179,9 @@ export default {
}
.right-menu {
float: right;
display: flex;
height: 100%;
line-height: 50px;
align-items: center;
&:focus {
outline: none;

View File

@ -82,7 +82,7 @@ export default {
color: #000;
font-weight: 700;
line-height: 50px;
font-size: 16px;
font-size: 18px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle;
}

View File

@ -5,7 +5,7 @@
<div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide}" class="main-container">
<div v-if="!sidebar.hide" :class="{'fixed-header':fixedHeader}">
<navbar />
<tags-view v-if="needTagsView" />
<!-- <tags-view v-if="needTagsView" />-->
</div>
<app-main />
<right-panel>

View File

@ -63,7 +63,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/views/Service/index.vue'),
component: () => import('@/views/index.vue'),
name: 'Index',
meta: { title: '系统首页', icon: 'dashboard', affix: true }
},

View File

@ -0,0 +1,216 @@
<script>
export default {
data() {
return {
ruleForm: {
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
{ min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
],
region: [
{ required: true, message: '请选择活动区域', trigger: 'change' }
],
date1: [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
],
date2: [
{ type: 'date', required: true, message: '请选择时间', trigger: 'change' }
],
type: [
{ type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
],
resource: [
{ required: true, message: '请选择活动资源', trigger: 'change' }
],
desc: [
{ required: true, message: '请填写活动形式', trigger: 'blur' }
]
},
tableData: [{
id: 1,
date: '系统首页',
}, {
id: 2,
date: '机构管理',
children: [
{
id: 3,
date: '组织架构',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄',
children: [{
id: 31,
date: '用户信息',
list:[{show:true,name:'新增'},{show:true,name:'修改'},{show:true,name:'重置密码'},]
}, {
id: 32,
date: '机构信息',
list:[{show:true,name:'保存'},]
}]
},
]
// list:[{show:true,name:''},{show:true,name:''},{show:true,name:''},]
}, {
id: 4,
date: '财务报表',
children:[{
id: 33,
date: '交易对账',
list:[{show:true,name:'导出订单'}]
}, {
id: 34,
date: '流水分析',
list:[{show:true,name:'导出订单'},]
}],
}],
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert('submit!');
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
}
</script>
<template>
<div class="container">
<div class="top-box">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<div>
<el-form-item label="角色名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
</div>
<div>
<el-form-item label="所属机构" prop="region">
<el-select v-model="ruleForm.region" placeholder="请选择活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item label="角色状态" prop="delivery">
<el-switch v-model="ruleForm.delivery"></el-switch>
</el-form-item>
</div>
<div>
<el-form-item label="角色描述" prop="desc">
<el-input v-model="ruleForm.desc"></el-input>
</el-form-item>
</div>
</el-form>
</div>
<div class="center-box">
<el-table
:data="tableData"
style="width: 100%;margin-bottom: 20px;"
row-key="id"
border
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column
prop="date"
label="菜单"
width="180">
</el-table-column>
<el-table-column
prop="address"
label="功能">
<template slot-scope="scope">
<div style="display: flex;align-items: center">
<div class="f-box" v-for="(item,index) in scope.row.list" :key="index"> <img v-if="item.show == true" style="width: 15px;height: 15px;margin-right: 5px" src="../../assets/images/xz.png"> <div v-else class="k_" ></div> {{item.name}} </div>
</div>
</template>
</el-table-column>
</el-table>
<div style="display: flex">
<el-button @click="resetForm('ruleForm')">取消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
.container{
width: 100%;
box-sizing: border-box;
padding: 20px;
background: #f4f5f9;
}
.top-box{
width: 100%;
box-sizing: border-box;
padding: 20px;
display: flex;
align-items: center;
background: #FFFFFF;
box-shadow: 0px 3px 6px 1px rgba(255,255,255,0.4), inset 0px 3px 6px 1px rgba(255,255,255,0.5);
border-radius: 10px 10px 10px 10px;
}
.demo-ruleForm{
display: flex;
align-items: center;
}
.center-box{
width: 100%;
box-sizing: border-box;
padding: 20px;
background: #FFFFFF;
box-shadow: 0px 3px 6px 1px rgba(255,255,255,0.4), inset 0px 3px 6px 1px rgba(255,255,255,0.5);
border-radius: 10px 10px 10px 10px;
margin-top: 20px;
}
.f-box{
display: flex;
align-items: center;
margin-right: 10px;
}
.k_{
width: 15px;
border-radius: 4px;
height: 15px;
margin-right: 5px;
border: 1px solid #ccc;
}
</style>

View File

@ -85,24 +85,42 @@
<el-option key="0" label="禁用" value="0"/>
</el-select>
</el-form-item>
<el-form-item style="float: right">
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- <el-form-item style="float: right">-->
<!-- <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>-->
<!-- <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
@click="handleAdd"
>新增
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button
type="warning"
size="mini"
@click="handleAdd"
>新增用户
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- >新增用户-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-card>-->
<!-- <el-card >-->
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
@ -392,24 +410,11 @@
</el-input>
</el-form-item>
</el-col>
</template>
<template v-if="ruleForm.turnoverType === '5'">
<el-col :span="10">
<el-row>
<el-form-item label="时间范围">
<!-- <el-date-picker-->
<!-- :disabled="isTopDept"-->
<!-- v-model="timeFrame"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="至"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期">-->
<!-- </el-date-picker>-->
<el-date-picker
:disabled="isTopDept"
v-model="beginTime"
@ -509,10 +514,6 @@
</el-row>
</el-col>
</template>
<template v-if="ruleForm.turnoverType === '5'">
<el-col :span="10">
<el-row>
@ -537,7 +538,6 @@
</el-form-item>
</el-row>
</el-col>
<el-col :span="8">
<el-form-item label="价格">
<el-input :disabled="isTopDept" v-model="ruleForm.prepaidAmount">
@ -546,9 +546,6 @@
</el-form-item>
</el-col>
</template>
<template v-if="ruleForm.turnoverType === '6'">
<el-col :span="10">
@ -601,12 +598,7 @@
</el-col>
</template>
</el-col>
</el-row>
<el-row>
<el-col :span="12"><div class="grid-content bg-purple"></div></el-col>
<el-col :span="12"><div class="grid-content bg-purple-light"></div></el-col>
@ -1804,19 +1796,23 @@ export default {
let isAdd = data.deptType == '3'
return (
<span class="custom-tree-node">
<div class="custom-tree-node" style="display: flex;align-items: center;">
<span class="custom-tree-box">{node.label}</span>
<span>
<span style="display: flex;align-items: center;">
{!isAdd ?
<el-button v-if="!isAdd" size="mini" type="text" on-click={() => this.append(data)}>新增</el-button>
< img alt="" src="http://47.95.206.185:83/add.png" style=" width: 20px;height: 20px; " on-click={() => this.append(data)}/>
: null
}
{node.level !== 1 ?
<el-button size="mini" type="text" on-click={() => this.remove(node, data)}>删除</el-button>
< img alt="" src="http://47.95.206.185:83/del.png" style=" width: 20px;height: 20px; " on-click={() => this.remove(node, data)}/>
: null
}
</span>
</span>);
</span>
</div>);
},
@ -1911,7 +1907,7 @@ export default {
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.realName + '"用户吗?').then(function () {
return changeUserStatus(row.userId, row.status);
return updateUser(row);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function () {
@ -2222,6 +2218,7 @@ export default {
}
.custom-tree-box{
margin-right: 10px;
}
</style>

View File

@ -10,7 +10,7 @@
<img src="./../assets/images/l-one.png" style="width: 80px;height: 80px">
</div>
<div>
<div class="r-title">568</div>
<div class="r-title">{{ storeTotal.allTotal || 0 }}</div>
<div class="r-size">合作油站总数</div>
</div>
</div>
@ -19,8 +19,8 @@
<img src="./../assets/images/l-two.png" style="width: 80px;height: 80px">
</div>
<div>
<div class="r-title">568</div>
<div class="r-size">合作油站总数</div>
<div class="r-title">{{ storeTotal.weekTotal || 0 }}</div>
<div class="r-size">7日活跃油站汇总数</div>
</div>
</div>
<div class="san-box" style="background: linear-gradient( 90deg, #9CDCA0 0%, #5BC557 100%);">
@ -28,8 +28,8 @@
<img src="./../assets/images/l-three.png" style="width: 80px;height: 80px">
</div>
<div>
<div class="r-title">568</div>
<div class="r-size">合作油站总</div>
<div class="r-title">{{ storeTotal.monthTotal || 0 }}</div>
<div class="r-size">本月新增油站</div>
</div>
</div>
</div>
@ -104,28 +104,67 @@
</div>
</div>
<div class="hui-hang"></div>
<div class="d-s">
<div class="d-s" >
<div>
<div class="h-tt" >活跃油站</div>
<div id="pie" style="width: 150px;height: 150px;"></div>
<div id="ccc" style="width: 300px;height: 200px; "></div>
</div>
<div class="h-r-ba"></div>
<div>
<div class="h-tt" >活跃油站</div>
<div class="d-s" style="justify-content: space-between">
<div id="cccc" style="width: 300px;height: 200px;margin-right: 50px"></div>
<div id="ccct" style="width: 300px;height: 200px;"></div>
</div>
</div>
</div>
</div>
<div class="right-box-t">
<div class="h-tt" >硬件设备</div>
<div class="d-s" style="margin: 30px 0px" v-for="(item,index) in 3" :key="index" >
<div class="r-img">
<img src="./../assets/images/pcin.png" style="width: 84px;height: 70px">
</div>
<div>容大(RT RONGTA)RP76II针式76mm小票打印机加油站二三联票据 RP76II/USB口</div>
</div>
</div>
</div>
<div class="bottom_">
<div class="h-tt" style="margin-bottom: 15px" >数据统计</div>
<div class="d-s">
<div class="anniu-h" :class="{ 'anniu-act': index == 0 }" v-for="(item,index) in timeList" :key="index">
{{item}}
</div>
<el-date-picker
v-model="value1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
<div id="ctct" style="width: 100%; height: 315px;background: linear-gradient( 360deg, #F8F0E7 0%, #FFFFFF 100%); "></div>
</div>
</div>
</template>
<script>
import echarts from "echarts";
import {storeAmountIndex, storeTotalIndex} from "@/api/indexBanner";
export default {
data(){
return{
form: {},
timeList:[
"今日",
"近一周",
"近一月",
"近一年",
],
options: [{
value: '选项1',
label: '黄金糕'
@ -145,63 +184,243 @@ export default {
value: '',
value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],
imagePath: process.env.VUE_APP_SERVER_URL,
//
storeTotal:{},
//
storeAmount:{},
}
},
created() {
this.getStoreTotal()
this.getStoreAmount()
},
mounted() {
this.initChart()
},
methods:{
getStoreTotal(){
storeTotalIndex().then(res => {
this.storeTotal = res.data
})
},
getStoreAmount(){
storeAmountIndex().then(res => {
console.log(res)
})
},
initChart() {
const chart = echarts.init(document.getElementById('pie'))
const chart = echarts.init(document.getElementById('ccc'))
const chart1 = echarts.init(document.getElementById('cccc'))
const chart2= echarts.init(document.getElementById('ccct'))
const chart3= echarts.init(document.getElementById('ctct'))
const option = {
color: [
'#ff9655',
'#86E1BB',
'#8195F5',
'#0DC291',
'#FFB519',
],
dataset: {
source: [
['product', '#92', '#95', '#98'],
tooltip: {
trigger: 'item'
},
]
},
xAxis: {
type: 'category',
boundaryGap: false,
// data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
data: this.timeDate
},
yAxis: {
type: 'value'
},
series: [
{
data: this.oilDate,
type: 'line',
smooth: true,
lineStyle: {
width: 4
},
areaStyle: {
opacity: 0.8,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#fff'
},
{
offset: 1,
color: '#F8F1E7'
}
])
},
name: 'Access From',
type: 'pie',
radius: '80%',
data: [
{ value: 28, name: '28%' },
{ value: 72, name: '72%' },
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
const option1 = {
color: [
'#3B6ADE',
'#409eff',
],
tooltip: {
trigger: 'item'
},
series: [
{
name: 'Access From',
type: 'pie',
radius: '80%',
data: [
{ value: 28, name: '28%' },
{ value: 72, name: '72%' },
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
const option2 = {
color: [
'#0DC291',
'#FFB519',
],
tooltip: {
trigger: 'item'
},
series: [
{
name: 'Access From',
type: 'pie',
radius: '80%',
data: [
{ value: 28, name: '28%' },
{ value: 72, name: '72%' },
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
const option3 = {
color: ['#FF9655', '#0DC291', '#409EFF'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
legend: {
data: ['交易金额', '交易笔数', '活跃油站数']
},
xAxis: [
{
type: 'category',
data: [
'00:00',
'02:00',
'04:00',
'06:00',
'08:00',
'10:00',
'12:00',
'14:00',
'16:00',
'18:00',
'20:00',
'22:00'
],
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
name: '金额(元)',
min: 0,
max: 250,
interval: 50,
axisLabel: {
formatter: '{value} '
}
},
{
type: 'value',
name: '笔数',
min: 0,
max: 25,
interval: 5,
axisLabel: {
formatter: '{value}'
}
}
],
series: [
{
name: '活跃油站数',
type: 'bar',
tooltip: {
valueFormatter: function (value) {
return value + ' ml';
}
},
barWidth: 13,
itemStyle: {
normal: {
// 5]
barBorderRadius: [50, 50, 0, 0]
}
},
data: [
30.0, 31.9, 71.0, 23.2, 41.6, 31.7, 21.6, 30.0, 31.9, 71.0, 23.2, 41.6
]
},
]
{
name: '交易金额',
type: 'line',
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + ' °C';
}
},
data: [3.0, 3.9, 7.0, 2.2, 4.6, 3.7, 2.6, 3.0, 3.9, 7.0, 3.2, 4.6]
},
{
name: '交易笔数',
type: 'line',
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + ' °C';
}
},
data: [2.0, 3.9, 4.0, 5.2, 4.6, 6.7, 7.6, 6.0, 5.9, 4.0, 4.2, 2.6]
}
],
grid: {
left: '1%',
right: '1%',
bottom: '3%',
containLabel: true
}
};
chart.setOption(option)
chart1.setOption(option1)
chart2.setOption(option2)
chart3.setOption(option3)
}
}
@ -367,4 +586,41 @@ export default {
background: #F4F5F9;
margin: 15px auto;
}
.h-r-ba{
height: 170px;
margin: 0px 50px;
width: 5px;
background: #f4f5f9;
}
.r-img{
width: 84px;
height: 70px;
margin-right: 20px;
}
.bottom_{
width: 100%;
border-radius: 10px;
background: #fff;
box-sizing: border-box;
padding: 20px;
margin-top: 20px;
}
.anniu-h{
width: 80px;
height: 26px;
background: #FAFAFA;
border-radius: 4px 4px 4px 4px;
border: 1px solid #DDDDDD;
display: flex;
align-items: center;
justify-content: center;
color: #777777;
margin-right: 20px;
}
.anniu-act{
background: #FF9655 !important;
border: 1px solid #FF9655 !important;
color: #fff;
}
</style>

View File

@ -281,6 +281,7 @@ export default {
}
app.$store.dispatch("Login", this.loginForm).then(() => {
if (Cookies.get("IS_BK_LOGIN")) {
location.replace(this.bkUrl+"resource_oilstore");
}else {
@ -288,6 +289,9 @@ export default {
}
// app.$router.push({ path: this.redirect || "/" }).catch(()=>{});
// app.$router.push({ path: this.redirect || "/" }).catch(()=>{});
// app.$router.push({ path: "index" }).catch(()=>{});
}).catch(() => {
app.loading = false;
if (app.captchaOnOff) {

View File

@ -90,4 +90,11 @@ public interface CardValueRecordService extends IService<CardValueRecord> {
* @return
*/
IPage<CardValueRecord> selectCardValueRecordList(Page page, CardValueRecord cardValueRecord);
/**
* 会员充值总人数
* @param user
* @return
*/
Integer selectUserTotal(LJUserVo user);
}

View File

@ -1151,5 +1151,17 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
cardValueRecord.setStoreId(nowAccountInfo.getStoreId());
return baseMapper.selectCardValueRecordList(page,cardValueRecord);
}
@Override
public Integer selectUserTotal(LJUserVo user) {
QueryWrapper queryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotEmpty(user.getParams())){
queryWrapper.apply(true,"create_time BETWEEN '" + user.getParams().get("beginTime") + "' and '" + user.getParams().get("endTime") + "'");
}
queryWrapper.eq("chain_store_id",user.getChainStoreId());
queryWrapper.groupBy("mt_user_id");
List list = baseMapper.selectList(queryWrapper);
return list.size();
}
}

View File

@ -230,4 +230,9 @@ public class AllOrderInfoController extends BaseController {
public ResponseObject getOperatingDataPos(AllOrderInfoDto allOrderInfo){
return getSuccessResult(allOrderInfoService.getOperatingDataPos(allOrderInfo));
}
@GetMapping("/getAmount")
public ResponseObject getAmount(AllOrderInfoVo allOrderInfo){
return getSuccessResult(allOrderInfoService.getAmount(allOrderInfo));
}
}

View File

@ -20,28 +20,33 @@ public interface AllOrderInfoMapper extends BaseMapper<AllOrderInfo> {
IPage<AllOrderInfoVo> getPageList(@Param("page") Page page, @Param("allOrderInfo") AllOrderInfo allOrderInfo);
String sumPayMoney( @Param("allOrderInfo") AllOrderInfo allOrderInfo);
String sumPayMoney(@Param("allOrderInfo") AllOrderInfo allOrderInfo);
// 根据storeId List查询总流水
BigDecimal allStream(@Param("list") List<MtStore> mtStoreList);
AllOrderInfoVo getTradingData(@Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
IPage<AllOrderInfoVo> getTradingPage(@Param("page") Page page, @Param("allOrderInfo") AllOrderInfo allOrderInfo);
IPage<AllOrderInfoVo> getTradingPage(@Param("page") Page page, @Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
AllOrderInfoVo getRunningWaterByInstituion(@Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
// 计算不活跃的店铺数量
// 计算不活跃的店铺数量
AllOrderInfoVo getStoreNDynamic(@Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
IPage<AllOrderInfoVo> getRunningWaterByDay(@Param("page") Page page, @Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
AllOrderInfoVo getRunningWaterByDayData( @Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
AllOrderInfoVo getRunningWaterByDayData(@Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
AllOrderInfoVo getRunningWaterByData(@Param("allOrderInfo") AllOrderInfoDto allOrderInfo);
/**
* 根据支付状态查询订单笔数
*
* @param allOrderInfo
* @return
*/
@ -52,4 +57,14 @@ public interface AllOrderInfoMapper extends BaseMapper<AllOrderInfo> {
AllOrderInfoVo getHandOverList(HandoverRecord record);
AllOrderInfoVo getOneByOrderNo(String orderNo);
}
/**
* 根据条件查询笔数
*
* @param allOrderInfo
* @return
*/
Integer selectTotal(@Param("allOrderInfo") AllOrderInfo allOrderInfo);
Double selectAllAmount(@Param("allOrderInfo") AllOrderInfo allOrderInfo);
}

View File

@ -402,6 +402,41 @@
from all_order_info
where order_no = #{orderNo}
</select>
<select id="selectTotal" resultType="java.lang.Integer">
select count(*) from all_order_info
<where>
<if test="allOrderInfo.storeId != null and allOrderInfo.storeId != ''">
and store_id = #{allOrderInfo.storeId}
</if>
<if test="allOrderInfo.status != null and allOrderInfo.status != ''">
and status = #{allOrderInfo.status}
</if>
<if test="allOrderInfo.params.beginTime != null and allOrderInfo.params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(create_time,'%y%m%d') &gt;= date_format(#{allOrderInfo.params.beginTime},'%y%m%d')
</if>
<if test="allOrderInfo.params.endTime != null and allOrderInfo.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(create_time,'%y%m%d') &lt;= date_format(#{allOrderInfo.params.endTime},'%y%m%d')
</if>
</where>
</select>
<select id="selectAllAmount" resultType="java.lang.Double"
parameterType="com.fuint.business.order.entity.AllOrderInfo">
select sum(pay_money) from all_order_info
<where>
<if test="allOrderInfo.storeId != null and allOrderInfo.storeId != ''">
and store_id = #{allOrderInfo.storeId}
</if>
<if test="allOrderInfo.status != null and allOrderInfo.status != ''">
and status = #{allOrderInfo.status}
</if>
<if test="allOrderInfo.params.beginTime != null and allOrderInfo.params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(create_time,'%y%m%d') &gt;= date_format(#{allOrderInfo.params.beginTime},'%y%m%d')
</if>
<if test="allOrderInfo.params.endTime != null and allOrderInfo.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(create_time,'%y%m%d') &lt;= date_format(#{allOrderInfo.params.endTime},'%y%m%d')
</if>
</where>
</select>
<!-- WHERE-->
<!-- DATE(pay_time) = CURDATE();-->
<!-- <if test="startTime != null ">&lt;!&ndash; 开始时间检索 &ndash;&gt;-->

View File

@ -96,4 +96,17 @@ public interface AllOrderInfoService {
AllOrderInfoVo getOneByOrderNo(String orderNo);
AllOrderInfo getOneByOrderNos(String orderNo);
/**
* 查询某个时间段内店铺数量
* @param map
* @return
*/
Integer selectStoreTotal(Map<String,String> map);
/**
*
* @return
*/
Map<String,Object> getAmount(AllOrderInfoVo allOrderInfoVo);
}

View File

@ -975,6 +975,58 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
return allOrderInfoMapper.getOneByOrderNo(orderNo);
}
@Override
public Integer selectStoreTotal(Map<String, String> map) {
String startTime = map.get("startTime");
String endTime = map.get("endTime");
QueryWrapper queryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)){
queryWrapper.apply(true,"create_time BETWEEN '" + startTime + "' and '" + endTime + "'");
}
queryWrapper.groupBy("store_id");
List<AllOrderInfo> allOrderInfos = baseMapper.selectList(queryWrapper);
Integer row = 0;
if (ObjectUtil.isNotEmpty(allOrderInfos)) row = allOrderInfos.size();
return row;
}
@Override
public Map<String, Object> getAmount(AllOrderInfoVo allOrderInfoVo) {
Map<String, Object> map = new HashMap<>();
Integer tradeTotal = baseMapper.selectTotal(allOrderInfoVo);
Double tradeAmount = baseMapper.selectAllAmount(allOrderInfoVo);
allOrderInfoVo.setStatus("refund");
Integer refundTotal = baseMapper.selectTotal(allOrderInfoVo);
Double refundAmount = baseMapper.selectAllAmount(allOrderInfoVo);
Double averagePrice = tradeAmount/tradeTotal;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Double dayTradeAmount = 0.0;
Integer dayTradeTotal = 0;
Map<String, String> map1 = new HashMap<>();
if (ObjectUtil.isNotEmpty(allOrderInfoVo.getParams())) {
LocalDate date1 = LocalDate.parse(allOrderInfoVo.getParams().get("beginTime").toString(), formatter);
LocalDate date2 = LocalDate.parse(allOrderInfoVo.getParams().get("endTime").toString(), formatter);
Integer daysBetween = Math.toIntExact(ChronoUnit.DAYS.between(date1, date2));
dayTradeAmount = tradeAmount / daysBetween;
dayTradeTotal = tradeTotal / daysBetween;
map1.put("startTime", allOrderInfoVo.getParams().get("beginTime").toString());
map1.put("endTime", allOrderInfoVo.getParams().get("endTime").toString());
}
Integer storeTotal = selectStoreTotal(map1);
map.put("tradeTotal",tradeTotal);
map.put("tradeAmount",tradeAmount);
map.put("refundTotal",refundTotal);
map.put("refundAmount",refundAmount);
map.put("averagePrice",averagePrice);
map.put("dayTradeAmount",dayTradeAmount);
map.put("dayTradeTotal",dayTradeTotal);
map.put("storeTotal",storeTotal);
return map;
}
private long dayCount(String beginTimeStr, String endTimeStr ) {
// 将字符串表示的时间转换成 LocalDate 对象

View File

@ -2,6 +2,7 @@ package com.fuint.business.store.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fuint.business.storeInformation.entity.LJStore;
import com.fuint.common.util.Constants;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.dto.StoreDto;
@ -347,4 +348,10 @@ public class BackendStoreController extends BaseController {
public ResponseObject getByStroeName(MtStore storeName) {
return getSuccessResult(storeService.getByStroeName(storeName));
}
// 中台首页店铺数量查询
@GetMapping("/getStoreTotal")
public ResponseObject getStoreTotal(LJStore store){
return getSuccessResult(storeService.getStoreTotal(store));
}
}

View File

@ -1,6 +1,7 @@
package com.fuint.business.store.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuint.business.storeInformation.entity.LJStore;
import com.fuint.common.dto.StoreDto;
import com.fuint.framework.exception.BusinessCheckException;
import com.fuint.framework.pagination.PaginationRequest;
@ -113,4 +114,6 @@ public interface StoreService extends IService<MtStore> {
List<Map<Object,Object>> getByStroeName(MtStore storeName);
Map<String,Object> getStoreTotal(LJStore store);
}

View File

@ -2,14 +2,17 @@ package com.fuint.business.store.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fuint.business.order.mapper.AllOrderInfoMapper;
import com.fuint.business.order.service.AllOrderInfoService;
import com.fuint.business.store.entity.MtStore;
import com.fuint.business.store.mapper.MtStoreMapper;
import com.fuint.business.store.service.StoreService;
import com.fuint.business.storeInformation.entity.LJStore;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.dto.StoreDto;
import com.fuint.common.enums.StatusEnum;
@ -40,6 +43,7 @@ import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.redis.core.RedisTemplate;
@ -48,6 +52,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -67,6 +74,9 @@ public class StoreServiceImpl extends ServiceImpl<MtStoreMapper, MtStore> implem
private MtMerchantMapper mtMerchantMapper;
@Resource
private ISysDeptService iSysDeptService;
@Resource
@Lazy
private AllOrderInfoService allOrderInfoService;
/**
* 商户接口
@ -605,6 +615,40 @@ public class StoreServiceImpl extends ServiceImpl<MtStoreMapper, MtStore> implem
return objects;
}
@Override
public Map<String, Object> getStoreTotal(LJStore store) {
Map<String, Object> map = new HashMap<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("if_delete","0");
Integer allTotal = baseMapper.selectCount(queryWrapper);
// 查询过去七天活跃的数据
Map<String,String> map1 = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7); // 减去7天
Date sevenDaysAgo = calendar.getTime();
String startTime = sdf.format(sevenDaysAgo);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String endTime = dateFormat.format(new Date());
map1.put("startTime",startTime);
map1.put("endTime",endTime);
Integer weekTotal = allOrderInfoService.selectStoreTotal(map1);
// 查询过去一个月的数据
LocalDate now1 = LocalDate.now();
LocalDate sevenDaysAgo1 = now1.minusDays(30);
QueryWrapper queryWrapperSevenDays1 = new QueryWrapper<>();
queryWrapperSevenDays1.eq("if_delete","0");
queryWrapperSevenDays1.ge("create_time", sevenDaysAgo1);
Integer monthTotal = baseMapper.selectCount(queryWrapperSevenDays1);
map.put("allTotal",allTotal);
map.put("weekTotal",ObjectUtil.isNotEmpty(weekTotal) ? weekTotal : 0);
map.put("monthTotal",monthTotal);
return map;
}
// 将在部门里面删除的在油站中删除
public void beachDelStore() {

View File

@ -1,16 +1,33 @@
package com.fuint.business.userManager.controller;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.userManager.entity.CertifiedMember;
import com.fuint.business.userManager.entity.FixingLevel;
import com.fuint.business.userManager.entity.UserStatistic;
import com.fuint.business.userManager.listener.EasyExcelListener;
import com.fuint.business.userManager.service.CertifiedMemberService;
import com.fuint.business.userManager.service.FixingLevelService;
import com.fuint.business.userManager.vo.CertifiedMemberVo;
import com.fuint.business.userManager.vo.LJUserVo;
import com.fuint.framework.web.BaseController;
import com.fuint.framework.web.ResponseObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -22,6 +39,9 @@ public class CertifiedMemberController extends BaseController {
@Autowired
private CertifiedMemberService certifiedMemberService;
@Autowired
private FixingLevelService fixingLevelService;
/**
* 根据条件分页查询固定等级信息
* @param certifiedMember
@ -114,6 +134,93 @@ public class CertifiedMemberController extends BaseController {
return getSuccessResult(map1);
}
// 导入模板示例
@RequestMapping("/export")
public void export(HttpServletResponse response, HttpServletRequest request) {
try {
String filenames = "导入模板示列";
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
filenames = URLEncoder.encode(filenames, "UTF-8");
} else {
filenames = new String(filenames.getBytes("UTF-8"), "ISO-8859-1");
}
response.setContentType("application/json.ms-exce");
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", "filename=" + filenames + ".xlsx");
CertifiedMemberVo certifiedMember = new CertifiedMemberVo();
certifiedMember.setMobile("15487415241");
certifiedMember.setFixingLevelName("出租车认证");
certifiedMember.setName("张三");
certifiedMember.setCarNumber("鲁A8888");
certifiedMember.setRemark("这是一条示例数据");
List<CertifiedMemberVo> list = new ArrayList<>();
list.add(certifiedMember);
EasyExcel.write(response.getOutputStream(), CertifiedMemberVo.class).sheet("sheet").doWrite(list);
} catch (Exception e) {
e.printStackTrace();
}
}
// 导入认证会员信息
@RequestMapping("/import")
public ResponseObject myImport(MultipartFile file) throws IOException {
Map<String,Integer> map = new HashMap<>();
int error = 0;
int certified = 0;
int success = 0;
int total = 0;
try {
//获取文件名
String filename = file.getOriginalFilename();
//获取文件流
InputStream inputStream = file.getInputStream();
//实例化实现了AnalysisEventListener接口的类
EasyExcelListener listener = new EasyExcelListener();
EasyExcelFactory.read(inputStream, CertifiedMemberVo.class, listener).headRowNumber(1).build().readAll();
//获取数据
List<Object> list = listener.getDatas();
total = list.size();
if (list.size() >= 1) {
for (int i = 0; i < list.size(); i++) {
CertifiedMemberVo certifiedMemberVo = (CertifiedMemberVo) list.get(i);
FixingLevel fixingLevel = fixingLevelService.selectFixingLevelByName(certifiedMemberVo.getFixingLevelName());
if (ObjectUtil.isNotEmpty(fixingLevel)) {
CertifiedMember certifiedMember = new CertifiedMember();
certifiedMember.setFixingLevelId(fixingLevel.getId());
certifiedMember.setMobile(certifiedMemberVo.getMobile());
certifiedMember.setName(certifiedMemberVo.getName());
certifiedMember.setCarNumber(certifiedMemberVo.getCarNumber());
certifiedMember.setRemark(certifiedMemberVo.getRemark());
int row = certifiedMemberService.insertCertifiedMember(certifiedMember);
if (row == 1) {
success++;
} else if (row == 2 || row == 3) {
error++;
} else {
certified++;
}
}else {
error++;
}
}
}
map.put("success",success);
map.put("error",error);
map.put("certified",certified);
map.put("total",total);
} catch (Exception e) {
e.printStackTrace();
}
return getSuccessResult(map);
}
/**
* 修改固定等级信息
* @param certifiedMember

View File

@ -1,5 +1,6 @@
package com.fuint.business.userManager.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
@ -45,16 +46,19 @@ public class CertifiedMember extends BaseEntity implements Serializable {
* 姓名
*/
@ApiModelProperty("姓名")
@ExcelProperty(value = "姓名")
private String name;
/**
* 手机号
*/
@ApiModelProperty("手机号")
@ExcelProperty(value = "手机号码(必填)")
private String mobile;
/**
* 车牌号
*/
@ApiModelProperty("车牌号")
@ExcelProperty(value = "车牌号")
private String carNumber;
/**
* 认证资料
@ -65,6 +69,7 @@ public class CertifiedMember extends BaseEntity implements Serializable {
* 备注
*/
@ApiModelProperty("备注")
@ExcelProperty(value = "备注")
private String remark;
/**
* 认证状态

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fuint.business.marketingActivity.cardValue.service.CardValueRecordService;
import com.fuint.business.marketingActivity.cardValueChildrens.entity.CardValudChildrens;
import com.fuint.business.marketingActivity.cardValueChildrens.service.CardValudChildrensService;
import com.fuint.business.storeInformation.entity.LJStore;
@ -40,6 +41,9 @@ public class LJUserServiceImpl extends ServiceImpl<LJUserMapper, LJUser> impleme
private ILJStoreService storeService;
@Resource
private LJUserMapper ljUserMapper;
@Resource
@Lazy
private CardValueRecordService cardValueRecordService;
/**
* 根据条件分页查询会员信息
@ -73,7 +77,7 @@ public class LJUserServiceImpl extends ServiceImpl<LJUserMapper, LJUser> impleme
/**
* 根据条件分页查询会员信息
* @param page
* @param
* @param user
* @return
*/
@ -158,13 +162,14 @@ public class LJUserServiceImpl extends ServiceImpl<LJUserMapper, LJUser> impleme
// Integer yesterdayAddNum = baseMapper.selectCount(queryWrapper1);
Integer yesterdayAddNum = userBalanceMapper.selectCount(queryWrapper1);
Integer rechargeTotal = cardValueRecordService.selectUserTotal(user);
map.put("balance",balance);
map.put("point",point);
// map.put("literCard",literCard);
// map.put("refuelMoney",refuelMoney);
map.put("addNum",addNum);
map.put("yesterdayAddNum",yesterdayAddNum);
map.put("rechargeTotal",rechargeTotal);
return map;
}

View File

@ -0,0 +1,13 @@
package com.fuint.business.userManager.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fuint.business.userManager.entity.CertifiedMember;
import lombok.Data;
@Data
@ExcelIgnoreUnannotated
public class CertifiedMemberVo extends CertifiedMember {
@ExcelProperty(value = "认证类型")
private String fixingLevelName;
}

View File

@ -48,6 +48,8 @@ public class ShiroConfig {
filterMap.put("/static/**","anon");
//会员模板导出
filterMap.put("/excel/export","anon");
//认证会员模板导出
filterMap.put("/business/userManager/certifiedMember/export","anon");
//根据地理位置获取最近的店铺信息
filterMap.put("/business/storeInformation/store/recentlyStore","anon");
filterMap.put("/business/storeInformation/store/isRecharge","anon");

View File

@ -160,6 +160,7 @@ public class DutyServiceImpl extends ServiceImpl<TDutyMapper, TDuty> implements
TDutySource dutySource = new TDutySource();
dutySource.setDutyId(tduty.getDutyId());
dutySource.setSourceId(tSource.getSourceId());
dutySource.setIfDelete("0");
tDutySourceMapper.insert(dutySource);
}
}else {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

@ -35,6 +35,10 @@ public class TDutySource implements Serializable {
* 菜单id
*/
private Integer sourceId;
/**
* 菜单id
*/
private String ifDelete;
}

View File

@ -3,10 +3,11 @@
<mapper namespace="com.fuint.repository.mapper.TDutySourceMapper">
<select id="findSourceIdsByDutyId" resultType="java.lang.Long">
select distinct t.source_id from t_duty_source t
where t.duty_id = #{dutyId}
where t.duty_id = #{dutyId} and if_delete = '0'
</select>
<delete id="deleteSourcesByDutyId">
delete from t_duty_source where duty_id = #{dutyId}
</delete>
<update id="deleteSourcesByDutyId">
UPDATE t_duty_source
SET if_delete = '1' where duty_id = #{dutyId}
</update>
</mapper>

View File

@ -117,3 +117,10 @@
font-weight: bold;
}
}
.el-pagination.is-background .el-pager li:not(.disabled).active{
background-color: #FF9655 !important;
}
.el-pagination.is-background .el-pager li:hover{
color: #FF9655 !important;/*hover时候的文字颜色*/
}

View File

@ -72,7 +72,7 @@
} else {
if (str.includes("storeId")) {
storeId = str.split("=")[1]
}else if(str.includes("sn")){
} else if (str.includes("sn")) {
sn = str.split("=")[1]
}
}
@ -105,4 +105,4 @@
.dis {
display: flex;
}
</style>
</style>

View File

@ -3,8 +3,9 @@ module.exports = {
// baseUrl: 'https://vue.ruoyi.vip/prod-api',
// baseUrl: 'http://192.168.0.196:8081/',
// baseUrl: 'https://www.tuofeng.cc/oilAdmin/',
baseUrl: 'https://oilapi.youkerr.com/oilAdmin/',
// baseUrl: 'https://8q4f124343.yicp.fun/',
baseUrl: 'http://192.168.31.96:8080/',
// baseUrl: 'http://192.168.31.96:8080/',
// baseUrl: 'http://192.168.1.5:8002/cdJdc',
imagesUrl: 'http://www.nuoyunr.com/lananRsc',
// 应用信息

View File

@ -409,10 +409,10 @@
// this.getAddress();
uni.getSetting({
success(res) {
if (res.authSetting['scope.userLocation']==false) {
if (res.authSetting['scope.userLocation'] == false) {
// uni.clearStorageSync();
// _this.getStorageSize()
_this.showRefuseLocationPermission()
} else {
//
@ -431,36 +431,36 @@
})
},
//
showRefuseLocationPermission() {
const that = this;
wx.showModal({
title: "提示",
content: "需要获取用户位置权限",
confirmText: "前往设置",
showCancel: false,
success(res) {
if (res.confirm) {
uni.openSetting({
success(res){
console.log("打开设置成功", res);
if (res.authSetting['scope.userLocation']) {
console.log('成功授权userLocation')
that.getAddress()
} else {
console.log('用户未授权userLocation')
// ()
that.showRefuseLocationPermission()
}
},
fail(err){
console.log("打开设置失败", err)
}
})
}
}
})
const that = this;
wx.showModal({
title: "提示",
content: "需要获取用户位置权限",
confirmText: "前往设置",
showCancel: false,
success(res) {
if (res.confirm) {
uni.openSetting({
success(res) {
console.log("打开设置成功", res);
if (res.authSetting['scope.userLocation']) {
console.log('成功授权userLocation')
that.getAddress()
} else {
console.log('用户未授权userLocation')
// ()
that.showRefuseLocationPermission()
}
},
fail(err) {
console.log("打开设置失败", err)
}
})
}
}
})
},
getStorageSize() {
let that = this;
@ -1059,4 +1059,4 @@
color: white;
margin: 0 auto;
}
</style>
</style>

View File

@ -92,11 +92,12 @@
},
}).then((resp) => {
if (resp.code == 200) {
console.log(uni.getStorageSync("y_type"),uni.getStorageSync("y_userId"));
console.log(uni.getStorageSync("y_type"), uni
.getStorageSync("y_userId"));
if (uni.getStorageSync("y_type") ==
'yaoqingyouli') {
_this.activeRecommendRecords()
}
uni.setStorageSync('App-Token', resp.data.token);
@ -380,4 +381,4 @@
border: 1px solid #0078FF;
color: white;
}
</style>
</style>

View File

@ -325,8 +325,7 @@
oilCardAmountSale: this.oilCardRedece,
ifLogin: this.ifLogin,
levelAmount: this.levelAmount,
activeAmount: this.activeAmount,
sn
activeAmount: this.activeAmount
};
let _this = this;
request({