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 @@
-
- http://localhost:9000/#/pages-sub/demo/index
-
-
- 分包页面demo
-
-
- 分包页面里面的components示例
-
-
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 @@
+
+
+
+
+ {{ errorMessage }}
+
+
+
+ 重新生成
+
+
+ 保存到手机
+
+
+
+
+
+
+
+
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,
+ },
+)