diff --git a/apps/jingrow/frontend/src/locales/zh-CN.json b/apps/jingrow/frontend/src/locales/zh-CN.json
index f36ee17..313b065 100644
--- a/apps/jingrow/frontend/src/locales/zh-CN.json
+++ b/apps/jingrow/frontend/src/locales/zh-CN.json
@@ -1136,7 +1136,10 @@
"Please login first to use this feature": "请先登录以使用此功能",
"Session expired. Please login again.": "会话已过期,请重新登录",
"Session expired. Please login again to use this feature.": "会话已过期,请重新登录以使用此功能",
+ "or": "或",
+ "Paste image URL here": "在此处粘贴图片URL",
"Or paste image URL here": "或在此处粘贴图片URL",
+ "Drag and drop your image anywhere, or paste image directly": "拖拽图片到任意位置,或直接粘贴图片",
"Loading image from URL...": "正在从URL加载图片...",
"Please enter an image URL": "请输入图片URL",
"Please enter a valid image URL": "请输入有效的图片URL",
diff --git a/apps/jingrow/frontend/src/views/tools/remove_background/remove_background.vue b/apps/jingrow/frontend/src/views/tools/remove_background/remove_background.vue
index 2f41d9e..7bc47d1 100644
--- a/apps/jingrow/frontend/src/views/tools/remove_background/remove_background.vue
+++ b/apps/jingrow/frontend/src/views/tools/remove_background/remove_background.vue
@@ -47,15 +47,22 @@
v-if="!uploadedImage"
class="upload-area"
:class="{ 'dragging': isDragging }"
- @click="triggerFileInput"
>
-
-
+
+
+
+ {{ t('or') }}
-
{{ t('Upload Image') }}
-
{{ t('Drag and drop your image here, or click to browse') }}
-
{{ t('Supports JPG, PNG, WebP formats') }}
+
+
+
{{ t('Drag and drop your image anywhere, or paste image directly') }}
+
{{ t('Supports JPG, PNG, WebP formats') }}
@@ -903,9 +913,8 @@ const removeHistoryItem = (index: number) => {
justify-content: center;
border: 2px dashed #cbd5e1;
border-radius: 12px;
- padding: 32px;
+ padding: 48px 32px;
text-align: center;
- cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: #fafbfc;
min-height: 0;
@@ -920,7 +929,6 @@ const removeHistoryItem = (index: number) => {
border-color: #1fc76f;
background: #ecfdf5;
border-style: solid;
- transform: scale(1.01);
}
}
@@ -952,49 +960,97 @@ const removeHistoryItem = (index: number) => {
display: flex;
flex-direction: column;
align-items: center;
- gap: 12px;
+ gap: 16px;
+ width: 100%;
+ max-width: 500px;
}
-.upload-icon {
- width: 64px;
- height: 64px;
- border-radius: 16px;
- background: linear-gradient(135deg, #1fc76f 0%, #16a085 100%);
- display: flex;
+.upload-btn {
+ display: inline-flex;
align-items: center;
- justify-content: center;
- margin-bottom: 8px;
- box-shadow: 0 4px 12px rgba(31, 199, 111, 0.25);
+ gap: 12px;
+ padding: 20px 40px;
+ background: #e6f8f0;
+ color: #0d684b;
+ border: 1px solid #1fc76f;
+ border-radius: 8px;
+ font-size: 16px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ white-space: nowrap;
i {
- font-size: 32px;
+ font-size: 16px;
+ }
+
+ &:hover:not(:disabled) {
+ background: #dcfce7;
+ border-color: #1fc76f;
+ color: #166534;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(31, 199, 111, 0.15);
+ }
+
+ &:active:not(:disabled) {
+ background: #1fc76f;
+ border-color: #1fc76f;
color: white;
+ transform: translateY(0);
+ box-shadow: 0 1px 4px rgba(31, 199, 111, 0.2);
+ }
+
+ &:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+ background: #f1f5f9;
+ border-color: #e2e8f0;
+ color: #94a3b8;
+ }
+
+ &:disabled:hover {
+ transform: none;
+ box-shadow: none;
}
}
-.upload-area h3 {
- font-size: 18px;
- font-weight: 600;
- color: #0f172a;
- margin: 0;
-}
-
-.upload-area p {
+.divider {
+ display: flex;
+ align-items: center;
+ color: #94a3b8;
font-size: 13px;
- color: #64748b;
- margin: 0;
+ width: 100%;
+ max-width: 300px;
+
+ &::before,
+ &::after {
+ content: '';
+ flex: 1;
+ height: 1px;
+ background: #e5e7eb;
+ }
+
+ span {
+ padding: 0 12px;
+ }
}
.upload-hint {
+ font-size: 13px;
+ color: #64748b;
+ margin: 0;
+ line-height: 1.5;
+}
+
+.upload-format-hint {
font-size: 12px;
color: #94a3b8;
- margin-top: 4px;
+ margin: 0;
}
.url-input-wrapper {
width: 100%;
max-width: 500px;
- margin-top: 20px;
}
.url-input-container {
@@ -1457,29 +1513,32 @@ const removeHistoryItem = (index: number) => {
}
.upload-area {
- padding: 24px 16px;
+ padding: 32px 16px;
}
- .upload-icon {
- width: 56px;
- height: 56px;
+ .upload-content {
+ gap: 14px;
+ max-width: 100%;
+ }
+
+ .upload-btn {
+ width: 100%;
+ justify-content: center;
+ padding: 18px 32px;
+ font-size: 15px;
i {
- font-size: 28px;
+ font-size: 15px;
}
}
- .upload-area h3 {
- font-size: 16px;
- }
-
- .upload-area p {
- font-size: 12px;
+ .divider {
+ max-width: 100%;
}
.url-input-wrapper {
+ width: 100%;
max-width: 100%;
- margin-top: 16px;
}
.url-input {
@@ -1524,3 +1583,4 @@ const removeHistoryItem = (index: number) => {
}
}
+