diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..519eb29
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+.worktrees/
+target/
+*.class
+*.log
+
+node_modules/
+dist/
+.vite/
+coverage/
+
+.idea/
+.vscode/
+*.iml
+
+.env
+.env.*
+
+backend/logs/
+deploy/.data/
+miniapp/miniprogram_npm/
+miniapp/private.*
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f68aca2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+# LinHelp
+
+LinHelp is the phase-one implementation workspace for "Lin Xiao Bang", a community life service MVP.
+
+## Stack
+
+- Backend: Java 8, Spring Boot 2.7.18, MyBatis Plus, Sa-Token, MySQL, Redis, Flyway, Knife4j, MinIO
+- Admin web: Vue 3, TypeScript, Vite, Element Plus
+- Resident miniapp: WeChat native mini program, WXML, WXSS, JavaScript
+- Rider H5: Vue 3, TypeScript, Vite
+
+## Local Runtime
+
+```powershell
+docker compose -f deploy/docker-compose.dev.yml up -d
+cd backend
+mvn test
+```
+
+Project docs:
+
+- `docs/superpowers/specs/2026-07-07-linxiaobang-prd-design.md`
+- `docs/superpowers/plans/2026-07-07-linxiaobang-phase-one-implementation.md`
diff --git a/admin-web/package.json b/admin-web/package.json
new file mode 100644
index 0000000..35fa6c3
--- /dev/null
+++ b/admin-web/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "linhelp-admin-web",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite --host 0.0.0.0 --port 5173",
+ "build": "vue-tsc -b && vite build",
+ "test": "vitest run",
+ "lint": "eslint ."
+ },
+ "dependencies": {
+ "@element-plus/icons-vue": "^2.3.1",
+ "axios": "^1.7.2",
+ "element-plus": "^2.7.6",
+ "pinia": "^2.1.7",
+ "vue": "^3.4.31",
+ "vue-router": "^4.4.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.0.5",
+ "typescript": "^5.5.3",
+ "vite": "^5.3.3",
+ "vitest": "^2.0.2",
+ "vue-tsc": "^2.0.26"
+ }
+}
diff --git a/admin-web/vite.config.ts b/admin-web/vite.config.ts
new file mode 100644
index 0000000..8084277
--- /dev/null
+++ b/admin-web/vite.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ plugins: [vue()],
+ server: {
+ port: 5173
+ }
+})
diff --git a/backend/pom.xml b/backend/pom.xml
new file mode 100644
index 0000000..94c88d8
--- /dev/null
+++ b/backend/pom.xml
@@ -0,0 +1,112 @@
+
+ 4.0.0
+
+ com.linhelp
+ linhelp-backend
+ 0.1.0-SNAPSHOT
+ linhelp-backend
+
+
+ 1.8
+ 1.8
+ 1.8
+ UTF-8
+ 2.7.18
+ 3.5.5
+ 1.38.0
+ 4.4.0
+ 8.5.11
+ 8.0.33
+ 3.11.0
+ 2.22.2
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+ ${sa-token.version}
+
+
+ com.mysql
+ mysql-connector-j
+ ${mysql.version}
+ runtime
+
+
+ org.flywaydb
+ flyway-core
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-spring-boot-starter
+ ${knife4j.version}
+
+
+ io.minio
+ minio
+ ${minio.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+
+
diff --git a/backend/src/main/java/com/linhelp/LinHelpApplication.java b/backend/src/main/java/com/linhelp/LinHelpApplication.java
new file mode 100644
index 0000000..25e90ee
--- /dev/null
+++ b/backend/src/main/java/com/linhelp/LinHelpApplication.java
@@ -0,0 +1,12 @@
+package com.linhelp;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class LinHelpApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(LinHelpApplication.class, args);
+ }
+}
diff --git a/backend/src/main/resources/application-dev.yml b/backend/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..2597ef7
--- /dev/null
+++ b/backend/src/main/resources/application-dev.yml
@@ -0,0 +1,26 @@
+spring:
+ datasource:
+ url: jdbc:mysql://localhost:3306/linhelp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+ username: linhelp
+ password: linhelp
+ redis:
+ host: localhost
+ port: 6379
+ flyway:
+ enabled: true
+ locations: classpath:db/migration
+
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true
+
+sa-token:
+ token-name: Authorization
+ timeout: 2592000
+
+linhelp:
+ storage:
+ endpoint: http://localhost:9000
+ access-key: linhelp
+ secret-key: linhelp123
+ bucket: linhelp
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
new file mode 100644
index 0000000..34bc56f
--- /dev/null
+++ b/backend/src/main/resources/application.yml
@@ -0,0 +1,11 @@
+spring:
+ profiles:
+ active: dev
+ application:
+ name: linhelp-backend
+
+server:
+ port: 8080
+
+knife4j:
+ enable: true
diff --git a/backend/src/test/java/com/linhelp/LinHelpApplicationTests.java b/backend/src/test/java/com/linhelp/LinHelpApplicationTests.java
new file mode 100644
index 0000000..3c116af
--- /dev/null
+++ b/backend/src/test/java/com/linhelp/LinHelpApplicationTests.java
@@ -0,0 +1,15 @@
+package com.linhelp;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest(properties = {
+ "spring.flyway.enabled=false",
+ "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
+})
+class LinHelpApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+}
diff --git a/deploy/docker-compose.dev.yml b/deploy/docker-compose.dev.yml
new file mode 100644
index 0000000..26018cf
--- /dev/null
+++ b/deploy/docker-compose.dev.yml
@@ -0,0 +1,30 @@
+services:
+ mysql:
+ image: mysql:8.4
+ environment:
+ MYSQL_ROOT_PASSWORD: root
+ MYSQL_DATABASE: linhelp
+ MYSQL_USER: linhelp
+ MYSQL_PASSWORD: linhelp
+ ports:
+ - "3306:3306"
+ volumes:
+ - mysql_data:/var/lib/mysql
+ redis:
+ image: redis:7
+ ports:
+ - "6379:6379"
+ minio:
+ image: minio/minio:RELEASE.2025-04-22T22-12-26Z
+ command: server /data --console-address ":9001"
+ environment:
+ MINIO_ROOT_USER: linhelp
+ MINIO_ROOT_PASSWORD: linhelp123
+ ports:
+ - "9000:9000"
+ - "9001:9001"
+ volumes:
+ - minio_data:/data
+volumes:
+ mysql_data:
+ minio_data:
diff --git a/miniapp/miniprogram/app.js b/miniapp/miniprogram/app.js
new file mode 100644
index 0000000..6da605c
--- /dev/null
+++ b/miniapp/miniprogram/app.js
@@ -0,0 +1,6 @@
+App({
+ globalData: {
+ apiBaseUrl: 'http://localhost:8080',
+ token: ''
+ }
+})
diff --git a/miniapp/miniprogram/app.json b/miniapp/miniprogram/app.json
new file mode 100644
index 0000000..17a85e4
--- /dev/null
+++ b/miniapp/miniprogram/app.json
@@ -0,0 +1,46 @@
+{
+ "pages": [
+ "pages/home/index",
+ "pages/products/index",
+ "pages/products/detail",
+ "pages/orders/index",
+ "pages/orders/detail",
+ "pages/express/create",
+ "pages/group-buy/index",
+ "pages/group-buy/detail",
+ "pages/second-hand/index",
+ "pages/second-hand/create",
+ "pages/notices/index",
+ "pages/profile/index",
+ "pages/address/index"
+ ],
+ "window": {
+ "navigationBarTitleText": "邻小帮",
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "backgroundColor": "#f6f7f9"
+ },
+ "tabBar": {
+ "color": "#6b7280",
+ "selectedColor": "#0f766e",
+ "backgroundColor": "#ffffff",
+ "list": [
+ {
+ "pagePath": "pages/home/index",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/group-buy/index",
+ "text": "团购"
+ },
+ {
+ "pagePath": "pages/second-hand/index",
+ "text": "闲置"
+ },
+ {
+ "pagePath": "pages/profile/index",
+ "text": "我的"
+ }
+ ]
+ }
+}
diff --git a/miniapp/miniprogram/app.wxss b/miniapp/miniprogram/app.wxss
new file mode 100644
index 0000000..8565793
--- /dev/null
+++ b/miniapp/miniprogram/app.wxss
@@ -0,0 +1,9 @@
+page {
+ background: #f6f7f9;
+ color: #111827;
+ font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;
+}
+
+.page {
+ padding: 24rpx;
+}
diff --git a/miniapp/miniprogram/pages/address/index.js b/miniapp/miniprogram/pages/address/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/address/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/address/index.json b/miniapp/miniprogram/pages/address/index.json
new file mode 100644
index 0000000..2fb6367
--- /dev/null
+++ b/miniapp/miniprogram/pages/address/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "地址管理"
+}
diff --git a/miniapp/miniprogram/pages/address/index.wxml b/miniapp/miniprogram/pages/address/index.wxml
new file mode 100644
index 0000000..aa13d10
--- /dev/null
+++ b/miniapp/miniprogram/pages/address/index.wxml
@@ -0,0 +1 @@
+地址管理
diff --git a/miniapp/miniprogram/pages/address/index.wxss b/miniapp/miniprogram/pages/address/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/address/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/express/create.js b/miniapp/miniprogram/pages/express/create.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/express/create.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/express/create.json b/miniapp/miniprogram/pages/express/create.json
new file mode 100644
index 0000000..c98ff69
--- /dev/null
+++ b/miniapp/miniprogram/pages/express/create.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "代取快递"
+}
diff --git a/miniapp/miniprogram/pages/express/create.wxml b/miniapp/miniprogram/pages/express/create.wxml
new file mode 100644
index 0000000..9c659e1
--- /dev/null
+++ b/miniapp/miniprogram/pages/express/create.wxml
@@ -0,0 +1 @@
+代取快递
diff --git a/miniapp/miniprogram/pages/express/create.wxss b/miniapp/miniprogram/pages/express/create.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/express/create.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/group-buy/detail.js b/miniapp/miniprogram/pages/group-buy/detail.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/detail.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/group-buy/detail.json b/miniapp/miniprogram/pages/group-buy/detail.json
new file mode 100644
index 0000000..5b37aff
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/detail.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "团购详情"
+}
diff --git a/miniapp/miniprogram/pages/group-buy/detail.wxml b/miniapp/miniprogram/pages/group-buy/detail.wxml
new file mode 100644
index 0000000..6447f39
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/detail.wxml
@@ -0,0 +1 @@
+团购详情
diff --git a/miniapp/miniprogram/pages/group-buy/detail.wxss b/miniapp/miniprogram/pages/group-buy/detail.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/detail.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/group-buy/index.js b/miniapp/miniprogram/pages/group-buy/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/group-buy/index.json b/miniapp/miniprogram/pages/group-buy/index.json
new file mode 100644
index 0000000..5ba4987
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "今日团购"
+}
diff --git a/miniapp/miniprogram/pages/group-buy/index.wxml b/miniapp/miniprogram/pages/group-buy/index.wxml
new file mode 100644
index 0000000..587d2d1
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/index.wxml
@@ -0,0 +1 @@
+今日团购
diff --git a/miniapp/miniprogram/pages/group-buy/index.wxss b/miniapp/miniprogram/pages/group-buy/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/group-buy/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/home/index.js b/miniapp/miniprogram/pages/home/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/home/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/home/index.json b/miniapp/miniprogram/pages/home/index.json
new file mode 100644
index 0000000..8aba33f
--- /dev/null
+++ b/miniapp/miniprogram/pages/home/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "邻小帮"
+}
diff --git a/miniapp/miniprogram/pages/home/index.wxml b/miniapp/miniprogram/pages/home/index.wxml
new file mode 100644
index 0000000..475f2a1
--- /dev/null
+++ b/miniapp/miniprogram/pages/home/index.wxml
@@ -0,0 +1 @@
+邻小帮
diff --git a/miniapp/miniprogram/pages/home/index.wxss b/miniapp/miniprogram/pages/home/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/home/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/notices/index.js b/miniapp/miniprogram/pages/notices/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/notices/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/notices/index.json b/miniapp/miniprogram/pages/notices/index.json
new file mode 100644
index 0000000..4254de9
--- /dev/null
+++ b/miniapp/miniprogram/pages/notices/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "社区公告"
+}
diff --git a/miniapp/miniprogram/pages/notices/index.wxml b/miniapp/miniprogram/pages/notices/index.wxml
new file mode 100644
index 0000000..8de531a
--- /dev/null
+++ b/miniapp/miniprogram/pages/notices/index.wxml
@@ -0,0 +1 @@
+社区公告
diff --git a/miniapp/miniprogram/pages/notices/index.wxss b/miniapp/miniprogram/pages/notices/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/notices/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/orders/detail.js b/miniapp/miniprogram/pages/orders/detail.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/detail.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/orders/detail.json b/miniapp/miniprogram/pages/orders/detail.json
new file mode 100644
index 0000000..44b1678
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/detail.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "订单详情"
+}
diff --git a/miniapp/miniprogram/pages/orders/detail.wxml b/miniapp/miniprogram/pages/orders/detail.wxml
new file mode 100644
index 0000000..d08dd6a
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/detail.wxml
@@ -0,0 +1 @@
+订单详情
diff --git a/miniapp/miniprogram/pages/orders/detail.wxss b/miniapp/miniprogram/pages/orders/detail.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/detail.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/orders/index.js b/miniapp/miniprogram/pages/orders/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/orders/index.json b/miniapp/miniprogram/pages/orders/index.json
new file mode 100644
index 0000000..5c1f617
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "我的订单"
+}
diff --git a/miniapp/miniprogram/pages/orders/index.wxml b/miniapp/miniprogram/pages/orders/index.wxml
new file mode 100644
index 0000000..19dad6d
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/index.wxml
@@ -0,0 +1 @@
+我的订单
diff --git a/miniapp/miniprogram/pages/orders/index.wxss b/miniapp/miniprogram/pages/orders/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/orders/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/products/detail.js b/miniapp/miniprogram/pages/products/detail.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/detail.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/products/detail.json b/miniapp/miniprogram/pages/products/detail.json
new file mode 100644
index 0000000..3d11fbf
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/detail.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "商品详情"
+}
diff --git a/miniapp/miniprogram/pages/products/detail.wxml b/miniapp/miniprogram/pages/products/detail.wxml
new file mode 100644
index 0000000..c824d67
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/detail.wxml
@@ -0,0 +1 @@
+商品详情
diff --git a/miniapp/miniprogram/pages/products/detail.wxss b/miniapp/miniprogram/pages/products/detail.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/detail.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/products/index.js b/miniapp/miniprogram/pages/products/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/products/index.json b/miniapp/miniprogram/pages/products/index.json
new file mode 100644
index 0000000..3b52e53
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "商品预定"
+}
diff --git a/miniapp/miniprogram/pages/products/index.wxml b/miniapp/miniprogram/pages/products/index.wxml
new file mode 100644
index 0000000..c05d48a
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/index.wxml
@@ -0,0 +1 @@
+商品预定
diff --git a/miniapp/miniprogram/pages/products/index.wxss b/miniapp/miniprogram/pages/products/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/products/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/profile/index.js b/miniapp/miniprogram/pages/profile/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/profile/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/profile/index.json b/miniapp/miniprogram/pages/profile/index.json
new file mode 100644
index 0000000..4ec55be
--- /dev/null
+++ b/miniapp/miniprogram/pages/profile/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "我的"
+}
diff --git a/miniapp/miniprogram/pages/profile/index.wxml b/miniapp/miniprogram/pages/profile/index.wxml
new file mode 100644
index 0000000..bb386f3
--- /dev/null
+++ b/miniapp/miniprogram/pages/profile/index.wxml
@@ -0,0 +1 @@
+我的
diff --git a/miniapp/miniprogram/pages/profile/index.wxss b/miniapp/miniprogram/pages/profile/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/profile/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/second-hand/create.js b/miniapp/miniprogram/pages/second-hand/create.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/create.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/second-hand/create.json b/miniapp/miniprogram/pages/second-hand/create.json
new file mode 100644
index 0000000..15426ce
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/create.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "发布闲置"
+}
diff --git a/miniapp/miniprogram/pages/second-hand/create.wxml b/miniapp/miniprogram/pages/second-hand/create.wxml
new file mode 100644
index 0000000..63726b1
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/create.wxml
@@ -0,0 +1 @@
+发布闲置
diff --git a/miniapp/miniprogram/pages/second-hand/create.wxss b/miniapp/miniprogram/pages/second-hand/create.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/create.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/pages/second-hand/index.js b/miniapp/miniprogram/pages/second-hand/index.js
new file mode 100644
index 0000000..ba76804
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/index.js
@@ -0,0 +1 @@
+Page({})
diff --git a/miniapp/miniprogram/pages/second-hand/index.json b/miniapp/miniprogram/pages/second-hand/index.json
new file mode 100644
index 0000000..b04720d
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/index.json
@@ -0,0 +1,3 @@
+{
+ "navigationBarTitleText": "二手闲置"
+}
diff --git a/miniapp/miniprogram/pages/second-hand/index.wxml b/miniapp/miniprogram/pages/second-hand/index.wxml
new file mode 100644
index 0000000..08c5ef7
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/index.wxml
@@ -0,0 +1 @@
+二手闲置
diff --git a/miniapp/miniprogram/pages/second-hand/index.wxss b/miniapp/miniprogram/pages/second-hand/index.wxss
new file mode 100644
index 0000000..67a49e7
--- /dev/null
+++ b/miniapp/miniprogram/pages/second-hand/index.wxss
@@ -0,0 +1,3 @@
+.page {
+ min-height: 100vh;
+}
diff --git a/miniapp/miniprogram/utils/request.js b/miniapp/miniprogram/utils/request.js
new file mode 100644
index 0000000..e8e0d23
--- /dev/null
+++ b/miniapp/miniprogram/utils/request.js
@@ -0,0 +1,26 @@
+function request(options) {
+ const app = getApp()
+ const token = app.globalData.token
+ return new Promise((resolve, reject) => {
+ wx.request({
+ url: app.globalData.apiBaseUrl + options.url,
+ method: options.method || 'GET',
+ data: options.data || {},
+ header: Object.assign({
+ Authorization: token
+ }, options.header || {}),
+ success(res) {
+ if (res.statusCode >= 200 && res.statusCode < 300 && res.data && res.data.code === 0) {
+ resolve(res.data.data)
+ return
+ }
+ reject(new Error((res.data && res.data.message) || '请求失败'))
+ },
+ fail: reject
+ })
+ })
+}
+
+module.exports = {
+ request
+}
diff --git a/miniapp/package.json b/miniapp/package.json
new file mode 100644
index 0000000..507ce94
--- /dev/null
+++ b/miniapp/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "linhelp-miniapp",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "test": "jest --runInBand",
+ "ci:preview": "miniprogram-ci preview --pp ./project.config.json --robot 1"
+ },
+ "devDependencies": {
+ "jest": "^29.7.0",
+ "miniprogram-ci": "^2.0.0"
+ }
+}
diff --git a/miniapp/project.config.json b/miniapp/project.config.json
new file mode 100644
index 0000000..ce40350
--- /dev/null
+++ b/miniapp/project.config.json
@@ -0,0 +1,13 @@
+{
+ "appid": "touristappid",
+ "projectname": "linhelp-miniapp",
+ "miniprogramRoot": "miniprogram/",
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "enhance": true,
+ "postcss": true,
+ "minified": true
+ },
+ "compileType": "miniprogram"
+}
diff --git a/rider-h5/package.json b/rider-h5/package.json
new file mode 100644
index 0000000..10f3990
--- /dev/null
+++ b/rider-h5/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "linhelp-rider-h5",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite --host 0.0.0.0 --port 5174",
+ "build": "vue-tsc -b && vite build",
+ "test": "vitest run",
+ "lint": "eslint ."
+ },
+ "dependencies": {
+ "axios": "^1.7.2",
+ "pinia": "^2.1.7",
+ "vue": "^3.4.31",
+ "vue-router": "^4.4.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^5.0.5",
+ "typescript": "^5.5.3",
+ "vite": "^5.3.3",
+ "vitest": "^2.0.2",
+ "vue-tsc": "^2.0.26"
+ }
+}
diff --git a/rider-h5/vite.config.ts b/rider-h5/vite.config.ts
new file mode 100644
index 0000000..d282194
--- /dev/null
+++ b/rider-h5/vite.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ plugins: [vue()],
+ server: {
+ port: 5174
+ }
+})