| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- <template>
- <view class="content">
- <view class="select-item" @tap="navigateToSelect">
- <view class="picker-item-logol">
- <image class="picker-item-logo-left" src="/static/image/room.png"></image>
- </view>
- <view class="picker-item-label">已选房间</view>
- <view class="picker-item-content" :class="{'font-txt':add_class==1}">{{roomSelect}}</view>
- <view class="picker-item-logor">
- <image class="picker-item-logo-right" src="/static/image/right.png"></image>
- </view>
- </view>
- <view class="show-item">
- <view class="picker-item-logol">
- <image class="picker-item-logo-left" src="/static/image/elec.png"></image>
- </view>
- <view class="picker-item-label">剩余电量</view>
- <view class="picker-item-content font-txt">{{remainElec}} 度</view>
- </view>
- <view class="show-item add-money">
- <view class="add-money-show">
- <view class="picker-item-logol money-logo">
- <image class="picker-item-logo-left" src="/static/image/money.png"></image>
- </view>
- <view class="picker-item-label money-show">请选择金额</view>
- </view>
- <view class="add-money-list">
- <view class="add-money-button">
- <button class="select-submit" :data-item="10" @tap="add_money"
- :class="{'bg-color':add_class1==1}">10元</button>
- </view>
- <view class="add-money-button">
- <button class="select-submit" :data-item="20" @tap="add_money">20元</button>
- </view>
- <view class="add-money-button">
- <button class="select-submit" :data-item="30" @tap="add_money">30元</button>
- </view>
- <view class="add-money-button">
- <button class="select-submit" :data-item="50" @tap="add_money">50元</button>
- </view>
- <view class="add-money-button">
- <button class="select-submit" :data-item="100" @tap="add_money">100元</button>
- </view>
- <view class="add-money-button">
- <button class="select-submit" :data-item="200" @tap="add_money">200元</button>
- </view>
- </view>
- </view>
- <view class="show-item">
- <input class="input-money" maxlength="4" placeholder="请输入金额(1-200)" v-model:value="inputMoney"
- placeholder-class="#B3B3B3" @input="onInput" @blur="onBlur" />
- </view>
- <view class="submit-item">
- <button class="submit" :data-rooms='room' @tap="input_money">充值</button>
- </view>
- <view class="change-show" @tap="navigateToShow">
- 台账管理
- </view>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- index: 0,
- roomSelect: '', //房间号
- remainElec: 80.10.toFixed(2), //剩余电量
- add_class: '', //增加class属性
- add_class1: '',
- inputMoney: '', //手动输入增加金额
- addMoney: 0, //选择充值金额
- userinfo: {}, //用户信息
- order_id: '', // 订单号
- card_number: '', //用户卡号
- dom: '', //房间号
- campus: '', //校区
- access_token: '',
- sub_appid: '', //商户号
- pay_info: '',
- xiaofei_items: '', // 消费记录
- test: getApp().globalData.test
- }
- },
- onLoad: function(options) {
- let item_tmp = decodeURIComponent(options.item)
- //将字符串解密转换成对象
- let item = JSON.parse(item_tmp);
- // console.log(options.o, item)
- // 如果是选择宿舍号返回
- if (options.o == 'select') {
- this.roomSelect = item.roomSelect;
- this.add_class = 1;
- this.dom = item.dom;
-
- // 请求选定的月份消费记录
- this.request_consumption_records()
- }
- try {
- // 获取存储的用户数据
- const value = uni.getStorageSync('userinfo_storage_key')
- // console.log(item)
- if (item_tmp == '{}') { // 如果没有用户信息,返回首页
- uni.redirectTo({
- url: '../index/index'
- })
- return
- }
- // 如果是选择宿舍号返回
- if (options.o == 'index') {
- this.userinfo = item;
- // 更新存储的用户信息
- uni.setStorageSync('userinfo_storage_key', this.userinfo)
- this.roomSelect = this.campus + this.dom
- } else if (JSON.stringify(value) !== '{}') {
- this.userinfo = value;
- }
- this.campus = this.userinfo.campus
- this.dom = this.userinfo.dorm_number
- this.sub_appid = this.userinfo.sub_appid
-
- this.add_class = 1
- } catch (e) {
- console.log(e)
- }
- //将缓存中的卡号进行获取
- this.card_number = this.userinfo.card_number
- // 获取应用有效凭证
- this.get_valid_credentials()
- },
- methods: {
- /**
- * 获取应用有效凭证
- */
- async get_valid_credentials() {
- const value = uni.getStorageSync('userinfo_storage_key')
- // console.log(value)
- const res = await this.$myRequest({
- host: 'wecard',
- url: '/cgi-bin/oauth2/token',
- method: 'POST',
- header: {
- 'content-type': 'application/json'
- },
- data: {
- 'app_key': value.appkey,
- 'app_secret': value.app_secret,
- 'grant_type': 'client_credentials',
- 'scope': 'base',
- 'ocode': value.ocode
- }
- });
- if (typeof(res.data.access_token) != 'undefined') {
- // 获取到应用有效凭证,保存到页面变量中
- this.access_token = res.data.access_token
- } else {
- uni.showToast({
- title: '获取凭证失败',
- duration: 2000
- })
- }
-
- // 查询用户信息
- this.select_user_info()
- },
-
- /**
- * 查询用户信息
- */
- async select_user_info() {
- const res = await this.$myRequest({
- host: 'code',
- url: '/HotWater/userget_stu.action',
- method: 'POST',
- header: {
- 'content-type': 'application/x-www-form-urlencoded'
- },
- data: {
- card_number: this.userinfo.card_number
- }
- });
-
- // console.log(res, 'select_user_info');
- if (res.data.info) {
- let cnumber = this.userinfo.card_number
-
- if (cnumber == null || cnumber == undefined || cnumber == '') {
- // 之前未绑定用户信息,现在去绑定用户信息
- this.send_save_user_info()
- }
- } else {
- uni.showToast({
- icon: 'success',
- title: '获取用户信息失败'
- })
- }
- },
-
- /**
- * 请求选定的月份消费记录
- */
- async request_consumption_records() {
- if (this.card_number != '') {
- this.xiaofei_items = []
- const res = await this.$myRequest({
- host: 'code',
- url: '/HotWater/wxpayqueryConsume.action',
- method: 'POST',
- header: {
- 'content-type': 'application/x-www-form-urlencoded'
- },
- data: {
- card_number: this.card_number,
- begin_time: this.date
- }
- });
-
- // console.log(res.data.mess, 'request_consumption_records');
- if (typeof(res.data.mess) != 'undefined') {
- let items = res.data.mess
- // 按时间倒序排列
- // items.sort((a, b) => {
- // return a.begin_time < b.begin_time ? 1 : -1;
- // })
- for (var i = 0; i < items.length; i++) {
- // 过滤掉为0的记录,只显示消费大于0的记录
- // if (items[i].use_amount > 0.00) {
- this.xiaofei_items.push(items[i])
- // }
- }
- } else {
- uni.showToast({
- icon: 'success',
- title: '该月无消费记录'
- })
- }
- } else {
- uni.showToast({
- icon: 'success',
- title: '用户卡号为空'
- })
- }
- },
-
- /**
- * 绑定用户信息
- */
- async send_save_user_info() {
- const res = await this.$myRequest({
- host: 'code',
- url: '/HotWater/userstu_info.action',
- method: 'POST',
- header: {
- 'content-type': 'application/x-www-form-urlencoded'
- },
- data: {
- user: JSON.stringify(this.userinfo)
- }
- });
-
- // console.log('send_save_user_info:', res)
- let error = res.data.erro;
- if (error == '未获取到数据!') {
- uni.showToast({
- title: '绑定用户失败',
- duration: 2000
- })
- } else {
- uni.showToast({
- icon: 'success',
- title: '绑定用户成功',
- duration: 2000
- })
- }
- },
- //跳转到选择页面
- navigateToSelect() {
- uni.navigateTo({
- url: '../select/select?roomSelect=' + this.roomSelect,
- });
- },
- //跳转到台账页面
- navigateToShow(e) {
- uni.navigateTo({
- url: '../show/show?card_number=' + this.card_number,
- });
- },
- //增加固定金额
- add_money(e) {
- this.add_class1 = 0
- this.addMoney = e.currentTarget.dataset.item
- this.confirm_room('add_money')
- },
- confirm_room(op) {
- // 检查房间号
- if (this.roomSelect == '') {
- uni.showToast({
- title: '请选择房间号',
- icon: 'success'
- })
- return
- }
- // 输入金额进行充值
- if (op == 'input_money') {
- //判断输入是否为空或不是数字
- if (this.inputMoney == '' || this.inputMoney == null) {
- uni.showToast({
- title: '请输入充值金额',
- duration: 2000
- })
- return
- }
- if (isNaN(this.inputMoney)) {
- uni.showToast({
- title: '请输入数值',
- duration: 2000
- })
- return
- }
- if (!this.test) {
- if (this.inputMoney > 200 || this.inputMoney < 10) {
- uni.showToast({
- title: '限额10~200元',
- duration: 2000
- })
- return
- }
- }
- this.addMoney = this.inputMoney
- }
- // 确认充值对话框
- this.confirm_dialog()
- },
- // 确认充值对话框
- confirm_dialog() {
- uni.showModal({
- // title: '确定充值'+this.inputMoney+'元',
- title: '确定充值' + this.addMoney + '元',
- success: (res) => {
- if (res.confirm) {
- this.jsapi()
- } else if (res.cancel) {
- console.log('用户点击取消');
- }
- }
- })
- },
- //增加可变金额
- input_money(e) {
- // console.log(e)
- this.confirm_room('input_money')
- },
- //准备支付
- async jsapi() {
- const res = await this.$myRequest({
- host: 'wecard',
- url: "/cgi-bin/pay/app/mppay",
- method: 'POST',
- header: {
- 'content-type': 'application/json'
- },
- data: {
- 'access_token': this.access_token,
- 'sub_appid': this.sub_appid,
- 'user_id': this.card_number,
- "order_id": this.order_id = this.$getOrderId('dianfei'),
- "amount": this.addMoney * 100,
- 'order_type': 1,
- 'callback_url': ''
- }
- })
- if (res.data.code == 0) {
- this.pay_info = res.data.data.pay_info
- // 发起支付
- this.pay_amount()
- } else {
- uni.showToast({
- icon: 'none',
- title: res.data.message,
- duration: 3000
- })
- }
- },
- // 调起支付
- pay_amount() {
- var OpenMidas = require("@/static/openMidas.js"); // 引入小程序目录下的SDK文件
- // 设置支付配置
- wx['OpenMidasConfig'] = {
- apiCommonConf: {
- version: "weixiao"
- },
- cgiDomain: {
- test: "midas.weixiao.qq.com/api", // 私有化参数联系微卡客服进行获取
- },
- webDomain: "https://midas.weixiao.qq.com/h5", // 私有化参数联系微卡客服进行获取
- sandboxWebDomain: "https://midas.weixiao.qq.com/h5" // 私有化参数联系微卡客服进行获取
- }
- var payInfo = this.pay_info; // 请求mppay接口返回的数据
- // console.log(payInfo)
- var appMetaData = "app=test&version=1.1"; // 自定义回调数据
- OpenMidas.init("test");
- OpenMidas.pay(
- payInfo,
- function(resultCode, innerCode, resultMsg, appMetaData) {
- console.log(resultCode); // 支付响应状态码
- console.log(innerCode); // 支付响应内部错误码
- console.log(resultMsg); // 支付响应说明
- console.log(appMetaData); // 自定义回调数据
- // todo:处理业务逻辑
- },
- appMetaData
- );
- },
- /**
- * 输入充值金额
- */
- onInput(e) {
- if (this.test) {
- return
- }
- const v = e.detail.value
- this.inputMoney = 10
- const zero = /^(0{1,})|[^0-9]/g
- let final = 0
- if (!v) {
- final = 0
- } else {
- final = v.toString().replace(zero, (v) => {
- return 0
- })
- if (final.split('')[0] * 1 === 0) {
- final = final.slice(1) - 0 || 0
- }
- if (final > 200) {
- final = 200
- }
- }
- this.$nextTick(() => {
- this.inputMoney = final.toString() || '0'
- })
- },
- /**
- * 失去焦点时
- */
- onBlur() {
- if (this.test) {
- return
- }
- if (this.inputMoney < 10) {
- this.inputMoney = 10
- }
- }
- },
- }
- </script>
- <style>
- @import url("jiaofei.css");
- </style>
|