This commit is contained in:
2026-01-05 20:48:27 +08:00
parent 6a99895e66
commit a9115c3b04
3 changed files with 0 additions and 739 deletions

152
IFLOW.md
View File

@@ -1,152 +0,0 @@
# 企业数字档案管理系统
## 项目概述
企业数字档案管理系统是基于Vue.js前端框架开发的企业级档案管理应用对标《GBT 39784-2021电子档案管理系统通用功能要求》。本项目是feat-ezyc分支专门针对鄂州烟草项目定制开发。
### 技术栈
- **前端框架**: Vue 2.6.10
- **UI组件库**: Element UI 2.15.6, Ant Design Vue 1.7.8
- **状态管理**: Vuex 3.1.0
- **路由管理**: Vue Router 3.0.2
- **构建工具**: Vue CLI 4.4.4
- **HTTP客户端**: Axios 0.26.0
- **图表库**: ECharts 4.2.1
- **工作流**: BPMN.js 8.7.1
- **测试框架**: Jest
### 项目架构
- 基于vue-element-admin模板进行开发
- 采用模块化路由设计,主要功能模块包括:
- 档案管理 (archives-management)
- 档案利用 (archiveUtilize)
- 智能库房 (intelligent-warehouse)
- 数据管理 (dataManagement)
- 系统管理 (system-management)
- 预归档 (preFiling)
- 监督管理 (supervise-management)
- 权限管理 (authority-management)
- 管辖范围 (jurisdiction)
- 文件收集 (fileCollection)
## 构建和运行
### 环境要求
- Node.js >= 8.9
- npm >= 3.0.0
### 开发环境运行
```bash
# 安装依赖
npm install
# 启动开发服务器
npm run dev
```
开发服务器默认端口由环境变量`VUE_APP_PROXY_PORT`决定代理API请求到`http://127.0.0.1:9081`
### 生产环境构建
```bash
# 构建生产环境版本
npm run build:prod
# 构建测试环境版本
npm run build:stage
```
### 代码质量检查
```bash
# ESLint代码检查
npm run lint
# 运行单元测试
npm run test:unit
# CI环境检查lint + test
npm run test:ci
```
### 其他实用命令
```bash
# 预览构建结果
npm run preview
# 生成新组件/页面/存储模块
npm run new
# 优化SVG图标
npm run svgo
```
## 开发规范
### 代码风格
- 使用ESLint进行代码规范检查
- 采用Vue.js官方推荐的风格指南
- 使用Plop模板生成器创建新组件保持代码结构一致
### 目录结构规范
```
src/
├── api/ # API接口定义
├── assets/ # 静态资源
├── components/ # 公共组件
├── directive/ # 自定义指令
├── filters/ # 全局过滤器
├── icons/ # SVG图标
├── layout/ # 布局组件
├── router/ # 路由配置
├── store/ # Vuex状态管理
├── styles/ # 全局样式
├── utils/ # 工具函数
└── views/ # 页面组件
```
### 组件开发规范
- 使用Vue单文件组件(.vue)格式
- 组件命名采用PascalCase
- 公共组件放置在`src/components`目录
- 页面级组件放置在`src/views`对应功能模块目录
### Git提交规范
- 使用lint-staged进行提交前代码检查
- 通过husky配置pre-commit钩子自动执行代码格式化
## 项目特性
- 支持响应式设计,适配不同屏幕尺寸
- 集成多种文件预览功能(PDF、图片等)
- 支持工作流审批流程
- 实现了3D库房展示功能
- 集成了丰富的图表展示组件
- 支持批量操作和数据导入导出
- 实现了细粒度的权限控制系统
## 部署说明
### 环境配置
项目支持多环境配置,通过`.env`文件管理:
- `.env.development` - 开发环境配置
- `.env.staging` - 测试环境配置
- `.env.production` - 生产环境配置
### 静态资源处理
- 生产环境静态资源输出到`dist/static`目录
- 支持CDN部署通过`publicPath`配置
- 图片资源支持懒加载和压缩优化
### 代理配置
开发环境API代理配置在`vue.config.js`中:
```javascript
proxy: {
"/api": {
target: "http://127.0.0.1:9081",
changeOrigin: true,
ws: true,
pathRewrite: {
"^/apis": "",
},
},
}
```

349
build.sh
View File

@@ -1,349 +0,0 @@
#!/bin/bash
# 数字档案管理系统前端 - 多阶段构建脚本
# 支持开发环境构建和生成Docker镜像
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置变量
PROJECT_NAME="digital-archive-frontend"
IMAGE_NAME="${PROJECT_NAME}"
IMAGE_TAG="latest"
BUILD_TYPE="${1:-prod}" # 构建类型dev, prod, stage
DOCKER_REGISTRY="" # Docker镜像仓库地址
PUSH_IMAGE="${2:-false}" # 是否推送镜像
RUN_CONTAINER="${3:-false}" # 是否运行容器
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 显示帮助信息
show_help() {
echo "用法: $0 [构建类型] [是否推送镜像] [是否运行容器]"
echo ""
echo "构建类型:"
echo " dev 开发环境构建"
echo " prod 生产环境构建(默认)"
echo " stage 测试环境构建"
echo ""
echo "是否推送镜像:"
echo " true 构建完成后推送镜像到仓库"
echo " false 仅构建镜像,不推送(默认)"
echo ""
echo "是否运行容器:"
echo " true 构建完成后使用docker-compose启动容器"
echo " false 仅构建镜像,不启动容器(默认)"
echo ""
echo "环境变量:"
echo " DOCKER_REGISTRY 设置Docker镜像仓库地址"
echo ""
echo "示例:"
echo " $0 # 生产环境构建,不推送镜像"
echo " $0 dev # 开发环境构建"
echo " $0 prod true # 生产环境构建并推送镜像"
echo " $0 prod false true # 生产环境构建并运行容器"
echo " DOCKER_REGISTRY=registry.example.com $0 prod true # 推送到指定仓库"
}
# 检查依赖
check_dependencies() {
log_step "检查构建依赖..."
# 检查Node.js
if ! command -v node &> /dev/null; then
log_error "Node.js 未安装"
exit 1
fi
# 检查npm
if ! command -v npm &> /dev/null; then
log_error "npm 未安装"
exit 1
fi
# 检查Docker
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装"
exit 1
fi
# 检查Docker Compose plugin
if ! docker compose version &> /dev/null; then
log_error "Docker Compose plugin 未安装"
exit 1
fi
log_info "Node.js版本: $(node --version)"
log_info "npm版本: $(npm --version)"
log_info "Docker版本: $(docker --version)"
log_info "Docker Compose版本: $(docker compose version)"
}
# 清理构建缓存
clean_build_cache() {
log_step "清理构建缓存..."
# 清理npm缓存
npm cache clean --force
# 清理Docker构建缓存
docker builder prune -f
# 删除悬空镜像
docker image prune -f
log_info "构建缓存清理完成"
}
# 安装依赖
install_dependencies() {
log_step "安装项目依赖..."
# 设置npm镜像源
npm config set registry https://registry.npmmirror.com
# 安装依赖
if [[ "$BUILD_TYPE" == "dev" ]]; then
npm ci --production=false
else
npm ci
fi
log_info "依赖安装完成"
}
# 执行代码检查
run_code_checks() {
log_step "执行代码质量检查..."
# ESLint检查
log_info "运行ESLint检查..."
if ! npm run lint; then
log_warn "ESLint检查发现一些问题请检查代码质量"
fi
log_info "代码检查完成"
}
# 构建前端应用
build_frontend() {
log_step "构建前端应用..."
case "$BUILD_TYPE" in
"dev")
log_info "开发环境构建..."
npm run build:stage
;;
"prod")
log_info "生产环境构建..."
npm run build:prod
;;
"stage")
log_info "测试环境构建..."
npm run build:stage
;;
*)
log_error "未知的构建类型: $BUILD_TYPE"
show_help
exit 1
;;
esac
# 检查构建结果
if [ ! -d "dist" ]; then
log_error "构建失败dist目录未生成"
exit 1
fi
log_info "前端应用构建完成"
}
# 构建Docker镜像
build_docker_image() {
log_step "构建Docker镜像..."
local full_image_name="${IMAGE_NAME}:${IMAGE_TAG}"
# 如果有镜像仓库地址,添加前缀
if [ -n "$DOCKER_REGISTRY" ]; then
full_image_name="${DOCKER_REGISTRY}/${full_image_name}"
fi
log_info "构建镜像: $full_image_name"
# 构建Docker镜像
docker build \
--tag "$full_image_name" \
--build-arg BUILD_TYPE="$BUILD_TYPE" \
--no-cache \
.
# 验证镜像构建
if ! docker image inspect "$full_image_name" > /dev/null 2>&1; then
log_error "Docker镜像构建失败"
exit 1
fi
log_info "Docker镜像构建完成: $full_image_name"
# 显示镜像信息
docker images | grep "$IMAGE_NAME"
}
# 推送Docker镜像
push_docker_image() {
if [[ "$PUSH_IMAGE" != "true" ]]; then
return
fi
log_step "推送Docker镜像..."
local full_image_name="${IMAGE_NAME}:${IMAGE_TAG}"
# 如果有镜像仓库地址,添加前缀
if [ -n "$DOCKER_REGISTRY" ]; then
full_image_name="${DOCKER_REGISTRY}/${full_image_name}"
else
log_error "未设置DOCKER_REGISTRY环境变量无法推送镜像"
return
fi
# 登录Docker仓库如果需要
if [[ "$DOCKER_REGISTRY" != "" ]]; then
log_info "登录Docker仓库: $DOCKER_REGISTRY"
# 这里可以根据需要添加登录逻辑
# docker login $DOCKER_REGISTRY
fi
# 推送镜像
log_info "推送镜像: $full_image_name"
docker push "$full_image_name"
log_info "镜像推送完成"
}
# 启动Docker容器
run_container() {
if [[ "$RUN_CONTAINER" != "true" ]]; then
return
fi
log_step "启动Docker容器..."
if [ ! -f "docker-compose.yml" ]; then
log_warn "docker-compose.yml 文件未找到,跳过容器启动"
return
fi
log_info "停止现有服务..."
docker compose down || true
log_info "启动新服务..."
docker compose up -d
log_info "容器启动完成"
docker compose ps
}
# 生成部署信息文件
generate_deploy_info() {
log_step "生成部署信息..."
local deploy_info="deploy-info.json"
cat > "$deploy_info" << EOF
{
"project": "$PROJECT_NAME",
"build_type": "$BUILD_TYPE",
"image_name": "$IMAGE_NAME",
"image_tag": "$IMAGE_TAG",
"docker_registry": "$DOCKER_REGISTRY",
"build_time": "$(date -Iseconds)",
"git_commit": "$(git rev-parse HEAD 2>/dev/null || echo 'unknown')",
"git_branch": "$(git branch --show-current 2>/dev/null || echo 'unknown')",
"node_version": "$(node --version)",
"npm_version": "$(npm --version)"
}
EOF
log_info "部署信息已生成: $deploy_info"
}
# 显示构建摘要
show_summary() {
log_step "构建摘要"
echo ""
echo "项目名称: $PROJECT_NAME"
echo "构建类型: $BUILD_TYPE"
echo "镜像名称: $IMAGE_NAME:$IMAGE_TAG"
if [ -n "$DOCKER_REGISTRY" ]; then
echo "镜像仓库: $DOCKER_REGISTRY"
fi
echo "构建时间: $(date)"
echo ""
if [[ "$RUN_CONTAINER" == "true" ]]; then
echo "容器已通过 docker-compose 启动"
echo "使用 'docker compose ps' 查看状态"
elif [[ "$PUSH_IMAGE" == "true" && -n "$DOCKER_REGISTRY" ]]; then
echo "镜像已推送到: $DOCKER_REGISTRY/$IMAGE_NAME:$IMAGE_TAG"
else
echo "镜像已构建完成,可使用以下命令运行:"
echo " docker run -d -p 80:80 $IMAGE_NAME:$IMAGE_TAG"
echo "或通过 docker-compose 启动:"
echo " docker compose up -d"
fi
echo ""
}
# 主构建流程
main() {
# 检查帮助参数
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
log_info "开始构建数字档案管理系统前端..."
log_info "构建类型: $BUILD_TYPE"
check_dependencies
clean_build_cache
install_dependencies
run_code_checks
build_frontend
build_docker_image
push_docker_image
run_container
generate_deploy_info
show_summary
log_info "构建完成!"
}
# 执行主函数
main "$@"

238
deploy.sh
View File

@@ -1,238 +0,0 @@
#!/bin/bash
# 部署脚本 - 数字档案管理系统前端
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置变量
PROJECT_NAME="digital-archive"
DEPLOY_DIR="${1:-/opt/${PROJECT_NAME}}" # 第一个参数作为部署目录,默认为/opt/digital-archive
FRONTEND_DIR="${DEPLOY_DIR}/frontend"
BACKUP_DIR="${DEPLOY_DIR}/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker和Docker Compose
check_dependencies() {
log_info "检查依赖..."
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装或不在PATH中"
exit 1
fi
# 检查Docker Compose plugin
if ! docker compose version &> /dev/null; then
log_error "Docker Compose plugin 未安装"
exit 1
fi
log_info "依赖检查完成"
log_info "Docker版本: $(docker --version)"
log_info "Docker Compose版本: $(docker compose version)"
}
# 检查proxy网络是否存在
check_network() {
log_info "检查proxy网络..."
if ! docker network ls | grep -q "proxy"; then
log_error "proxy网络不存在请先创建proxy网络"
log_error "docker network create proxy"
exit 1
fi
log_info "proxy网络检查完成"
}
# 检查后端服务是否运行
check_backend() {
log_info "检查后端服务..."
if ! docker ps | grep -q "digital-archive-app"; then
log_warn "后端服务digital-archive-app未运行请确保后端服务已启动"
else
log_info "后端服务运行正常"
fi
}
# 创建部署目录
create_directories() {
log_info "创建部署目录..."
sudo mkdir -p "${DEPLOY_DIR}"
sudo mkdir -p "${FRONTEND_DIR}"
sudo mkdir -p "${BACKUP_DIR}"
log_info "目录创建完成"
}
# 备份当前版本
backup_current() {
log_info "备份当前版本..."
if [ -d "${FRONTEND_DIR}" ] && [ "$(ls -A ${FRONTEND_DIR})" ]; then
sudo mv "${FRONTEND_DIR}" "${BACKUP_DIR}/frontend_${TIMESTAMP}"
log_info "当前版本已备份到: ${BACKUP_DIR}/frontend_${TIMESTAMP}"
fi
}
# 复制文件到部署目录
copy_files() {
log_info "复制文件到部署目录..."
# 创建新的前端目录
sudo mkdir -p "${FRONTEND_DIR}"
# 复制必要文件
sudo cp docker-compose.yml "${FRONTEND_DIR}/"
sudo cp Dockerfile "${FRONTEND_DIR}/"
sudo cp nginx.conf "${FRONTEND_DIR}/"
sudo cp .dockerignore "${FRONTEND_DIR}/"
sudo cp -r src "${FRONTEND_DIR}/"
sudo cp package*.json "${FRONTEND_DIR}/"
sudo cp vue.config.js "${FRONTEND_DIR}/"
sudo cp babel.config.js "${FRONTEND_DIR}/"
sudo cp jsconfig.json "${FRONTEND_DIR}/"
# 设置权限
sudo chown -R $USER:$USER "${FRONTEND_DIR}"
log_info "文件复制完成"
}
# 构建和启动服务
build_and_start() {
log_info "构建和启动前端服务..."
cd "${FRONTEND_DIR}"
# 停止现有服务
docker compose down || true
# 构建镜像
docker compose build --no-cache
# 启动服务
docker compose up -d
log_info "前端服务启动完成"
}
# 验证部署
verify_deployment() {
log_info "验证部署..."
# 等待服务启动
sleep 10
# 检查容器状态
if docker compose ps | grep -q "Up"; then
log_info "前端服务运行正常"
else
log_error "前端服务启动失败"
docker compose logs
exit 1
fi
# 健康检查
log_info "执行健康检查..."
if curl -f http://localhost/health > /dev/null 2>&1; then
log_info "健康检查通过"
else
log_warn "健康检查失败,但服务可能仍在启动中"
fi
}
# 清理旧镜像
cleanup() {
log_info "清理旧镜像..."
# 删除悬空镜像
docker image prune -f
# 删除旧版本镜像保留最近3个版本
OLD_IMAGES=$(docker images digital-archive-frontend --format "table {{.Repository}}:{{.Tag}}" | tail -n +2 | tail -n +4)
if [ ! -z "$OLD_IMAGES" ]; then
echo "$OLD_IMAGES" | xargs docker rmi -f || true
fi
log_info "清理完成"
}
# 显示部署信息
show_info() {
log_info "部署完成!"
echo ""
echo "部署信息:"
echo " 部署目录: ${FRONTEND_DIR}"
echo " 访问地址: http://localhost"
echo " 容器名称: digital-archive-frontend"
echo " 备份位置: ${BACKUP_DIR}"
echo ""
echo "常用命令:"
echo " 查看日志: cd ${FRONTEND_DIR} && docker compose logs -f"
echo " 重启服务: cd ${FRONTEND_DIR} && docker compose restart"
echo " 停止服务: cd ${FRONTEND_DIR} && docker compose down"
echo ""
}
# 显示使用帮助
show_help() {
echo "用法: $0 [部署目录]"
echo ""
echo "参数:"
echo " 部署目录 指定部署目录路径(可选,默认为/opt/digital-archive"
echo ""
echo "示例:"
echo " $0 # 使用默认目录 /opt/digital-archive"
echo " $0 /root/xxx # 使用指定目录 /root/xxx"
echo " $0 ./deploy # 使用当前目录下的deploy子目录"
echo ""
}
# 主函数
main() {
# 检查帮助参数
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
log_info "开始部署数字档案管理系统前端..."
log_info "部署目录: ${DEPLOY_DIR}"
check_dependencies
check_network
check_backend
create_directories
backup_current
copy_files
build_and_start
verify_deployment
cleanup
show_info
log_info "部署完成!"
}
# 执行主函数
main "$@"