From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/app/overview/appCard.tsx |  118 ++++++++++++++++++++++++++++++-----------------------------
 1 files changed, 60 insertions(+), 58 deletions(-)

diff --git a/app/components/app/overview/appCard.tsx b/app/components/app/overview/appCard.tsx
index 04fc8f2..f9f5c1f 100644
--- a/app/components/app/overview/appCard.tsx
+++ b/app/components/app/overview/appCard.tsx
@@ -1,14 +1,14 @@
 'use client'
+import type { HTMLProps } from 'react'
 import React, { useMemo, useState } from 'react'
+import {
+  Cog8ToothIcon,
+  DocumentTextIcon,
+  PaintBrushIcon,
+  RocketLaunchIcon,
+} from '@heroicons/react/24/outline'
 import { usePathname, useRouter } from 'next/navigation'
 import { useTranslation } from 'react-i18next'
-import {
-  RiBookOpenLine,
-  RiEqualizer2Line,
-  RiExternalLinkLine,
-  RiPaintBrushLine,
-  RiWindowLine,
-} from '@remixicon/react'
 import SettingsModal from './settings'
 import EmbeddedModal from './embedded'
 import CustomizeModal from './customize'
@@ -18,6 +18,7 @@
 import AppBasic from '@/app/components/app-sidebar/basic'
 import { asyncRunSafe, randomString } from '@/utils'
 import Button from '@/app/components/base/button'
+import Tag from '@/app/components/base/tag'
 import Switch from '@/app/components/base/switch'
 import Divider from '@/app/components/base/divider'
 import CopyFeedback from '@/app/components/base/copy-feedback'
@@ -27,12 +28,10 @@
 import type { AppDetailResponse } from '@/models/app'
 import { useAppContext } from '@/context/app-context'
 import type { AppSSO } from '@/types/app'
-import Indicator from '@/app/components/header/indicator'
 
 export type IAppCardProps = {
   className?: string
   appInfo: AppDetailResponse & Partial<AppSSO>
-  isInPanel?: boolean
   cardType?: 'api' | 'webapp'
   customBgColor?: string
   onChangeStatus: (val: boolean) => Promise<void>
@@ -40,9 +39,12 @@
   onGenerateCode?: () => Promise<void>
 }
 
+const EmbedIcon = ({ className = '' }: HTMLProps<HTMLDivElement>) => {
+  return <div className={`${style.codeBrowserIcon} ${className}`}></div>
+}
+
 function AppCard({
   appInfo,
-  isInPanel,
   cardType = 'webapp',
   customBgColor,
   onChangeStatus,
@@ -64,18 +66,17 @@
   const OPERATIONS_MAP = useMemo(() => {
     const operationsMap = {
       webapp: [
-        { opName: t('appOverview.overview.appInfo.launch'), opIcon: RiExternalLinkLine },
+        { opName: t('appOverview.overview.appInfo.preview'), opIcon: RocketLaunchIcon },
+        { opName: t('appOverview.overview.appInfo.customize.entry'), opIcon: PaintBrushIcon },
       ] as { opName: string; opIcon: any }[],
-      api: [{ opName: t('appOverview.overview.apiInfo.doc'), opIcon: RiBookOpenLine }],
+      api: [{ opName: t('appOverview.overview.apiInfo.doc'), opIcon: DocumentTextIcon }],
       app: [],
     }
     if (appInfo.mode !== 'completion' && appInfo.mode !== 'workflow')
-      operationsMap.webapp.push({ opName: t('appOverview.overview.appInfo.embedded.entry'), opIcon: RiWindowLine })
-
-    operationsMap.webapp.push({ opName: t('appOverview.overview.appInfo.customize.entry'), opIcon: RiPaintBrushLine })
+      operationsMap.webapp.push({ opName: t('appOverview.overview.appInfo.embedded.entry'), opIcon: EmbedIcon })
 
     if (isCurrentWorkspaceEditor)
-      operationsMap.webapp.push({ opName: t('appOverview.overview.appInfo.settings.entry'), opIcon: RiEqualizer2Line })
+      operationsMap.webapp.push({ opName: t('appOverview.overview.appInfo.settings.entry'), opIcon: Cog8ToothIcon })
 
     return operationsMap
   }, [isCurrentWorkspaceEditor, appInfo, t])
@@ -91,9 +92,13 @@
   const appUrl = `${app_base_url}/${appMode}/${access_token}`
   const apiUrl = appInfo?.api_base_url
 
+  let bgColor = 'bg-primary-50 bg-opacity-40'
+  if (cardType === 'api')
+    bgColor = 'bg-purple-50'
+
   const genClickFuncByName = (opName: string) => {
     switch (opName) {
-      case t('appOverview.overview.appInfo.launch'):
+      case t('appOverview.overview.appInfo.preview'):
         return () => {
           window.open(appUrl, '_blank')
         }
@@ -130,50 +135,49 @@
   return (
     <div
       className={
-        `${isInPanel ? 'border-l-[0.5px] border-t' : 'border-[0.5px] shadow-xs'} w-full max-w-full rounded-xl border-effects-highlight ${className ?? ''}`}
+        `shadow-xs border-[0.5px] rounded-lg border-gray-200 ${className ?? ''}`}
     >
-      <div className={`${customBgColor ?? 'bg-background-default'} rounded-xl`}>
-        <div className='flex w-full flex-col items-start justify-center gap-3 self-stretch border-b-[0.5px] border-divider-subtle p-3'>
-          <div className='flex w-full items-center gap-3 self-stretch'>
-            <AppBasic
-              iconType={cardType}
-              icon={appInfo.icon}
-              icon_background={appInfo.icon_background}
-              name={basicName}
-              type={
-                isApp
-                  ? t('appOverview.overview.appInfo.explanation')
-                  : t('appOverview.overview.apiInfo.explanation')
-              }
-            />
-            <div className='flex items-center gap-1'>
-              <Indicator color={runningStatus ? 'green' : 'yellow'} />
-              <div className={`${runningStatus ? 'text-text-success' : 'text-text-warning'} system-xs-semibold-uppercase`}>
-                {runningStatus
-                  ? t('appOverview.overview.status.running')
-                  : t('appOverview.overview.status.disable')}
-              </div>
-            </div>
+      <div className={`px-6 py-5 ${customBgColor ?? bgColor} rounded-lg`}>
+        <div className="mb-2.5 flex flex-row items-start justify-between">
+          <AppBasic
+            iconType={cardType}
+            icon={appInfo.icon}
+            icon_background={appInfo.icon_background}
+            name={basicName}
+            type={
+              isApp
+                ? t('appOverview.overview.appInfo.explanation')
+                : t('appOverview.overview.apiInfo.explanation')
+            }
+          />
+          <div className="flex flex-row items-center h-9">
+            <Tag className="mr-2" color={runningStatus ? 'green' : 'yellow'}>
+              {runningStatus
+                ? t('appOverview.overview.status.running')
+                : t('appOverview.overview.status.disable')}
+            </Tag>
             <Switch defaultValue={runningStatus} onChange={onChangeStatus} disabled={toggleDisabled} />
           </div>
-          <div className='flex flex-col items-start justify-center self-stretch'>
-            <div className="system-xs-medium pb-1 text-text-tertiary">
+        </div>
+        <div className="flex flex-col justify-center py-2">
+          <div className="py-1">
+            <div className="pb-1 text-xs text-gray-500">
               {isApp
                 ? t('appOverview.overview.appInfo.accessibleAddress')
                 : t('appOverview.overview.apiInfo.accessibleAddress')}
             </div>
-            <div className="inline-flex h-9 w-full items-center gap-0.5 rounded-lg bg-components-input-bg-normal p-1 pl-2">
-              <div className="flex h-4 min-w-0 flex-1 items-start justify-start gap-2 px-1">
-                <div className="overflow-hidden text-ellipsis whitespace-nowrap text-xs font-medium text-text-secondary">
+            <div className="w-full h-9 pl-2 pr-0.5 py-0.5 bg-black bg-opacity-2 rounded-lg border border-black border-opacity-5 justify-start items-center inline-flex">
+              <div className="h-4 px-2 justify-start items-start gap-2 flex flex-1 min-w-0">
+                <div className="text-gray-700 text-xs font-medium text-ellipsis overflow-hidden whitespace-nowrap">
                   {isApp ? appUrl : apiUrl}
                 </div>
               </div>
+              <Divider type="vertical" className="!h-3.5 shrink-0 !mx-0.5" />
+              {isApp && <ShareQRCode content={isApp ? appUrl : apiUrl} selectorId={randomString(8)} className={'hover:bg-gray-200'} />}
               <CopyFeedback
                 content={isApp ? appUrl : apiUrl}
-                className={'!size-6'}
+                className={'hover:bg-gray-200'}
               />
-              {isApp && <ShareQRCode content={isApp ? appUrl : apiUrl} className='z-50 !size-6 rounded-md hover:bg-state-base-hover' selectorId={randomString(8)} />}
-              {isApp && <Divider type="vertical" className="!mx-0.5 !h-3.5 shrink-0" />}
               {/* button copy link/ button regenerate */}
               {showConfirmDelete && (
                 <Confirm
@@ -193,12 +197,12 @@
                   popupContent={t('appOverview.overview.appInfo.regenerate') || ''}
                 >
                   <div
-                    className="h-6 w-6 cursor-pointer rounded-md hover:bg-state-base-hover"
+                    className="w-8 h-8 ml-0.5 cursor-pointer hover:bg-gray-200 rounded-lg"
                     onClick={() => setShowConfirmDelete(true)}
                   >
                     <div
                       className={
-                        `h-full w-full ${style.refreshIcon} ${genLoading ? style.generateLogo : ''}`}
+                        `w-full h-full ${style.refreshIcon} ${genLoading ? style.generateLogo : ''}`}
                     ></div>
                   </div>
                 </Tooltip>
@@ -206,8 +210,8 @@
             </div>
           </div>
         </div>
-        <div className={'flex items-center gap-1 self-stretch p-3'}>
-          {!isApp && <SecretKeyButton appId={appInfo.id} />}
+        <div className={'pt-2 flex flex-row items-center flex-wrap gap-y-2'}>
+          {!isApp && <SecretKeyButton className='flex-shrink-0 !h-8 bg-white mr-2' textCls='!text-gray-700 font-medium' iconCls='stroke-[1.2px]' appId={appInfo.id} />}
           {OPERATIONS_MAP[cardType].map((op) => {
             const disabled
               = op.opName === t('appOverview.overview.appInfo.settings.entry')
@@ -215,9 +219,7 @@
                 : !runningStatus
             return (
               <Button
-                className="mr-1 min-w-[88px]"
-                size="small"
-                variant={'ghost'}
+                className="mr-2"
                 key={op.opName}
                 onClick={genClickFuncByName(op.opName)}
                 disabled={disabled}
@@ -228,9 +230,9 @@
                   }
                   popupClassName={disabled ? 'mt-[-8px]' : '!hidden'}
                 >
-                  <div className="flex items-center justify-center gap-[1px]">
-                    <op.opIcon className="h-3.5 w-3.5" />
-                    <div className={`${runningStatus ? 'text-text-tertiary' : 'text-components-button-ghost-text-disabled'} system-xs-medium px-[3px]`}>{op.opName}</div>
+                  <div className="flex flex-row items-center">
+                    <op.opIcon className="h-4 w-4 mr-1.5 stroke-[1.8px]" />
+                    <span className="text-[13px]">{op.opName}</span>
                   </div>
                 </Tooltip>
               </Button>

--
Gitblit v1.8.0