li.shaoyi 3 роки тому
батько
коміт
889150456f

+ 2 - 1
public/config/appconfig.json

@@ -1,4 +1,5 @@
 {
-  "version": "1.0.0",
+  "version": "1.0.1",
+  "versionCode": "100001",
   "apiUrl": "http://218.17.158.45:16021/cfg?key=test_thj"
 }

+ 4 - 16
public/manifest.json

@@ -5,9 +5,9 @@
     "name" : "铁合金掌上行",
     /*应用名称,程序桌面图标名称*/
     "version" : {
-        "name" : "1.0",
+        "name" : "1.0.1",
         /*应用版本名称*/
-        "code" : "100"
+        "code" : 100001
     },
     "description" : "",
     /*应用描述信息*/
@@ -136,23 +136,11 @@
                 "permissions" : [
                     "<uses-feature android:name=\"android.hardware.camera\"/>",
                     "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                     "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                     "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                     "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>"
                 ],
                 "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ]
             },
@@ -285,7 +273,7 @@
                 },
                 "androidStyle" : "default",
                 "iosStyle" : "common",
-                "useOriginalMsgbox" : true
+                "useOriginalMsgbox" : false
             },
             "plugins" : {
                 "ad" : {}

+ 7 - 3
src/business/auth/index.ts

@@ -8,8 +8,8 @@ export function useAuth() {
     const { userLogin } = useLoginStore()
     const loading = ref(false)
     const user = reactive<Proto.LoginReq>({
-        LoginID: '2100000001',
-        LoginPWD: '123456',
+        LoginID: localStorage.getItem('thj_app_loginid') ?? '',
+        LoginPWD: '',
         GUID: v4(),
         LoginType: 0,
         ClientType: 4,
@@ -24,7 +24,11 @@ export function useAuth() {
             loading.value = false
             return Promise.reject(err)
         }
-        await userLogin(user).catch((err) => catchError(err))
+
+        await userLogin(user).then(() => {
+            localStorage.setItem('thj_app_loginid', user.LoginID)
+        }).catch((err) => catchError(err))
+
         await initBaseData().catch((err) => catchError(err))
     }
 

+ 38 - 0
src/business/bank/index.ts

@@ -0,0 +1,38 @@
+import { shallowRef } from 'vue'
+import { useDataTable } from '@/hooks/datatable'
+import { useLoginStore } from '@/stores'
+import { queryHisAmountLog } from '@/services/api/bank'
+
+// 资金流水列表
+export function useBankStatementList() {
+    const { getFirstAccountId } = useLoginStore()
+    const { dataList, total, pageIndex, pageSize } = useDataTable<Model.HisAmountLogRsp>()
+    const loading = shallowRef(false)
+
+    const getBankStatementList = () => {
+        loading.value = true
+        return queryHisAmountLog({
+            data: {
+                // page: pageIndex.value,
+                // pagesize: pageSize.value,
+                accountID: getFirstAccountId().toString(),
+            },
+            success: (res) => {
+                total.value = res.total
+                dataList.value = res.data
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
+    }
+
+    return {
+        loading,
+        dataList,
+        total,
+        pageIndex,
+        pageSize,
+        getBankStatementList,
+    }
+}

+ 6 - 4
src/business/credit/index.ts

@@ -3,16 +3,18 @@ import { useDataTable } from '@/hooks/datatable'
 import { useLoginStore } from '@/stores'
 import { queryUserScoreLog } from '@/services/api/credit'
 
-// 积分列表
-export function useCreditList() {
+// 积分流水列表
+export function useCreditStatementList() {
     const { getUserId } = useLoginStore()
     const { dataList, total, pageIndex, pageSize } = useDataTable<Model.UserScoreLogRsp>()
     const loading = shallowRef(false)
 
-    const getCreditList = () => {
+    const getCreditStatementList = () => {
         loading.value = true
         return queryUserScoreLog({
             data: {
+                // page: pageIndex.value,
+                // pagesize: pageSize.value,
                 userid: getUserId(),
             },
             success: (res) => {
@@ -31,6 +33,6 @@ export function useCreditList() {
         total,
         pageIndex,
         pageSize,
-        getCreditList,
+        getCreditStatementList,
     }
 }

+ 20 - 0
src/constants/bank.ts

@@ -0,0 +1,20 @@
+import { useEnumStore } from '@/stores'
+
+const { getEnumTypeList, getEnumTypeName } = useEnumStore()
+
+/**
+ * 获取资金流水操作类型列表
+ * @returns 
+ */
+export function getAccountBusinessCodeList() {
+    return getEnumTypeList('accountBusinessCode')
+}
+
+/**
+ * 获取资金流水操作类型名称
+ * @returns 
+ */
+export function getAccountBusinessCodeName(value: number) {
+    const enums = getAccountBusinessCodeList()
+    return getEnumTypeName(enums, value)
+}

+ 20 - 0
src/constants/credit.ts

@@ -0,0 +1,20 @@
+import { useEnumStore } from '@/stores'
+
+const { getEnumTypeList, getEnumTypeName } = useEnumStore()
+
+/**
+ * 获取积分操作类型列表
+ * @returns 
+ */
+export function getScoreConfigTypeList() {
+    return getEnumTypeList('scoreConfigType')
+}
+
+/**
+ * 获取积分操作类型名称
+ * @returns 
+ */
+export function getScoreConfigTypeName(value: number) {
+    const enums = getScoreConfigTypeList()
+    return getEnumTypeName(enums, value)
+}

+ 1 - 0
src/packages/mobile/components/base/list/index.less

@@ -0,0 +1 @@
+.app-list {}

+ 43 - 0
src/packages/mobile/components/base/list/index.vue

@@ -0,0 +1,43 @@
+<template>
+    <div class="app-list">
+        <div class="app-list__header">
+            <ul class="app-list__row">
+                <li class="app-list__column" v-for="(column, n) in columns" :key="n">
+                    <slot :name="'column_' + column.prop" :column="column">
+                        {{ column.label }}
+                    </slot>
+                </li>
+            </ul>
+        </div>
+        <List class="app-list__body">
+            <template v-for="(row, index) in dataList" :key="index">
+                <ul class="app-list__row">
+                    <li class="app-list__column" v-for="(column, n) in columns" :key="n">
+                        <slot :name="'row_' + column.prop" :value="row[column.prop]" :row="row">
+                            {{ row[column.prop] }}
+                        </slot>
+                    </li>
+                </ul>
+            </template>
+        </List>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { List } from 'vant'
+
+defineProps({
+    dataList: {
+        type: Array,
+        required: true,
+    },
+    columns: {
+        type: Array,
+        required: true,
+    },
+})
+</script>
+
+<style lang="less" scoped>
+@import './index.less';
+</style>

+ 1 - 0
src/packages/mobile/components/base/pull-refresh/index.less

@@ -0,0 +1 @@
+.app-pull-refresh {}

+ 4 - 10
src/packages/mobile/components/base/pull-refresh/index.vue

@@ -1,7 +1,7 @@
 <template>
-    <PullRefresh v-model="refreshing" @refresh="onRefresh">
+    <PullRefresh class="app-pull-refresh" v-model="refreshing" @refresh="onRefresh">
         <slot name="header"></slot>
-        <List v-model:loading="showLoading" :finished="finished" :finished-text="finishedText" @load="onLoad">
+        <List v-model:loading="loading" :finished="finished" :finished-text="finishedText" @load="onLoad">
             <template v-for="(item, index) in tableSource" :key="index">
                 <slot :item="item" :index="index"></slot>
             </template>
@@ -15,9 +15,6 @@ import { shallowRef, computed, PropType } from 'vue'
 import { List, PullRefresh } from 'vant'
 
 const props = defineProps({
-    loading: {
-        type: Boolean,
-    },
     total: {
         type: Number,
         default: 0,
@@ -36,11 +33,7 @@ const props = defineProps({
 const emit = defineEmits(['update:loading', 'update:dataList', 'refresh'])
 const refreshing = shallowRef(false) // 是否处于加载中状态
 const finished = shallowRef(false) // 是否已加载完成所有数据
-
-const showLoading = computed({
-    get: () => props.loading,
-    set: (val) => emit('update:loading', val)
-})
+const loading = shallowRef(false)
 
 const tableSource = computed({
     get: () => props.dataList,
@@ -71,6 +64,7 @@ const onLoad = () => {
 // 下拉刷新
 const onRefresh = () => {
     finished.value = false
+    loading.value = true
     onLoad()
 }
 </script>

+ 25 - 0
src/packages/mobile/components/layouts/form/index.vue

@@ -0,0 +1,25 @@
+<template>
+    <div class="app-form">
+        <div class="app-form__header">
+            <slot name="header"></slot>
+        </div>
+        <Form ref="formRef" class="register-form" @submit="formSubmit">
+            <slot></slot>
+        </Form>
+        <div class="app-form__footer">
+            <slot name="footer"></slot>
+        </div>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { Form, FormInstance } from 'vant'
+
+const emit = defineEmits(['submit'])
+const formRef = shallowRef<FormInstance>()
+
+const formSubmit = () => {
+    emit('submit')
+}
+</script>

+ 87 - 3
src/packages/mobile/views/bank/statement/index.vue

@@ -1,10 +1,94 @@
 <template>
-    <app-view class="logoff">
+    <app-view class="credit-statement">
         <template #header>
-            <app-navbar title="资金流水" />
+            <app-navbar title="资金流水">
+            </app-navbar>
         </template>
+        <app-pull-refresh class="credit-statement__container" v-model:dataList="tableList" :total="total"
+            @refresh="onRefresh">
+            <template #header>
+                <ul class="list list-row" v-if="tableList.length">
+                    <li class="list-column">
+                        <span>时间</span>
+                    </li>
+                    <li class="list-column">
+                        <span>操作类型</span>
+                    </li>
+                    <li class="list-column">
+                        <span>金额</span>
+                    </li>
+                </ul>
+            </template>
+            <template #default="{ item }">
+                <ul class="list list-row">
+                    <li class="list-column">
+                        <span>{{ formatDate(item.createtime, 'YYYY-MM-DD') }}</span>
+                        <span>{{ formatDate(item.createtime, 'HH:mm:ss') }}</span>
+                    </li>
+                    <li class="list-column">{{ getAccountBusinessCodeName(item.businesscode) }}</li>
+                    <li class="list-column">{{ item.amount }}</li>
+                </ul>
+            </template>
+        </app-pull-refresh>
     </app-view>
 </template>
 
 <script lang="ts" setup>
-</script>
+import { reactive } from 'vue'
+import { formatDate } from '@/filters'
+import { getAccountBusinessCodeName } from '@/constants/bank'
+import { useBankStatementList } from '@/business/bank'
+import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
+
+const { dataList, total, getBankStatementList } = useBankStatementList()
+const tableList = reactive<Model.HisAmountLogRsp[]>([])
+
+const onRefresh = (resolve: (data: Model.HisAmountLogRsp[]) => void) => {
+    getBankStatementList().then(() => {
+        resolve(dataList.value)
+    }).catch(() => {
+        resolve([])
+    })
+}
+</script>
+
+<style lang="less">
+.credit-statement {
+    &__container {
+        height: 100%;
+        overflow-y: auto;
+
+        .list {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+
+            &-row {
+                font-size: .32rem;
+                border-bottom: 1px solid #eee;
+                padding: .12rem .32rem;
+            }
+
+            &-column {
+                flex: 1;
+                display: flex;
+                flex-direction: column;
+                text-align: center;
+
+                &:first-child {
+                    text-align: left;
+                }
+
+                &:last-child {
+                    text-align: right;
+                }
+
+                span:last-child {
+                    color: #999;
+                    font-size: .24rem;
+                }
+            }
+        }
+    }
+}
+</style>

+ 65 - 23
src/packages/mobile/views/credit/statement/index.vue

@@ -1,23 +1,32 @@
 <template>
-    <app-view class="logoff">
+    <app-view class="credit-statement">
         <template #header>
-            <app-navbar ref="navbarRef" title="积分流水" />
+            <app-navbar title="积分流水">
+            </app-navbar>
         </template>
-        <app-pull-refresh v-model:dataList="tableList" v-model:loading="loading" :total="total" @refresh="onRefresh">
+        <app-pull-refresh class="credit-statement__container" v-model:dataList="tableList" :total="total"
+            @refresh="onRefresh">
             <template #header>
-                <Sticky :offset-top="50">
-                    <ul class="tablelist">
-                        <li class="tablelist-cell">时间</li>
-                        <li class="tablelist-cell">操作类型</li>
-                        <li class="tablelist-cell">金额</li>
-                    </ul>
-                </Sticky>
+                <ul class="list list-row" v-if="tableList.length">
+                    <li class="list-column">
+                        <span>时间</span>
+                    </li>
+                    <li class="list-column">
+                        <span>操作类型</span>
+                    </li>
+                    <li class="list-column">
+                        <span>积分</span>
+                    </li>
+                </ul>
             </template>
             <template #default="{ item }">
-                <ul class="tablelist">
-                    <li class="tablelist-cell">{{ item.createtime }}</li>
-                    <li class="tablelist-cell">{{ item.scoreconfigtype }}</li>
-                    <li class="tablelist-cell">{{ item.score }}</li>
+                <ul class="list list-row">
+                    <li class="list-column">
+                        <span>{{ formatDate(item.createtime, 'YYYY-MM-DD') }}</span>
+                        <span>{{ formatDate(item.createtime, 'HH:mm:ss') }}</span>
+                    </li>
+                    <li class="list-column">{{ getScoreConfigTypeName(item.scoreconfigtype) }}</li>
+                    <li class="list-column">{{ item.score }}</li>
                 </ul>
             </template>
         </app-pull-refresh>
@@ -26,27 +35,60 @@
 
 <script lang="ts" setup>
 import { reactive } from 'vue'
-import { Sticky } from 'vant'
-import { useCreditList } from '@/business/credit'
+import { formatDate } from '@/filters'
+import { getScoreConfigTypeName } from '@/constants/credit'
+import { useCreditStatementList } from '@/business/credit'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 
-const { dataList, loading, total, getCreditList } = useCreditList()
+const { dataList, total, getCreditStatementList } = useCreditStatementList()
 const tableList = reactive<Model.UserScoreLogRsp[]>([])
 
 const onRefresh = (resolve: (data: Model.UserScoreLogRsp[]) => void) => {
-    getCreditList().then(() => {
+    getCreditStatementList().then(() => {
         resolve(dataList.value)
+    }).catch(() => {
+        resolve([])
     })
 }
 </script>
 
 <style lang="less">
-.tablelist {
-    display: flex;
+.credit-statement {
+    &__container {
+        height: 100%;
+        overflow-y: auto;
+
+        .list {
+            display: flex;
+            align-items: center;
+            background-color: #fff;
+
+            &-row {
+                font-size: .32rem;
+                border-bottom: 1px solid #eee;
+                padding: .12rem .32rem;
+            }
+
+            &-column {
+                flex: 1;
+                display: flex;
+                flex-direction: column;
+                text-align: center;
+
+                &:first-child {
+                    text-align: left;
+                }
+
+                &:last-child {
+                    text-align: right;
+                }
 
-    &-cell {
-        flex: 1;
-        background-color: #fff;
+                span:last-child {
+                    color: #999;
+                    font-size: .24rem;
+                }
+            }
+        }
     }
 }
 </style>

+ 4 - 4
src/packages/mobile/views/home/components/mine/index.vue

@@ -23,7 +23,7 @@
         <div class="bank" v-if="accountInfo">
           <div class="bank-item">
             <span>余额</span>
-            <span>{{ accountInfo.balance }}</span>
+            <span>{{ accountInfo.currentbalance }}</span>
           </div>
           <div class="bank-item">
             <span>冻结</span>
@@ -48,7 +48,7 @@
     </div>
     <div class="home-mine__iconbar">
       <ul>
-        <li @click="routerTo('mine-generalize')">
+        <li @click="routerTo('mine-generalize')" style="align-items:flex-start">
           <app-iconfont icon="icon-wodetuiguang" label-direction="bottom">我的推广</app-iconfont>
         </li>
         <!-- <li>
@@ -57,12 +57,12 @@
         <li>
           <app-iconfont icon="icon-wodecangdan" label-direction="bottom">我的仓单</app-iconfont>
         </li> -->
-        <li>
+        <!-- <li>
           <app-iconfont icon="icon-fapiaoxinxi" label-direction="bottom">发票信息</app-iconfont>
         </li>
         <li @click="routerTo('mine-address')">
           <app-iconfont icon="icon-shouhuodizhi" label-direction="bottom">收货地址</app-iconfont>
-        </li>
+        </li> -->
       </ul>
     </div>
     <div class="g-navmenu">

+ 28 - 0
src/packages/mobile/views/home/index.vue

@@ -9,13 +9,17 @@
 
 <script lang="ts" setup>
 import { ref } from 'vue'
+import { dialog } from '@/utils/vant'
 import { Tabbar } from '@mobile/components/base/tabbar/interface'
+import { GetAppUpdateInfo } from '@/services/api/common'
+import plus from '@/utils/h5plus'
 import AppTabbar from '@mobile/components/base/tabbar/index.vue'
 import Home from './components/main/index.vue'
 import Purchase from './components/purchase/index.vue'
 import SupplyDemand from './components/supply-demand/index.vue'
 import Market from './components/market/index.vue'
 import Mine from './components/mine/index.vue'
+import axios from 'axios'
 
 const components = {
   home: Home,
@@ -59,6 +63,30 @@ const onChange = (index: number) => {
     componentId.value = tabList[index].name
   }
 }
+
+plus.onPlusReady(() => {
+  // 获取应用配置信息
+  axios('./config/appconfig.json').then((res) => {
+    const config = res.data
+    // 获取应用更新信息
+    GetAppUpdateInfo({
+      success: (res) => {
+        const data = JSON.parse(res)
+        if (data) {
+          const { LastVersionCode, ApkUrl } = data[0] as Model.AppUpdateInfo
+          if (Number(LastVersionCode) > Number(config.versionCode)) {
+            dialog('发现新版本,是否更新?', {
+              showCancelButton: true,
+              confirmButtonText: '更新'
+            }).then(() => {
+              plus.updateApp(ApkUrl)
+            })
+          }
+        }
+      }
+    })
+  })
+})
 </script>
 
 <style lang="less">

+ 2 - 2
src/packages/mobile/views/setting/password/index.vue

@@ -3,7 +3,7 @@
         <template #header>
             <app-navbar title="修改密码" />
         </template>
-        <Form ref="formRef" class="forget-form" @submit="onSubmit">
+        <Form ref="formRef" class="forget-form" @submit="onSubmit" style="padding:.32rem 0">
             <CellGroup inset>
                 <Field v-model="formData.OldPwd" type="password" name="OldPwd" label="原密码" placeholder="必填"
                     autocomplete="off" :rules="formRules.OldPwd" />
@@ -14,7 +14,7 @@
             </CellGroup>
         </Form>
         <template #footer>
-            <div class="forget-footer">
+            <div class="forget-footer" style="padding:.32rem">
                 <Button type="primary" @click="formRef?.submit()" round block>提交</Button>
             </div>
         </template>

+ 23 - 1
src/packages/mobile/views/user/logoff/index.less

@@ -1 +1,23 @@
-.logoff {}
+.logoff {
+    &__details {
+        background-color: #fff;
+        padding         : .32rem;
+
+        h4 {
+            font-weight: bold;
+        }
+
+        dl {
+            margin-top: .2rem;
+
+            dd {
+                text-indent: .32rem;
+                line-height: .48rem;
+            }
+        }
+    }
+
+    &__footer {
+        padding: .32rem;
+    }
+}

+ 8 - 5
src/packages/mobile/views/user/logoff/index.vue

@@ -3,10 +3,10 @@
         <template #header>
             <app-navbar title="注销服务" />
         </template>
-        <section class="logoff-details">
-            <h1>为保证您的账号安全,在提交注销申请时,需同时满足以下条件:</h1>
+        <section class="logoff__details">
+            <h4>为保证您的账号安全,在提交注销申请时,需同时满足以下条件:</h4>
             <dl>
-                <dt>1.账号财产已结清</dt>
+                <dt>1. 账号财产已结清</dt>
                 <dd>没有资产、欠款、未结清的资金和现货。</dd>
                 <dt>2. 账号处于安全状态</dt>
                 <dd>账号处于正常使用状态,无被盗风险。</dd>
@@ -14,7 +14,9 @@
             </dl>
         </section>
         <template #footer>
-            <Button type="primary" @click="onSubmit">确认注销</Button>
+            <div class="logoff__footer">
+                <Button type="primary" @click="onSubmit" round block>确认注销</Button>
+            </div>
         </template>
     </app-view>
 </template>
@@ -28,7 +30,8 @@ const { formSubmit } = useAccountCancellation()
 
 const onSubmit = () => {
     dialog('账户注销后不能再使用该系统,如果账户有余额需要人工审核才能注销,确定要注销账户吗?', {
-        showCancelButton: true
+        showCancelButton: true,
+        messageAlign: 'left'
     }).then(() => {
         fullloading((hideLoading) => {
             formSubmit().then(() => {

+ 6 - 1
src/packages/mobile/views/user/register/index.vue

@@ -18,7 +18,8 @@
         </Field>
         <Field v-model="formData.loginpwd" name="loginpwd" type="password" label="登录密码" placeholder="必填"
           autocomplete="off" :rules="formRules.loginpwd" />
-        <Field v-model="formData.refernum" name="refernum" label="推荐码" placeholder="选填" autocomplete="off" />
+        <Field v-model="formData.refernum" name="refernum" label="推荐码" placeholder="必填" autocomplete="off"
+          :rules="formRules.refernum" />
       </CellGroup>
       <CellGroup inset>
         <Cell>
@@ -106,6 +107,10 @@ const formRules: { [key in keyof Model.RegisterReq]?: FieldRule[] } = {
     required: true,
     message: '请输入短信验证码',
   }],
+  refernum: [{
+    required: true,
+    message: '请输入推荐码',
+  }],
 }
 
 // 发送手机验证码

+ 1 - 1
src/packages/pc/router/index.ts

@@ -21,7 +21,7 @@ const routes: Array<RouteRecordRaw> = [
     },
     {
         path: '/boot',
-        name: 'oot',
+        name: 'boot',
         component: () => import('../views/boot/index.vue'),
         meta: {
             title: "初始化",

+ 14 - 0
src/services/api/common/index.ts

@@ -2,6 +2,20 @@ import { httpRequest, commonRequest, getServiceUrl } from '@/services/http'
 import { CommonParams, HttpParams } from '@/services/http/interface'
 
 /**
+ * 获取应用配置信息
+ */
+// export function GetAppConfig(params: CommonParams<{ rsp: { version: string, versionCode: string, apiUrl: string } }>) {
+//     return commonRequest('./config/appconfig.json', 'get', params);
+// }
+
+/**
+ * 获取应用更新信息
+ */
+export function GetAppUpdateInfo(params: CommonParams<{ rsp: string }>) {
+    return commonRequest('http://47.116.5.81:8012/PhoneService/GetUpdateInfo', 'get', params);
+}
+
+/**
  * 用户注册
  */
 export function userRegister(params: CommonParams<{ req: Model.RegisterReq, rsp: Model.RegisterRsp }>) {

+ 1 - 1
src/stores/modules/enum.ts

@@ -17,7 +17,7 @@ interface StoreState {
     allEnums: ShallowRef<Model.EnumRsp[]>;
 }
 
-const enumKeys = ['clientType'] as const
+const enumKeys = ['clientType', 'scoreConfigType', 'accountBusinessCode'] as const
 
 /**
  * 枚举存储类

+ 4 - 4
src/types/model/bank.d.ts

@@ -157,9 +157,9 @@ declare namespace Model {
         accountID: string; // 资金账户 - 格式:1,2,3
         page?: number; // 页码
         pagesize?: number; // 每页条数
-        OperateType: string; // 资金操作类型 - 格式:1,2,3
-        startDate: string; // 开始时间 - 闭区间,格式:yyyy-MM-dd
-        endDate: string; // 结束时间 - 闭区间,格式:yyyy-MM-dd
+        OperateType?: string; // 资金操作类型 - 格式:1,2,3
+        startDate?: string; // 开始时间 - 闭区间,格式:yyyy-MM-dd
+        endDate?: string; // 结束时间 - 闭区间,格式:yyyy-MM-dd
     }
 
     /** 资金流水查询(历史) 响应 */
@@ -172,7 +172,7 @@ declare namespace Model {
         amountadjusttype: number; // 资金调整类型(默认值为0) - 0:系统 1:单边账调整 2:人工调整
         autoid: number; // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
         balance: number; // 期初余额
-        businesscode: number; // 业务编号
+        businesscode: number; // 业务编号,对应枚举 accountBusinessCode
         createtime: string; // 发生时间
         currencyid: number; // 币种ID
         currentbalance: number; // 期末余额(变动后金额)

+ 12 - 0
src/types/model/common.d.ts

@@ -2,6 +2,17 @@ import { AuthType, UrlType } from '@/constants/enum/menu'
 
 declare global {
     namespace Model {
+        /** 应用更新信息 */
+        interface AppUpdateInfo {
+            AppName: string;
+            pkg: string;
+            LastVersionCode: string;
+            LastVersionName: string;
+            Description: string;
+            ApkUrl: string;
+            Type: string;
+        }
+
         /** 注册 请求 */
         interface RegisterReq {
             mobilephone: string; // 手机号
@@ -17,6 +28,7 @@ declare global {
             sid?: number; // 获取图形验证码时传的当前时间戳:sid
             username?: string; // 用户名称
             lsitAgreementID?: number[]; // 协议编号
+            memberareaid?: number; // 所属会员代码
         }
 
         // 注册 响应

+ 84 - 0
src/utils/h5plus/index.ts

@@ -46,6 +46,32 @@ export default new (class {
     }
 
     /**
+     * 客户端的版本名称
+     * @returns 
+     */
+    getVersion() {
+        return new Promise<string>((resolve) => {
+            this.onPlusReady((plus) => {
+                resolve(plus.runtime.version)
+            })
+        })
+    }
+
+    /**
+     * 获取客户端的版本号
+     * @returns 
+     */
+    getVersionCode() {
+        return new Promise<string>((resolve) => {
+            this.onPlusReady((plus) => {
+                const versionCode = plus.runtime.versionCode
+                console.log('版本号', versionCode)
+                resolve(versionCode)
+            })
+        })
+    }
+
+    /**
      * 获取状态栏高度
      * @param callback 
      */
@@ -103,4 +129,62 @@ export default new (class {
             plus.navigator.showSystemNavigation();
         })
     }
+
+    updateApp(url: string) {
+        this.onPlusReady((plus) => {
+            const dtask = plus.downloader.createDownload(
+                url,
+                {
+                    filename: ''
+                },
+                function (d: any, status: number) {
+                    if (status == 200) {
+                        // 当前下载的状态
+                        installApp(d.filename) // 调用安装的方法
+                    } else {
+                        //plus.nativeUI.alert('下载失败')
+                    }
+                }
+            )
+
+            dtask.start() // 开启下载的任务
+            // app自动更新进度
+            dtask.addEventListener('statechanged', function (task: any, status: number) {
+                // 给下载任务设置一个监听 并根据状态  做操作
+                switch (task.state) {
+                    case 1:
+                        console.log('正在下载')
+                        break
+                    case 2:
+                        console.log('已连接到服务器')
+                        break
+                    case 3:
+                    // console.log(task)
+                    // console.log(task.downloadedSize)//当前的大
+                    // console.log(task.totalSize)//安装包的大小
+                }
+            })
+
+            // 自动更新
+            // eslint-disable-next-line no-inner-declarations
+            function installApp(path: string) {
+                plus.nativeUI.showWaiting('正在更新...')
+                plus.runtime.install(
+                    path, {
+                    // true表示强制安装,不进行版本号的校验;false则需要版本号校验,如果将要安装应用的版本号不高于现有应用的版本号则终止安装,并返回安装失败。 仅安装wgt和wgtu时生效,默认值 false
+                    force: false
+                },
+                    function () {
+                        plus.nativeUI.closeWaiting()
+                        console.log('更新成功!')
+                        plus.runtime.restart()
+                    },
+                    function (e: any) {
+                        plus.nativeUI.closeWaiting()
+                        plus.nativeUI.alert('更新失败:' + e.message)
+                    }
+                )
+            }
+        })
+    }
 })