ig
@@ -1,5 +1,6 @@
|
|||||||
import App from './App'
|
import App from './App'
|
||||||
var baseUrl ='https://admin.zhenyangtang.com.cn/';
|
import { API_BASE_URL } from './config/api.js'
|
||||||
|
var baseUrl = API_BASE_URL;
|
||||||
|
|
||||||
function joinApiUrl(base, path) {
|
function joinApiUrl(base, path) {
|
||||||
const b = String(base || '').replace(/\/+$/, '')
|
const b = String(base || '').replace(/\/+$/, '')
|
||||||
@@ -168,4 +169,4 @@ export function createApp() {
|
|||||||
app
|
app
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
|
|||||||
@@ -9,7 +9,9 @@
|
|||||||
"dev:app": "UNI_INPUT_DIR=\"$PWD\" uni -p app",
|
"dev:app": "UNI_INPUT_DIR=\"$PWD\" uni -p app",
|
||||||
"build:mp-weixin": "UNI_INPUT_DIR=\"$PWD\" uni build -p mp-weixin",
|
"build:mp-weixin": "UNI_INPUT_DIR=\"$PWD\" uni build -p mp-weixin",
|
||||||
"build:h5": "UNI_INPUT_DIR=\"$PWD\" uni build",
|
"build:h5": "UNI_INPUT_DIR=\"$PWD\" uni build",
|
||||||
"build:app": "UNI_INPUT_DIR=\"$PWD\" uni build -p app"
|
"build:app": "UNI_INPUT_DIR=\"$PWD\" uni build -p app",
|
||||||
|
"test:tang": "node --test build/tang-detective-native-plugin.test.mjs build/tang-detective-cos-media.test.mjs scripts/tang-cos/upload.test.mjs scripts/test-tang-platform.cjs scripts/test-tang-page-lifecycle.cjs",
|
||||||
|
"check:tang-output": "node build/validate-tang-detective-output.mjs dist/build/mp-weixin"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|||||||
@@ -220,8 +220,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "endless-game/index",
|
"path": "tang-detective/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "唐侦探",
|
||||||
|
"backgroundColor": "#f4fbf4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "endless-game/index",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"navigationBarTitleText": "识糖小课堂",
|
"navigationBarTitleText": "识糖小课堂",
|
||||||
|
|||||||
@@ -98,7 +98,17 @@
|
|||||||
<view v-if="chartUseMockData" class="st-chart-foot">
|
<view v-if="chartUseMockData" class="st-chart-foot">
|
||||||
<text class="st-chart-mock-hint">示例数据,累计记录满 7 天后显示您的真实趋势</text>
|
<text class="st-chart-mock-hint">示例数据,累计记录满 7 天后显示您的真实趋势</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="st-game-entry-list">
|
<view class="st-game-entry-list">
|
||||||
|
<view class="st-game-entry st-game-entry--in-card" role="button" aria-label="打开唐侦探,看连环画找线索" @click="goTangDetectivePage">
|
||||||
|
<view class="st-game-entry-icon">
|
||||||
|
<TongjiIcon name="view" size="sm" color="#006c49" />
|
||||||
|
</view>
|
||||||
|
<view class="st-game-entry-body">
|
||||||
|
<text class="st-game-entry-title">唐侦探</text>
|
||||||
|
<text class="st-game-entry-sub">看连环画,找线索,听一家人的故事</text>
|
||||||
|
</view>
|
||||||
|
<TongjiIcon name="chevron-right" size="sm" color="#64748b" />
|
||||||
|
</view>
|
||||||
<view class="st-game-entry st-game-entry--in-card" @click="goEndlessGamePage">
|
<view class="st-game-entry st-game-entry--in-card" @click="goEndlessGamePage">
|
||||||
<view class="st-game-entry-icon">
|
<view class="st-game-entry-icon">
|
||||||
<TongjiIcon name="sparkles" size="sm" color="#006c49" />
|
<TongjiIcon name="sparkles" size="sm" color="#006c49" />
|
||||||
@@ -1523,9 +1533,13 @@ function openGamePage(url) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function goEndlessGamePage() {
|
function goEndlessGamePage() {
|
||||||
openGamePage('/tongji/endless-game/index')
|
openGamePage('/tongji/endless-game/index')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function goTangDetectivePage() {
|
||||||
|
openGamePage('/tongji/tang-detective/index')
|
||||||
|
}
|
||||||
|
|
||||||
function navToUser() {
|
function navToUser() {
|
||||||
uni.redirectTo({ url: '/pages/user/user' })
|
uni.redirectTo({ url: '/pages/user/user' })
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from 'vite'
|
||||||
import uni from '@dcloudio/vite-plugin-uni'
|
import uni from '@dcloudio/vite-plugin-uni'
|
||||||
import Optimization from '@uni-ku/bundle-optimizer'
|
import Optimization from '@uni-ku/bundle-optimizer'
|
||||||
|
import tangDetectiveNativePlugin from './build/tang-detective-native-plugin.mjs'
|
||||||
|
import { API_BASE_URL } from './config/api.js'
|
||||||
|
|
||||||
// uni-app 工程根目录就是源码目录(HBuilderX 兼容)
|
// uni-app 工程根目录就是源码目录(HBuilderX 兼容)
|
||||||
// 编译产物默认输出到 ./dist/<mode>/<platform>
|
// 编译产物默认输出到 ./dist/<mode>/<platform>
|
||||||
@@ -16,6 +18,7 @@ export default defineConfig({
|
|||||||
dts: false,
|
dts: false,
|
||||||
logger: false,
|
logger: false,
|
||||||
}),
|
}),
|
||||||
|
tangDetectiveNativePlugin({ apiBaseUrl: API_BASE_URL }),
|
||||||
],
|
],
|
||||||
css: {
|
css: {
|
||||||
preprocessorOptions: {
|
preprocessorOptions: {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import App from './App'
|
import App from './App'
|
||||||
|
import { API_BASE_URL } from './config/api.js'
|
||||||
|
|
||||||
var baseUrl = 'https://xt.zhenyangtang.com.cn/'
|
var baseUrl = API_BASE_URL
|
||||||
|
|
||||||
function joinApiUrl(base, path) {
|
function joinApiUrl(base, path) {
|
||||||
const b = String(base || '').replace(/\/+$/, '')
|
const b = String(base || '').replace(/\/+$/, '')
|
||||||
|
|||||||
@@ -9,7 +9,9 @@
|
|||||||
"dev:app": "cross-env UNI_INPUT_DIR=. uni -p app",
|
"dev:app": "cross-env UNI_INPUT_DIR=. uni -p app",
|
||||||
"build:mp-weixin": "cross-env UNI_INPUT_DIR=. uni build -p mp-weixin",
|
"build:mp-weixin": "cross-env UNI_INPUT_DIR=. uni build -p mp-weixin",
|
||||||
"build:h5": "cross-env UNI_INPUT_DIR=. uni build",
|
"build:h5": "cross-env UNI_INPUT_DIR=. uni build",
|
||||||
"build:app": "cross-env UNI_INPUT_DIR=. uni build -p app"
|
"build:app": "cross-env UNI_INPUT_DIR=. uni build -p app",
|
||||||
|
"test:tang": "node --test build/tang-detective-native-plugin.test.mjs build/tang-detective-cos-media.test.mjs build/tang-detective-source-validation.test.mjs scripts/tang-cos/upload.test.mjs scripts/test-tang-platform.cjs scripts/test-tang-page-lifecycle.cjs",
|
||||||
|
"check:tang-output": "node build/validate-tang-detective-output.mjs dist/build/mp-weixin && node build/validate-tang-tongji-host.mjs dist/build/mp-weixin"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"uniapp",
|
"uniapp",
|
||||||
|
|||||||
@@ -94,6 +94,13 @@
|
|||||||
"enableShareAppMessage": true,
|
"enableShareAppMessage": true,
|
||||||
"enableShareTimeline": true
|
"enableShareTimeline": true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "tongji/tang-detective/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "唐侦探",
|
||||||
|
"backgroundColor": "#f4fbf4"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"subPackages": [
|
"subPackages": [
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="375px" height="268px" viewBox="0 0 375 268" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 61.2 (89653) - https://sketch.com -->
|
|
||||||
<title>背景</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="50%" y1="81.9277858%" x2="50%" y2="100%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#006EFF" offset="0%"></stop>
|
|
||||||
<stop stop-color="#00C8DC" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="浅色版本" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="主页" fill="url(#linearGradient-1)">
|
|
||||||
<g id="编组-4" transform="translate(-315.000000, -732.000000)">
|
|
||||||
<circle id="蒙版" cx="500" cy="500" r="500"></circle>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 934 B |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 45 KiB |
@@ -99,6 +99,16 @@
|
|||||||
<text class="st-chart-mock-hint">示例数据,累计记录满 7 天后显示您的真实趋势</text>
|
<text class="st-chart-mock-hint">示例数据,累计记录满 7 天后显示您的真实趋势</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="st-game-entry-list">
|
<view class="st-game-entry-list">
|
||||||
|
<view class="st-game-entry st-game-entry--in-card" role="button" aria-label="打开唐侦探,看连环画找线索" @click="goTangDetectivePage">
|
||||||
|
<view class="st-game-entry-icon">
|
||||||
|
<TongjiIcon name="view" size="sm" color="#006c49" />
|
||||||
|
</view>
|
||||||
|
<view class="st-game-entry-body">
|
||||||
|
<text class="st-game-entry-title">唐侦探</text>
|
||||||
|
<text class="st-game-entry-sub">看连环画,找线索,听一家人的故事</text>
|
||||||
|
</view>
|
||||||
|
<TongjiIcon name="chevron-right" size="sm" color="#64748b" />
|
||||||
|
</view>
|
||||||
<view class="st-game-entry st-game-entry--in-card" @click="goEndlessGamePage">
|
<view class="st-game-entry st-game-entry--in-card" @click="goEndlessGamePage">
|
||||||
<view class="st-game-entry-icon">
|
<view class="st-game-entry-icon">
|
||||||
<TongjiIcon name="sparkles" size="sm" color="#006c49" />
|
<TongjiIcon name="sparkles" size="sm" color="#006c49" />
|
||||||
@@ -1527,6 +1537,10 @@ function goEndlessGamePage() {
|
|||||||
openGamePage('/tongji/endless-game/index')
|
openGamePage('/tongji/endless-game/index')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function goTangDetectivePage() {
|
||||||
|
openGamePage('/tongji/tang-detective/index')
|
||||||
|
}
|
||||||
|
|
||||||
function navToUser() {
|
function navToUser() {
|
||||||
uni.redirectTo({ url: '/pages/user/user' })
|
uni.redirectTo({ url: '/pages/user/user' })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ training/static/
|
|||||||
├── voice/ # (规划中) TTS 语音教练
|
├── voice/ # (规划中) TTS 语音教练
|
||||||
│ ├── numbers/ 数字报数 1~30
|
│ ├── numbers/ 数字报数 1~30
|
||||||
│ └── prompts/ 开始/休息/再来 等口令
|
│ └── prompts/ 开始/休息/再来 等口令
|
||||||
├── bgm/ # (规划中) 训练/休息背景乐
|
└── bgm/ # (规划中) 训练/休息背景乐
|
||||||
└── footprint.svg # 脚印图标(早期方案残留,可保留作为备用素材)
|
```
|
||||||
```
|
|
||||||
|
早期备用脚印图标 `footprint.svg` 无运行时引用,已于 2026-09-08 随素材清理移出到项目外可恢复备份;记录见 `docs/TANG-COS-MIGRATION-20260908.md`。
|
||||||
|
|
||||||
> 节拍器音频已完全走 CDN(`gz-1349751149.cos.ap-guangzhou.myqcloud.com`),减少小程序包体积约 210 KB。`useMetronomeBg.ts` / `useMetronome.ts` 中的 URL 即源信息,更换音色只需改 hook 里的常量。
|
> 节拍器音频已完全走 CDN(`gz-1349751149.cos.ap-guangzhou.myqcloud.com`),减少小程序包体积约 210 KB。`useMetronomeBg.ts` / `useMetronome.ts` 中的 URL 即源信息,更换音色只需改 hook 里的常量。
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 150">
|
|
||||||
<g fill="#e2e8f0" fill-opacity="0.92">
|
|
||||||
<path d="M 50,30 C 38,30 28,32 24,40 C 19,50 18,60 22,70 C 26,82 26,92 28,102 C 30,122 40,140 50,140 C 60,140 70,122 72,102 C 74,92 74,82 78,70 C 82,60 81,50 76,40 C 72,32 62,30 50,30 Z"/>
|
|
||||||
<ellipse cx="30" cy="20" rx="6.5" ry="8" transform="rotate(-18 30 20)"/>
|
|
||||||
<ellipse cx="43" cy="11" rx="5" ry="6.8" transform="rotate(-6 43 11)"/>
|
|
||||||
<ellipse cx="55" cy="9" rx="4.5" ry="6.2" transform="rotate(4 55 9)"/>
|
|
||||||
<ellipse cx="66" cy="13" rx="4" ry="5.5" transform="rotate(13 66 13)"/>
|
|
||||||
<ellipse cx="76" cy="20" rx="3.5" ry="5" transform="rotate(22 76 20)"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 741 B |
@@ -1,8 +1,10 @@
|
|||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from 'vite'
|
||||||
import uni from '@dcloudio/vite-plugin-uni'
|
import uni from '@dcloudio/vite-plugin-uni'
|
||||||
|
import tangDetectiveNativePlugin from './build/tang-detective-native-plugin.mjs'
|
||||||
|
import { API_BASE_URL } from './config/api.js'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [uni()],
|
plugins: [uni(), tangDetectiveNativePlugin({ apiBaseUrl: API_BASE_URL })],
|
||||||
css: {
|
css: {
|
||||||
preprocessorOptions: {
|
preprocessorOptions: {
|
||||||
scss: {
|
scss: {
|
||||||
|
|||||||
@@ -14,3 +14,8 @@ Route::post('ej-pharmacy/webhook', 'EjPharmacyCallback/webhook');
|
|||||||
// 企业微信内部应用推广助手:公开 JS 与服务端随机分流。
|
// 企业微信内部应用推广助手:公开 JS 与服务端随机分流。
|
||||||
Route::get('qywx-promotion/js/:key', 'QywxPromotionPublic/script');
|
Route::get('qywx-promotion/js/:key', 'QywxPromotionPublic/script');
|
||||||
Route::get('qywx-promotion/go/:key', 'QywxPromotionPublic/redirect');
|
Route::get('qywx-promotion/go/:key', 'QywxPromotionPublic/redirect');
|
||||||
|
|
||||||
|
// 唐侦探独立章节存档:使用统一 token,与控糖消消乐周榜隔离。
|
||||||
|
Route::get('tang/catalog', 'TangDetective/catalog');
|
||||||
|
Route::get('tang/progress', 'TangDetective/progress');
|
||||||
|
Route::post('tang/saveProgress', 'TangDetective/saveProgress');
|
||||||
|
|||||||