浏览代码

油站管理

XF--LRQYEJOKYDS\Administrator 4 年之前
父节点
当前提交
30c6adfa11

+ 68 - 0
Yijia-SaaS/yijia-ui/src/api/dataSource/saleReport.js

@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+// 查询今日销售总金额,总升数
+export function listSum(query) {
+  return request({
+    url: '/station/order/selectDaySources',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listOilType(query) {
+  return request({
+    url: '/station/order/selectOilTypeSources',
+    method: 'get',
+    params: query
+  })
+}
+export function listViewData(query) {
+  return request({
+    url: '/station/order/selectOverViewData',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单支付详细
+export function getOrder(orderId) {
+  return request({
+    url: '/station/order/' + orderId,
+    method: 'get'
+  })
+}
+
+// 新增订单支付
+export function addOrder(data) {
+  return request({
+    url: '/station/order',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单支付
+export function updateOrder(data) {
+  return request({
+    url: '/station/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单支付
+export function delOrder(orderId) {
+  return request({
+    url: '/station/order/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出订单支付
+export function exportOrder(query) {
+  return request({
+    url: '/station/order/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
Yijia-SaaS/yijia-ui/src/api/station/summary.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询【请填写功能名称】列表
+export function listSummary(query) {
+  return request({
+    url: '/station/summary/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【请填写功能名称】详细
+export function getSummary(id) {
+  return request({
+    url: '/station/summary/' + id,
+    method: 'get'
+  })
+}
+
+// 新增【请填写功能名称】
+export function addSummary(data) {
+  return request({
+    url: '/station/summary',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改【请填写功能名称】
+export function updateSummary(data) {
+  return request({
+    url: '/station/summary',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除【请填写功能名称】
+export function delSummary(id) {
+  return request({
+    url: '/station/summary/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出【请填写功能名称】
+export function exportSummary(query) {
+  return request({
+    url: '/station/summary/export',
+    method: 'get',
+    params: query
+  })
+}

二进制
Yijia-SaaS/yijia-ui/src/assets/image/bj-02.png


二进制
Yijia-SaaS/yijia-ui/src/assets/image/bj-1.png


二进制
Yijia-SaaS/yijia-ui/src/assets/image/bj-3.png


二进制
Yijia-SaaS/yijia-ui/src/assets/image/bj-4.png


二进制
Yijia-SaaS/yijia-ui/src/assets/image/hz-xiaoliang.png


+ 93 - 93
Yijia-SaaS/yijia-ui/src/layout/components/Sidebar/SidebarItem.vue

@@ -1,93 +1,93 @@
-<template>
-  <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)">
-        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
-          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
-        </el-menu-item>
-      </app-link>
-    </template>
-
-    <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
-      <template slot="title">
-        <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
-      </template>
-      <sidebar-item
-        v-for="child in item.children"
-        :key="child.path"
-        :is-nest="true"
-        :item="child"
-        :base-path="resolvePath(child.path)"
-        class="nest-menu"
-      />
-    </el-submenu>
-  </div>
-</template>
-
-<script>
-import path from 'path'
-import { isExternal } from '@/utils/validate'
-import Item from './Item'
-import AppLink from './Link'
-import FixiOSBug from './FixiOSBug'
-
-export default {
-  name: 'SidebarItem',
-  components: { Item, AppLink },
-  mixins: [FixiOSBug],
-  props: {
-    // route object
-    item: {
-      type: Object,
-      required: true
-    },
-    isNest: {
-      type: Boolean,
-      default: false
-    },
-    basePath: {
-      type: String,
-      default: ''
-    }
-  },
-  data() {
-    this.onlyOneChild = null
-    return {}
-  },
-  methods: {
-    hasOneShowingChild(children = [], parent) {
-      const showingChildren = children.filter(item => {
-        if (item.hidden) {
-          return false
-        } else {
-          // Temp set(will be used if only has one showing child)
-          this.onlyOneChild = item
-          return true
-        }
-      })
-
-      // When there is only one child router, the child router is displayed by default
-      if (showingChildren.length === 1) {
-        return true
-      }
-
-      // Show parent if there are no child router to display
-      if (showingChildren.length === 0) {
-        this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
-        return true
-      }
-
-      return false
-    },
-    resolvePath(routePath) {
-      if (isExternal(routePath)) {
-        return routePath
-      }
-      if (isExternal(this.basePath)) {
-        return this.basePath
-      }
-      return path.resolve(this.basePath, routePath)
-    }
-  }
-}
-</script>
+<template>
+  <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)">
+        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
+          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
+        </el-menu-item>
+      </app-link>
+    </template>
+
+    <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
+      <template slot="title">
+        <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
+      </template>
+      <sidebar-item
+        v-for="child in item.children"
+        :key="child.path"
+        :is-nest="true"
+        :item="child"
+        :base-path="resolvePath(child.path)"
+        class="nest-menu"
+      />
+    </el-submenu>
+  </div>
+</template>
+
+<script>
+import path from 'path'
+import { isExternal } from '@/utils/validate'
+import Item from './Item'
+import AppLink from './Link'
+import FixiOSBug from './FixiOSBug'
+
+export default {
+  name: 'SidebarItem',
+  components: { Item, AppLink },
+  mixins: [FixiOSBug],
+  props: {
+    // route object
+    item: {
+      type: Object,
+      required: true
+    },
+    isNest: {
+      type: Boolean,
+      default: false
+    },
+    basePath: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    this.onlyOneChild = null
+    return {}
+  },
+  methods: {
+    hasOneShowingChild(children = [], parent) {
+      const showingChildren = children.filter(item => {
+        if (item.hidden) {
+          return false
+        } else {
+          // Temp set(will be used if only has one showing child)
+          this.onlyOneChild = item
+          return true
+        }
+      })
+
+      // When there is only one child router, the child router is displayed by default
+      if (showingChildren.length === 1) {
+        return true
+      }
+
+      // Show parent if there are no child router to display
+      if (showingChildren.length === 0) {
+        this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
+        return true
+      }
+
+      return false
+    },
+    resolvePath(routePath) {
+      if (isExternal(routePath)) {
+        return routePath
+      }
+      if (isExternal(this.basePath)) {
+        return this.basePath
+      }
+      return path.resolve(this.basePath, routePath)
+    }
+  }
+}
+</script>

+ 59 - 57
Yijia-SaaS/yijia-ui/src/layout/components/Sidebar/index.vue

@@ -1,57 +1,59 @@
-<template>
-    <div :class="{'has-logo':showLogo}">
-        <logo v-if="showLogo" :collapse="isCollapse" />
-        <el-scrollbar wrap-class="scrollbar-wrapper">
-            <el-menu
-                :default-active="activeMenu"
-                :collapse="isCollapse"
-                :background-color="variables.menuBg"
-                :text-color="variables.menuText"
-                :unique-opened="true"
-                :active-text-color="settings.theme"
-                :collapse-transition="false"
-                mode="vertical"
-            >
-                <sidebar-item
-                    v-for="(route, index) in permission_routes"
-                    :key="route.path  + index"
-                    :item="route"
-                    :base-path="route.path"
-                />
-            </el-menu>
-        </el-scrollbar>
-    </div>
-</template>
-
-<script>
-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(["permission_routes", "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() {
-            return !this.sidebar.opened;
-        }
-    }
-};
-</script>
+<template>
+    <div :class="{'has-logo':showLogo}">
+        <logo v-if="showLogo" :collapse="isCollapse" />
+        <el-scrollbar wrap-class="scrollbar-wrapper">
+            <el-menu
+                :default-active="activeMenu"
+                :collapse="isCollapse"
+                :background-color="variables.menuBg"
+                :text-color="variables.menuText"
+                :unique-opened="true"
+                :active-text-color="settings.theme"
+                :collapse-transition="false"
+                mode="vertical"
+            >
+                <sidebar-item
+                  v-for="(route, index) in sidebarRouters"
+                    :key="route.path  + index"
+                    :item="route"
+                    :base-path="route.path"
+                />
+            </el-menu>
+        </el-scrollbar>
+    </div>
+</template>
+
+<script>
+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(["permission_routes", "sidebar"]),
+       ...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() {
+            return !this.sidebar.opened;
+        }
+    }
+};
+</script>

+ 16 - 15
Yijia-SaaS/yijia-ui/src/store/getters.js

@@ -1,15 +1,16 @@
-const getters = {
-  sidebar: state => state.app.sidebar,
-  size: state => state.app.size,
-  device: state => state.app.device,
-  visitedViews: state => state.tagsView.visitedViews,
-  cachedViews: state => state.tagsView.cachedViews,
-  token: state => state.user.token,
-  avatar: state => state.user.avatar,
-  name: state => state.user.name,
-  introduction: state => state.user.introduction,
-  roles: state => state.user.roles,
-  permissions: state => state.user.permissions,
-  permission_routes: state => state.permission.routes
-}
-export default getters
+const getters = {
+  sidebar: state => state.app.sidebar,
+  size: state => state.app.size,
+  device: state => state.app.device,
+  visitedViews: state => state.tagsView.visitedViews,
+  cachedViews: state => state.tagsView.cachedViews,
+  token: state => state.user.token,
+  avatar: state => state.user.avatar,
+  name: state => state.user.name,
+  introduction: state => state.user.introduction,
+  roles: state => state.user.roles,
+  permissions: state => state.user.permissions,
+  permission_routes: state => state.permission.routes,
+  sidebarRouters:state => state.permission.sidebarRouters
+}
+export default getters

+ 61 - 54
Yijia-SaaS/yijia-ui/src/store/modules/permission.js

@@ -1,54 +1,61 @@
-import { constantRoutes } from '@/router'
-import { getRouters } from '@/api/menu'
-import Layout from '@/layout/index'
-
-const permission = {
-  state: {
-    routes: [],
-    addRoutes: []
-  },
-  mutations: {
-    SET_ROUTES: (state, routes) => {
-      state.addRoutes = routes
-      state.routes = constantRoutes.concat(routes)
-    }
-  },
-  actions: {
-    // 生成路由
-    GenerateRoutes({ commit }) {
-      return new Promise(resolve => {
-        // 向后端请求路由数据
-        getRouters().then(res => {
-          const accessedRoutes = filterAsyncRouter(res.data)
-          accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
-          commit('SET_ROUTES', accessedRoutes)
-          resolve(accessedRoutes)
-        })
-      })
-    }
-  }
-}
-
-// 遍历后台传来的路由字符串,转换为组件对象
-function filterAsyncRouter(asyncRouterMap) {
-  return asyncRouterMap.filter(route => {
-    if (route.component) {
-      // Layout组件特殊处理
-      if (route.component === 'Layout') {
-        route.component = Layout
-      } else {
-        route.component = loadView(route.component)
-      }
-    }
-    if (route.children != null && route.children && route.children.length) {
-      route.children = filterAsyncRouter(route.children)
-    }
-    return true
-  })
-}
-
-export const loadView = (view) => { // 路由懒加载
-  return (resolve) =>  require([`@/views/${view}`], resolve)
-}
-
-export default permission
+import { constantRoutes } from '@/router'
+import { getRouters } from '@/api/menu'
+import Layout from '@/layout/index'
+
+const permission = {
+  state: {
+    routes: [],
+    addRoutes: [],
+    sidebarRouters: []
+  },
+  mutations: {
+    SET_ROUTES: (state, routes) => {
+      state.addRoutes = routes
+      state.routes = constantRoutes.concat(routes)
+    },
+    SET_SIDEBAR_ROUTERS: (state, routers) => {
+      state.sidebarRouters = routers
+    },
+  },
+  actions: {
+    // 生成路由
+    GenerateRoutes({ commit }) {
+      return new Promise(resolve => {
+        // 向后端请求路由数据
+        getRouters().then(res => {
+          const sdata = JSON.parse(JSON.stringify(res.data))
+          const sidebarRoutes = filterAsyncRouter(sdata)
+          const accessedRoutes = filterAsyncRouter(res.data)
+          accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
+          commit('SET_ROUTES', accessedRoutes)
+          commit('SET_SIDEBAR_ROUTERS', sidebarRoutes)
+          resolve(accessedRoutes)
+        })
+      })
+    }
+  }
+}
+
+// 遍历后台传来的路由字符串,转换为组件对象
+function filterAsyncRouter(asyncRouterMap) {
+  return asyncRouterMap.filter(route => {
+    if (route.component) {
+      // Layout组件特殊处理
+      if (route.component === 'Layout') {
+        route.component = Layout
+      } else {
+        route.component = loadView(route.component)
+      }
+    }
+    if (route.children != null && route.children && route.children.length) {
+      route.children = filterAsyncRouter(route.children)
+    }
+    return true
+  })
+}
+
+export const loadView = (view) => { // 路由懒加载
+  return (resolve) =>  require([`@/views/${view}`], resolve)
+}
+
+export default permission

+ 82 - 81
Yijia-SaaS/yijia-ui/src/utils/request.js

@@ -1,81 +1,82 @@
-import axios from 'axios'
-import { Notification, MessageBox, Message } from 'element-ui'
-import store from '@/store'
-import { getToken } from '@/utils/auth'
-import errorCode from '@/utils/errorCode'
-
-axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
-// 创建axios实例
-const service = axios.create({
-  // axios中请求配置有baseURL选项,表示请求URL公共部分
-  baseURL: process.env.VUE_APP_BASE_API,
-  // 超时
-  timeout: 10000
-})
-// request拦截器
-service.interceptors.request.use(config => {
-  // 是否需要设置 token
-  const isToken = (config.headers || {}).isToken === false
-  if (getToken() && !isToken) {
-    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
-  }
-  return config
-}, error => {
-    console.log(error)
-    Promise.reject(error)
-})
-
-// 响应拦截器
-service.interceptors.response.use(res => {
-    // 未设置状态码则默认成功状态
-    const code = res.data.code || 200;
-    // 获取错误信息
-    const msg = errorCode[code] || res.data.msg || errorCode['default']
-    if (code === 401) {
-      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
-          confirmButtonText: '重新登录',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }
-      ).then(() => {
-        store.dispatch('LogOut').then(() => {
-          location.href = '/index';
-        })
-      })
-    } else if (code === 500) {
-      Message({
-        message: msg,
-        type: 'error'
-      })
-      return Promise.reject(new Error(msg))
-    } else if (code !== 200) {
-      Notification.error({
-        title: msg
-      })
-      return Promise.reject('error')
-    } else {
-      return res.data
-    }
-  },
-  error => {
-    console.log('err' + error)
-    let { message } = error;
-    if (message == "Network Error") {
-      message = "后端接口连接异常";
-    }
-    else if (message.includes("timeout")) {
-      message = "系统接口请求超时";
-    }
-    else if (message.includes("Request failed with status code")) {
-      message = "系统接口" + message.substr(message.length - 3) + "异常";
-    }
-    Message({
-      message: message,
-      type: 'error',
-      duration: 5 * 1000
-    })
-    return Promise.reject(error)
-  }
-)
-
-export default service
+import axios from 'axios'
+import { Notification, MessageBox, Message } from 'element-ui'
+import store from '@/store'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+// 创建axios实例
+const service = axios.create({
+  // axios中请求配置有baseURL选项,表示请求URL公共部分
+  baseURL: process.env.VUE_APP_BASE_API,
+  //baseURL: 'http://www.huiyj.com:9000/prod-api',
+  // 超时
+  timeout: 10000
+})
+// request拦截器
+service.interceptors.request.use(config => {
+  // 是否需要设置 token
+  const isToken = (config.headers || {}).isToken === false
+  if (getToken() && !isToken) {
+    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+  }
+  return config
+}, error => {
+    console.log(error)
+    Promise.reject(error)
+})
+
+// 响应拦截器
+service.interceptors.response.use(res => {
+    // 未设置状态码则默认成功状态
+    const code = res.data.code || 200;
+    // 获取错误信息
+    const msg = errorCode[code] || res.data.msg || errorCode['default']
+    if (code === 401) {
+      MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+          confirmButtonText: '重新登录',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }
+      ).then(() => {
+        store.dispatch('LogOut').then(() => {
+          location.href = '/index';
+        })
+      })
+    } else if (code === 500) {
+      Message({
+        message: msg,
+        type: 'error'
+      })
+      return Promise.reject(new Error(msg))
+    } else if (code !== 200) {
+      Notification.error({
+        title: msg
+      })
+      return Promise.reject('error')
+    } else {
+      return res.data
+    }
+  },
+  error => {
+    console.log('err' + error)
+    let { message } = error;
+    if (message == "Network Error") {
+      message = "后端接口连接异常";
+    }
+    else if (message.includes("timeout")) {
+      message = "系统接口请求超时";
+    }
+    else if (message.includes("Request failed with status code")) {
+      message = "系统接口" + message.substr(message.length - 3) + "异常";
+    }
+    Message({
+      message: message,
+      type: 'error',
+      duration: 5 * 1000
+    })
+    return Promise.reject(error)
+  }
+)
+
+export default service

+ 181 - 181
Yijia-SaaS/yijia-ui/src/views/dashboard/PanelGroup.vue

@@ -1,181 +1,181 @@
-<template>
-  <el-row :gutter="40" class="panel-group">
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
-        <div class="card-panel-icon-wrapper icon-people">
-          <svg-icon icon-class="peoples" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            访客
-          </div>
-          <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('messages')">
-        <div class="card-panel-icon-wrapper icon-message">
-          <svg-icon icon-class="message" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            消息
-          </div>
-          <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('purchases')">
-        <div class="card-panel-icon-wrapper icon-money">
-          <svg-icon icon-class="money" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            金额
-          </div>
-          <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
-        <div class="card-panel-icon-wrapper icon-shopping">
-          <svg-icon icon-class="shopping" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            订单
-          </div>
-          <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" />
-        </div>
-      </div>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import CountTo from 'vue-count-to'
-
-export default {
-  components: {
-    CountTo
-  },
-  methods: {
-    handleSetLineChartData(type) {
-      this.$emit('handleSetLineChartData', type)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.panel-group {
-  margin-top: 18px;
-
-  .card-panel-col {
-    margin-bottom: 32px;
-  }
-
-  .card-panel {
-    height: 108px;
-    cursor: pointer;
-    font-size: 12px;
-    position: relative;
-    overflow: hidden;
-    color: #666;
-    background: #fff;
-    box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
-    border-color: rgba(0, 0, 0, .05);
-
-    &:hover {
-      .card-panel-icon-wrapper {
-        color: #fff;
-      }
-
-      .icon-people {
-        background: #40c9c6;
-      }
-
-      .icon-message {
-        background: #36a3f7;
-      }
-
-      .icon-money {
-        background: #f4516c;
-      }
-
-      .icon-shopping {
-        background: #34bfa3
-      }
-    }
-
-    .icon-people {
-      color: #40c9c6;
-    }
-
-    .icon-message {
-      color: #36a3f7;
-    }
-
-    .icon-money {
-      color: #f4516c;
-    }
-
-    .icon-shopping {
-      color: #34bfa3
-    }
-
-    .card-panel-icon-wrapper {
-      float: left;
-      margin: 14px 0 0 14px;
-      padding: 16px;
-      transition: all 0.38s ease-out;
-      border-radius: 6px;
-    }
-
-    .card-panel-icon {
-      float: left;
-      font-size: 48px;
-    }
-
-    .card-panel-description {
-      float: right;
-      font-weight: bold;
-      margin: 26px;
-      margin-left: 0px;
-
-      .card-panel-text {
-        line-height: 18px;
-        color: rgba(0, 0, 0, 0.45);
-        font-size: 16px;
-        margin-bottom: 12px;
-      }
-
-      .card-panel-num {
-        font-size: 20px;
-      }
-    }
-  }
-}
-
-@media (max-width:550px) {
-  .card-panel-description {
-    display: none;
-  }
-
-  .card-panel-icon-wrapper {
-    float: none !important;
-    width: 100%;
-    height: 100%;
-    margin: 0 !important;
-
-    .svg-icon {
-      display: block;
-      margin: 14px auto !important;
-      float: none !important;
-    }
-  }
-}
-</style>
+<template>
+  <el-row :gutter="40" class="panel-group">
+    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
+      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
+        <div class="card-panel-icon-wrapper icon-people">
+          <svg-icon icon-class="peoples" class-name="card-panel-icon" />
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            访客
+          </div>
+          <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" />
+        </div>
+      </div>
+    </el-col>
+    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
+      <div class="card-panel" @click="handleSetLineChartData('messages')">
+        <div class="card-panel-icon-wrapper icon-message">
+          <svg-icon icon-class="message" class-name="card-panel-icon" />
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            消息
+          </div>
+          <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" />
+        </div>
+      </div>
+    </el-col>
+    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
+      <div class="card-panel" @click="handleSetLineChartData('purchases')">
+        <div class="card-panel-icon-wrapper icon-money">
+          <svg-icon icon-class="money" class-name="card-panel-icon" />
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            金额
+          </div>
+          <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" />
+        </div>
+      </div>
+    </el-col>
+    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
+      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
+        <div class="card-panel-icon-wrapper icon-shopping">
+          <svg-icon icon-class="shopping" class-name="card-panel-icon" />
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            订单
+          </div>
+          <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" />
+        </div>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+import CountTo from 'vue-count-to'
+
+export default {
+  components: {
+    CountTo
+  },
+  methods: {
+    handleSetLineChartData(type) {
+      this.$emit('handleSetLineChartData', type)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.panel-group {
+  margin-top: 18px;
+
+  .card-panel-col {
+    margin-bottom: 32px;
+  }
+
+  .card-panel {
+    height: 108px;
+    cursor: pointer;
+    font-size: 12px;
+    position: relative;
+    overflow: hidden;
+    color: #666;
+    background: #fff;
+    box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
+    border-color: rgba(0, 0, 0, .05);
+
+    &:hover {
+      .card-panel-icon-wrapper {
+        color: #fff;
+      }
+
+      .icon-people {
+        background: #40c9c6;
+      }
+
+      .icon-message {
+        background: #36a3f7;
+      }
+
+      .icon-money {
+        background: #f4516c;
+      }
+
+      .icon-shopping {
+        background: #34bfa3
+      }
+    }
+
+    .icon-people {
+      color: #40c9c6;
+    }
+
+    .icon-message {
+      color: #36a3f7;
+    }
+
+    .icon-money {
+      color: #f4516c;
+    }
+
+    .icon-shopping {
+      color: #34bfa3
+    }
+
+    .card-panel-icon-wrapper {
+      float: left;
+      margin: 14px 0 0 14px;
+      padding: 16px;
+      transition: all 0.38s ease-out;
+      border-radius: 6px;
+    }
+
+    .card-panel-icon {
+      float: left;
+      font-size: 48px;
+    }
+
+    .card-panel-description {
+      float: right;
+      font-weight: bold;
+      margin: 26px;
+      margin-left: 0px;
+
+      .card-panel-text {
+        line-height: 18px;
+        color: rgba(0, 0, 0, 0.45);
+        font-size: 16px;
+        margin-bottom: 12px;
+      }
+
+      .card-panel-num {
+        font-size: 20px;
+      }
+    }
+  }
+}
+
+@media (max-width:550px) {
+  .card-panel-description {
+    display: none;
+  }
+
+  .card-panel-icon-wrapper {
+    float: none !important;
+    width: 100%;
+    height: 100%;
+    margin: 0 !important;
+
+    .svg-icon {
+      display: block;
+      margin: 14px auto !important;
+      float: none !important;
+    }
+  }
+}
+</style>

+ 435 - 0
Yijia-SaaS/yijia-ui/src/views/dataSource/saleReport.vue

@@ -0,0 +1,435 @@
+<template>
+  <div>
+    <div>
+      <span  style="color:#ff9955;font-size:25px;" >|</span><span style="font-size:20px;">数据概览</span>
+      <el-form :model="queryParams" style="margin-left: 20px;" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+        <el-form-item>
+          <el-button  size="mini" @click="dayDataSource">今天</el-button>
+          <el-button  size="mini" @click="yesDataSource">昨天</el-button>
+          <el-button  size="mini">本周</el-button>
+          <el-button  size="mini" @click="monthDataSource">本月</el-button>
+        </el-form-item>
+      </el-form>
+      <el-row :gutter="10" class="panel-group">
+        <el-col :xs="12" :sm="12" :lg="6" >
+          <div class="flex xiaoliang">
+            <div style="line-height: 62px;font-size: 44px;">
+              {{ form.zongliters }}L
+            </div>
+            <div style="font-size: 28px;">
+              总销量
+            </div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="6">
+          <div  class="flex xiaoe">
+            <div style="line-height: 62px;font-size: 44px;">
+              {{ form.zongAmt }}元
+            </div>
+            <div style="font-size: 28px;">
+              总金额
+            </div>
+          </div>
+        </el-col>
+        <el-col   :xs="12" :sm="12" :lg="6">
+          <div class="flex qiyou">
+            <div style="font-size: 28px;">  汽油  </div>
+            <div class="flex-qy">
+              <div class="flex-qy-sx"  style="margin-right: 25px;">
+                <div style="font-size: 36px;" >
+                  {{ form.qyliters }}L
+                </div>
+                <div style="font-size: 22px;">升数</div>
+              </div>
+              <div class="flex-qy-sx"  style="margin-left: 25px;">
+                <div style="font-size: 36px;">
+                  {{ form.qyamt }}元
+                </div>
+                <div style="font-size: 22px;">金额</div>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col  :xs="12" :sm="12" :lg="6">
+          <div class="flex chaiyou">
+            <div style="font-size: 28px;">  柴油  </div>
+            <div class="flex-qy">
+              <div class="flex-qy-sx" style="margin-right: 25px;">
+                <div style="font-size: 36px;">{{ form.cyliters }}L</div>
+                <div style="font-size: 22px;">升数</div>
+              </div>
+              <div class="flex-qy-sx" style="margin-left: 25px;">
+                <div style="font-size: 36px;">{{ form.cyamt }}元</div>
+                <div style="font-size: 22px;">金额</div>
+              </div>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div style="width:100%; height: 181px;background: #FFFFFF;">
+      <span  style="color:#ff9955;font-size:25px;" >|</span><span style="font-size:20px;">收入概览</span>
+      <el-row style="display:flex; align-items:center;justify-content:center;width:100%; height: 100%;">
+        <el-col :xs="12" :sm="12" :lg="3" >
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.wxAmt }}</span>
+            </div>
+            <div>微信(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span class="sr-font">{{ form.zfbAmt }}</span></div>
+            <div>支付宝(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.xjAmt }}</span>
+            </div>
+            <div >现金(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.posAmt }}</span>
+            </div>
+            <div >POS(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.didiAppAmt }}</span>
+            </div>
+            <div>滴滴APP(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.tyAppAmt }}</span>
+            </div>
+            <div>团油APP(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span class="sr-font">{{ form.otherAmt }}</span>
+            </div>
+            <div>其他(元)</div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+    <div style="width:100%; height: 181px;">
+      <span  style="color:#ff9955;font-size:25px;" >|</span><span style="font-size:20px;">今日数据</span>
+      <el-row style="display:flex; align-items:center;justify-content:center;width:100%; height: 100%;">
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span>268</span>
+            </div>
+            <div>充值金额(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div>
+              <span>26800</span>
+            </div>
+            <div>会员消费金额(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span>26800</span></div>
+            <div>会员余额(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span>1</span></div>
+            <div>新增会员(人)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span>1</span></div>
+            <div>会员总数(人)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span>1</span></div>
+            <div>营销费用(元)</div>
+          </div>
+        </el-col>
+        <el-col :xs="12" :sm="12" :lg="3">
+          <div class="flex-sr">
+            <div><span>1</span></div>
+            <div>营销产出比(%)</div>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+<!--    <span  style="color:#ff9955;font-size:25px;" >|</span><span style="font-size:20px;">数据环比</span>-->
+<!--    <el-row>-->
+<!--      <el-col :span="6"><div class="grid-content bg-purple">汽油升数环比</div></el-col>-->
+<!--      <el-col :span="6"><div class="grid-content bg-purple-light">柴油升数环比</div></el-col>-->
+<!--      <el-col :span="6"><div class="grid-content bg-purple">总升数环比</div></el-col>-->
+<!--      <el-col :span="6"><div class="grid-content bg-purple-light">总金额环比</div></el-col>-->
+<!--    </el-row>-->
+  </div>
+</template>
+
+<script>
+  import { listSum,listOilType,listViewData } from "@/api/dataSource/saleReport";
+
+export default {
+  name: "source",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 优惠劵管理表格数据
+      couponList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        createdDate: null,
+        stationNo: null,
+        stationName: null,
+        beginTime:null,
+        endTime:null
+      },
+      // 表单参数
+      form: {
+        zongAmt:null,
+        zongliters:null,
+        qyamt:null,
+        cyamt:null,
+        qyliters:null,
+        wxAmt:null,
+        zfbAmt:null,
+        xjAmt:null,
+        didiAppAmt:null,
+        tyAppAmt:null,
+        otherAmt:null,
+        memberAmt:null,
+        posAmt:null
+
+      },
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询优惠劵管理列表 */
+    getList() {
+      listSum(this.queryParams).then(response => {
+        console.log("response:",response);
+        if(response.data==="undefined"){
+        }else{
+          this.form.zongAmt = response.data.amt;
+          this.form.zongliters = response.data.orderLiters;
+        }
+
+      });
+      listOilType(this.queryParams).then(response => {
+        if(response.data==="undefined"){
+        }else{
+          for(let i in response.rows){
+            if(response.rows[i].oilType==="1"){
+              this.form.qyamt=response.rows[i].amt;
+              this.form.qyliters=response.rows[i].orderLiters;
+            }else if(response.rows[i].oilType==="2"){
+              this.form.cyamt=response.rows[i].amt;
+              this.form.cyliters=response.rows[i].orderLiters;
+            }
+          }
+        }
+      });
+      listViewData(this.queryParams).then(response => {
+        console.log("response2:",response);
+        if(response.data==="undefined"){
+        }else{
+          this.form.wxAmt = response.data.wxAmt;
+          this.form.zfbAmt = response.data.zfbAmt;
+          this.form.xjAmt = response.data.xjAmt;
+          this.form.didiAppAmt = response.data.didiAppAmt;
+          this.form.tyAppAmt = response.data.tyAppAmt;
+          this.form.otherAmt = response.data.otherAmt;
+          this.form.memberAmt = response.data.memberAmt;
+          this.form.posAmt = response.data.posAmt;
+        }
+      });
+    },
+    //本日的数据
+    dayDataSource(){
+      this.reset();
+      this.queryParams.beginTime=this.getNowFormatDate(new Date());
+      this.queryParams.endTime =this.getEndFormatDate(new Date());
+      this.getList();
+    },
+    yesDataSource(){
+      this.reset();
+      this.queryParams.beginTime=this.getFormatDate(new Date());
+      this.queryParams.endTime =this.getNowFormatDate(new Date());
+      this.getList();
+    },
+    //本月数据
+    monthDataSource(){
+      this.reset();
+      this.queryParams.createdDate=this.getMonthDate();
+      this.getList();
+    },
+    //今天
+    getNowFormatDate(date){
+      let seperator1="-";
+      let month=date.getMonth()+1;
+      let strDate=date.getDate();
+      if (month>=1&&month<=9){
+        month="0"+month;
+      }
+      if (strDate>=0&&strDate<=9){
+        strDate="0"+strDate;
+      }
+      let currentdate=date.getFullYear()+seperator1+month+seperator1+strDate;
+      return currentdate;
+    },
+    //明天
+    getEndFormatDate(myDate){
+      let date = myDate.getDate();
+      date = date +1;
+      myDate.setDate(date);
+      let seperator1="-";
+      let month=myDate.getMonth()+1;
+      let strDate=myDate.getDate();
+      if (month>=1&&month<=9){
+        month="0"+month;
+      }
+      if (strDate>=0&&strDate<=9){
+        strDate="0"+strDate;
+      }
+      let currentdate=myDate.getFullYear()+seperator1+month+seperator1+strDate;
+      return currentdate;
+    },
+    //昨天
+    getFormatDate(myDate){
+      let date = myDate.getDate();
+      date = date - 1;
+      myDate.setDate(date);
+      let seperator1="-";
+      let month=myDate.getMonth()+1;
+      let strDate=myDate.getDate();
+      if (month>=1&&month<=9){
+        month="0"+month;
+      }
+      if (strDate>=0&&strDate<=9){
+        strDate="0"+strDate;
+      }
+      let currentdate=myDate.getFullYear()+seperator1+month+seperator1+strDate;
+      return currentdate;
+    },
+    //本月
+    getMonthDate(){
+      let date=new Date();
+      let seperator1="-";
+      let month=date.getMonth()+1;
+      if (month>=1&&month<=9){
+        month="0"+month;
+      }
+      let currentdate=date.getFullYear()+seperator1+month;
+      return currentdate;
+    },
+    // 表单重置
+    reset() {
+      this.queryParams = {
+        createdDate: null,
+        stationNo: null,
+        stationName: null
+      };
+    }
+  },
+
+
+};
+</script>
+<style lang="scss" scoped>
+  .flex{
+    display:flex;
+    align-items:center;
+    justify-content:center;
+    width: 100%;
+    height: 270px;
+    flex-direction:column;
+
+  }
+  .xiaoliang{
+    background-image: url('../../assets/image/bj-1.png');
+    background-size: 100% 100%;
+  }
+  .xiaoe{
+    background-image: url('../../assets/image/bj-02.png');
+    background-size: 100% 100%;
+  }
+  .qiyou{
+    background-image: url('../../assets/image/bj-3.png');
+    background-size: 100% 100%;
+  }
+  .chaiyou{
+    background-image: url('../../assets/image/bj-4.png');
+    background-size: 100% 100%;
+  }
+  .flex-qy{
+    display:flex;
+    align-items:center;
+    justify-content:center;
+  }
+  .flex-qy-sx{
+    display:flex;
+    align-items:center;
+    justify-content:center;
+    flex-direction:column;
+  }
+  .panel-group {
+    padding-left: 10px;
+  }
+
+  .flex-sr{
+    display:flex;
+    align-items:center;
+    justify-content:center;
+    width: 100%;
+    flex-direction:column;
+  }
+  .sr-font{
+    font-size: 20px;
+    color: #F4A645;
+  }
+
+
+
+</style>

+ 0 - 79
Yijia-SaaS/yijia-ui/src/views/station/common/index.vue

@@ -1,79 +0,0 @@
-<template>
-  <div id="station">
-    <ul>
-      <li v-for="(tab,index) in tabs" @click="toggle(index,tab.view)" :class="{active:active==index}">
-        {{tab.type}}
-      </li>
-    </ul>
-    <!--:is实现多个组件实现同一个挂载点-->
-    <component :is="currentView"></component>
-  </div>
-</template>
-
-<script>
-  import info from '../info/index.vue'
-  import pay from '../pay/index.vue'
-  import notice from '../notice/index.vue'
-  export default {
-    name: 'Common',
-    data(){
-      return {
-        active:0,
-        currentView:'油站信息',
-        tabs:[
-          {
-            type:'油站信息',
-            view:'info'
-          },
-          {
-            type:'支付配置',
-            view:'pay'
-          },
-          {
-            type:'设备管理',
-            view:'notice'
-          }
-        ]
-      }
-    },
-    methods:{
-      toggle(i,v){
-        this.active=i;
-        this.currentView=v;
-      }
-    },
-    components:{
-      info,
-      pay,
-      notice
-    }
-  }
-</script>
-
-<style>
-  #station {
-    font-family: 'Avenir', Helvetica, Arial, sans-serif;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-    /* text-align: center;
-    color: #2c3e50;
-    margin-top: 60px; */
-  }
-  ul{
-    width:500px;
-    display:flex;
-  }
-  ul li{
-    width:100px;
-    height:40px;
-    /*background: #ccc;*/
-    display: inline-flex;
-    border-right:1px solid #ddd;
-    justify-content: center;
-    align-items: center;
-    cursor:pointer
-  }
-  ul li.active{
-    /*background:#333;*/
-  }
-</style>

+ 43 - 25
Yijia-SaaS/yijia-ui/src/views/station/order/index.vue

@@ -28,15 +28,7 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <!--      <el-form-item label="用户id(消费者)" prop="consumerId">-->
-      <!--        <el-input-->
-      <!--          v-model="queryParams.consumerId"-->
-      <!--          placeholder="请输入用户id(消费者)"-->
-      <!--          clearable-->
-      <!--          size="small"-->
-      <!--          @keyup.enter.native="handleQuery"-->
-      <!--        />-->
-      <!--      </el-form-item>-->
+
       <el-form-item label="消费者" prop="consumer">
         <el-input
           v-model="queryParams.consumer"
@@ -46,23 +38,20 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="金额" prop="amt">
-        <el-input
-          v-model="queryParams.amt"
-          placeholder="请输入金额"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="油站id" prop="stationId">
-        <el-input
+      <el-form-item label="油站名称" prop="stationId">
+        <el-select
           v-model="queryParams.stationId"
-          placeholder="请输入油站id"
+          placeholder="请选择油站"
           clearable
           size="small"
-          @keyup.enter.native="handleQuery"
-        />
+        >
+          <el-option
+            v-for="item in stationOptions"
+            :key="item.stationId"
+            :label="item.stationName"
+            :value="item.stationId"
+          ></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="支付状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
@@ -261,8 +250,24 @@
         <el-form-item label="金额" prop="amt">
           <el-input v-model="form.amt" placeholder="请输入金额" />
         </el-form-item>
-        <el-form-item label="油站id" prop="stationId">
-          <el-input v-model="form.stationId" placeholder="请输入油站id" />
+        <el-form-item label="油站名称" prop="stationId" >
+          <el-select
+            v-model="form.stationId"
+            placeholder="请选择油站"
+            clearable
+            size="small"
+            @change="onInstitutionChang"
+          >
+            <el-option
+              v-for="item in stationOptions"
+              :key="item.stationId"
+              :label="item.stationName"
+              :value="item.stationId"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item v-show="false" label="油站名称" prop="stationName">
+          <el-input v-model="form.stationName"  placeholder="请输入油站名称" />
         </el-form-item>
         <el-form-item label="状态">
           <el-radio-group v-model="form.status">
@@ -337,6 +342,7 @@
 
 <script>
   import { listOrder, getOrder, delOrder, addOrder, updateOrder, exportOrder } from "@/api/station/order";
+  import {stationinfo} from "@/api/station/gun";
 
   export default {
     name: "Order",
@@ -363,6 +369,8 @@
         payTypeOptions:[],
         payWayOptions:[],
         payStatusOptions:[],
+        //下拉油站
+        stationOptions:[],
         // 弹出层标题
         title: "",
         // 是否显示弹出层
@@ -411,6 +419,9 @@
       this.getDicts("pay_status").then(response => {
         this.payStatusOptions = response.data;
       });
+      stationinfo().then(response => {
+        this.stationOptions = response.rows;
+      });
     },
     methods: {
       payTypeFotmat(row, column){
@@ -451,6 +462,13 @@
           this.loading = false;
         });
       },
+      onInstitutionChang(e){
+        let obj = {};
+        obj = this.stationOptions.find((item)=>{//这里的userList就是上面遍历的数据源
+          return item.stationId === e;//筛选出匹配数据
+        })
+        this.form.stationName=obj.stationName;
+      },
       // 取消按钮
       cancel() {
         this.open = false;

+ 225 - 0
Yijia-SaaS/yijia-ui/src/views/station/summary/index.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="98px">
+      <el-form-item label="班次号" prop="classesNo">
+        <el-input
+          v-model="queryParams.classesNo"
+          placeholder="请输入班次号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="班次开始时间" prop="startDate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.startDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择班次开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="班次结束时间" prop="endDate">
+        <el-date-picker clearable size="small" style="width: 200px"
+          v-model="queryParams.endDate"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="选择班次结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="油站名称" prop="stationName">
+        <el-input
+          v-model="queryParams.stationName"
+          placeholder="请输入油站名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="订单数" prop="orderNum">
+        <el-input
+          v-model="queryParams.orderNum"
+          placeholder="请输入订单数"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="小票数量" prop="printNum">
+        <el-input
+          v-model="queryParams.printNum"
+          placeholder="请输入小票数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="班结人" prop="classesMan">
+        <el-input
+          v-model="queryParams.classesMan"
+          placeholder="请输入班结人"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="summaryList" @selection-change="handleSelectionChange">
+      <el-table-column label="班结主键id" align="center" prop="id" v-if="false" />
+      <el-table-column label="班次号" align="center" prop="classesNo" />
+      <el-table-column label="班次开始时间" align="center" prop="startDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="班次结束时间" align="center" prop="endDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="油站id" align="center" prop="stationId" v-if="false" />
+      <el-table-column label="油站名称" align="center" prop="stationName" />
+      <el-table-column label="订单数" align="center" prop="orderNum" />
+      <el-table-column label="小票数量" align="center" prop="printNum" />
+      <el-table-column label="销量L" align="center" prop="saleLiters" />
+      <el-table-column label="销售额元" align="center" prop="saleAmt" />
+      <el-table-column label="微信销售金额" align="center" prop="wxAmt" />
+      <el-table-column label="支付宝销售金额" align="center" prop="zfbAmt" />
+      <el-table-column label="电子卡销售金额" align="center" prop="dzkAmt" />
+      <el-table-column label="班结人" align="center" prop="classesMan" />
+<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-edit"-->
+<!--            @click="handleUpdate(scope.row)"-->
+<!--            v-hasPermi="['station:summary:edit']"-->
+<!--          >修改</el-button>-->
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-delete"-->
+<!--            @click="handleDelete(scope.row)"-->
+<!--            v-hasPermi="['station:summary:remove']"-->
+<!--          >删除</el-button>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { listSummary } from "@/api/station/summary";
+
+export default {
+  name: "Summary",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 【请填写功能名称】表格数据
+      summaryList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        classesNo: null,
+        startDate: null,
+        endDate: null,
+        stationId: null,
+        stationName: null,
+        orderNum: null,
+        printNum: null,
+        saleLiters: null,
+        saleAmt: null,
+        wxAmt: null,
+        zfbAmt: null,
+        dzkAmt: null,
+        classesMan: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询【请填写功能名称】列表 */
+    getList() {
+      this.loading = true;
+      listSummary(this.queryParams).then(response => {
+        this.summaryList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        classesNo: null,
+        startDate: null,
+        endDate: null,
+        stationId: null,
+        stationName: null,
+        orderNum: null,
+        printNum: null,
+        saleLiters: null,
+        saleAmt: null,
+        wxAmt: null,
+        zfbAmt: null,
+        dzkAmt: null,
+        classesMan: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    }
+
+  }
+};
+</script>