Compare commits
61 Commits
by80
...
czleilei24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ede01c06d2 | ||
|
|
9b4020d44f | ||
|
|
8c3ff509fc | ||
|
|
93d6a58a2b | ||
|
|
cef4398a5a | ||
|
|
fb76270882 | ||
|
|
a89825e23c | ||
|
|
ccb70ca10e | ||
|
|
ee32ecc995 | ||
|
|
fd4255d982 | ||
|
|
9a4a5f2339 | ||
|
|
403ffe0fde | ||
|
|
693c66c258 | ||
|
|
cf2918cfe2 | ||
|
|
e2d52ba4cc | ||
|
|
d8ad6cde20 | ||
|
|
49900919c6 | ||
|
|
5cbca4ba76 | ||
|
|
f43950eabf | ||
|
|
708bf9af48 | ||
|
|
5c4450c417 | ||
|
|
901bf6f500 | ||
|
|
e7ffbbf302 | ||
|
|
3c6ec4ed73 | ||
|
|
eb349ffa74 | ||
|
|
18b74a131a | ||
|
|
43d652aa42 | ||
|
|
58d6446a22 | ||
|
|
770b0bcb62 | ||
|
|
5ae826d532 | ||
|
|
70ccfef0d2 | ||
|
|
29381814ff | ||
|
|
cd136df685 | ||
|
|
60a06f3692 | ||
|
|
f8ba25e7d5 | ||
|
|
c6d15d8094 | ||
|
|
75b5339540 | ||
|
|
f5e8652539 | ||
|
|
129fa20810 | ||
|
|
945ca2d3d0 | ||
|
|
ee0886b800 | ||
|
|
5abbf5bc18 | ||
|
|
67f44e9c35 | ||
|
|
25409f26ce | ||
|
|
fe9e1916fa | ||
|
|
09946536aa | ||
|
|
ebd4619d65 | ||
|
|
6d3b50cebc | ||
|
|
a2db220f19 | ||
|
|
40c05afb3e | ||
|
|
0f02cb7eba | ||
|
|
d5439323db | ||
|
|
d8fc82d2e4 | ||
|
|
7366ab1200 | ||
|
|
a14566122b | ||
|
|
e8563e4fda | ||
|
|
e87b823d31 | ||
|
|
4b0afb3951 | ||
|
|
0cd7ebe202 | ||
|
|
6b131e07ab | ||
|
|
d83d6d66fd |
18
.gitignore
vendored
@@ -15,7 +15,25 @@ frontend/yarn.lock
|
||||
|
||||
# Backend
|
||||
backend/target/
|
||||
backend/**/target/
|
||||
backend/**/logs/
|
||||
backend/**/*.log
|
||||
backend/.idea/
|
||||
backend/crmebimage/
|
||||
|
||||
# Dashboard frontend
|
||||
dashboard-frontend/node_modules/
|
||||
dashboard-frontend/npm-debug.log*
|
||||
dashboard-frontend/**/*.log
|
||||
|
||||
# 独立子仓库(各自有独立 git,不纳入根 repo)
|
||||
integral-resell/
|
||||
single-shop-22/
|
||||
MER-2.2_2601/
|
||||
db/
|
||||
|
||||
# 敏感运行时配置(不入库)
|
||||
deploy/docker/scripts/server.env
|
||||
deploy/docker/step1-integral/.env
|
||||
deploy/docker/step1-integral/houtai.env
|
||||
deploy/docker/step2-single-shop/.env
|
||||
|
||||
469
DOCKER_DEPLOY.md
Normal file
@@ -0,0 +1,469 @@
|
||||
# Docker 部署方案(寄卖商城 + 积分商城前后端)
|
||||
|
||||
> 本方案覆盖:
|
||||
> - **integral-resell(积分商城)**:Webman PHP 后端二进制 + H5 静态站
|
||||
> - **single-shop-22(寄卖商城)**:CRMEB Spring Boot 双 jar 后端 + Vue 管理后台 + uni-app H5
|
||||
> - **Redis**:每个子栈独立容器(两套互不干扰)
|
||||
>
|
||||
> 不包含:`MER-2.2_2601` 多商户、Kafka 同步、MySQL(使用 **阿里云 RDS for MySQL**)。
|
||||
|
||||
---
|
||||
|
||||
## 两步独立部署(推荐)
|
||||
|
||||
从 `czleilei240` 分支开始,两个商城**各自独立**部署,互不依赖。
|
||||
|
||||
| | 步骤一 寄卖商城 | 步骤二 积分商城 |
|
||||
|---|---|---|
|
||||
| 项目 | `integral-resell` | `single-shop-22` |
|
||||
| 目录 | `deploy/docker/step1-integral/` | `deploy/docker/step2-single-shop/` |
|
||||
| 服务 | redis · integral-houtai · integral-h5 | redis · single-admin-api · single-front-api · single-admin-web · single-h5 |
|
||||
| 宿主机端口 | `18080` | `18081`(管理后台) `18082`(H5) |
|
||||
| compose name | `resell-czleilei240` | `jifenmall-czleilei240` |
|
||||
| 详细说明 | [README](deploy/docker/step1-integral/README.md) | [README](deploy/docker/step2-single-shop/README.md) |
|
||||
|
||||
### 步骤一 — 寄卖商城(integral-resell)
|
||||
|
||||
```bash
|
||||
cd deploy/docker/step1-integral
|
||||
cp .env.example .env && cp houtai.env.example houtai.env
|
||||
# 填写 .env 中的 REDIS_PASSWORD
|
||||
# 填写 houtai.env 中的 DB_PASSWORD 和 REDIS_PASSWORD(两者须一致)
|
||||
docker compose --env-file .env up -d --build
|
||||
```
|
||||
|
||||
### 步骤二 — 积分商城(single-shop-22)
|
||||
|
||||
```bash
|
||||
cd deploy/docker/step2-single-shop
|
||||
cp .env.example .env
|
||||
# 填写 RDS_PASSWORD、REDIS_PASSWORD
|
||||
docker compose --env-file .env up -d --build
|
||||
# Java 首次构建约 10-20 分钟,可用 logs -f 观察进度
|
||||
```
|
||||
|
||||
> 下方章节描述的是历史上合并部署时的 `docker-compose.yml`(`deploy/docker/docker-compose.yml`),供参考。两步拆分方案已取代合并方案。
|
||||
|
||||
---
|
||||
|
||||
## 一、架构总览
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
user((用户)) -->|H5/管理后台| EdgeLB[(阿里云 SLB / Nginx)]
|
||||
|
||||
subgraph Host [Docker 主机]
|
||||
direction TB
|
||||
|
||||
subgraph integralStack [积分商城]
|
||||
integral_h5[integral-h5\nNginx :80]
|
||||
integral_houtai[integral-houtai\nwebman.bin :8787]
|
||||
end
|
||||
|
||||
subgraph singleStack [寄卖商城]
|
||||
single_admin_web[single-admin-web\nNginx :80]
|
||||
single_h5[single-h5\nNginx :80]
|
||||
single_admin_api[single-admin-api\nminiao-admin :30032]
|
||||
single_front_api[single-front-api\nminiao-front :30031]
|
||||
end
|
||||
|
||||
redis[(redis :6379)]
|
||||
end
|
||||
|
||||
EdgeLB -- jf-h5.* --> single_h5
|
||||
EdgeLB -- jfadmin.* --> single_admin_web
|
||||
EdgeLB -- admin.* --> integral_h5
|
||||
|
||||
integral_h5 -- /api/ --> integral_houtai
|
||||
single_admin_web -- /api/ --> single_admin_api
|
||||
single_h5 -- /api/ --> single_front_api
|
||||
|
||||
integral_houtai --> redis
|
||||
single_admin_api --> redis
|
||||
single_front_api --> redis
|
||||
|
||||
integral_houtai --> RDS[(阿里云 RDS MySQL)]
|
||||
single_admin_api --> RDS
|
||||
single_front_api --> RDS
|
||||
```
|
||||
|
||||
### 服务清单
|
||||
|
||||
| 服务 | 镜像构建来源 | 容器内端口 | 默认宿主机端口 | 说明 |
|
||||
|------|--------------|------------|----------------|------|
|
||||
| `redis` | 官方 `redis:6.2-alpine` | 6379 | 6379 (可不暴露) | 持久化 AOF,挂卷 `redis-data` |
|
||||
| `integral-houtai` | `integral-resell/houtai/` | 8787 | (不暴露) | Webman 静态 ELF;同容器写 `runtime/` 与 `public/upload/` |
|
||||
| `integral-h5` | `integral-resell/h5/` | 80 | 18080 | 服务静态站;`/api/` 反代到 `integral-houtai`;启动时根据 env 重写 `static/configs.js` |
|
||||
| `single-admin-api` | `single-shop-22/backend/crmeb-admin` | 30032 | (不暴露) | 多阶段 Maven 构建出 `miao-admin-2.2.jar` |
|
||||
| `single-front-api` | `single-shop-22/backend/crmeb-front` | 30031 | (不暴露) | 多阶段 Maven 构建出 `miao-front-2.2.jar` |
|
||||
| `single-admin-web` | `single-shop-22/backend-adminend` | 80 | 18081 | 多阶段 Node 构建 `dist`;`/api/` 反代到 `single-admin-api` |
|
||||
| `single-h5` | `single-shop-22/single_uniapp22miao` | 80 | 18082 | 多阶段 Node 构建 `unpackage/dist/build/h5`;`/api/` 反代到 `single-front-api` |
|
||||
|
||||
> **域名/端口策略**:建议在 docker 主机前再放一层 Nginx 或阿里云 SLB,按域名分发到 18080/18081/18082;下面的 compose 默认把这三个静态站暴露在宿主机不同端口。
|
||||
|
||||
### 共享资源 / 卷
|
||||
|
||||
| 卷 / 目录 | 容器内挂载点 | 用途 |
|
||||
|-----------|-------------|------|
|
||||
| `redis-data` | `/data` | Redis AOF 持久化 |
|
||||
| `integral-runtime` | `/app/runtime` | Webman 运行时(session、views 缓存等) |
|
||||
| `integral-upload` | `/app/public/upload` | 积分商城上传图片 |
|
||||
| `single-images` | `/usr/local/crmeb/crmebimage` | 寄卖商城 `imagePath`,admin/front 两个 jar **共享** |
|
||||
| `single-logs` | `/app/log` | Spring Boot 日志(按需保留) |
|
||||
|
||||
### 与外部资源的关系
|
||||
|
||||
| 资源 | 地址来源 | 说明 |
|
||||
|------|---------|------|
|
||||
| 阿里云 RDS MySQL | `.env` 中 `RDS_*` | RDS 白名单需放通宿主机出口 IP;建议同地域 VPC |
|
||||
| OSS(可选) | `.env` 中 `OSS_*` | 不配置时积分商城走本地 `public/upload`;寄卖商城用 admin 后台界面里配置 |
|
||||
| 短信(可选) | `.env` 中 `SMS_*` | 仅积分商城 `.env` 用到 |
|
||||
|
||||
---
|
||||
|
||||
## 二、目录布局
|
||||
|
||||
```
|
||||
integral-shop/
|
||||
├── DOCKER_DEPLOY.md ← 本文档
|
||||
├── deploy/
|
||||
│ └── docker/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── .env.example
|
||||
│ ├── README.md ← 一键启动说明(简版)
|
||||
│ ├── redis/
|
||||
│ │ └── redis.conf
|
||||
│ ├── integral-resell/
|
||||
│ │ ├── houtai.Dockerfile
|
||||
│ │ ├── h5.Dockerfile
|
||||
│ │ ├── nginx-h5.conf
|
||||
│ │ ├── .env.template ← Webman 后端运行时 .env 模板
|
||||
│ │ └── docker-entrypoint-h5.sh ← 启动时根据 env 改写 configs.js
|
||||
│ └── single-shop/
|
||||
│ ├── admin-api.Dockerfile
|
||||
│ ├── front-api.Dockerfile
|
||||
│ ├── admin-web.Dockerfile
|
||||
│ ├── h5.Dockerfile
|
||||
│ ├── application-docker.yml ← Spring Boot docker profile
|
||||
│ ├── nginx-admin-web.conf
|
||||
│ └── nginx-h5.conf
|
||||
├── integral-resell/ ← 源码(不改动)
|
||||
└── single-shop-22/ ← 源码(不改动)
|
||||
```
|
||||
|
||||
> 所有 Dockerfile / compose 都**只读访问**源码目录,不会修改它们。
|
||||
|
||||
---
|
||||
|
||||
## 三、配置与环境变量
|
||||
|
||||
复制一份 `deploy/docker/.env.example` 为 `deploy/docker/.env` 并按下面表格修改。
|
||||
|
||||
| 变量 | 用途 | 示例 |
|
||||
|------|------|------|
|
||||
| `TZ` | 容器时区 | `Asia/Shanghai` |
|
||||
| `RDS_HOST` | 阿里云 RDS 外网/内网地址 | `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com` |
|
||||
| `RDS_PORT` | RDS 端口 | `3306` |
|
||||
| `RDS_INTEGRAL_DB` | 积分商城数据库 | `yangtangyoupin` |
|
||||
| `RDS_INTEGRAL_USER` / `RDS_INTEGRAL_PASS` | 积分商城账号 | 默认 `yangtangyoupin` / 来自原 sxsy80 |
|
||||
| `RDS_SINGLE_DB` | 寄卖商城数据库(与积分共库) | `yangtangyoupin` |
|
||||
| `RDS_SINGLE_USER` / `RDS_SINGLE_PASS` | 寄卖商城账号 | 同上 |
|
||||
| `REDIS_PASSWORD` | 容器 Redis 密码 | 123456 |
|
||||
| `REDIS_INTEGRAL_DB` | 积分商城使用的 Redis db | `0` |
|
||||
| `REDIS_SINGLE_ADMIN_DB` | 寄卖 admin Redis db | `25` |
|
||||
| `REDIS_SINGLE_FRONT_DB` | 寄卖 front Redis db | `26` |
|
||||
| `INTEGRAL_API_PUBLIC_URL` | H5 调用后端的对外 URL | `https://admin.example.com` |
|
||||
| `INTEGRAL_IMG_PUBLIC_URL` | H5 引用图片的对外 URL | `https://admin.example.com` |
|
||||
| `INTEGRAL_H5_PUBLIC_URL` | H5 自身对外 URL | `https://h5.example.com/` |
|
||||
| `INTEGRAL_SN_ID` | `configs.js` 中 `sn_id` | `17533260260405` |
|
||||
| `INTEGRAL_APP_STR` | `configs.js` 中 `appStr`(**与寄卖 APP_SECRET 必须一致**) | `ZFyTNQTWEkCBczKzyUDJWE9Ecx260405` |
|
||||
| `SINGLE_ADMIN_BASE_API` | 寄卖管理后台调用 API 的域名/路径 | 留空走同域 `/api/` 即可 |
|
||||
| `SINGLE_H5_DOMAIN` | uni-app H5 调用 API 的域名 | 留空走同域 `/api/` 即可 |
|
||||
| `SYNC_SOURCE_ID` / `SYNC_TARGET_MER_ID` | 多商户同步配置(无 MER 时留空) | `""` / `0` |
|
||||
|
||||
> **关键一致性**:积分商城 `configs.js#appStr` ↔ 积分商城 Webman `.env#APP_SECRET` ↔ 寄卖商城 admin 后台中的 `appStr` 必须一致;否则双向调用会鉴权失败。
|
||||
|
||||
---
|
||||
|
||||
## 四、镜像构建策略
|
||||
|
||||
### 0. 基础镜像选型(与主机对齐)
|
||||
|
||||
| 服务 | 基础镜像 | libc | 选择理由 |
|
||||
|------|----------|------|----------|
|
||||
| `redis` | `redis:6.2-alpine` | musl | Redis 官方推荐,无 native 依赖 |
|
||||
| `integral-houtai` | `php:8.0-cli-bullseye` (Debian 11) | **glibc** | 与宝塔 PHP 8.0.26 版本对齐;已装 pdo_mysql / redis / gd / imagick 等 webman 常用扩展 |
|
||||
| `integral-h5` | `nginx:1.25-alpine` | musl | 纯静态文件 + nginx,无字体/native 依赖 |
|
||||
| `single-admin-api` / `single-front-api` 构建 | `maven:3.8.8-eclipse-temurin-17` (Debian) | **glibc** | 与部署环境 OpenJDK 17.0.x 对齐;pom.xml source/target=1.8,Java 17 编译器向下兼容 |
|
||||
| `single-admin-api` / `single-front-api` 运行 | `eclipse-temurin:17-jre-jammy` (Ubuntu 22.04) | **glibc** | 匹配主机 openjdk 17.0.18;Spring Boot 2.2.6 + Java 17 需额外 `--add-opens` JVM 参数(已写入 JAVA_OPTS);预装 `fonts-dejavu` + `fonts-wqy-zenhei` |
|
||||
| `single-admin-web` / `single-h5` 构建 | `node:16-alpine` | musl | 仅打包 JS/CSS,无 native 依赖 |
|
||||
| `single-admin-web` / `single-h5` 运行 | `nginx:1.25-alpine` | musl | 同上 |
|
||||
|
||||
> **主机环境**:Debian-class(Linux kernel 6.1.164)/ x86_64 / Docker + BuildKit。
|
||||
> 所有 `--platform=linux/amd64` 在主机上都是原生执行,**无 QEMU 模拟**;只有在 Apple Silicon 上本地 build 时才会走 QEMU。
|
||||
> Java 后端最终镜像在 glibc 上运行,与主机 OS 完全同源;这样可避免 Alpine + musl 时验证码 / 中文字体 / POI 个别场景的兼容性问题。
|
||||
|
||||
### 1. integral-houtai(PHP Webman 二进制)
|
||||
- 基础镜像:`debian:bookworm-slim`(webman.bin 为 ELF x86_64,静态链接,glibc 兼容)。
|
||||
- 直接拷贝 `webman.bin`、`public/`、`runtime/views` 模板进镜像。
|
||||
- `.env` **不打进镜像**,通过 `docker-compose` 把 `deploy/docker/integral-resell/.env.template` 渲染后挂进 `/app/.env`。
|
||||
- 启动命令:`./webman.bin start -d`(业主指定的守护模式),entrypoint 在后台 `tail -F runtime/logs/*.log` 把日志接到容器 stdout,并监听主进程退出。收到 `SIGTERM` 时执行 `./webman.bin stop` 优雅退出。
|
||||
|
||||
### 2. integral-h5(静态站)
|
||||
- 基础镜像:`nginx:1.25-alpine`。
|
||||
- 直接拷贝 `integral-resell/h5/` 到 `/usr/share/nginx/html/`。
|
||||
- `docker-entrypoint-h5.sh` 在启动时根据环境变量重写 `static/configs.js`:把 `BASE_URL/IMG_URL/H5_URL/sn_id/appStr` 替换为部署值,**无需重新构建前端**。
|
||||
|
||||
### 3. single-admin-api / single-front-api(Spring Boot)
|
||||
- **多阶段构建**:
|
||||
- 构建阶段:`maven:3.8.8-eclipse-temurin-17` → `mvn package -pl crmeb-admin -am -DskipTests`(front 同理)。pom.xml 已配置 `source/target=1.8`,Java 17 编译器向下兼容,产物字节码级别不变。
|
||||
- 运行阶段:`eclipse-temurin:17-jre-jammy`(Ubuntu 22.04 / glibc),与部署环境 `openjdk 17.0.18` 对齐;预装 `fontconfig + fonts-dejavu + fonts-wqy-zenhei`。
|
||||
- **Java 17 兼容性**:Spring Boot 2.2.6 使用 cglib、Druid、Quartz 等大量反射,Java 17 强模块封装会报 `InaccessibleObjectException`。已在 `JAVA_OPTS` 中加入 7 条 `--add-opens`,覆盖已知触发点(`java.lang / reflect / util / io / math / sun.net.util / net`)。若运行时出现新的 `InaccessibleObjectException`,按报错包名继续追加 `--add-opens`。
|
||||
- 通过 `--spring.profiles.active=docker` + `--spring.config.additional-location=file:/config/` 加载 `application-docker.yml`,所有 DB/Redis/端口参数从 `.env` 注入。
|
||||
- `imagePath` 指向 `/usr/local/crmeb/crmebimage/`(挂卷 `single-images`,两个 jar 共享)。
|
||||
|
||||
### 4. single-admin-web(Vue 管理后台)
|
||||
- **多阶段构建**:
|
||||
- 构建阶段:`node:16-alpine` → `npm ci && npm run build:prod`(`VUE_APP_BASE_API` 设为空,走同域 `/api/`)。
|
||||
- 运行阶段:`nginx:1.25-alpine`,`/api/` 反代到 `single-admin-api:30032`。
|
||||
- 若想**直接复用源码里现成的 `dist/`**,可改用「fast」分支(见 Dockerfile 注释)。
|
||||
|
||||
### 5. single-h5(uni-app H5)
|
||||
- 同样多阶段:`node:16-alpine` → `npm install && npm run build:h5`,再 nginx 服务。
|
||||
- `config/app.js` 里 `domain` 硬编码,需在构建前注入:通过 ARG `H5_API_DOMAIN` 做字符串替换,或留空让同域生效(推荐)。
|
||||
|
||||
---
|
||||
|
||||
## 五、Spring Boot 接 RDS / Redis 的细节
|
||||
|
||||
寄卖商城原本通过 `spring.profiles.active=byjyw149` / `miao80` 等加载不同 yml。**Docker 部署用全新 profile `docker`**:
|
||||
|
||||
```yaml
|
||||
# deploy/docker/single-shop/application-docker.yml
|
||||
spring:
|
||||
datasource:
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driver-class-name: com.mysql.jdbc.Driver
|
||||
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:3306}/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
|
||||
username: ${MYSQL_USERNAME}
|
||||
password: ${MYSQL_PASSWORD}
|
||||
redis:
|
||||
host: ${REDIS_HOST}
|
||||
port: ${REDIS_PORT:6379}
|
||||
password: ${REDIS_PASSWORD:}
|
||||
database: ${REDIS_DATABASE:0}
|
||||
```
|
||||
|
||||
通过 docker-compose 注入:
|
||||
```
|
||||
MYSQL_HOST=${RDS_HOST}
|
||||
MYSQL_DATABASE=${RDS_SINGLE_DB}
|
||||
MYSQL_USERNAME=${RDS_SINGLE_USER}
|
||||
MYSQL_PASSWORD=${RDS_SINGLE_PASS}
|
||||
REDIS_HOST=redis
|
||||
REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||
REDIS_DATABASE=${REDIS_SINGLE_ADMIN_DB}
|
||||
```
|
||||
|
||||
> **数据库初始化**:首次部署前请用 `db/` 下的 SQL(推荐 `db/yangtangyoupin.sql`、`db/shop22-v2.sql` 等)在 RDS 中初始化对应库;本方案不在容器中建库,**避免误覆盖现网数据**。
|
||||
|
||||
---
|
||||
|
||||
## 六、首次部署步骤
|
||||
|
||||
```bash
|
||||
# 1. 准备环境变量
|
||||
cd integral-shop/deploy/docker
|
||||
cp .env.example .env
|
||||
vim .env # 填入 RDS / Redis / 域名等
|
||||
|
||||
# 2. 准备积分商城 Webman .env(容器运行时挂载)
|
||||
cp integral-resell/.env.template integral-resell/.env
|
||||
vim integral-resell/.env # 至少配置 DB_*、APP_SECRET、SMS_*
|
||||
|
||||
# 3. 在阿里云 RDS 上提前导入数据
|
||||
# - 积分商城:db/yangtangyoupin.sql
|
||||
# - 寄卖商城:db/shop22-v2.sql / db/jjy153-mysql.sql (按实际版本)
|
||||
|
||||
# 4. 构建并启动
|
||||
docker compose --env-file .env build
|
||||
docker compose --env-file .env up -d
|
||||
|
||||
# 5. 健康检查
|
||||
docker compose ps
|
||||
docker compose logs -f single-admin-api # 看到 "Started CrmebAdminApplication" 即成功
|
||||
docker compose logs -f integral-houtai # 看到 "Webman start success" 即成功
|
||||
curl -I http://localhost:18080 # 积分商城 H5
|
||||
curl -I http://localhost:18081 # 寄卖管理后台
|
||||
curl -I http://localhost:18082 # 寄卖用户 H5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、日常运维
|
||||
|
||||
| 场景 | 操作 |
|
||||
|------|------|
|
||||
| 拉取最新源码后重建 | `docker compose build --no-cache <service>` 然后 `docker compose up -d <service>` |
|
||||
| 只重启某服务 | `docker compose restart single-admin-api` |
|
||||
| 看日志 | `docker compose logs -f --tail 200 single-front-api` |
|
||||
| 进入容器 | `docker compose exec single-admin-api sh` |
|
||||
| 备份用户上传 | `docker run --rm -v integral-upload:/d -v $(pwd):/b alpine tar czf /b/upload.tgz -C /d .` |
|
||||
| 备份寄卖商城图片 | 同上,卷名 `single-images` |
|
||||
| 切换到外部 Redis | 在 `.env` 把 `REDIS_HOST` 改成外部地址,并在 compose 里把 `redis` 服务注释 |
|
||||
| 切换到 Java 17 运行寄卖商城 | 把 `eclipse-temurin:8-jre-alpine` 改成 `17-jre`;本工程经验依旧建议 8 |
|
||||
|
||||
---
|
||||
|
||||
## 八、性能与资源建议
|
||||
|
||||
| 容器 | CPU | 内存(建议) |
|
||||
|------|----:|------------:|
|
||||
| `redis` | 0.2 | 256 MB |
|
||||
| `integral-houtai` | 0.5–1 | 256–512 MB(webman 多 worker 时 ↑) |
|
||||
| `integral-h5` | 0.1 | 64 MB |
|
||||
| `single-admin-api` | 1 | **JVM `-Xmx512m`,容器 limit 768 MB** |
|
||||
| `single-front-api` | 1 | JVM `-Xmx768m`,容器 limit 1 GB |
|
||||
| `single-admin-web` | 0.1 | 64 MB |
|
||||
| `single-h5` | 0.1 | 64 MB |
|
||||
|
||||
最低配宿主机:**2 vCPU / 4 GB**(建议 4 vCPU / 8 GB 起)。
|
||||
|
||||
---
|
||||
|
||||
## 九、上线检查清单
|
||||
|
||||
- [ ] 阿里云 RDS 白名单已放通 Docker 主机出口 IP
|
||||
- [ ] RDS 中已导入对应库的 SQL,账号/密码权限正确
|
||||
- [ ] `.env` 中无明文敏感信息提交到 git(已 `.gitignore`)
|
||||
- [ ] `INTEGRAL_APP_STR` 与寄卖商城 admin 后台 + Webman `.env#APP_SECRET` 三处一致
|
||||
- [ ] 域名 / SSL 在外层 Nginx 或阿里云 SLB 完成 443 卸载
|
||||
- [ ] OSS 与 SMS 等第三方密钥若启用,已写入对应位置
|
||||
- [ ] 备份策略:RDS 自动备份 + `integral-upload` / `single-images` 卷定期 tar 备份
|
||||
|
||||
---
|
||||
|
||||
## 十、远端 116.62.83.240 一键部署
|
||||
|
||||
服务器已具备的环境(来自宝塔软件商店截图):
|
||||
- Docker(节点管理 → Docker 已部署)
|
||||
- Nginx 1.28.1(**未使用**,本方案的 Nginx 在容器内)
|
||||
- MySQL 5.7.44(**未使用**,本方案走阿里云 RDS)
|
||||
- Redis 8.0.5(**默认未使用**,容器内自带 Redis;想复用宿主 Redis 见下方"复用宿主 Redis")
|
||||
- PHP 8.0.26(**未使用**,webman 走静态二进制)
|
||||
- rsync 已安装、SSH `root / A@123456`
|
||||
|
||||
### 1. 本机一次性配置
|
||||
|
||||
```bash
|
||||
cd deploy/docker/scripts
|
||||
cp server.env.example server.env
|
||||
$EDITOR server.env # 默认已写好 116.62.83.240 / root / A@123456
|
||||
```
|
||||
|
||||
> **强烈建议先用 SSH key 替代密码**:`ssh-copy-id root@116.62.83.240` 后把 `server.env` 里的 `SSHPASS=` 注释掉即可。脚本会自动切回 SSH key 通道。
|
||||
|
||||
### 2. 全量同步并启动
|
||||
|
||||
```bash
|
||||
./sync-to-server.sh up
|
||||
```
|
||||
|
||||
脚本流程:
|
||||
1. SSH 登录 116.62.83.240,确保 `/root/integral-shop` 目录存在;
|
||||
2. rsync 增量同步整个工程(自动排除 `node_modules / target / .git / runtime/logs / MER-2.2_2601` 等大目录);
|
||||
3. 在远端 `cd /root/integral-shop/deploy/docker && docker compose build && docker compose up -d`;
|
||||
4. 输出 `docker compose ps` 结果。
|
||||
|
||||
首次会要求你先在远端把 `.env / integral-resell/.env` 改成真实值(如未做,运行下面这一步):
|
||||
|
||||
```bash
|
||||
./bootstrap-remote-env.sh # 在远端基于模板创建 .env,再 ssh 上去填写
|
||||
```
|
||||
|
||||
### 3. 日常运维(无需登录服务器)
|
||||
|
||||
```bash
|
||||
./remote-up.sh ps # 服务状态
|
||||
./remote-up.sh logs single-admin-api # 跟随日志
|
||||
./remote-up.sh restart single-front-api # 重启某服务
|
||||
./remote-up.sh build single-admin-web # 只重建某镜像
|
||||
./remote-up.sh exec single-admin-api sh # 进容器
|
||||
./remote-up.sh ssh # 直接登录服务器
|
||||
./sync-to-server.sh up # 改了代码后再同步+重启
|
||||
```
|
||||
|
||||
### 4. 端口规划与宝塔放行
|
||||
|
||||
宿主机暴露端口(来自 `.env.example`,可改):
|
||||
|
||||
| 端口 | 服务 | 用途 |
|
||||
|------|------|------|
|
||||
| 18080 | `integral-h5` | 积分商城 H5 |
|
||||
| 18081 | `single-admin-web` | 寄卖管理后台 |
|
||||
| 18082 | `single-h5` | 寄卖用户 H5 |
|
||||
| 6379 | `redis` | (生产建议关闭)`REDIS_HOST_PORT=` 留空即不暴露 |
|
||||
|
||||
**安全组 / 防火墙**:阿里云安全组放通 18080-18082;宝塔面板 → 安全 → 放行同样端口。**强烈建议在前面再挂一层域名 + SSL**(宝塔自带 Nginx 反代 / 阿里云 SLB / Cloudflare 都行)。
|
||||
|
||||
### 5. 复用宿主已有 Redis 8.0.5(可选)
|
||||
|
||||
若想节省一份 Redis,直接用宿主机的 Redis:
|
||||
|
||||
```bash
|
||||
# 1) 远端编辑 deploy/docker/.env
|
||||
REDIS_PASSWORD=宿主-Redis-的密码
|
||||
|
||||
# 2) 远端编辑 deploy/docker/docker-compose.yml
|
||||
# a. 注释掉 redis: 整个服务块(包括 healthcheck)
|
||||
# b. single-admin-api / single-front-api 把 REDIS_HOST: redis 改成 172.17.0.1
|
||||
# (docker bridge 网关;宝塔默认端口 6379;先确保 Redis 监听 0.0.0.0 且防火墙放行 6379 to docker subnet)
|
||||
# c. integral-resell/.env 把 REDIS_HOST=redis 同步改为 172.17.0.1
|
||||
|
||||
# 3) 同步重启
|
||||
./sync-to-server.sh up
|
||||
```
|
||||
|
||||
### 6. 阿里云 RDS 白名单
|
||||
|
||||
到 RDS 控制台 → 白名单 → 加入 `116.62.83.240`(如果 RDS 与 ECS 同 VPC 则用内网地址 + 内网白名单更优)。
|
||||
|
||||
### 7. 数据库初始化
|
||||
|
||||
```bash
|
||||
# 本地把 SQL 上传到服务器(默认 db/ 已被 rsync 同步过去)
|
||||
./remote-up.sh ssh
|
||||
# 远端
|
||||
mysql -h <RDS_HOST> -u <RDS_USER> -p<RDS_PASS> < /root/integral-shop/db/yangtangyoupin.sql
|
||||
mysql -h <RDS_HOST> -u <RDS_USER> -p<RDS_PASS> < /root/integral-shop/db/shop22-v2.sql
|
||||
```
|
||||
|
||||
也可以用宝塔自带的 phpMyAdmin 直接连 RDS 导入。
|
||||
|
||||
---
|
||||
|
||||
## 十一、各文件清单一览
|
||||
|
||||
参见 `deploy/docker/` 下:
|
||||
|
||||
- `docker-compose.yml` ← 编排入口
|
||||
- `.env.example` ← 环境变量模板
|
||||
- `redis/redis.conf`
|
||||
- `integral-resell/houtai.Dockerfile`
|
||||
- `integral-resell/h5.Dockerfile`
|
||||
- `integral-resell/nginx-h5.conf`
|
||||
- `integral-resell/.env.template`
|
||||
- `integral-resell/docker-entrypoint-h5.sh`
|
||||
- `single-shop/admin-api.Dockerfile`
|
||||
- `single-shop/front-api.Dockerfile`
|
||||
- `single-shop/admin-web.Dockerfile`
|
||||
- `single-shop/h5.Dockerfile`
|
||||
- `single-shop/application-docker.yml`
|
||||
- `single-shop/nginx-admin-web.conf`
|
||||
- `single-shop/nginx-h5.conf`
|
||||
- `scripts/server.env.example` ← 远端 SSH 配置模板
|
||||
- `scripts/sync-to-server.sh` ← rsync 增量同步 + 触发远端部署
|
||||
- `scripts/remote-up.sh` ← 远端 `docker compose` 操作(up/build/restart/logs/ps/exec/ssh)
|
||||
- `scripts/bootstrap-remote-env.sh` ← 首次在远端生成 .env 模板
|
||||
|
||||
每个文件都已生成可直接使用的版本。
|
||||
118
README.md
@@ -1,25 +1,125 @@
|
||||
# 单商户积分商城
|
||||
|
||||
管理后台前端 + CRMEB 后端 API 合并仓库。
|
||||
管理后台前端、用户端 H5(uni-app)与 CRMEB Java 后端合并仓库。项目由 **4 个子项目** 组成,对应 **2 个 jar 包** 与 **2 个前端**。
|
||||
|
||||
---
|
||||
|
||||
## 项目架构概览
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph frontends [前端]
|
||||
AdminVue[backend-adminend / frontend]
|
||||
UserH5[single_uniapp22miao]
|
||||
end
|
||||
|
||||
subgraph backends [后端 JAR]
|
||||
AdminJar[miao-admin-2.2.jar]
|
||||
FrontJar[miao-front-2.2.jar]
|
||||
end
|
||||
|
||||
subgraph sources [源码子项目]
|
||||
crmebAdmin[crmeb-admin]
|
||||
crmebFront[crmeb-front]
|
||||
end
|
||||
|
||||
AdminVue --> AdminJar
|
||||
UserH5 --> FrontJar
|
||||
crmebAdmin --> AdminJar
|
||||
crmebFront --> FrontJar
|
||||
```
|
||||
|
||||
### 2 个 jar 包 ↔ 2 个前端
|
||||
|
||||
| jar 包 | 对应前端 | 说明 |
|
||||
|--------|----------|------|
|
||||
| **miao-admin-2.2.jar** | `backend-adminend`(部分分支为 `frontend`) | 管理后台 API + 后台静态站点 |
|
||||
| **miao-front-2.2.jar** | `single_uniapp22miao` | 积分商城、用户端 H5 / uni-app |
|
||||
|
||||
### 4 个子项目(可单独打包部署)
|
||||
|
||||
| 子项目 | 产出 | 说明 |
|
||||
|--------|------|------|
|
||||
| **crmeb-admin** | `miao-admin-2.2.jar` | 管理后台后端 |
|
||||
| **crmeb-front** | `miao-front-2.2.jar` | 用户端 API |
|
||||
| **backend-adminend**(或 `frontend`) | `dist/` | 管理后台 Vue 静态 |
|
||||
| **single_uniapp22miao** | `unpackage/dist/build/h5` | 用户端 H5 静态 |
|
||||
|
||||
---
|
||||
|
||||
## 目录结构
|
||||
|
||||
### 根目录
|
||||
|
||||
| 目录/文件 | 说明 |
|
||||
|-----------|------|
|
||||
| **backend/** | Java 后端(Maven 多模块) |
|
||||
| **backend-adminend/** | 管理后台 Vue 前端(部分分支为 `frontend`) |
|
||||
| **single_uniapp22miao/** | 用户端 uni-app 前端(积分商城 H5) |
|
||||
| **backend/deploy.conf** | 多环境部署配置 |
|
||||
| **backend/DEPLOY.md** | 打包与部署详细说明 |
|
||||
|
||||
### backend 子模块
|
||||
|
||||
| 子模块 | 产出 | 说明 |
|
||||
|--------|------|------|
|
||||
| **crmeb-admin** | `miao-admin-2.2.jar` | 管理后台后端 |
|
||||
| **crmeb-front** | `miao-front-2.2.jar` | 用户端 API |
|
||||
| **crmeb-service** | 依赖库 | 业务逻辑、Mapper |
|
||||
| **crmeb-common** | 依赖库 | 公共组件 |
|
||||
|
||||
### single_uniapp22miao 主要目录
|
||||
|
||||
| 目录 | 说明 |
|
||||
|------|------|
|
||||
| **frontend/** | 管理后台 Vue 前端(原 single_admin22miao) |
|
||||
| **backend/** | CRMEB Java Spring Boot 后端(原 crmeb_22miao) |
|
||||
| **api/** | 后台 API 调用 |
|
||||
| **components/** | 公共组件 |
|
||||
| **config/** | 请求地址等配置 |
|
||||
| **pages/** | 页面(含 integral 积分模块等) |
|
||||
| **static/** | 静态资源 |
|
||||
|
||||
## 前端
|
||||
### backend-adminend 主要目录
|
||||
|
||||
| 目录 | 说明 |
|
||||
|------|------|
|
||||
| **src/** | Vue 源码 |
|
||||
| **public/** | 静态资源 |
|
||||
| **build/** | 构建脚本 |
|
||||
|
||||
---
|
||||
|
||||
## 开发与构建
|
||||
|
||||
### 管理后台前端
|
||||
|
||||
- 技术栈:Vue + Vue CLI
|
||||
- 开发:`cd frontend && npm install && npm run serve`
|
||||
- 构建:`npm run build`
|
||||
- 开发:`cd backend-adminend && npm install && npm run serve`(若仓库中为 `frontend` 目录则替换)
|
||||
- 构建:`npm run build:prod`(Node 17+ 可设 `export NODE_OPTIONS="--openssl-legacy-provider"`)
|
||||
- 产出:`backend-adminend/dist/`(或 `frontend/dist/`)
|
||||
|
||||
## 后端
|
||||
### 用户端 H5 前端
|
||||
|
||||
- 技术栈:uni-app、Vue 2
|
||||
- 开发:`cd single_uniapp22miao && npm install && npm run dev:h5`
|
||||
- 构建:`npm run build:h5`
|
||||
- 产出:`single_uniapp22miao/unpackage/dist/build/h5/`
|
||||
|
||||
### 后端
|
||||
|
||||
- 技术栈:Spring Boot 2.2.6、Maven、MyBatis Plus
|
||||
- 开发:`cd backend && mvn spring-boot:run -pl crmeb-admin`
|
||||
- 打包:`mvn clean package -pl crmeb-admin -am -DskipTests`
|
||||
- 管理后台 API:`cd backend && mvn spring-boot:run -pl crmeb-admin`
|
||||
- 用户端 API:`cd backend && mvn spring-boot:run -pl crmeb-front`
|
||||
- 打包、多模块命令与环境说明见 **[backend/DEPLOY.md](backend/DEPLOY.md)**
|
||||
|
||||
---
|
||||
|
||||
## 多环境与部署(简要)
|
||||
|
||||
- 环境配置:**[backend/deploy.conf](backend/deploy.conf)**(by80、miao33、miao50、shjjy153、shccd159 等)
|
||||
- 部署脚本:`backend/shell/deploy-admin-*.sh`、`deploy-front-*.sh`
|
||||
- 详细步骤与变量说明:**[backend/DEPLOY.md](backend/DEPLOY.md)**
|
||||
|
||||
---
|
||||
|
||||
## Gitea
|
||||
|
||||
|
||||
@@ -3,11 +3,23 @@ ENV = 'development'
|
||||
|
||||
# base api
|
||||
# VUE_APP_BASE_API = '/dev-api'
|
||||
VUE_APP_BASE_API = 'http://127.0.0.1:30032'
|
||||
# VUE_APP_BASE_API = 'http://127.0.0.1:30032'
|
||||
# VUE_APP_BASE_API = 'https://jfadmin.suzhouyuqi.com'
|
||||
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.wenjinhui.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
# byjyw149 项目(宝应金雅文商贸)
|
||||
# VUE_APP_BASE_API = 'https://jf.jinyawen.com'
|
||||
# shjjy153 项目
|
||||
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
|
||||
|
||||
# czleilei240 项目
|
||||
VUE_APP_BASE_API = 'https://leilei-jf.czchunfang.com'
|
||||
|
||||
# hapr191 项目(淮安鹏然商贸)
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.hapengran.com'
|
||||
# shccd159 项目
|
||||
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
|
||||
|
||||
|
||||
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
|
||||
26
backend-adminend/.env.production
Normal file
@@ -0,0 +1,26 @@
|
||||
# just a flag
|
||||
ENV = 'production'
|
||||
|
||||
# base api
|
||||
# VUE_APP_BASE_API = '/prod-api'
|
||||
# VUE_APP_BASE_API = 'http://127.0.0.1:8080'
|
||||
# VUE_APP_BASE_API = 'https://jf.suzhouyuqi.com'
|
||||
# miao33 项目
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.xiashengjun.com'
|
||||
|
||||
# byjyw149 项目(宝应金雅文商贸)
|
||||
# VUE_APP_BASE_API = 'https://jf.jinyawen.com'
|
||||
# shjjy153 项目
|
||||
# VUE_APP_BASE_API = 'http://jjy-jfadmin.fwxgpt.com'
|
||||
|
||||
# czleilei240 项目
|
||||
VUE_APP_BASE_API = 'https://leilei-jf.czchunfang.com'
|
||||
|
||||
# hapr191 项目(淮安鹏然商贸)
|
||||
# VUE_APP_BASE_API = 'http://jfadmin.hapengran.com'
|
||||
|
||||
# shccd159 项目
|
||||
# VUE_APP_BASE_API = 'http://ccd-jfadmin.cichude.com'
|
||||
|
||||
# VUE_APP_BASE_API = 'http://jfanyueadmin.szxingming.com'
|
||||
# VUE_APP_BASE_API = 'http://jfadmin-bsy.bosenyuan.com'
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 354 B |
|
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 329 B |
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 343 B |
|
Before Width: | Height: | Size: 321 B After Width: | Height: | Size: 321 B |
|
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 323 B |
|
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 344 B |
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 350 B |
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 53 B After Width: | Height: | Size: 53 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
|
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
23
backend-adminend/src/api/integral.js
Normal file
@@ -0,0 +1,23 @@
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
import request from '@/utils/request';
|
||||
|
||||
/**
|
||||
* 积分记录分页列表
|
||||
* @param data
|
||||
*/
|
||||
export function integralListApi(data) {
|
||||
return request({
|
||||
url: '/admin/user/integral/list',
|
||||
method: 'post',
|
||||
data,
|
||||
});
|
||||
}
|
||||
97
backend-adminend/src/api/integralExternal.js
Normal file
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* 积分外部页面 API(免认证)
|
||||
* 使用 requestNoAuth 实例,不注入 token,不拦截 401。
|
||||
* 对应后端:ExternalIntegralController → api/external/integral/*
|
||||
*/
|
||||
import requestNoAuth from '@/utils/requestNoAuth';
|
||||
|
||||
/**
|
||||
* 积分订单列表
|
||||
*/
|
||||
export function getExternalOrderList(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/order/list',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户积分列表(含 eb_user 积分字段)
|
||||
*/
|
||||
export function getExternalUserList(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/user/list',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户积分明细分页列表(page/limit 走 query,与 /admin/user/integral/list 一致)
|
||||
*/
|
||||
export function getExternalIntegralLog(data) {
|
||||
const { page, limit, ...body } = data;
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/log/list',
|
||||
method: 'post',
|
||||
params: { page, limit },
|
||||
data: body,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 寄卖订单 列表(免认证)
|
||||
*/
|
||||
export function getExternalWaOrderList(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/wa-order/list',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 寄卖订单 详情(免认证)
|
||||
*/
|
||||
export function getExternalWaOrderInfo(id) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/wa-order/info',
|
||||
method: 'get',
|
||||
params: { id },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 团队每日对账报表(免认证)
|
||||
*/
|
||||
export function getExternalTeamDailyReport(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/team-report/daily',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 团队每日对账报表 - Excel 导出(免认证)
|
||||
*/
|
||||
export function exportExternalTeamDailyReport(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/team-report/daily/export',
|
||||
method: 'get',
|
||||
params,
|
||||
responseType: 'blob',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 今日抢单用户列表(免认证)
|
||||
*/
|
||||
export function getExternalGrabUserList(params) {
|
||||
return requestNoAuth({
|
||||
url: 'external/integral/grab-user/list',
|
||||
method: 'get',
|
||||
params,
|
||||
});
|
||||
}
|
||||