#
zhou zhou
7 天以前 5fcfb6cf095d5641153688008ee5f88e3d2a737b
#
2个文件已添加
9个文件已修改
890 ■■■■ 已修改文件
locale/en.json 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/ja.json 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/uni-app.ja.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/zh-Hans.json 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/zh-Hant.json 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/InManagement/ContainerBinding/Container_Binding.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/mat/matSelected.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
unflatten.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
update_locales.js 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/en.json
@@ -1,59 +1,126 @@
{
  "app.name": "ZoneYung WMS",
  "locale.auto": "System",
  "locale.en": "English",
  "locale.zh-hans": "简体中文",
  "locale.zh-hant": "繁体中文",
  "locale.ja": "日语",
  "index.title": "Hello i18n",
  "page.login":"Login",
  "page.index":"Index",
  "login":{
      "login": "login",
      "loging": "loging",
      "user": "username",
      "pwd": "password",
      "inputUser": "Please enter your account",
      "inputPwd":"Please enter your password",
    "remPwd":"remember password"
  "app": {
    "name": "ZoneYung WMS"
  },
  "index":{
      "GR": "Goods Receipt",
      "palletizing": "Palletizing",
    "palletBuilding":"Pallet Building",
    "inspectionRequest":"Inspection Request",
    "qualityInspection":"Quality Inspection",
    "defectiveMarking":"Defective Marking",
    "manualPutaway":"Manual Putaway",
    "stationBinding":"Station Binding",
    "inboundInitiation":"Inbound Initiation",
    "stationUnbinding":"Station Unbinding",
    "bindAndInbound":"Binding And Inbound",
    "quickPicking":"Quick Picking",
    "wavePick":"Wave Picking",
    "outLogin":"Login Out",
    "language-change-confirm":"chenge",
    "hello":"Hello, welcome to log in to the WMS system!",
    "intro":"Make manufacturing and logistics more efficient",
    "checkOrder":"checkOrder"
  "locale": {
    "auto": "System",
    "en": "English",
    "zh-hans": "简体中文",
    "zh-hant": "繁体中文",
    "ja": "日语"
  },
  "other":{
  "index": {
    "title": "Hello i18n",
    "GR": "Goods Receipt",
    "palletizing": "Palletizing",
    "palletBuilding": "Pallet Building",
    "inspectionRequest": "Inspection Request",
    "qualityInspection": "Quality Inspection",
    "defectiveMarking": "Defective Marking",
    "manualPutaway": "Manual Putaway",
    "stationBinding": "Station Binding",
    "inboundInitiation": "Inbound Initiation",
    "stationUnbinding": "Station Unbinding",
    "bindAndInbound": "Binding And Inbound",
    "quickPicking": "Quick Picking",
    "wavePick": "Wave Picking",
    "outLogin": "Login Out",
    "language-change-confirm": "chenge",
    "hello": "Hello, welcome to log in to the WMS system!",
    "intro": "Make manufacturing and logistics more efficient",
    "checkOrder": "checkOrder",
    "workplace": "Zoneyung Workspace",
    "welcomeBack": "Welcome Back",
    "systemName": "Zoneyung AS/RS WMS System",
    "pakin": "Palletizing",
    "orderPakin": "Order Inbound",
    "agv_start": "AGV Container Inbound",
    "agv_back": "AGV Container Return",
    "stockQuery": "Stock Query",
    "logOut": "Logout",
    "copyright": "Copyright © 2022 Zhejiang Zoneyung AS/RS Co., Ltd. All rights reserved.",
    "noAuth": "No permissions or login expired"
  },
  "page": {
    "login": "Login",
    "index": "Index"
  },
  "login": {
    "login": "login",
    "loging": "loging",
    "user": "username",
    "pwd": "password",
    "inputUser": "Please enter your account",
    "inputPwd": "Please enter your password",
    "remPwd": "remember password"
  },
  "other": {},
  "settings": {
      "title": "Settings",
      "ip": "IP Address",
      "port": "Port",
      "project": "Project Name",
      "saved": "Settings Saved",
      "authTitle": "Authentication",
      "inputAuthPwd": "Enter Admin Password",
      "authError": "Incorrect Password"
    "title": "Settings",
    "ip": "IP Address",
    "port": "Port",
    "project": "Project Name",
    "saved": "Settings Saved",
    "authTitle": "Authentication",
    "inputAuthPwd": "Enter Admin Password",
    "authError": "Incorrect Password"
  },
  "common": {
      "confirm": "Confirm",
      "cancel": "Cancel"
    "confirm": "Confirm",
    "cancel": "Cancel"
  },
  "category": {
    "inbound": "Inbound Management",
    "agv": "AGV Management",
    "stock": "Stock Management",
    "other": "Other Operations"
  },
  "container": {
    "title": "Palletizing",
    "palletCode": "Pallet Code",
    "matCode": "Material Code",
    "scanPallet": "Scan / Enter Pallet Code",
    "scanMat": "Scan / Enter Material Code",
    "matList": "Material List",
    "matName": "Name",
    "matSpec": "Spec",
    "matBatch": "Batch",
    "matQty": "Quantity",
    "modify": "Modify",
    "remove": "Remove",
    "reset": "Reset",
    "confirmComb": "Confirm Combin.",
    "emptyList": "No materials, please scan material code to add",
    "modifyInfo": "Modify Info",
    "code": "Code",
    "confirmRemove": "Confirm Remove",
    "removeMsg": "Remove this material?",
    "confirmReset": "Confirm Reset",
    "resetMsg": "Clear all materials?",
    "combMsg": "Confirm to palletize and inbound?"
  },
  "toast": {
    "palletError": "Pallet code error, please try again",
    "queryFail": "Query failed",
    "modifySuccess": "Modification successful",
    "removeSuccess": "Removal successful",
    "scanPalletCode": "Please scan pallet code",
    "qtyNotZero": "Palletizing quantity cannot be 0",
    "qtyNotZeroMat": "{0} palletizing quantity cannot be 0",
    "combSuccess": "Palletizing successful",
    "combFail": "Palletizing failed",
    "resetComplete": "Reset complete",
    "inputQty": "Please enter quantity"
  },
  "matSelected": {
    "title": "Material Info",
    "matDetail": "Material Details",
    "matCode": "Material Code",
    "matName": "Material Name",
    "spec": "Spec",
    "batch": "Batch",
    "inputBatch": "Please enter batch",
    "qty": "Quantity",
    "confirmExtract": "Confirm Extract"
  }
}
}
locale/ja.json
@@ -1,23 +1,96 @@
{
  "locale.auto": "システム",
  "locale.en": "英語",
  "locale.zh-hans": "简体中文",
  "locale.zh-hant": "繁体中文",
  "locale.ja": "日语",
  "index.title": "Hello i18n",
  "index.home": "ホーム",
  "index.component": "コンポーネント",
  "index.api": "API",
  "index.schema": "Schema",
  "index.demo": "uni-app globalization",
  "index.demo-description": "ユニフレームワーク、manifest.json、pages.json、タブバー、ページ、コンポーネント、APIを含める、Schema",
  "index.detail": "詳細",
  "index.language": "言語",
  "index.language-info": "設定",
  "index.system-language": "システム言語",
  "index.application-language": "アプリケーション言語",
  "index.language-change-confirm": "この設定を適用すると、アプリが再起動します",
  "api.message": "メッセージ",
  "schema.add": "追加",
  "schema.add-success": "成功を追加"
}
  "locale": {
    "auto": "システム",
    "en": "英語",
    "zh-hans": "简体中文",
    "zh-hant": "繁体中文",
    "ja": "日语"
  },
  "index": {
    "title": "Hello i18n",
    "home": "ホーム",
    "component": "コンポーネント",
    "api": "API",
    "schema": "Schema",
    "demo": "uni-app globalization",
    "demo-description": "ユニフレームワーク、manifest.json、pages.json、タブバー、ページ、コンポーネント、APIを含める、Schema",
    "detail": "詳細",
    "language": "言語",
    "language-info": "設定",
    "system-language": "システム言語",
    "application-language": "アプリケーション言語",
    "language-change-confirm": "この設定を適用すると、アプリが再起動します",
    "workplace": "Zoneyung 工作台",
    "welcomeBack": "欢迎回来",
    "systemName": "中扬立库 WMS 仓储管理系统",
    "pakin": "组托",
    "orderPakin": "订单入库",
    "agv_start": "AGV容器入库",
    "agv_back": "AGV容器回库",
    "stockQuery": "库存查询",
    "logOut": "退出登录",
    "copyright": "copyright © 2022 浙江中扬立库有限公司 all rights reserved.",
    "noAuth": "无权限或登录过期"
  },
  "api": {
    "message": "メッセージ"
  },
  "schema": {
    "add": "追加",
    "add-success": "成功を追加"
  },
  "category": {
    "inbound": "入库管理",
    "agv": "AGV管理",
    "stock": "库存管理",
    "other": "其他操作"
  },
  "container": {
    "title": "组托",
    "palletCode": "托盘码",
    "matCode": "物料码",
    "scanPallet": "扫码 / 输入托盘码",
    "scanMat": "扫码 / 输入物料码",
    "matList": "商品列表",
    "matName": "品名",
    "matSpec": "规格",
    "matBatch": "批号",
    "matQty": "数量",
    "modify": "修改",
    "remove": "移除",
    "reset": "重置",
    "confirmComb": "确认组托",
    "emptyList": "暂无商品,请扫描物料码添加",
    "modifyInfo": "修改信息",
    "code": "编码",
    "confirmRemove": "确认移除",
    "removeMsg": "是否移除该商品?",
    "confirmReset": "确认重置",
    "resetMsg": "是否清空所有商品?",
    "combMsg": "确认将商品组托入库?"
  },
  "toast": {
    "palletError": "托盘码有误请重试",
    "queryFail": "查询失败",
    "modifySuccess": "修改成功",
    "removeSuccess": "移除成功",
    "scanPalletCode": "请扫描托盘条码",
    "qtyNotZero": "组托数量不能为0",
    "qtyNotZeroMat": "{0}组托数量不能为0",
    "combSuccess": "组托成功",
    "combFail": "组托失败",
    "resetComplete": "重置完成",
    "inputQty": "请输入数量"
  },
  "matSelected": {
    "title": "商品信息",
    "matDetail": "物料详情",
    "matCode": "商品编码",
    "matName": "商品名称",
    "spec": "规格",
    "batch": "批号",
    "inputBatch": "请输入批号",
    "qty": "数量",
    "confirmExtract": "确认提取"
  }
}
locale/uni-app.ja.json
@@ -33,4 +33,4 @@
  },
  "ios": {},
  "android": {}
}
}
locale/zh-Hans.json
@@ -1,61 +1,129 @@
{
    "app.name": "中扬 WMS",
    "locale.auto": "系统",
    "locale.en": "English",
    "locale.zh-hans": "简体中文",
    "locale.zh-hant": "繁体中文",
    "locale.ja": "日语",
    "index.title": "Hello i18n",
    "index.home": "主页",
    "page.login":"登录",
    "page.index":"首页",
    "login":{
        "login": "登录",
        "loging": "登录中",
        "user": "账号",
        "pwd": "密码",
        "inputUser": "请输入账号",
        "inputPwd":"请输入密码",
        "remPwd":"记住密码"
    },
    "index":{
        "GR": "单据收货",
        "palletizing": "单据组托",
        "palletBuilding":"组托解绑",
        "inspectionRequest":"报检",
        "qualityInspection":"质检",
        "defectiveMarking":"不良标记",
        "manualPutaway":"人工上架",
        "stationBinding":"站点绑定",
        "inboundInitiation":"启动入库",
        "stationUnbinding":"站点解绑",
        "bindAndInbound":"绑定&入库",
        "quickPicking":"快速拣货",
        "wavePick":"波次拣货",
        "outLogin":"退出登录",
        "language-change-confirm":"确定切换?",
        "hello":"您好,欢迎登录WMS系统!",
        "intro":"让制造与物流更高效",
        "checkOrder":"盘点"
    },
    "other":{
        "asnNo":"ASN单号"
    },
    "settings": {
        "title": "设置",
        "ip": "IP地址",
        "port": "端口",
        "project": "项目名",
        "saved": "设置已保存",
        "authTitle": "身份验证",
        "inputAuthPwd": "请输入管理员密码",
        "authError": "密码错误"
    },
    "common": {
        "confirm": "确认",
        "cancel": "取消"
    }
}
  "app": {
    "name": "中扬 WMS"
  },
  "locale": {
    "auto": "系统",
    "en": "English",
    "zh-hans": "简体中文",
    "zh-hant": "繁体中文",
    "ja": "日语"
  },
  "index": {
    "title": "Hello i18n",
    "home": "主页",
    "GR": "单据收货",
    "palletizing": "单据组托",
    "palletBuilding": "组托解绑",
    "inspectionRequest": "报检",
    "qualityInspection": "质检",
    "defectiveMarking": "不良标记",
    "manualPutaway": "人工上架",
    "stationBinding": "站点绑定",
    "inboundInitiation": "启动入库",
    "stationUnbinding": "站点解绑",
    "bindAndInbound": "绑定&入库",
    "quickPicking": "快速拣货",
    "wavePick": "波次拣货",
    "outLogin": "退出登录",
    "language-change-confirm": "确定切换?",
    "hello": "您好,欢迎登录WMS系统!",
    "intro": "让制造与物流更高效",
    "checkOrder": "盘点",
    "workplace": "Zoneyung 工作台",
    "welcomeBack": "欢迎回来",
    "systemName": "中扬立库 WMS 仓储管理系统",
    "pakin": "组托",
    "orderPakin": "订单入库",
    "agv_start": "AGV容器入库",
    "agv_back": "AGV容器回库",
    "stockQuery": "库存查询",
    "logOut": "退出登录",
    "copyright": "copyright © 2022 浙江中扬立库有限公司 all rights reserved.",
    "noAuth": "无权限或登录过期"
  },
  "page": {
    "login": "登录",
    "index": "首页"
  },
  "login": {
    "login": "登录",
    "loging": "登录中",
    "user": "账号",
    "pwd": "密码",
    "inputUser": "请输入账号",
    "inputPwd": "请输入密码",
    "remPwd": "记住密码"
  },
  "other": {
    "asnNo": "ASN单号"
  },
  "settings": {
    "title": "设置",
    "ip": "IP地址",
    "port": "端口",
    "project": "项目名",
    "saved": "设置已保存",
    "authTitle": "身份验证",
    "inputAuthPwd": "请输入管理员密码",
    "authError": "密码错误"
  },
  "common": {
    "confirm": "确认",
    "cancel": "取消"
  },
  "category": {
    "inbound": "入库管理",
    "agv": "AGV管理",
    "stock": "库存管理",
    "other": "其他操作"
  },
  "container": {
    "title": "组托",
    "palletCode": "托盘码",
    "matCode": "物料码",
    "scanPallet": "扫码 / 输入托盘码",
    "scanMat": "扫码 / 输入物料码",
    "matList": "商品列表",
    "matName": "品名",
    "matSpec": "规格",
    "matBatch": "批号",
    "matQty": "数量",
    "modify": "修改",
    "remove": "移除",
    "reset": "重置",
    "confirmComb": "确认组托",
    "emptyList": "暂无商品,请扫描物料码添加",
    "modifyInfo": "修改信息",
    "code": "编码",
    "confirmRemove": "确认移除",
    "removeMsg": "是否移除该商品?",
    "confirmReset": "确认重置",
    "resetMsg": "是否清空所有商品?",
    "combMsg": "确认将商品组托入库?"
  },
  "toast": {
    "palletError": "托盘码有误请重试",
    "queryFail": "查询失败",
    "modifySuccess": "修改成功",
    "removeSuccess": "移除成功",
    "scanPalletCode": "请扫描托盘条码",
    "qtyNotZero": "组托数量不能为0",
    "qtyNotZeroMat": "{0}组托数量不能为0",
    "combSuccess": "组托成功",
    "combFail": "组托失败",
    "resetComplete": "重置完成",
    "inputQty": "请输入数量"
  },
  "matSelected": {
    "title": "商品信息",
    "matDetail": "物料详情",
    "matCode": "商品编码",
    "matName": "商品名称",
    "spec": "规格",
    "batch": "批号",
    "inputBatch": "请输入批号",
    "qty": "数量",
    "confirmExtract": "确认提取"
  }
}
locale/zh-Hant.json
@@ -1,10 +1,81 @@
{
  "locale.auto": "系統",
  "locale.en": "English",
  "locale.zh-hans": "简体中文",
  "locale.zh-hant": "繁體中文",
  "locale.ja": "日语",
  "index.title": "Hello i18n",
  "index.home": "主頁",
  "login.login": "登录"
}
  "locale": {
    "auto": "系統",
    "en": "English",
    "zh-hans": "简体中文",
    "zh-hant": "繁體中文",
    "ja": "日语"
  },
  "index": {
    "title": "Hello i18n",
    "home": "主頁",
    "workplace": "Zoneyung 工作台",
    "welcomeBack": "欢迎回来",
    "systemName": "中扬立库 WMS 仓储管理系统",
    "pakin": "组托",
    "orderPakin": "订单入库",
    "agv_start": "AGV容器入库",
    "agv_back": "AGV容器回库",
    "stockQuery": "库存查询",
    "logOut": "退出登录",
    "copyright": "copyright © 2022 浙江中扬立库有限公司 all rights reserved.",
    "noAuth": "无权限或登录过期"
  },
  "login": {
    "login": "登录"
  },
  "category": {
    "inbound": "入库管理",
    "agv": "AGV管理",
    "stock": "库存管理",
    "other": "其他操作"
  },
  "container": {
    "title": "组托",
    "palletCode": "托盘码",
    "matCode": "物料码",
    "scanPallet": "扫码 / 输入托盘码",
    "scanMat": "扫码 / 输入物料码",
    "matList": "商品列表",
    "matName": "品名",
    "matSpec": "规格",
    "matBatch": "批号",
    "matQty": "数量",
    "modify": "修改",
    "remove": "移除",
    "reset": "重置",
    "confirmComb": "确认组托",
    "emptyList": "暂无商品,请扫描物料码添加",
    "modifyInfo": "修改信息",
    "code": "编码",
    "confirmRemove": "确认移除",
    "removeMsg": "是否移除该商品?",
    "confirmReset": "确认重置",
    "resetMsg": "是否清空所有商品?",
    "combMsg": "确认将商品组托入库?"
  },
  "toast": {
    "palletError": "托盘码有误请重试",
    "queryFail": "查询失败",
    "modifySuccess": "修改成功",
    "removeSuccess": "移除成功",
    "scanPalletCode": "请扫描托盘条码",
    "qtyNotZero": "组托数量不能为0",
    "qtyNotZeroMat": "{0}组托数量不能为0",
    "combSuccess": "组托成功",
    "combFail": "组托失败",
    "resetComplete": "重置完成",
    "inputQty": "请输入数量"
  },
  "matSelected": {
    "title": "商品信息",
    "matDetail": "物料详情",
    "matCode": "商品编码",
    "matName": "商品名称",
    "spec": "规格",
    "batch": "批号",
    "inputBatch": "请输入批号",
    "qty": "数量",
    "confirmExtract": "确认提取"
  }
}
pages.json
@@ -10,21 +10,21 @@
        {
            "path": "pages/home/home",
            "style": {
                "navigationBarTitleText": "首页",
                "navigationBarTitleText": "%index.home%",
                "navigationStyle": "custom"
            }
        },
        {
            "path": "pages/InManagement/ContainerBinding/Container_Binding",
            "style": {
                "navigationBarTitleText": "容器绑定",
                "navigationBarTitleText": "%container.title%",
                "navigationStyle": "custom"
            }
        },
        {
            "path": "pages/mat/matSelected",
            "style": {
                "navigationBarTitleText": "物料编辑",
                "navigationBarTitleText": "%matSelected.title%",
                "navigationStyle": "custom"
            }
        },
pages/InManagement/ContainerBinding/Container_Binding.vue
@@ -2,7 +2,7 @@
    <view class="page-container">
        <!-- 头部导航 -->
        <u-navbar
            title="组托"
            :title="$t('container.title')"
            :fixed="true"
            :placeholder="true"
            bgColor="#ffffff"
@@ -25,13 +25,13 @@
                                    color="#409eff"
                                    customStyle="margin-right: 10rpx;"
                                ></u-icon>
                                <text class="label-text">托盘码</text>
                                <text class="label-text">{{ $t('container.palletCode') }}</text>
                            </view>
                        </template>
                        <view class="input-wrap">
                            <u--input
                                v-model="barcode"
                                placeholder="扫码 / 输入托盘码"
                                :placeholder="$t('container.scanPallet')"
                                clearable
                                border="none"
                                :focus="barcodeFocus"
@@ -47,13 +47,13 @@
                                    color="#409eff"
                                    customStyle="margin-right: 10rpx;"
                                ></u-icon>
                                <text class="label-text">物料码</text>
                                <text class="label-text">{{ $t('container.matCode') }}</text>
                            </view>
                        </template>
                        <view class="input-wrap">
                            <u--input
                                v-model="matnr"
                                placeholder="扫码 / 输入物料码"
                                :placeholder="$t('container.scanMat')"
                                clearable
                                border="none"
                                :focus="matFocus"
@@ -70,7 +70,7 @@
            <view class="list-header">
                <view class="title-indicator"></view>
                <text class="header-title">
                    商品列表 ({{ dataList.length }})
                    {{ $t('container.matList') }} ({{ dataList.length }})
                </text>
            </view>
@@ -87,20 +87,20 @@
                    <view class="card-content">
                        <view class="info-row">
                            <text class="info-label">品名</text>
                            <text class="info-label">{{ $t('container.matName') }}</text>
                            <text class="info-value">
                                {{ item.maktx || '-' }}
                            </text>
                        </view>
                        <view class="info-row">
                            <view class="info-col">
                                <text class="info-label">规格</text>
                                <text class="info-label">{{ $t('container.matSpec') }}</text>
                                <text class="info-value">
                                    {{ item.specs || '-' }}
                                </text>
                            </view>
                            <view class="info-col">
                                <text class="info-label">批号</text>
                                <text class="info-label">{{ $t('container.matBatch') }}</text>
                                <text class="info-value highlight">
                                    {{ item.batch || '-' }}
                                </text>
@@ -108,7 +108,7 @@
                        </view>
                        <view class="info-row">
                            <view class="info-col">
                                <text class="info-label">数量</text>
                                <text class="info-label">{{ $t('container.matQty') }}</text>
                                <text class="info-value qty">
                                    {{ item.anfme }}
                                </text>
@@ -121,7 +121,7 @@
                            type="primary"
                            size="small"
                            plain
                            text="修改"
                            :text="$t('container.modify')"
                            @click="revise(item, i)"
                            customStyle="width: 140rpx; margin: 0;"
                        ></u-button>
@@ -130,7 +130,7 @@
                            type="error"
                            size="small"
                            plain
                            text="移除"
                            :text="$t('container.remove')"
                            @click="remove(item, i)"
                            customStyle="width: 140rpx; margin: 0;"
                        ></u-button>
@@ -140,7 +140,7 @@
                <u-empty
                    v-if="dataList.length === 0"
                    mode="list"
                    text="暂无商品,请扫描物料码添加"
                    :text="$t('container.emptyList')"
                    marginTop="40"
                ></u-empty>
            </view>
@@ -151,7 +151,7 @@
            <view class="btn-wrap">
                <u-button
                    type="info"
                    text="重置"
                    :text="$t('container.reset')"
                    @click="resetConfirmBtn"
                ></u-button>
            </view>
@@ -161,7 +161,7 @@
            >
                <u-button
                    type="primary"
                    text="确认组托"
                    :text="$t('container.confirmComb')"
                    @click="combConfirmBtn"
                    :disabled="dataList.length === 0"
                    :throttleTime="1500"
@@ -177,23 +177,23 @@
            @close="showRevise = false"
        >
            <view class="popup-card">
                <view class="popup-header"><text>修改信息</text></view>
                <view class="popup-header"><text>{{ $t('container.modifyInfo') }}</text></view>
                <view class="popup-body">
                    <u--form
                        labelWidth="80"
                        labelPosition="left"
                    >
                        <u-form-item label="编码">
                        <u-form-item :label="$t('container.code')">
                            <text class="popup-text-val">{{ editMatnr }}</text>
                        </u-form-item>
                        <u-form-item label="批号">
                        <u-form-item :label="$t('container.matBatch')">
                            <u--input
                                v-model="batch"
                                placeholder="输入批号"
                                :placeholder="$t('matSelected.inputBatch')"
                                border="surround"
                            ></u--input>
                        </u-form-item>
                        <u-form-item label="数量">
                        <u-form-item :label="$t('container.matQty')">
                            <u-number-box
                                v-model="count"
                                :step="0.01"
@@ -205,13 +205,13 @@
                </view>
                <view class="popup-footer">
                    <u-button
                        text="取消"
                        :text="$t('common.cancel')"
                        @click="showRevise = false"
                        customStyle="margin-right: 20rpx; flex: 1;"
                    ></u-button>
                    <u-button
                        type="primary"
                        text="确认"
                        :text="$t('common.confirm')"
                        @click="reviseConfirm"
                        customStyle="flex: 1;"
                    ></u-button>
@@ -222,24 +222,24 @@
        <!-- 模态框 -->
        <u-modal
            :show="showRemove"
            title="确认移除"
            content="是否移除该商品?"
            :title="$t('container.confirmRemove')"
            :content="$t('container.removeMsg')"
            showCancelButton
            @confirm="removeConfirm"
            @cancel="showRemove = false"
        ></u-modal>
        <u-modal
            :show="showComb"
            title="确认组托"
            content="确认将商品组托入库?"
            :title="$t('container.confirmComb')"
            :content="$t('container.combMsg')"
            showCancelButton
            @confirm="comb"
            @cancel="showComb = false"
        ></u-modal>
        <u-modal
            :show="showReset"
            title="确认重置"
            content="是否清空所有商品?"
            :title="$t('container.confirmReset')"
            :content="$t('container.resetMsg')"
            showCancelButton
            @confirm="resetConfirm"
            @cancel="showReset = false"
@@ -281,7 +281,7 @@
                if (len > 0 && len !== 8 && len !== 9) {
                    this.$showToast({
                        type: 'error',
                        message: '托盘码有误请重试'
                        message: this.$t('toast.palletError')
                    })
                    this.barcodeFocuss()
                    return
@@ -339,7 +339,7 @@
                    if (!data && data !== null) {
                        this.$showToast({
                            type: 'error',
                            message: msg || '查询失败'
                            message: msg || this.$t('toast.queryFail')
                        })
                    }
                }
@@ -392,7 +392,7 @@
            this.dataList[this.rowNum].batch = this.batch
            this.dataList[this.rowNum].weight = this.weight
            this.editMatnr = ''
            this.$showToast({ type: 'success', message: '修改成功' })
            this.$showToast({ type: 'success', message: this.$t('toast.modifySuccess') })
            this.showRevise = false
        },
        remove(item, i) {
@@ -401,7 +401,7 @@
        },
        removeConfirm() {
            this.dataList.splice(this.removeNum, 1)
            this.$showToast({ type: 'success', message: '移除成功' })
            this.$showToast({ type: 'success', message: this.$t('toast.removeSuccess') })
            this.showRemove = false
        },
        combConfirmBtn() {
@@ -410,7 +410,7 @@
        },
        async comb() {
            if (this.barcode === '') {
                this.$showToast({ type: 'error', message: '请扫描托盘条码' })
                this.$showToast({ type: 'error', message: this.$t('toast.scanPalletCode') })
                this.showComb = false
                return
            }
@@ -421,7 +421,7 @@
                ) {
                    this.$showToast({
                        type: 'error',
                        message: this.dataList[i].matnr + '组托数量不能为0'
                        message: this.$t('toast.qtyNotZeroMat').replace('{0}', this.dataList[i].matnr)
                    })
                    this.showComb = false
                    return
@@ -442,7 +442,7 @@
                if (code === 200) {
                    this.resst()
                    this.$showToast({ type: 'success', message: '组托成功' })
                    this.$showToast({ type: 'success', message: this.$t('toast.combSuccess') })
                } else if (code === 403) {
                    this.$showToast({ type: 'error', message: msg })
                    setTimeout(() => {
@@ -451,7 +451,7 @@
                } else {
                    this.$showToast({
                        type: 'error',
                        message: msg || '组托失败'
                        message: msg || this.$t('toast.combFail')
                    })
                }
            } catch (err) {
@@ -464,7 +464,7 @@
        resetConfirm() {
            this.dataList = []
            this.barcode = ''
            this.$showToast({ type: 'success', message: '重置完成' })
            this.$showToast({ type: 'success', message: this.$t('toast.resetComplete') })
            this.showReset = false
        },
        resst() {
pages/home/home.vue
@@ -2,7 +2,7 @@
    <view class="page-container">
        <!-- 头部导航 -->
        <u-navbar
            title="Zoneyung 工作台"
            :title="$t('index.workplace')"
            :fixed="true"
            :placeholder="true"
            bgColor="#ffffff"
@@ -13,8 +13,8 @@
        <!-- 欢迎信息 / 用户信息 -->
        <view class="welcome-box">
            <view class="welcome-info">
                <text class="greeting">欢迎回来</text>
                <text class="date-text">中扬立库 WMS 仓储管理系统</text>
                <text class="greeting">{{ $t('index.welcomeBack') }}</text>
                <text class="date-text">{{ $t('index.systemName') }}</text>
            </view>
            <view class="welcome-avatar">
                <!-- 可替换为真实头像 -->
@@ -99,7 +99,7 @@
                    <view class="category-header">
                        <view class="category-title-wrapper">
                            <view class="title-indicator"></view>
                            <text class="category-title">其他操作</text>
                            <text class="category-title">{{ $t('category.other') }}</text>
                        </view>
                    </view>
                    <view class="category-body">
@@ -169,7 +169,7 @@
        <!-- 底部版权 -->
        <view class="footer">
            <text class="footer-text">
                copyright © 2022 浙江中扬立库有限公司 all rights reserved.
                {{ $t('index.copyright') }}
            </text>
        </view>
        <u-toast ref="uToast"></u-toast>
@@ -191,42 +191,42 @@
            // 默认菜单数据(用于后端无返回时)
            elements2: [
                {
                    title: '组托',
                    title: this.$t('index.pakin'),
                    name: 'pakin',
                    color: 'cyan',
                    cuIcon: 'pullup',
                    url: '/InManagement/ContainerBinding/Container_Binding'
                },
                {
                    title: '订单入库',
                    title: this.$t('index.orderPakin'),
                    name: 'orderPakin',
                    color: 'purple',
                    cuIcon: '',
                    url: '/order/orderList'
                },
                {
                    title: 'AGV容器入库',
                    title: this.$t('index.agv_start'),
                    name: 'agv_start',
                    color: 'blue',
                    cuIcon: '',
                    url: '/AGV/agv_start'
                },
                {
                    title: 'AGV容器回库',
                    title: this.$t('index.agv_back'),
                    name: 'agv_back',
                    color: 'orange',
                    cuIcon: '',
                    url: '/AGV/agv_back'
                },
                {
                    title: '库存查询',
                    title: this.$t('index.stockQuery'),
                    name: 'stockQuery',
                    color: 'green',
                    cuIcon: '',
                    url: '/stock/stockQuery'
                },
                {
                    title: '退出登录',
                    title: this.$t('index.logOut'),
                    name: 'logOut',
                    color: 'grey',
                    cuIcon: 'exit',
@@ -269,21 +269,21 @@
            categoryConfig: [
                {
                    key: 'pakin_category',
                    name: '入库管理',
                    name: this.$t('category.inbound'),
                    color: 'cyan',
                    icon: 'upload',
                    menuNames: ['pakin', 'orderPakin']
                },
                {
                    key: 'agv_category',
                    name: 'AGV管理',
                    name: this.$t('category.agv'),
                    color: 'blue',
                    icon: 'navigate',
                    menuNames: ['agv_start', 'agv_back']
                },
                {
                    key: 'stock_category',
                    name: '库存管理',
                    name: this.$t('category.stock'),
                    color: 'green',
                    icon: 'search',
                    menuNames: ['stockQuery']
@@ -407,7 +407,7 @@
                }
                this.elements.push({
                    title: '退出登录',
                    title: this.$t('index.logOut'),
                    name: 'logOut',
                    color: 'grey',
                    cuIcon: 'exit',
@@ -425,7 +425,7 @@
                if (errCode === 403) {
                    uni.showToast({
                        title: errMsg || '无权限或登录过期',
                        title: errMsg || this.$t('index.noAuth'),
                        icon: 'none',
                        position: 'top'
                    })
pages/mat/matSelected.vue
@@ -2,7 +2,7 @@
    <view class="page-container">
        <!-- 头部导航 -->
        <u-navbar
            title="商品信息"
            :title="$t('matSelected.title')"
            :fixed="true"
            :placeholder="true"
            bgColor="#ffffff"
@@ -19,7 +19,7 @@
                        size="24"
                        color="#409eff"
                    ></u-icon>
                    <text class="panel-title">物料详情</text>
                    <text class="panel-title">{{ $t('matSelected.matDetail') }}</text>
                </view>
                <u--form
@@ -27,39 +27,39 @@
                    labelWidth="80"
                >
                    <u-form-item
                        label="商品编码"
                        :label="$t('matSelected.matCode')"
                        borderBottom
                    >
                        <text class="value-text code">{{ mat.matnr }}</text>
                    </u-form-item>
                    <u-form-item
                        label="商品名称"
                        :label="$t('matSelected.matName')"
                        borderBottom
                    >
                        <text class="value-text name">{{ mat.maktx }}</text>
                    </u-form-item>
                    <u-form-item
                        label="规格"
                        :label="$t('matSelected.spec')"
                        borderBottom
                    >
                        <text class="value-text">{{ mat.specs || '-' }}</text>
                    </u-form-item>
                    <u-form-item
                        label="批号"
                        :label="$t('matSelected.batch')"
                        borderBottom
                    >
                        <u--input
                            v-model="mat.batch"
                            placeholder="请输入批号"
                            :placeholder="$t('matSelected.inputBatch')"
                            border="none"
                            clearable
                        ></u--input>
                    </u-form-item>
                    <u-form-item label="数量">
                    <u-form-item :label="$t('matSelected.qty')">
                        <u-number-box
                            v-model="mat.anfme"
                            :max="99999999"
@@ -75,7 +75,7 @@
        <view class="bottom-bar">
            <u-button
                type="primary"
                text="确认提取"
                :text="$t('matSelected.confirmExtract')"
                icon="checkbox-mark"
                @click="back"
                customStyle="width: 100%; border-radius: 40rpx;"
@@ -119,7 +119,7 @@
        },
        back() {
            if (this.mat.anfme === 0) {
                this.$showToast({ type: 'error', message: '请输入数量' })
                this.$showToast({ type: 'error', message: this.$t('toast.inputQty') })
                return
            }
            this.getOpenerEventChannel().emit('matList', { data: this.mat })
unflatten.js
New file
@@ -0,0 +1,55 @@
const fs = require('fs');
const path = require('path');
function unflatten(data) {
    const result = {};
    // Sort keys so that base objects are created before properties are added
    const keys = Object.keys(data);
    for (const key of keys) {
        const value = data[key];
        // If it's already an object, merge its keys
        if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
            if (!result[key] || typeof result[key] !== 'object') {
                result[key] = result[key] || {};
            }
            Object.assign(result[key], value);
        } else {
            // Split by dot and nest
            const parts = key.split('.');
            let current = result;
            for (let i = 0; i < parts.length - 1; i++) {
                const part = parts[i];
                if (!current[part] || typeof current[part] !== 'object') {
                    current[part] = {};
                }
                current = current[part];
            }
            current[parts[parts.length - 1]] = value;
        }
    }
    return result;
}
const dir = path.join(__dirname, 'locale');
const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));
files.forEach(file => {
    const filePath = path.join(dir, file);
    let content = fs.readFileSync(filePath, 'utf8');
    let data;
    try {
        data = JSON.parse(content);
    } catch (e) {
        console.log(`Error parsing ${file}`);
        return;
    }
    const nestedData = unflatten(data);
    fs.writeFileSync(filePath, JSON.stringify(nestedData, null, 2), 'utf8');
    console.log(`Updated ${file}`);
});
update_locales.js
New file
@@ -0,0 +1,138 @@
const fs = require('fs');
const zhHans = {
    'index.workplace': 'Zoneyung 工作台',
    'index.welcomeBack': '欢迎回来',
    'index.systemName': '中扬立库 WMS 仓储管理系统',
    'category.inbound': '入库管理',
    'category.agv': 'AGV管理',
    'category.stock': '库存管理',
    'category.other': '其他操作',
    'index.pakin': '组托',
    'index.orderPakin': '订单入库',
    'index.agv_start': 'AGV容器入库',
    'index.agv_back': 'AGV容器回库',
    'index.stockQuery': '库存查询',
    'index.logOut': '退出登录',
    'index.copyright': 'copyright © 2022 浙江中扬立库有限公司 all rights reserved.',
    'index.noAuth': '无权限或登录过期',
    'container.title': '组托',
    'container.palletCode': '托盘码',
    'container.matCode': '物料码',
    'container.scanPallet': '扫码 / 输入托盘码',
    'container.scanMat': '扫码 / 输入物料码',
    'container.matList': '商品列表',
    'container.matName': '品名',
    'container.matSpec': '规格',
    'container.matBatch': '批号',
    'container.matQty': '数量',
    'container.modify': '修改',
    'container.remove': '移除',
    'container.reset': '重置',
    'container.confirmComb': '确认组托',
    'container.emptyList': '暂无商品,请扫描物料码添加',
    'container.modifyInfo': '修改信息',
    'container.code': '编码',
    'container.confirmRemove': '确认移除',
    'container.removeMsg': '是否移除该商品?',
    'container.confirmReset': '确认重置',
    'container.resetMsg': '是否清空所有商品?',
    'container.combMsg': '确认将商品组托入库?',
    'toast.palletError': '托盘码有误请重试',
    'toast.queryFail': '查询失败',
    'toast.modifySuccess': '修改成功',
    'toast.removeSuccess': '移除成功',
    'toast.scanPalletCode': '请扫描托盘条码',
    'toast.qtyNotZero': '组托数量不能为0',
    'toast.qtyNotZeroMat': '{0}组托数量不能为0',
    'toast.combSuccess': '组托成功',
    'toast.combFail': '组托失败',
    'toast.resetComplete': '重置完成',
    'matSelected.title': '商品信息',
    'matSelected.matDetail': '物料详情',
    'matSelected.matCode': '商品编码',
    'matSelected.matName': '商品名称',
    'matSelected.spec': '规格',
    'matSelected.batch': '批号',
    'matSelected.inputBatch': '请输入批号',
    'matSelected.qty': '数量',
    'matSelected.confirmExtract': '确认提取',
    'toast.inputQty': '请输入数量'
};
const en = {
    'index.workplace': 'Zoneyung Workspace',
    'index.welcomeBack': 'Welcome Back',
    'index.systemName': 'Zoneyung AS/RS WMS System',
    'category.inbound': 'Inbound Management',
    'category.agv': 'AGV Management',
    'category.stock': 'Stock Management',
    'category.other': 'Other Operations',
    'index.pakin': 'Palletizing',
    'index.orderPakin': 'Order Inbound',
    'index.agv_start': 'AGV Container Inbound',
    'index.agv_back': 'AGV Container Return',
    'index.stockQuery': 'Stock Query',
    'index.logOut': 'Logout',
    'index.copyright': 'Copyright © 2022 Zhejiang Zoneyung AS/RS Co., Ltd. All rights reserved.',
    'index.noAuth': 'No permissions or login expired',
    'container.title': 'Palletizing',
    'container.palletCode': 'Pallet Code',
    'container.matCode': 'Material Code',
    'container.scanPallet': 'Scan / Enter Pallet Code',
    'container.scanMat': 'Scan / Enter Material Code',
    'container.matList': 'Material List',
    'container.matName': 'Name',
    'container.matSpec': 'Spec',
    'container.matBatch': 'Batch',
    'container.matQty': 'Quantity',
    'container.modify': 'Modify',
    'container.remove': 'Remove',
    'container.reset': 'Reset',
    'container.confirmComb': 'Confirm Combin.',
    'container.emptyList': 'No materials, please scan material code to add',
    'container.modifyInfo': 'Modify Info',
    'container.code': 'Code',
    'container.confirmRemove': 'Confirm Remove',
    'container.removeMsg': 'Remove this material?',
    'container.confirmReset': 'Confirm Reset',
    'container.resetMsg': 'Clear all materials?',
    'container.combMsg': 'Confirm to palletize and inbound?',
    'toast.palletError': 'Pallet code error, please try again',
    'toast.queryFail': 'Query failed',
    'toast.modifySuccess': 'Modification successful',
    'toast.removeSuccess': 'Removal successful',
    'toast.scanPalletCode': 'Please scan pallet code',
    'toast.qtyNotZero': 'Palletizing quantity cannot be 0',
    'toast.qtyNotZeroMat': '{0} palletizing quantity cannot be 0',
    'toast.combSuccess': 'Palletizing successful',
    'toast.combFail': 'Palletizing failed',
    'toast.resetComplete': 'Reset complete',
    'matSelected.title': 'Material Info',
    'matSelected.matDetail': 'Material Details',
    'matSelected.matCode': 'Material Code',
    'matSelected.matName': 'Material Name',
    'matSelected.spec': 'Spec',
    'matSelected.batch': 'Batch',
    'matSelected.inputBatch': 'Please enter batch',
    'matSelected.qty': 'Quantity',
    'matSelected.confirmExtract': 'Confirm Extract',
    'toast.inputQty': 'Please enter quantity'
};
const zhHant = Object.assign({}, zhHans);
const ja = Object.assign({}, zhHans);
const files = [
    { path: 'locale/zh-Hans.json', extract: zhHans },
    { path: 'locale/en.json', extract: en },
    { path: 'locale/zh-Hant.json', extract: zhHant },
    { path: 'locale/ja.json', extract: ja }
];
files.forEach(f => {
    const content = JSON.parse(fs.readFileSync(f.path, 'utf8'));
    Object.assign(content, f.extract);
    fs.writeFileSync(f.path, JSON.stringify(content, null, 2), 'utf8');
});
console.log('Update success');