diff --git a/new_web/merchant/index.html b/new_web/merchant/index.html
deleted file mode 100644
index 1502751..0000000
--- a/new_web/merchant/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
- 信息管理系统
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
欢迎使用信息管理系统
-
请从左侧菜单选择功能模块
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/new_web/merchant/CLAUDE.md b/web/merchant/CLAUDE.md
similarity index 100%
rename from new_web/merchant/CLAUDE.md
rename to web/merchant/CLAUDE.md
diff --git a/web/merchant/css/styles.css b/web/merchant/css/styles.css
deleted file mode 100644
index 8054eb1..0000000
--- a/web/merchant/css/styles.css
+++ /dev/null
@@ -1,1073 +0,0 @@
-/* Reset and Base Styles */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
- line-height: 1.5;
- color: #111827;
- background-color: #f9fafb;
-}
-
-/* Utility Classes */
-.min-h-screen {
- min-height: 100vh;
-}
-
-.bg-gray-50 {
- background-color: #f9fafb;
-}
-
-.bg-green-700 {
- background-color: #15803d;
-}
-
-.bg-green-600 {
- background-color: #16a34a;
-}
-
-.bg-white {
- background-color: #ffffff;
-}
-
-.bg-gray-100 {
- background-color: #f3f4f6;
-}
-
-.bg-gray-200 {
- background-color: #e5e7eb;
-}
-
-.bg-gray-300 {
- background-color: #d1d5db;
-}
-
-.text-white {
- color: #ffffff;
-}
-
-.text-gray-500 {
- color: #6b7280;
-}
-
-.text-gray-600 {
- color: #4b5563;
-}
-
-.text-gray-700 {
- color: #374151;
-}
-
-.text-gray-900 {
- color: #111827;
-}
-
-.text-blue-500 {
- color: #3b82f6;
-}
-
-.text-green-600 {
- color: #16a34a;
-}
-
-.text-green-900 {
- color: #14532d;
-}
-
-.px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.py-3 {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
-}
-
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.py-2\.5 {
- padding-top: 0.625rem;
- padding-bottom: 0.625rem;
-}
-
-.py-4 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-
-.py-6 {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
-}
-
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-
-.p-2 {
- padding: 0.5rem;
-}
-
-.p-3 {
- padding: 0.75rem;
-}
-
-.p-6 {
- padding: 1.5rem;
-}
-
-.flex {
- display: flex;
-}
-
-.items-center {
- align-items: center;
-}
-
-.justify-between {
- justify-content: space-between;
-}
-
-.justify-center {
- justify-content: center;
-}
-
-.gap-2 {
- gap: 0.5rem;
-}
-
-.gap-3 {
- gap: 0.75rem;
-}
-
-.gap-4 {
- gap: 1rem;
-}
-
-.text-lg {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-
-.text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-
-.text-xs {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-
-.font-medium {
- font-weight: 500;
-}
-
-.h-4 {
- height: 1rem;
-}
-
-.w-4 {
- width: 1rem;
-}
-
-.h-3 {
- height: 0.75rem;
-}
-
-.w-3 {
- width: 0.75rem;
-}
-
-.h-8 {
- height: 2rem;
-}
-
-.w-8 {
- width: 2rem;
-}
-
-.h-16 {
- height: 4rem;
-}
-
-.w-9 {
- width: 2.25rem;
-}
-
-.h-4 {
- height: 1rem;
-}
-
-.w-4 {
- width: 1rem;
-}
-
-.after\:h-4::after {
- height: 1rem;
-}
-
-.after\:w-4::after {
- width: 1rem;
-}
-
-.peer-focus\:ring-2:focus ~ .peer-focus\:ring-2 {
- box-shadow: 0 0 0 2px;
-}
-
-.peer-focus\:ring-green-300:focus ~ .peer-focus\:ring-green-300 {
- box-shadow: 0 0 0 2px rgba(134, 239, 172, 0.5);
-}
-
-.w-16 {
- width: 4rem;
-}
-
-.bg-gray-100 {
- background-color: #f3f4f6;
-}
-
-.h-96 {
- height: 24rem;
-}
-
-.h-full {
- height: 100%;
-}
-
-.w-full {
- width: 100%;
-}
-
-.w-48 {
- width: 12rem;
-}
-
-.w-11 {
- width: 2.75rem;
-}
-
-.h-6 {
- height: 1.5rem;
-}
-
-.h-5 {
- height: 1.25rem;
-}
-
-.w-5 {
- width: 1.25rem;
-}
-
-.rounded-md {
- border-radius: 0.375rem;
-}
-
-.rounded-lg {
- border-radius: 0.5rem;
-}
-
-.rounded-full {
- border-radius: 9999px;
-}
-
-.border {
- border-width: 1px;
-}
-
-.border-r {
- border-right-width: 1px;
-}
-
-.border-b {
- border-bottom-width: 1px;
-}
-
-.border-l-2 {
- border-left-width: 2px;
-}
-
-.border-gray-200 {
- border-color: #e5e7eb;
-}
-
-.border-gray-100 {
- border-color: #f3f4f6;
-}
-
-.border-gray-300 {
- border-color: #d1d5db;
-}
-
-.border-green-500 {
- border-color: #22c55e;
-}
-
-.shadow-sm {
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
-}
-
-.cursor-pointer {
- cursor: pointer;
-}
-
-.select-none {
- user-select: none;
-}
-
-.space-y-1 > * + * {
- margin-top: 0.25rem;
-}
-
-.flex-1 {
- flex: 1 1 0%;
-}
-
-.transition-transform {
- transition-property: transform;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-colors {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.rotate-180 {
- transform: rotate(180deg);
-}
-
-.ml-4 {
- margin-left: 1rem;
-}
-
-.mt-2 {
- margin-top: 0.5rem;
-}
-
-.mb-4 {
- margin-bottom: 1rem;
-}
-
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-
-.text-center {
- text-align: center;
-}
-
-.text-left {
- text-align: left;
-}
-
-.uppercase {
- text-transform: uppercase;
-}
-
-.tracking-wider {
- letter-spacing: 0.05em;
-}
-
-.whitespace-nowrap {
- white-space: nowrap;
-}
-
-.overflow-x-auto {
- overflow-x: auto;
-}
-
-.divide-y > * + * {
- border-top-width: 1px;
-}
-
-.divide-gray-200 > * + * {
- border-color: #e5e7eb;
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-
-.peer:checked ~ .peer-checked\:bg-green-600 {
- background-color: #16a34a;
-}
-
-.peer-checked\:after\:translate-x-full {
- content: '';
-}
-
-.peer:checked ~ .peer-checked\:after\:translate-x-full::after {
- transform: translateX(100%);
-}
-
-.peer-checked\:after\:border-white::after {
- border-color: #ffffff;
-}
-
-.after\:content-\[\'\'\]::after {
- content: '';
-}
-
-.after\:absolute::after {
- position: absolute;
-}
-
-.after\:top-\[2px\]::after {
- top: 2px;
-}
-
-.after\:left-\[2px\]::after {
- left: 2px;
-}
-
-.after\:bg-white::after {
- background-color: #ffffff;
-}
-
-.after\:border-gray-300::after {
- border-color: #d1d5db;
-}
-
-.after\:border::after {
- border-width: 1px;
-}
-
-.after\:rounded-full::after {
- border-radius: 9999px;
-}
-
-.after\:h-5::after {
- height: 1.25rem;
-}
-
-.after\:w-5::after {
- width: 1.25rem;
-}
-
-.after\:transition-all::after {
- transition-property: all;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.peer-focus\:outline-none:focus ~ .peer-focus\:outline-none {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.peer-focus\:ring-4:focus ~ .peer-focus\:ring-4 {
- box-shadow: 0 0 0 4px;
-}
-
-.peer-focus\:ring-green-300:focus ~ .peer-focus\:ring-green-300 {
- box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.5);
-}
-
-.min-h-\[calc\(100vh-60px\)\] {
- min-height: calc(100vh - 60px);
-}
-
-.relative {
- position: relative;
-}
-
-.inline-flex {
- display: inline-flex;
-}
-
-.absolute {
- position: absolute;
-}
-
-.top-\[2px\] {
- top: 2px;
-}
-
-.left-\[2px\] {
- left: 2px;
-}
-
-.hidden {
- display: none;
-}
-
-/* Hover Effects */
-.hover\:bg-gray-50:hover {
- background-color: #f9fafb;
-}
-
-.hover\:bg-gray-100:hover {
- background-color: #f3f4f6;
-}
-
-.bg-red-600 {
- background-color: #dc2626;
-}
-
-.hover\:bg-red-700:hover {
- background-color: #b91c1c;
-}
-
-.hover\:bg-green-700:hover {
- background-color: #15803d;
-}
-
-.hover\:text-green-900:hover {
- color: #14532d;
-}
-
-/* Focus Effects */
-.focus\:border-green-500:focus {
- border-color: #22c55e;
-}
-
-.focus\:outline-none:focus {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-/* Custom Toggle Switch Styles */
-.toggle-switch {
- position: relative;
- display: inline-block;
- width: 44px;
- height: 24px;
-}
-
-.toggle-switch input {
- opacity: 0;
- width: 0;
- height: 0;
-}
-
-.toggle-slider {
- position: absolute;
- cursor: pointer;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: #e5e7eb;
- transition: .4s;
- border-radius: 24px;
-}
-
-.toggle-slider:before {
- position: absolute;
- content: "";
- height: 20px;
- width: 20px;
- left: 2px;
- top: 2px;
- background-color: white;
- transition: .4s;
- border-radius: 50%;
- border: 1px solid #d1d5db;
-}
-
-input:checked + .toggle-slider {
- background-color: #16a34a;
-}
-
-input:focus + .toggle-slider {
- box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.3);
-}
-
-input:checked + .toggle-slider:before {
- transform: translateX(20px);
- border-color: white;
-}
-
-/* Table Styles */
-table {
- border-collapse: collapse;
-}
-
-thead th {
- background-color: #f9fafb;
- font-weight: 500;
- text-transform: uppercase;
- letter-spacing: 0.05em;
- font-size: 0.75rem;
- color: #6b7280;
- padding: 0.75rem 1.5rem;
- text-align: left;
-}
-
-tbody td {
- padding: 1rem 1.5rem;
- border-top: 1px solid #e5e7eb;
- font-size: 0.875rem;
-}
-
-tbody tr:hover {
- background-color: #f9fafb;
-}
-
-/* Button Styles */
-button {
- border: none;
- background: none;
- cursor: pointer;
- font-family: inherit;
-}
-
-/* Input Styles */
-input[type="text"] {
- border: 1px solid #e5e7eb;
- border-radius: 0.375rem;
- padding: 0.5rem 0.75rem;
- font-size: 0.875rem;
- width: 100%;
- transition: border-color 0.15s ease;
-}
-
-input[type="text"]:focus {
- outline: none;
- border-color: #22c55e;
-}
-
-/* Animation */
-@keyframes fadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-.fade-in {
- animation: fadeIn 0.3s ease-in;
-}
-
-/* 小开关样式 - 用于等级编辑页面 */
-.small-toggle input[type="checkbox"]:checked + div {
- background-color: #16a34a !important;
-}
-
-.small-toggle input[type="checkbox"]:checked + div:after {
- transform: translateX(1rem) !important;
- border-color: white !important;
-}
-
-.small-toggle div {
- background-color: #e5e7eb;
- transition: all 0.3s ease;
-}
-
-.small-toggle div:after {
- content: '';
- position: absolute;
- top: 2px;
- left: 2px;
- background-color: white;
- border: 1px solid #d1d5db;
- border-radius: 50%;
- height: 1rem;
- width: 1rem;
- transition: all 0.3s ease;
-}
-
-/* Tab样式 */
-.tab-item {
- border-bottom: 2px solid transparent;
- transition: all 0.2s ease;
-}
-
-.tab-item:hover {
- color: #374151;
- background-color: #f9fafb;
-}
-
-.tab-item.active {
- border-bottom-color: #22c55e;
- color: #16a34a;
-}
-
-/* 输入框样式 */
-input[type="number"] {
- border: 1px solid #d1d5db;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.25rem;
- transition: border-color 0.15s ease;
-}
-
-input[type="number"]:focus {
- outline: none;
- border-color: #22c55e;
- box-shadow: 0 0 0 1px #22c55e;
-}
-
-input[type="number"]:disabled {
- background-color: #f3f4f6;
- color: #9ca3af;
- cursor: not-allowed;
-}
-
-/* 按钮样式 */
-.btn-green {
- background-color: #16a34a;
- color: white;
- padding: 0.5rem 1rem;
- border-radius: 0.375rem;
- font-size: 0.875rem;
- font-weight: 500;
- transition: background-color 0.15s ease;
- border: none;
- cursor: pointer;
-}
-
-.btn-green:hover {
- background-color: #15803d;
-}
-
-.btn-gray {
- background-color: #6b7280;
- color: white;
- padding: 0.5rem 1rem;
- border-radius: 0.375rem;
- font-size: 0.875rem;
- font-weight: 500;
- transition: background-color 0.15s ease;
- border: none;
- cursor: pointer;
-}
-
-.btn-gray:hover {
- background-color: #4b5563;
-}
-@media (max-width: 768px) {
- .w-48 {
- width: 100%;
- }
-
- .flex {
- flex-direction: column;
- }
-
- .min-h-\[calc\(100vh-60px\)\] {
- min-height: auto;
- }
-}
-
-/* 弹窗样式 */
-.fixed {
- position: fixed;
-}
-
-.inset-0 {
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.bg-black {
- background-color: #000000;
-}
-
-.bg-opacity-50 {
- background-color: rgba(0, 0, 0, 0.5);
-}
-
-.z-50 {
- z-index: 50;
-}
-
-.w-96 {
- width: 24rem;
-}
-
-.max-w-md {
- max-width: 28rem;
-}
-
-.mx-4 {
- margin-left: 1rem;
- margin-right: 1rem;
-}
-
-.space-y-4 > * + * {
- margin-top: 1rem;
-}
-
-.mb-1 {
- margin-bottom: 0.25rem;
-}
-
-.ml-2 {
- margin-left: 0.5rem;
-}
-
-.border-t-0 {
- border-top-width: 0;
-}
-
-.rounded-t {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.rounded-b {
- border-bottom-left-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem;
-}
-
-.text-red-500 {
- color: #ef4444;
-}
-
-.bg-blue-600 {
- background-color: #2563eb;
-}
-
-.hover\:bg-blue-700:hover {
- background-color: #1d4ed8;
-}
-
-.hover\:bg-gray-200:hover {
- background-color: #e5e7eb;
-}
-
-.text-gray-400 {
- color: #9ca3af;
-}
-
-.hover\:text-gray-600:hover {
- color: #4b5563;
-}
-
-.focus\:ring-2:focus {
- box-shadow: 0 0 0 2px;
-}
-
-.focus\:ring-green-500:focus {
- box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.5);
-}
-
-.focus\:border-green-500:focus {
- border-color: #22c55e;
-}
-
-/* 弹窗动画 */
-@keyframes modalFadeIn {
- from {
- opacity: 0;
- transform: scale(0.95);
- }
- to {
- opacity: 1;
- transform: scale(1);
- }
-}
-
-.modal-content {
- animation: modalFadeIn 0.2s ease-out;
-}
-
-/* 数字输入框调节按钮 */
-.number-adjuster {
- display: flex;
- flex-direction: column;
-}
-
-.number-adjuster button {
- padding: 0.25rem 0.5rem;
- font-size: 0.75rem;
- line-height: 1rem;
- background-color: #f3f4f6;
- border: 1px solid #d1d5db;
- transition: background-color 0.15s ease;
-}
-
-.number-adjuster button:hover {
- background-color: #e5e7eb;
-}
-
-.number-adjuster button:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.number-adjuster button:last-child {
- border-bottom-left-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem;
- border-top-width: 0;
-}
-
-/* 网格布局 */
-.grid {
- display: grid;
-}
-
-.grid-cols-1 {
- grid-template-columns: repeat(1, minmax(0, 1fr));
-}
-
-.grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
-}
-
-.grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-
-@media (min-width: 768px) {
- .md\:grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- .md\:grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
- }
-}
-
-/* 间距工具 */
-.space-x-2 > * + * {
- margin-left: 0.5rem;
-}
-
-.space-x-4 > * + * {
- margin-left: 1rem;
-}
-
-/* 徽章样式 */
-.bg-blue-100 {
- background-color: #dbeafe;
-}
-
-.text-blue-800 {
- color: #1e40af;
-}
-
-.bg-purple-100 {
- background-color: #ede9fe;
-}
-
-.text-purple-800 {
- color: #5b21b6;
-}
-
-.bg-blue-50 {
- background-color: #eff6ff;
-}
-
-.text-blue-600 {
- color: #2563eb;
-}
-
-.text-blue-900 {
- color: #1e3a8a;
-}
-
-.border-blue-200 {
- border-color: #bfdbfe;
-}
-
-.bg-green-50 {
- background-color: #f0fdf4;
-}
-
-.border-green-200 {
- border-color: #bbf7d0;
-}
-
-.text-green-900 {
- color: #14532d;
-}
-
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-
-.font-bold {
- font-weight: 700;
-}
-
-.flex-shrink-0 {
- flex-shrink: 0;
-}
-
-.rounded-full {
- border-radius: 9999px;
-}
-
-.px-2\.5 {
- padding-left: 0.625rem;
- padding-right: 0.625rem;
-}
-
-.py-0\.5 {
- padding-top: 0.125rem;
- padding-bottom: 0.125rem;
-}
-
-.font-mono {
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
-}
-
-.inline-block {
- display: inline-block;
-}
-
-.ml-1 {
- margin-left: 0.25rem;
-}
-
-.w-12 {
- width: 3rem;
-}
-
-.text-center {
- text-align: center;
-}
-
-.sm\:px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-
-.border-t {
- border-top-width: 1px;
-}
-
-.overflow-hidden {
- overflow: hidden;
-}
-
-.shadow-sm {
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
-}
-
-.focus\:border-green-500:focus {
- border-color: #22c55e;
-}
-
-.focus\:ring-green-500:focus {
- box-shadow: 0 0 0 1px #22c55e;
-}
\ No newline at end of file
diff --git a/web/merchant/demo/README.md b/web/merchant/demo/README.md
deleted file mode 100644
index 01cd2b0..0000000
--- a/web/merchant/demo/README.md
+++ /dev/null
@@ -1,116 +0,0 @@
-# 大数集市商户端 Demo
-
-这是一个纯HTML版本的中文商户后台管理系统演示项目,基于原始的Next.js项目转换而来。
-
-## 项目结构
-
-```
-demo/
-├── index.html # 主页面文件
-├── css/
-│ └── styles.css # 样式文件
-├── js/
-│ └── main.js # JavaScript交互逻辑
-├── images/ # 静态资源文件
-│ ├── placeholder.svg
-│ ├── placeholder.png
-│ └── ...
-└── README.md # 说明文档
-```
-
-## 功能特性
-
-### ✅ 已实现功能
-
-1. **完整的页面布局**
- - 绿色主题的顶部导航栏
- - 左侧折叠式菜单
- - 右侧主内容区域
-
-2. **交互功能**
- - 菜单展开/收起动画
- - 页面内容切换(如等级设置页面)
- - 开关按钮的切换效果
- - 搜索菜单功能
-
-3. **响应式设计**
- - 支持桌面端和移动端布局
- - 自适应屏幕大小
-
-4. **用户体验**
- - 平滑的动画过渡效果
- - 键盘快捷键支持(ESC回首页,Ctrl+F搜索)
- - 通知提示系统
-
-### 🎯 主要页面
-
-- **首页**: 默认欢迎页面
-- **等级设置**: 会员等级管理表格,包含开关切换功能
-
-### 🔧 菜单项
-
-- 首页
-- 运营管理(可展开)
-- 数据中心
-- 优惠券营销工具管理
-- 预售营销工具管理
-- 会员管理(可展开,包含等级设置等子菜单)
-- 钱包管理(可展开)
-- 运费管理(可展开)
-
-## 使用方法
-
-1. **直接打开**
- ```bash
- # 在浏览器中打开
- open index.html
- # 或者
- double-click index.html
- ```
-
-2. **本地服务器运行**(推荐)
- ```bash
- # 使用Python
- python -m http.server 8000
- # 或使用Node.js
- npx serve .
- # 然后访问 http://localhost:8000
- ```
-
-## 技术实现
-
-- **HTML5**: 语义化标签结构
-- **CSS3**: 基于Tailwind CSS的样式系统,包含自定义动画
-- **JavaScript ES6+**: 原生JS实现所有交互功能
-- **响应式设计**: 适配不同设备屏幕
-
-## 浏览器兼容性
-
-- Chrome 60+
-- Firefox 55+
-- Safari 12+
-- Edge 79+
-
-## 快捷键
-
-- `ESC`: 返回首页
-- `Ctrl+F`: 聚焦搜索框
-
-## 定制说明
-
-如需修改样式或功能,可以编辑以下文件:
-- `css/styles.css`: 修改样式
-- `js/main.js`: 修改交互逻辑
-- `index.html`: 修改页面结构
-
-## 注意事项
-
-1. 这是一个静态演示版本,所有数据都是模拟数据
-2. 开关切换、按钮点击等操作只有视觉反馈,不会实际提交数据
-3. 为了演示效果,保留了完整的交互逻辑和动画效果
-
-## 原项目信息
-
-- 原技术栈: Next.js + React + Tailwind CSS + shadcn/ui
-- 转换时间: 2025年
-- 转换方式: 手动转换为纯HTML/CSS/JS
\ No newline at end of file
diff --git a/web/merchant/demo/css/styles.css b/web/merchant/demo/css/styles.css
deleted file mode 100644
index 7175439..0000000
--- a/web/merchant/demo/css/styles.css
+++ /dev/null
@@ -1,638 +0,0 @@
-/* Reset and Base Styles */
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
- line-height: 1.5;
- color: #111827;
- background-color: #f9fafb;
-}
-
-/* Utility Classes */
-.min-h-screen {
- min-height: 100vh;
-}
-
-.bg-gray-50 {
- background-color: #f9fafb;
-}
-
-.bg-green-700 {
- background-color: #15803d;
-}
-
-.bg-green-600 {
- background-color: #16a34a;
-}
-
-.bg-white {
- background-color: #ffffff;
-}
-
-.bg-gray-100 {
- background-color: #f3f4f6;
-}
-
-.bg-gray-200 {
- background-color: #e5e7eb;
-}
-
-.bg-gray-300 {
- background-color: #d1d5db;
-}
-
-.text-white {
- color: #ffffff;
-}
-
-.text-gray-500 {
- color: #6b7280;
-}
-
-.text-gray-600 {
- color: #4b5563;
-}
-
-.text-gray-700 {
- color: #374151;
-}
-
-.text-gray-900 {
- color: #111827;
-}
-
-.text-blue-500 {
- color: #3b82f6;
-}
-
-.text-green-600 {
- color: #16a34a;
-}
-
-.text-green-900 {
- color: #14532d;
-}
-
-.px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-.py-3 {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
-}
-
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.py-2\.5 {
- padding-top: 0.625rem;
- padding-bottom: 0.625rem;
-}
-
-.py-4 {
- padding-top: 1rem;
- padding-bottom: 1rem;
-}
-
-.py-6 {
- padding-top: 1.5rem;
- padding-bottom: 1.5rem;
-}
-
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-
-.px-6 {
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-
-.p-2 {
- padding: 0.5rem;
-}
-
-.p-3 {
- padding: 0.75rem;
-}
-
-.p-6 {
- padding: 1.5rem;
-}
-
-.flex {
- display: flex;
-}
-
-.items-center {
- align-items: center;
-}
-
-.justify-between {
- justify-content: space-between;
-}
-
-.justify-center {
- justify-content: center;
-}
-
-.gap-2 {
- gap: 0.5rem;
-}
-
-.gap-3 {
- gap: 0.75rem;
-}
-
-.gap-4 {
- gap: 1rem;
-}
-
-.text-lg {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-
-.text-sm {
- font-size: 0.875rem;
- line-height: 1.25rem;
-}
-
-.text-xs {
- font-size: 0.75rem;
- line-height: 1rem;
-}
-
-.font-medium {
- font-weight: 500;
-}
-
-.h-4 {
- height: 1rem;
-}
-
-.w-4 {
- width: 1rem;
-}
-
-.h-3 {
- height: 0.75rem;
-}
-
-.w-3 {
- width: 0.75rem;
-}
-
-.h-8 {
- height: 2rem;
-}
-
-.w-8 {
- width: 2rem;
-}
-
-.h-16 {
- height: 4rem;
-}
-
-.w-16 {
- width: 4rem;
-}
-
-.h-96 {
- height: 24rem;
-}
-
-.h-full {
- height: 100%;
-}
-
-.w-full {
- width: 100%;
-}
-
-.w-48 {
- width: 12rem;
-}
-
-.w-11 {
- width: 2.75rem;
-}
-
-.h-6 {
- height: 1.5rem;
-}
-
-.h-5 {
- height: 1.25rem;
-}
-
-.w-5 {
- width: 1.25rem;
-}
-
-.rounded-md {
- border-radius: 0.375rem;
-}
-
-.rounded-lg {
- border-radius: 0.5rem;
-}
-
-.rounded-full {
- border-radius: 9999px;
-}
-
-.border {
- border-width: 1px;
-}
-
-.border-r {
- border-right-width: 1px;
-}
-
-.border-b {
- border-bottom-width: 1px;
-}
-
-.border-l-2 {
- border-left-width: 2px;
-}
-
-.border-gray-200 {
- border-color: #e5e7eb;
-}
-
-.border-gray-100 {
- border-color: #f3f4f6;
-}
-
-.border-gray-300 {
- border-color: #d1d5db;
-}
-
-.border-green-500 {
- border-color: #22c55e;
-}
-
-.shadow-sm {
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
-}
-
-.cursor-pointer {
- cursor: pointer;
-}
-
-.select-none {
- user-select: none;
-}
-
-.space-y-1 > * + * {
- margin-top: 0.25rem;
-}
-
-.flex-1 {
- flex: 1 1 0%;
-}
-
-.transition-transform {
- transition-property: transform;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.transition-colors {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.rotate-180 {
- transform: rotate(180deg);
-}
-
-.ml-4 {
- margin-left: 1rem;
-}
-
-.mt-2 {
- margin-top: 0.5rem;
-}
-
-.mb-4 {
- margin-bottom: 1rem;
-}
-
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-
-.text-center {
- text-align: center;
-}
-
-.text-left {
- text-align: left;
-}
-
-.uppercase {
- text-transform: uppercase;
-}
-
-.tracking-wider {
- letter-spacing: 0.05em;
-}
-
-.whitespace-nowrap {
- white-space: nowrap;
-}
-
-.overflow-x-auto {
- overflow-x: auto;
-}
-
-.divide-y > * + * {
- border-top-width: 1px;
-}
-
-.divide-gray-200 > * + * {
- border-color: #e5e7eb;
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-
-.peer:checked ~ .peer-checked\:bg-green-600 {
- background-color: #16a34a;
-}
-
-.peer-checked\:after\:translate-x-full {
- content: '';
-}
-
-.peer:checked ~ .peer-checked\:after\:translate-x-full::after {
- transform: translateX(100%);
-}
-
-.peer-checked\:after\:border-white::after {
- border-color: #ffffff;
-}
-
-.after\:content-\[\'\'\]::after {
- content: '';
-}
-
-.after\:absolute::after {
- position: absolute;
-}
-
-.after\:top-\[2px\]::after {
- top: 2px;
-}
-
-.after\:left-\[2px\]::after {
- left: 2px;
-}
-
-.after\:bg-white::after {
- background-color: #ffffff;
-}
-
-.after\:border-gray-300::after {
- border-color: #d1d5db;
-}
-
-.after\:border::after {
- border-width: 1px;
-}
-
-.after\:rounded-full::after {
- border-radius: 9999px;
-}
-
-.after\:h-5::after {
- height: 1.25rem;
-}
-
-.after\:w-5::after {
- width: 1.25rem;
-}
-
-.after\:transition-all::after {
- transition-property: all;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- transition-duration: 150ms;
-}
-
-.peer-focus\:outline-none:focus ~ .peer-focus\:outline-none {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-.peer-focus\:ring-4:focus ~ .peer-focus\:ring-4 {
- box-shadow: 0 0 0 4px;
-}
-
-.peer-focus\:ring-green-300:focus ~ .peer-focus\:ring-green-300 {
- box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.5);
-}
-
-.min-h-\[calc\(100vh-60px\)\] {
- min-height: calc(100vh - 60px);
-}
-
-.relative {
- position: relative;
-}
-
-.inline-flex {
- display: inline-flex;
-}
-
-.absolute {
- position: absolute;
-}
-
-.top-\[2px\] {
- top: 2px;
-}
-
-.left-\[2px\] {
- left: 2px;
-}
-
-.hidden {
- display: none;
-}
-
-/* Hover Effects */
-.hover\:bg-gray-50:hover {
- background-color: #f9fafb;
-}
-
-.hover\:bg-gray-100:hover {
- background-color: #f3f4f6;
-}
-
-.hover\:bg-green-600:hover {
- background-color: #16a34a;
-}
-
-.hover\:text-green-900:hover {
- color: #14532d;
-}
-
-/* Focus Effects */
-.focus\:border-green-500:focus {
- border-color: #22c55e;
-}
-
-.focus\:outline-none:focus {
- outline: 2px solid transparent;
- outline-offset: 2px;
-}
-
-/* Custom Toggle Switch Styles */
-.toggle-switch {
- position: relative;
- display: inline-block;
- width: 44px;
- height: 24px;
-}
-
-.toggle-switch input {
- opacity: 0;
- width: 0;
- height: 0;
-}
-
-.toggle-slider {
- position: absolute;
- cursor: pointer;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: #e5e7eb;
- transition: .4s;
- border-radius: 24px;
-}
-
-.toggle-slider:before {
- position: absolute;
- content: "";
- height: 20px;
- width: 20px;
- left: 2px;
- top: 2px;
- background-color: white;
- transition: .4s;
- border-radius: 50%;
- border: 1px solid #d1d5db;
-}
-
-input:checked + .toggle-slider {
- background-color: #16a34a;
-}
-
-input:focus + .toggle-slider {
- box-shadow: 0 0 0 4px rgba(134, 239, 172, 0.3);
-}
-
-input:checked + .toggle-slider:before {
- transform: translateX(20px);
- border-color: white;
-}
-
-/* Table Styles */
-table {
- border-collapse: collapse;
-}
-
-thead th {
- background-color: #f9fafb;
- font-weight: 500;
- text-transform: uppercase;
- letter-spacing: 0.05em;
- font-size: 0.75rem;
- color: #6b7280;
- padding: 0.75rem 1.5rem;
- text-align: left;
-}
-
-tbody td {
- padding: 1rem 1.5rem;
- border-top: 1px solid #e5e7eb;
- font-size: 0.875rem;
-}
-
-tbody tr:hover {
- background-color: #f9fafb;
-}
-
-/* Button Styles */
-button {
- border: none;
- background: none;
- cursor: pointer;
- font-family: inherit;
-}
-
-/* Input Styles */
-input[type="text"] {
- border: 1px solid #e5e7eb;
- border-radius: 0.375rem;
- padding: 0.5rem 0.75rem;
- font-size: 0.875rem;
- width: 100%;
- transition: border-color 0.15s ease;
-}
-
-input[type="text"]:focus {
- outline: none;
- border-color: #22c55e;
-}
-
-/* Animation */
-@keyframes fadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-.fade-in {
- animation: fadeIn 0.3s ease-in;
-}
-
-/* Responsive */
-@media (max-width: 768px) {
- .w-48 {
- width: 100%;
- }
-
- .flex {
- flex-direction: column;
- }
-
- .min-h-\[calc\(100vh-60px\)\] {
- min-height: auto;
- }
-}
\ No newline at end of file
diff --git a/web/merchant/demo/images/placeholder-logo.png b/web/merchant/demo/images/placeholder-logo.png
deleted file mode 100644
index 8a792ac..0000000
Binary files a/web/merchant/demo/images/placeholder-logo.png and /dev/null differ
diff --git a/web/merchant/demo/images/placeholder-logo.svg b/web/merchant/demo/images/placeholder-logo.svg
deleted file mode 100644
index b1695aa..0000000
--- a/web/merchant/demo/images/placeholder-logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/merchant/demo/images/placeholder-user.jpg b/web/merchant/demo/images/placeholder-user.jpg
deleted file mode 100644
index 6fa7543..0000000
Binary files a/web/merchant/demo/images/placeholder-user.jpg and /dev/null differ
diff --git a/web/merchant/demo/images/placeholder.jpg b/web/merchant/demo/images/placeholder.jpg
deleted file mode 100644
index 6bfe963..0000000
Binary files a/web/merchant/demo/images/placeholder.jpg and /dev/null differ
diff --git a/web/merchant/demo/images/placeholder.svg b/web/merchant/demo/images/placeholder.svg
deleted file mode 100644
index e763910..0000000
--- a/web/merchant/demo/images/placeholder.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/merchant/demo/index.html b/web/merchant/demo/index.html
deleted file mode 100644
index 1ef5645..0000000
--- a/web/merchant/demo/index.html
+++ /dev/null
@@ -1,305 +0,0 @@
-
-
-
-
-
- 大数集市商户端
-
-
-
-
-
-
-
-
大数集市商户端
-
-
-
-
-
-
-
-
- 用户
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
欢迎使用大数集市商户端
-
请从左侧菜单选择功能
-
-
-
-
-
-
-
-
等级设置
-
-
-
-
-
- |
- 店铺名称
- |
-
- 是否启用会员
- |
-
- 会员等级
- |
-
- 操作
- |
-
-
-
-
- | 时尚服装店 |
-
-
- |
- lv1, lv2, lv3, lv4 |
-
-
- |
-
-
- | 数码电子城 |
-
-
- |
- lv1, lv2, lv3 |
-
-
- |
-
-
- | 美食餐厅 |
-
-
- |
- lv1, lv2, lv3, lv4 |
-
-
- |
-
-
- | 家居生活馆 |
-
-
- |
- lv1, lv2 |
-
-
- |
-
-
- | 运动健身店 |
-
-
- |
- lv1, lv2, lv3, lv4 |
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/web/merchant/demo/js/main.js b/web/merchant/demo/js/main.js
deleted file mode 100644
index 6b0e0c0..0000000
--- a/web/merchant/demo/js/main.js
+++ /dev/null
@@ -1,259 +0,0 @@
-// 全局状态管理
-let currentExpandedMenus = [];
-let currentSelectedMenuItem = '';
-
-// DOM 加载完成后初始化
-document.addEventListener('DOMContentLoaded', function() {
- console.log('大数集市商户端初始化完成');
-
- // 初始化菜单状态
- initializeMenus();
-
- // 初始化开关状态
- initializeSwitches();
-
- // 添加搜索功能
- initializeSearch();
-});
-
-// 菜单展开/收起功能
-function toggleMenu(menuId) {
- const arrow = document.getElementById(menuId + '-arrow');
- const submenu = document.getElementById(menuId + '-submenu');
-
- if (currentExpandedMenus.includes(menuId)) {
- // 收起菜单
- currentExpandedMenus = currentExpandedMenus.filter(id => id !== menuId);
-
- if (arrow) {
- arrow.classList.remove('rotate-180');
- }
-
- if (submenu) {
- submenu.classList.add('hidden');
- }
- } else {
- // 展开菜单
- currentExpandedMenus.push(menuId);
-
- if (arrow) {
- arrow.classList.add('rotate-180');
- }
-
- if (submenu) {
- submenu.classList.remove('hidden');
- submenu.classList.add('fade-in');
- }
- }
-
- console.log('菜单状态更新:', menuId, currentExpandedMenus);
-}
-
-// 显示等级设置页面
-function showLevelSettings() {
- // 隐藏默认内容
- const defaultContent = document.getElementById('default-content');
- const levelSettingsContent = document.getElementById('level-settings-content');
-
- if (defaultContent) {
- defaultContent.classList.add('hidden');
- }
-
- if (levelSettingsContent) {
- levelSettingsContent.classList.remove('hidden');
- levelSettingsContent.classList.add('fade-in');
- }
-
- currentSelectedMenuItem = 'level-settings';
- console.log('切换到等级设置页面');
-}
-
-// 显示默认页面
-function showDefaultContent() {
- const defaultContent = document.getElementById('default-content');
- const levelSettingsContent = document.getElementById('level-settings-content');
-
- if (levelSettingsContent) {
- levelSettingsContent.classList.add('hidden');
- }
-
- if (defaultContent) {
- defaultContent.classList.remove('hidden');
- defaultContent.classList.add('fade-in');
- }
-
- currentSelectedMenuItem = '';
- console.log('切换到默认页面');
-}
-
-// 开关切换功能
-function toggleSwitch(switchElement) {
- const isChecked = switchElement.checked;
- console.log('开关状态:', isChecked);
-
- // 添加视觉反馈
- const slider = switchElement.nextElementSibling;
- if (slider) {
- if (isChecked) {
- slider.style.backgroundColor = '#16a34a';
- } else {
- slider.style.backgroundColor = '#e5e7eb';
- }
- }
-}
-
-// 初始化菜单状态
-function initializeMenus() {
- // 会员管理菜单默认展开
- toggleMenu('member');
-
- // 添加首页点击事件
- const homeMenuItem = document.querySelector('[onclick*="首页"]');
- if (homeMenuItem) {
- homeMenuItem.addEventListener('click', showDefaultContent);
- }
-
- console.log('菜单初始化完成');
-}
-
-// 初始化开关状态
-function initializeSwitches() {
- const switches = document.querySelectorAll('input[type="checkbox"]');
- switches.forEach(switchElement => {
- // 为已选中的开关设置正确的样式
- if (switchElement.checked) {
- const slider = switchElement.nextElementSibling;
- if (slider) {
- slider.style.backgroundColor = '#16a34a';
- }
- }
- });
-
- console.log('开关初始化完成,共', switches.length, '个开关');
-}
-
-// 搜索功能
-function initializeSearch() {
- const searchInput = document.querySelector('input[placeholder*="搜索"]');
- if (searchInput) {
- searchInput.addEventListener('input', function(e) {
- const searchTerm = e.target.value.toLowerCase();
- filterMenuItems(searchTerm);
- });
- }
-}
-
-// 过滤菜单项
-function filterMenuItems(searchTerm) {
- const menuItems = document.querySelectorAll('nav div');
-
- menuItems.forEach(item => {
- const text = item.textContent.toLowerCase();
- if (text.includes(searchTerm) || searchTerm === '') {
- item.style.display = '';
- } else {
- item.style.display = 'none';
- }
- });
-
- console.log('搜索筛选:', searchTerm);
-}
-
-// 添加一些实用的辅助函数
-function showNotification(message, type = 'info') {
- console.log('通知:', message, '类型:', type);
-
- // 创建通知元素
- const notification = document.createElement('div');
- notification.className = `notification ${type}`;
- notification.textContent = message;
- notification.style.cssText = `
- position: fixed;
- top: 20px;
- right: 20px;
- padding: 12px 20px;
- border-radius: 6px;
- color: white;
- font-size: 14px;
- z-index: 1000;
- transition: all 0.3s ease;
- `;
-
- // 根据类型设置颜色
- switch(type) {
- case 'success':
- notification.style.backgroundColor = '#16a34a';
- break;
- case 'error':
- notification.style.backgroundColor = '#dc2626';
- break;
- case 'warning':
- notification.style.backgroundColor = '#d97706';
- break;
- default:
- notification.style.backgroundColor = '#3b82f6';
- }
-
- document.body.appendChild(notification);
-
- // 3秒后自动消失
- setTimeout(() => {
- notification.style.opacity = '0';
- setTimeout(() => {
- document.body.removeChild(notification);
- }, 300);
- }, 3000);
-}
-
-// 等级明细设置功能
-function showLevelDetail(shopName) {
- showNotification(`正在设置 ${shopName} 的等级明细`, 'info');
- console.log('设置等级明细:', shopName);
-}
-
-// 添加表格行的点击事件
-document.addEventListener('DOMContentLoaded', function() {
- const levelDetailButtons = document.querySelectorAll('button');
- levelDetailButtons.forEach(button => {
- if (button.textContent.includes('设置等级明细')) {
- button.addEventListener('click', function() {
- const row = this.closest('tr');
- const shopName = row.querySelector('td').textContent;
- showLevelDetail(shopName);
- });
- }
- });
-});
-
-// 键盘快捷键支持
-document.addEventListener('keydown', function(e) {
- // ESC键回到首页
- if (e.key === 'Escape') {
- showDefaultContent();
- }
-
- // Ctrl+F 聚焦搜索框
- if (e.ctrlKey && e.key === 'f') {
- e.preventDefault();
- const searchInput = document.querySelector('input[placeholder*="搜索"]');
- if (searchInput) {
- searchInput.focus();
- }
- }
-});
-
-// 窗口大小变化时的响应式处理
-window.addEventListener('resize', function() {
- const sidebar = document.querySelector('aside');
- if (window.innerWidth < 768 && sidebar) {
- console.log('切换到移动端布局');
- // 可以在这里添加移动端特定的逻辑
- }
-});
-
-// 导出一些全局函数供HTML调用
-window.toggleMenu = toggleMenu;
-window.showLevelSettings = showLevelSettings;
-window.showDefaultContent = showDefaultContent;
-window.toggleSwitch = toggleSwitch;
-window.showLevelDetail = showLevelDetail;
\ No newline at end of file
diff --git a/web/merchant/images/placeholder-logo.png b/web/merchant/images/placeholder-logo.png
deleted file mode 100644
index 8a792ac..0000000
Binary files a/web/merchant/images/placeholder-logo.png and /dev/null differ
diff --git a/web/merchant/images/placeholder-logo.svg b/web/merchant/images/placeholder-logo.svg
deleted file mode 100644
index b1695aa..0000000
--- a/web/merchant/images/placeholder-logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/merchant/images/placeholder-user.jpg b/web/merchant/images/placeholder-user.jpg
deleted file mode 100644
index 6fa7543..0000000
Binary files a/web/merchant/images/placeholder-user.jpg and /dev/null differ
diff --git a/web/merchant/images/placeholder.jpg b/web/merchant/images/placeholder.jpg
deleted file mode 100644
index 6bfe963..0000000
Binary files a/web/merchant/images/placeholder.jpg and /dev/null differ
diff --git a/web/merchant/images/placeholder.svg b/web/merchant/images/placeholder.svg
deleted file mode 100644
index e763910..0000000
--- a/web/merchant/images/placeholder.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/web/merchant/index.html b/web/merchant/index.html
index 3662d1a..1502751 100644
--- a/web/merchant/index.html
+++ b/web/merchant/index.html
@@ -3,199 +3,49 @@
- 大数集市商户端
-
+ 信息管理系统
+
-