diff --git a/env/.env b/env/.env index ee96bb6..eb9419d 100644 --- a/env/.env +++ b/env/.env @@ -2,7 +2,7 @@ VITE_APP_TITLE = '六纬中考通' VITE_APP_PORT = 9000 VITE_UNI_APPID = 'H57F2ACE4' -VITE_WX_APPID = 'wxc48ad15d58a3e417' +VITE_WX_APPID = 'wx4b925e36c17dd54a' # h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base # https://uniapp.dcloud.net.cn/collocation/manifest.html#h5-router diff --git a/package.json b/package.json index 4bea13e..66cd0de 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "pinia": "2.0.36", "pinia-plugin-persistedstate": "3.2.1", "sard-uniapp": "^1.22.1", + "uqrcodejs": "^4.0.7", "vue": "^3.4.21", "z-paging": "^2.8.8" }, diff --git a/src/chart-sub/evaluate/components/LearnStudySuggestion.vue b/src/chart-sub/evaluate/components/LearnStudySuggestion.vue index 9aba562..7848444 100644 --- a/src/chart-sub/evaluate/components/LearnStudySuggestion.vue +++ b/src/chart-sub/evaluate/components/LearnStudySuggestion.vue @@ -9,14 +9,14 @@ 学习风格表现 - - {{ item }} + + {{ sonItem }} 学习风格特点 - - {{ item }} + + {{ sonItem }} diff --git a/src/chart-sub/evaluate/components/SuggestionCard.vue b/src/chart-sub/evaluate/components/SuggestionCard.vue index d71baf5..3add126 100644 --- a/src/chart-sub/evaluate/components/SuggestionCard.vue +++ b/src/chart-sub/evaluate/components/SuggestionCard.vue @@ -16,37 +16,6 @@ 避免过度放松,保持适度的学习节奏。 - - - - - - 饮食建议 - - - 保持规律作息,早睡早起,避免熬夜。 每天适当运动(如散步、跑步),保持精力充沛。 - 避免过度放松,保持适度的学习节奏。 - - - - - - - - 学习建议 - - - 保持规律作息,早睡早起,避免熬夜。 每天适当运动(如散步、跑步),保持精力充沛。 - 避免过度放松,保持适度的学习节奏。 - - + diff --git a/src/chart-sub/evaluate/psychologicalReport/sasReport.vue b/src/chart-sub/evaluate/psychologicalReport/sasReport.vue index 10f7626..8996ccd 100644 --- a/src/chart-sub/evaluate/psychologicalReport/sasReport.vue +++ b/src/chart-sub/evaluate/psychologicalReport/sasReport.vue @@ -14,7 +14,7 @@ - + diff --git a/src/chart-sub/evaluate/psychologicalReport/sdsReport.vue b/src/chart-sub/evaluate/psychologicalReport/sdsReport.vue index dc80cdb..3394569 100644 --- a/src/chart-sub/evaluate/psychologicalReport/sdsReport.vue +++ b/src/chart-sub/evaluate/psychologicalReport/sdsReport.vue @@ -14,7 +14,7 @@ - + diff --git a/src/pages-sub/demo/index.vue b/src/pages-sub/demo/index.vue index 3d51c9a..e0eb3eb 100644 --- a/src/pages-sub/demo/index.vue +++ b/src/pages-sub/demo/index.vue @@ -1,37 +1,37 @@ diff --git a/src/pages-sub/information/overTheYear.vue b/src/pages-sub/information/overTheYear.vue index 56d0c39..06048c2 100644 --- a/src/pages-sub/information/overTheYear.vue +++ b/src/pages-sub/information/overTheYear.vue @@ -101,23 +101,26 @@ const handleChange = () => { onShow(() => { - getAreaList().then(resp => { - if (resp.code === 200) { - areaList.value = [{ value: '', label: '不限' }, ...resp.result] - } + Promise.all([ + getAreaList().then(resp => { + if (resp.code === 200) { + areaList.value = [{ value: '', label: '不限' }, ...resp.result] + } + }), + getSchoolNature().then(resp => { + if (resp.code === 200) { + natureList.value = [{ value: '', label: '不限' }, ...resp.result] + } + }), + getHistoryYearList().then(resp => { + if (resp.code === 200) { + yearList.value = [...resp.result] + searchParams.value.year = yearList.value[yearList.value.length - 1]?.value + } + }) + ]).then(() => { + handleChange() }) - - getSchoolNature().then(resp => { - if (resp.code === 200) { - natureList.value = [{ value: '', label: '不限' }, ...resp.result] - } - }) - getHistoryYearList().then(resp => { - if (resp.code === 200) { - yearList.value = [{ value: '', label: '不限' }, ...resp.result] - } - }) - handleChange() }) diff --git a/src/pages-sub/invite/jump.vue b/src/pages-sub/invite/jump.vue new file mode 100644 index 0000000..bdade0f --- /dev/null +++ b/src/pages-sub/invite/jump.vue @@ -0,0 +1,92 @@ + + + diff --git a/src/pages-sub/invite/login.vue b/src/pages-sub/invite/login.vue new file mode 100644 index 0000000..3262986 --- /dev/null +++ b/src/pages-sub/invite/login.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/pages-sub/invite/qrcode.vue b/src/pages-sub/invite/qrcode.vue new file mode 100644 index 0000000..ecef8ff --- /dev/null +++ b/src/pages-sub/invite/qrcode.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/service/index.ts b/src/service/index.ts index 69febdc..aefddc4 100644 --- a/src/service/index.ts +++ b/src/service/index.ts @@ -6,3 +6,4 @@ export * from './listAll'; export * from './info'; export * from "./requestApi" +export * from './invite' diff --git a/src/service/invite.ts b/src/service/invite.ts new file mode 100644 index 0000000..b112a1a --- /dev/null +++ b/src/service/invite.ts @@ -0,0 +1,83 @@ +export interface CreatePromoterParams { + name: string + phone: string + referralCode?: string +} + +export interface Promoter { + _id?: string + id: string + name: string + phone: string + referralCode: string + promotionCount: number + promotionUrl: string + createdAt: string + updatedAt: string +} + +type InviteErrorData = { + message?: string + msg?: string + error?: string +} + +const INVITE_API_URL = 'https://liveroom.ycymedu.com/api/h5/promoters' +const INVITE_API_KEY = '28fd3c9a8739424ff5f38' + +export const createPromoter = (params: CreatePromoterParams) => { + return new Promise((resolve, reject) => { + uni.request({ + url: INVITE_API_URL, + method: 'POST', + data: params, + header: { + 'Content-Type': 'application/json', + 'x-api-key': INVITE_API_KEY, + }, + success: (res) => { + if (res.statusCode >= 200 && res.statusCode < 300) { + resolve(res.data as Promoter) + return + } + + reject(new Error(getInviteErrorMessage(res.data))) + }, + fail: () => { + reject(new Error('提交失败,请稍后重试')) + }, + }) + }) +} + +const getInviteErrorMessage = (data: unknown) => { + const errorData = data as InviteErrorData | undefined + return errorData?.message || errorData?.msg || errorData?.error || '提交失败,请稍后重试' +} + +const REDIRECT_API_URL = 'https://liveroom.ycymedu.com/api/h5/promotion-visits' + +export const trackPromoterRedirect = (referralCode: string) => { + return new Promise((resolve, reject) => { + uni.request({ + url: REDIRECT_API_URL, + method: 'POST', + data: { from: referralCode }, + header: { + 'Content-Type': 'application/json', + 'x-api-key': INVITE_API_KEY, + }, + success: (res) => { + if (res.statusCode >= 200 && res.statusCode < 300) { + resolve(res.data) + return + } + + reject(new Error(getInviteErrorMessage(res.data))) + }, + fail: () => { + reject(new Error('请求失败,请稍后重试')) + }, + }) + }) +} diff --git a/src/store/index.ts b/src/store/index.ts index a5edbf8..860fa5f 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -16,6 +16,7 @@ setActivePinia(store) export default store // 模块统一导出 +export * from './invite' export * from './token' export * from './user' -export * from "./wishlist" +export * from './wishlist' diff --git a/src/store/invite.ts b/src/store/invite.ts new file mode 100644 index 0000000..3ac4dac --- /dev/null +++ b/src/store/invite.ts @@ -0,0 +1,30 @@ +import type { Promoter } from '@/service/invite' +import { defineStore } from 'pinia' +import { computed, ref } from 'vue' + +export const useInviteStore = defineStore( + 'invite', + () => { + const promoter = ref(null) + const currentPromoter = computed(() => promoter.value) + + const setPromoter = (val: Promoter) => { + promoter.value = val + } + + const clearPromoter = () => { + promoter.value = null + uni.removeStorageSync('invite') + } + + return { + promoter, + currentPromoter, + setPromoter, + clearPromoter, + } + }, + { + persist: true, + }, +)