laosan2382995021@163.com 4 vuotta sitten
vanhempi
commit
fc9b5c86ac
72 muutettua tiedostoa jossa 1326 lisäystä ja 45 poistoa
  1. 6 1
      src/components/flat-list/mixins/handle.ts
  2. 2 0
      src/components/flat-list/mixins/on.ts
  3. 6 0
      src/components/flat-list/props.ts
  4. 6 0
      src/components/flat-list/src/main.vue
  5. 12 0
      src/components/flat-list/style.scss
  6. 2 1
      src/components/tab/mixins/handle.ts
  7. 23 1
      src/config/user.ts
  8. 3 2
      src/layout/layout-order-item/mixins/handle.ts
  9. 9 0
      src/layout/layout-order/mixins/handle.ts
  10. 3 0
      src/layout/layout-wallet/index.ts
  11. 7 0
      src/layout/layout-wallet/props.ts
  12. 27 0
      src/layout/layout-wallet/src/main.vue
  13. 19 0
      src/layout/layout-wallet/style.scss
  14. 74 0
      src/mixins/trigger/class/down.ts
  15. 7 1
      src/mixins/trigger/class/index.ts
  16. 98 0
      src/mixins/trigger/class/location.ts
  17. 5 0
      src/mixins/trigger/index.ts
  18. 8 0
      src/popup/popup-detail/components/game/mixins/handle.ts
  19. 15 0
      src/popup/popup-exchange-coin/global.scss
  20. 3 0
      src/popup/popup-exchange-coin/index.ts
  21. 83 0
      src/popup/popup-exchange-coin/mixins/handle.ts
  22. 5 0
      src/popup/popup-exchange-coin/mixins/index.ts
  23. 81 0
      src/popup/popup-exchange-coin/src/main.vue
  24. 65 0
      src/popup/popup-exchange-coin/style.scss
  25. 3 1
      src/popup/popup-export/components.ts
  26. 7 1
      src/popup/popup-export/const/index.ts
  27. 41 0
      src/popup/popup-help/data/data.ts
  28. BIN
      src/popup/popup-help/images/info.png
  29. BIN
      src/popup/popup-help/images/okami.png
  30. BIN
      src/popup/popup-help/images/order.png
  31. BIN
      src/popup/popup-help/images/pay.png
  32. BIN
      src/popup/popup-help/images/privacy.png
  33. BIN
      src/popup/popup-help/images/rules.png
  34. BIN
      src/popup/popup-help/images/withdrawal.png
  35. 3 0
      src/popup/popup-help/index.ts
  36. 25 0
      src/popup/popup-help/mixins/handle.ts
  37. 6 0
      src/popup/popup-help/mixins/index.ts
  38. 10 0
      src/popup/popup-help/props.ts
  39. 52 0
      src/popup/popup-help/src/main.vue
  40. 52 0
      src/popup/popup-help/style.scss
  41. 19 1
      src/popup/popup-message/const/type.ts
  42. 24 0
      src/popup/popup-message/data/type.ts
  43. 1 1
      src/popup/popup-order/mixins/handle.ts
  44. 3 0
      src/popup/popup-personal/components/index.ts
  45. 10 0
      src/popup/popup-personal/components/my-wallet/components/wallet-info/data/tab.ts
  46. 3 0
      src/popup/popup-personal/components/my-wallet/components/wallet-info/index.ts
  47. 8 0
      src/popup/popup-personal/components/my-wallet/components/wallet-info/props.ts
  48. 66 0
      src/popup/popup-personal/components/my-wallet/components/wallet-info/src/main.vue
  49. 26 0
      src/popup/popup-personal/components/my-wallet/components/wallet-info/style.scss
  50. 3 0
      src/popup/popup-personal/components/my-wallet/components/wallet-list/index.ts
  51. 13 0
      src/popup/popup-personal/components/my-wallet/components/wallet-list/props.ts
  52. 87 0
      src/popup/popup-personal/components/my-wallet/components/wallet-list/src/main.vue
  53. 3 0
      src/popup/popup-personal/components/my-wallet/components/wallet-list/style.scss
  54. 37 0
      src/popup/popup-personal/components/my-wallet/data/data.ts
  55. 14 0
      src/popup/popup-personal/components/my-wallet/data/tab.ts
  56. 3 0
      src/popup/popup-personal/components/my-wallet/index.ts
  57. 3 0
      src/popup/popup-personal/components/my-wallet/mixins/index.ts
  58. 99 0
      src/popup/popup-personal/components/my-wallet/src/main.vue
  59. 70 0
      src/popup/popup-personal/components/my-wallet/style.scss
  60. 2 1
      src/popup/popup-personal/data/menu.ts
  61. 1 1
      src/popup/popup-personal/props.ts
  62. 28 20
      src/store/modules/user.ts
  63. 8 1
      src/utils/control/order/const/order.ts
  64. 1 1
      src/utils/control/order/data/button-group.ts
  65. 4 0
      src/utils/control/order/data/title.ts
  66. 2 2
      src/utils/control/order/data/updateConfig.ts
  67. 1 1
      src/utils/request/instructions/plugins/config.ts
  68. 1 1
      src/utils/verification/verifiction.d.ts
  69. 9 4
      src/views/view-footer/data/control.ts
  70. 6 2
      src/views/view-header/data/control.ts
  71. 2 1
      src/views/view-header/mixins/index.ts
  72. 1 0
      src/views/view-header/src/main.vue

+ 6 - 1
src/components/flat-list/mixins/handle.ts

@@ -1,5 +1,6 @@
 import unit from '$utils/unit/unit';
 import {FlatListReload} from "$components/flat-list/const";
+import Status from "$mixins/status/const/status";
 
 export default <LibMixins>{
 
@@ -27,6 +28,10 @@ export default <LibMixins>{
 
             if (this._status === this.constStatus.loading && !must) return;
 
+            if (this.start) {
+                this.setStatus(Status.default);
+            }
+
             if (
                 this._status === this.constStatus.fail
             ) {
@@ -60,7 +65,6 @@ export default <LibMixins>{
                     this.config.page++;
                 }
 
-
                 if (this.hasPaging !== hasPage) {
                     this.hasPaging = hasPage;
                 }
@@ -145,6 +149,7 @@ export default <LibMixins>{
             ) {
                 // 重置分页
                 this.config.page = 1;
+                this.hasPaging = true;
             }
 
             if(

+ 2 - 0
src/components/flat-list/mixins/on.ts

@@ -16,6 +16,8 @@ export default <LibMixins>{
 
                 if (this.data.length <= 0) {
                     return this.reload(FlatListReload.start);
+                } else if (this.hasPaging && this.data.length < this.pageSize) {
+                    return this.reload(FlatListReload.next);
                 }
 
             }

+ 6 - 0
src/components/flat-list/props.ts

@@ -40,6 +40,12 @@ export default {
     first:{
         type:Boolean,
         default: true
+    },
+
+    // 为空的提示文本
+    emptyText:{
+        type:String,
+        default:'暂无数据'
     }
 
 }

+ 6 - 0
src/components/flat-list/src/main.vue

@@ -13,6 +13,12 @@
             <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"></animateTransform>
         </path>
       </svg>
+
+      <section v-else-if="status === constStatus.none" class="screen center">
+        <svg class="flat-empty-icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7927" width="200" height="200"><path d="M544 0C281.6 0 64 217.6 64 480S281.6 960 544 960 1024 742.4 1024 480 806.4 0 544 0z m0 896C313.6 896 128 710.4 128 480S313.6 64 544 64 960 249.6 960 480 774.4 896 544 896z m-128-512h-128c-19.2 0-32-12.8-32-32s12.8-32 32-32h128c19.2 0 32 12.8 32 32s-12.8 32-32 32z m416-32c0 19.2-12.8 32-32 32h-128c-19.2 0-32-12.8-32-32s12.8-32 32-32h128c19.2 0 32 12.8 32 32z m-128 384c0 19.2-12.8 32-32 32s-32-12.8-32-32c0-51.2-44.8-96-96-96S448 684.8 448 736c0 19.2-12.8 32-32 32s-32-12.8-32-32C384 646.4 454.4 576 544 576s160 70.4 160 160z" fill="rgba(255,255,255,0.5)" p-id="7928"></path></svg>
+        <div class="flat-empty-title">{{emptyText}}</div>
+      </section>
+
     </aside>
     <scroll-view
       v-else-if="!start"

+ 12 - 0
src/components/flat-list/style.scss

@@ -11,6 +11,18 @@
 }
 /* 加载中 */
 
+/* 加载为空 */
+.flat-empty-icon{
+  @include square(80px);
+}
+.flat-empty-title{
+  font-size: 16px;
+  color: rgba(255,255,255,0.5);
+  text-align: center;
+  margin-top: 10px;
+}
+/* 加载为空 */
+
 /* 底部模块 */
 .flat-list-footer{
   height: 30px;

+ 2 - 1
src/components/tab/mixins/handle.ts

@@ -36,6 +36,7 @@ export default <LibMixins>{
                     if (this.vUseTabData && this.vUseTabData[value].loading !== true) {
                         this.vUseTabData[value].loading = true;
                     }
+
                     // 查看是否需要变更 swiper
                     if (this.swiper && this.swiper.realIndex !== value) {
                         this.swiper.slideTo(value);
@@ -63,7 +64,7 @@ export default <LibMixins>{
                             loading: false
                         }
                     } else {
-                        result = item;
+                        result = JSON.parse(JSON.stringify(item));
                     }
 
                     // 设置 loading

+ 23 - 1
src/config/user.ts

@@ -1,3 +1,6 @@
+import popup from "$utils/tool/popup";
+import {PopupExportComponent} from "$popup/popup-export/const";
+
 export default {
 
     // 默认缓存多久
@@ -10,6 +13,25 @@ export default {
     storageKey:'user',
 
     // 校验唯一值
-    stringify:''
+    stringify:'',
+
+    // 是否登录
+    isLogin(){
+        return this.user && this.user.login_token;
+    },
+
+    // 校验登录
+    verificationLogin(){
+
+        let result = this.isLogin();
+
+        if (!result) {
+            popup.$popup && popup.$popup.open(PopupExportComponent.login);
+        }
+
+        return result;
+
+    }
+
 
 }

+ 3 - 2
src/layout/layout-order-item/mixins/handle.ts

@@ -65,10 +65,11 @@ export default <LibMixins>{
                                 }
                             }
                             // 调用接口更新 防止出现意外
-                            this.$store.dispatch('updateUserInfoPromise');
+                            this.$store.dispatch('updateUserMoneyPromise');
 
                             // 设置订单已取消
-                            return this.updateOrderStatus(this.item,OrderPayStatus.delete);
+                            return this.updateOrderStatus(this.item,OrderPayStatus.cancel);
+
                         }
                     })
                 }

+ 9 - 0
src/layout/layout-order/mixins/handle.ts

@@ -5,6 +5,7 @@ import money from "$utils/tool/money";
 import orderControl from "$utils/control/order";
 
 import modeData from '../data/mode';
+import {OrderPayStatus} from "$utils/control/order/const/order";
 
 export default <LibMixins>{
 
@@ -37,6 +38,14 @@ export default <LibMixins>{
 
                     item.total_amount = money.checkIntMoney(item.total_amount);
 
+                    // 执行判断状态是否为取消
+                    if (item.is_over == 3 && item.status === OrderPayStatus.completed) {
+                        item.status = OrderPayStatus.cancel;
+                    } else if (item.is_over == 2) {
+                        item.status = OrderPayStatus.overtime;
+                    }
+
+
                     item.buttonGroup = orderControl.getButtonGroup(item.status,this.orderStatus);
 
                     item.statusName = orderControl.getStatusName(item.status,this.orderStatus);

+ 3 - 0
src/layout/layout-wallet/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 7 - 0
src/layout/layout-wallet/props.ts

@@ -0,0 +1,7 @@
+export default {
+
+    item:{
+        type:Object,
+        default:{}
+    }
+}

+ 27 - 0
src/layout/layout-wallet/src/main.vue

@@ -0,0 +1,27 @@
+<template>
+  <aside class="layout-wallet rowACenter">
+    <section class="flex-1 overflow">
+      <div class="layout-wallet-title line-1">{{item.change_type_desc}}</div>
+      <div class="layout-wallet-time  line-1">{{item.add_time_format}}</div>
+    </section>
+    <div class="layout-wallet-price">{{item.change_value}}</div>
+  </aside>
+</template>
+
+<script>
+import {
+  vImage,
+  icon
+} from '$components';
+import props from '../props';
+export default {
+  name: "layout-wallet",
+  components:{
+    icon,
+    vImage
+  },
+  props
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>

+ 19 - 0
src/layout/layout-wallet/style.scss

@@ -0,0 +1,19 @@
+/* 模块 */
+.layout-wallet{
+  width: 100%;
+  height: 76px;
+  border-bottom: 1px solid rgba(255,255,255,0.22);
+  font-size: 14px;
+  line-height: 20px;
+  font-weight: 400;
+}
+.layout-wallet-time{
+  font-size: 12px;
+  color: rgba(255,255,255,0.4);
+  margin-top: 6px;
+}
+.layout-wallet-price{
+  font-size: 18px;
+  line-height: 25px;
+}
+/* 模块 */

+ 74 - 0
src/mixins/trigger/class/down.ts

@@ -0,0 +1,74 @@
+import {Vue} from "vue-class-component";
+
+// 常规使用的参数
+type DownUseDefaultParams = string;
+
+// 如果为函数触发
+interface DownFunction {
+    (item: LibData, index:number, Down:Vue): DownUseDefaultParams
+}
+
+// 作为异步导出的函数
+type AsyncExport = Promise<DownUseDefaultParams>;
+
+// 如果为异步函数触发
+interface DownAsyncFunction {
+    (item: LibData, index:number, Down:Vue): AsyncExport
+}
+// 可传入的参数列表
+type DownUseParams = DownUseDefaultParams | DownFunction | DownAsyncFunction;
+
+export default class Down implements Trigger {
+
+
+    // 跳转路由的参数
+    private readonly DownParams: DownUseParams;
+
+    // 构造器
+    constructor(DownParams: DownUseParams){
+        this.DownParams = DownParams;
+    }
+
+    // 触发
+    trigger(item:LibData, index:number, Down:Vue): void {
+
+        let DownParams:DownUseDefaultParams | AsyncExport = this.getDownParams(item,index,Down);
+
+        /* 如果为异步触发 */
+        if (DownParams instanceof Promise) {
+            DownParams.then((DownParams:DownUseDefaultParams)=> this.triggerDown(DownParams,Down)).catch((DownParams:DownUseDefaultParams)=> this.triggerDown(DownParams,Down));
+        } else {
+            return this.triggerDown(DownParams,Down);
+        }
+
+
+    }
+
+    // 获取参数
+    getDownParams(item:LibData, index:number, Down:Vue):DownUseDefaultParams | AsyncExport{
+
+        let DownParams:DownUseDefaultParams | AsyncExport;
+
+        if (typeof this.DownParams === 'function') {
+            DownParams = this.DownParams(item,index,Down);
+        } else {
+            DownParams = this.DownParams;
+        }
+
+        return DownParams;
+
+
+    }
+
+    // 执行跳转
+    triggerDown(params:DownUseDefaultParams,Down:Vue) : void{
+        let aEl = document.createElement("a");
+        aEl.download = params.split('/').pop();
+        aEl.href = params;
+        aEl.setAttribute('style','display:none');
+        document.body.appendChild(aEl);
+        aEl.click();
+        aEl.parentNode.removeChild(aEl);
+    }
+
+}

+ 7 - 1
src/mixins/trigger/class/index.ts

@@ -2,7 +2,13 @@ import RouterTrigger from './router';
 
 import FunctionTrigger from './function';
 
+import LocationTrigger from "./location";
+
+import DownTrigger from './down';
+
 export {
    FunctionTrigger,
-    RouterTrigger
+   RouterTrigger,
+   LocationTrigger,
+   DownTrigger
 }

+ 98 - 0
src/mixins/trigger/class/location.ts

@@ -0,0 +1,98 @@
+import {Vue} from "vue-class-component";
+export enum LocationMode {
+    open='open',
+    replace='replace',
+    href='href'
+}
+
+export interface LocationConfig {
+    // 跳转方式
+    mode?: LocationMode,
+}
+
+// 常规使用的参数
+type LocationUseDefaultParams = string;
+
+// 如果为函数触发
+interface LocationFunction {
+    (item: LibData, index:number, Location:Vue): LocationUseDefaultParams
+}
+
+// 作为异步导出的函数
+type AsyncExport = Promise<LocationUseDefaultParams>;
+
+// 如果为异步函数触发
+interface LocationAsyncFunction {
+    (item: LibData, index:number, Location:Vue): AsyncExport
+}
+// 可传入的参数列表
+type LocationUseParams = LocationUseDefaultParams | LocationFunction | LocationAsyncFunction;
+
+export default class Location implements Trigger {
+
+    /* 跳转方式 */
+    static LocationMode = LocationMode;
+
+    // 跳转的方式
+    private readonly config:LocationConfig | undefined;
+
+    // 跳转路由的参数
+    private readonly LocationParams: LocationUseParams;
+
+    // 构造器
+    constructor(LocationParams: LocationUseParams,config:LocationConfig | undefined = undefined){
+        /* 初始化设置 */
+        this.config = config;
+        this.LocationParams = LocationParams;
+    }
+
+    // 触发
+    trigger(item:LibData, index:number, Location:Vue): void {
+
+        let LocationParams:LocationUseDefaultParams | AsyncExport = this.getLocationParams(item,index,Location);
+
+        /* 如果为异步触发 */
+        if (LocationParams instanceof Promise) {
+            LocationParams.then((LocationParams:LocationUseDefaultParams)=> this.triggerLocation(LocationParams,Location)).catch((LocationParams:LocationUseDefaultParams)=> this.triggerLocation(LocationParams,Location));
+        } else {
+            return this.triggerLocation(LocationParams,Location);
+        }
+
+
+    }
+
+    // 获取参数
+    getLocationParams(item:LibData, index:number, Location:Vue):LocationUseDefaultParams | AsyncExport{
+
+        let LocationParams:LocationUseDefaultParams | AsyncExport;
+
+        if (typeof this.LocationParams === 'function') {
+            LocationParams = this.LocationParams(item,index,Location);
+        } else {
+            LocationParams = this.LocationParams;
+        }
+
+        return LocationParams;
+
+
+    }
+
+    // 执行跳转
+    triggerLocation(params:LocationUseDefaultParams,Location:Vue) : void{
+
+        let mode:LocationMode = this.getLocationMode();
+        if (mode === LocationMode.open) {
+            window[mode](params);
+        } else {
+            // @ts-ignore
+            window.location[mode] = params;
+        }
+
+    }
+
+    // 获取跳转方式
+    getLocationMode():LocationMode{
+        return  this.config && this.config.mode ? this.config.mode : LocationMode.open;
+    }
+
+}

+ 5 - 0
src/mixins/trigger/index.ts

@@ -1,3 +1,5 @@
+import user from '$config/user';
+
 export default {
 
     methods:{
@@ -5,6 +7,9 @@ export default {
         /* 触发 */
         trigger(item:LibData, index:number):void{
             if (item.trigger) {
+
+                if (item.login && !user.verificationLogin()) return ;
+
                 return item.trigger.trigger(item,index,this);
             }
         }

+ 8 - 0
src/popup/popup-detail/components/game/mixins/handle.ts

@@ -118,6 +118,14 @@ export default <LibMixins>{
 
     created(){
         this._playStatus = PlayStatus.none;
+    },
+
+    beforeUnmount() {
+        clearTimeout(this._playStatusTime);
+        // 如果处于播放状态触发
+        if (this.playStatus === PlayStatus.play && this.playStatus !== PlayStatus.none && this.playStatus !== PlayStatus.pause){
+            return audio.destroy();
+        }
     }
 
 

+ 15 - 0
src/popup/popup-exchange-coin/global.scss

@@ -0,0 +1,15 @@
+@import "../popup-recharge/global.scss";
+
+.exchange-input {
+  border-bottom:none !important;
+}
+.exchange-input,.exchange-input .ant-input-number-input-wrap ,.exchange-input input{
+  width: 100% !important;
+  height: 100% !important;
+}
+.exchange-input input{
+  padding: 0 14px;
+  font-size: 18px;
+  line-height: 20px;
+  font-weight: 400;
+}

+ 3 - 0
src/popup/popup-exchange-coin/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 83 - 0
src/popup/popup-exchange-coin/mixins/handle.ts

@@ -0,0 +1,83 @@
+import verification, {VerificationType} from '$utils/verification';
+
+import popup from "$utils/tool/popup";
+
+export default <LibMixins>{
+
+    data(){
+      return{
+          moneyValue:'',
+          disabled:false
+      }
+    },
+
+    computed:{
+        integral(){
+            return (this.moneyValue || 0) * (this.$store.state.pay.payRatio || 0);
+        }
+    },
+
+    methods:{
+
+        allExChange(){
+
+            if (this.disabled) return;
+
+            let intMoney = parseInt(this.$store.getters.money);
+
+            if (this.moneyValue !== intMoney) {
+                this.moneyValue = intMoney;
+            }
+        },
+
+        submitVerify(callback){
+
+            if (!verification.trigger[VerificationType.empty](this.moneyValue)) {
+                return popup.$toast('请输入兑换金额');
+            } else if (this.moneyValue > this.$store.getters.money) {
+                return popup.$toast('兑换金额不能大于余额');
+            }
+
+            return callback();
+
+        },
+
+        submit(obj){
+
+            let value = this.moneyValue;
+            let integral = this.integral;
+            return this.$request({
+                url:'user/exchange',
+                data:{
+                  money: value
+                },
+                next:({status})=>{
+                    this.disabled = status;
+                },
+                token:true,
+                message:true,
+                failMessage:true
+            }).then((data)=>{
+
+                if (data.isSuccess) {
+
+                    this.user = {
+                        money: this.$store.getters.money - value,
+                        integral: this.$store.getters.integral + integral
+                    }
+
+                    // 执行更新 补救措施
+                    this.$store.dispatch('updateUserMoneyPromise');
+
+                    return  this.close();
+                }
+
+                return obj.none();
+
+            }).catch(obj.none);
+
+        }
+
+    }
+
+}

+ 5 - 0
src/popup/popup-exchange-coin/mixins/index.ts

@@ -0,0 +1,5 @@
+import popup from "$mixins/popup";
+import handle from './handle';
+import user from '$mixins/user';
+
+export default [popup,handle,user];

+ 81 - 0
src/popup/popup-exchange-coin/src/main.vue

@@ -0,0 +1,81 @@
+<template>
+  <popup v-model:value="value" header-title="余额兑换巧鱼币" content-animate="scale" @close="$emit('destroy-popup')">
+    <section class="recharge-container exchange-container relative jCenter">
+      <div @click="close" class="recharge-close-wrap cursor-pointer absolute animate-rotate-hover">
+        <icon type="close" class="recharge-close"></icon>
+      </div>
+
+      <section class="screen">
+
+        <aside class="rowACenter exchange-item exchange-item-margin">
+          <div class="exchange-label">我的余额:</div>
+          <div class="flex-1">
+            <div class="line-1 exchange-value">{{$store.getters.money}}</div>
+          </div>
+        </aside>
+
+        <aside class="rowACenter exchange-item">
+          <div class="exchange-label">兑换金额</div>
+          <div class="exchange-input-warp">
+            <a-input-number
+                class="recording-input screen exchange-input"
+                :min="1"
+                :precision="0"
+                v-model:value="moneyValue"
+                :max="$store.getters.money"
+                :disabled="disabled"
+            ></a-input-number>
+          </div>
+          <div @click="allExChange" class="exchange-all-button"
+            :class="{
+              'button-active': !disabled
+            }"
+          >全部兑换</div>
+        </aside>
+
+        <aside class="rowACenter exchange-item">
+          <div class="exchange-label">巧鱼币</div>
+          <img src="@/assets/images/currency.png" class="exchange-currency-icon" />
+          <div class="flex-1">
+            <div class="line-1 exchange-value">{{integral}}</div>
+          </div>
+        </aside>
+
+        <div class="center">
+          <v-button @submit-verify="submitVerify" @submit="submit" class="exchange-button">立即兑换</v-button>
+        </div>
+
+        <div class="exchange-introduce">兑换为巧鱼币后,可在平台内消费,购买礼物,不可提现</div>
+
+
+      </section>
+
+    </section>
+  </popup>
+</template>
+
+<script>
+import {
+  Popup,
+  icon,
+  vButton
+} from '$components';
+import {
+  InputNumber
+} from 'ant-design-vue';
+import mixins from '../mixins';
+export default {
+  name: "popup-exchange-coin",
+  components:{
+    Popup,
+    icon,
+    vButton,
+    [InputNumber.name]:InputNumber
+  },
+  mixins
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>
+
+<style lang="scss" src="../global.scss"></style>

+ 65 - 0
src/popup/popup-exchange-coin/style.scss

@@ -0,0 +1,65 @@
+@import "../popup-message/style";
+
+.exchange-container{
+  height: 423px;
+}
+
+.exchange-item-margin{
+  margin-top: 15px;
+}
+.exchange-item{
+  margin-bottom: 40px;
+}
+
+.exchange-label{
+  width: 90px;
+  font-weight: bold;
+}
+.exchange-label,.exchange-value{
+  font-size: 18px;
+  line-height: 20px;
+}
+
+.exchange-value{
+  font-weight: 400;
+}
+
+.exchange-currency-icon{
+  @include square(17px);
+  margin-right: 6px;
+  position: relative;
+  top: -1px;
+}
+
+.exchange-input-warp{
+  width: 292px;
+  height: 42px;
+  background-color: rgba(255,255,255,0.1);
+  border-radius: 21px;
+}
+
+.exchange-all-button{
+  padding: 8px 12px;
+  line-height: 14px;
+  font-size: 14px;
+  font-weight: 400;
+  margin-left: 10px;
+  background-color: rgba(255,255,255,0.1);
+  border-radius: 15px;
+}
+
+.exchange-button{
+  width: 295px;
+  height: 50px;
+  border-radius: 25px;
+  font-size: 18px;
+  line-height: 22px;
+  margin-top: 20px;
+}
+
+.exchange-introduce{
+  font-size: 14px;
+  line-height: 18px;
+  text-align: center;
+  margin-top: 15px;
+}

+ 3 - 1
src/popup/popup-export/components.ts

@@ -13,5 +13,7 @@ export default {
     [PopupExportComponent.detail]: defineAsyncComponent(()=> import('$popup/popup-detail')),
     [PopupExportComponent.order]: defineAsyncComponent(()=> import('$popup/popup-order')),
     [PopupExportComponent.recharge]: defineAsyncComponent(()=> import('$popup/popup-recharge')),
-    [PopupExportComponent.message]: defineAsyncComponent(()=> import('$popup/popup-message'))
+    [PopupExportComponent.message]: defineAsyncComponent(()=> import('$popup/popup-message')),
+    [PopupExportComponent.help]: defineAsyncComponent(()=> import('$popup/popup-help')),
+    [PopupExportComponent.exchangeCoin]: defineAsyncComponent(()=> import('$popup/popup-exchange-coin'))
 }

+ 7 - 1
src/popup/popup-export/const/index.ts

@@ -34,7 +34,13 @@ const enum PopupExportComponent {
     recharge='popup-recharge',
 
     // 介绍消息
-    message='popup-message'
+    message='popup-message',
+
+    // 帮助
+    help='popup-help',
+
+    // 兑换巧鱼币
+    exchangeCoin='popup-exchange-coin'
 
 }
 

+ 41 - 0
src/popup/popup-help/data/data.ts

@@ -0,0 +1,41 @@
+import {ExportType} from "$popup/popup-message/const/type";
+import typeData from '$popup/popup-message/data/type';
+
+let data = [
+    {
+        icon:require('../images/rules.png'),
+        type: ExportType.rules
+    },
+    {
+        icon:require('../images/info.png'),
+        type: ExportType.info
+    },
+    {
+        icon:require('../images/order.png'),
+        type: ExportType.orderProblem
+    },
+    {
+        icon:require('../images/withdrawal.png'),
+        type: ExportType.withdrawal
+    },
+    {
+        icon:require('../images/privacy.png'),
+        type: ExportType.privacy
+    },
+    {
+        icon: require('../images/okami.png'),
+        type: ExportType.become
+    },
+    {
+        icon:require('../images/pay.png'),
+        type: ExportType.payProblem
+    }
+] as LibDataArray
+
+data.map((item)=>{
+
+    item.label = typeData[item.type].label;
+
+});
+
+export default data;

BIN
src/popup/popup-help/images/info.png


BIN
src/popup/popup-help/images/okami.png


BIN
src/popup/popup-help/images/order.png


BIN
src/popup/popup-help/images/pay.png


BIN
src/popup/popup-help/images/privacy.png


BIN
src/popup/popup-help/images/rules.png


BIN
src/popup/popup-help/images/withdrawal.png


+ 3 - 0
src/popup/popup-help/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 25 - 0
src/popup/popup-help/mixins/handle.ts

@@ -0,0 +1,25 @@
+import data from '../data/data';
+import popup from "$utils/tool/popup";
+import {PopupExportComponent} from "$popup/popup-export/const";
+export default <LibMixins>{
+
+    data(){
+        return {
+            data
+        }
+    },
+
+    methods:{
+
+        trigger(item){
+
+            this.close();
+
+            return popup.$popup && popup.$popup.open(PopupExportComponent.message,{
+                type: item.type
+            });
+        }
+
+    }
+
+}

+ 6 - 0
src/popup/popup-help/mixins/index.ts

@@ -0,0 +1,6 @@
+import popup from "$mixins/popup";
+import handle from './handle';
+import pay from '$mixins/pay';
+import user from '$mixins/user';
+
+export default [popup,pay,handle,user];

+ 10 - 0
src/popup/popup-help/props.ts

@@ -0,0 +1,10 @@
+import {ExportType} from "$popup/popup-message/const/type";
+
+export default {
+
+    type:{
+        type: Number,
+        default: ExportType.privacy
+    }
+
+}

+ 52 - 0
src/popup/popup-help/src/main.vue

@@ -0,0 +1,52 @@
+<template>
+  <popup v-model:value="value" header-title="帮助中心" content-animate="scale" @close="$emit('destroy-popup')">
+    <section class="recharge-container help-container relative jCenter">
+      <div @click="close" class="recharge-close-wrap cursor-pointer absolute animate-rotate-hover">
+        <icon type="close" class="recharge-close"></icon>
+      </div>
+
+      <div class="help-title">您可以选择相应模块查看常见问题的解决方案</div>
+
+      <section class="help-group row wrap">
+        <aside
+          v-for="(item,index) in data"
+          :key="'help-item-'+index"
+          class="help-item center cursor-pointer"
+          @click="trigger(item)"
+        >
+          <v-image backgroundColor="transparent" :src="item.icon" mode="center" class="help-icon"></v-image>
+          <div class="help-item-label">{{item.label}}</div>
+        </aside>
+      </section>
+
+      <div class="help-introduce">订单异常,投诉举报</div>
+      <div class="center">
+        <v-button class="help-button">联系客服</v-button>
+      </div>
+    </section>
+  </popup>
+</template>
+
+<script>
+import {
+  Popup,
+  icon,
+  vImage,
+  vButton
+} from '$components';
+import mixins from '../mixins';
+import props from '../props';
+export default {
+  name: "popup-help",
+  components:{
+    Popup,
+    icon,
+    vImage,
+    vButton
+  },
+  mixins,
+  props
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>

+ 52 - 0
src/popup/popup-help/style.scss

@@ -0,0 +1,52 @@
+@import "../popup-message/style";
+
+/* 模块样式 */
+.help-container{
+  padding-left: 90px;
+  padding-right: 90px;
+}
+.help-title {
+  font-size: 16px;
+  line-height: 20px;
+  text-align: center;
+  margin-top: 20px;
+}
+/* 模块样式 */
+
+/* 帮助中心类型 */
+.help-group{
+  margin-top: 10px;
+}
+.help-item{
+  width: 150px;
+  height: 120px;
+  border-radius: 5px;
+  background-color: rgba(255,255,255,0.1);
+  margin-right: 20px;
+  margin-top: 20px;
+}
+.help-item:nth-of-type(4n){
+  margin-right: 0;
+}
+.help-icon{
+  @include square(34px);
+}
+.help-item-label{
+  font-size: 14px;
+  line-height: 16px;
+  margin-top: 20px;
+}
+.help-introduce{
+  text-align: center;
+  margin-top: 55px;
+  line-height: 14px;
+  font-size: 12px;
+}
+.help-button{
+  margin-top: 10px;
+  width: 100px;
+  height: 26px;
+  border-radius: 13px;
+  font-size: 14px;
+}
+/* 帮助中心类型 */

+ 19 - 1
src/popup/popup-message/const/type.ts

@@ -4,7 +4,25 @@ enum ExportType {
     privacy,
 
     // 充值服务协议
-    recharge
+    recharge,
+
+    // 平台规则
+    rules,
+
+    // 信息规范
+    info,
+
+    // 订单问题
+    orderProblem,
+
+    // 充值提现
+    withdrawal,
+
+    // 成为大神
+    become,
+
+    // 支付问题
+    payProblem
 
 }
 

+ 24 - 0
src/popup/popup-message/data/type.ts

@@ -8,6 +8,30 @@ export default {
 
     [ExportType.recharge]:{
         label:'充值服务协议'
+    },
+
+    [ExportType.rules]:{
+        label:'平台规则'
+    },
+
+    [ExportType.info]:{
+        label:'信息规范'
+    },
+
+    [ExportType.orderProblem]:{
+        label:'订单问题'
+    },
+
+    [ExportType.withdrawal]:{
+        label:'充值提现'
+    },
+
+    [ExportType.become]:{
+        label:'成为大神'
+    },
+
+    [ExportType.payProblem]:{
+        label:'支付问题'
     }
 
 } as {[key in ExportType]:LibData}

+ 1 - 1
src/popup/popup-order/mixins/handle.ts

@@ -76,7 +76,7 @@ export default <LibMixins>{
                     }
 
                     // 调用接口更新 防止出现意外
-                    this.$store.dispatch('updateUserInfoPromise');
+                    this.$store.dispatch('updateUserMoneyPromise');
 
                     return this.close();
                 }

+ 3 - 0
src/popup/popup-personal/components/index.ts

@@ -5,6 +5,9 @@ export default {
     // 个人资料
     personalData: defineAsyncComponent(()=> import('./personal-data')),
 
+    // 我的钱包
+    myWallet: defineAsyncComponent(()=> import('./my-wallet')),
+
     // 我的订单
     myOrder: defineAsyncComponent(()=> import('./my-order'))
 

+ 10 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-info/data/tab.ts

@@ -0,0 +1,10 @@
+export default [
+    {
+        label:'巧鱼币明细',
+        slot:'2'
+    },
+    {
+        label:'余额明细',
+        slot:'1'
+    }
+]

+ 3 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-info/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 8 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-info/props.ts

@@ -0,0 +1,8 @@
+export default {
+
+    type:{
+        type: [Number,String],
+        default: '0'
+    }
+
+}

+ 66 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-info/src/main.vue

@@ -0,0 +1,66 @@
+<template>
+  <section class="screen wallet-container">
+    <tab
+        :data="tabData"
+    >
+      <template v-slot:header="{data,trigger,select}" >
+        <header class="wallet-info-header relative rowACenter">
+          <aside
+              v-for="(item,index) in data"
+              :key="'my-order-'+index"
+              class="wallet-info-aside center flex-1"
+              :class="{
+              'my-order-button-select': index === select,
+              'cursor-pointer': index !== select
+            }"
+              @click="trigger(index)"
+          >{{item.label}}</aside>
+          <aside class="absolute center wallet-info-line"
+                 :style="{
+            width: 100 / data.length  +'%',
+            left: (100 / data.length * select)+'%'
+          }"
+          >
+            <div></div>
+          </aside>
+        </header>
+      </template>
+
+      <template
+        v-for="(item,index) in tabData"
+        v-slot:[item.slot]
+      >
+        <wallet-list
+          :key="'wallet-list-'+index+'-'+type+'-'+item.slot"
+          :type="type"
+          :money-type="item.slot"
+        ></wallet-list>
+      </template>
+    </tab>
+  </section>
+
+</template>
+
+<script>
+import {
+  tab
+} from '$components';
+import walletList from '../../wallet-list';
+import tabData from "../data/tab";
+import props from '../props';
+export default {
+  name: "wallet-info",
+  data(){
+    return {
+      tabData
+    }
+  },
+  components:{
+    tab,
+    walletList
+  },
+  props
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>

+ 26 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-info/style.scss

@@ -0,0 +1,26 @@
+/* 模块 */
+.wallet-container{
+  background-color: rgba(255,255,255,0.08);
+  border-radius: 10px;
+}
+/* 模块 */
+/* 订单模块 tab */
+.wallet-info-header {
+  height: 60px;
+  padding-bottom: 6px;
+}
+.wallet-info-aside{
+  font-size: 16px;
+}
+.wallet-info-line{
+  left: 0;
+  bottom: 15px;
+  transition: .3s;
+}
+.wallet-info-line div{
+  width: 60px;
+  height: 6px;
+  background: $main-linear;
+  border-radius: 3px;
+}
+/* 订单模块 tab */

+ 3 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-list/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 13 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-list/props.ts

@@ -0,0 +1,13 @@
+export default {
+
+    type:{
+        type: [Number,String],
+        default: '0'
+    },
+
+    moneyType:{
+        type: [Number,String],
+        default: '0'
+    }
+
+}

+ 87 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-list/src/main.vue

@@ -0,0 +1,87 @@
+<template>
+  <section class="screen wallet-list">
+    <flat-list
+      @fetch="fetch"
+      ref="list"
+    >
+
+      <template v-slot:item="{item,index}">
+        <layout-wallet
+          :key="'layout-wallet-'+index"
+          :item="item"
+        ></layout-wallet>
+      </template>
+
+    </flat-list>
+  </section>
+
+</template>
+
+<script>
+import {
+  FlatList
+} from '$components';
+import props from '../props';
+import layoutWallet from '$layout/layout-wallet';
+import { DateFormat } from '$utils/tool/date';
+import {FlatListReload} from "$components/flat-list/const";
+export default {
+  name: "wallet-list",
+  components:{
+    FlatList,
+    layoutWallet
+  },
+
+  watch:{
+
+    '$store.getters.money':function (newValue,oldValue) {
+      let diff = newValue - oldValue;
+      if (diff === 0) return;
+      let updateOtherType = diff >= 0 ? '1':'2';
+      if ((this.type === '0' || this.type === updateOtherType ) && this.moneyType === '1') {
+        return this.$refs.list && this.$refs.list.reload(FlatListReload.reload);
+      }
+    },
+
+    '$store.getters.integral':function (newValue,oldValue) {
+      let diff = newValue - oldValue;
+      if (diff === 0) return;
+      let updateOtherType = diff >= 0 ? '1':'2';
+      if ((this.type === '0' || this.type === updateOtherType ) && this.moneyType === '2') {
+        return this.$refs.list && this.$refs.list.reload(FlatListReload.reload);
+      }
+    },
+
+
+  },
+
+  methods:{
+    fetch(obj){
+      return this.$request({
+        url:'hxuser/get_wallet_log_list',
+        data:{
+          money_type: this.moneyType,
+          change_type: this.type
+        },
+        page:obj.data,
+        token:true
+      }).then((data)=>{
+        return obj.success((data.data || []).map((item)=>{
+
+          item.change_value = item.change_value.toString();
+          if (parseFloat(item.change_value) > 0 && item.change_value.indexOf('+') < 0) {
+            item.change_value ='+'+item.change_value;
+          }
+
+          item.add_time_format = DateFormat(item.add_time,'YYYY-MM-DD hh:mm')
+          return item;
+        }));
+      }).catch(obj.fail);
+    }
+  },
+
+  props
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>

+ 3 - 0
src/popup/popup-personal/components/my-wallet/components/wallet-list/style.scss

@@ -0,0 +1,3 @@
+.wallet-list{
+  padding: 0 20px 20px;
+}

+ 37 - 0
src/popup/popup-personal/components/my-wallet/data/data.ts

@@ -0,0 +1,37 @@
+import popup from "$utils/tool/popup";
+
+import { FunctionTrigger } from '$mixins/trigger/class';
+import {PopupExportComponent} from "$popup/popup-export/const";
+
+export default [
+    {
+        label:'巧鱼币',
+        placeholder:'用于陪玩、游戏场景',
+        key:'integral',
+        buttonGroup:[
+            {
+                label:'充值',
+                trigger:new FunctionTrigger(function (){
+                    return popup.$popup && popup.$popup.open(PopupExportComponent.recharge);
+                })
+            }
+        ]
+    },
+    {
+        label:'余额',
+        placeholder:'可兑换成巧鱼币',
+        style:'yellow',
+        key:'money',
+        buttonGroup:[
+            {
+                label:'兑换',
+                trigger:new FunctionTrigger(function (){
+                    return popup.$popup && popup.$popup.open(PopupExportComponent.exchangeCoin);
+                })
+            },
+            {
+                label: '提现'
+            }
+        ]
+    }
+] as LibDataArray

+ 14 - 0
src/popup/popup-personal/components/my-wallet/data/tab.ts

@@ -0,0 +1,14 @@
+export default [
+    {
+        label:'全部',
+        slot:'0'
+    },
+    {
+        label:'收入',
+        slot:'1'
+    },
+    {
+        label:'支出',
+        slot:'2'
+    }
+]

+ 3 - 0
src/popup/popup-personal/components/my-wallet/index.ts

@@ -0,0 +1,3 @@
+import main from './src/main.vue';
+
+export default main;

+ 3 - 0
src/popup/popup-personal/components/my-wallet/mixins/index.ts

@@ -0,0 +1,3 @@
+import trigger from '$mixins/trigger';
+
+export default [trigger];

+ 99 - 0
src/popup/popup-personal/components/my-wallet/src/main.vue

@@ -0,0 +1,99 @@
+<template>
+  <section class="screen flex">
+
+    <header class="wallet-header rowACenter">
+      <aside
+        class="flex-1 wallet-header-item"
+        v-for="(item,index) in layoutData"
+        :key="'wallet-header-item'+index"
+        :class="{
+          'wallet-header-item-margin': index!==0,
+          ['wallet-header-item-'+item.style]:item.style,
+        }"
+      >
+        <section class="rowACenter">
+          <img src="@/assets/images/currency.png" class="wallet-currency-icon" />
+          <div class="flex-1 overflow">
+            <div class="wallet-header-label line-1">{{item.label}}</div>
+            <div class="wallet-header-placeholder line-1">{{item.placeholder}}</div>
+          </div>
+          <section class="rowACenter">
+            <aside class="cursor-pointer center wallet-button"
+              v-for="(cItem,cIndex) in item.buttonGroup"
+                   :class="{
+                      'wallet-button-margin': cIndex !== 0
+                   }"
+                   :key="'button-'+cIndex+'-'+index"
+                   @click="trigger(cItem,cIndex)"
+            >{{cItem.label}}</aside>
+          </section>
+        </section>
+        <div class="wallet-header-price line-1">{{$store.getters[item.key]}}</div>
+      </aside>
+    </header>
+
+    <section class="flex-1 overflow">
+      <tab
+          :data="tabData"
+      >
+
+        <template v-slot:header="{data,trigger,select}">
+          <header class="rowACenter tab-button-header">
+            <aside
+              class="tab-button-item center"
+              :class="{
+                'tab-button-item-select': index === select,
+                'cursor-pointer': index !== select
+              }"
+              v-for="(item,index) in data"
+              :key="'tab-item-'+index"
+              @click="trigger(index)"
+            >{{item.label}}</aside>
+          </header>
+        </template>
+
+        <template
+          v-for="(item,index) in tabData"
+          v-slot:[item.slot]
+        >
+          <wallet-info
+            :key="'wallet-info-'+index"
+            :type="item.slot"
+          ></wallet-info>
+        </template>
+
+      </tab>
+    </section>
+
+
+  </section>
+</template>
+
+<script>
+import layoutData from '../data/data';
+import tabData from '../data/tab';
+import walletInfo from '../components/wallet-info';
+import {
+  tab
+} from '$components';
+import mixins from '../mixins';
+export default {
+  name: "my-wallet",
+  data(){
+    return {
+      layoutData,
+      tabData
+    }
+  },
+  components:{
+    tab,
+    walletInfo
+  },
+  created() {
+    return this.$store.dispatch('updateUserMoneyPromise');
+  },
+  mixins
+}
+</script>
+
+<style scoped lang="scss" src="../style.scss"></style>

+ 70 - 0
src/popup/popup-personal/components/my-wallet/style.scss

@@ -0,0 +1,70 @@
+/* 头部描述 */
+.wallet-header{
+
+}
+.wallet-header-item{
+  height: 140px;
+  background: linear-gradient(90deg, #8F68DD, #6B7DDB);
+  box-shadow: 0 5px 16px 0 rgba(126, 114, 220, 0.59);
+  border-radius: 10px;
+  padding: 15px 20px;
+}
+.wallet-header-item-yellow {
+  background: linear-gradient(90deg, #EFAD57, #FF8853);
+  box-shadow: 0 3px 6px 0 rgba(250, 148, 84, 0.59);
+}
+.wallet-header-item-margin{
+  margin-left: 15px;
+}
+.wallet-currency-icon{
+  @include square(34px);
+  margin-right: 13px;
+}
+.wallet-header-label{
+  font-size: 18px;
+  line-height: 28px;
+  color: #fff;
+}
+.wallet-header-placeholder{
+  font-size: 14px;
+  line-height: 20px;
+  color: rgba(255,255,255,0.6);
+}
+.wallet-button{
+  width: 80px;
+  height: 30px;
+  background-color: rgba(255,255,255,0.3);
+  border-radius: 15px;
+  font-size: 16px;
+  line-height: 20px;
+  color: #fff;
+}
+.wallet-button-margin{
+  margin-left: 11px;
+}
+.wallet-header-price{
+  font-size: 28px;
+  line-height: 34px;
+  color: #fff;
+  margin-top: 26px;
+}
+/* 头部描述 */
+
+/* tab头部 */
+.tab-button-header{
+  margin-top: 10px;
+  padding: 10px 0;
+}
+.tab-button-item{
+  width: 50px;
+  height: 26px;
+  font-size: 14px;
+  line-height: 16px;
+  background-color: rgba(255,255,255,0.1);
+  border-radius: 13px;
+  margin-right: 12px;
+}
+.tab-button-item-select{
+  background: $main-linear;
+}
+/* tab头部 */

+ 2 - 1
src/popup/popup-personal/data/menu.ts

@@ -6,7 +6,8 @@ export default [
     },
     {
         label:'我的钱包',
-        icon:require('../images/wallet.png')
+        icon:require('../images/wallet.png'),
+        component:'myWallet'
     },
     {
         label:'我的订单',

+ 1 - 1
src/popup/popup-personal/props.ts

@@ -8,7 +8,7 @@ export default {
     // 默认选中的
     page:{
         type: String,
-        default:'myOrder'
+        default:'myWallet'
     }
 
 }

+ 28 - 20
src/store/modules/user.ts

@@ -20,11 +20,11 @@ export default <Module<any,any>>{
     },
 
     getters:{
-      isLogin(state){
+        isLogin(state){
           return state.user && state.user.login_token;
-      },
+        },
         // 年龄
-      age(state){
+        age(state){
 
           if (state.user.birthday) {
 
@@ -40,34 +40,42 @@ export default <Module<any,any>>{
               return 0;
           }
 
-      },
+        },
 
-      // 星座
-      constellation(state){
+        // 星座
+        constellation(state){
           if (state.user.birthday) {
               let constellation =  $utils.constellation(state.user.birthday);
               return  constellation ? constellation: state.user.constellation || ''
           } else {
               return state.user.constellation || '';
           }
-      },
+        },
 
-      // 照片墙
-      photoWall(state){
+        // 照片墙
+        photoWall(state){
           if (state.user.images) {
               return state.user.images.split(',') || [];
           } else {
               return [];
           }
-      },
-
-     integral(state){
-         if (state.user.integral) {
-             return money.checkIntMoney(state.user.integral || 0) || 0;
-         } else {
-             return 0;
-         }
-     }
+        },
+
+        integral(state){
+             if (state.user.integral) {
+                 return money.checkIntMoney(state.user.integral || 0) || 0;
+             } else {
+                 return 0;
+             }
+        },
+        money(state){
+             if (state.user.money) {
+                 return money.checkIntMoney(state.user.money || 0) || 0;
+             } else {
+                 return 0;
+             }
+        }
+
     },
 
     mutations:{
@@ -125,10 +133,10 @@ export default <Module<any,any>>{
 
         },
 
-        updateUserInfoPromise({commit}){
+        updateUserMoneyPromise({commit}){
             if (userConfig.user) {
                 return request({
-                    url:'user/get_user_info',
+                    url:'user/get_user_money',
                     token:true
                 }).then((data:Record<string, any>)=>{
                     commit('setUserInfo',{

+ 8 - 1
src/utils/control/order/const/order.ts

@@ -40,7 +40,14 @@ enum OrderPayStatus {
     completed=3,
 
     // 已删除
-    delete
+    delete=-1,
+
+    // 已取消
+    cancel=-2,
+
+    // 超时
+    overtime=-3
+
 }
 
 enum OrderStatus {

+ 1 - 1
src/utils/control/order/data/button-group.ts

@@ -9,7 +9,7 @@ export default {
 
         [OrderPayStatus.orders] :[
             button[OrderButton.contact],
-            // button[OrderButton.cancel],
+            button[OrderButton.cancel],
             // button[OrderButton.oneMoreOrder]
         ],
 

+ 4 - 0
src/utils/control/order/data/title.ts

@@ -6,12 +6,16 @@ export default {
         [OrderPayStatus.orders]:'待接单',
         [OrderPayStatus.have]:'进行中',
         [OrderPayStatus.completed]:'已完成',
+        [OrderPayStatus.cancel]:'已取消',
+        [OrderPayStatus.overtime]:'已超时'
     },
 
     [OrderStatus.receivingOrder]:{
         [OrderPayStatus.orders]:'待接单',
         [OrderPayStatus.have]:'进行中',
         [OrderPayStatus.completed]:'已完成',
+        [OrderPayStatus.cancel]:'已取消',
+        [OrderPayStatus.overtime]:'已超时'
     },
 
 

+ 2 - 2
src/utils/control/order/data/updateConfig.ts

@@ -9,8 +9,8 @@ export default {
             [OrderPayUseStatus.orders]: OrderUpdateOperation.delete,
             [OrderPayUseStatus.completed]: OrderUpdateOperation.add
         },
-        [OrderPayStatus.delete]: {
-            [OrderPayUseStatus.all]: OrderUpdateOperation.delete,
+        [OrderPayStatus.cancel]: {
+            [OrderPayUseStatus.all]: OrderUpdateOperation.update,
             [OrderPayUseStatus.orders]: OrderUpdateOperation.delete
         },
     },

+ 1 - 1
src/utils/request/instructions/plugins/config.ts

@@ -7,7 +7,7 @@ export default {
             successCode:[200],
             pageOption:{
                 page:'page',
-                pageSize:'pageSize'
+                pageSize:'page_limit'
             },
             user:{
                 token:'login_token'

+ 1 - 1
src/utils/verification/verifiction.d.ts

@@ -3,7 +3,7 @@
 type VerificationTrigger = Record<number, VerificationTriggerFunction>
 
 interface VerificationTriggerFunction {
-    (value:any,item:LibData):boolean
+    (value:any,item?:LibData):boolean
 }
 
 

+ 9 - 4
src/views/view-footer/data/control.ts

@@ -1,4 +1,4 @@
-import {FunctionTrigger} from '$mixins/trigger/class/index';
+import {FunctionTrigger,LocationTrigger} from '$mixins/trigger/class/index';
 
 import popup from "$utils/tool/popup";
 import {PopupExportComponent} from "$popup/popup-export/const";
@@ -21,7 +21,8 @@ export default <LibDataArray>[
             } else {
                 return popup.$popup && popup.$popup.open(PopupExportComponent.choosingSkill);
             }
-        })
+        }),
+        login:true
     },
     {
         label:'在线客服',
@@ -29,10 +30,14 @@ export default <LibDataArray>[
     },
     {
         label:'下载客户端',
-        icon:require('../images/client.png')
+        icon:require('../images/client.png'),
+        trigger: new LocationTrigger('https://www.baidu.com')
     },
     {
         label:'帮助',
-        icon:require('../images/help.png')
+        icon:require('../images/help.png'),
+        trigger: new FunctionTrigger(function (item){
+            return popup.$popup && popup.$popup.open(PopupExportComponent.help);
+        }),
     }
 ]

+ 6 - 2
src/views/view-header/data/control.ts

@@ -1,3 +1,5 @@
+import {FunctionTrigger,DownTrigger,LocationTrigger} from '$mixins/trigger/class/index';
+
 export default <LibDataArray>[
     {
         label:'网页收藏',
@@ -5,10 +7,12 @@ export default <LibDataArray>[
     },
     {
         label:'保存桌面',
-        icon:require('../images/desktop.png')
+        icon:require('../images/desktop.png'),
+        trigger: new DownTrigger('https://img.youmaiyy.com/decktop_icon/有麦语音.url')
     },
     {
         label:'客户端下载',
-        icon:require('../images/client.png')
+        icon:require('../images/client.png'),
+        trigger: new LocationTrigger('https://www.baidu.com')
     }
 ]

+ 2 - 1
src/views/view-header/mixins/index.ts

@@ -1,4 +1,5 @@
 import login from './login';
 import user from "$mixins/user";
+import trigger from '$mixins/trigger';
 
-export default [login,user];
+export default [login,user,trigger];

+ 1 - 0
src/views/view-header/src/main.vue

@@ -7,6 +7,7 @@
         v-for="(item,index) in controlData"
         class="control-button rowCenter cursor-pointer"
         :key="'control-'+index"
+        @click="trigger(item,index)"
     >
       <img :src="item.icon" class="control-icon" />
       <span class="control-label">{{item.label}}</span>