diff --git a/Dockerfiles/ Dockerfile-production/Dockerfile b/Dockerfiles/ Dockerfile-production/Dockerfile new file mode 100644 index 0000000..85c3a70 --- /dev/null +++ b/Dockerfiles/ Dockerfile-production/Dockerfile @@ -0,0 +1,41 @@ +# 构建阶段 +FROM m.daocloud.io/docker.io/library/node:22.14.0 AS builder + +# 设置工作目录 +WORKDIR /app + +# 设置 npm 镜像源 +RUN npm config set registry https://registry.npmmirror.com/ +RUN npm config set fetch-retries 3 +RUN npm config set fetch-retry-mintimeout 5000 +RUN npm config set fetch-retry-maxtimeout 60000 + +# 安装pnpm +RUN npm install -g pnpm + +# 复制源代码 +COPY . . + +# 设置 pnpm 下载源 +RUN pnpm config set registry https://registry.npmmirror.com/ + +# 安装依赖 +RUN pnpm i --fetch-timeout 300000 + +# 构建项目 +RUN pnpm build + +# 部署阶段 +FROM m.daocloud.io/docker.io/library/nginx:alpine + +# 复制构建产物到 Nginx 目录 +COPY --from=builder --chown=nginx:nginx /app/dist /usr/share/nginx/html + +# 复制 Nginx 配置 +COPY Dockerfiles/Dockerfile-staging/default.conf /etc/nginx/conf.d/default.conf + +# 暴露端口 +EXPOSE 80 + +# 启动 Nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/Dockerfiles/ Dockerfile-production/default.conf b/Dockerfiles/ Dockerfile-production/default.conf new file mode 100644 index 0000000..3de8a37 --- /dev/null +++ b/Dockerfiles/ Dockerfile-production/default.conf @@ -0,0 +1,47 @@ +server { + listen 80; + server_name localhost; + + # 基础设置 + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + + client_max_body_size 100m; + + # 错误页面配置 + error_page 500 502 503 504 /50x.html; + location = /50x.html { + internal; # 仅用于内部错误请求 + } + + # Gzip 压缩设置 + gzip on; + gzip_min_length 1k; + gzip_comp_level 6; + gzip_types text/plain text/css text/javascript application/json + application/javascript application/x-javascript application/xml; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + + # 静态资源缓存优化 + location ~* \.(jpg|jpeg|gif|ico|css|js)$ { + expires 7d; + add_header Cache-Control "public, no-transform"; + } + + # API 代理配置 + location /api/ { + proxy_pass http://learn-archives-api-svc:8080/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; # 添加协议头 + + # 优化代理性能 + proxy_connect_timeout 30s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + proxy_buffering on; + } +} \ No newline at end of file diff --git a/src/utils/rules.ts b/src/utils/rules.ts index 745a37f..3ca2c0f 100644 --- a/src/utils/rules.ts +++ b/src/utils/rules.ts @@ -12,6 +12,17 @@ type Rule = { pattern?: RegExp; }; + +export const ruleRequiredGrade = [ + { required: true, message: "不能为空", trigger: "blur" }, + { + pattern: /^(初[一二三]|高[一二三]|初\d{4}|高\d{4})$/, + message: "请输入正确的年级 例[初一,初2025]", + trigger: "blur" + } +]; + + export const ruleRequiredI = (max: number = 20, min: number = 0): Rule[] => { let res: Rule[] = [ { required: true, message: "不能为空", trigger: "blur" }, diff --git a/src/views/exam/classDetails.vue b/src/views/exam/classDetails.vue index 9f8ec28..699f20d 100644 --- a/src/views/exam/classDetails.vue +++ b/src/views/exam/classDetails.vue @@ -103,13 +103,13 @@ const tableData: TableConfig = { add: false, // 字段允许添加 edit: false, // 字段允许修改 }, - entryPerson: { - label: "录入人", - width: "200px", - search: true, - add: false, // 字段允许添加 - edit: false, // 字段允许修改 - }, + // entryPerson: { + // label: "录入人", + // width: "200px", + // search: false, + // add: false, // 字段允许添加 + // edit: false, // 字段允许修改 + // }, createTime: { label: "录入时间", width: "200px", diff --git a/src/views/exam/index.vue b/src/views/exam/index.vue index 6d180be..42b0dd7 100644 --- a/src/views/exam/index.vue +++ b/src/views/exam/index.vue @@ -8,6 +8,7 @@ import { getenum } from "@/api/enum"; import { ruleNumber, ruleRequired, + ruleRequiredGrade, ruleRequiredI, ruleRequiredNumber, } from "@/utils/rules"; @@ -108,7 +109,7 @@ const tableData: TableConfig = { }, grade: { label: "年级", - rules: ruleRequiredI(6, 2), + rules: ruleRequiredGrade, width: "100px", search: true, add: true, // 字段允许添加 diff --git a/src/views/student/edit.vue b/src/views/student/edit.vue index 4b98f7d..e01f01d 100644 --- a/src/views/student/edit.vue +++ b/src/views/student/edit.vue @@ -380,12 +380,13 @@ const handleSubmitForm = () => { userEditForm.value.validate(async (valid) => { if (valid) { loading.value = true; + let ac = form.value.account || new Date().getTime() + ""; const formData = { id: form.value.uId || 0, userType: form.value.userType || 1, level: form.value.level || 0, - account: form.value.account || "", - // PassWord: form.value.id === 0 ? md5(form.value.PassWord).toUpperCase() : "", + account: form.value.account || new Date().getTime() + "", + PassWord: form.value.id === 0 ? "无效密码" : "", realName: form.value.realName || "", studentId: form.value.studentId || "", templateId: form.value.templateId || 0,