This commit is contained in:
DESKTOP-369JRHT\12997 2024-11-09 17:18:02 +08:00
parent c93515f1f2
commit adccfd43fd
19 changed files with 523 additions and 279 deletions

View File

@ -15,11 +15,6 @@
</div>
<div class="right-box">
<div class="d-s">
<!-- <div class="icon-img">-->
<!-- <img src="../../../src/assets/new/t-sousuo.png" alt="">-->
<!-- </div>-->
<!-- 搜索-->
<!-- </div>-->
<search id="header-search" class="right-menu-item"/>
<span style="margin-right: 10px; ">搜索</span>
<div class="d-s" @click="click">

View File

@ -2,7 +2,9 @@
<div v-if="!item.hidden">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)">
<el-menu-item v-if="!isCollapse" :index="resolvePath(onlyOneChild.path)" style="padding-left: 20px;height: 48px" :class="{'submenu-title-noDropdown':!isNest}">
<el-menu-item v-if="!isCollapse" :index="resolvePath(onlyOneChild.path)"
ref="menu"
@open="handleOpen" style="padding-left: 20px;height: 48px" :class="{'submenu-title-noDropdown':!isNest}">
<!-- <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />-->
<span style="margin-left: 30px" v-if="onlyOneChild.meta.title!='系统首页'">{{onlyOneChild.meta.title}}</span>
<div v-else style="background-color: white;width: 200px;height: 100%;position: fixed;left: 0px">
@ -11,7 +13,9 @@
<span>{{onlyOneChild.meta.title}}</span>
</div>
</el-menu-item>
<el-menu-item v-if="isCollapse" :index="resolvePath(onlyOneChild.path)" style="padding-left: 20px;height: 60px" :class="{'submenu-title-noDropdown':!isNest}">
<el-menu-item v-if="isCollapse" :index="resolvePath(onlyOneChild.path)"
ref="menu"
@open="handleOpen" style="padding-left: 20px;height: 60px" :class="{'submenu-title-noDropdown':!isNest}">
<!-- <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />-->
<span style="margin-left: 30px" v-if="onlyOneChild.meta.title!='系统首页'">{{onlyOneChild.meta.title}}</span>
<div v-else style="background-color: white;width: 70px;height: 100%;position: fixed;left: 0px;text-align: center">
@ -23,7 +27,8 @@
</app-link>
</template>
<el-submenu v-else ref="subMenu" :style="{'height':isCollapse ? '60px':''}" :index="resolvePath(item.path)" popper-append-to-body >
<el-submenu v-else ref="subMenu" :style="{'height':isCollapse ? '60px':''}"
@open="handleOpen" :index="resolvePath(item.path)" popper-append-to-body >
<template slot="title">
<div v-if="!isCollapse" >
<!-- <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />-->
@ -174,10 +179,23 @@ export default {
data() {
this.onlyOneChild = null
return {
defaultActive:""
defaultActive:"",
keyIndex: 0
}
},
watch:{
$route () {
//
if (this.$route.path == '/index') {
this.$refs.menu.close(this.keyIndex);
this.$refs.subMenu.close(this.keyIndex);
}
}
},
methods: {
handleOpen(key) {
this.keyIndex = key;
},
hasOneShowingChild(children = [], parent) {
if (!children) {
children = [];

View File

@ -2,11 +2,11 @@
<div :class="{'has-logo':showLogo}"
:style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground},
{width: isCollapse ? '70px !important' : '200px !important' }">
<logo v-if="showLogo" :collapse="isCollapse" />
<!-- <div class="store-info" v-if="storeName">-->
<!-- <div class="name">{{ storeName }}</div>-->
<!-- <div class="role" v-if="role">{{ role }}</div>-->
<!-- </div>-->
<logo v-if="showLogo" :collapse="isCollapse"/>
<!-- <div class="store-info" v-if="storeName">-->
<!-- <div class="name">{{ storeName }}</div>-->
<!-- <div class="role" v-if="role">{{ role }}</div>-->
<!-- </div>-->
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
<div v-if="isCollapse" style="width: 70px;">
<el-menu
@ -19,6 +19,8 @@
:collapse-transition="false"
style="margin-bottom: 80px;height: 60px"
mode="vertical"
ref="menu"
@open="handleOpen"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
@ -41,6 +43,8 @@
:collapse-transition="false"
style="margin-bottom: 80px;height: 48px"
mode="vertical"
ref="menu"
@open="handleOpen"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
@ -56,19 +60,19 @@
</template>
<script>
import { mapGetters, mapState } from "vuex";
import {mapGetters, mapState} from "vuex";
import Logo from "./Logo";
import SidebarItem from "./SidebarItem";
import variables from "@/assets/styles/variables.scss";
export default {
components: { SidebarItem, Logo },
components: {SidebarItem, Logo},
computed: {
...mapState(["settings"]),
...mapGetters(["sidebarRouters", "sidebar"]),
activeMenu() {
const route = this.$route;
const { meta, path } = route;
const {meta, path} = route;
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu;
@ -82,10 +86,10 @@ export default {
return variables;
},
isCollapse() {
if (!this.sidebar.opened){
if (!this.sidebar.opened) {
document.documentElement.style.setProperty('--sidebar-width', '70px');
document.documentElement.style.setProperty('--sidebar-height', '60px');
}else {
} else {
document.documentElement.style.setProperty('--sidebar-width', '200px');
document.documentElement.style.setProperty('--sidebar-height', '48px');
}
@ -109,8 +113,28 @@ export default {
return '商户管理员';
}
}
},
data() {
return {
keyIndex: 0
}
},
watch:{
$route () {
//
if (this.$route.path == '/index') {
this.$refs.menu.close(this.keyIndex);
}
}
},
methods: {
handleOpen(key) {
this.keyIndex = key;
}
}
};
}
</script>
<style lang="scss" scoped>
@ -127,6 +151,7 @@ export default {
border-radius: 8px;
margin: 0px 6px 10px 6px;
cursor: pointer;
.name {
font-weight: bold;
font-size: 14px;
@ -134,6 +159,7 @@ export default {
text-align: center;
overflow: hidden;
}
.role {
font-size: 10px;
margin-top: 3px;

View File

@ -14,14 +14,12 @@
</div>
</div>
</template>
<script>
import RightPanel from '@/components/RightPanel'
import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
import ResizeMixin from './mixin/ResizeHandler'
import { mapState } from 'vuex'
import variables from '@/assets/styles/variables.scss'
export default {
name: 'Layout',
components: {

View File

@ -34,10 +34,6 @@
</span>
</div>
</div>
<div style="height: 100%; width: 30%; display: flex; flex-direction: column; justify-content: space-between;">
<el-form ref="myForm" label-width="100px">
<el-form-item label="盘点单号">
@ -94,77 +90,74 @@
</el-col>
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row>
<el-table ref="tables"
v-loading="loading"
:data="orderList"
:default-sort="defaultSort">
<el-table-column align="center" type="index" label="序号"></el-table-column>
<el-table-column label="油罐名称" align="center" prop="tankName"/>
<el-table-column label="油品-油号" align="center" prop="numberName"/>
<el-table-column label="供应商" align="center" prop="numberName"/>
<div style="height: 71vh;overflow: auto; scrollbar-width: none">
<el-table ref="tables"
v-loading="loading"
:data="orderList"
:default-sort="defaultSort">
<el-table-column align="center" type="index" label="序号"></el-table-column>
<el-table-column label="油罐名称" align="center" prop="tankName"/>
<el-table-column label="油品-油号" align="center" prop="numberName"/>
<el-table-column label="供应商" align="center" prop="numberName"/>
<el-table-column label="上次采购信息" align="center" prop="numberName">
<el-table-column label="采购总价(元)" align="center" prop="theTotalPurchasePrice">
<el-table-column label="上次采购信息" align="center" prop="numberName">
<el-table-column label="采购总价(元)" align="center" prop="theTotalPurchasePrice">
<template slot-scope="scope">
{{scope.row.theTotalPurchasePrice?scope.row.theTotalPurchasePrice:'--'}}
</template>
</el-table-column>
<el-table-column label="采购油量(L)" align="center" prop="theAmountOfOilPurchased"/>
<el-table-column label="采购单价(元)" align="center" prop="purchaseUnitPrice"/>
</el-table-column>
<el-table-column label="销售信息" align="center" prop="numberName">
<el-table-column label="销售总油量(L)" align="center" prop="totalOilVolumeSold">
<template slot-scope="scope">
{{scope.row.totalOilVolumeSold?scope.row.totalOilVolumeSold:'--'}}
</template>
</el-table-column>
<!-- <el-table-column label="销售售出价" align="center" prop="numberName"/>-->
<el-table-column label="销售总金额(元)" align="center" prop="theTotalSalePrice">
<template slot-scope="scope">
{{scope.row.theTotalSalePrice?scope.row.theTotalSalePrice:'--'}}
</template>
</el-table-column>
</el-table-column>
<el-table-column label="当前剩余油量(元/吨)" align="center" prop="currentInventoryVolume">
<template slot-scope="scope">
{{scope.row.theTotalPurchasePrice?scope.row.theTotalPurchasePrice:'--'}}
{{scope.row.totalPrice?scope.row.totalPrice:'--'}}/{{scope.row.theTotalSalePrice?scope.row.theTotalSalePrice:'--'}}
</template>
</el-table-column>
<el-table-column label="采购油量(L)" align="center" prop="theAmountOfOilPurchased"/>
<el-table-column label="采购单价(元)" align="center" prop="purchaseUnitPrice"/>
</el-table-column>
<!-- <el-table-column label="当前剩余油量总价" align="center" prop="totalPrice"/>-->
<el-table-column label="销售信息" align="center" prop="numberName">
<el-table-column label="销售总油量(L)" align="center" prop="totalOilVolumeSold">
<el-table-column label="当前均价(元/L)" align="center" prop="currentAveragePrice" />
<el-table-column label="当前库存(L)" align="center" prop="currentInventoryVolume"/>
<el-table-column label="盘点升数(L)" align="center" prop="inventoryVolume" width="150px">
<template slot-scope="scope">
{{scope.row.totalOilVolumeSold?scope.row.totalOilVolumeSold:'--'}}
<el-input-number :disabled="numberInput" v-model="scope.row.inventoryVolume" @change="change(scope.row)" controls-position="right" :min="0" :max="100000000" :step="1" :precision="2" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<!-- <el-table-column label="销售售出价" align="center" prop="numberName"/>-->
<el-table-column label="销售总金额(元)" align="center" prop="theTotalSalePrice">
<el-table-column label="库存差异(L)" align="center" prop="stockDifference"/>
<el-table-column label="盈亏金额(元)" align="center" prop="profitLossAmount"/>
<el-table-column v-if="state =='await'" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
{{scope.row.theTotalSalePrice?scope.row.theTotalSalePrice:'--'}}
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="orderDel(scope.row)"
>删除</el-button>
</template>
<!-- v-hasPermi="['']"-->
</el-table-column>
</el-table-column>
</el-table>
</div>
<el-table-column label="当前剩余油量(元/吨)" align="center" prop="currentInventoryVolume">
<template slot-scope="scope">
{{scope.row.totalPrice?scope.row.totalPrice:'--'}}/{{scope.row.theTotalSalePrice?scope.row.theTotalSalePrice:'--'}}
</template>
</el-table-column>
<!-- <el-table-column label="当前剩余油量总价" align="center" prop="totalPrice"/>-->
<el-table-column label="当前均价(元/L)" align="center" prop="currentAveragePrice" />
<el-table-column label="当前库存(L)" align="center" prop="currentInventoryVolume"/>
<el-table-column label="盘点升数(L)" align="center" prop="inventoryVolume" width="150px">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.inventoryVolume" @change="change(scope.row)" controls-position="right" :min="0" :max="100000000" :step="1" :precision="2" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column label="库存差异(L)" align="center" prop="stockDifference"/>
<el-table-column label="盈亏金额(元)" align="center" prop="profitLossAmount"/>
<el-table-column v-if="state =='await'" label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="orderDel(scope.row)"
>删除</el-button>
</template>
<!-- v-hasPermi="['']"-->
</el-table-column>
</el-table>
<!-- <pagination-->
<!-- v-show="total>0"-->
<!-- :total="total"-->
<!-- :page.sync="queryParams.page"-->
<!-- :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
</div>
<!-- 添加采购油品-->
@ -918,6 +911,5 @@ export default {
box-sizing: border-box;
padding: 15px;
margin: 10px;
height: 80vh;
}
</style>

View File

@ -2,7 +2,9 @@
<div v-if="!item.hidden">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)">
<el-menu-item v-if="!isCollapse" :index="resolvePath(onlyOneChild.path)" style="padding-left: 20px;" :class="{'submenu-title-noDropdown':!isNest}">
<el-menu-item v-if="!isCollapse" :index="resolvePath(onlyOneChild.path)" style="padding-left: 20px;"
ref="menu"
@open="handleOpen" :class="{'submenu-title-noDropdown':!isNest}">
<!-- <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />-->
<span style="margin-left: 30px" v-if="onlyOneChild.meta.title!='系统首页'">{{onlyOneChild.meta.title}}</span>
<div v-else style="background-color: white;width: 200px;height: 100%;position: fixed;left: 0px">
@ -11,7 +13,9 @@
<span>{{onlyOneChild.meta.title}}</span>
</div>
</el-menu-item>
<el-menu-item v-if="isCollapse" :index="resolvePath(onlyOneChild.path)" style="padding-left: 20px;height: 60px" :class="{'submenu-title-noDropdown':!isNest}">
<el-menu-item v-if="isCollapse" :index="resolvePath(onlyOneChild.path)"
ref="menu"
@open="handleOpen" style="padding-left: 20px;height: 60px" :class="{'submenu-title-noDropdown':!isNest}">
<!-- <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />-->
<span style="margin-left: 30px" v-if="onlyOneChild.meta.title!='系统首页'">{{onlyOneChild.meta.title}}</span>
<div v-else style="background-color: white;width: 70px;height: 100%;position: fixed;left: 0px;text-align: center">
@ -24,7 +28,8 @@
</app-link>
</template>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<el-submenu v-else ref="subMenu"
@open="handleOpen" :index="resolvePath(item.path)" popper-append-to-body>
<template slot="title">
<div v-if="!isCollapse" >
<!-- <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />-->
@ -205,9 +210,23 @@ export default {
},
data() {
this.onlyOneChild = null
return {}
return {
keyIndex: 0
}
},
watch:{
$route () {
//
if (this.$route.path == '/index') {
this.$refs.menu.close(this.keyIndex);
this.$refs.subMenu.close(this.keyIndex);
}
}
},
methods: {
handleOpen(key) {
this.keyIndex = key;
},
hasOneShowingChild(children = [], parent) {
console.log('212')
if (!children) {

View File

@ -1,116 +1,140 @@
<template>
<div :class="{'has-logo':showLogo}" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<logo v-if="showLogo" :collapse="isCollapse" />
<!-- <div class="store-info" v-if="storeName">-->
<!-- <div class="name">{{ storeName }}</div>-->
<!-- <div class="role" v-if="role">{{ role }}</div>-->
<!-- </div>-->
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
<el-menu
<div :class="{'has-logo':showLogo}"
:style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<logo v-if="showLogo" :collapse="isCollapse"/>
<!-- <div class="store-info" v-if="storeName">-->
<!-- <div class="name">{{ storeName }}</div>-->
<!-- <div class="role" v-if="role">{{ role }}</div>-->
<!-- </div>-->
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
<el-menu
:default-active="activeMenu"
:collapse="isCollapse"
:background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground"
:text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor"
:unique-opened="true"
:active-text-color="settings.theme"
:collapse-transition="false"
mode="vertical"
style="margin-bottom: 80px;"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
:key="route.path + index"
:item="route"
:base-path="route.path"
:activeMenu="activeMenu"
:isCollapse="isCollapse"
/>
</el-menu>
</el-scrollbar>
</div>
:default-active="activeMenu"
:collapse="isCollapse"
:background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground"
:text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor"
:unique-opened="true"
:active-text-color="settings.theme"
:collapse-transition="false"
mode="vertical"
style="margin-bottom: 80px;"
ref="menu"
@open="handleOpen"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
:key="route.path + index"
:item="route"
:base-path="route.path"
:activeMenu="activeMenu"
:isCollapse="isCollapse"
/>
</el-menu>
</el-scrollbar>
</div>
</template>
<script>
import { mapGetters, mapState } from "vuex";
import {mapGetters, mapState} from "vuex";
import Logo from "./Logo";
import SidebarItem from "./SidebarItem";
import variables from "@/assets/styles/variables.scss";
export default {
components: { SidebarItem, Logo },
computed: {
...mapState(["settings"]),
...mapGetters(["sidebarRouters", "sidebar"]),
activeMenu() {
const route = this.$route;
const { meta, path } = route;
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu;
}
return path;
},
showLogo() {
return this.$store.state.settings.sidebarLogo;
},
variables() {
return variables;
},
isCollapse() {
if (!this.sidebar.opened){
document.documentElement.style.setProperty('--sidebar-height', '60px');
}else {
document.documentElement.style.setProperty('--sidebar-height', '48px');
}
return !this.sidebar.opened;
},
storeName() {
if (this.$store.getters.merchantName && this.$store.getters.merchantId) {
return this.$store.getters.merchantName;
}
if (this.$store.getters.storeName && this.$store.getters.storeId) {
return this.$store.getters.storeName;
}
return '';
},
role() {
if (this.$store.getters.storeName && this.$store.getters.storeId) {
return '店铺管理员';
}
if (this.$store.getters.merchantName && this.$store.getters.merchantId) {
return '商户管理员';
}
}
components: {SidebarItem, Logo},
computed: {
...mapState(["settings"]),
...mapGetters(["sidebarRouters", "sidebar"]),
activeMenu() {
const route = this.$route;
const {meta, path} = route;
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu;
}
return path;
},
showLogo() {
return this.$store.state.settings.sidebarLogo;
},
variables() {
return variables;
},
isCollapse() {
if (!this.sidebar.opened) {
document.documentElement.style.setProperty('--sidebar-height', '60px');
} else {
document.documentElement.style.setProperty('--sidebar-height', '48px');
}
return !this.sidebar.opened;
},
storeName() {
if (this.$store.getters.merchantName && this.$store.getters.merchantId) {
return this.$store.getters.merchantName;
}
if (this.$store.getters.storeName && this.$store.getters.storeId) {
return this.$store.getters.storeName;
}
return '';
},
role() {
if (this.$store.getters.storeName && this.$store.getters.storeId) {
return '店铺管理员';
}
if (this.$store.getters.merchantName && this.$store.getters.merchantId) {
return '商户管理员';
}
}
},
data() {
return {
keyIndex: 0
}
},
watch: {
$route() {
//
if (this.$route.path == '/index') {
this.$refs.menu.close(this.keyIndex);
}
}
},
methods: {
handleOpen(key) {
this.keyIndex = key;
}
}
};
</script>
<style lang="scss" scoped>
.store-info {
height: 42px;
padding-top: 2px;
.store-info {
height: 42px;
padding-top: 2px;
text-align: center;
background: #00acac;
overflow: hidden;
border: 1px #ffffff solid;
border-radius: 2px;
margin: 0px 6px 10px 6px;
cursor: pointer;
.name {
font-weight: bold;
font-size: 14px;
color: #ffffff;
text-align: center;
background: #00acac;
overflow: hidden;
border: 1px #ffffff solid;
border-radius: 2px;
margin: 0px 6px 10px 6px;
cursor: pointer;
.name {
font-weight: bold;
font-size: 14px;
color: #ffffff;
text-align: center;
overflow: hidden;
}
.role {
font-size: 10px;
margin-top: 3px;
color: #ffffff;
}
}
.role {
font-size: 10px;
margin-top: 3px;
color: #ffffff;
}
}
</style>

View File

@ -558,7 +558,11 @@
border
:data="dutyList">
<el-table-column label="序号" align="center" type="index" width="50"></el-table-column>
<el-table-column label="角色名称" align="center" prop="dutyName" />
<el-table-column label="角色名称" align="center" prop="dutyName" >
<template slot-scope="scope">
{{scope.row.dutyName}}
</template>
</el-table-column>
<!-- <el-table-column label="角色类型" align="center" prop="dutyType" >-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.dutyType=='1'">超级管理员</span>-->
@ -699,12 +703,13 @@
<!-- <el-radio :key=1 :label=1 :value=1>启用</el-radio>-->
<!-- <el-radio :key=0 :label=0 :value=0>禁用</el-radio>-->
<!-- </el-radio-group>-->
<el-switch
v-model="form.accountStatus"
active-color="#13ce66"
inactive-color="#ff4949"
active-value="1"
inactive-value="0">
:active-value="1"
:inactive-value="0">
</el-switch>
</el-form-item>
</el-col>

View File

@ -19,8 +19,11 @@
</div>
<dai_yunyingfenxi-pay-type v-if="radio1 === '支付方式分析'"></dai_yunyingfenxi-pay-type>
<dai_yunyingfenxi-paym v-if="radio1 === '支付通道分析'"></dai_yunyingfenxi-paym>
<div class="hui_box">
<dai_yunyingfenxi-pay-type v-if="radio1 === '支付方式分析'"></dai_yunyingfenxi-pay-type>
<dai_yunyingfenxi-paym v-if="radio1 === '支付通道分析'"></dai_yunyingfenxi-paym>
</div>
</div>
</template>
@ -65,6 +68,10 @@ export default {
box-sizing: border-box;
//padding: 10px;
}
.hui_box{
box-sizing: border-box;
padding: 10px;
}
.app-top{
width: 100%;
//margin-bottom: 20px;

View File

@ -1,7 +1,7 @@
<!-- 收银台订单-->
<template>
<div style="padding-top: 15px; padding-right: 20px; background: #f6f8f9;padding-bottom: 15px">
<div class="card-change2" style="margin-left: 20px; padding-top: 0px;padding-bottom: 5px" shadow="never" >
<div >
<div class="top_box" shadow="never" >
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px" >
<div class="d-s" style="justify-content: space-between">
<div class="d-s">
@ -62,7 +62,7 @@
</div>
</div>
</div>
<div class="card-change" style="min-height: 500px; margin-left: 20px;margin-top: 20px" shadow="never">
<div class="card-change" shadow="never">
<div class="table-box">
<el-table
:data="orderList"
@ -293,23 +293,32 @@ export default {
</script>
<style scoped>
.box-card {
.top_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 0px 20px 4px 20px;
border: none;
box-shadow: none;
}
.table-box{
width: 100%;
height: 60vh;
scrollbar-width: none;
overflow: auto;
}
.center_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 5px auto;
}
.el-form--inline .el-form-item {
margin-right: 20px;
}
.table-box {
width: 100%;
height: 56vh;
overflow: auto;
}
.wrap-boxs {
width: 100%;
display: flex;

View File

@ -41,14 +41,14 @@
</div>
<template >
<div class="rl_box">
<yunyingfenxi-vip v-if="radio1 === '会员分析'"></yunyingfenxi-vip>
<yunyingfenxi-oil v-if="radio1 === '油品分析'"></yunyingfenxi-oil>
<yunyingfenxi-store v-if="radio1 === '便利店分析'"></yunyingfenxi-store>
<yunyingfenxi-int v-if="radio1 === '积分商城分析'"></yunyingfenxi-int>
<dai_yunyingfenxi-pay-type v-if="radio1 === '支付方式分析'"></dai_yunyingfenxi-pay-type>
<dai_yunyingfenxi-paym v-if="radio1 === '支付通道分析'"></dai_yunyingfenxi-paym>
</template>
</div>
</div>
</template>
@ -97,7 +97,6 @@ export default {
.app-center{
width: 100%;
box-sizing: border-box;
//padding: 10px;
}
.app-top{
width: 100%;
@ -115,7 +114,7 @@ export default {
margin-left: 50px;
//height: 40px;
display: flex;
background-color: #FFFFFF;
background-color: #FFFFFF;
align-items: center;
//border: 1px solid #EBEEF5;
}
@ -126,15 +125,16 @@ background-color: #FFFFFF;
font-size: 14px;
color: #999999
}
.fount-box2{
font-size: 14px;
color: #999999
}
.heng-box{
background-color: #FF770F;
width: 100%;
height: 2px;
margin-top: 10px;
}
.rl_box{
width: 100%;
box-sizing: border-box;
padding: 10px;
padding-bottom: 0px;
}
</style>

View File

@ -1,7 +1,7 @@
<!-- 收银台订单-->
<template>
<div style="padding-top: 20px; padding-right: 20px; background: #f6f8f9;padding-bottom: 15px">
<div class="card-change2-1" shadow="never" style="margin-bottom: 25px;">
<div >
<div class="top_box" shadow="never" >
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px">
<div class="d-s" style="justify-content: space-between;width: 100%">
<div class="d-s">
@ -58,7 +58,7 @@
</div>
</div>
</div>
<div class="card-change-1" style="min-height: 500px;" shadow="never">
<div class="center_box" shadow="never">
<div class="table-box">
<el-table
:data="orderList"
@ -289,23 +289,33 @@ export default {
</script>
<style scoped>
.box-card {
.top_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 0px 20px 4px 20px;
border: none;
box-shadow: none;
}
.table-box{
width: 100%;
height: 57vh;
scrollbar-width: none;
overflow: auto;
}
.center_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 5px auto;
}
.el-form--inline .el-form-item {
margin-right: 20px;
}
.table-box {
width: 100%;
height: 52vh;
min-height: 600px;
overflow: auto;
}
.wrap-box {
width: 100%;

View File

@ -1,7 +1,7 @@
<!-- 油品分析 -->
<template>
<div style="padding-top: 20px; padding-right: 20px; background: #f6f8f9;padding-bottom: 15px">
<div class="card-change2-1" shadow="never" style="margin-bottom: 25px;">
<div >
<div class="top_box" shadow="never" >
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px">
<div class="d-s" style="justify-content: space-between;width: 100%">
<div class="d-s">
@ -68,9 +68,7 @@
</div>
</div>
</div>
<div class="card-change-1" style="min-height: 500px;" shadow="never">
<div class="center_box" shadow="never">
<div class="table-box" >
<el-table
:data="orderList"
@ -339,23 +337,32 @@ import {parseTime} from "@/utils/fuint";
</script>
<style scoped>
.box-card{
.top_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 0px 20px 4px 20px;
border: none;
box-shadow: none;
}
.table-box{
width: 100%;
height: 57vh;
scrollbar-width: none;
overflow: auto;
}
.center_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 5px auto;
}
.el-form--inline .el-form-item {
margin-right: 20px;
}
.table-box{
width: 100%;
height: 52vh;
min-height: 600px;
overflow: auto;
}
.wrap-box{
width: 100%;
display: flex;

View File

@ -1,7 +1,7 @@
<!-- 收银台订单-->
<template>
<div style="padding-top: 20px; padding-right: 20px; background: #f6f8f9;padding-bottom: 15px" >
<div class="card-change2-1" shadow="never" style="margin-bottom: 25px;">
<div >
<div class="top_box" shadow="never" >
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px" >
<div class="d-s" style="justify-content: space-between;width: 100%">
<div class="d-s">
@ -59,7 +59,7 @@
</div>
</div>
</div>
<div class="card-change-1" style="min-height: 500px;" shadow="never">
<div class="center_box" shadow="never">
<div class="table-box">
<el-table
:data="orderList"
@ -93,7 +93,7 @@
<el-table-column label="热销商品信息" align="center">
<el-table-column prop="goodsName" label="商品名称" width="100" align="center"></el-table-column>
<el-table-column prop="goodsNum" label="销售数量" width="100" align="center"></el-table-column>
<el-table-column prop="goodsAmount" label="销售金额 (元)" width="150" align="center"></el-table-column>
<el-table-column prop="goodsAmount" label="销售金额 (元)" width="100" align="center"></el-table-column>
<!-- <el-table-column prop="supplierName" label="供应商名称" width="100" align="center"></el-table-column>-->
</el-table-column>
<el-table-column prop="statDate" label="统计日期" width="200" align="center">
@ -312,23 +312,34 @@ import {parseTime} from "@/utils/fuint";
</script>
<style scoped>
.box-card{
.top_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 0px 20px 4px 20px;
border: none;
box-shadow: none;
}
.table-box{
width: 100%;
height: 57vh;
scrollbar-width: none;
overflow: auto;
}
.center_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 5px auto;
}
.el-form--inline .el-form-item {
margin-right: 20px;
}
.table-box{
width: 100%;
height: 52vh;
min-height: 600px;
overflow: auto;
}
.wrap-box{
width: 100%;
display: flex;

View File

@ -1,7 +1,7 @@
<!-- 收银台订单-->
<template>
<div class="" style="padding-top: 20px; padding-right: 20px; background: #f6f8f9;padding-bottom: 15px">
<div class="card-change2-1" style="padding-top: 20px; margin-bottom: 25px;" shadow="never">
<div class="" >
<div class="top_box"shadow="never">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px">
<el-form-item label="" prop="deptId" style="width: 180px">
<el-select
@ -53,7 +53,7 @@
</div>
</div>
</div>
<div class="card-change-1" style="min-height: 500px;" shadow="never">
<div class="center_box" shadow="never">
<div class="table-box">
<el-table
:data="orderList"
@ -236,23 +236,32 @@ import {getFenXiUserbalanceDataApi, getFenXiUserbalanceListApi} from "@/api/fina
</script>
<style scoped>
.box-card{
width: 100%;
margin: 0px 20px 4px 20px;
border: none;
box-shadow: none;
}
.top_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
}
.table-box{
width: 100%;
height: 59vh;
scrollbar-width: none;
overflow: auto;
}
.center_box{
border-radius: 6px;
background: #fff;
box-sizing: border-box;
padding: 10px;
width: 100%;
margin: 5px auto;
}
.el-form--inline .el-form-item {
margin-right: 20px;
}
.table-box{
width: 100%;
height: 52vh;
min-height: 600px;
overflow: auto;
}
.wrap-box{
width: 100%;
display: flex;

View File

@ -57,11 +57,12 @@
<div style="margin-right: 40px">
<el-date-picker
v-model="value1"
type="daterange"
value-format="yyyy-MM-dd"
type="datetimerange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
@change="getStoreAmount">
</el-date-picker>
</div>
@ -162,11 +163,12 @@
<span style="margin-top: -10px;">
<el-date-picker
v-model="value2"
type="daterange"
type="datetimerange"
range-separator="至"
value-format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
:disabled="disabled"
@change="getStoreList()">
</el-date-picker>
@ -232,13 +234,18 @@ export default {
bannerList:{},
storeList:[],
hardwareList:[],
noticeList:[]
noticeList:[],
pickerOptions: {
disabledDate: time => {
return time.getTime() > new Date();
}
}
}
},
created() {
let nowDate = new Date();
let oneWeekAgo = new Date(nowDate.getTime() - 6 * 24 * 60 * 60 * 1000)
this.value1 = [formatDate(oneWeekAgo),formatDate(nowDate)]
this.value1 = [parseTime(oneWeekAgo),parseTime(nowDate)]
this.getStoreTotal()
this.selectChildByDeptIdApi()
// this.getStoreAmount()
@ -304,7 +311,7 @@ export default {
}
this.getStoreList()
},
getStoreList(){
getStoreList(val){
getStoreAmountByTime(this.addDateRange({},this.value2)).then(res => {
this.storeList = res.data
this.initChart()

View File

@ -63,6 +63,7 @@
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
@change="getStoreAmount">
</el-date-picker>
</div>
@ -173,6 +174,7 @@
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
:disabled="disabled"
@change="getStoreList()">
</el-date-picker>
@ -236,7 +238,12 @@ export default {
bannerList:{},
storeList:[],
hardwareList:[],
noticeList:[]
noticeList:[],
pickerOptions: {
disabledDate: time => {
return time.getTime() > new Date();
}
}
}
},
created() {

View File

@ -1732,7 +1732,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
}
Double averagePrice = tradeAmount / tradeTotal;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Double dayTradeAmount = 0.0;
Integer dayTradeTotal = 0;

View File

@ -61,6 +61,8 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -752,7 +754,7 @@ public class StoreServiceImpl extends ServiceImpl<MtStoreMapper, MtStore> implem
for (MtStore mtStore : mtStores) {
storeIds.add(mtStore.getId());
}
List<StoreNumVo> storeNumVos = null;
List<StoreNumVo> storeNumVos = new ArrayList<>();
if (ObjectUtil.isNotEmpty(store.getParams()) && ObjectUtil.isNotEmpty(store.getParams().get("beginTime"))
&& ObjectUtil.isNotEmpty(store.getParams().get("endTime"))){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -770,12 +772,60 @@ public class StoreServiceImpl extends ServiceImpl<MtStoreMapper, MtStore> implem
try {
if (!today.after( dateFormat.parse(store.getParams().get("beginTime").toString()) )){
storeNumVos = baseMapper.selectStoreNum(store, storeIds);
List<String> allDatesBetweenDay = getAllDatesBetweenDay(store.getParams().get("beginTime").toString(), store.getParams().get("endTime").toString());
List<StoreNumVo> storeNumVos1 = baseMapper.selectStoreNum(store, storeIds);
for (String time : allDatesBetweenDay) {
StoreNumVo storeNumVo = new StoreNumVo();
storeNumVo.setTradeTime(time);
storeNumVo.setTradeNum(0);
storeNumVo.setStoreNum(0);
storeNumVo.setTradeAmount(0.0);
for (StoreNumVo numVo : storeNumVos1) {
if (numVo.getTradeTime().equals(time)){
storeNumVo.setTradeNum(numVo.getTradeNum());
storeNumVo.setStoreNum(numVo.getStoreNum());
storeNumVo.setTradeAmount(numVo.getTradeAmount());
}
}
storeNumVos.add(storeNumVo);
}
}else {
if (yearDay.before(dateFormat.parse(store.getParams().get("beginTime").toString()))){
storeNumVos = baseMapper.selectStoreNumByDay(store, storeIds);
List<String> allDatesBetweenMonth = getAllDatesBetweenMonth(store.getParams().get("beginTime").toString(), store.getParams().get("endTime").toString());
List<StoreNumVo> storeNumVos1 = baseMapper.selectStoreNumByDay(store, storeIds);
for (String time : allDatesBetweenMonth) {
StoreNumVo storeNumVo = new StoreNumVo();
storeNumVo.setTradeTime(time);
storeNumVo.setTradeNum(0);
storeNumVo.setStoreNum(0);
storeNumVo.setTradeAmount(0.0);
for (StoreNumVo numVo : storeNumVos1) {
if (numVo.getTradeTime().equals(time)){
storeNumVo.setTradeNum(numVo.getTradeNum());
storeNumVo.setStoreNum(numVo.getStoreNum());
storeNumVo.setTradeAmount(numVo.getTradeAmount());
}
}
storeNumVos.add(storeNumVo);
}
}else {
storeNumVos = baseMapper.selectStoreNumByMonth(store, storeIds);
List<String> allDatesBetweenYear = getAllDatesBetweenYear(store.getParams().get("beginTime").toString(), store.getParams().get("endTime").toString());
List<StoreNumVo> storeNumVos1 = baseMapper.selectStoreNumByMonth(store, storeIds);
for (String time : allDatesBetweenYear) {
StoreNumVo storeNumVo = new StoreNumVo();
storeNumVo.setTradeTime(time);
storeNumVo.setTradeNum(0);
storeNumVo.setStoreNum(0);
storeNumVo.setTradeAmount(0.0);
for (StoreNumVo numVo : storeNumVos1) {
if (numVo.getTradeTime().equals(time)){
storeNumVo.setTradeNum(numVo.getTradeNum());
storeNumVo.setStoreNum(numVo.getStoreNum());
storeNumVo.setTradeAmount(numVo.getTradeAmount());
}
}
storeNumVos.add(storeNumVo);
}
}
}
}catch (Exception e){
@ -786,6 +836,56 @@ public class StoreServiceImpl extends ServiceImpl<MtStoreMapper, MtStore> implem
return storeNumVos;
}
public List<String> getAllDatesBetweenYear(String startTime, String endTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM");
LocalDate startDate = LocalDate.parse(startTime, formatter);
LocalDate endDate = LocalDate.parse(endTime, formatter);
List<String> dateList = new ArrayList<>();
while (!startDate.isAfter(endDate)) {
dateList.add(startDate.format(formatter1));
startDate = startDate.plusMonths(1);
}
return dateList;
}
public List<String> getAllDatesBetweenDay(String startTime, String endTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("HH:mm");
LocalDateTime startDate = LocalDateTime.parse(startTime, formatter);
LocalDateTime endDate = LocalDateTime.parse(endTime, formatter);
List<String> dateList = new ArrayList<>();
while (!startDate.isAfter(endDate)) {
dateList.add(startDate.format(formatter1));
startDate = startDate.plusHours(1);
}
return dateList;
}
public List<String> getAllDatesBetweenMonth(String startTime, String endTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime startDate = LocalDateTime.parse(startTime, formatter);
LocalDateTime endDate = LocalDateTime.parse(endTime, formatter);
List<String> dateList = new ArrayList<>();
while (!startDate.isAfter(endDate)) {
dateList.add(startDate.format(formatter1));
startDate = startDate.plusDays(1);
}
return dateList;
}
@Override
public List<MtStore> getStoreByDeptId(Integer deptId) {
QueryWrapper queryWrapper = new QueryWrapper<>();