diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..17b1fef
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,307 @@
+#!/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}" # 是否推送镜像
+
+# 日志函数
+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 " DOCKER_REGISTRY 设置Docker镜像仓库地址"
+ echo ""
+ echo "示例:"
+ echo " $0 # 生产环境构建,不推送镜像"
+ echo " $0 dev # 开发环境构建"
+ echo " $0 prod 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
+
+ log_info "Node.js版本: $(node --version)"
+ log_info "npm版本: $(npm --version)"
+ log_info "Docker版本: $(docker --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 "镜像推送完成"
+}
+
+# 生成部署信息文件
+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 [[ "$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"
+ 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
+ generate_deploy_info
+ show_summary
+
+ log_info "构建完成!"
+}
+
+# 执行主函数
+main "$@"
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 09dc33a..fd65085 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,30 +1,38 @@
version: '3.8'
services:
- # 前端服务
+ # 数字档案管理系统前端服务
digital-archive-frontend:
- build:
- context: .
- dockerfile: Dockerfile
- container_name: digital-archive-frontend
+ image: ${IMAGE_NAME:-digital-archive-frontend}:${IMAGE_TAG:-latest}
+ container_name: ${CONTAINER_NAME:-digital-archive-frontend}
ports:
- - "80:80"
+ - "${HOST_PORT:-80}:80"
networks:
- - proxy
- restart: unless-stopped
+ - ${NETWORK_NAME:-proxy}
+ restart: ${RESTART_POLICY:-unless-stopped}
environment:
- - NGINX_HOST=localhost
+ - NGINX_HOST=${NGINX_HOST:-localhost}
- NGINX_PORT=80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- - ./ssl:/etc/nginx/ssl:ro
+ # - ./ssl:/etc/nginx/ssl:ro # 如果需要SSL证书,取消注释并配置证书文件
healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost/health"]
+ test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.${CONTAINER_NAME:-digital-archive-frontend}.rule=Host(`${DOMAIN_NAME:-localhost}`)"
+ - "traefik.http.routers.${CONTAINER_NAME:-digital-archive-frontend}.entrypoints=web"
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "10m"
+ max-file: "3"
networks:
proxy:
- external: true
\ No newline at end of file
+ external: ${EXTERNAL_NETWORK:-true}
+ name: ${NETWORK_NAME:-proxy}
\ No newline at end of file
diff --git a/src/api/preFiling/preArchiveManagement/preFileApp.js b/src/api/preFiling/preArchiveManagement/preFileApp.js
index 7a7822d..ae2d6c3 100644
--- a/src/api/preFiling/preArchiveManagement/preFileApp.js
+++ b/src/api/preFiling/preArchiveManagement/preFileApp.js
@@ -27,4 +27,13 @@ export const documentDocking = (data) => {
});
};
+// 营销系统对接
+export const productSalesDocking = (data) => {
+ return request({
+ url: "/point-strategy/v/archives/productSalesDocking",
+ method: "post",
+ data:data,
+ });
+};
+
diff --git a/src/views/preFiling/preArchiveManagement/preFileDataDanagement/components/rightTableBox.vue b/src/views/preFiling/preArchiveManagement/preFileDataDanagement/components/rightTableBox.vue
index 9c7e5bf..1f3078f 100644
--- a/src/views/preFiling/preArchiveManagement/preFileDataDanagement/components/rightTableBox.vue
+++ b/src/views/preFiling/preArchiveManagement/preFileDataDanagement/components/rightTableBox.vue
@@ -174,6 +174,17 @@
"
>公文系统对接
+ 营销系统对接
{
+ if (res.code == 100) {
+ this.$message({type:'success',message:`【营销系统对接】${res.msg}`,showClose:true,duration:0});
+ this.clickSearch(key, 1, 0);
+ } else {
+ message("warning", res.msg, 2000);
+ }
+ })
+ .catch((error) => {
+ message("error", error, 2000);
+ });
+ break;
}
},
// 获取批量修改单个档案详情