| @@ -7456,6 +7456,11 @@ | |||
| "minimist": "^1.2.5" | |||
| } | |||
| }, | |||
| "moment": { | |||
| "version": "2.29.1", | |||
| "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz?cache=0&sync_timestamp=1601983320283&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.29.1.tgz", | |||
| "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=" | |||
| }, | |||
| "move-concurrently": { | |||
| "version": "1.0.1", | |||
| "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", | |||
| @@ -28,7 +28,7 @@ Vue.config.devtools = process.env.NODE_ENV === 'development'; | |||
| Vue.config.productionTip = process.env.NODE_ENV === 'production'; | |||
| window.EventBus = new Vue(); | |||
| import { Button, NumberKeyboard, Form, Field, DatetimePicker, Icon, List,} from 'vant'; | |||
| import { Button, NumberKeyboard, Form, Field, DatetimePicker, Icon, List, Toast,} from 'vant'; | |||
| Vue.use(Button); | |||
| Vue.use(NumberKeyboard); | |||
| Vue.use(Form); | |||
| @@ -36,6 +36,7 @@ Vue.use(Field); | |||
| Vue.use(DatetimePicker); | |||
| Vue.use(Icon); | |||
| Vue.use(List); | |||
| Vue.use(Toast); | |||
| // 注册过滤器 | |||
| Object.keys(filters).forEach((key) => { | |||
| @@ -25,8 +25,9 @@ const Login = () => import(/* webpackChunkName: "login" */ '@/views/login'); | |||
| const Home = () => import(/* webpackChunkName: "home" */ '@/views/home'); | |||
| const Person = () => import(/* webpackChunkName: "person" */ '@/views/person'); | |||
| const PointRecord = () => import(/* webpackChunkName: "PointRecord" */ '@/views/person/pointRecord.vue'); | |||
| const MyTicket = () => import(/* webpackChunkName: "PointRecord" */ '@/views/person/myTicket.vue'); | |||
| const MyTicket = () => import(/* webpackChunkName: "MyTicket" */ '@/views/person/myTicket.vue'); | |||
| const UserInfo = () => import(/* webpackChunkName: "UserInfo" */ '@/views/person/userInfo.vue'); | |||
| const Account = () => import(/* webpackChunkName: "Account" */ '@/views/person/account.vue'); | |||
| Vue.use(Router); | |||
| @@ -68,6 +69,15 @@ const routes = [ | |||
| title: '我的' | |||
| } | |||
| }, | |||
| { | |||
| path: '/account', | |||
| name: 'account', | |||
| component: Account, | |||
| meta: { | |||
| isShowNav: false, | |||
| title: '收款账户管理' | |||
| } | |||
| }, | |||
| { | |||
| path: '/myTicket', | |||
| name: 'myTicket', | |||
| @@ -19,6 +19,16 @@ export const apiUrl = { | |||
| wxMerchantcouponSend: "/api/couponSend/list", | |||
| // 商户注券记录 | |||
| wxMerchantcouponStory: "/api/couponSend/actionLog", | |||
| //查询商户授权状态 | |||
| getOpenIdByPhone:"/api/merchant/getOpenIdByPhone", | |||
| //查询账户信息 | |||
| findAccountById:"/api/merchant/findAccountById", | |||
| //删除分账账户 | |||
| deleteByReceiverId: "/api/merchant/deleteByReceiverId", | |||
| //某日期交易总流水 | |||
| getUnverifiedAmountOnDate: '/api/couponOrder/getUnverifiedAmountOnDate', | |||
| //首页账单列表 | |||
| listBillOweAndWaitPay:"/api/bill/listBillOweAndWaitPay", | |||
| loginOut: '/api/loginOut', | |||
| @@ -11,7 +11,7 @@ Vue.use(Vuex) | |||
| export default new Vuex.Store({ | |||
| state: { | |||
| token: '', | |||
| token: '914e314e-81cb-4064-93f8-79b9ac5cc7d1', | |||
| merchant_id:'', | |||
| merchant_id_scan:'', | |||
| @@ -24,6 +24,7 @@ | |||
| @fontSize12: .33rem; | |||
| @fontSize14: .38rem; | |||
| @fontSize15: .41rem; | |||
| @fontSize16: .43rem; | |||
| @fontSize18: .48rem; | |||
| @fontSize20: .53rem; | |||
| @@ -8,14 +8,12 @@ | |||
| <p>富茂服务商</p> | |||
| </div> | |||
| </div> | |||
| <div class="writeOff "> | |||
| <div class="classification " > | |||
| <div v-for="(item,index) in classIfyList" :key="index" class="category" @click="toWriteoff(item.path)"> | |||
| <div hover-class="active" :style="`background:${item.bg}`" > | |||
| <i :class="item.icon"></i> | |||
| </div> | |||
| <span>{{item.text}}</span> | |||
| </div> | |||
| <div class="nav-list"> | |||
| <div class="nav-item" v-for="(item,index) in classIfyList" :key="index" @click="toWriteoff(item.path)"> | |||
| <!-- <img class="nav-bg" :src="item.bg"> --> | |||
| <van-icon size="1rem" :color="item.color" :name="item.icon" /> | |||
| <span class="nav-text">{{item.text}}</span> | |||
| </div> | |||
| </div> | |||
| <!-- --> | |||
| @@ -68,6 +66,7 @@ | |||
| import Vue from "vue"; | |||
| import {mapMutations} from 'vuex' | |||
| import { Toast } from "vant"; | |||
| import {formatDate} from '@/filters' | |||
| // 组件 | |||
| export default { | |||
| name: 'page-index', | |||
| @@ -79,34 +78,42 @@ export default { | |||
| showJiaoyi: true, | |||
| showHexiao: true, | |||
| showShouyin: true, | |||
| djMoney: '', | |||
| djArr: [], | |||
| djMoney: '', | |||
| classIfyList: [ | |||
| { | |||
| text: "会员核销", | |||
| icon: "iconfont icon-hexiao", | |||
| icon: "coupon-o", | |||
| color: 'orange', | |||
| id: 0, | |||
| path:"/memberCancel" | |||
| }, | |||
| { | |||
| text: "消费卡收款", | |||
| icon: "iconfont icon-shouye1", | |||
| icon: "gold-coin-o", | |||
| color: '#FF9797', | |||
| id: 1, | |||
| path:"/memberGathering" | |||
| }, | |||
| { | |||
| text: "会员积分", | |||
| icon: "iconfont icon-jifen", | |||
| icon: "balance-o", | |||
| color: '#52CD00', | |||
| id: 4, | |||
| path:"/memberIntegral" | |||
| }, | |||
| { | |||
| text: "会员赠券", | |||
| icon: "iconfont icon-quan", | |||
| icon: "gift-o", | |||
| color: '#FF5683', | |||
| id: 5, | |||
| path:"/memberTicket" | |||
| }, | |||
| { | |||
| text: "营销结算", | |||
| icon: "iconfont icon-jiesuan", | |||
| icon: "notes-o", | |||
| color: '#6580FF', | |||
| id: 6, | |||
| path:"/marketingClose" | |||
| }, | |||
| @@ -118,12 +125,41 @@ export default { | |||
| this.getTabletListOrder(); | |||
| this.getTabletListVerify(); | |||
| this.getMicroPayAmountOnDate(); | |||
| this.getUnverifiedAmountOnDate(); | |||
| }, | |||
| methods: { | |||
| ...mapMutations(['setMerchantId','setMerchantIdScan']), | |||
| toWriteoff(path){ | |||
| this.$router.push(path) | |||
| }, | |||
| listBillOweAndWaitPay(data) { | |||
| this.$http.listBillOweAndWaitPay({ | |||
| method: 'post', | |||
| data: { | |||
| merchantId: data.merchant_id, | |||
| tenantId: data.tenant_id, | |||
| } | |||
| }).then(res => { | |||
| res.data.map(file => { | |||
| if (file.starttime && file.endtime) { | |||
| file.end = file.starttime.substring(0, 7).replace(/-/g, ".") + "-" + file.endtime.substring(0, 7).replace(/-/g, "."); | |||
| } else { | |||
| file.end = ""; | |||
| file.endtime = "" | |||
| } | |||
| file.receiveDate = formatDate(new Date(file.receiveDate),'yyyy-MM-dd') | |||
| }) | |||
| this.billList = res.data, | |||
| this.djArr = res.data.filter(item => item.status == 2), | |||
| this.djMoney = this.djArr.map(item => parseInt(item.owe / 100)) | |||
| let money = 0 | |||
| this.djMoney.filter(function (item, index) { | |||
| money += item; | |||
| }) | |||
| this.djZmoney = this.changePeoNumber(money) | |||
| }) | |||
| }, | |||
| /** | |||
| * 交易记录 | |||
| */ | |||
| @@ -399,14 +435,38 @@ export default { | |||
| if(code==200){ | |||
| this.setMerchantId(data.merchant_id) | |||
| this.setMerchantIdScan(data.merchant_id_scan) | |||
| this.listBillOweAndWaitPay(data); | |||
| }else{ | |||
| Toast(message); | |||
| } | |||
| }).catch(res=>{ | |||
| Toast(res); | |||
| }) | |||
| }, | |||
| //货币单位转换 | |||
| changeNumber(num) { | |||
| var changeNum = 0; | |||
| if (num < 1000000) { | |||
| return num / 100; | |||
| } else if (num >= 1000000 && num < 10000000000) { | |||
| return (num / 1000000).toFixed(2) + '万' | |||
| } else if (num > 10000000000) { | |||
| return (num / 10000000000).toFixed(2) + '亿' | |||
| } | |||
| }, | |||
| changePeoNumber(num) { | |||
| var changeNum = 0; | |||
| if (num < 10000) { | |||
| return num; | |||
| } else if (num >= 10000 && num < 100000000) { | |||
| return (num / 10000).toFixed(2) + '万' | |||
| } else if (num > 100000000) { | |||
| return (num / 100000000).toFixed(2) + '亿' | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| } | |||
| @@ -440,8 +500,6 @@ export default { | |||
| z-index: 1000; | |||
| width: 9.5rem; | |||
| margin: 0 auto; | |||
| display: flex; | |||
| flex-wrap: wrap; | |||
| } | |||
| .category{ | |||
| @@ -536,4 +594,30 @@ export default { | |||
| margin-top: .2rem; | |||
| } | |||
| .nav-list { | |||
| margin: .1rem .4rem .2rem; | |||
| overflow: hidden; | |||
| .nav-item { | |||
| float: left; | |||
| width: 24%; | |||
| height: 2.5rem; | |||
| background: #fff; | |||
| padding-top: .4rem; | |||
| margin: .05rem .05rem 0 0; | |||
| .nav-bg { | |||
| display: block; | |||
| margin: .3rem auto .5rem; | |||
| width: 1rem; | |||
| height: 1rem; | |||
| } | |||
| .nav-text { | |||
| display: block; | |||
| text-align: center; | |||
| margin-top: .2rem; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @@ -1,6 +1,10 @@ | |||
| <template> | |||
| <div> | |||
| <member-public :data="rule"/> | |||
| <div class='page-home'> | |||
| <div class="back-box"> | |||
| <van-icon class="back-icon" @click="goBack" size=".6rem" name="arrow-left" color="#fff" /> | |||
| <span>会员核销</span> | |||
| </div> | |||
| <member-public style="margin-top:1.3rem;" :data="rule"/> | |||
| </div> | |||
| </template> | |||
| @@ -22,10 +26,36 @@ export default { | |||
| methods: { | |||
| goDetails(){ | |||
| this.$router.push('/details') | |||
| } | |||
| }, | |||
| goBack() { | |||
| this.$router.go(-1) | |||
| }, | |||
| }, | |||
| mounted() { | |||
| }, | |||
| } | |||
| </script> | |||
| </script> | |||
| <style lang="less" scoped> | |||
| .page-home { | |||
| text-align: left; | |||
| .back-box { | |||
| position: absolute; | |||
| left: 0; | |||
| top: 0; | |||
| z-index: 1000; | |||
| width: 100%; | |||
| height: 1.3rem; | |||
| line-height: 1.3rem; | |||
| background: #52A0FD; | |||
| color: #fff; | |||
| font-size: @fontSize16; | |||
| text-align: center; | |||
| .back-icon { | |||
| float: left; | |||
| margin: .4rem 0 0 .1rem; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @@ -0,0 +1,204 @@ | |||
| <template> | |||
| <div class='page-home'> | |||
| <div class="back-box"> | |||
| <van-icon class="back-icon" @click="goBack" size=".6rem" name="arrow-left" color="#fff" /> | |||
| <span>收款账户管理</span> | |||
| </div> | |||
| <div class="title-h1">商家收款账户</div> | |||
| <div class="item-box"> | |||
| <span class="item-left">账号类型</span> | |||
| <span class="item-right">{{accountData.receiverType == 0?'微信商户号':'个人微信号'}}</span> | |||
| </div> | |||
| <div class="item-box"> | |||
| <span class="item-left">{{accountData.receiverType == 0?'商户号':(accountData.receiverType == 1?'微信号':'openId')}}</span> | |||
| <span class="item-right" style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{accountData.receiverAccount}}</span> | |||
| </div> | |||
| <div class="item-box"> | |||
| <span class="item-left">{{accountData.receiverType == 0?'商户名':'姓名'}}</span> | |||
| <span class="item-right">账号类型</span> | |||
| </div> | |||
| <div class="item-box" v-if="accountData.receiverType == 1||accountData.receiverType == 3"> | |||
| <span class="item-left">收款授权状态</span> | |||
| <span class="item-right" style="color:red;" v-if="haveAccount">已授权</span> | |||
| <span class="item-right" style="color:red;" v-if="!haveAccount">未授权(请打开本广场用户端小程序领取任意一张优惠券,然后刷新本页面点击保存完成授权)</span> | |||
| </div> | |||
| <div class="btn-delete" @click="deleteByReceiverId">删除账号</div> | |||
| <div class="btn-delete" @click="submitAccount" v-if="accountData.receiverType == 1">提交</div> | |||
| </div> | |||
| </template> | |||
| <script type="text/babel"> | |||
| import {formatDate} from '@/filters' | |||
| import { Toast } from 'vant'; | |||
| // 组件 | |||
| export default { | |||
| name: 'page-index', | |||
| components: { | |||
| }, | |||
| data() { | |||
| return { | |||
| accountData: { | |||
| receiverType: 0, | |||
| }, | |||
| haveAccount: false, | |||
| userInfo: null, | |||
| }; | |||
| }, | |||
| mounted() { | |||
| this.userInfo = JSON.parse(this.$route.query.userInfo) | |||
| this.getOpenIdByPhone() | |||
| this.findAccountById() | |||
| }, | |||
| methods: { | |||
| /** | |||
| * 查询商户C端授权状态 | |||
| */ | |||
| getOpenIdByPhone() { | |||
| this.$http.getOpenIdByPhone({ | |||
| method: 'get', | |||
| params: { | |||
| phone: this.userInfo.phone | |||
| } | |||
| }).then(res => { | |||
| if (res.data != undefined) { | |||
| this.haveAccount = res.data | |||
| } | |||
| if (res.code==1993) { | |||
| this.haveAccount = false | |||
| } | |||
| }) | |||
| }, | |||
| findAccountById() { | |||
| this.$http.findAccountById({ | |||
| method: 'get', | |||
| params: { | |||
| id: this.userInfo.merchant_id | |||
| } | |||
| }).then(res => { | |||
| this.accountData = res.data | |||
| }) | |||
| }, | |||
| goBack() { | |||
| this.$router.go(-1) | |||
| }, | |||
| //删除账号得信息 | |||
| deleteByReceiverId() { | |||
| this.$http.deleteByReceiverId({ | |||
| method: 'get', | |||
| params: { | |||
| id: this.accountData.id | |||
| } | |||
| }).then(res => { | |||
| console.log(res) | |||
| if (res.code != 1993) { | |||
| this.goBack() | |||
| } else { | |||
| Toast(res.message); | |||
| console.log(333) | |||
| } | |||
| }) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="less" rel="stylesheet/less" scoped> | |||
| .floatR { | |||
| float: right; | |||
| } | |||
| @font-face { | |||
| font-family: 'iconfont'; /* project id 1353693 */ | |||
| src: url('//at.alicdn.com/t/font_1353693_617eu8di04k.eot'); | |||
| src: url('//at.alicdn.com/t/font_1353693_617eu8di04k.eot?#iefix') format('embedded-opentype'), | |||
| url('//at.alicdn.com/t/font_1353693_617eu8di04k.woff2') format('woff2'), | |||
| url('//at.alicdn.com/t/font_1353693_617eu8di04k.woff') format('woff'), | |||
| url('//at.alicdn.com/t/font_1353693_617eu8di04k.ttf') format('truetype'), | |||
| url('//at.alicdn.com/t/font_1353693_617eu8di04k.svg#iconfont') format('svg'); | |||
| } | |||
| .page-home { | |||
| text-align: left; | |||
| .back-box { | |||
| position: absolute; | |||
| left: 0; | |||
| top: 0; | |||
| z-index: 1000; | |||
| width: 100%; | |||
| height: 1.3rem; | |||
| line-height: 1.3rem; | |||
| background: #52A0FD; | |||
| color: #fff; | |||
| font-size: @fontSize16; | |||
| text-align: center; | |||
| .back-icon { | |||
| float: left; | |||
| margin: .4rem 0 0 .1rem; | |||
| } | |||
| } | |||
| } | |||
| .header-wrap { | |||
| width: 100%; | |||
| height: 4rem; | |||
| position: relative; | |||
| top: -1rem; | |||
| .header-bg { | |||
| width: 100%; | |||
| height: 4rem; | |||
| } | |||
| } | |||
| .title-h1 { | |||
| height: 1.5rem; | |||
| line-height: 1.5rem; | |||
| color: #000; | |||
| font-size: @fontSize20; | |||
| margin-top: 1.5rem; | |||
| font-weight: 900; | |||
| padding: 0 .4rem; | |||
| } | |||
| .item-box { | |||
| width: 100%; | |||
| padding: 0 .4rem; | |||
| font-size: @fontSize15; | |||
| margin-bottom: .3rem; | |||
| overflow: hidden; | |||
| line-height: .6rem; | |||
| .item-left { | |||
| float: left; | |||
| width: 2.8rem; | |||
| } | |||
| .item-right { | |||
| float: left; | |||
| width: 6.2rem; | |||
| } | |||
| } | |||
| .btn-delete { | |||
| width: 4rem; | |||
| height: 1.2rem; | |||
| line-height: 1.2rem; | |||
| text-align: center; | |||
| border-radius: .1rem; | |||
| background: #52A0FD; | |||
| color: #fff; | |||
| font-size: @fontSize16; | |||
| margin: .5rem auto; | |||
| } | |||
| </style> | |||
| @@ -68,7 +68,7 @@ export default { | |||
| name: '', | |||
| merchant_id: '' | |||
| }, | |||
| routerUrl: ['/accountManage','/myTicket','/mermberList','/pointRecord'] | |||
| routerUrl: ['/account','/myTicket','/mermberList','/pointRecord'] | |||
| }; | |||
| }, | |||
| mounted() { | |||
| @@ -107,7 +107,7 @@ export default { | |||
| this.userInfo.phone = res.data.phone | |||
| this.userInfo.service_phone = res.data.service_phone | |||
| this.userInfo.name = res.data.name | |||
| this.userInfo.name = res.data.merchant_id | |||
| this.userInfo.merchant_id = res.data.merchant_id | |||
| } | |||
| }) | |||