Bläddra i källkod

feat:优化细节调整

叶静 1 månad sedan
förälder
incheckning
37cab02429

+ 63 - 0
.promptx/memory/vue3-expert/declarative.dpml

@@ -99,4 +99,67 @@
     </content>
     <tags>#流程管理</tags>
   </item>
+  <item id="mem_1756434598347_xxik8uj02" time="2025/08/29 10:29">
+    <content>
+      用户明确要求:在开发过程中,除非用户明确要求创建测试文档或测试文件,否则不要主动创建任何测试相关的文件。专注于业务功能的实现,测试文件的创建需要用户明确指示。
+    </content>
+    <tags>#其他</tags>
+  </item>
+  <item id="mem_1756434656301_45o0lw7c9" time="2025/08/29 10:30">
+    <content>
+      bandhuBuy-admin项目代码书写习惯:
+      ## Vue3组件编写风格
+      1. **script setup语法**:统一使用`&lt;script setup&gt;`语法,导入在顶部
+      2. **响应式数据**:使用`reactive`定义复杂对象,`ref`定义简单值
+      3. **组件结构**:template -&gt; script setup -&gt; style scoped的标准结构
+      4. **props定义**:使用`defineProps`,包含类型和默认值
+      5. **事件处理**:使用`defineEmits`定义事件
+    
+      ## 页面布局结构
+      1. **容器结构**:`el-container` -&gt; `el-header` + `el-main` + `sa-view-bar`
+      2. **搜索区域**:使用`sa-search-simple`组件,配置`searchFields`对象
+      3. **标题区域**:`sa-title sa-flex sa-row-between`布局,左侧标题右侧操作按钮
+      4. **表格区域**:`sa-table-wrap` + `sa-table`类名,配合`v-loading`
+      5. **分页区域**:`sa-view-bar`中使用`sa-pagination`组件
+    
+      ## CSS样式规范
+      1. **类名前缀**:sa-开头的自定义类名(sa-title、sa-flex、sa-table等)
+      2. **布局类**:sa-flex、sa-row-between、sa-p-0等工具类
+      3. **容器类**:panel-block作为主容器,支持--top、--bottom修饰符
+      4. **间距类**:sa-m-r-12、sa-m-l-8等margin/padding工具类
+      5. **CSS变量**:使用--sa-开头的CSS变量定义主题色彩
+      6. **UnoCSS优先**:新样式优先使用UnoCSS原子化类名
+    
+      ## 数据处理模式
+      1. **API调用**:使用CRUD工具类,统一的request封装
+      2. **分页处理**:usePagination hook,pageData对象管理分页状态
+      3. **表格数据**:reactive定义table对象,包含data、selected等属性
+      4. **加载状态**:ref定义loading状态,配合v-loading指令
+    
+      ## 表单处理风格
+      1. **表单结构**:reactive定义form对象,包含model和rules
+      2. **验证规则**:统一的rules对象,支持required、pattern等验证
+      3. **表单引用**:使用formRef获取表单实例
+      4. **提交处理**:先验证再提交,统一的错误处理
+    
+      ## 组件交互模式
+      1. **弹窗组件**:useModal hook统一管理弹窗
+      2. **确认操作**:ElMessageBox.confirm统一确认框
+      3. **消息提示**:ElMessage统一消息提示
+      4. **批量操作**:sa-batch-handle组件处理批量操作
+    
+      ## 国际化处理规范
+      1. **搜索字段**:必须使用computed定义searchFields,确保语言切换响应
+      2. **键名格式**:modules.xxx格式组织,如modules.user、modules.order
+      3. **函数调用**:使用t(&#x27;modules.xxx.xxx&#x27;)格式调用翻译
+      4. **标签vs值**:注意区分Label(如groupStatusLabel)和值对象(如groupStatus)
+    
+      ## 代码组织规范
+      1. **导入顺序**:Vue相关 -&gt; 第三方库 -&gt; 项目内部组件 -&gt; utils工具
+      2. **变量声明**:const优先,let其次,避免var
+      3. **函数定义**:使用箭头函数或function关键字,保持一致
+      4. **注释规范**:重要业务逻辑添加中文注释说明
+    </content>
+    <tags>#最佳实践 #工具使用</tags>
+  </item>
 </memory>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 7 - 8
.promptx/pouch.json


+ 11 - 11
.promptx/resource/project.registry.json

@@ -4,8 +4,8 @@
   "metadata": {
     "version": "2.0.0",
     "description": "project 级资源注册表",
-    "createdAt": "2025-08-27T06:03:45.068Z",
-    "updatedAt": "2025-08-27T06:03:45.092Z",
+    "createdAt": "2025-08-29T02:29:36.742Z",
+    "updatedAt": "2025-08-29T02:29:36.751Z",
     "resourceCount": 3
   },
   "resources": [
@@ -17,9 +17,9 @@
       "description": "执行模式,定义具体的行为模式",
       "reference": "@project://.promptx/resource/role/vue3-expert/execution/vue3-development.execution.md",
       "metadata": {
-        "createdAt": "2025-08-27T06:03:45.078Z",
-        "updatedAt": "2025-08-27T06:03:45.078Z",
-        "scannedAt": "2025-08-27T06:03:45.078Z",
+        "createdAt": "2025-08-29T02:29:36.746Z",
+        "updatedAt": "2025-08-29T02:29:36.746Z",
+        "scannedAt": "2025-08-29T02:29:36.746Z",
         "path": "role/vue3-expert/execution/vue3-development.execution.md"
       }
     },
@@ -31,9 +31,9 @@
       "description": "思维模式,指导AI的思考方式",
       "reference": "@project://.promptx/resource/role/vue3-expert/thought/vue3-thinking.thought.md",
       "metadata": {
-        "createdAt": "2025-08-27T06:03:45.085Z",
-        "updatedAt": "2025-08-27T06:03:45.085Z",
-        "scannedAt": "2025-08-27T06:03:45.085Z",
+        "createdAt": "2025-08-29T02:29:36.748Z",
+        "updatedAt": "2025-08-29T02:29:36.748Z",
+        "scannedAt": "2025-08-29T02:29:36.748Z",
         "path": "role/vue3-expert/thought/vue3-thinking.thought.md"
       }
     },
@@ -45,9 +45,9 @@
       "description": "专业角色,提供特定领域的专业能力",
       "reference": "@project://.promptx/resource/role/vue3-expert/vue3-expert.role.md",
       "metadata": {
-        "createdAt": "2025-08-27T06:03:45.091Z",
-        "updatedAt": "2025-08-27T06:03:45.091Z",
-        "scannedAt": "2025-08-27T06:03:45.091Z",
+        "createdAt": "2025-08-29T02:29:36.750Z",
+        "updatedAt": "2025-08-29T02:29:36.750Z",
+        "scannedAt": "2025-08-29T02:29:36.750Z",
         "path": "role/vue3-expert/vue3-expert.role.md"
       }
     }

+ 9 - 12
src/app/shop/admin/order/order/detail.vue

@@ -31,9 +31,9 @@
           </el-col>
           <el-col :span="6">
             <div class="info-item">
-              <span class="label">{{ t('modules.order.groupStatus') }}:</span>
-              <el-tag :type="getStatusType('pink', state.orderDetail.pinkStatus)">
-                {{ getStatusText('pink', state.orderDetail.pinkStatus) }}
+              <span class="label">{{ t('modules.order.groupStatusLabel') }}:</span>
+              <el-tag :type="getStatusType('pink', state.orderDetail.storePink?.status)">
+                {{ getStatusText('pink', state.orderDetail.storePink?.status) }}
               </el-tag>
             </div>
           </el-col>
@@ -49,15 +49,15 @@
           <el-col :span="6">
             <div class="info-item">
               <span class="label">{{ t('modules.order.winStatusLabel') }}:</span>
-              <el-tag :type="getStatusType('win', state.orderDetail.winStatus)">
-                {{ getStatusText('win', state.orderDetail.winStatus) }}
+              <el-tag :type="getStatusType('win', state.orderDetail.storePink?.lId)">
+                {{ getStatusText('win', state.orderDetail.storePink?.lId) }}
               </el-tag>
             </div>
           </el-col>
           <el-col :span="6">
             <div class="info-item">
               <span class="label">{{ t('modules.order.username') }}:</span>
-              <span class="value">{{ state.realName || '--' }}</span>
+              <span class="value">{{ state.orderDetail.realName || '--' }}</span>
             </div>
           </el-col>
           <el-col :span="6">
@@ -139,12 +139,11 @@
         <el-button v-if="state.orderDetail.status === 1" type="warning" plain @click="onCancelOrder">{{
           t('modules.order.cancelOrder') }}</el-button>
         <!-- 立即发货按钮 - 待发货状态显示 -->
-        <el-button type="primary" @click="onDispatch">{{ t('modules.order.shipTest') }}</el-button>
         <el-button type="primary" @click="onDispatch" v-if="state.orderDetail.status === 5">{{
           t('modules.order.shipOrder')
         }}</el-button>
         <!-- 全部退款按钮 - 订单状态已支付且拼团状态未成团时显示 -->
-        <el-button v-if="state.orderDetail.status === 3 && state.orderDetail.pinkStatus === 1" type="danger" plain
+        <el-button v-if="state.orderDetail.status === 3 && state.orderDetail.storePink?.status == 1" type="danger" plain
           @click="onRefund">
           {{ t('modules.order.refund') }}
         </el-button>
@@ -185,7 +184,7 @@
           </el-table-column>
           <el-table-column :label="t('modules.order.trackingNumber')" align="center">
             <template #default>
-              {{ state.orderDetail.deliveryId || '--' }}
+              {{ state.orderDetail.deliveryCode || '--' }}
             </template>
           </el-table-column>
         </el-table>
@@ -453,12 +452,10 @@ async function onRefund() {
       type: 'warning',
     });
 
-    const { code, message } = await api.order.refund(String(state.orderDetail.id));
+    const { code } = await api.order.refund(String(state.orderDetail.id));
     if (code == 200) {
       ElMessage.success(t('message.refundSuccess'));
       getOrderDetail(); // 刷新订单详情
-    } else {
-      ElMessage.error(message || t('message.refundFailed'));
     }
   } catch (error) { }
 }

+ 11 - 3
src/app/shop/admin/order/order/dispatch.vue

@@ -67,9 +67,9 @@
               </div>
             </div>
           </div>
-          <template v-if="!props.modal?.params?.data?.orderAddressVO">
-            地址ID:{{ props.modal?.params?.data?.addressId }}
-          </template>
+          <div v-if="!props.modal?.params?.data?.orderAddressVO" class="mb-20px text-14px text-red ml-20px">
+            用户未完善收货地址信息
+          </div>
         </div>
         <div class="express">
           <div class="title sa-m-b-16">物流信息</div>
@@ -178,6 +178,7 @@
 <script setup>
 import { computed, getCurrentInstance, onMounted, reactive, ref, watch, nextTick } from 'vue';
 import { useI18n } from 'vue-i18n';
+import { ElMessage } from 'element-plus';
 import { api } from '../order.service';
 import useExpress from '@/app/shop/admin/data/express/express.js';
 import draggable from 'vuedraggable';
@@ -227,6 +228,13 @@ const { express, deliverCompany, getDeliverCompany, onChangeExpressCode, remoteM
   useExpress();
 // TODO
 async function onSend() {
+  // 检查订单是否有收货地址信息
+  const orderAddress = props.modal?.params?.data?.orderAddressVO;
+  if (!orderAddress || !orderAddress.realName || !orderAddress.phone || !orderAddress.detail) {
+    ElMessage.error('该订单缺少收货地址信息,无法发货!请联系客户补充完整的收货地址。');
+    return;
+  }
+
   let order_item_ids = [];
   state.expressItem.forEach((item) => {
     order_item_ids.push(item.id);

+ 2 - 11
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.pinkStatus)">
-                    {{ getStatusText('pink', scope.row.pinkStatus) }}
+                  <el-tag :type="getStatusType('pink', scope.row.storePink.status)">
+                    {{ getStatusText('pink', scope.row.storePink.status) }}
                   </el-tag>
                 </template>
               </el-table-column>
@@ -133,8 +133,6 @@
               <el-table-column :label="t('common.actions')" min-width="150" fixed="right">
                 <template #default="scope">
                   <div class="sa-flex">
-                    <el-button class="is-link" type="primary" @click="onSend(scope.row)">{{ t('modules.order.shipTest')
-                    }}</el-button>
                     <el-button v-if="scope.row.status === 5" class="is-link" type="primary"
                       @click="onSend(scope.row)">{{ t('modules.order.shipOrder') }}</el-button>
                     <el-button class="is-link" type="primary" @click="detailRow(scope.row.id)">{{
@@ -325,13 +323,6 @@ async function getData(page, searchParams = null) {
       delete requestData.createTime;
     }
 
-    // 调试信息
-    console.log('订单列表请求参数:', {
-      currentStatus: currentStatus.value,
-      statusParams,
-      requestData
-    });
-
     const { code, data } = await api.order.list(requestData);
 
     if (code == '200') {

+ 9 - 20
src/app/shop/admin/user/list/detail.vue

@@ -175,13 +175,6 @@
                   <div>৳{{ row.payPrice || 0 }}</div>
                 </template>
               </el-table-column>
-              <el-table-column :label="t('modules.order.paymentStatus')" min-width="130" align="center">
-                <template #default="{ row }">
-                  <el-tag :type="row.paid === 1 ? 'success' : 'warning'">
-                    {{ row.paid === 1 ? t('modules.order.paid') : t('modules.order.pendingPayment') }}
-                  </el-tag>
-                </template>
-              </el-table-column>
               <el-table-column :label="t('modules.order.orderStatus')" min-width="100" align="center">
                 <template #default="{ row }">
                   <el-tag :type="getStatusType('order', row.status)">
@@ -189,17 +182,10 @@
                   </el-tag>
                 </template>
               </el-table-column>
-              <el-table-column :label="t('modules.order.groupStatus')" min-width="110" align="center">
-                <template #default="{ row }">
-                  <el-tag :type="getStatusType('pink', row.pinkStatus)">
-                    {{ getStatusText('pink', row.pinkStatus) }}
-                  </el-tag>
-                </template>
-              </el-table-column>
-              <el-table-column :label="t('modules.order.refundStatus')" min-width="120" align="center">
+              <el-table-column :label="t('modules.order.groupStatusLabel')" min-width="110" align="center">
                 <template #default="{ row }">
-                  <el-tag :type="getStatusType('refund', row.refundStatus)">
-                    {{ getStatusText('refund', row.refundStatus) }}
+                  <el-tag :type="getStatusType('pink', row.storePink?.status)">
+                    {{ getStatusText('pink', row.storePink?.status) }}
                   </el-tag>
                 </template>
               </el-table-column>
@@ -434,7 +420,7 @@
         <!-- 统一分页组件 -->
         <div class="sa-m-t-20 flex justify-end">
           <sa-pagination layout="total, prev, pager, next" :pageData="pageData"
-            @updateFn="(page) => loadTabData(state.activeTab, page)" />
+            @updateFn="() => loadTabData(state.activeTab)" />
         </div>
       </div>
     </el-main>
@@ -699,16 +685,19 @@ const fetchTabData = async (tabType, page = 1) => {
 // Tab切换处理
 const handleTabChange = (tabName) => {
   state.activeTab = tabName;
+  // 切换tab时重置页码为1
+  pageData.page = 1;
   // 每次切换都重新加载数据
   loadTabData(tabName);
 };
 
 // 加载Tab数据
-const loadTabData = async (tabName, page = 1) => {
+const loadTabData = async (tabName) => {
   state.loading[tabName] = true;
 
   try {
-    await fetchTabData(tabName, page);
+    // 从 pageData 获取当前页码
+    await fetchTabData(tabName, pageData.page);
   } catch (error) {
     console.error(`加载${tabName}数据失败:`, error);
   } finally {

+ 31 - 57
src/app/shop/admin/user/list/index.vue

@@ -48,7 +48,7 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column :label="t('modules.user.userPhone')" min-width="120">
+          <el-table-column :label="t('modules.user.userPhone')" min-width="124">
             <template #default="scope">
               {{ scope.row.phoneNo || '-' }}
             </template>
@@ -68,7 +68,7 @@
               {{ scope.row.teamNum || 0 }}
             </template>
           </el-table-column>
-          <el-table-column :label="t('modules.user.successOrders')" min-width="120" align="center">
+          <el-table-column :label="t('modules.user.successOrders')" min-width="124" align="center">
             <template #default="scope">
               {{ scope.row.successGroupNum || 0 }}
             </template>
@@ -142,7 +142,7 @@
   </el-container>
 </template>
 <script setup>
-import { onMounted, reactive, ref } from 'vue';
+import { onMounted, reactive, ref, computed } from 'vue';
 import { api } from '../user.service';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import { useModal } from '@/sheep/hooks';
@@ -155,80 +155,54 @@ import userDetail from './detail.vue';
 import userPassword from './password.vue';
 const { pageData } = usePagination();
 
-// 搜索字段配置
-const searchFields = reactive({
+// 搜索字段配置 - 使用computed确保语言切换时更新
+const searchFields = computed(() => ({
   name: {
     type: 'input',
-    get label() {
-      return t('modules.user.userAccount');
-    },
-    get placeholder() {
-      return t('form.inputUserAccount');
-    },
+    label: t('modules.user.userAccount'),
+    placeholder: t('form.inputUserAccount'),
     width: 200,
   },
   phone: {
     type: 'input',
-    get label() {
-      return t('modules.user.userPhone');
-    },
-    get placeholder() {
-      return t('form.inputPhone');
-    },
+    label: t('modules.user.userPhone'),
+    placeholder: t('form.inputPhone'),
     width: 150,
   },
   hasLogin: {
     type: 'select',
-    get label() {
-      return t('modules.user.loginPermission');
-    },
-    get placeholder() {
-      return t('form.selectLoginPermission');
-    },
+    label: t('modules.user.loginPermission'),
+    placeholder: t('form.selectLoginPermission'),
     width: 120,
-    get options() {
-      return [
-        { label: t('common.all'), value: '' },
-        { label: t('common.allow'), value: 1 },
-        { label: t('common.forbid'), value: 2 },
-      ];
-    },
+    options: [
+      { label: t('common.all'), value: '' },
+      { label: t('common.allow'), value: 1 },
+      { label: t('common.forbid'), value: 2 },
+    ],
   },
   hasOrder: {
     type: 'select',
-    get label() {
-      return t('modules.user.orderPermission');
-    },
-    get placeholder() {
-      return t('form.selectOrderPermission');
-    },
+    label: t('modules.user.orderPermission'),
+    placeholder: t('form.selectOrderPermission'),
     width: 120,
-    get options() {
-      return [
-        { label: t('common.all'), value: '' },
-        { label: t('common.allow'), value: 1 },
-        { label: t('common.forbid'), value: 2 },
-      ];
-    },
+    options: [
+      { label: t('common.all'), value: '' },
+      { label: t('common.allow'), value: 1 },
+      { label: t('common.forbid'), value: 2 },
+    ],
   },
   hasWithdraw: {
     type: 'select',
-    get label() {
-      return t('modules.user.withdrawPermission');
-    },
-    get placeholder() {
-      return t('form.selectWithdrawPermission');
-    },
+    label: t('modules.user.withdrawPermission'),
+    placeholder: t('form.selectWithdrawPermission'),
     width: 120,
-    get options() {
-      return [
-        { label: t('common.all'), value: '' },
-        { label: t('common.allow'), value: 1 },
-        { label: t('common.forbid'), value: 2 },
-      ];
-    },
+    options: [
+      { label: t('common.all'), value: '' },
+      { label: t('common.allow'), value: 1 },
+      { label: t('common.forbid'), value: 2 },
+    ],
   },
-});
+}));
 
 // 默认搜索值
 const defaultSearchValues = reactive({

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

@@ -1311,8 +1311,73 @@
       "getUserListFailed": "Failed to get user list"
     },
     "user": {
+      "userId": "User ID",
+      "userName": "Username",
+      "userPhone": "Phone Number",
+      "userNickname": "Nickname",
+      "userLevel": "User Level",
+      "userAvatar": "Avatar",
+      "userAccount": "User Account",
+      "inviteFriends": "Invited Friends",
+      "teamMembers": "Team Members",
+      "successOrders": "Success Orders",
+      "accountBalance": "Account Balance",
+      "commissionBalance": "Commission Balance",
+      "loginPermission": "Login Permission",
+      "orderPermission": "Order Permission",
+      "withdrawPermission": "Withdraw Permission",
+      "registrationTime": "Registration Time",
+      "changePassword": "Change Password",
+      "userDetail": "User Detail",
+      "addUser": "Add User",
       "editUser": "Edit User",
-      "userDetail": "User Detail"
+      "editProfile": "Edit Profile",
+      "basicInfo": "Basic Information",
+      "avatar": "Avatar",
+      "noLevel": "No Level",
+      "paymentBank": "Payment Bank",
+      "accountName": "Account Name",
+      "paymentAccount": "Payment Account",
+      "newPassword": "New Password",
+      "confirmPassword": "Confirm Password",
+      "login": "Login",
+      "order": "Order",
+      "withdraw": "Withdraw",
+      "userList": "User List",
+      "statisticsInfo": "Statistics Information",
+      "availableGroups": "Available Groups",
+      "totalCommission": "Total Commission Amount",
+      "settledCommission": "Settled Commission Balance",
+      "totalRecharge": "Total Recharge Amount",
+      "last7DaysCommission": "Last 7 Days Commission",
+      "pendingCommission": "Pending Commission Balance",
+      "totalWithdraw": "Total Withdraw Amount",
+      "orderRecords": "Order Records",
+      "subordinateUsers": "Subordinate Users",
+      "commissionRecords": "Commission Records",
+      "commissionId": "Commission ID",
+      "commissionType": "Commission Type",
+      "commissionDescription": "Commission Description",
+      "commissionAmount": "Commission Amount",
+      "commissionStatus": "Commission Status",
+      "commissionTime": "Commission Time",
+      "rechargeRecords": "Recharge Records",
+      "rechargeOrderNo": "Recharge Order No.",
+      "rechargeChannel": "Recharge Channel",
+      "currency": "Currency",
+      "amount": "Amount",
+      "successTime": "Success Time",
+      "withdrawRecords": "Withdraw Records",
+      "withdrawOrderNo": "Withdraw Order No.",
+      "withdrawType": "Withdraw Type",
+      "withdrawChannel": "Withdraw Channel",
+      "withdrawAmount": "Withdraw Amount",
+      "shippingAddresses": "Shipping Addresses",
+      "recipient": "Recipient",
+      "detailedAddress": "Detailed Address",
+      "isDefault": "Is Default",
+      "defaultAddress": "Default Address",
+      "normalAddress": "Normal Address"
     },
     "report": {
       "dataReport": "Data Report",

+ 69 - 3
src/locales/zh-CN/index.json

@@ -254,6 +254,9 @@
     "selectCategory": "请选择分类",
     "selectStatus": "请选择状态",
     "uploadImage": "请上传图片",
+    "inputUserAccount": "请输入用户账号或昵称",
+    "inputPhone": "请输入手机号",
+    "inputMemo": "请输入备注(限100字)",
 
     "selectLoginPermission": "请选择登录权限",
     "selectOrderPermission": "请选择下单权限",
@@ -375,8 +378,6 @@
   "placeholders": {
     "inputOrderNo": "请输入订单号",
     "inputUserName": "请输入用户姓名",
-    "inputUserAccount": "请输入用户名或昵称",
-    "inputPhone": "请输入手机号",
     "inputTrackingNumber": "请输入物流单号"
   },
   "error": {
@@ -1308,8 +1309,73 @@
       "getUserListFailed": "获取用户列表失败"
     },
     "user": {
+      "userId": "用户ID",
+      "userName": "用户名",
+      "userPhone": "手机号码",
+      "userNickname": "用户昵称",
+      "userLevel": "用户等级",
+      "userAvatar": "用户头像",
+      "userAccount": "用户账号",
+      "inviteFriends": "邀请好友数",
+      "teamMembers": "团队人数",
+      "successOrders": "成功订单",
+      "accountBalance": "账户余额",
+      "commissionBalance": "佣金余额",
+      "loginPermission": "登录权限",
+      "orderPermission": "下单权限",
+      "withdrawPermission": "提现权限",
+      "registrationTime": "注册时间",
+      "changePassword": "修改密码",
+      "userDetail": "用户详情",
+      "addUser": "新建用户",
       "editUser": "编辑用户",
-      "userDetail": "用户详情"
+      "editProfile": "编辑资料",
+      "basicInfo": "基本信息",
+      "avatar": "头像",
+      "noLevel": "暂无等级",
+      "paymentBank": "收款银行",
+      "accountName": "账户名称",
+      "paymentAccount": "收款账户",
+      "newPassword": "新密码",
+      "confirmPassword": "确认密码",
+      "login": "登录",
+      "order": "下单",
+      "withdraw": "提现",
+      "userList": "用户列表",
+      "statisticsInfo": "统计信息",
+      "availableGroups": "可参团次数",
+      "totalCommission": "全部佣金总金额",
+      "settledCommission": "已结算佣金余额",
+      "totalRecharge": "充值总金额",
+      "last7DaysCommission": "近7天佣金余额",
+      "pendingCommission": "待结算佣金余额",
+      "totalWithdraw": "提现总金额",
+      "orderRecords": "订单记录",
+      "subordinateUsers": "下线用户",
+      "commissionRecords": "佣金记录",
+      "commissionId": "佣金ID",
+      "commissionType": "佣金类型",
+      "commissionDescription": "佣金说明",
+      "commissionAmount": "佣金金额",
+      "commissionStatus": "佣金状态",
+      "commissionTime": "佣金发放时间",
+      "rechargeRecords": "充值记录",
+      "rechargeOrderNo": "充值订单号",
+      "rechargeChannel": "充值渠道",
+      "currency": "币种",
+      "amount": "金额",
+      "successTime": "成功时间",
+      "withdrawRecords": "提现记录",
+      "withdrawOrderNo": "提款订单号",
+      "withdrawType": "提款类型",
+      "withdrawChannel": "提款渠道",
+      "withdrawAmount": "提款金额",
+      "shippingAddresses": "收货地址",
+      "recipient": "收件人",
+      "detailedAddress": "详细地址",
+      "isDefault": "是否默认",
+      "defaultAddress": "默认地址",
+      "normalAddress": "普通地址"
     },
     "report": {
       "dataReport": "数据报表",

Vissa filer visades inte eftersom för många filer har ändrats