liangan 2 долоо хоног өмнө
parent
commit
7050a8c0b2

+ 0 - 1
src/App.vue

@@ -7,7 +7,6 @@ usePageAuth()
 
 
 onLaunch(() => {
 onLaunch(() => {
   console.log('App Launch')
   console.log('App Launch')
-  // uni.setLocale('en')
 })
 })
 onShow(() => {
 onShow(() => {
   console.log('App Show')
   console.log('App Show')

+ 9 - 0
src/api/common.ts

@@ -0,0 +1,9 @@
+import { http } from '@/utils/http'
+
+/**
+ * 获取枚举(1业务类型 2充值状态 3提现状态 4收益状态 5收益业务类型)
+ * @returns
+ */
+export function getEnum(data: any) {
+  return http.get<any>('/cif/api/user/getEnum', data)
+}

+ 28 - 0
src/api/wallet.ts

@@ -14,6 +14,13 @@ export function getAccountInfo() {
 export function getWalletAccountInfo() {
 export function getWalletAccountInfo() {
   return http.get<any>(`/cif/account/api/getWalletAccountInfo`)
   return http.get<any>(`/cif/account/api/getWalletAccountInfo`)
 }
 }
+/**
+ * 钱包出入流水
+ * @returns
+ */
+export function walletFlowList(data: any) {
+  return http.post<any>(`/cif/account/api/accountFlowList`, data)
+}
 /**
 /**
  * 查询收益记录
  * 查询收益记录
  * @returns
  * @returns
@@ -35,6 +42,27 @@ export function withdrawAdd(data: any) {
 export function withdrawRecordList(data: any) {
 export function withdrawRecordList(data: any) {
   return http.post<any>(`/cif/api/withdraw/record/list`, data)
   return http.post<any>(`/cif/api/withdraw/record/list`, data)
 }
 }
+/**
+ * 充值选项组
+ * @returns
+ */
+export function rechargeGoodsList() {
+  return http.get<any>(`/cif/api/recharge/record/goodsList`)
+}
+/**
+ * 创建充值订单
+ * @returns
+ */
+export function rechargeAdd(data: any) {
+  return http.get<any>(`/cif/api/recharge/record/add`, data)
+}
+/**
+ * 充值回调
+ * @returns
+ */
+export function rechargeCallback(data: any) {
+  return http.get<any>(`/cif/api/recharge/record/callback`, data)
+}
 /**
 /**
  * 充值记录
  * 充值记录
  * @returns
  * @returns

+ 1 - 0
src/pages.json

@@ -110,6 +110,7 @@
       "path": "pages/mine/mine",
       "path": "pages/mine/mine",
       "type": "page",
       "type": "page",
       "layout": "default",
       "layout": "default",
+      "needLogin": true,
       "style": {
       "style": {
         "navigationStyle": "custom"
         "navigationStyle": "custom"
       }
       }

+ 2 - 3
src/pages/income/income.vue

@@ -11,9 +11,8 @@
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
 // eslint-disable-next-line unused-imports/no-unused-imports
 // eslint-disable-next-line unused-imports/no-unused-imports
-import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
+import { onPageScroll, onReachBottom } from '@dcloudio/uni-app' // 必须导入需要用到的页面生命周期(即使在当前页面上没有直接使用到)
 import useZPaging from 'z-paging/components/z-paging/js/hooks/useZPaging.js'
 import useZPaging from 'z-paging/components/z-paging/js/hooks/useZPaging.js'
-// 必须导入需要用到的页面生命周期(即使在当前页面上没有直接使用到)
 
 
 import { getAccountInfo as _getAccountInfo, envelopeList } from '@/api/wallet'
 import { getAccountInfo as _getAccountInfo, envelopeList } from '@/api/wallet'
 import { formatNumber } from '@/utils'
 import { formatNumber } from '@/utils'
@@ -60,7 +59,7 @@ onShow(() => {
 </script>
 </script>
 
 
 <template>
 <template>
-  <z-paging ref="paging" v-model="dataList" use-page-scroll @on-refresh="getWalletInfo" @query="queryList">
+  <z-paging ref="paging" v-model="dataList" use-page-scroll @on-refresh="getAccountInfo" @query="queryList">
     <view class="px-24rpx pb-24rpx">
     <view class="px-24rpx pb-24rpx">
       <view
       <view
         class="mb-20rpx rounded-16rpx from-[rgba(52,52,52,0.95)] to-[rgba(16,16,16,0.95)] bg-gradient-to-br pb-28rpx pt-44rpx text-white"
         class="mb-20rpx rounded-16rpx from-[rgba(52,52,52,0.95)] to-[rgba(16,16,16,0.95)] bg-gradient-to-br pb-28rpx pt-44rpx text-white"

+ 14 - 1
src/pages/mine/mine.vue

@@ -1,6 +1,7 @@
 <route lang="json5">
 <route lang="json5">
   {
   {
     layout: 'default',
     layout: 'default',
+    needLogin: true,
     style: {
     style: {
       navigationStyle: 'custom',
       navigationStyle: 'custom',
     },
     },
@@ -8,7 +9,9 @@
   </route>
   </route>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
+import { getWalletAccountInfo } from '@/api/wallet'
 import { useUserStore } from '@/store/user'
 import { useUserStore } from '@/store/user'
+import { formatNumber } from '@/utils'
 import { toPage } from '@/utils/page'
 import { toPage } from '@/utils/page'
 
 
 defineOptions({
 defineOptions({
@@ -41,6 +44,16 @@ const menuList = ref([
   { name: 'Live Chat', url: '' },
   { name: 'Live Chat', url: '' },
   { name: 'Activity Group', url: '' },
   { name: 'Activity Group', url: '' },
 ])
 ])
+const walletInfo = ref<any>({})
+async function getWalletInfo() {
+  // 获取钱包信息-查询余额
+  const res = await getWalletAccountInfo()
+  console.log(res)
+  walletInfo.value = res?.data?.balance
+}
+onShow(() => {
+  getWalletInfo()
+})
 </script>
 </script>
 
 
 <template>
 <template>
@@ -85,7 +98,7 @@ const menuList = ref([
             Wallet Balance
             Wallet Balance
           </view>
           </view>
           <view class="text-44rpx text-[var(--wot-color-theme)] font-bold">
           <view class="text-44rpx text-[var(--wot-color-theme)] font-bold">
-            5,000
+            {{ formatNumber(walletInfo.balance) }}
           </view>
           </view>
         </view>
         </view>
       </view>
       </view>

+ 1 - 1
src/pages/mine/setting.vue

@@ -19,7 +19,7 @@ defineOptions({
 const userStore = useUserStore()
 const userStore = useUserStore()
 const columns = ref([{ label: 'English', value: 'en' }, { label: 'Bengali', value: 'bn' }])
 const columns = ref([{ label: 'English', value: 'en' }, { label: 'Bengali', value: 'bn' }])
 const language = ref(uni.getLocale() === 'bn' ? 'bn' : 'en')
 const language = ref(uni.getLocale() === 'bn' ? 'bn' : 'en')
-function changeLanguage(data) {
+function changeLanguage(data: any) {
   console.log(data)
   console.log(data)
   // 下面2句缺一不可!!!
   // 下面2句缺一不可!!!
   uni.setLocale(data.value)
   uni.setLocale(data.value)

+ 41 - 5
src/pages/wallet/myWallet.vue

@@ -10,13 +10,49 @@
 </route>
 </route>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
+// eslint-disable-next-line unused-imports/no-unused-imports
+import { onPageScroll, onReachBottom } from '@dcloudio/uni-app' // 必须导入需要用到的页面生命周期(即使在当前页面上没有直接使用到)
+import useZPaging from 'z-paging/components/z-paging/js/hooks/useZPaging.js'
+
+import { getWalletAccountInfo, walletFlowList } from '@/api/wallet'
+import { formatNumber } from '@/utils'
 import { toPage } from '@/utils/page'
 import { toPage } from '@/utils/page'
+// z-paging
+const paging = ref(null)
+// 类似mixins,如果是页面滚动务必要写这一行,并传入当前ref绑定的paging,注意此处是paging,而非paging.value
+useZPaging(paging)
 
 
 const dayType = ref(1)
 const dayType = ref(1)
+const walletInfo = ref<any>({})
+async function getWalletInfo() {
+  // 获取钱包信息-查询余额
+  const res = await getWalletAccountInfo()
+  console.log(res)
+  walletInfo.value = res?.data?.balance
+}
+const dataList = ref<any[]>([])
+async function getWalletFlowList(pageNo: number, pageSize: number) {
+  const data = {
+    page: pageNo,
+    size: pageSize,
+    type: dayType.value,
+  }
+  try {
+    const res = await walletFlowList(data)
+    console.log(res)
+    paging.value.complete(res.data.list)
+  }
+  catch (error) {
+    paging.value.complete(false)
+  }
+}
+onShow(() => {
+  getWalletInfo()
+})
 </script>
 </script>
 
 
 <template>
 <template>
-  <z-paging refresher-only>
+  <z-paging ref="paging" v-model="dataList" use-page-scroll @on-refresh="getWalletInfo" @query="getWalletFlowList">
     <view class="px-24rpx pt-20rpx">
     <view class="px-24rpx pt-20rpx">
       <view
       <view
         class="mb-20rpx flex items-center justify-around rounded-12rpx bg-[rgba(var(--wot-color-theme-rgb),0.1)] px-16rpx py-22rpx"
         class="mb-20rpx flex items-center justify-around rounded-12rpx bg-[rgba(var(--wot-color-theme-rgb),0.1)] px-16rpx py-22rpx"
@@ -26,7 +62,7 @@ const dayType = ref(1)
             Wallet Balance
             Wallet Balance
           </view>
           </view>
           <view class="mb-22rpx text-44rpx text-[var(--wot-color-theme)] font-bold">
           <view class="mb-22rpx text-44rpx text-[var(--wot-color-theme)] font-bold">
-            5,000
+            {{ formatNumber(walletInfo.balance) }}
           </view>
           </view>
           <view class="flex items-center text-22rpx text-#595959">
           <view class="flex items-center text-22rpx text-#595959">
             <text class="mr-1px">
             <text class="mr-1px">
@@ -35,7 +71,7 @@ const dayType = ref(1)
             <wd-icon name="help-circle" size="20rpx" />
             <wd-icon name="help-circle" size="20rpx" />
           </view>
           </view>
           <view class="text-26rpx font-bold">
           <view class="text-26rpx font-bold">
-            1,000
+            {{ formatNumber(walletInfo.freezeAmount) }}
           </view>
           </view>
         </view>
         </view>
         <view class="flex flex-col items-end">
         <view class="flex flex-col items-end">
@@ -80,8 +116,8 @@ const dayType = ref(1)
         </view>
         </view>
         <view class="rounded-16rpx bg-white px-20rpx">
         <view class="rounded-16rpx bg-white px-20rpx">
           <view
           <view
-            v-for="i in 3" :key="i" class="py-20rpx"
-            :class="{ 'border-b-1 border-b-solid border-b-#E1E1E1': i !== 3 }"
+            v-for="(item, index) in dataList" :key="item.id" class="py-20rpx"
+            :class="{ 'border-b-1 border-b-solid border-b-#E1E1E1': index !== dataList.length - 1 }"
           >
           >
             <view class="mb-8rpx flex items-center justify-between text-24rpx">
             <view class="mb-8rpx flex items-center justify-between text-24rpx">
               <text class="truncate">
               <text class="truncate">

+ 35 - 12
src/pages/wallet/recharge.vue

@@ -20,17 +20,39 @@
 </route>
 </route>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
+import { rechargeAdd, rechargeCallback, rechargeGoodsList } from '@/api/wallet'
+import { formatNumber } from '@/utils'
+import { toPage } from '@/utils/page'
+
 defineOptions({
 defineOptions({
   name: 'Recharge', // 充值
   name: 'Recharge', // 充值
 })
 })
-const selectId = ref(1)
+const selectData = ref<any>({
+  id: '',
+})
 // 触发确定按钮
 // 触发确定按钮
 onNavigationBarButtonTap((event: any) => {
 onNavigationBarButtonTap((event: any) => {
   if (event.text === 'Record') {
   if (event.text === 'Record') {
-    uni.navigateTo({
-      url: '/pages/wallet/rechargeRecord',
-    })
+    toPage('/pages/wallet/rechargeRecord')
+  }
+})
+const dataList = ref<any[]>([])
+async function getRechargeGoodsList() {
+  const res = await rechargeGoodsList()
+  dataList.value = res.data
+}
+
+async function submit() {
+  const addRes = await rechargeAdd({ goodsId: selectData.value.id })
+  console.log(addRes)
+  if (addRes.code === '200') {
+    const callbackRes = await rechargeCallback({ data: JSON.stringify({ orderNo: addRes.data.orderNo, status: addRes.data.status }) })
+    console.log(callbackRes)
   }
   }
+}
+
+onShow(() => {
+  getRechargeGoodsList()
 })
 })
 </script>
 </script>
 
 
@@ -39,25 +61,26 @@ onNavigationBarButtonTap((event: any) => {
     <view class="px-24rpx">
     <view class="px-24rpx">
       <view class="py-30rpx text-center text-28rpx text-#595959">
       <view class="py-30rpx text-center text-28rpx text-#595959">
         Recharge Highest Discount <text class="text-[var(--wot-color-theme)]">
         Recharge Highest Discount <text class="text-[var(--wot-color-theme)]">
-          5%
+          {{ Math.max(...(dataList.map(i => i.discountRate))) }}%
         </text>
         </text>
       </view>
       </view>
       <view class="grid grid-cols-2 gap-20rpx">
       <view class="grid grid-cols-2 gap-20rpx">
         <view
         <view
-          v-for="i in 6"
-          :key="i"
+          v-for="i in dataList"
+          :key="i.id"
           class="border-1 border-transparent rounded-12rpx border-dashed bg-[rgba(var(--wot-color-theme-rgb),0.1)] py-24rpx text-center"
           class="border-1 border-transparent rounded-12rpx border-dashed bg-[rgba(var(--wot-color-theme-rgb),0.1)] py-24rpx text-center"
           :style="{
           :style="{
-            borderColor: i === selectId ? 'var(--wot-color-theme)' : '',
-            backgroundColor: i === selectId ? 'rgba(var(--wot-color-theme-rgb),0.25)' : '',
+            borderColor: i.id === selectData.id ? 'var(--wot-color-theme)' : '',
+            backgroundColor: i.id === selectData.id ? 'rgba(var(--wot-color-theme-rgb),0.25)' : '',
           }"
           }"
+          @click="selectData = i"
         >
         >
           <view class="mb-8rpx text-40rpx text-[var(--wot-color-theme)] font-bold">
           <view class="mb-8rpx text-40rpx text-[var(--wot-color-theme)] font-bold">
-            5,000
+            {{ formatNumber(i.amount) }}
           </view>
           </view>
           <view class="text-20rpx">
           <view class="text-20rpx">
             Get <text class="text-[var(--wot-color-theme)]">
             Get <text class="text-[var(--wot-color-theme)]">
-              ৳5,250, 5%
+              ৳{{ formatNumber(i.amount + i.discount) }}, {{ i.discountRate }}%
             </text> Discount
             </text> Discount
           </view>
           </view>
         </view>
         </view>
@@ -65,7 +88,7 @@ onNavigationBarButtonTap((event: any) => {
     </view>
     </view>
     <template #bottom>
     <template #bottom>
       <view class="bg-white/60 px-28rpx py-30rpx backdrop-blur-20">
       <view class="bg-white/60 px-28rpx py-30rpx backdrop-blur-20">
-        <wd-button block>
+        <wd-button block :disabled="!selectData.id" @click="submit">
           Submit
           Submit
         </wd-button>
         </wd-button>
       </view>
       </view>

+ 9 - 5
src/pages/wallet/rechargeRecord.vue

@@ -13,9 +13,9 @@
 // eslint-disable-next-line unused-imports/no-unused-imports
 // eslint-disable-next-line unused-imports/no-unused-imports
 import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
 import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
 import useZPaging from 'z-paging/components/z-paging/js/hooks/useZPaging.js'
 import useZPaging from 'z-paging/components/z-paging/js/hooks/useZPaging.js'
+import { getEnum as _getEnum } from '@/api/common'
 import { rechargeRecordList } from '@/api/wallet'
 import { rechargeRecordList } from '@/api/wallet'
 import { formatNumber } from '@/utils'
 import { formatNumber } from '@/utils'
-import { getPageParams } from '@/utils/page'
 
 
 defineOptions({
 defineOptions({
   name: 'RechargeRecord', // 充值记录
   name: 'RechargeRecord', // 充值记录
@@ -24,9 +24,13 @@ defineOptions({
 const paging = ref(null)
 const paging = ref(null)
 // 类似mixins,如果是页面滚动务必要写这一行,并传入当前ref绑定的paging,注意此处是paging,而非paging.value
 // 类似mixins,如果是页面滚动务必要写这一行,并传入当前ref绑定的paging,注意此处是paging,而非paging.value
 useZPaging(paging)
 useZPaging(paging)
-const queryParams = ref<any>({})
 // 搜索结果
 // 搜索结果
+const statusEnum = ref<any[]>([])
 const dataList = ref([])
 const dataList = ref([])
+async function getEnum() {
+  const res = await _getEnum({ id: 2 })
+  statusEnum.value = res.data
+}
 async function queryList(pageNo: number, pageSize: number) {
 async function queryList(pageNo: number, pageSize: number) {
   try {
   try {
     const res = await rechargeRecordList({
     const res = await rechargeRecordList({
@@ -41,8 +45,8 @@ async function queryList(pageNo: number, pageSize: number) {
     paging.value.complete(false)
     paging.value.complete(false)
   }
   }
 }
 }
-onLoad((options) => {
-  queryParams.value = getPageParams(options)
+onLoad(() => {
+  getEnum()
 })
 })
 </script>
 </script>
 
 
@@ -52,7 +56,7 @@ onLoad((options) => {
       <view v-for="item in dataList" :key="item.id" class="bg-white px-22rpx py-18rpx">
       <view v-for="item in dataList" :key="item.id" class="bg-white px-22rpx py-18rpx">
         <view class="mb-8rpx flex items-center justify-between">
         <view class="mb-8rpx flex items-center justify-between">
           <view>ID:{{ item.orderNo }}</view>
           <view>ID:{{ item.orderNo }}</view>
-          <wd-text type="primary" bold text="Processing" />
+          <wd-text :type="item.status === 2 ? 'success' : 'primary'" bold :text="statusEnum.find(i => i.code === item.status)?.name" />
         </view>
         </view>
         <view class="flex items-center justify-between text-22rpx text-#3A444C">
         <view class="flex items-center justify-between text-22rpx text-#3A444C">
           <view>Wallet Balance:+{{ formatNumber(item.amount) }}</view>
           <view>Wallet Balance:+{{ formatNumber(item.amount) }}</view>

+ 13 - 5
src/pages/wallet/withdraw.vue

@@ -17,13 +17,16 @@ import { toast } from '@/utils/toast'
 defineOptions({
 defineOptions({
   name: 'Withdraw', // 提现
   name: 'Withdraw', // 提现
 })
 })
+const userInfo = computed(() => {
+  return getUserInfoHook()
+})
 const queryParams = ref<any>({})
 const queryParams = ref<any>({})
 // 表单数据
 // 表单数据
 const formData = ref({
 const formData = ref({
   amount: '',
   amount: '',
-  bank: '',
-  bankAccountName: '',
-  bankAccount: '',
+  bank: userInfo.value.bank,
+  bankAccountName: userInfo.value.bankAccountName,
+  bankAccount: userInfo.value.bankAccount,
   channel: 1,
   channel: 1,
   currency: 1,
   currency: 1,
 })
 })
@@ -57,10 +60,12 @@ onLoad((options) => {
     <wd-navbar
     <wd-navbar
       custom-class="bg-#FEE750!"
       custom-class="bg-#FEE750!"
       :bordered="false"
       :bordered="false"
-
-      safe-area-inset-top left-arrow placeholder fixed
+      safe-area-inset-top placeholder fixed
       title="Withdraw"
       title="Withdraw"
     >
     >
+      <template #left>
+        <wd-icon name="thin-arrow-left" size="32rpx" />
+      </template>
       <template #right>
       <template #right>
         <text class="text-28rpx" @click="toPage('/pages/wallet/withdrawRecord', { type: queryParams.type })">
         <text class="text-28rpx" @click="toPage('/pages/wallet/withdrawRecord', { type: queryParams.type })">
           Record
           Record
@@ -91,18 +96,21 @@ onLoad((options) => {
             placeholder="Bank Name"
             placeholder="Bank Name"
             no-border
             no-border
             custom-class="bandhu-auth-input-field"
             custom-class="bandhu-auth-input-field"
+            :readonly="userInfo.bank"
           />
           />
           <wd-input
           <wd-input
             v-model="formData.bankAccountName"
             v-model="formData.bankAccountName"
             placeholder="Bank Account Name"
             placeholder="Bank Account Name"
             no-border
             no-border
             custom-class="bandhu-auth-input-field"
             custom-class="bandhu-auth-input-field"
+            :readonly="userInfo.bankAccountName"
           />
           />
           <wd-input
           <wd-input
             v-model="formData.bankAccount"
             v-model="formData.bankAccount"
             placeholder="Bank Account No."
             placeholder="Bank Account No."
             no-border
             no-border
             custom-class="bandhu-auth-input-field"
             custom-class="bandhu-auth-input-field"
+            :readonly="userInfo.bankAccountName"
           />
           />
           <view class="flex items-center gap-20rpx">
           <view class="flex items-center gap-20rpx">
             <wd-input
             <wd-input

+ 22 - 0
src/store/dict.ts

@@ -0,0 +1,22 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+import { getEnum } from '@/api/common'
+
+export const useDictStore = defineStore(
+  'dict',
+  () => {
+    const dict = ref<any>({})
+
+    async function getDict(id: string) {
+      const res = await getEnum({ id })
+      dict.value = res.data
+    }
+    return {
+      dict,
+      getDict,
+    }
+  },
+  {
+    persist: true,
+  },
+)

+ 1 - 0
src/store/index.ts

@@ -13,5 +13,6 @@ store.use(
 
 
 export default store
 export default store
 
 
+export * from './dict'
 // 模块统一导出
 // 模块统一导出
 export * from './user'
 export * from './user'