Merge remote-tracking branch 'origin/main'

This commit is contained in:
sw 2024-11-06 08:39:03 +08:00
commit 2e0aa8c693
6 changed files with 330 additions and 252 deletions

View File

@ -166,7 +166,7 @@
<span v-else-if="scope.row.type=='3'">储值卡</span>
<span v-else-if="scope.row.type=='4'">积分</span>
<span v-else-if="scope.row.type=='5'">囤油卡</span>
<span v-else-if="scope.row.type=='6'">油品加商品(收银台订单)</span>
<span v-else-if="scope.row.type=='6'">收银台订单</span>
<span v-else-if="scope.row.type=='7'">挂账订单</span>
<span v-else="">其他</span>
</template>

View File

@ -15,9 +15,27 @@
<el-option label="小程序" value="applet"/>
<el-option label="收银台" value="cashier"/>
<el-option label="POS端" value="POS"/>
<el-option label="平台" value="PC"/>
</el-select>
</el-form-item>
<el-form-item label="" prop="payChannel">
<el-select
v-model="queryParams.type"
clearable
placeholder="请选择订单分类"
>
<el-option label="油品" value="1"/>
<el-option label="商品" value="2"/>
<el-option label="储值卡" value="3"/>
<el-option label="积分" value="4"/>
<el-option label="囤油卡" value="5"/>
<el-option label="收银台订单" value="6"/>
<el-option label="挂账订单" value="7"/>
<el-option label="pos" value="8"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="" prop="payChannel">
<el-select
v-model="queryParams.payChannel"
clearable
@ -27,7 +45,7 @@
<el-option label="收银台" value="cashier"/>
<el-option label="POS端" value="POS"/>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="" prop="payType">
@ -42,7 +60,7 @@
<el-option label="余额" value="balance"/>
</el-select>
</el-form-item>
<el-form-item label="" prop="payType">
<!-- <el-form-item label="" prop="payType">
<el-select
v-model="queryParams.payType"
clearable
@ -53,7 +71,19 @@
<el-option label="支付宝" value="ALIPAY"/>
<el-option label="余额" value="balance"/>
</el-select>
</el-form-item> -->
<el-form-item label="" prop="paymentChannel">
<el-select v-model="queryParams.paymentChannel" placeholder="请选择支付渠道" clearable>
<el-option
v-for="dicts in this.dict"
:key="dicts.dictValue"
:label="dicts.dictLabel"
:value="dicts.dictValue"
/>
</el-select>
</el-form-item>
<el-form-item label="" prop="status">
<el-select
v-model="queryParams.status"
@ -63,122 +93,114 @@
<el-option label="已支付" value="paid"/>
<el-option label="未支付" value="unpaid"/>
<el-option label="已退款" value="refund"/>
<el-option label="支付失败" value="payFail"/>
</el-select>
</el-form-item>
<el-form-item label="" style="margin-right: 0px" prop="status">
<el-select
v-model="queryParams.status"
clearable
placeholder="请选择员工"
>
<el-option label="已支付" value="paid"/>
<el-option label="未支付" value="unpaid"/>
<el-option label="已退款" value="refund"/>
<el-form-item label="" prop="staffId">
<el-select v-model="queryParams.staffId" placeholder="请选择员工" clearable>
<el-option
v-for="dicts in this.staffList"
:key="dicts.acctId"
:label="dicts.accountName"
:value="dicts.acctId"
/>
</el-select>
</el-form-item>
<el-form-item label="" prop="status">
<el-select
v-model="queryParams.status"
clearable
placeholder="请输入付款用户"
>
<el-option label="已支付" value="paid"/>
<el-option label="未支付" value="unpaid"/>
<el-option label="已退款" value="refund"/>
</el-select>
<el-form-item label="" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入付款用户"></el-input>
</el-form-item>
<el-form-item label="">
<el-date-picker
v-model="beginTime"
style="width: 140px"
type="date"
placeholder="交易开始日期">
</el-date-picker>
<el-date-picker
v-model="endTime"
style="width: 140px"
type="date"
placeholder="交易结束日期">
v-model="queryParams.dataRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item style="float: right; margin-right: 0px ">
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" >导出</el-button>
<el-button type="primary" icon="el-icon-search" @click="exportExcelCashier">导出</el-button>
</el-form-item>
</el-form>
</div>
<div class="wit_box" >
<div class="box-gang">
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start" >
<el-tooltip class="item" effect="dark" content="微信收款(元)/ 笔数" placement="top-start" >
<div class="size-bole">{{ wechat}}/{{ wechats}}</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #0DC291"></div>
<div class="nei">微信收款/笔数</div>
<div class="nei">微信收款/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<el-tooltip class="item" effect="dark" content="支付宝收款(元)/ 笔数" placement="top-start">
<div class="size-bole" style="color:#00CAFF;">{{ orderStatistics.alipay?orderStatistics.alipay:0 }}/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #00CAFF"></div>
<div class="nei">支付宝收款/笔数</div>
<div class="nei">支付宝收款/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<el-tooltip class="item" effect="dark" content="云闪付收款(元)/ 笔数" placement="top-start">
<div class="size-bole" style="color:#F44522;" >{{ orderStatistics.balance?orderStatistics.balance:0 }}/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #F44522"></div>
<div class="nei">云闪付收款/笔数</div>
<div class="nei">云闪付收款/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<el-tooltip class="item" effect="dark" content="pos机收款/ 笔数" placement="top-start">
<div class="size-bole" style="color:#FF7E00;" >{{orderStatistics.balanceCount?orderStatistics.balanceCount:0}}/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #FF7E00"></div>
<div class="nei">pos机收款/笔数</div>
<div class="nei">pos机收款/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<el-tooltip class="item" effect="dark" content="现金收款(元)/ 笔数" placement="top-start">
<div class="size-bole" style="color:#0D2ED8;">{{ orderStatistics.cash?orderStatistics.cash:0 }}/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #0D2ED8"></div>
<div class="nei">现金收款/笔数</div>
<div class="nei">现金收款/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<el-tooltip class="item" effect="dark" content="会员消费(元)/ 笔数" placement="top-start">
<div class="size-bole" style="color:#790DD8;">{{orderStatistics.cashcount?orderStatistics.cashcount:0}}/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #790DD8"></div>
<div class="nei">会员消费/笔数</div>
<div class="nei">会员消费/ 笔数</div>
</div>
</div>
<div class="box">
<el-tooltip class="item" effect="dark" content="999999/999999999999" placement="top-start">
<div class="size-bole" style="color:#D80D54;">999999/999999999999</div>
<el-tooltip class="item" effect="dark" content="挂帐收款(元)/ 笔数" placement="top-start">
<div class="size-bole" style="color:#D80D54;">0/0</div>
</el-tooltip>
<div class="size-hui">
<div class="dian" style="background: #D80D54"></div>
<div class="nei">挂帐收款/笔数</div>
<div class="nei">挂帐收款/ 笔数</div>
</div>
</div>
</div>
@ -225,7 +247,7 @@
<span type="danger" v-else>--</span>
</template>
</el-table-column>
<el-table-column prop="userName" align="center" label="用户手机号" > </el-table-column>
<el-table-column prop="userMobile" align="center" label="用户手机号" > </el-table-column>
<el-table-column prop="payType" align="center" label="支付方式">
<template slot-scope="scope">
<span v-if="scope.row.payType=='CASH'">现金</span>
@ -319,15 +341,22 @@ import {
exportExcelTradingApi, getmyDataApi,
getRunningWaterByTissueApi,
getTissueByDataApi,
getTradingPageApi
getTradingPageApi,
transactionList,
getDicts,
getStaffByStorId
} from "@/api/allOrder";
export default {
name: "reconciliation-trading",
data(){
return{
wechat:999999999999999,
wechats:999999999999999,
dict:{},
wechat:0,
wechats:0,
radio1:"油号选错",
loading:false,
dialogVisible:false,
@ -387,8 +416,28 @@ export default {
// this.getList();
this.getDicts();
this.getStaffByStorId();
},
methods:{
async getDicts() {
getDicts("payment_channel").then(response => {
this.dict = response.data;
})
getDicts("payment_type").then(response => {
this.dictPayType = response.data;
})
},
async getStaffByStorId() {
getStaffByStorId().then(response => {
this.staffList = response.data;
})
},
async getDeptList() {
// getRunningWaterByTissueApi(this.addDateRange(this.queryParams)).then( response => {
// this.deptList = response.data.records;
@ -426,22 +475,16 @@ export default {
},
//
async getList(val){
// await this.getDeptList()
let dateRange = []
if (this.beginTime && this.endTime) {
dateRange.push(this.beginTime.toLocaleDateString())
dateRange.push(this.endTime.toLocaleDateString())
}
getTradingPageApi(this.addDateRange(this.queryParams,dateRange)).then( response => {
async getList(val) {
transactionList(this.queryParams).then(response => {
this.orderList = response.data.records;
this.total = response.data.total;
this.isSysDate = false
// this.getDeptList()
this.getOrderStatistics()
})
},
getOrdersInfo(data) {
this.dialogVisible = true;
this.ordersInfo = data

View File

@ -123,7 +123,7 @@ export default {
}
.table-box {
width: 100%;
height: 66vh;
height: 81vh;
overflow: auto;
background: #FFF;
box-sizing: border-box;
@ -133,7 +133,8 @@ export default {
}
.hui_box{
box-sizing: border-box;
padding: 15px;
padding: 10px;
padding-bottom: 0px;
background: #f6f8f9;
}
.top-box{

View File

@ -87,14 +87,14 @@
</div>
<el-dialog center :title="title" :close-on-click-modal="false" :visible.sync="open" width="42%" append-to-body>
<el-form :model="form" label-width="80px" >
<el-form ref="form" :model="form" :rules="rules" label-width="80px" >
<!-- 通知名称 -->
<el-form-item label="通知名称" :required="true">
<el-form-item label="通知名称" prop="notificationName" :required="true">
<el-input v-model="form.notificationName" placeholder="请输入通知名称" ></el-input>
</el-form-item>
<!-- 通知类型 -->
<el-form-item label="通知类型" :required="true">
<el-form-item label="通知类型" prop="notificationType" :required="true">
<el-select v-model="form.notificationType" placeholder="请选择通知类型" style="width: 100%">
<el-option label="到期通知" value="到期通知"></el-option>
<el-option label="库存预警" value="库存预警"></el-option>
@ -104,7 +104,7 @@
</el-form-item>
<!-- 通知模板 -->
<el-form-item label="通知模板" :required="true">
<el-form-item label="通知模板" prop="templateContent" :required="true">
<el-input type="textarea" v-model="form.templateContent" :rows="3" placeholder="请输入通知内容"
:maxlength="200" show-word-limit ></el-input>
<div>
@ -115,7 +115,7 @@
</div>
</el-form-item>
<!-- 接收角色 -->
<el-form-item label="接收角色" :required="true">
<el-form-item label="接收角色" prop="recipientRoles" :required="true">
<el-select v-model="form.recipientRoles" multiple placeholder="请选择角色" style="width: 100%">
<el-option v-for="item in dutyList1" :label="item.dutyName" :value="item.dutyId"></el-option>
</el-select>
@ -125,7 +125,7 @@
<el-switch v-model="form.templateStatus" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
</el-form-item>
<!-- 发送条件 -->
<el-form-item label="发送条件" style="margin-bottom: 10px" :required="true">
<el-form-item label="发送条件" prop="conditions" style="margin-bottom: 10px" :required="true">
<div v-for="(condition, index) in form.conditions" :key="index" class="condition-group"
style="margin-bottom: 10px">
<el-select v-model="condition.field" placeholder="请选择条件" style="width: 35%;margin-right: 10px"
@ -151,7 +151,7 @@
</el-form>
<div style="display: flex; justify-content: center; align-items: center;margin-top: 30px">
<el-button @click="handleReset">取消</el-button>
<el-button type="primary" @click="handleSubmit">保存</el-button>
<el-button type="primary" @click="handleSubmit('form' )">保存</el-button>
</div>
</el-dialog>
</div>
@ -206,6 +206,24 @@ export default {
legalRepresentativeContact: '',
appStatus: '',
},
rules: {
notificationName: [
{ required: true, message: '不能为空', trigger: 'blur' },
],
notificationType:[
{ required: true, message: '不能为空', trigger: 'blur' },
],
templateContent:[
{ required: true, message: '不能为空', trigger: 'blur' },
],
recipientRoles:[
{ required: true, message: '不能为空', trigger: 'blur' },
],
conditions:[
{ required: true, message: '不能为空', trigger: 'blur' },
],
},
roleList: [],
};
},
@ -264,23 +282,12 @@ export default {
// });
// },
handleSubmit() {
handleSubmit(formName) {
this.$refs[formName].validate((valid) =>{
if (valid) {
//
this.open = false
//
console.log('提交设备信息数据:', this.form);
if (this.form.conditions.length === 0 || this.form.conditions[0].field == '') {
this.form.conditions = ''
this.$message({
type: 'info',
message: '请选择发送条件!'
});
return
} else {
this.form.conditions = JSON.stringify(this.form.conditions)
}
this.form.recipientRoles = JSON.stringify(this.form.recipientRoles)
if (this.form.id) {
updateSysNotifyApi(this.form).then(res => {
if (res.code === 200) {
@ -296,6 +303,13 @@ export default {
}
})
}
}
})
},
handleReset() {
this.open = false

View File

@ -66,7 +66,7 @@
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@blur="getStoreAmount">
>
</el-date-picker>
</div>
</div>
@ -277,6 +277,11 @@ export default
props: ["accountId"],
data() {
return {
//
chart:null,
chart1:null,
chart2:null,
amountList: [
// "" ,
// "" ,
@ -345,15 +350,20 @@ export default
dataShows: {},
}
},
watch: {
value1: function (newValue, oldValue) {
this.getDataAnalysis()
this.getStoreAmount()
},
},
created() {
let nowDate = new Date();
let oneWeekAgo = new Date(nowDate.getTime() - 6 * 24 * 60 * 60 * 1000)
this.value1 = [parseTime(oneWeekAgo), parseTime(nowDate)]
this.countValue = [parseTime(oneWeekAgo), parseTime(nowDate)]
this.showValue = [parseTime(oneWeekAgo), parseTime(nowDate)]
this.getStoreTotal()
// this.selectChildByDeptIdApi()
this.getStoreAmount()
this.selectBannerList()
let start = new Date();
start.setHours(0)
@ -365,13 +375,17 @@ export default
this.getHardwareList()
this.getNoticeList()
this.getEmployeList()
//
this.getStoreAmount()
this.getDataAnalysis()
//
this.getDataShow()
this.getDataCount()
},
mounted() {
setTimeout(() => {
this.initChart();
this.initChartPieChart();
}, 2000);
},
@ -407,8 +421,6 @@ export default
} else if (command == '自定义') {
this.disabled = false
}
this.getStoreAmount()
this.getDataAnalysis()
},
goList() {
this.$router.push('/notificationList/index')
@ -608,29 +620,38 @@ export default
}
})
},
//
//
getStoreAmount() {
let data = {
startTime: this.value1[0],
endTime: this.value1[1]
}
getDataBoardNew(data).then(res => {
this.storeAmount = res.data
})
},
//
getDataAnalysis() {
let data = {
startTime: this.value1[0],
endTime: this.value1[1]
}
//
getOilPercentage(data).then(res => {
this.dataAnalysisOilNumberList = res.data
console.log("饼状图一数据",this.dataAnalysisOilNumberList )
})
//
getOilAndGoodsPercentage(data).then(res => {
this.dataAnalysisIfOilList = res.data
console.log("饼状图二数据",this.dataAnalysisIfOilList)
})
//
getOilAndGoodsAndVipAndPoints(data).then(res => {
this.dataAnalysisAllList = res.data
console.log("饼状图三数据",this.dataAnalysisAllList )
})
//
// this.initChart()
Promise.all([
getOilPercentage(data),
getOilAndGoodsPercentage(data),
getOilAndGoodsAndVipAndPoints(data)
]).then(([res1, res2, res3]) => {
this.dataAnalysisOilNumberList = res1.data;
this.dataAnalysisIfOilList = res2.data;
this.dataAnalysisAllList = res3.data;
this.initChartPieChartUpdate();
}).catch(error => {
console.error('Error fetching data:', error);
});
},
//
getDataShow() {
@ -687,7 +708,7 @@ export default
this.queryParams.ancestors = item.ancestors
}
})
this.getStoreAmount()
this.getDataAnalysis()
},
// banner
selectBannerList() {
@ -713,27 +734,13 @@ export default
this.storeTotal = res.data
})
},
getStoreAmount() {
let data = {
startTime: this.value1[0],
endTime: this.value1[1]
}
getDataBoardNew(data).then(res => {
this.storeAmount = res.data
this.getDataAnalysis()
this.initChart()
})
},
countPercentage(upNum, downNum) {
let percentage = 0;
percentage = (upNum / downNum) * 100
return percentage.toFixed(2)
},
initChart() {
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 chart4 = echarts.init(document.getElementById('cccf'))
let dataList = []
@ -801,6 +808,124 @@ export default
showCount.push(a)
})
const option3 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
legend: {
data: this.dataCount.oilNames,
left: 'right'
},
xAxis: [
{
type: 'category',
// data: ['广1', '广2', '广3', '广4', '广5', '广6', '广7'],
data: times,
axisPointer: {
type: 'shadow'
},
axisLabel: {
interval: 0,
// rotate: 30
}
}
],
yAxis: [
{
type: 'value',
name: '金额(元)',
// min: 0,
// max: 10000,
// interval: 2000,
axisLabel: {
formatter: '{value}'
}
}
],
dataset: {
source: count
},
series: countType,
grid: {
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true
}
};
const option4 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
legend: {
data: this.dataShows.oilNames,
left: 'right'
},
xAxis: [
{
type: 'category',
data: showTimes,
axisPointer: {
type: 'shadow'
},
axisLabel: {
interval: 0,
// rotate: 30
}
}
],
yAxis: [
{
type: 'value',
name: '金额(元)',
axisLabel: {
formatter: '{value}'
}
}
],
dataset: {
source: showCount
},
series: showCountType,
grid: {
left: '3%',
right: '3%',
bottom: '5%',
containLabel: true
}
};
chart3.setOption(option3)
chart4.setOption(option4)
},
// ECharts
initChartPieChart(){
this.chart = echarts.init(document.getElementById('ccc'))
this.chart1 = echarts.init(document.getElementById('cccc'))
this.chart2 = echarts.init(document.getElementById('ccct'))
this.initChartPieChartUpdate()
},
// ECharts
initChartPieChartUpdate(){
const option = {
color: [
'#36b713',
@ -922,115 +1047,9 @@ export default
}
]
};
const option3 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
legend: {
data: this.dataCount.oilNames,
left: 'right'
},
xAxis: [
{
type: 'category',
// data: ['广1', '广2', '广3', '广4', '广5', '广6', '广7'],
data: times,
axisPointer: {
type: 'shadow'
},
axisLabel: {
interval: 0,
// rotate: 30
}
}
],
yAxis: [
{
type: 'value',
name: '金额(元)',
// min: 0,
// max: 10000,
// interval: 2000,
axisLabel: {
formatter: '{value}'
}
}
],
dataset: {
source: count
},
series: countType,
grid: {
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true
}
};
const option4 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
legend: {
data: this.dataShows.oilNames,
left: 'right'
},
xAxis: [
{
type: 'category',
data: showTimes,
axisPointer: {
type: 'shadow'
},
axisLabel: {
interval: 0,
// rotate: 30
}
}
],
yAxis: [
{
type: 'value',
name: '金额(元)',
axisLabel: {
formatter: '{value}'
}
}
],
dataset: {
source: showCount
},
series: showCountType,
grid: {
left: '3%',
right: '3%',
bottom: '5%',
containLabel: true
}
};
chart.setOption(option)
chart1.setOption(option1)
chart2.setOption(option2)
chart3.setOption(option3)
chart4.setOption(option4)
if (this.chart) this.chart.setOption(option);
if (this.chart1) this.chart1.setOption(option1);
if (this.chart2) this.chart2.setOption(option2);
},
@ -1252,7 +1271,7 @@ export default
background: #fff;
box-sizing: border-box;
padding: 20px;
margin-top: 20px;
margin-top:15px;
}
.anniu-h {

View File

@ -856,6 +856,7 @@
SELECT
ai.*,
mu.NAME AS userName,
mu.mobile AS userMobile,
mc.merchant_name as merchantName,
mt.account_name as createBy
FROM