diff --git a/docs/dev-ops/nginx/html/css/index.css b/docs/dev-ops/nginx/html/css/index.css
new file mode 100644
index 0000000..789c918
--- /dev/null
+++ b/docs/dev-ops/nginx/html/css/index.css
@@ -0,0 +1,327 @@
+/* index.css */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ font-family: 'PingFang SC', 'Helvetica Neue', Arial, sans-serif;
+}
+
+body {
+ background-color: #f5f5f5;
+ color: #333;
+ max-width: 500px;
+ margin: 0 auto;
+ position: relative;
+ padding-bottom: 30px;
+}
+
+/* 轮播图样式 */
+.swiper-container {
+ width: 100%;
+ height: 375px;
+ position: relative;
+ overflow: hidden;
+}
+.swiper-wrapper {
+ display: flex;
+ transition: transform 0.3s;
+}
+.swiper-slide {
+ flex: 0 0 100%;
+ height: 375px;
+}
+.swiper-slide img {
+ width:100%;
+ height:100%;
+ object-fit:contain; /* cover → contain 可看到整幅图 */
+ background:#fff; /* 若比例不一致留白更自然 */
+}
+.swiper-pagination {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ transform: translateX(-50%);
+ display: flex;
+ gap: 6px;
+}
+.swiper-dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: rgba(255,255,255,0.5);
+ transition: all 0.3s;
+}
+.swiper-dot.active {
+ background: #ff5000;
+ width: 16px;
+ border-radius: 4px;
+}
+
+
+/* 商品信息区域 */
+.group-left{
+ margin-right:4px;
+ color:#ff5000;
+ font-weight:bold;
+}
+.product-info {
+ background: #fff;
+ padding: 15px;
+ margin-bottom: 10px;
+}
+
+.price-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 12px;
+}
+
+.current-price {
+ color: #ff5000;
+ font-size: 28px;
+ font-weight: bold;
+}
+
+.current-price::before {
+ content: "¥";
+ font-size: 18px;
+}
+
+.original-price {
+ color: #999;
+ font-size: 16px;
+ text-decoration: line-through;
+ margin-left: 8px;
+}
+
+.original-price::before {
+ content: "¥";
+}
+
+.title {
+ font-size: 18px;
+ font-weight: bold;
+ line-height: 1.4;
+ margin-bottom: 10px;
+}
+
+.promo-tag {
+ display: inline-block;
+ background: linear-gradient(90deg, #ff2c2c, #ff6b22);
+ color: white;
+ font-size: 12px;
+ padding: 2px 6px;
+ border-radius: 2px;
+ margin-right: 5px;
+}
+
+.promo-info {
+ color: #ff5000;
+ font-size: 14px;
+ margin: 8px 0;
+ display: flex;
+ align-items: center;
+}
+
+.promo-info i {
+ margin-right: 5px;
+}
+
+/* 拼单区域 - 修改了高度 */
+/* “仅剩 x 人成团” 前缀样式 */
+.left-num{
+ color: #666;
+ margin-right:4px;
+ font-weight:bold;
+}
+
+.group-buying {
+ background: #fff;
+ padding: 15px;
+ margin-bottom: 10px;
+ position: relative;
+ overflow: hidden;
+}
+
+.section-title {
+ font-size: 16px;
+ font-weight: bold;
+ margin-bottom: 12px;
+ position: relative;
+ padding-left: 10px;
+}
+
+.section-title::before {
+ content: "";
+ position: absolute;
+ left: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 3px;
+ height: 16px;
+ background: #ff5000;
+ border-radius: 2px;
+}
+
+.group-users {
+ height: 120px; /* 修改为120px以容纳两条完整信息 */
+ position: relative;
+ overflow: hidden;
+}
+
+.user-list {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ transition: transform 0.5s ease;
+}
+
+.user-item {
+ display: flex;
+ align-items: center;
+ padding: 8px 0; /* 减小上下内边距 */
+ border-bottom: 1px solid #f5f5f5;
+}
+
+.user-item:last-child {
+ border-bottom: none;
+}
+
+.user-avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ background: #f5f5f5;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 10px;
+ color: #999;
+ font-size: 20px;
+}
+
+.user-info {
+ flex: 1;
+}
+
+.user-name {
+ font-size: 15px;
+ font-weight: bold;
+ margin-bottom: 4px;
+}
+
+.user-status {
+ font-size: 13px;
+ color: #666;
+}
+
+.countdown {
+ display: inline-block;
+ background: #ff5000;
+ color: white;
+ padding: 1px 4px;
+ border-radius: 2px;
+ margin-left: 5px;
+}
+
+.buy-btn {
+ background: linear-gradient(90deg, #ff2c2c, #ff6b22);
+ color: white;
+ border: none;
+ border-radius: 4px;
+ padding: 6px 15px;
+ font-size: 14px;
+ font-weight: bold;
+ cursor: pointer;
+}
+
+/* 底部操作栏 */
+.action-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ max-width: 500px;
+ margin: 0 auto;
+ background: #fff;
+ display: flex;
+ height: 60px;
+ box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
+ z-index: 100;
+}
+
+.action-btn {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: 12px;
+ color: #666;
+}
+
+.action-btn i {
+ font-size: 20px;
+ margin-bottom: 4px;
+}
+
+.purchase-btn {
+ flex: 2;
+ display: flex;
+}
+
+.btn-single {
+ flex: 1;
+ background: #ff9500;
+ color: white;
+ border: none;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+.btn-group {
+ flex: 1;
+ background: #ff5000;
+ color: white;
+ border: none;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+/* ===== 支付弹窗 ===== */
+.pay-mask{
+ position:fixed;inset:0;z-index:999;
+ background:rgba(0,0,0,.45);
+ display:none;align-items:center;justify-content:center;
+}
+
+/* ① 适当放宽弹窗,保证二维码和按钮都有留白 */
+.pay-box{
+ width:92%; /* → 手机端留 8% 边距 */
+ max-width:420px; /* → PC 也能放下 260px 二维码 */
+ background:#fff;
+ border-radius:10px;
+ padding:28px 24px;
+ text-align:center;
+}
+
+/* ② 用 .qr-code 选中 ,限制尺寸并居中 */
+.qr-code{
+ width:260px; /* 你想要的显示大小 */
+ max-width:100%; /* 小屏自动缩小 */
+ height:auto;
+ display:block;
+ margin:0 auto 32px; /* 居中 + 与按钮留间距 */
+ border-radius:12px;
+ object-fit:contain; /* 防止被拉伸/裁切 */
+}
+
+/* 其余按钮样式保持不变 */
+.pay-btns{display:flex;gap:16px;justify-content:center;}
+.btn-primary,.btn-secondary{
+ flex:1;padding:12px 0;border:none;border-radius:10px;
+ font-size:16px;font-weight:600;cursor:pointer;
+}
+.btn-primary{background:#12a400;color:#fff;}
+.btn-secondary{background:#f0f0f0;}
\ No newline at end of file
diff --git a/docs/dev-ops/nginx/html/css/login.css b/docs/dev-ops/nginx/html/css/login.css
new file mode 100644
index 0000000..525a8db
--- /dev/null
+++ b/docs/dev-ops/nginx/html/css/login.css
@@ -0,0 +1,91 @@
+/* 整体布局 */
+*{margin:0;padding:0;box-sizing:border-box;font-family:'PingFang SC','Helvetica Neue',Arial,sans-serif;}
+
+body{
+ height:100vh;
+ display:flex;
+ align-items:center;
+ justify-content:center;
+ background:#d5d1e8; /* 柔和紫色背景 */
+}
+
+.container{
+ width:90%;max-width:420px;
+}
+
+.login-form{
+ background:#fff;
+ padding:36px 28px;
+ border-radius:14px;
+ box-shadow:0 4px 12px rgba(0,0,0,.08);
+}
+
+.login-form h2{
+ font-size:24px;
+ font-weight:600;
+ text-align:center;
+ margin-bottom:32px;
+}
+
+/* 输入框组 */
+.input-group{
+ position:relative;
+ margin-bottom:26px;
+}
+
+.input-group input{
+ width:100%;
+ padding:14px 16px;
+ font-size:16px;
+ border:2px solid #aaa3;
+ border-radius:10px;
+ outline:none;
+ transition:border .25s;
+}
+
+.input-group input:focus{
+ border-color:#1296ff;
+}
+
+.input-group label{
+ position:absolute;
+ left:18px;
+ top:50%;
+ transform:translateY(-50%);
+ color:#999;
+ pointer-events:none;
+ transition:all .25s;
+}
+
+/* 上浮效果 */
+.input-group input:focus + label,
+.input-group input:not(:placeholder-shown) + label{
+ top:0;
+ transform:translateY(-50%) scale(.86);
+ background:#fff;
+ padding:0 4px;
+ color:#1296ff;
+}
+
+/* 登录按钮 */
+button[type="submit"]{
+ width:100%;
+ padding:14px 0;
+ font-size:18px;
+ font-weight:600;
+ color:#fff;
+ background:#1296ff;
+ border:none;
+ border-radius:10px;
+ cursor:pointer;
+ transition:opacity .25s;
+}
+button[type="submit"]:hover{opacity:.9;}
+
+.error-message{
+ margin-top:18px;
+ font-size:14px;
+ color:#e02424;
+ text-align:center;
+ display:none;
+}
diff --git a/docs/dev-ops/nginx/html/images/goods_info1.png b/docs/dev-ops/nginx/html/images/goods_info1.png
new file mode 100644
index 0000000..4e80f6a
Binary files /dev/null and b/docs/dev-ops/nginx/html/images/goods_info1.png differ
diff --git a/docs/dev-ops/nginx/html/images/goods_info2.png b/docs/dev-ops/nginx/html/images/goods_info2.png
new file mode 100644
index 0000000..56fe32d
Binary files /dev/null and b/docs/dev-ops/nginx/html/images/goods_info2.png differ
diff --git a/docs/dev-ops/nginx/html/images/goods_info3.png b/docs/dev-ops/nginx/html/images/goods_info3.png
new file mode 100644
index 0000000..57429a9
Binary files /dev/null and b/docs/dev-ops/nginx/html/images/goods_info3.png differ
diff --git a/docs/dev-ops/nginx/html/images/qrcode.png b/docs/dev-ops/nginx/html/images/qrcode.png
new file mode 100644
index 0000000..79f2351
Binary files /dev/null and b/docs/dev-ops/nginx/html/images/qrcode.png differ
diff --git a/docs/dev-ops/nginx/html/index.html b/docs/dev-ops/nginx/html/index.html
new file mode 100644
index 0000000..6c53f0e
--- /dev/null
+++ b/docs/dev-ops/nginx/html/index.html
@@ -0,0 +1,143 @@
+
+
+