feat:设备验证

This commit is contained in:
dzc committed 2026-04-17 14:54:47 +08:00
1 parent d1127ab5f8
commit 552a006e25
27 files changed
+962 -820

No files matched your search

+8 -3
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout :title="scanPayState.mchName" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout :title="scanPayState.mchName" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<view class="h-screen flex flex-col">
<tm-sheet :margin="[0, 10]" class="flex flex-row">
<span class="text-2xl text-[#333] mr-8rpx line-height-normal">¥</span>
@@ -31,7 +31,7 @@
</template>
<script setup lang="ts">
import { ref, computed, reactive } from "vue"
import { ref, computed, reactive, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import payApi from "@@/api/pay"
@@ -45,6 +45,7 @@ import { isEmpty } from "radash"
import NumberKeyboard from "@/sheep/components/number-keyboard.vue"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const loading = ref(false)
const scanPayState = reactive({
mchId: "", // 商户id
@@ -83,7 +84,6 @@ onLoad(async (options: any) => {
return uni.showToast({ title: "扫码参数错误", icon: "none" })
})
onShow(async () => {
try {
await getWalletList()
@@ -91,6 +91,11 @@ onShow(async () => {
uni.hideLoading()
}
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
// 获取商户名
const getMchDetail = async (mchId: string) => {
+9 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { reactive, computed } from "vue"
import { ref, reactive, computed, defineAsyncComponent, nextTick, onMounted } from "vue"
import { onHide, onShow } from "@dcloudio/uni-app"
import { router } from "@@/index"
@@ -13,6 +13,7 @@ import Empty from "@@/components/empty/empty.vue"
const tabbarStore = useTabbarStore()
const crudLayoutRef = ref()
const state = reactive<any>({
swiperList: [
{
@@ -45,6 +46,12 @@ onShow(() => {
getAppMenuList()
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
onHide(() => {
})
@@ -93,7 +100,7 @@ const getAppMenuList = async () => {
</script>
<template>
<crud-layout title="智慧后勤系统" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="智慧后勤系统" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<view class="h-20rpx" />
<swiper class="w-full h-280rpx rounded-16rpx overflow-hidden" circular :indicator-dots="true"
indicator-active-color="#0779FD" indicator-color="#ffffff" :autoplay="true">
+12 -1
View File
@@ -2,7 +2,7 @@
import { ref, reactive } from "vue"
import { onShow } from "@dcloudio/uni-app"
import { constant, router } from "@@/index"
import { userApi, miniPlatformApi } from "@@/api"
import { userApi, miniPlatformApi, walletApi } from "@@/api"
import { getAppInfo } from "@@/utils/app"
import { SERVICE_IMAGE } from "@@/constant/index"
import { filePath } from "@@/utils/file"
@@ -57,6 +57,7 @@ const minAppGetphone = async (e) => {
// 查询用户信息
const { data: userData } = await userApi.userInfo()
uni.setStorageSync(constant.storageConstant.USERINFO, userData)
await createWallet()
uni.hideLoading()
uni.showToast({ title: "登录成功", icon: "success" })
router.jump("/pages/root/dashboard", {}, 3)
@@ -74,6 +75,16 @@ const doLogin = () => {
}
}
// 创建钱包
const createWallet = async () => {
try {
const { data, code }: any = await walletApi.createTopupWallet()
if (code != 0) throw new Error()
} catch (error) {
console.error("创建钱包意外的错误error:", error)
}
}
const affirmConfirm = () => {
state.isAgree = true
}
+13 -1
View File
@@ -2,12 +2,13 @@
import { ref, reactive } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { constant, router } from "@@/index"
import { userApi } from "@@/api"
import { userApi, walletApi } from "@@/api"
import { SERVICE_IMAGE } from "@@/constant/index"
import { filePath } from "@@/utils/file"
import AffirmCheck from "@/sheep/components/common/affirm-check.vue"
import AffirmModal from "@/sheep/components/common/affirm-modal.vue"
import VerifyDeviceImpModel from "@/sheep/components/verify-device-imp-model.vue"
const affirmModalRef = ref()
const state = reactive<any>({
@@ -69,11 +70,22 @@ const doSubmit = async () => {
username: applyForm.username,
password: applyForm.password,
} as GlobalSetting.RememberUser)
await createWallet()
uni.hideLoading()
uni.showToast({ title: "登录成功", icon: "none" })
router.jump("/pages/root/dashboard", {}, 3)
}
// 创建钱包
const createWallet = async () => {
try {
const { data, code }: any = await walletApi.createTopupWallet()
if (code != 0) throw new Error()
} catch (error) {
console.error("创建钱包意外的错误error:", error)
}
}
const disposeLogin = () => {
applyFormRef.value.submit()
const { isPass } = applyFormRef.value.validate()
+13 -2
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
@@ -28,21 +28,32 @@
</template>
<script setup lang="ts">
import { ref } from "vue"
import { ref, onMounted, nextTick } from "vue"
import { hooks, router } from "@/sheep"
import { doorApi } from "@/sheep/api"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { filePath } from "@@/utils/file"
import { SERVICE_IMAGE } from "@@/constant/index"
const pageRef = ref<any>(null)
const crudLayoutRef = ref<any>(null)
onLoad(() => {
})
onShow(() => {
if (pageRef.value) {
pageRef.value.reload(false)
}
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const pageHook = hooks.usePage(pageRef, doorApi.hardDoorPage, null, "data.records")
const query = (page: number, pagesize: number) => {
+9 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, reactive, nextTick } from "vue"
import { ref, reactive, nextTick, onMounted } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import dayjs from "dayjs"
@@ -8,6 +8,7 @@ import { accessStatsApi, merchantApi } from "@@/api"
import { filePath } from "@@/utils/file"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const state = reactive<any>({
pa: {
pagesize: 10,
@@ -24,6 +25,12 @@ onShow(async () => {
}
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const pageRef = ref<any>(null)
const pageHook = hooks.usePage(pageRef, merchantApi.page, null, "data.records")
const STORAGE_KEYS = {
@@ -43,7 +50,7 @@ const toDetail = async (v: any) => {
</script>
<template>
<crud-layout title="食堂" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="食堂" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
+9 -2
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout title="喜好分析" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="喜好分析" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" safe-area-inset-bottom :loading-more-enabled="true"
:show-scrollbar="false" @query="query" :auto-clean-list-when-reload="false"
:auto-scroll-to-top-when-reload="false" hide-empty-view>
@@ -79,7 +79,7 @@
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app"
import { ref } from "vue"
import { ref, onMounted, nextTick } from "vue"
import qiunDataCharts from "@/components/qiun-data-charts/qiun-data-charts.vue"
import { totalApi } from "@/sheep/api"
@@ -87,6 +87,7 @@ import { hooks } from "@/sheep"
import { SERVICE_IMAGE } from "@@/constant/index"
import { filePath } from "@@/utils/file"
const crudLayoutRef = ref<any>(null)
const pieChartData = ref({})
const areaChartData = ref({})
const productLikeTopList = ref<any>([])
@@ -158,6 +159,12 @@ const areaChartOpts = {
}
onLoad(() => {
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const pageRef = ref<any>(null)
+8 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, reactive } from "vue"
import { ref, reactive, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { merchantApi } from "@@/api"
@@ -8,6 +8,7 @@ import { filePath } from "@@/utils/file"
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const pageRef = ref<any>(null)
const state = reactive<any>({
pa: {
@@ -44,6 +45,11 @@ onShow(() => {
const search = () => {
pageRef.value && pageRef.value.reload(true)
}
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const doTab = (e: any) => {
const target = state.tabs[e]
@@ -63,7 +69,7 @@ const toDetail = async (v: any) => {
</script>
<template>
<crud-layout title="合作商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="合作商家" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
+8 -3
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<div class="integrated-title-card">
<div class="integrated-title">综合服务</div>
</div>
@@ -30,7 +30,7 @@
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app"
import { ref, onMounted } from "vue"
import { ref, onMounted, nextTick } from "vue"
import { filePath } from "@@/utils/file"
import { SERVICE_IMAGE } from "@@/constant/index"
@@ -39,6 +39,7 @@ import integratedApi from "@/sheep/api/integrated"
import { hooks } from "@@/index"
const todoCount = ref(0)
const crudLayoutRef = ref<any>(null)
const services = [
{
@@ -101,7 +102,11 @@ async function fetchTodoCount() {
onLoad(() => {
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
onMounted(() => {
fetchTodoCount()
})
+8 -3
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout title="我的" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="我的" mainIsScroll :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<template #main-top>
<view class="flex items-center py-24rpx px-40rpx" @tap="doUserArea">
<view class="flex items-center" v-if="state.userInfo?.sysUser?.userId">
@@ -76,7 +76,7 @@
</template>
<script setup lang="ts">
import { ref, reactive, computed } from "vue"
import { ref, reactive, computed, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { isEmpty } from "radash"
import dayjs from "dayjs"
@@ -89,6 +89,7 @@ import { SERVICE_IMAGE } from "@@/constant/index"
import ModifyUser from "@@/components/modify-user.vue"
const crudLayoutRef = ref<any>(null)
const modifyUserRef = ref(null)
const state = reactive<any>({
wallet: [],
@@ -375,7 +376,11 @@ onShow(() => {
// 获取存储中的用户信息
storage.getUserInfo()
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const isMallMchUser = async () => {
const { data } = await userApi.isMallMchUser()
+9 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, reactive } from "vue"
import { ref, reactive, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { hooks, router } from "@@/index"
@@ -13,6 +13,7 @@ import { useTabbarStore } from "@@/stores/tabbar"
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
import { getLaunchParam } from "@/sheep/utils/app"
const crudLayoutRef = ref<any>(null)
const tabbarStore = useTabbarStore()
const data = {
tabs: [
@@ -38,6 +39,12 @@ onShow(async () => {
pageRef.value.reload(false)
}
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const doTab = (e: any) => {
const target = data.tabs[e]
state.pa.orderStatus = target.id
@@ -78,7 +85,7 @@ const doRefund = (v: any) => {
</script>
<template>
<crud-layout title="订单" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="订单" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
+8 -2
View File
@@ -1,5 +1,5 @@
<template>
<crud-layout title="共富商城" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="共富商城" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
@@ -75,12 +75,13 @@ import { hooks, router } from "@/sheep"
import { prosperityShopApi } from "@/sheep/api"
import { onLoad } from "@dcloudio/uni-app"
import { isEmpty } from "radash"
import { reactive, ref } from "vue"
import { reactive, ref, onMounted, nextTick } from "vue"
import { filePath } from "@@/utils/file"
import { displayPrice } from "@/sheep/utils/format-money"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const state = reactive<any>({
params: {
keyword: "",
@@ -96,6 +97,11 @@ const query = (page: number, pagesize: number) => {
onLoad(async () => {
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
// 切换分类
// const doClassify = async (categoryId: string) => {
+9 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, reactive } from "vue"
import { ref, reactive, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { merchantApi } from "@@/api"
@@ -8,7 +8,9 @@ import { filePath } from "@@/utils/file"
import zTabs from "@@/components/other/z-tabs/z-tabs.vue"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const pageRef = ref<any>(null)
const state = reactive<any>({
pa: {
pagesize: 10,
@@ -45,6 +47,11 @@ onLoad(async () => {
onShow(() => {
pageRef.value && pageRef.value.reload(false)
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const search = () => {
pageRef.value && pageRef.value.reload(true)
@@ -71,7 +78,7 @@ const toDetail = async (v: any) => {
</script>
<template>
<crud-layout title="共富商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="共富商家" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
+8 -2
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, reactive } from "vue"
import { ref, reactive, onMounted, nextTick } from "vue"
import { onLoad, onShow } from "@dcloudio/uni-app"
import { merchantApi } from "@@/api"
@@ -7,6 +7,7 @@ import { hooks, router } from "@@/index"
import { filePath } from "@@/utils/file"
import { SERVICE_IMAGE } from "@@/constant/index"
const crudLayoutRef = ref<any>(null)
const pageRef = ref<any>(null)
const state = reactive<any>({
pa: {
@@ -26,6 +27,11 @@ onLoad(() => {
onShow(async () => {
pageRef.value && pageRef.value.reload(false)
})
onMounted(() => {
nextTick(() => {
crudLayoutRef.value?.checkVerifyDevice?.()
})
})
const toDetail = async (v: any) => {
const isLogin = await hooks.useCheckLogin()
@@ -36,7 +42,7 @@ const toDetail = async (v: any) => {
</script>
<template>
<crud-layout title="自营商家" :bg="filePath(SERVICE_IMAGE.blueBg)">
<crud-layout title="自营商家" :bg="filePath(SERVICE_IMAGE.blueBg)" ref="crudLayoutRef">
<z-paging ref="pageRef" height="100%" :fixed="false" v-model="pageHook.list" :default-page-size="10"
safe-area-inset-bottom :loading-more-enabled="true" :show-scrollbar="false" @query="query"
:auto-clean-list-when-reload="false" :auto-scroll-to-top-when-reload="false" @scroll="pageHook.scroll">
+2 -3
View File
@@ -102,8 +102,7 @@ const doPay = async () => {
}
const toRechargeRecord = () => {
return
router.jump("/pages/wallet/recharge-record", { walletId: state.walletId })
router.jump("/pages/wallet/detail", { id: state.walletId })
}
</script>
@@ -124,7 +123,7 @@ const toRechargeRecord = () => {
</view>
</view>
<view class="main-text-30 color-#fbddb0!"> ¥{{ hooks.useMoney(state.detail.balance) }} </view>
<view v-if="false" class="recharge-record-tag">
<view class="recharge-record-tag">
<text class="recharge-record-tag__text">充值记录</text>
</view>
</view>