Jelajahi Sumber

增加 充值管理,转账记录列表,余额调整列表

david 2 tahun lalu
induk
melakukan
a8bdf62758

+ 36 - 88
src/api/finance.js

@@ -7,7 +7,7 @@ export function getChangeBalanceType() {
   })
 }
 
-// 列表
+// 余额调整列表
 export function balanceAuditList(query) {
     return request({
       url: '/v1/finance/balance-audit-list',
@@ -17,7 +17,7 @@ export function balanceAuditList(query) {
     })
 }
 
-// 导出
+// 调整列表导出
 export function balanceAuditListExport(query) {
     return request({
       url: '/v1/finance/balance-audit-list-export',
@@ -27,6 +27,26 @@ export function balanceAuditListExport(query) {
     })
 }
 
+// 转账列表导出
+export function transferListExport(query) {
+  return request({
+    url: '/v1/finance/transfer-list-export',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
+// 充值列表导出
+export function rechargeExport(query) {
+  return request({
+    url: '/v1/finance/recharge-export',
+    method: 'get',
+    data: query,
+    params: query
+  })
+}
+
 // 删除
 export function balanceAuditDelete(query) {
     return request({
@@ -89,113 +109,41 @@ export function balanceAuditPass(query) {
   })
 }
 
-
-// 删除角色
-export function deleteRole(id) {
+// 转账记录列表
+export function transferList(query) {
   return request({
-    url: '/v1/admin/role-delete/' + id,
-    method: 'get',
-    data: {}
-  })
-}
-
-// 批量删除角色
-export function batchDeleteRole(query) {
-  return request({
-    url: '/v1/admin/role-delete',
-    method: 'post',
-    data: query
-  })
-}
-
-// 列表
-export function adminRole(query) {
-  return request({
-    url: '/v1/admin/role',
+    url: '/v1/finance/transfer-list',
     method: 'get',
     data: query,
     params: query
   })
 }
 
-// 编辑角色获取详情
-export function roleDetail(id) {
-  return request({
-    url: '/v1/admin/role-edit/' + id,
-    method: 'get',
-    data: {}
-  })
-}
-
-// 添加/编辑角色
-export function addOREditRole(path, query) {
+// 充值记录列表
+export function rechargeList(query) {
   return request({
-    url: '/v1/' + path,
-    method: 'post',
-    data: query
-  })
-}
-
-// 获取角色权限
-export function getRolePermission(id) {
-  return request({
-    url: '/v1/admin/role-permission/' + id,
-    method: 'get'
-  })
-}
-
-// 编辑角色权限
-export function editRolePermission(id, query) {
-  return request({
-    url: '/v1/admin/role-permission/' + id,
-    method: 'post',
-    data: query
-  })
-}
-
-// 管理员添加/编辑/修改密码
-export function adminAddAndEditAndChangePassword(path, query) {
-  return request({
-    url: '/v1/' + path,
-    method: 'post',
-    data: query
-  })
-}
-
-// 管理员列表
-export function adminList(query) {
-  return request({
-    url: '/v1/admin/index',
+    url: '/v1/finance/recharge',
     method: 'get',
     data: query,
     params: query
   })
 }
-
-// 添加管理员-获取角色列表
-export function adminAdd(query) {
+// 状态管理获取状态
+export function getRechargeStatus(){
   return request({
-    url: '/v1/admin/add',
+    url: '/v1/finance/recharge-status',
     method: 'get',
-    data: query,
-    params: query
   })
 }
 
-// 管理员-编辑获取详情
-export function adminEdit(id) {
+// 提交充值状态
+export function postRechargeStatus(query) {
   return request({
-    url: '/v1/admin/edit/' + id,
-    method: 'get'
-  })
-}
-
-// 删除管理员
-export function adminDelete(query) {
-  return request({
-    url: '/v1/admin/admin-delete',
+    url: '/v1/finance/recharge-status',
     method: 'post',
     data: query
   })
 }
 
+
+

+ 4 - 0
src/lang/en.js

@@ -367,6 +367,10 @@ export default {
     adjustAmount:'Adjust amount',
     ecoinInsufficientNotice:'Ecoin of member is insufficient, whether to continue to submit.',
     reviewRemberEcoinInfo:'Review member Ecoin change information',
+    statusManagement:'Status management',
+    viewVoucher:'View voucher',
+    checkRechargeVoucher:'Check recharge voucher',
+    rechargeStatusState:'State',
   },
 
   // 管理员管理

+ 4 - 0
src/lang/zh.js

@@ -370,6 +370,10 @@ export default {
     adjustAmount:'调整金额',
     ecoinInsufficientNotice:'会员账户余额不足,是否继续提交',
     reviewRemberEcoinInfo:'审核会员余额变动信息',
+    statusManagement:'状态管理',
+    viewVoucher:'查看凭证',
+    checkRechargeVoucher:'查看充值凭证',
+    rechargeStatusState:'充值状态',
   },
 
   // 管理员管理

+ 17 - 2
src/router/index.js

@@ -99,15 +99,30 @@ export const constantRoutes = [
     hidden: true,
     children: [
       {
-        path: '/finance/balance-audit-list',
+        path: '/finance/balance-audit-list', // 会员余额调整列表
         component: () => import('@/views/finance/balance-audit-list'),
         name: 'finance_balance-audit-list',
       },
       {
-        path: '/finance/change-balance-opt',
+        path: '/finance/change-balance-opt', // 申请调整会员余额
         component: () => import('@/views/finance/change-balance-opt'),
         name: 'finance_change-balance-opt',
       },
+      {
+        path: '/finance/transfer-list', // 转账记录列表
+        component: () => import('@/views/finance/transfer-list'),
+        name: 'finance_transfer-list',
+      },
+      {
+        path: '/finance/recharge', // 充值管理
+        component: () => import('@/views/finance/recharge'),
+        name: 'finance_recharge',
+      },
+      {
+        path: '/finance/recharge-status', // 状态管理
+        component: () => import('@/views/finance/recharge-status'),
+        name: 'finance_recharge-status',
+      },
     ]
   },
   {

+ 117 - 0
src/views/finance/recharge-status.vue

@@ -0,0 +1,117 @@
+<template>
+    <div v-loading="loading">
+        <div class="white-box">
+            <el-form ref="form"  label-width="250px" class="bkele-form-page">
+                <el-form-item :label="$t('financial.rechargeStatusState')"> <!-- 充值状态 -->
+                    <el-select v-model="form.auditStatus" :placeholder="$t('financial.rechargeStatusState')"> <!-- 充值状态 -->
+                        <el-option v-for="(item,index) in statusArray" :key="index" :label="item"
+                                   :value="index"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item :label="$t('table.remark')"> <!-- 备注 -->
+                    <el-input v-model="form.createRemark"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="onSubmit" :loading="submitButtonStat">{{  $t('common.modify')  }}</el-button> <!-- 修改 -->
+                </el-form-item>
+            </el-form>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { getRechargeStatus, postRechargeStatus } from '@/api/finance'
+    export default {
+        name: "recharge-status",
+        created(){
+            this.getParams()
+        },
+        mounted() {
+            this.getData();
+        },
+
+        data(){
+            return{
+                loading: false,
+                form:{
+                    auditStatus:'',
+                    createRemark:'',
+                    selectedIds:'',
+                },
+                submitButtonStat: false,
+                statusArray: null,
+            }
+        },
+        methods: {
+            getParams(){
+                // 取到路由带过来的参数
+                this.form.selectedIds = this.$route.query.mallCode.ID
+                // 将数据放在当前组件的数据内
+                //this.form.selectedIds = routerParams;
+
+            },
+            getData() {
+                getRechargeStatus().then(response => {
+                    this.statusArray = response.data.statusArray;
+                    this.loading = false;
+                }).catch(err => {
+                    this.loading = false;
+                })
+            },
+            onSubmit() {
+                this.submitButtonStat = true
+                let postData = {
+                    auditStatus: this.form.auditStatus,
+                    createRemark: this.form.createRemark,
+                    selectedIds: this.form.selectedIds,
+                }
+                postRechargeStatus(postData).then(response => {
+                    this.$message({
+                        message: response.data,
+                        type: 'success'
+                    })
+                    this.submitButtonStat = false
+                    this.$router.go(-1)
+                }).catch(err => {
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                    this.submitButtonStat = false
+                })
+            },
+        },
+        watch: {
+            '$route': 'getParams'
+        }
+    }
+</script>
+
+<style scoped>
+    .el-form-item{
+        margin-top: 35px;
+    }
+    @media (min-width: 761px) {
+    /deep/ .el-input__inner {
+      width: 500px;
+    }
+  }
+  @media (max-width:760px) {
+    /deep/ .white-box {
+    padding: 0px 0px;
+    }
+    /deep/ .el-form-item__content {
+      margin-left:150px !important;
+    }
+    /deep/ .el-form-item__label {
+      width:150px !important;
+    }
+    /deep/ .el-input__inner { 
+      width: 150px;
+    }
+    /* .el-input {
+      width: 90%;
+    } */
+
+  }
+</style>

+ 215 - 0
src/views/finance/recharge.vue

@@ -0,0 +1,215 @@
+<template>
+    <div v-loading="loading">
+        <div class="white-box">
+            <div class="filter-box">
+                <filter-user :filter-types="filterTypes" @select-value="handleFilterUser"></filter-user>
+            </div>
+            <el-table class="table-box" ref="multipleTable" :data="tableData" stripe style="width: 100%;" :height="tool.getTableHeight()" @selection-change="handleSelectionChange">
+                <!-- <el-table-column fixed type="selection" width="55" v-if="tableHeaders" :selectable="checkSelectable"></el-table-column>-->
+                <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''" :prop="tableHeader.other.prop ? tableHeader.other.prop : null">
+                    <template slot-scope="scope">
+                        <template v-if="scope.row[tableHeader.index].other.tag" >
+                            <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
+                        </template>
+                        <template v-else>
+                            <div v-html="scope.row[tableHeader.index].value"></div>
+                        </template>
+                    </template>
+                </el-table-column>
+                <el-table-column :label="$t('common.action')"> <!-- 操作 -->
+                    <template slot-scope="scope">
+                    <el-button type="success" size="small" @click="handleGroupManage(scope.row)" >
+                        {{  $t('financial.statusManagement')  }}<!-- 状态管理 -->
+                    </el-button>
+                </template></el-table-column>
+                <el-table-column :label="$t('financial.viewVoucher')"><!-- 查看凭证 -->
+                    <template slot-scope="scope">
+                        <el-button type="success" size="small" @click="handleInvoiceShow(scope.row)"
+                           v-if="scope.row.AUDIT_STATUS!=='0'">{{  $t('financial.viewVoucher')  }}<!-- 查看凭证 -->
+                        </el-button>
+                    </template>
+                </el-table-column>
+
+            </el-table>
+            <div class="white-box-footer">
+                <el-button type="success" size="small" @click="handleExport"
+                     v-show="permission.hasPermission(`finance/recharge-export`)">{{ $t('common.exportExcel') }}
+                </el-button>
+                <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
+            </div>
+            <el-dialog :title="$t('financial.checkRechargeVoucher')" :visible.sync="dialogInvoiceVisible"> <!-- 查看充值凭证 -->
+                <div v-loading="dialogInvoiceLoading">
+                    <a :href="invoiceUrl" target="_blank"><img :src="urlimg" alt="" style="max-width: 100%"></a>
+                </div>
+                <div slot="footer" class="dialog-footer">
+                    <el-button @click="dialogInvoiceVisible = false">{{ $t('common.confirm') }}</el-button> <!-- 确 定 -->
+                </div>
+            </el-dialog>
+        </div>
+    </div>
+</template>
+
+<script>
+    import tool from '@/utils/tool'
+    import FilterUser from '@/components/FilterUser'
+    import permission from '@/utils/permission'
+    import Pagination from '@/components/Pagination'
+    import filterHelper from '@/utils/filterHelper'
+    import { rechargeList, rechargeExport } from '@/api/finance'
+
+    export default {
+        name: 'recharge',
+        components: {FilterUser,Pagination},
+        mounted () {
+            this.getData()
+        },
+
+        data () {
+            return {
+                tableHeaders: null,
+                tableData: null,
+                loading: true,
+                currentPage: 1,
+                totalPages: 1,
+                totalCount: 1,
+                pageSize: 20,
+                multipleSelection: [],
+                tool: tool,
+                permission: permission,
+                filterTypes: {},
+                filterModel: {},
+                value:[],
+                selectedIds:'',
+                dialogInvoiceVisible: false,
+                dialogInvoiceLoading: false,
+                invoiceUrl:'',
+                urlimg:''
+            }
+        },
+        methods: {
+            handleSelectionChange(val) {
+                this.multipleSelection = val
+            },
+            handleCurrentChange (page) {
+                this.getData(page, this.pageSize)
+            },
+            handleSizeChange (pageSize) {
+                this.getData(this.currentPage, pageSize)
+            },
+            handleFilterUser(filterData){
+                filterHelper.handleFilterUser(this, filterData)
+            },
+            handleFilter() {
+                this.getData()
+            },
+            checkSelectable(row) {
+                return row.DONT_DEL !== '1'
+            },
+            getData (page, pageSize) {
+                let filterData = this.filterModel
+                let vueObj = this
+                const paramsData = Object.assign({
+                    page: (page === null || page == undefined) ? 1 : page,
+                    pageSize: (pageSize === null || pageSize == undefined) ? vueObj.pageSize : pageSize
+                }, filterData)
+                rechargeList(paramsData).then(response => {
+                    vueObj.tableHeaders = response.data.columnsShow ? response.data.columnsShow : []
+                    vueObj.tableData = response.data.list
+                    vueObj.filterTypes = response.data.filterTypes
+                    vueObj.currentPage = page
+                    vueObj.totalPages = parseInt(response.data.totalPages)
+                    vueObj.totalCount = parseInt(response.data.totalCount)
+                    vueObj.pageSize = pageSize
+                    // vueObj.selectedIds = vueObj.tableData.ID;
+                    let settingObj=vueObj.tableData;
+                    let settingArr = Object.keys(settingObj).map(key => {
+                        //console.log(key); //为每个键名
+                        return settingObj[key];  //把每个对象返回出去生成一个新的数组中相当于0:{id:1}
+                    } );
+                    this.tableData=settingArr;
+                    this.loading = false
+                }).catch(err => {
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                    this.loading = false
+                })
+            },
+            handleExport(){
+                this.$confirm(this.$t('financial.exportNotice'), this.$t('common.hint'), {
+                    confirmButtonText: this.$t('common.confirm'), // 确定
+                    cancelButtonText: this.$t('common.cancel'), // 取消
+                    type: 'warning'
+                }).then(() => {
+                    rechargeExport(this.filterModel).then(response => {
+                        this.$message({
+                                message: response.data,
+                                type: 'success'
+                        })
+                    }).catch(error => {
+                        this.$message({
+                            message: error,
+                            type: 'error'
+                        })
+                    })
+                })
+            },
+            handleInvoiceShow(row) {
+                this.dialogInvoiceLoading = true
+                this.uploadId = row.ID
+                this.dialogInvoiceVisible = true
+                this.dialogInvoiceLoading = false
+                this.urlimg = tool.getArImage(row.BANK_PROVE, '/files/');
+            },
+
+       /* handlestate(){
+            this.$router.push({path: `/finance/recharge-status`})
+        },*/
+
+            handleGroupManage(row) {
+
+               /* if (this.multipleSelection.length < 1) {
+                    this.$message({
+                        message: '请勾选要操作的会员',
+                        type: 'warning'
+                    })
+                    return
+                }else{
+                    if(this.multipleSelection.length > 1){
+                        this.$message({
+                            message: '只能选择一个',
+                            type: 'warning'
+                        })
+                        return
+                    }
+                }*/
+
+                    this.$router.push({
+                        path: `/finance/recharge-status`,
+                        query: {
+                            mallCode: row
+                        }
+                    })
+
+
+
+            },
+        },
+    }
+</script>
+<style scoped>
+    .table-box .el-form-item__label {
+        width: 100px;
+        color: #99a9bf;
+    }
+
+    .table-box .el-form-item {
+        width: 30%;
+        margin-right: 0;
+        margin-bottom: 0;
+    }
+    .el-button--small, .el-button--small.is-round {
+        padding: 9px 5px;
+    }
+</style>

+ 124 - 0
src/views/finance/transfer-list.vue

@@ -0,0 +1,124 @@
+<template>
+    <div v-loading="loading">
+      <div class="white-box">
+        <div class="filter-box">
+          <filter-user :filter-types.sync="filterTypes" @select-value="handleFilterUser"></filter-user>
+        </div>
+        <el-table :data="tableData" stripe style="width: 100%;" :height="tool.getTableHeight()">
+          <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''">
+            <template slot-scope="scope">
+              <template v-if="scope.row[tableHeader.index].other.tag" >
+                <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
+              </template>
+              <template v-else-if="scope.row[tableHeader.index].other.progress" >
+                <el-progress type="circle" :percentage="Number.parseInt(percentList['MOVE_PERCENT'][scope.row.ID])"
+                             :width="50"
+                             :stroke-width="3"></el-progress>
+              </template>
+              <template v-else>
+                <div v-html="scope.row[tableHeader.index].value"></div>
+              </template>
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="white-box-footer">
+          <el-button type="success" size="small" @click="handleExport"
+                     v-show="permission.hasPermission(`finance/transfer-list-export`)">{{ $t('common.exportExcel') }}<!-- 导出Excel -->
+          </el-button>
+          <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange"
+                      @current-change="handleCurrentChange"></pagination>
+        </div>
+      </div>
+    </div>
+  </template>
+  
+  <script>
+    import tool from '@/utils/tool'
+    import FilterUser from '@/components/FilterUser'
+    import baseInfo from '@/utils/baseInfo'
+    import permission from '@/utils/permission'
+    import Pagination from '@/components/Pagination'
+    import filterHelper from '@/utils/filterHelper'
+    import { transferList, transferListExport } from '@/api/finance'
+  
+    export default {
+      name: 'finance_transfer-list',
+      components: {FilterUser, Pagination},
+      mounted() {
+        this.getData()
+      },
+      data() {
+        return {
+          tableHeaders: null,
+          tableData: null,
+          loading: true,
+          currentPage: 1,
+          totalPages: 1,
+          totalCount: 1,
+          pageSize: 20,
+          tool: tool,
+          permission: permission,
+          baseDecLevels: baseInfo.decLevels(),
+          filterTypes: {},
+          filterModel: {},
+        }
+      },
+      methods: {
+        handleCurrentChange(page) {
+          this.getData(page, this.pageSize)
+        },
+        handleSizeChange(pageSize) {
+          this.getData(this.currentPage, pageSize)
+        },
+        handleFilterUser(filterData) {
+          filterHelper.handleFilterUser(this, filterData)
+        },
+        handleFilter() {
+          this.getData()
+        },
+        getData(page, pageSize) {
+          let filterData = this.filterModel
+          let vueObj = this
+          const paramsData = Object.assign({
+            page: (page === null || page == undefined) ? 1 : page,
+            pageSize: (pageSize === null || pageSize == undefined) ? vueObj.pageSize : pageSize
+          }, filterData)
+          transferList(paramsData).then(response => {
+            vueObj.tableHeaders = response.data.columnsShow ? response.data.columnsShow : []
+            vueObj.tableData = response.data.list
+            vueObj.filterTypes = response.data.filterTypes
+            vueObj.currentPage = page
+            vueObj.totalPages = parseInt(response.data.totalPages)
+            vueObj.totalCount = parseInt(response.data.totalCount)
+            vueObj.pageSize = pageSize
+        
+            this.loading = false
+          })
+        },
+        handleExport(){
+          this.$confirm(this.$t('financial.exportNotice'), this.$t('common.hint'), {//`确定要导出当前数据吗?`, '提示'
+            confirmButtonText: this.$t('common.confirm'),//确定
+            cancelButtonText: this.$t('common.cancel'),//取消
+            type: 'warning'
+          }).then(() => {
+            transferListExport(this.filterModel).then(response => {
+              this.$message({
+                message: response.data,
+                type: 'success'
+              })
+            }).catch(error => {
+              this.$message({
+                message: error,
+                type: 'error'
+              })
+            })
+          })
+        },
+      }
+    }
+  </script>
+  
+  <style scoped>
+  
+  </style>
+  

+ 1 - 1
vue.config.js

@@ -38,7 +38,7 @@ module.exports = {
     },
     proxy: {
       [process.env.VUE_APP_BASE_API]:{
-        target:"http://172.25.252.101:9970",
+        target:"http://172.29.198.198:9970",
         changeOrigin:true,
         pathRewrite:{
           ["^" + process.env.VUE_APP_BASE_API] : ""