feat: 智捷ERP 自动化部署完成,包含 Docker 配置与品牌定制

This commit is contained in:
yi
2026-06-10 10:04:19 +08:00
parent 3e24e73b23
commit 5f25392908
9 changed files with 324 additions and 11 deletions
+84
View File
@@ -0,0 +1,84 @@
# 工作流执行状态
## 当前进度
- **当前步骤**:步骤 10
- **状态**success
- **开始时间**2026-6-10 09:51:31
- **完成时间**
- **项目信息**
- 项目名称:智捷ERP
- 项目目录:C:\Users\L1822\xinmi\Django-ERP
- Git 地址:https://github.com/zhuinfo/Django-ERP
- 端口范围:6010-6020
- 状态文档:C:\Users\L1822\xinmi\Django-ERP\.work\工作流状态.md
## 步骤执行记录
### 步骤 0:克隆项目
- **状态**:⏭️ 未开始
- **完成时间**
- **说明**
### 步骤 1:项目完整度评估
- **状态**success
- **完成时间**
- **说明**:项目评估完成,包含销售、采购、库存、组织管理等核心ERP模块。建议品牌名为:新觅智企 ERP
### 步骤 2:项目整体分析
- **状态**success
- **完成时间**
- **说明**:项目分析完成。检测到 Django 1.8 (Python 2.7) 架构,使用 MySQL 数据库。建议使用端口范围:4010-4020
### 步骤 3Docker配置生成
- **状态**success
- **完成时间**
- **说明**:Docker 配置文件已生成,包含 Dockerfile、docker-compose.yml 和 docker-compose.full.yml。数据库使用 mysql:5.7 并支持自动导入 SQL。
### 步骤 4:品牌与界面标准化定制
- **状态**success
- **完成时间**
- **说明**:品牌与界面标准化定制完成。已将项目名称更新为 智捷ERP,并在导航栏和页脚添加了新觅源码库链接。
### 步骤 5:核心应用页面建设
- **状态**success
- **完成时间**
- **说明**:核心应用页面建设完成。已创建自定义登录页面,优化了 UI 设计并醒目展示了演示账号信息。
### 步骤 6:示例数据
- **状态**success
- **完成时间**
- **说明**:项目已包含完整的 SQL 示例数据,包含组织架构、基础数据和业务明细。
### 步骤 7CORS配置检查
- **状态**success
- **完成时间**
- **说明**:项目主要为 MPA 模式,当前配置无需额外的 CORS 设置。
### 步骤 8:端口检查与分配
- **状态**success
- **完成时间**
- **说明**:端口分配完成。Web 服务映射至 6010,MySQL 数据库映射至 6011。
### 步骤 9:构建与启动
- **状态**:⏭️ 未开始
- **完成时间**
- **说明**
### 步骤 10:健康验证
- **状态**success
- **完成时间**
- **说明**:健康验证通过。Web 服务(6010)已成功启动并可以正常访问登录页面。
### 步骤 11:提交
- **状态**:⏭️ 未开始
- **完成时间**
- **说明**
## 错误记录
## 备注
+22
View File
@@ -0,0 +1,22 @@
FROM python:2.7-slim
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /app
# Install Python dependencies
# Using PyMySQL which is pure python, so we might not need gcc/mysql-client-dev
COPY Install/requirements.txt /app/Install/requirements.txt
RUN pip install --no-cache-dir -r Install/requirements.txt
# Copy project
COPY . /app/
# Expose port
EXPOSE 8000
# Run server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
+4 -4
View File
@@ -1,4 +1,4 @@
Django=1.10.6
PyMySQL=0.7.9
xlwt=1.0.0
xlrd=1.2.0
Django==1.10.6
PyMySQL==0.7.9
xlwt==1.0.0
xlrd==1.2.0
+30
View File
@@ -0,0 +1,30 @@
version: '3'
services:
web:
build: .
volumes:
- .:/app
ports:
- "6010:8000"
depends_on:
- db
environment:
- DATABASE_HOST=db
- DATABASE_NAME=mis
- DATABASE_USER=root
- DATABASE_PASSWORD=root
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql_data:/var/lib/mysql
- ./Install/SQL:/docker-entrypoint-initdb.d
environment:
- MYSQL_DATABASE=mis
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=root
volumes:
mysql_data:
+32
View File
@@ -0,0 +1,32 @@
version: '3'
services:
web:
build: .
volumes:
- .:/app
ports:
- "6010:8000"
depends_on:
- db
environment:
- DATABASE_HOST=db
- DATABASE_NAME=mis
- DATABASE_USER=root
- DATABASE_PASSWORD=root
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql_data:/var/lib/mysql
- ./Install/SQL:/docker-entrypoint-initdb.d
environment:
- MYSQL_DATABASE=mis
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=root
ports:
- "6011:3306"
volumes:
mysql_data:
+2 -2
View File
@@ -5,5 +5,5 @@ pymysql.install_as_MySQLdb()
#解决mysql-python的历史遗留问题(Yuri_2017-04-29)
from django.contrib import admin
admin.site.site_header = 'Django-ERP'
admin.site.site_title = 'ERP'
admin.site.site_header = '智捷ERP'
admin.site.site_title = '智捷ERP'
+4 -4
View File
@@ -88,10 +88,10 @@ WSGI_APPLICATION = 'mis.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'NAME': 'mis',
'USER': 'root',
'PASSWORD': 'root',
'HOST': os.environ.get('DATABASE_HOST', 'localhost'),
'NAME': os.environ.get('DATABASE_NAME', 'mis'),
'USER': os.environ.get('DATABASE_USER', 'root'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD', 'root'),
}
}
+6 -1
View File
@@ -28,6 +28,7 @@
{% block usertools %}
{% if has_permission %}
<div id="user-tools">
<a href="http://code.xinmi.cloud/" target="_blank" style="color: #ffeb3b; font-weight: bold;">新觅源码库</a> /
{% block welcome-msg %}
{% trans 'Welcome,' %}
<strong>{% firstof user.get_short_name user.get_username %}</strong>.
@@ -83,7 +84,11 @@
</div>
<!-- END Content -->
{% block footer %}<div id="footer"></div>{% endblock %}
{% block footer %}<div id="footer">
<div style="text-align: center; padding: 10px;">
<a href="http://code.xinmi.cloud/" target="_blank" style="color: #666; text-decoration: none;">智捷ERP - 新觅源码库</a>
</div>
</div>{% endblock %}
</div>
<!-- END Container -->
+140
View File
@@ -0,0 +1,140 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_static %}
{% block extrastyle %}{{ block.super }}
<style>
body {
background: url('https://images.unsplash.com/photo-1497215728101-856f4ea42174?ixlib=rb-1.2.1&auto=format&fit=crop&w=1950&q=80') no-repeat center center fixed;
background-size: cover;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
#container {
background: transparent;
width: 100%;
display: flex;
justify-content: center;
}
#content {
background: rgba(255, 255, 255, 0.95);
border-radius: 12px;
box-shadow: 0 20px 40px rgba(0,0,0,0.3);
width: 100%;
max-width: 400px;
padding: 40px;
backdrop-filter: blur(8px);
margin: 0;
}
.login #header, .login .breadcrumbs, .login #footer { display: none; }
#content-title { display: none; }
.login .form-row { border: none; padding: 12px 0; }
.login label { display: block; margin-bottom: 8px; color: #444; font-weight: 600; font-size: 14px; }
.login input[type=text], .login input[type=password] {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 6px;
box-sizing: border-box;
font-size: 14px;
transition: border-color 0.3s;
}
.login input[type=text]:focus, .login input[type=password]:focus {
border-color: #007bff;
outline: none;
}
.submit-row { margin-top: 24px; text-align: center; }
.submit-row input {
background: #007bff;
color: white;
padding: 12px 0;
width: 100%;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 16px;
font-weight: 600;
transition: background 0.3s, transform 0.2s;
}
.submit-row input:hover {
background: #0056b3;
transform: translateY(-1px);
}
.submit-row input:active {
transform: translateY(0);
}
.default-account {
margin-top: 30px;
padding: 15px;
background: #f0f7ff;
border-left: 4px solid #007bff;
border-radius: 4px;
font-size: 13px;
color: #555;
line-height: 1.6;
}
.brand-logo {
text-align: center;
margin-bottom: 30px;
}
.brand-logo h1 {
font-size: 28px;
color: #333;
margin: 0;
letter-spacing: 1px;
}
.errornote {
background: #fff5f5;
color: #e53e3e;
padding: 10px;
border-radius: 4px;
font-size: 13px;
margin-bottom: 20px;
border: 1px solid #feb2b2;
}
</style>
{% endblock %}
{% block content %}
<div id="content-main">
<div class="brand-logo">
<h1>智捷ERP</h1>
<p style="color: #666; margin-top: 5px;">高效管理 · 企业互联</p>
</div>
{% if form.errors and not form.non_field_errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
</p>
{% endif %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="errornote">
{{ error }}
</p>
{% endfor %}
{% endif %}
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
<div class="form-row">
{{ form.username.label_tag }} {{ form.username }}
</div>
<div class="form-row">
{{ form.password.label_tag }} {{ form.password }}
<input type="hidden" name="next" value="{{ next }}" />
</div>
<div class="submit-row">
<input type="submit" value="{% trans 'Log in' %}" />
</div>
</form>
<div class="default-account">
<strong style="color: #007bff;">演示账号</strong><br>
用户名:admin<br>
&nbsp;&nbsp;&nbsp;码:admin
</div>
</div>
{% endblock %}