lex-xin 5 лет назад
Родитель
Сommit
02777d7f59
3 измененных файлов с 359 добавлено и 27 удалено
  1. 9 0
      src/api/orderManager.js
  2. 29 27
      src/router/index.js
  3. 321 0
      src/views/businessManager/orderManager/financeManager.vue

+ 9 - 0
src/api/orderManager.js

@@ -29,6 +29,15 @@ export function orderQueryPage2 (data) {
   })
 }
 
+// 财务列表
+export function orderFinance (data) {
+  return request({
+    url: api + '/order/finance',
+    method: 'get',
+    params: data
+  })
+}
+
 // 退费管理
 export function studentRefundsQueryPage (data) {
   return request({

+ 29 - 27
src/router/index.js

@@ -65,18 +65,16 @@ export const constantRoutes = [
     path: '/setSilder', // 侧边栏
     component: Layout,
     hidden: true,
-    children: [
-      {
-        name: '侧边栏',
-        path: 'setSilder',
-        component: () => import('@/views/setSilder/addSilder'),
-        hidden: true,
-        meta: {
-          noCache: '1',
-          title: '侧边栏'
-        }
+    children: [{
+      name: '侧边栏',
+      path: 'setSilder',
+      component: () => import('@/views/setSilder/addSilder'),
+      hidden: true,
+      meta: {
+        noCache: '1',
+        title: '侧边栏'
       }
-    ]
+    }]
   },
   {
     path: '/login',
@@ -92,7 +90,7 @@ export const constantRoutes = [
     path: '/404',
     component: () => import('@/views/404'),
     hidden: true
-  }, 
+  },
   // {
   //   path: '/sporadicManager',
   //   component: Layout,
@@ -114,14 +112,16 @@ export const constantRoutes = [
 // }]
 const createRouter = () => new Router({
   // mode: 'history', // require service support
-  scrollBehavior: () => ({ y: 0 }),
+  scrollBehavior: () => ({
+    y: 0
+  }),
   routes: constantRoutes
 })
 
 const router = createRouter()
 
 // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
-export function resetRouter () {
+export function resetRouter() {
   const newRouter = createRouter()
   router.matcher = newRouter.matcher // reset router
 }
@@ -162,6 +162,8 @@ export const asyncRoutes = {
   income: () => import('@/views/businessManager/orderManager/income'),
   incomeOne: () => import('@/views/businessManager/orderManager/incomeOne'),
   incomeTwo: () => import('@/views/businessManager/orderManager/incomeTwo'),
+  // 财务管理
+  financeManager: () => import('@/views/businessManager/orderManager/financeManager'),
   // 充值列表
   incomebuy: () => import('@/views/businessManager/orderManager/incomebuy'),
   // 退费订单
@@ -240,30 +242,30 @@ export const asyncRoutes = {
   // 运营预警
   operationalList: () => import('@/views/operationalEarly/operationalList'),
   // 网管课列表
-  accompanyList:()=> import('@/views/accompanyManager/accompanyList'),
+  accompanyList: () => import('@/views/accompanyManager/accompanyList'),
   // 网管课详情
-  accompanys:()=> import('@/views/accompanyManager/accompanys'),
+  accompanys: () => import('@/views/accompanyManager/accompanys'),
   // 版本控制
-  editionList:()=> import('@/views/editionManager/editionList'),
+  editionList: () => import('@/views/editionManager/editionList'),
   // 定时任务
-  timedTask:()=> import('@/views/timedTask/index'),
+  timedTask: () => import('@/views/timedTask/index'),
   // 月报
-  evaluateList:()=> import('@/views/evaluateManager/evaluateList'),
+  evaluateList: () => import('@/views/evaluateManager/evaluateList'),
   // 月报详情
-  evaluateDetail:()=> import('@/views/evaluateManager/evaluateDetail'),
+  evaluateDetail: () => import('@/views/evaluateManager/evaluateDetail'),
   // 评价管理
-  commentManager:()=>import('@/views/evaluateManager'),
+  commentManager: () => import('@/views/evaluateManager'),
   // 网管课评价
-  networkList:()=>import('@/views/evaluateManager/networkList'),
+  networkList: () => import('@/views/evaluateManager/networkList'),
   // 时间充值活动
-  entryActivities:()=>import('@/views/app/entryActivities'),
+  entryActivities: () => import('@/views/app/entryActivities'),
   // 添加或修改
-  entryOperation:()=>import('@/views/app/entryOperation'),
+  entryOperation: () => import('@/views/app/entryOperation'),
   // 帮助分类
-  helpCategory:()=>import('@/views/helpCenter/helpCategory'),
+  helpCategory: () => import('@/views/helpCenter/helpCategory'),
   // 帮助内容
-  helpContent:()=>import('@/views/helpCenter/helpContent'),
+  helpContent: () => import('@/views/helpCenter/helpContent'),
   // 对外订单
-  incomeOut:()=>import('@/views/businessManager/orderManager/incomeOut')
+  incomeOut: () => import('@/views/businessManager/orderManager/incomeOut')
 }
 export default router

+ 321 - 0
src/views/businessManager/orderManager/financeManager.vue

@@ -0,0 +1,321 @@
+@@ -0,0 +1,320 @@
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>财务管理
+    </h2>
+    <div class="m-core">
+      <div class="newBand"
+           @click="onOrderExport"
+           v-permission="{child: 'export/orderList', parent: '/financeManager'}">报表导出</div>
+      <!-- 搜索类型 -->
+      <el-form :inline="true"
+               class="searchForm"
+               v-model.trim="searchForm">
+        <el-form-item prop='routingOrganId'>
+          <el-select class='multiple'
+                     v-model.trim="searchForm.routingOrganId"
+                     filterable
+                     clearable
+                     @clear="onClear('routingOrganId')"
+                     placeholder="请选择分部">
+            <el-option v-for="(item,index) in organList"
+                       :key="index"
+                       :label="item.name"
+                       :value="item.id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-date-picker v-model.trim="orderDate"
+                          style="width:410px;"
+                          type="daterange"
+                          value-format="yyyy-MM-dd"
+                          @change="searchOrderDate"
+                          range-separator="至"
+                          start-placeholder="开始日期"
+                          end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-select v-model.trim="searchForm.paymentType"
+                     clearable
+                     filterable
+                     @clear="onClear('paymentType')"
+                     placeholder="交易类型">
+            <el-option v-for="(item, index) in orderStatus"
+                       :key="index"
+                       :label="item.label"
+                       :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-select v-model.trim="searchForm.paymentStatus"
+                     clearable
+                     filterable
+                     @clear="onClear('paymentStatus')"
+                     placeholder="交易状态">
+            <el-option v-for="(item, index) in dealStatus"
+                       :key="index"
+                       :label="item.label"
+                       :value="item.value"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search"
+                     type="danger">搜索</el-button>
+          <el-button @click="onReSet"
+                     type="primary">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <!-- 列表 -->
+      <div style="font-size: 14px; color: #F85043; padding-bottom: 10px;">
+          应收总金额:{{ totalExpectAmount }}元 &nbsp;&nbsp;&nbsp;&nbsp;
+          实收总金额:{{ totalActualAmount }}元</div>
+      <div class="tableWrap">
+        <el-table :data='tableList'
+                  :header-cell-style="{background:'#EDEEF0',color:'#444'}">
+          <el-table-column align='center'
+                           prop="transNo"
+                           label="交易流水号">
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="orderNo"
+                           label="订单号">
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="createTime"
+                           label="订单日期">
+          </el-table-column>
+          <el-table-column align='center'
+          width="100px"
+                           label="交易类型">
+            <template slot-scope="scope">
+              {{ scope.row.type | orderType }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="expectAmount"
+                           label="应付金额">
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="balancePaymentAmount"
+                           label="余额支付">
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="actualAmount"
+                           label="实付金额">
+          </el-table-column>
+          <el-table-column align='center'
+                           label="学员姓名">
+            <template slot-scope="scope">
+              {{ scope.row.user.username }}<span v-if="scope.row.user.username && scope.row.user.phone">/</span>{{ scope.row.user.phone }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           prop="paymentChannel"
+                           label="交易方式">
+            <template slot-scope="scope">
+              {{ scope.row.paymentChannel | paymentChannelStatus }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           label="收款账户">
+            <template slot-scope="scope">
+              {{ scope.row.merNos }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           label="交易状态">
+            <template slot-scope="scope">
+              {{ scope.row.status | dealStatus }}
+            </template>
+          </el-table-column>
+          <el-table-column align='center'
+                           label="备注">
+            <template slot-scope="scope">
+              {{ scope.row.memo ? scope.row.memo : '-' }}
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :total="pageInfo.total"
+                    :page.sync="pageInfo.page"
+                    :limit.sync="pageInfo.limit"
+                    :page-sizes="pageInfo.page_size"
+                    @pagination="getList" />
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import pagination from '@/components/Pagination/index'
+import { orderFinance } from '@/api/orderManager'
+import { getEmployeeOrgan } from '@/api/buildTeam'
+// import store from '@/store'
+import { orderStatus, dealStatus } from '@/utils/searchArray'
+import axios from 'axios'
+import qs from 'qs'
+import {
+  getToken
+} from '@/utils/auth'
+import load from '@/utils/loading'
+export default {
+  components: { pagination },
+  name: 'incomeTwo',
+  data () {
+    return {
+      orderStatus: orderStatus,
+      dealStatus: dealStatus,
+      orderDate: null,
+      searchForm: {
+        orderStartDate: null,
+        orderEndDate: null,
+        paymentStatus: 'SUCCESS',
+        paymentType: null,
+        routingOrganId: null
+      },
+      tableList: [],
+      organList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      totalExpectAmount: 0, //应收总金额
+      totalActualAmount: 0, //实收总金额
+    }
+  },
+  mounted () {
+    getEmployeeOrgan().then(res => {
+      if (res.code == 200) {
+        this.organList = res.data;
+      }
+    })
+            var now = new Date();
+var startDate = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())).toISOString().slice(0, 10);
+var endDate = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())).toISOString().slice(0, 10);
+this.orderDate=[];
+this.orderDate.push(startDate)
+this.orderDate.push(endDate)
+    this.getList()
+
+  },
+  methods: {
+    onClear (type) {
+      if (type == 'paymentType') {
+        this.searchForm.paymentType = null
+      } else if (type == 'paymentStatus') {
+        this.searchForm.paymentStatus = null
+      } else if (type == 'routingOrganId') {
+        this.searchForm.routingOrganId = null
+      }
+    },
+    onOrderExport () { // 报表导出
+      let url = '/api-web/export/orderList'
+      let data = {
+        orderType: 3
+      }
+      let searchForm = this.searchForm
+      if (searchForm.paymentStatus) {
+        data.paymentStatus = searchForm.paymentStatus
+      }
+
+      if (searchForm.paymentType) {
+        data.paymentType = searchForm.paymentType
+      }
+
+      if (searchForm.routingOrganId) {
+        data.routingOrganId = searchForm.routingOrganId
+      }
+
+      if (searchForm.orderStartDate && searchForm.orderEndDate) {
+        data.orderStartDate = searchForm.orderStartDate
+        data.orderEndDate = searchForm.orderEndDate
+      }
+      const options = {
+        method: 'POST',
+        headers: {
+          'Authorization': getToken()
+        },
+        data: qs.stringify(data),
+        url,
+        responseType: 'blob'
+      }
+      this.$confirm('您确定导出报表', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        load.startLoading()
+        axios(options).then(res => {
+          let blob = new Blob([res.data], {
+            // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
+            type: 'application/vnd.ms-excel;charset=utf-8'
+            //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+          })
+          let objectUrl = URL.createObjectURL(blob)
+          let link = document.createElement("a")
+          let nowTime = new Date()
+          let ymd = nowTime.getFullYear() + '' + (nowTime.getMonth() + 1) + '' + nowTime.getDate() + '' +
+            nowTime.getHours() +
+            '' + nowTime.getMinutes()
+          let fname = '报表导出' + new Date().getTime() //下载文件的名字
+          link.href = objectUrl
+          link.setAttribute("download", fname)
+          document.body.appendChild(link)
+          link.click()
+          load.endLoading();
+        })
+      }).catch(() => { })
+    },
+    search () {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    getList () {
+      let params = this.searchForm
+      params.rows = this.pageInfo.limit
+      params.page = this.pageInfo.page
+       if (this.orderDate && this.orderDate.length > 0) {
+        params.orderStartDate = this.orderDate[0];
+        params.orderEndDate = this.orderDate[1];
+      } else {
+        params.orderStartDate = null;
+        params.orderEndDate = null;
+      }
+      orderFinance(params).then(res => {
+        let result = res.data
+        if (res.code == 200) {
+          this.tableList = result.rows
+          this.pageInfo.total = result.total
+          this.totalExpectAmount = result.totalExpectAmount ? result.totalExpectAmount : 0
+          this.totalActualAmount = result.totalActualAmount ? result.totalActualAmount : 0
+        }
+      })
+    },
+    searchOrderDate (value) {
+      if (value) {
+        this.searchForm.orderStartDate = value[0]
+        this.searchForm.orderEndDate = value[1]
+      } else {
+        this.searchForm.orderStartDate = null
+        this.searchForm.orderEndDate = null
+      }
+    },
+    onReSet () { // 重置搜索
+      this.orderDate = null
+      this.searchForm = {
+        orderStartDate: null,
+        orderEndDate: null,
+        paymentStatus: null,
+        paymentType: null,
+        routingOrganId: null
+      }
+      this.getList()
+    },
+  }
+}
+</script>
+<style lang="scss">
+</style>