diff --git a/src/api/production/production-inbound.js b/src/api/production/production-inbound.js new file mode 100644 index 0000000..00334f4 --- /dev/null +++ b/src/api/production/production-inbound.js @@ -0,0 +1,22 @@ +import { createAPI } from "@/utils/httpRequest.js"; + +// 查询处理单元列表 +export const getOrderInfo = data => createAPI(`/production/inbound/getOrderInfo`,'post',data) +// 创建包装箱 +export const createPackage = data => createAPI(`/production/inbound/createPackage`,'post',data) +// 打印箱标签 +export const printPackageLabel = data => createAPI(`/production/inbound/printPackageLabel`,'post',data) +// 装托盘 +export const packToPallet = data => createAPI(`/production/inbound/packToPallet`,'post',data) +// 扫描包装箱获取信息 +export const scanPackage = data => createAPI(`/production/inbound/scanPackage`,'post',data) +// 根据包装编码获取包装信息 +export const getPackageInfo = data => createAPI(`/production/inbound/getPackageInfo`,'post',data) +// 入库登记 +export const inboundRegister = data => createAPI(`/production/inbound/inboundRegister`,'post',data) +// 查询入库记录 +export const getInboundRecords = data => createAPI(`/production/inbound/getInboundRecords`,'post',data) +// 生产订单退库 +export const returnStock = data => createAPI(`/production/inbound/returnStock`,'post',data) +// 扫描单元获取退库信息 +export const scanUnitForReturn = data => createAPI(`/production/inbound/scanUnitForReturn`,'post',data) diff --git a/src/api/sales-return/sales-return.js b/src/api/sales-return/sales-return.js new file mode 100644 index 0000000..44cce88 --- /dev/null +++ b/src/api/sales-return/sales-return.js @@ -0,0 +1,9 @@ +import { createAPI } from "@/utils/httpRequest.js"; + + +// 获取采购单信息 +export const processReturn = data => createAPI(`salesreturn/processReturn`,'post',data) + +// 接收采购单信息 +export const getRmaList = data => createAPI(`salesreturn/getRmaList`,'post',data) + diff --git a/src/i18n/locales/cn.js b/src/i18n/locales/cn.js index 0ff9a57..4b80b92 100644 --- a/src/i18n/locales/cn.js +++ b/src/i18n/locales/cn.js @@ -12,7 +12,8 @@ export default { logout: "退出", locale: "语言", stockIn : "采购入库", - greeting: "{name}!" + greeting: "{name}!", + pdaName:"仓储PDA系统" }, button: { login: "登录" diff --git a/src/i18n/locales/en.js b/src/i18n/locales/en.js index a75a73e..d3a5cf0 100644 --- a/src/i18n/locales/en.js +++ b/src/i18n/locales/en.js @@ -12,7 +12,8 @@ export default { logout: "Logout", locale: "Language", stockIn: "Stock In", - greeting: "{name}!" // 支持动态插值 + greeting: "{name}!" , + pdaName:"Storage PDA System" }, button: { login: "Login" diff --git a/src/router/index.js b/src/router/index.js index 4f313a3..1b361a1 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -39,10 +39,8 @@ const globalRoutes = [ name: 'ProductionIssuePick',component: resolve => require(["@/views/modules/production-issue/pick.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, // 生产入库 - {path: "/productionInbound",name: "productionwhse", component: resolve => require(["@/views/modules/production-inbound/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, - {path: '/production-inbound/receive/:orderNo', - name: 'ProductionIssuePick',component: resolve => require(["@/views/modules/production-inbound/receive.vue"], resolve), - meta: { transition: 'instant' ,preload: true,keepAlive: true}}, + {path: "/productionInbound",name: "productionInbound", component: resolve => require(["@/views/modules/production-inbound/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, + // 委外 {path: "/outsource",name: "outsource", component: resolve => require(["@/views/modules/outsourcing-issue/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, @@ -51,6 +49,8 @@ const globalRoutes = [ // 销售退货 {path: "/salereturn",name: "salereturn", component: resolve => require(["@/views/modules/sales-return/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, + {path: "/salereturn-inbound",name: "salereturn-inbound", component: resolve => require(["@/views/modules/sales-return/sales-return-inbound.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, + {path: "/salereturn-scrap",name: "salereturn-scrap", component: resolve => require(["@/views/modules/sales-return/sales-return-scrap.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, // 其他出入库 {path: "/otherinout",name: "otherinout", component: resolve => require(["@/views/modules/other-transaction/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, diff --git a/src/views/common/login.vue b/src/views/common/login.vue index eac7323..c575498 100644 --- a/src/views/common/login.vue +++ b/src/views/common/login.vue @@ -1,51 +1,69 @@ - + @@ -188,34 +144,43 @@ export default { display: flex; justify-content: center; align-items: center; - background: #f0f2f5; + background: linear-gradient(to right, #e0f7fa, #f1f8e9); + font-family: 'Segoe UI', sans-serif; } .login-card { + position: relative; width: 90%; max-width: 400px; padding: 2rem; background: white; - border-radius: 12px; - box-shadow: 0 4px 20px rgba(0,0,0,0.08); + border-radius: 16px; + box-shadow: 0 6px 24px rgba(0, 0, 0, 0.1); +} + +.lang-switch { + position: absolute; + top: 18px; + right: 20px; +} + +.lang-text { + cursor: pointer; + font-size: 14px; + color: #1890ff; } .logo-area { text-align: center; - margin-bottom: 2rem; + margin-bottom: 1.5rem; } + .logo-area svg { width: 64px; height: 64px; filter: drop-shadow(0 2px 4px rgba(33, 150, 243, 0.3)); } -.logo-icon { - width: 60px; - height: 60px; - fill: #1890ff; -} - h1 { color: #333; font-size: 1.5rem; @@ -224,35 +189,26 @@ h1 { .input-group { position: relative; - margin-bottom: 1.5rem; - border-bottom: 1px solid #ddd; - transition: all 0.3s; + margin-bottom: 1.2rem; + border-bottom: 1px solid #ccc; + transition: all 0.3s ease; } .input-group.focus { border-color: #1890ff; } -.input-group label { - position: absolute; - left: 0; - top: 8px; - color: #999; - transition: all 0.3s; -} - -.input-group.focus label { - top: -18px; - font-size: 12px; - color: #1890ff; -} - .input-group input { width: 100%; - padding: 8px 0; + padding: 10px 0; border: none; outline: none; - font-size: 16px; + font-size: 15px; +} + +.input-group.site-select { + border: none; + padding-top: 8px; } .pwd-toggle { @@ -264,6 +220,7 @@ h1 { border: none; color: #1890ff; font-size: 12px; + cursor: pointer; } .login-btn { @@ -272,19 +229,23 @@ h1 { background: #1890ff; color: white; border: none; - border-radius: 6px; + border-radius: 8px; font-size: 16px; - margin-top: 1rem; + margin-top: 1.2rem; transition: all 0.3s; } +.login-btn:hover { + background: #40a9ff; +} + .login-btn:disabled { - background: #bae7ff; + background: #a0d4ff; } .loading-dots { letter-spacing: 2px; - animation: blink 1.5s infinite; + animation: blink 1.2s infinite; } @keyframes blink { diff --git a/src/views/main.vue b/src/views/main.vue index 910834e..f46efa7 100644 --- a/src/views/main.vue +++ b/src/views/main.vue @@ -12,7 +12,11 @@ -
{{ $t('home.logout') }}
+
+ + {{ $t('home.logout') }} +
+ @@ -140,7 +144,7 @@ export default { flex-direction: column; background: #f5f5f5; font-family: 'Arial', sans-serif; - overflow: auto; + overflow-y: auto; } .status-bar { @@ -157,19 +161,55 @@ export default { } .logout-button { - color: #ffffff; + background: linear-gradient(135deg, #ff4d4f, #ff7875); + color: #fff; font-size: 15px; - padding: 5px 10px; - background: #ff4d4f; - border-radius: 5px; + font-weight: bold; + padding: 6px 16px; + border-radius: 20px; cursor: pointer; - transition: background 0.3s; + box-shadow: 0 2px 6px rgba(255, 77, 79, 0.4); + transition: all 0.3s ease; + display: inline-flex; + align-items: center; + justify-content: center; + height: 44px; /* 保证可点击性 */ } .logout-button:hover { - background: #ff7875; + background: linear-gradient(135deg, #ff7875, #ff9c91); + box-shadow: 0 4px 12px rgba(255, 77, 79, 0.5); + transform: scale(1.05); +} + +.logout-button i { + font-size: 18px; + margin-right: 8px; + display: flex; + align-items: center; } +.logout-text { + display: inline-block; + line-height: 1; +} + +/* === 小屏优化 === */ +@media screen and (max-width: 480px) { + .logout-button { + font-size: 13px; + padding: 4px 12px; + border-radius: 16px; + height: 40px; + } + + .logout-button i { + font-size: 16px; + margin-right: 6px; + } +} + + .menu-grid { display: grid; grid-template-columns: repeat(3, 1fr); diff --git a/src/views/modules/production-inbound/index.vue b/src/views/modules/production-inbound/index.vue index e3dfde1..615268f 100644 --- a/src/views/modules/production-inbound/index.vue +++ b/src/views/modules/production-inbound/index.vue @@ -1,281 +1,1361 @@ \ No newline at end of file + diff --git a/src/views/modules/production-inbound/receive.vue b/src/views/modules/production-inbound/receive.vue deleted file mode 100644 index 0a4ff20..0000000 --- a/src/views/modules/production-inbound/receive.vue +++ /dev/null @@ -1,394 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/modules/sales-return/index.vue b/src/views/modules/sales-return/index.vue index 87d39a5..6262b91 100644 --- a/src/views/modules/sales-return/index.vue +++ b/src/views/modules/sales-return/index.vue @@ -1,266 +1,119 @@ - \ No newline at end of file + diff --git a/src/views/modules/sales-return/sales-return-inbound.vue b/src/views/modules/sales-return/sales-return-inbound.vue new file mode 100644 index 0000000..55baa0d --- /dev/null +++ b/src/views/modules/sales-return/sales-return-inbound.vue @@ -0,0 +1,241 @@ + + + + + diff --git a/src/views/modules/sales-return/sales-return-scrap.vue b/src/views/modules/sales-return/sales-return-scrap.vue new file mode 100644 index 0000000..6cf95d8 --- /dev/null +++ b/src/views/modules/sales-return/sales-return-scrap.vue @@ -0,0 +1,133 @@ + + + + +