Bläddra i källkod

feat: 产品管理,应用管理模块新增类型选择,模块新增样式,调整模块显示

lixuan 3 veckor sedan
förälder
incheckning
fd3edbffd4

+ 8 - 1
apps/web-velofex/src/locales/langs/en-US/page.json

@@ -58,7 +58,9 @@
     "emptyContent":"No content available",
     "emptyContent":"No content available",
     "noPermission":"No permission to view",
     "noPermission":"No permission to view",
     "noPhone":"No phone number available",
     "noPhone":"No phone number available",
-    "noEmail":"No email available"
+    "noEmail":"No email available",
+    "application":"Application",
+    "product":"Product"
   },
   },
   "dashboard": {
   "dashboard": {
     "analytics": "Analytics",
     "analytics": "Analytics",
@@ -113,6 +115,7 @@
     }
     }
   },
   },
   "applicationManagement": {
   "applicationManagement": {
+    "type": "Type",
     "breadcrumb": "Dashboard / Application Management",
     "breadcrumb": "Dashboard / Application Management",
     "applicationName": "Application Name:",
     "applicationName": "Application Name:",
     "applicationId": "Application ID:",
     "applicationId": "Application ID:",
@@ -335,5 +338,9 @@
       "cancel": "Cancel",
       "cancel": "Cancel",
       "save": "Save"
       "save": "Save"
     }
     }
+  },
+  "productManagement":{
+    "breadcrumb":"Dashboard / Product List",
+    "title":"Product List"
   }
   }
 }
 }

+ 8 - 1
apps/web-velofex/src/locales/langs/zh-CN/page.json

@@ -58,7 +58,9 @@
     "emptyContent":"暂无内容",
     "emptyContent":"暂无内容",
     "noPermission":"暂无查看权限",
     "noPermission":"暂无查看权限",
     "noPhone":"暂无手机号",
     "noPhone":"暂无手机号",
-    "noEmail":"暂无邮箱地址"
+    "noEmail":"暂无邮箱地址",
+    "application":"应用",
+    "product":"产品"
   },
   },
   "dashboard": {
   "dashboard": {
     "title": "概览",
     "title": "概览",
@@ -113,6 +115,7 @@
     }
     }
   },
   },
   "applicationManagement": {
   "applicationManagement": {
+    "type": "类型",
     "breadcrumb": "首页 / 应用管理",
     "breadcrumb": "首页 / 应用管理",
     "applicationName": "应用名称:",
     "applicationName": "应用名称:",
     "applicationId": "应用ID:",
     "applicationId": "应用ID:",
@@ -335,5 +338,9 @@
       "cancel": "取消",
       "cancel": "取消",
       "save": "保存"
       "save": "保存"
     }
     }
+  },
+  "productManagement":{
+    "breadcrumb":"首页 / 产品管理",
+    "title":"产品列表"
   }
   }
 }
 }

+ 17 - 0
apps/web-velofex/src/views/dashboard/application-management/application-modal.vue

@@ -14,6 +14,8 @@ import {
   Menu,
   Menu,
   message,
   message,
   Modal,
   Modal,
+  Radio,
+  RadioGroup,
   Select,
   Select,
   Switch,
   Switch,
   Table,
   Table,
@@ -75,6 +77,7 @@ const formData = ref({
   address: '',
   address: '',
   description: '',
   description: '',
   isEnabled: true,
   isEnabled: true,
+  type: 'application',
   processCount: 0,
   processCount: 0,
   pageCount: 0,
   pageCount: 0,
   tableCount: 0,
   tableCount: 0,
@@ -199,6 +202,7 @@ async function fetchApplicationDetail() {
       formData.value.address = data.address;
       formData.value.address = data.address;
       formData.value.description = data.memo;
       formData.value.description = data.memo;
       formData.value.isEnabled = data.isEnable;
       formData.value.isEnabled = data.isEnable;
+      formData.value.type = data.type || 'application';
       formData.value.processCount = data.number0fWorkFlow;
       formData.value.processCount = data.number0fWorkFlow;
       formData.value.pageCount = data.number0fPages;
       formData.value.pageCount = data.number0fPages;
       formData.value.tableCount = data.number0fTables;
       formData.value.tableCount = data.number0fTables;
@@ -359,6 +363,7 @@ async function handleSave() {
     address: formData.value.address,
     address: formData.value.address,
     memo: formData.value.description,
     memo: formData.value.description,
     isEnable: formData.value.isEnabled,
     isEnable: formData.value.isEnabled,
+    type: formData.value.type,
     number0fWorkFlow: formData.value.processCount,
     number0fWorkFlow: formData.value.processCount,
     number0fPages: formData.value.pageCount,
     number0fPages: formData.value.pageCount,
     number0fTables: formData.value.tableCount,
     number0fTables: formData.value.tableCount,
@@ -506,6 +511,7 @@ function resetFormData() {
     designerCount: 0,
     designerCount: 0,
     scenarioCount: 0,
     scenarioCount: 0,
     userCount: 0,
     userCount: 0,
+    type: 'application',
   };
   };
 
 
   keyData.value = {
   keyData.value = {
@@ -688,6 +694,17 @@ function resetFormData() {
               }}</label>
               }}</label>
               <Switch v-model:checked="formData.isEnabled" class="w-[40px]" />
               <Switch v-model:checked="formData.isEnabled" class="w-[40px]" />
             </div>
             </div>
+            <div class="flex flex-col gap-2">
+              <label class="text-sm font-medium">{{
+                $t('applicationManagement.type')
+              }}</label>
+              <RadioGroup v-model:value="formData.type">
+                <Radio value="application">
+                  {{ $t('auth.application') }}
+                </Radio>
+                <Radio value="product">{{ $t('auth.product') }}</Radio>
+              </RadioGroup>
+            </div>
             <div class="flex flex-col gap-2">
             <div class="flex flex-col gap-2">
               <label class="text-sm font-medium">{{
               <label class="text-sm font-medium">{{
                 $t('applicationManagement.modal.description')
                 $t('applicationManagement.modal.description')

+ 13 - 4
apps/web-velofex/src/views/dashboard/application-management/index.vue

@@ -140,7 +140,7 @@ async function fetchApplicationList() {
         },
         },
         {
         {
           name: 'type',
           name: 'type',
-          value: 'application',
+          value: type === '1' ? 'application' : 'product',
         },
         },
       ],
       ],
     });
     });
@@ -240,7 +240,11 @@ watch(
     </div>
     </div>
 
 
     <div class="mb-[21px] mt-[30px] text-[26px] font-bold text-[#462424]">
     <div class="mb-[21px] mt-[30px] text-[26px] font-bold text-[#462424]">
-      {{ $t('homeModule.applicationManagement') }}
+      {{
+        type === '1'
+          ? $t('homeModule.applicationManagement')
+          : $t('productManagement.title')
+      }}
     </div>
     </div>
 
 
     <div class="mb-4 flex flex-wrap items-center gap-4">
     <div class="mb-4 flex flex-wrap items-center gap-4">
@@ -383,13 +387,18 @@ watch(
       <div
       <div
         v-for="item in applicationList"
         v-for="item in applicationList"
         :key="item.id"
         :key="item.id"
-        class="flex h-[78px] cursor-pointer items-center gap-[25px] rounded-[11px] bg-[#fff] px-[20px] shadow-md"
+        class="flex h-[78px] cursor-pointer items-center rounded-[11px] bg-[#fff] px-[20px] shadow-md"
       >
       >
         <img
         <img
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           alt=""
           alt=""
           class="h-[48px] w-auto object-contain"
           class="h-[48px] w-auto object-contain"
         />
         />
+        <span
+          class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+        >
+          {{ item.name }}
+        </span>
         <Dropdown
         <Dropdown
           :menu="{
           :menu="{
             items: [
             items: [
@@ -400,7 +409,7 @@ watch(
           placement="bottom"
           placement="bottom"
           @menu-click="(info: any) => handleMenuClick(info, item)"
           @menu-click="(info: any) => handleMenuClick(info, item)"
         >
         >
-          <div class="flex cursor-pointer items-center gap-2">
+          <div class="ml-[25px] flex cursor-pointer items-center gap-2">
             <img
             <img
               alt=""
               alt=""
               class="h-[19px] w-[19px] cursor-pointer"
               class="h-[19px] w-[19px] cursor-pointer"

+ 7 - 2
apps/web-velofex/src/views/dashboard/enterprise-customers/index.vue

@@ -299,7 +299,7 @@ watch(
       <div
       <div
         v-for="item in customerList"
         v-for="item in customerList"
         :key="item.id"
         :key="item.id"
-        class="flex h-[78px] cursor-pointer items-center gap-[25px] rounded-[11px] bg-[#fff] px-[20px] shadow-md"
+        class="flex h-[78px] cursor-pointer items-center rounded-[11px] bg-[#fff] px-[20px] shadow-md"
       >
       >
         <img
         <img
           v-if="item.imgPhotoFileId"
           v-if="item.imgPhotoFileId"
@@ -326,6 +326,11 @@ watch(
             />
             />
           </svg>
           </svg>
         </div>
         </div>
+        <span
+          class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+        >
+          {{ item.name }}
+        </span>
         <!-- <div class="flex-1">
         <!-- <div class="flex-1">
           <div class="text-sm font-bold">{{ item.name }}</div>
           <div class="text-sm font-bold">{{ item.name }}</div>
           <div class="text-xs text-gray-500">{{ item.code }}</div>
           <div class="text-xs text-gray-500">{{ item.code }}</div>
@@ -341,7 +346,7 @@ watch(
           placement="bottom"
           placement="bottom"
           @menu-click="(info: any) => handleMenuClick(info, item)"
           @menu-click="(info: any) => handleMenuClick(info, item)"
         >
         >
-          <div class="flex cursor-pointer items-center gap-2">
+          <div class="ml-[25px] flex cursor-pointer items-center gap-2">
             <img
             <img
               alt=""
               alt=""
               class="h-[19px] w-[19px] cursor-pointer"
               class="h-[19px] w-[19px] cursor-pointer"

+ 5 - 0
apps/web-velofex/src/views/dashboard/home/application-management.vue

@@ -115,6 +115,11 @@ watch(
             alt=""
             alt=""
             class="h-[24px] w-auto object-contain"
             class="h-[24px] w-auto object-contain"
           />
           />
+          <span
+            class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+          >
+            {{ item.name }}
+          </span>
         </div>
         </div>
       </div>
       </div>
       <div
       <div

+ 5 - 0
apps/web-velofex/src/views/dashboard/home/enterprise-customers.vue

@@ -93,6 +93,11 @@ watch(
             alt=""
             alt=""
             class="h-[24px] w-auto object-contain"
             class="h-[24px] w-auto object-contain"
           />
           />
+          <span
+            class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+          >
+            {{ item.name }}
+          </span>
         </div>
         </div>
       </div>
       </div>
       <div
       <div

+ 5 - 0
apps/web-velofex/src/views/dashboard/home/product-list.vue

@@ -90,6 +90,11 @@ watch(
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           class="h-[30px] w-auto object-contain"
           class="h-[30px] w-auto object-contain"
         />
         />
+        <span
+          class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+        >
+          {{ item.name }}
+        </span>
       </div>
       </div>
       <div
       <div
         class="mt-[24px] flex cursor-pointer items-center rounded-[30px] border border-gray-200 bg-white px-[24px] py-[7px] text-[#810041] shadow-md"
         class="mt-[24px] flex cursor-pointer items-center rounded-[30px] border border-gray-200 bg-white px-[24px] py-[7px] text-[#810041] shadow-md"

+ 5 - 0
apps/web-velofex/src/views/dashboard/home/sales-partners.vue

@@ -96,6 +96,11 @@ watch(
             alt=""
             alt=""
             class="h-[24px] w-auto object-contain"
             class="h-[24px] w-auto object-contain"
           />
           />
+          <span
+            class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+          >
+            {{ partner.name }}
+          </span>
         </div>
         </div>
       </div>
       </div>
       <div
       <div

+ 1 - 1
apps/web-velofex/src/views/dashboard/home/user-info.vue

@@ -37,7 +37,7 @@ function handleEditProfile() {
         v-if="userStore.userInfo?.avatar"
         v-if="userStore.userInfo?.avatar"
         :src="`/File/Download?fileId=${userStore.userInfo?.avatar}`"
         :src="`/File/Download?fileId=${userStore.userInfo?.avatar}`"
         alt=""
         alt=""
-        class="h-[24px] w-auto object-contain"
+        class="h-[52px] w-[52px] object-contain"
       />
       />
       <img
       <img
         v-else
         v-else

+ 7 - 2
apps/web-velofex/src/views/dashboard/sales-partners/index.vue

@@ -318,13 +318,18 @@ watch(
       <div
       <div
         v-for="item in partnerList"
         v-for="item in partnerList"
         :key="item.id"
         :key="item.id"
-        class="flex h-[78px] cursor-pointer items-center gap-[25px] rounded-[11px] bg-[#fff] px-[20px] shadow-md"
+        class="flex h-[78px] cursor-pointer items-center rounded-[11px] bg-[#fff] px-[20px] shadow-md"
       >
       >
         <img
         <img
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           :src="`/File/Download?fileId=${item.imgPhotoFileId}`"
           alt=""
           alt=""
           class="h-[48px] w-auto object-contain"
           class="h-[48px] w-auto object-contain"
         />
         />
+        <span
+          class="ml-[10px] font-['Open_Sans'] text-[13px] font-medium text-[#000]"
+        >
+          {{ item.name }}
+        </span>
         <Dropdown
         <Dropdown
           :menu="{
           :menu="{
             items: [
             items: [
@@ -335,7 +340,7 @@ watch(
           placement="bottom"
           placement="bottom"
           @menu-click="(info: any) => handleMenuClick(info, item)"
           @menu-click="(info: any) => handleMenuClick(info, item)"
         >
         >
-          <div class="flex cursor-pointer items-center gap-2">
+          <div class="ml-[25px] flex cursor-pointer items-center gap-2">
             <img
             <img
               alt=""
               alt=""
               class="h-[19px] w-[19px] cursor-pointer"
               class="h-[19px] w-[19px] cursor-pointer"