refactor: rename TraceCD project to Trace
All checks were successful
Java Maven 3.9.9 & JDK 26 CI/CD Pipeline / build-and-deploy (push) Successful in 9m30s
All checks were successful
Java Maven 3.9.9 & JDK 26 CI/CD Pipeline / build-and-deploy (push) Successful in 9m30s
This commit is contained in:
parent
04c1503d4a
commit
8f5a35395d
@ -3,7 +3,7 @@ name: Java Maven 3.9.9 & JDK 26 CI/CD Pipeline
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- dev # 只有推送到 main 分支时才触发自动部署
|
- dev # 只有推送到 dev 分支时才触发自动部署
|
||||||
|
|
||||||
env:
|
env:
|
||||||
IMAGE_NAME: trace-img
|
IMAGE_NAME: trace-img
|
||||||
@ -43,14 +43,14 @@ jobs:
|
|||||||
echo "🔄 正在启动全新 JDK 26 容器环境..."
|
echo "🔄 正在启动全新 JDK 26 容器环境..."
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name ${CONTAINER_NAME} \
|
--name ${CONTAINER_NAME} \
|
||||||
--network tracecd-net \
|
--network trace-net \
|
||||||
-p 127.0.0.1:${APP_PORT}:${APP_PORT} \
|
-p 127.0.0.1:${APP_PORT}:${APP_PORT} \
|
||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
--memory 384m \
|
--memory 384m \
|
||||||
--memory-swap 768m \
|
--memory-swap 768m \
|
||||||
--cpus 0.75 \
|
--cpus 0.75 \
|
||||||
--pids-limit 256 \
|
--pids-limit 256 \
|
||||||
--env-file /opt/tracecd/app.env \
|
--env-file /opt/trace/app.env \
|
||||||
-e JAVA_TOOL_OPTIONS="-Xms64m -Xmx256m -XX:+UseSerialGC" \
|
-e JAVA_TOOL_OPTIONS="-Xms64m -Xmx256m -XX:+UseSerialGC" \
|
||||||
${IMAGE_NAME}:latest
|
${IMAGE_NAME}:latest
|
||||||
|
|
||||||
|
|||||||
4
.idea/dataSources.xml
generated
4
.idea/dataSources.xml
generated
@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
<data-source source="LOCAL" name="tracecd@192.168.2.5" uuid="911f82d8-654e-4293-bc95-e53e9a4e6769">
|
<data-source source="LOCAL" name="trace@192.168.2.5" uuid="911f82d8-654e-4293-bc95-e53e9a4e6769">
|
||||||
<driver-ref>mysql.8</driver-ref>
|
<driver-ref>mysql.8</driver-ref>
|
||||||
<synchronize>true</synchronize>
|
<synchronize>true</synchronize>
|
||||||
<imported>true</imported>
|
<imported>true</imported>
|
||||||
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
||||||
<jdbc-url>jdbc:mysql://192.168.2.5:3306/tracecd?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true</jdbc-url>
|
<jdbc-url>jdbc:mysql://192.168.2.5:3306/trace?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true</jdbc-url>
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
</data-source>
|
</data-source>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@ -36,4 +36,4 @@ Standard Maven layout:
|
|||||||
- `src/main/resources/` — resources bundled with the app
|
- `src/main/resources/` — resources bundled with the app
|
||||||
- `src/test/java/` — test source
|
- `src/test/java/` — test source
|
||||||
|
|
||||||
Group ID: `com.l` | Artifact ID: `tracecd` | Version: `1.0-SNAPSHOT`
|
Group ID: `com.l` | Artifact ID: `trace` | Version: `1.0-SNAPSHOT`
|
||||||
|
|||||||
20
README.md
20
README.md
@ -1,4 +1,4 @@
|
|||||||
# TraceCD — 语音智能记账助手
|
# Trace — 语音智能记账助手
|
||||||
|
|
||||||
基于语音识别的智能日常记账应用。按住说话即可完成事项录入与查询,由 DeepSeek 大模型理解意图并自动生成 SQL,实现"说话即记账"的流畅体验。
|
基于语音识别的智能日常记账应用。按住说话即可完成事项录入与查询,由 DeepSeek 大模型理解意图并自动生成 SQL,实现"说话即记账"的流畅体验。
|
||||||
|
|
||||||
@ -41,8 +41,8 @@
|
|||||||
## 项目结构
|
## 项目结构
|
||||||
|
|
||||||
```
|
```
|
||||||
src/main/java/com/l/tracecd/
|
src/main/java/com/l/trace/
|
||||||
├── TracecdApplication.java # 应用主入口
|
├── TraceApplication.java # 应用主入口
|
||||||
├── config/
|
├── config/
|
||||||
│ ├── DatabaseInitializer.java # 启动自动建表
|
│ ├── DatabaseInitializer.java # 启动自动建表
|
||||||
│ ├── DeepSeekConfig.java # DeepSeek API 配置
|
│ ├── DeepSeekConfig.java # DeepSeek API 配置
|
||||||
@ -108,7 +108,7 @@ src/main/java/com/l/tracecd/
|
|||||||
创建 MySQL 数据库(应用会自动建表):
|
创建 MySQL 数据库(应用会自动建表):
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
CREATE DATABASE IF NOT EXISTS tracecd DEFAULT CHARSET utf8mb4;
|
CREATE DATABASE IF NOT EXISTS trace DEFAULT CHARSET utf8mb4;
|
||||||
```
|
```
|
||||||
|
|
||||||
修改 `src/main/resources/application.yml` 中的数据库连接信息:
|
修改 `src/main/resources/application.yml` 中的数据库连接信息:
|
||||||
@ -116,7 +116,7 @@ CREATE DATABASE IF NOT EXISTS tracecd DEFAULT CHARSET utf8mb4;
|
|||||||
```yaml
|
```yaml
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:mysql://your-host:3306/tracecd?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
|
url: jdbc:mysql://your-host:3306/trace?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
|
||||||
username: your-username
|
username: your-username
|
||||||
password: your-password
|
password: your-password
|
||||||
```
|
```
|
||||||
@ -141,7 +141,7 @@ mvn spring-boot:run
|
|||||||
|
|
||||||
# 或先打包再运行
|
# 或先打包再运行
|
||||||
mvn clean package -DskipTests
|
mvn clean package -DskipTests
|
||||||
java -jar target/tracecd-1.0-SNAPSHOT.jar
|
java -jar target/trace-1.0-SNAPSHOT.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. 访问
|
### 4. 访问
|
||||||
@ -155,18 +155,18 @@ java -jar target/tracecd-1.0-SNAPSHOT.jar
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 构建镜像
|
# 构建镜像
|
||||||
docker build -t tracecd:latest .
|
docker build -t trace:latest .
|
||||||
|
|
||||||
# 运行容器
|
# 运行容器
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-p 8080:8080 \
|
-p 8080:8080 \
|
||||||
-e DEEPSEEK_API_KEY=sk-your-key \
|
-e DEEPSEEK_API_KEY=sk-your-key \
|
||||||
-e MIMO_API_KEY=sk-your-key \
|
-e MIMO_API_KEY=sk-your-key \
|
||||||
-e SPRING_DATASOURCE_URL=jdbc:mysql://your-host:3306/tracecd?... \
|
-e SPRING_DATASOURCE_URL=jdbc:mysql://your-host:3306/trace?... \
|
||||||
-e SPRING_DATASOURCE_USERNAME=root \
|
-e SPRING_DATASOURCE_USERNAME=root \
|
||||||
-e SPRING_DATASOURCE_PASSWORD=root \
|
-e SPRING_DATASOURCE_PASSWORD=root \
|
||||||
--name tracecd \
|
--name trace \
|
||||||
tracecd:latest
|
trace:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## API 接口
|
## API 接口
|
||||||
|
|||||||
@ -1,18 +1,18 @@
|
|||||||
# TraceCD deployment on HK-1
|
# Trace deployment on HK-1
|
||||||
|
|
||||||
The production stack lives at `/opt/tracecd` on `156.238.122.140` and is sized for a 1-core, 1-GiB host.
|
The production stack lives at `/opt/trace` on `156.238.122.140` and is sized for a 1-core, 1-GiB host.
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
- MySQL 8.0.40: Docker-only `tracecd-net`; no host port is published.
|
- MySQL 8.0.40: Docker-only `trace-net`; no host port is published.
|
||||||
- Gitea 1.22.6: HTTPS at `git.1633292.cn`; host ports 3000 and 2222 remain bound to loopback.
|
- Gitea 1.22.6: HTTPS at `git.1633292.cn`; host ports 3000 and 2222 remain bound to loopback.
|
||||||
- Gitea Actions runner: capacity 1, label `centos-env`, Docker socket access.
|
- Gitea Actions runner: capacity 1, label `centos-env`, Docker socket access.
|
||||||
- TraceCD: built by Gitea Actions, bound to `127.0.0.1:8080` and served by host Nginx.
|
- Trace: built by Gitea Actions, bound to `127.0.0.1:8080` and served by host Nginx.
|
||||||
- Nginx: HTTPS for `t.1633292.cn` and `git.1633292.cn`. Its stream module owns public port 443 and routes these two SNI names to local TLS virtual hosts; all other SNI traffic passes unchanged to Xray on `127.0.0.1:7443`.
|
- Nginx: HTTPS for `t.1633292.cn` and `git.1633292.cn`. Its stream module owns public port 443 and routes these two SNI names to local TLS virtual hosts; all other SNI traffic passes unchanged to Xray on `127.0.0.1:7443`.
|
||||||
|
|
||||||
## Bootstrap
|
## Bootstrap
|
||||||
|
|
||||||
Copy `compose.yaml`, `runner-config.yaml`, `nginx-tracecd.conf`, `nginx-sni.conf`, and `bootstrap-env.sh` to `/opt/tracecd`. Install `nginx-mod-stream` and `certbot`, issue certificates for both hostnames, move Xray's listener to `127.0.0.1:7443`, and add this top-level block to `/etc/nginx/nginx.conf`:
|
Copy `compose.yaml`, `runner-config.yaml`, `nginx-trace.conf`, `nginx-sni.conf`, and `bootstrap-env.sh` to `/opt/trace`. Install `nginx-mod-stream` and `certbot`, issue certificates for both hostnames, move Xray's listener to `127.0.0.1:7443`, and add this top-level block to `/etc/nginx/nginx.conf`:
|
||||||
|
|
||||||
```nginx
|
```nginx
|
||||||
stream {
|
stream {
|
||||||
@ -23,10 +23,10 @@ stream {
|
|||||||
Then run:
|
Then run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/tracecd
|
cd /opt/trace
|
||||||
chmod 700 bootstrap-env.sh
|
chmod 700 bootstrap-env.sh
|
||||||
./bootstrap-env.sh
|
./bootstrap-env.sh
|
||||||
install -m 644 nginx-tracecd.conf /etc/nginx/conf.d/tracecd.conf
|
install -m 644 nginx-trace.conf /etc/nginx/conf.d/trace.conf
|
||||||
install -D -m 644 nginx-sni.conf /etc/nginx/stream.d/sni.conf
|
install -D -m 644 nginx-sni.conf /etc/nginx/stream.d/sni.conf
|
||||||
nginx -t && systemctl reload nginx
|
nginx -t && systemctl reload nginx
|
||||||
docker compose pull
|
docker compose pull
|
||||||
@ -38,7 +38,7 @@ docker compose up -d
|
|||||||
## Operations
|
## Operations
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/tracecd
|
cd /opt/trace
|
||||||
docker compose ps
|
docker compose ps
|
||||||
docker compose logs --tail 100 mysql gitea runner
|
docker compose logs --tail 100 mysql gitea runner
|
||||||
docker stats --no-stream
|
docker stats --no-stream
|
||||||
@ -48,4 +48,4 @@ curl -I https://git.1633292.cn/user/login
|
|||||||
|
|
||||||
Certbot's packaged systemd timer renews the certificates. A successful renewal must be followed by `systemctl reload nginx`; `/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh` provides that hook on the server.
|
Certbot's packaged systemd timer renews the certificates. A successful renewal must be followed by `systemctl reload nginx`; `/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh` provides that hook on the server.
|
||||||
|
|
||||||
The workflow in `.gitea/workflows/deploy.yaml` builds on pushes to `dev`, joins the application to `tracecd-net`, loads `/opt/tracecd/app.env`, and replaces only `trace-container`.
|
The workflow in `.gitea/workflows/deploy.yaml` builds on pushes to `dev`, joins the application to `trace-net`, loads `/opt/trace/app.env`, and replaces only `trace-container`.
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/tracecd?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
|
SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/trace?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
|
||||||
SPRING_DATASOURCE_USERNAME=tracecd
|
SPRING_DATASOURCE_USERNAME=trace
|
||||||
SPRING_DATASOURCE_PASSWORD=replace-with-stack-env-mysql-password
|
SPRING_DATASOURCE_PASSWORD=replace-with-stack-env-mysql-password
|
||||||
DEEPSEEK_API_KEY=replace-with-secret
|
DEEPSEEK_API_KEY=replace-with-secret
|
||||||
MIMO_API_KEY=replace-with-secret
|
MIMO_API_KEY=replace-with-secret
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
cd /opt/tracecd
|
cd /opt/trace
|
||||||
umask 077
|
umask 077
|
||||||
|
|
||||||
if [[ -e stack.env || -e app.env ]]; then
|
if [[ -e stack.env || -e app.env ]]; then
|
||||||
@ -16,12 +16,12 @@ app_default_password="$(openssl rand -hex 16)"
|
|||||||
{
|
{
|
||||||
printf 'MYSQL_ROOT_PASSWORD=%s\n' "$mysql_root_password"
|
printf 'MYSQL_ROOT_PASSWORD=%s\n' "$mysql_root_password"
|
||||||
printf 'MYSQL_PASSWORD=%s\n' "$mysql_app_password"
|
printf 'MYSQL_PASSWORD=%s\n' "$mysql_app_password"
|
||||||
printf 'GITEA_HOST=156.238.122.140\n'
|
printf 'GITEA_HOST=git.1633292.cn\n'
|
||||||
} > stack.env
|
} > stack.env
|
||||||
|
|
||||||
{
|
{
|
||||||
printf '%s\n' 'SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/tracecd?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true'
|
printf '%s\n' 'SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/trace?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true'
|
||||||
printf 'SPRING_DATASOURCE_USERNAME=tracecd\n'
|
printf 'SPRING_DATASOURCE_USERNAME=trace\n'
|
||||||
printf 'SPRING_DATASOURCE_PASSWORD=%s\n' "$mysql_app_password"
|
printf 'SPRING_DATASOURCE_PASSWORD=%s\n' "$mysql_app_password"
|
||||||
printf 'DEEPSEEK_API_KEY=\n'
|
printf 'DEEPSEEK_API_KEY=\n'
|
||||||
printf 'MIMO_API_KEY=\n'
|
printf 'MIMO_API_KEY=\n'
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:8.0.40
|
image: mysql:8.0.40
|
||||||
container_name: tracecd-mysql
|
container_name: trace-mysql
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file: stack.env
|
env_file: stack.env
|
||||||
environment:
|
environment:
|
||||||
MYSQL_DATABASE: tracecd
|
MYSQL_DATABASE: trace
|
||||||
MYSQL_USER: tracecd
|
MYSQL_USER: trace
|
||||||
command:
|
command:
|
||||||
- --character-set-server=utf8mb4
|
- --character-set-server=utf8mb4
|
||||||
- --collation-server=utf8mb4_0900_ai_ci
|
- --collation-server=utf8mb4_0900_ai_ci
|
||||||
@ -19,7 +19,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./data/mysql:/var/lib/mysql
|
- ./data/mysql:/var/lib/mysql
|
||||||
networks:
|
networks:
|
||||||
- tracecd-net
|
- trace-net
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
|
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
@ -60,7 +60,7 @@ services:
|
|||||||
- "127.0.0.1:3000:3000"
|
- "127.0.0.1:3000:3000"
|
||||||
- "127.0.0.1:2222:22"
|
- "127.0.0.1:2222:22"
|
||||||
networks:
|
networks:
|
||||||
- tracecd-net
|
- trace-net
|
||||||
mem_limit: 256m
|
mem_limit: 256m
|
||||||
memswap_limit: 512m
|
memswap_limit: 512m
|
||||||
cpus: 0.35
|
cpus: 0.35
|
||||||
@ -85,12 +85,12 @@ services:
|
|||||||
- ./runner-token:/run/secrets/runner_token:ro
|
- ./runner-token:/run/secrets/runner_token:ro
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
networks:
|
networks:
|
||||||
- tracecd-net
|
- trace-net
|
||||||
mem_limit: 128m
|
mem_limit: 128m
|
||||||
memswap_limit: 256m
|
memswap_limit: 256m
|
||||||
cpus: 0.25
|
cpus: 0.25
|
||||||
pids_limit: 128
|
pids_limit: 128
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
tracecd-net:
|
trace-net:
|
||||||
name: tracecd-net
|
name: trace-net
|
||||||
|
|||||||
@ -20,7 +20,7 @@ server {
|
|||||||
ssl_certificate /etc/letsencrypt/live/t.1633292.cn/fullchain.pem;
|
ssl_certificate /etc/letsencrypt/live/t.1633292.cn/fullchain.pem;
|
||||||
ssl_certificate_key /etc/letsencrypt/live/t.1633292.cn/privkey.pem;
|
ssl_certificate_key /etc/letsencrypt/live/t.1633292.cn/privkey.pem;
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
ssl_session_cache shared:tracecd_tls:1m;
|
ssl_session_cache shared:trace_tls:1m;
|
||||||
ssl_session_timeout 10m;
|
ssl_session_timeout 10m;
|
||||||
|
|
||||||
client_max_body_size 10m;
|
client_max_body_size 10m;
|
||||||
@ -16,11 +16,11 @@ cache:
|
|||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
container:
|
container:
|
||||||
network: tracecd-net
|
network: trace-net
|
||||||
privileged: false
|
privileged: false
|
||||||
options: "-v /opt/tracecd/app.env:/opt/tracecd/app.env:ro"
|
options: "-v /opt/trace/app.env:/opt/trace/app.env:ro"
|
||||||
valid_volumes:
|
valid_volumes:
|
||||||
- /opt/tracecd/app.env
|
- /opt/trace/app.env
|
||||||
docker_host: ""
|
docker_host: ""
|
||||||
force_pull: false
|
force_pull: false
|
||||||
force_rebuild: false
|
force_rebuild: false
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@ -12,7 +12,7 @@
|
|||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<groupId>com.l</groupId>
|
<groupId>com.l</groupId>
|
||||||
<artifactId>tracecd</artifactId>
|
<artifactId>trace</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd;
|
package com.l.trace;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
* 应用主入口
|
* 应用主入口
|
||||||
*/
|
*/
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class TracecdApplication {
|
public class TraceApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(TracecdApplication.class, args);
|
SpringApplication.run(TraceApplication.class, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import com.l.tracecd.interceptor.AuthInterceptor;
|
import com.l.trace.interceptor.AuthInterceptor;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.l.tracecd.config;
|
package com.l.trace.config;
|
||||||
|
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.session.MapSession;
|
import org.springframework.session.MapSession;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.constant;
|
package com.l.trace.constant;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统常量定义,避免魔法值
|
* 系统常量定义,避免魔法值
|
||||||
@ -1,8 +1,8 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.entity.User;
|
import com.l.trace.entity.User;
|
||||||
import com.l.tracecd.service.AuthService;
|
import com.l.trace.service.AuthService;
|
||||||
import jakarta.servlet.http.HttpSession;
|
import jakarta.servlet.http.HttpSession;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -1,8 +1,8 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import com.l.tracecd.dto.BrowseQuery;
|
import com.l.trace.dto.BrowseQuery;
|
||||||
import com.l.tracecd.entity.DailyRecord;
|
import com.l.trace.entity.DailyRecord;
|
||||||
import com.l.tracecd.service.RecordService;
|
import com.l.trace.service.RecordService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -1,8 +1,8 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.dto.FilterOption;
|
import com.l.trace.dto.FilterOption;
|
||||||
import com.l.tracecd.service.DistinctValueService;
|
import com.l.trace.service.DistinctValueService;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.l.tracecd.controller;
|
package com.l.trace.controller;
|
||||||
|
|
||||||
import com.l.tracecd.dto.VoiceResponse;
|
import com.l.trace.dto.VoiceResponse;
|
||||||
import com.l.tracecd.service.VoiceService;
|
import com.l.trace.service.VoiceService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.dto;
|
package com.l.trace.dto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.dto;
|
package com.l.trace.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.dto;
|
package com.l.trace.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.dto;
|
package com.l.trace.dto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.dto;
|
package com.l.trace.dto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.entity;
|
package com.l.trace.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.entity;
|
package com.l.trace.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package com.l.tracecd.entity;
|
package com.l.trace.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.l.tracecd.interceptor;
|
package com.l.trace.interceptor;
|
||||||
|
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.servlet.http.HttpSession;
|
import jakarta.servlet.http.HttpSession;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.l.tracecd.mapper;
|
package com.l.trace.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.l.tracecd.entity.DailyRecord;
|
import com.l.trace.entity.DailyRecord;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.l.tracecd.mapper;
|
package com.l.trace.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.l.tracecd.entity.DistinctValue;
|
import com.l.trace.entity.DistinctValue;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1,7 +1,7 @@
|
|||||||
package com.l.tracecd.mapper;
|
package com.l.trace.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.l.tracecd.entity.User;
|
import com.l.trace.entity.User;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1,8 +1,8 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.l.tracecd.config.MimoAsrConfig;
|
import com.l.trace.config.MimoAsrConfig;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -1,9 +1,9 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.entity.User;
|
import com.l.trace.entity.User;
|
||||||
import com.l.tracecd.mapper.UserMapper;
|
import com.l.trace.mapper.UserMapper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
@ -1,10 +1,10 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.entity.DailyRecord;
|
import com.l.trace.entity.DailyRecord;
|
||||||
import com.l.tracecd.entity.DistinctValue;
|
import com.l.trace.entity.DistinctValue;
|
||||||
import com.l.tracecd.mapper.DistinctValueMapper;
|
import com.l.trace.mapper.DistinctValueMapper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.dao.DuplicateKeyException;
|
import org.springframework.dao.DuplicateKeyException;
|
||||||
@ -1,11 +1,11 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.l.tracecd.config.DeepSeekConfig;
|
import com.l.trace.config.DeepSeekConfig;
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.dto.DeepSeekRequest;
|
import com.l.trace.dto.DeepSeekRequest;
|
||||||
import com.l.tracecd.dto.DeepSeekResponse;
|
import com.l.trace.dto.DeepSeekResponse;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -1,9 +1,9 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.l.tracecd.dto.BrowseQuery;
|
import com.l.trace.dto.BrowseQuery;
|
||||||
import com.l.tracecd.entity.DailyRecord;
|
import com.l.trace.entity.DailyRecord;
|
||||||
import com.l.tracecd.mapper.DailyRecordMapper;
|
import com.l.trace.mapper.DailyRecordMapper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -1,12 +1,12 @@
|
|||||||
package com.l.tracecd.service;
|
package com.l.trace.service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.l.tracecd.constant.Constants;
|
import com.l.trace.constant.Constants;
|
||||||
import com.l.tracecd.dto.DeepSeekRequest;
|
import com.l.trace.dto.DeepSeekRequest;
|
||||||
import com.l.tracecd.dto.DeepSeekResponse;
|
import com.l.trace.dto.DeepSeekResponse;
|
||||||
import com.l.tracecd.dto.VoiceResponse;
|
import com.l.trace.dto.VoiceResponse;
|
||||||
import com.l.tracecd.entity.DailyRecord;
|
import com.l.trace.entity.DailyRecord;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -6,7 +6,7 @@ server:
|
|||||||
|
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: tracecd
|
name: trace
|
||||||
main:
|
main:
|
||||||
banner-mode: off # 关闭 Spring Boot banner
|
banner-mode: off # 关闭 Spring Boot banner
|
||||||
|
|
||||||
@ -24,8 +24,8 @@ spring:
|
|||||||
|
|
||||||
# MySQL 数据源
|
# MySQL 数据源
|
||||||
datasource:
|
datasource:
|
||||||
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql:3306/tracecd?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true}
|
url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql:3306/trace?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true}
|
||||||
username: ${SPRING_DATASOURCE_USERNAME:tracecd}
|
username: ${SPRING_DATASOURCE_USERNAME:trace}
|
||||||
password: ${SPRING_DATASOURCE_PASSWORD}
|
password: ${SPRING_DATASOURCE_PASSWORD}
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ mybatis-plus:
|
|||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: WARN
|
root: WARN
|
||||||
com.l.tracecd: DEBUG
|
com.l.trace: DEBUG
|
||||||
com.baomidou.mybatisplus: WARN
|
com.baomidou.mybatisplus: WARN
|
||||||
org.apache.ibatis: WARN
|
org.apache.ibatis: WARN
|
||||||
pattern:
|
pattern:
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
<title>浏览事项 - TraceCD</title>
|
<title>浏览事项 - Trace</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
@ -268,7 +268,7 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="navbar">
|
<nav class="navbar">
|
||||||
<span class="brand"><span class="brand-dot"></span> TraceCD</span>
|
<span class="brand"><span class="brand-dot"></span> Trace</span>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<a href="/"><i class="bi bi-mic"></i> 语音</a>
|
<a href="/"><i class="bi bi-mic"></i> 语音</a>
|
||||||
<a href="/logout">退出</a>
|
<a href="/logout">退出</a>
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
<title>TraceCD - 日常记录</title>
|
<title>Trace - 日常记录</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
@ -278,7 +278,7 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="navbar">
|
<nav class="navbar">
|
||||||
<span class="brand"><span class="brand-dot"></span> TraceCD</span>
|
<span class="brand"><span class="brand-dot"></span> Trace</span>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<a href="/browse"><i class="bi bi-grid-3x3-gap"></i> 浏览</a>
|
<a href="/browse"><i class="bi bi-grid-3x3-gap"></i> 浏览</a>
|
||||||
<a href="/logout">退出</a>
|
<a href="/logout">退出</a>
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
<title>登录 - TraceCD</title>
|
<title>登录 - Trace</title>
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
@ -211,7 +211,7 @@
|
|||||||
<div class="login-card">
|
<div class="login-card">
|
||||||
<div class="login-header">
|
<div class="login-header">
|
||||||
<div class="app-icon">📝</div>
|
<div class="app-icon">📝</div>
|
||||||
<h1>TraceCD</h1>
|
<h1>Trace</h1>
|
||||||
<p class="subtitle">语音智能记账助手</p>
|
<p class="subtitle">语音智能记账助手</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user