Parcourir la source

feat(merchant): 扫码验券

EvilDragon il y a 4 mois
Parent
commit
c7d7616460

+ 1 - 1
packages/app/src/core/utils/common.ts

@@ -57,7 +57,7 @@ export const getCountsArr = (data, imgWidth, imgHeight) => {
   // 获取所有像素的累加值
   for (let row = 0; row < imgHeight; row++) {
     for (let col = 0; col < imgWidth; col++) {
-      if (row == 0) {
+      if (row === 0) {
         r += data[imgWidth * row + col]
         g += data[imgWidth * row + col + 1]
         b += data[imgWidth * row + col + 2]

+ 1 - 1
packages/app/src/pages/messages/index.vue

@@ -60,7 +60,7 @@ const messageTypes = ref([{}])
       </block>
     </wd-tabs>
     <PageHelper
-      :request="() => ({ list: [] })"
+      :request="getMessages"
       :query="{ messageType: '1' }"
       class="flex-grow flex flex-col"
     >

+ 9 - 6
packages/app/src/pages/mine/orders/code/index.vue

@@ -9,15 +9,11 @@ import { getPointsOrder } from '../../../../core/libs/requests'
 const id = ref()
 const { data, run: setData } = useRequest(() => getPointsOrder(id.value), { initialData: {} })
 
-onLoad(async (query: { id: string }) => {
-  id.value = query.id
-  await setData()
-})
-onReady(() => {
+const generateCode = async () => {
   // 获取uQRCode实例
   const qr = new UQRCode()
   // 设置二维码内容
-  qr.data = id.value
+  qr.data = data.value.orderNo
   // 设置二维码大小,必须与canvas设置的宽高一致
   qr.size = 200
   // 调用制作二维码方法
@@ -28,7 +24,14 @@ onReady(() => {
   qr.canvasContext = canvasContext
   // 调用绘制方法将二维码图案绘制到canvas上
   qr.drawCanvas()
+}
+
+onLoad(async (query: { id: string }) => {
+  id.value = query.id
+  await setData()
+  await generateCode()
 })
+onReady(() => {})
 </script>
 <template>
   <div class="flex-grow flex flex-col items-center">

+ 5 - 0
packages/merchant/src/core/libs/requests.ts

@@ -238,6 +238,11 @@ export const login = (data: {
 }) => httpPost('/app-api/member/auth/login', data)
 export const refreshToken = (refreshToken: string) =>
   httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
+/**
+ * 商家端-扫码验券
+ */
+export const scanCodeCheckPaper = (data: { orderNo: string }) =>
+  httpPost('/app-api/member/vendorApp/scanCodeCheckPaper', data)
 export const httpGetMock = <T>(data: T) =>
   new Promise<IResData<T>>((resolve) => resolve({ code: 1, msg: '', data } as IResData<T>))
 export interface Circle {

+ 14 - 10
packages/merchant/src/pages/home/index.vue

@@ -11,12 +11,13 @@
 <script lang="ts" setup>
 import useRequest from '../../hooks/useRequest'
 import dayjs from 'dayjs'
-import { getCircles } from '../../core/libs/requests'
+import { getCircles, scanCodeCheckPaper } from '../../core/libs/requests'
 import SectionHeading from '@designer-hub/app/src/components/section-heading.vue'
 import Card from '@designer-hub/app/src/components/card.vue'
 import { merchantPageHeaderBg, scanIcon, bookIcon } from '@designer-hub/assets/src/svgs'
 import { useUserStore } from '../../store'
 import { storeToRefs } from 'pinia'
+import { requestToast } from '@designer-hub/app/src/core/utils/common'
 
 defineOptions({
   name: 'Home',
@@ -104,6 +105,16 @@ const toSettlement = async () => {
 
   await uni.navigateTo({ url: '/pages/home/merchant/settlement' })
 }
+const handleScanning = async () => {
+  console.log('handleScanning')
+
+  const { result } = await uni.scanCode({ scanType: ['qrCode'] })
+  console.log(result)
+  await requestToast(() => scanCodeCheckPaper({ orderNo: result }), {
+    success: true,
+    successTitle: '验券成功',
+  })
+}
 onShow(async () => {
   // await run()
   console.log(circlesData.value)
@@ -218,7 +229,7 @@ onShareAppMessage(() => ({}))
           <wd-img width="36px" height="36px" :src="scanIcon"></wd-img>
         </div>
         <div class="w-full mt-[45px]">
-          <wd-button block :round="false">
+          <wd-button block :round="false" @click="handleScanning">
             <div
               class="text-center text-white text-base font-normal font-['PingFang_SC'] leading-normal"
             >
@@ -271,11 +282,4 @@ onShareAppMessage(() => ({}))
   </view>
 </template>
 
-<style>
-/* :deep(.wd-input) {
-  background: transparent;
-  height: 100%;
-  border: none;
-  width: 100%;
-} */
-</style>
+<style></style>