Pārlūkot izejas kodu

feat:订单国际化配置

叶静 1 mēnesi atpakaļ
vecāks
revīzija
5aedf11961

+ 13 - 9
src/app/shop/admin/order/order/batchDispatch.vue

@@ -2,20 +2,21 @@
   <el-container>
     <el-main>
       <div class="batch-dispatch sa-m-b-20">
-        <div class="title">导入发货单,系统将自动处理发货信息</div>
+        <div class="title">{{ t('modules.order.systemAutoProcess') }}</div>
         <div class="order-content sa-flex sa-flex-col">
           <div class="sa-flex sa-flex-col">
             <div class="order-file sa-table-line-1 sa-m-b-8">
               <span v-if="state.file">{{ state.file.name }}</span>
             </div>
             <el-upload action :http-request="onImportFile" :show-file-list="false" accept=".xlsx,.xls">
-              <el-button v-if="!state.file">导入发货单</el-button>
-              <el-button class="is-link" type="primary" v-if="state.file">重新选择文件</el-button>
+              <el-button v-if="!state.file">{{ t('modules.order.importDeliveryList') }}</el-button>
+              <el-button class="is-link" type="primary" v-if="state.file">{{ t('modules.order.reSelectFile')
+                }}</el-button>
             </el-upload>
           </div>
           <div class="sa-m-t-22" v-if="state.file">
             <el-button type="primary" @click="onDispatch" :loading="state.loading" :disabled="!state.file">
-              批量发货
+              {{ t('modules.order.batchShip') }}
             </el-button>
           </div>
         </div>
@@ -40,8 +41,11 @@
 </template>
 <script setup>
 import { getCurrentInstance, reactive } from 'vue';
+import { useI18n } from 'vue-i18n';
 import { ElMessage } from 'element-plus';
 import { api } from '../order.service';
+
+const { t } = useI18n();
 const props = defineProps(['modal']);
 const { proxy } = getCurrentInstance();
 
@@ -58,7 +62,7 @@ function onImportFile(file) {
 // 批量发货
 async function onDispatch() {
   if (!state.file) {
-    ElMessage.warning('请先选择发货单文件');
+    ElMessage.warning(t('modules.order.pleaseSelectDeliveryFile'));
     return;
   }
 
@@ -78,11 +82,11 @@ async function onDispatch() {
       const text = await response.data.text();
       const result = JSON.parse(text);
       if (result.code == 200) {
-        ElMessage.success('批量发货成功');
+        ElMessage.success(t('modules.order.batchShipSuccess'));
         // 关闭弹窗并触发刷新
         proxy.$emit('modalCallBack', { action: 'confirm', refresh: true });
       } else {
-        ElMessage.error('批量发货失败');
+        ElMessage.error(t('modules.order.batchShipFailed'));
       }
     } else {
       // 文件流响应,表示有失败的记录,需要下载错误文件
@@ -124,11 +128,11 @@ async function onDispatch() {
       document.body.removeChild(link);
       window.URL.revokeObjectURL(url);
 
-      ElMessage.warning('部分发货失败,已下载失败记录');
+      ElMessage.warning(t('modules.order.partialShipFailed'));
     }
   } catch (error) {
     console.error('批量发货失败:', error);
-    ElMessage.error('批量发货失败');
+    ElMessage.error(t('modules.order.batchShipFailed'));
   } finally {
     state.loading = false;
   }

+ 31 - 29
src/app/shop/admin/order/order/dispatch.vue

@@ -17,7 +17,7 @@
             <sa-empty />
           </template>
           <el-table-column type="selection" width="40" />
-          <el-table-column label="商品信息" min-width="360">
+          <el-table-column :label="t('modules.order.productInfo')" min-width="360">
             <template #default="scope">
               <div class="sa-flex">
                 <sa-image :url="scope.row.image" size="40"></sa-image>
@@ -25,35 +25,35 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column label="规格" min-width="120">
+          <el-table-column :label="t('modules.order.specification')" min-width="120">
             <template #default="scope">
               {{ scope.row.sku || '-' }}
             </template>
           </el-table-column>
-          <el-table-column label="数量" min-width="80">
+          <el-table-column :label="t('modules.order.quantity')" min-width="80">
             <template #default="scope">
               {{ scope.row.payNum }}
             </template>
           </el-table-column>
-          <el-table-column label="状态" min-width="140">
-            <template #default="scope"> 待发货 </template>
+          <el-table-column :label="t('modules.order.orderStatus')" min-width="140">
+            <template #default="scope"> {{ t('modules.order.pendingShipment') }} </template>
           </el-table-column>
-          <el-table-column label="快递单号" min-width="80">
+          <el-table-column :label="t('modules.order.expressNumber')" min-width="80">
             <template #default>-</template>
           </el-table-column>
         </el-table>
         <div class="address">
-          <div class="title sa-m-b-16">配送信息</div>
+          <div class="title sa-m-b-16">{{ t('modules.order.deliveryInfo') }}</div>
           <div class="sa-m-l-16" v-if="props.modal?.params?.data?.orderAddressVO">
             <div class="sa-flex sa-m-b-8">
-              <div class="label">收货信息:</div>
+              <div class="label">{{ t('modules.order.recipientInfo') }}:</div>
               <div class="content">
                 {{ props.modal?.params?.data?.orderAddressVO?.realName }}&nbsp;
                 {{ props.modal?.params?.data?.orderAddressVO?.phone }}
               </div>
             </div>
             <div class="sa-flex sa-col-top sa-m-b-16">
-              <div class="label">收货地址:</div>
+              <div class="label">{{ t('modules.order.recipientAddress') }}:</div>
               <div class="content">
                 <div>
                   {{ props.modal?.params?.data?.orderAddressVO?.province }}&nbsp;
@@ -62,31 +62,32 @@
                 </div>
                 <div>{{ props.modal?.params?.data?.orderAddressVO?.detail }}</div>
                 <div v-if="props.modal?.params?.data?.orderAddressVO?.postCode">
-                  邮编:{{ props.modal?.params?.data?.orderAddressVO?.postCode }}
+                  {{ t('modules.order.postalCode') }}:{{ props.modal?.params?.data?.orderAddressVO?.postCode }}
                 </div>
               </div>
             </div>
           </div>
           <div v-if="!props.modal?.params?.data?.orderAddressVO" class="mb-20px text-14px text-red ml-20px">
-            用户未完善收货地址信息
+            {{ t('modules.order.incompleteAddress') }}
           </div>
         </div>
         <div class="express">
-          <div class="title sa-m-b-16">物流信息</div>
+          <div class="title sa-m-b-16">{{ t('modules.order.logisticsInfo') }}</div>
           <div class="sa-m-l-16">
             <el-form>
-              <el-form-item label="发货方式">
+              <el-form-item :label="t('modules.order.shippingMethod')">
                 <el-radio-group v-model="state.method">
-                  <el-radio label="input">物流快递</el-radio>
+                  <el-radio label="input">{{ t('modules.order.expressShipping') }}</el-radio>
                   <!-- <el-radio label="api">一键发货</el-radio> -->
                 </el-radio-group>
               </el-form-item>
             </el-form>
             <el-form v-if="state.method == 'input'" ref="expressRef" :inline="true" :model="express"
               :rules="state.method == 'input' ? state.expressRules : {}">
-              <el-form-item label="快递公司" prop="code">
-                <el-select v-model="express.code" placeholder="请选择快递公司" @change="onChangeExpressCode" filterable remote
-                  reserve-keyword :remote-method="remoteMethod" :loading="deliverCompany.loading" autocomplete="none">
+              <el-form-item :label="t('modules.order.expressCompany')" prop="code">
+                <el-select v-model="express.code" :placeholder="t('modules.order.selectExpressCompany')"
+                  @change="onChangeExpressCode" filterable remote reserve-keyword :remote-method="remoteMethod"
+                  :loading="deliverCompany.loading" autocomplete="none">
                   <el-option v-for="dc in deliverCompany.data" :key="dc" :label="dc.name" :value="dc.code"
                     :ref="`dc-${dc.code}`" :data-name="dc.name">{{ dc.name }}&nbsp;({{ dc.code }})</el-option>
                   <div class="sa-p-l-15 sa-p-r-27">
@@ -95,8 +96,8 @@
                   </div>
                 </el-select>
               </el-form-item>
-              <el-form-item label="快递单号" prop="no">
-                <el-input v-model="express.no" placeholder="请输入快递单号" />
+              <el-form-item :label="t('modules.order.expressNumber')" prop="no">
+                <el-input v-model="express.no" :placeholder="t('modules.order.enterExpressNumber')" />
               </el-form-item>
             </el-form>
           </div>
@@ -106,7 +107,7 @@
         <el-table ref="customTableRef" class="sa-table" :data="state.customItem"
           @selection-change="handleSelectionChange">
           <el-table-column type="selection" width="48"></el-table-column>
-          <el-table-column label="商品信息" min-width="360">
+          <el-table-column :label="t('modules.order.productInfo')" min-width="360">
             <template #default="scope">
               <div class="sa-flex">
                 <sa-image :url="scope.row.goods_image" size="40"></sa-image>
@@ -114,13 +115,13 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column prop="goods_num" label="数量" min-width="80"></el-table-column>
-          <el-table-column prop="dispatch_status_text" label="状态" min-width="140">
+          <el-table-column prop="goods_num" :label="t('modules.order.quantity')" min-width="80"></el-table-column>
+          <el-table-column prop="dispatch_status_text" :label="t('modules.order.orderStatus')" min-width="140">
             <template #default="scope">
               {{ scope.row.dispatch_status_text }}/{{ scope.row.aftersale_status_text }}
             </template>
           </el-table-column>
-          <el-table-column label="快递单号" min-width="80">
+          <el-table-column :label="t('modules.order.expressNumber')" min-width="80">
             <template #default>-</template>
           </el-table-column>
         </el-table>
@@ -171,7 +172,8 @@
     </el-main>
     <el-footer class="sa-footer--submit">
       <el-button type="primary" :loading="state.sendLoading"
-        :disabled="state.expressItem.length == 0 || state.sendLoading" @click="onSend">立即发货</el-button>
+        :disabled="state.expressItem.length == 0 || state.sendLoading" @click="onSend">{{ t('modules.order.shipNow')
+        }}</el-button>
     </el-footer>
   </el-container>
 </template>
@@ -205,10 +207,10 @@ const state = reactive({
   }),
   method: 'input',
   expressItem: [],
-  expressRules: {
-    code: [{ required: true, message: '请选择', trigger: 'none' }],
-    no: [{ required: true, message: '请输入快递单号', trigger: 'none' }],
-  },
+  expressRules: computed(() => ({
+    code: [{ required: true, message: t('modules.order.selectExpressCompany'), trigger: 'none' }],
+    no: [{ required: true, message: t('modules.order.enterExpressNumber'), trigger: 'none' }],
+  })),
   sendLoading: false,
 
   dispatch_type: 'express',
@@ -231,7 +233,7 @@ async function onSend() {
   // 检查订单是否有收货地址信息
   const orderAddress = props.modal?.params?.data?.orderAddressVO;
   if (!orderAddress || !orderAddress.realName || !orderAddress.phone || !orderAddress.detail) {
-    ElMessage.error('该订单缺少收货地址信息,无法发货!请联系客户补充完整的收货地址。');
+    ElMessage.error(t('modules.order.incompleteAddress'));
     return;
   }
 

+ 2 - 2
src/app/shop/admin/order/order/index.vue

@@ -106,8 +106,8 @@
               </el-table-column>
               <el-table-column :label="t('modules.order.groupStatusLabel')" min-width="100" align="center">
                 <template #default="scope">
-                  <el-tag :type="getStatusType('pink', scope.row.storePink.status)">
-                    {{ getStatusText('pink', scope.row.storePink.status) }}
+                  <el-tag :type="getStatusType('pink', scope.row.storePink?.status)">
+                    {{ getStatusText('pink', scope.row.storePink?.status) }}
                   </el-tag>
                 </template>
               </el-table-column>

+ 27 - 1
src/locales/en-US/index.json

@@ -1211,7 +1211,33 @@
       "closeOrderFailed": "Failed to close order",
       "memoUpdateSuccess": "Memo updated successfully",
       "memoUpdateFailed": "Failed to update memo",
-      "openOrderDetailFailed": "Failed to open order details"
+      "openOrderDetailFailed": "Failed to open order details",
+      "productInfo": "Product Info",
+      "specification": "Specification",
+      "quantity": "Quantity",
+      "orderStatus": "Status",
+      "pendingShipment": "Pending Shipment",
+      "expressNumber": "Express Number",
+      "deliveryInfo": "Delivery Info",
+      "recipientInfo": "Recipient Info",
+      "recipientAddress": "Recipient Address",
+      "postalCode": "Postal Code",
+      "incompleteAddress": "This order lacks delivery address information and cannot be shipped! Please contact the customer to complete the delivery address.",
+      "logisticsInfo": "Logistics Info",
+      "shippingMethod": "Shipping Method",
+      "expressShipping": "Express Shipping",
+      "expressCompany": "Express Company",
+      "selectExpressCompany": "Please select express company",
+      "enterExpressNumber": "Please enter express number",
+      "shipNow": "Ship Now",
+      "importDeliveryList": "Import Delivery List",
+      "systemAutoProcess": "Import delivery list, the system will automatically process delivery information",
+      "reSelectFile": "Re-select File",
+      "batchShip": "Batch Ship",
+      "pleaseSelectDeliveryFile": "Please select delivery file first",
+      "batchShipSuccess": "Batch shipping successful",
+      "batchShipFailed": "Batch shipping failed",
+      "partialShipFailed": "Partial shipping failed, failure records downloaded"
     },
     "system": {
       "systemManagement": "System Management",

+ 29 - 2
src/locales/zh-CN/index.json

@@ -378,7 +378,8 @@
   "placeholders": {
     "inputOrderNo": "请输入订单号",
     "inputUserName": "请输入用户姓名",
-    "inputTrackingNumber": "请输入物流单号"
+    "inputTrackingNumber": "请输入物流单号",
+    "inputPhone": "请输入手机号"
   },
   "error": {
     "pageNotFound": "未找到页面",
@@ -1209,7 +1210,33 @@
       "closeOrderFailed": "关闭订单失败",
       "memoUpdateSuccess": "备注更新成功",
       "memoUpdateFailed": "备注更新失败",
-      "openOrderDetailFailed": "打开订单详情失败"
+      "openOrderDetailFailed": "打开订单详情失败",
+      "productInfo": "商品信息",
+      "specification": "规格",
+      "quantity": "数量",
+      "orderStatus": "状态",
+      "pendingShipment": "待发货",
+      "expressNumber": "快递单号",
+      "deliveryInfo": "配送信息",
+      "recipientInfo": "收货信息",
+      "recipientAddress": "收货地址",
+      "postalCode": "邮编",
+      "incompleteAddress": "该订单缺少收货地址信息,无法发货!请联系客户补充完整的收货地址。",
+      "logisticsInfo": "物流信息",
+      "shippingMethod": "发货方式",
+      "expressShipping": "物流快递",
+      "expressCompany": "快递公司",
+      "selectExpressCompany": "请选择快递公司",
+      "enterExpressNumber": "请输入快递单号",
+      "shipNow": "立即发货",
+      "importDeliveryList": "导入发货单",
+      "systemAutoProcess": "导入发货单,系统将自动处理发货信息",
+      "reSelectFile": "重新选择文件",
+      "batchShip": "批量发货",
+      "pleaseSelectDeliveryFile": "请先选择发货单文件",
+      "batchShipSuccess": "批量发货成功",
+      "batchShipFailed": "批量发货失败",
+      "partialShipFailed": "部分发货失败,已下载失败记录"
     },
     "system": {
       "systemManagement": "系统管理",