zjk
2026-02-09 6cc35b281d6695d41e3ebe9475aa9d4f0399119b
feat: layout调整
1个文件已添加
18个文件已修改
630 ■■■■■ 已修改文件
.env 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locales/en_US.json 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locales/zh_CN.json 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.svg 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/AppMain.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/common/LangsSwitch.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/custom/SearchPanel.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/Content.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/common/Logo.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/header/UserCenter.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/tab/TabBarItem.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.static.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/app/theme.json 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/styles/robotaxi.scss 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operationsManagement/geofenceManagement/index.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/transactionStrategy/index.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env
@@ -2,7 +2,7 @@
VITE_BASE_URL = /
# 项目名称
VITE_APP_NAME = 小鹏运营管理平台
VITE_APP_NAME = RT后台
# 路由模式 web | hash
VITE_ROUTE_MODE = web
index.html
@@ -5,7 +5,7 @@
  <meta charset="UTF-8" />
  <link rel="icon" href="/favicon.svg" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>小鹏运营管理平台</title>
  <title>RT后台</title>
</head>
<body>
locales/en_US.json
@@ -128,7 +128,33 @@
    "order": "Order",
    "evaluationRecord": "Evaluation record",
    "transactionStrategy": "Transaction strategy",
    "navigationAndRoutePlanning": "Navigation and route planning"
    "navigationAndRoutePlanning": "Navigation and route planning",
    "accountPermission": "账号权限管理",
    "accountManagement": "账号管理",
    "permissionGroup": "权限组管理",
    "permissionGroupForm": "权限组表单",
    "roleManagement": "角色管理",
    "roleDetail": "角色详情",
    "activityAndPricing": "活动及定价管理",
    "pricingManagement": "定价管理",
    "pricingDetail": "定价详情",
    "rules": "计费规则",
    "whitelistManagement": "白名单管理",
    "invitationCode": "邀请码管理",
    "whitelist": "白名单管理",
    "whitelistLog": "白名单日志",
    "operationsManagement": "运营管理",
    "openCity": "开通城市管理",
    "pointManagement": "点位管理",
    "geofenceManagement": "围栏管理",
    "geofenceDetail": "围栏详情",
    "vehicleManagement": "车辆管理",
    "inventoryVehicle": "车辆库存管理",
    "addInventoryVehicle": "新增车辆",
    "operatingVehicle": "运营车辆管理",
    "operatingVehicleDetail": "运营车辆详情",
    "fleetManagement": "车队管理",
    "fleetManagementDetail": "车队详情"
  },
  "transaction": {
    "export": "Export order",
locales/zh_CN.json
@@ -8,7 +8,7 @@
    "navigate": "切换",
    "inputPlaceholder": "请输入",
    "selectPlaceholder": "请选择",
    "search": "搜索",
    "search": "查询",
    "reset": "重置",
    "export": "导出",
    "expand": "展开",
@@ -131,7 +131,33 @@
    "order": "订单管理",
    "evaluationRecord": "评价记录",
    "transactionStrategy": "交易策略",
    "navigationAndRoutePlanning": "导航及路线规划"
    "navigationAndRoutePlanning": "导航及路线规划",
    "accountPermission": "账号权限管理",
    "accountManagement": "账号管理",
    "permissionGroup": "权限组管理",
    "permissionGroupForm": "权限组表单",
    "roleManagement": "角色管理",
    "roleDetail": "角色详情",
    "activityAndPricing": "活动及定价管理",
    "pricingManagement": "定价管理",
    "pricingDetail": "定价详情",
    "rules": "计费规则",
    "whitelistManagement": "白名单管理",
    "invitationCode": "邀请码管理",
    "whitelist": "白名单管理",
    "whitelistLog": "白名单日志",
    "operationsManagement": "运营管理",
    "openCity": "开通城市管理",
    "pointManagement": "点位管理",
    "geofenceManagement": "围栏管理",
    "geofenceDetail": "围栏详情",
    "vehicleManagement": "车辆管理",
    "inventoryVehicle": "车辆库存管理",
    "addInventoryVehicle": "新增车辆",
    "operatingVehicle": "运营车辆管理",
    "operatingVehicleDetail": "运营车辆详情",
    "fleetManagement": "车队管理",
    "fleetManagementDetail": "车队详情"
  },
  "transaction": {
    "export": "导出订单",
package.json
@@ -19,7 +19,6 @@
  "dependencies": {
    "@vueuse/core": "^13.6.0",
    "alova": "^3.3.4",
    "ant-design-vue": "~4.2.6",
    "colord": "^2.9.3",
    "echarts": "^5.6.0",
    "md-editor-v3": "^5.6.1",
public/favicon.svg
@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="400" height="400" viewBox="0 0 400 400"><defs><clipPath id="master_svg0_9_38"><rect x="0" y="0" width="400" height="400" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_9_38)"><g><g><path d="M62.99998474121094,251.565L199.99998474121094,366L200.27298474121093,365.772L200.49998474121094,366L203.01798474121094,363.479L336.99998474121094,251.565L199.99998474121094,37L62.99998474121094,251.565ZM200.20898474121094,365.708L200.27298474121093,365.772L203.01798474121094,363.479L294.99998474121094,271.39099999999996L200.49998474121094,94L105.99998474121094,271.39099999999996L198.73798474121094,364.236L145.99998474121094,290.522L199.99998474121094,149L253.99998474121094,290.522L200.20898474121094,365.708Z" fill-rule="evenodd" fill="#56CB46" fill-opacity="1"/></g></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><defs><linearGradient x1="0.9444345235824585" y1="0.4999999701976776" x2="0.15886342525482897" y2="0.5000000617001206" id="master_svg0_1_2191"><stop offset="0%" stop-color="#3DF661" stop-opacity="1"/><stop offset="97.83104658126831%" stop-color="#61DCF3" stop-opacity="1"/><stop offset="100%" stop-color="#61DCF3" stop-opacity="1"/></linearGradient><linearGradient x1="0.9645051956176758" y1="0.5" x2="0.28273433446884294" y2="0.49999995110556483" id="master_svg1_1_2206"><stop offset="0%" stop-color="#3DE8FF" stop-opacity="1"/><stop offset="100%" stop-color="#1578ED" stop-opacity="1"/></linearGradient><linearGradient x1="0.9594921469688416" y1="0.5000000596046448" x2="-2.2761513562841174e-8" y2="0.5000000596046448" id="master_svg2_1_2198"><stop offset="0%" stop-color="#138EFF" stop-opacity="1"/><stop offset="100%" stop-color="#004EE4" stop-opacity="1"/></linearGradient></defs><g><path d="M10.40821059461453,15.850779828125L13.109685935644531,19.317672828124998C13.299167135644531,19.560838828125,13.593389035644531,19.700780828124998,13.901663735644531,19.700780828124998L18.990495635644532,19.700780828124998C19.15700813564453,19.700781828125002,19.257646535644533,19.507556828125,19.15529923564453,19.376210828125L13.88222833564453,12.609103228125C13.600628835644532,12.247715928125,13.600628835644532,11.753845228125,13.88222833564453,11.392458928125L19.15529923564453,4.6253511581249995C19.257646535644533,4.494005858125,19.15700813564453,4.300781250005,18.990495635644532,4.300781250005L13.901663735644531,4.300781250005C13.593389035644531,4.300781250005,13.299167135644531,4.440721588125,13.109685935644531,4.683888938125L10.40821077916453,8.150782128125L12.934192635644532,11.392458928125C13.215792635644531,11.753845228125,13.215792635644531,12.247715928125,12.934192635644532,12.609102228125L10.40821059461453,15.850779828125Z" fill-rule="evenodd" fill="url(#master_svg0_1_2191)" fill-opacity="1"/></g><path d="M1.22630879,4.30078125C2.30153385,4.30078125,5.16091255,4.30078125,6.31514075,4.30078125C6.62341545,4.30078125,6.91763735,4.44072159,7.10711865,4.68388894C8.07751895,5.92923595,11.14837575,9.870168249999999,12.33457575,11.39245895C12.61617575,11.753845250000001,12.61617575,12.24771595,12.33457575,12.60910225C11.14837575,14.13139345,8.07751895,18.07232625,7.10711865,19.31767225C6.91763735,19.56083825,6.62341545,19.70078125,6.31514075,19.70078125C5.16091255,19.70078125,2.30153385,19.70078125,1.22630879,19.70078125C1.05979592,19.70078225,0.95915839,19.507557249999998,1.06150547,19.37621125C2.20170925,17.91294925,6.80859325,12.00078105,6.80859325,12.00078105C6.80859325,12.00078105,2.20170895,6.08861255,1.06150535,4.62535116C0.95915839,4.49400586,1.05979592,4.30078125,1.22630879,4.30078125" fill="url(#master_svg1_1_2206)" fill-opacity="1"/><path d="M1.2218304,4.30078125C1.80748117,4.30078125,2.8085936499999997,4.30078125,2.8085936499999997,4.30078125C2.8085936499999997,4.30078125,6.91713095,9.57340385,8.33457615,11.39245895C8.61617515,11.753845250000001,8.61617515,12.24771595,8.33457565,12.60910225C6.91713095,14.42815825,2.8085936499999997,19.70078125,2.8085936499999997,19.70078125C2.8085936499999997,19.70078125,1.80748123,19.70078125,1.22183046,19.70078125C1.05531748,19.70078025,0.95915839,19.507557249999998,1.06150547,19.37621125C1.97724685,18.20100925,5.12910505,14.15612415,6.33457615,12.60910325C6.61617565,12.24771595,6.61617565,11.753845250000001,6.33457615,11.39245895C5.12910555,9.84543805,1.97724665,5.80055245,1.06150535,4.62535116C0.95915839,4.49400586,1.05531748,4.30078125,1.22183037,4.30078125" fill="url(#master_svg2_1_2198)" fill-opacity="1"/></svg>
src/AppMain.vue
@@ -5,8 +5,6 @@
import { naiveI18nOptions } from '@/utils'
import { darkTheme } from 'naive-ui'
import { useAppStore } from './store'
import Antd from 'ant-design-vue';
// import 'ant-design-vue/dist/reset.css';
// 创建异步初始化 Promise - 这会让组件变成异步组件
const initializationPromise = (async () => {
@@ -21,8 +19,6 @@
  // 注册模块 Vue-router
  await installRouter(app)
  app.use(Antd)
  // 注册模块 指令/静态资源
  const modules = import.meta.glob<{ install: (app: App) => void }>('./modules/*.ts', {
@@ -43,12 +39,12 @@
  return naiveI18nOptions[appStore.lang] ? naiveI18nOptions[appStore.lang] : naiveI18nOptions.enUS
})
</script>
<!-- :theme="appStore.colorMode === 'dark' ? darkTheme : null" -->
<template>
  <n-config-provider
    class="wh-full"
    inline-theme-disabled
    :theme="appStore.colorMode === 'dark' ? darkTheme : null"
    :theme="null"
    :locale="naiveLocale.locale"
    :date-locale="naiveLocale.dateLocale"
    :theme-overrides="appStore.theme"
@@ -59,3 +55,7 @@
    </naive-provider>
  </n-config-provider>
</template>
<style lang="scss">
@use './styles/robotaxi.scss';
</style>
src/components/common/LangsSwitch.vue
@@ -17,7 +17,7 @@
<template>
  <n-popselect :value="appStore.lang" :options="options" trigger="click" @update:value="appStore.setAppLang">
    <CommonWrapper>
      <icon-park-outline-translate />
      <icon-park-outline-translate  class="color-[#fff]"/>
    </CommonWrapper>
  </n-popselect>
</template>
src/components/custom/SearchPanel.vue
@@ -1,5 +1,5 @@
<template>
  <n-card ref="wrapperRef" class="search-panel">
  <div ref="wrapperRef" class="search-panel">
    <n-grid :cols="cols" :collapsed="collapsed" :collapsed-rows="collapsedRows" x-gap="24" y-gap="16">
      <!-- 查询条件 -->
      <slot />
@@ -18,7 +18,7 @@
        </div>
      </n-gi>
    </n-grid>
  </n-card>
  </div>
</template>
<script setup lang="ts">
@@ -106,6 +106,6 @@
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 12px;
  gap: 8px;
}
</style>
src/layouts/Content.vue
@@ -9,9 +9,9 @@
  <n-el
    class="h-full robotaxi-content"
    :class="[
      appStore.layoutMode === 'full-content' ? 'p-0' : 'p-16px',
      appStore.layoutMode === 'full-content' ? 'p-0' : 'p-12px',
    ]"
    style="background-color: var(--action-color);"
    style="background-color: #F4F6F8"
  >
    <router-view
      v-slot="{ Component, route }"
src/layouts/components/common/Logo.vue
@@ -18,16 +18,21 @@
</script>
<template>
  <div
    class="h-60px text-xl flex-center cursor-pointer gap-2 p-x-2"
    @click="router.push('/')"
  >
    <!-- <svg-icons-logo class="text-1.5em" /> -->
    <span
      v-show="!hidenLogoText"
      class="text-ellipsis overflow-hidden whitespace-nowrap"
    >{{ name }}</span>
  <div class="h-68px flex-center cursor-pointer gap-2 p-x-2" @click="router.push('/')">
    <img src="/favicon.svg" alt="logo" class="w-24px h-24px" />
    <span v-show="!hidenLogoText" class="text-ellipsis overflow-hidden whitespace-nowrap title">{{ name }}</span>
  </div>
</template>
<style scoped></style>
<style scoped lang="scss">
.title {
  font-family: Alibaba PuHuiTi 2.0;
  font-size: 13px;
  font-weight: 600;
  line-height: 24px;
  display: flex;
  align-items: center;
  letter-spacing: normal;
  color: #FFFFFF;
}
</style>
src/layouts/components/header/UserCenter.vue
@@ -43,7 +43,7 @@
  >
    <n-avatar
      round
      class="cursor-pointer"
      class="cursor-pointer w-[24px] h-[24px]"
      :src="userInfo?.avatar"
    >
      <template #fallback>
src/layouts/components/tab/TabBarItem.vue
@@ -17,7 +17,7 @@
    class="cursor-pointer p-x-4 p-y-2 m-x-2px b b-[--divider-color] b-b-[#0000] rounded-[--border-radius]"
    :class="[
      value === route.fullPath ? 'c-[--primary-color]' : 'c-[--text-color-2]',
      value === route.fullPath ? 'bg-[#0000]' : 'bg-[--tab-color]',
      value !== route.fullPath ? 'bg-[#0000]' : 'bg-[--tab-color]',
      closable && 'p-r-2',
    ]"
    style="transition: box-shadow .3s var(--n-bezier), color .3s var(--n-bezier), background-color .3s var(--n-bezier), border-color .3s var(--n-bezier);"
src/layouts/index.vue
@@ -60,7 +60,7 @@
    nav-fixed
    show-nav
    show-sidebar
    :nav-height="60"
    :nav-height="36"
    :tabbar-height="45"
    :footer-height="40"
    :sidebar-width="sidebarWidth"
@@ -73,14 +73,14 @@
    <template #nav-left>
      <template v-if="appStore.isMobile">
        <Logo />
        <!-- <Logo /> -->
      </template>
      <template v-else>
        <div v-if="!hasHorizontalMenu || !hidenCollapaseButton" class="h-full flex-y-center gap-1 p-x-sm">
        <!-- <div v-if="!hasHorizontalMenu || !hidenCollapaseButton" class="h-full flex-y-center gap-1 p-x-sm">
          <CollapaseButton v-if="!hidenCollapaseButton" />
          <Breadcrumb v-if="!hasHorizontalMenu" />
        </div>
        </div> -->
      </template>
    </template>
src/router/routes.static.ts
@@ -13,7 +13,7 @@
  {
    name: 'workbench',
    path: '/dashboard/workbench',
    title: '工作台',
    title: '首页',
    requiresAuth: true,
    icon: 'icon-park-outline:home',
    pinTab: true,
src/store/app/theme.json
@@ -19,6 +19,287 @@
    "errorColor": "#E02716",
    "errorColorHover": "#F14637",
    "errorColorPressed": "#D02213",
    "errorColorSuppl": "#FFF3F1"
  }
    "errorColorSuppl": "#FFF3F1",
    "fontSize": "13px",
    "textColorBase": "#171F26",
    "heightMedium": "32px"
  },
  "Form": {
    "labelFontSizeLeftMedium": "13px",
    "labelFontSizeTopMedium": "13px",
    "labelTextColor": "#171F26"
  },
  "DataTable": {
    "fontSizeMedium": "13px",
    "thTextColor": "#171F26",
    "tdTextColor": "#171F26",
    "borderColor": "#f3f4f4",
    "tdPaddingMedium": "11px 16px",
    "thPaddingMedium": "11px 16px",
    "lineHeight": "18px"
  },
  "Button": {
    "fontSizeMedium": "13px",
    "borderRadiusMedium": "4px"
  },
  "Pagination": {
    "itemFontSizeMedium": "13px",
    "jumperFontSizeMedium": "13px"
  },
  "Alert": {
    "fontSize": "13px"
  },
  "Anchor": {
    "linkFontSize": "13px"
  },
  "AutoComplete": {
    "optionFontSizeMedium": "13px"
  },
  "Avatar": {
    "fontSize": "13px"
  },
  "AvatarGroup": {
    "fontSize": "13px"
  },
  "BackTop": {},
  "Badge": {
    "fontSize": "13px"
  },
  "Breadcrumb": {
    "fontSize": "13px"
  },
  "ButtonGroup": {},
  "Calendar": {
    "fontSizeMedium": "13px",
    "titleFontSizeMedium": "13px"
  },
  "Card": {
    "fontSizeMedium": "13px",
    "titleFontSizeMedium": "13px"
  },
  "Carousel": {},
  "Cascader": {
    "optionFontSize": "13px"
  },
  "Checkbox": {
    "fontSizeMedium": "13px"
  },
  "Code": {
    "fontSize": "13px"
  },
  "Collapse": {
    "fontSize": "13px"
  },
  "CollapseTransition": {},
  "ColorPicker": {
    "fontSizeMedium": "13px",
    "panelFontSize": "13px"
  },
  "DatePicker": {
    "itemFontSize": "13px",
    "calendarDaysFontSize": "13px",
    "calendarTitleFontSize": "13px"
  },
  "Descriptions": {
    "fontSizeMedium": "13px"
  },
  "Dialog": {
    "fontSize": "13px"
  },
  "Divider": {},
  "Drawer": {
    "titleFontSize": "13px"
  },
  "Dropdown": {
    "fontSizeMedium": "13px"
  },
  "DynamicInput": {
    "fontSizeMedium": "13px"
  },
  "DynamicTags": {
    "fontSizeMedium": "13px"
  },
  "Element": {},
  "Ellipsis": {
    "fontSize": "13px"
  },
  "Empty": {
    "fontSizeMedium": "13px"
  },
  "Equation": {},
  "Flex": {},
  "FloatButton": {},
  "FloatButtonGroup": {},
  "GradientText": {},
  "Icon": {},
  "IconWrapper": {},
  "Image": {
    "fontSize": "13px"
  },
  "Input": {
    "fontSizeMedium": "13px"
  },
  "InputNumber": {
    "fontSizeMedium": "13px"
  },
  "Layout": {},
  "LegacyTransfer": {
    "fontSizeMedium": "13px"
  },
  "List": {
    "fontSize": "13px"
  },
  "LoadingBar": {},
  "Log": {
    "loaderFontSize": "13px"
  },
  "Menu": {
    "fontSize": "13px",
    "itemTextColor": "#fff",
    "itemTextColorHover": "#fff",
    "itemTextColorActive": "#fff",
    "itemTextColorActiveHover": "#fff",
    "itemTextColorChildActive": "#fff",
    "itemTextColorChildActiveHover": "#fff",
    "itemIconColor": "rgba(255, 255, 255, 0.6)",
    "itemIconColorHover": "rgba(255, 255, 255, 0.6)",
    "itemIconColorActive": "rgba(255, 255, 255, 0.6)",
    "itemIconColorActiveHover": "rgba(255, 255, 255, 0.6)",
    "itemIconColorChildActive": "rgba(255, 255, 255, 0.6)",
    "itemIconColorChildActiveHover": "rgba(255, 255, 255, 0.6)",
    "itemIconColorCollapsed": "rgba(255, 255, 255, 0.6)",
    "arrowColor": "rgba(255, 255, 255, 0.6)",
    "arrowColorHover": "rgba(255, 255, 255, 0.6)",
    "arrowColorActive": "rgba(255, 255, 255, 0.6)",
    "arrowColorActiveHover": "rgba(255, 255, 255, 0.6)",
    "arrowColorChildActive": "rgba(255, 255, 255, 0.6)",
    "arrowColorChildActiveHover": "rgba(255, 255, 255, 0.6)",
    "itemColorHover": "rgba(255, 255, 255, 0.1)",
    "itemColorActive": "#2B3545",
    "itemHeight": "48px"
  },
  "Mention": {
    "optionFontSizeMedium": "13px"
  },
  "Message": {
    "fontSize": "13px"
  },
  "Modal": {
    "fontSize": "13px",
    "titleFontSize": "13px"
  },
  "Notification": {
    "fontSize": "13px",
    "titleFontSize": "13px",
    "metaFontSize": "13px",
    "descriptionFontSize": "13px"
  },
  "PageHeader": {
    "fontSize": "13px",
    "titleFontSize": "13px"
  },
  "Popconfirm": {
    "fontSize": "13px"
  },
  "Popover": {
    "fontSize": "13px"
  },
  "Popselect": {
    "fontSize": "13px"
  },
  "Progress": {
    "fontSize": "13px",
    "fontSizeCircle": "13px"
  },
  "QrCode": {},
  "Radio": {
    "fontSizeMedium": "13px"
  },
  "Rate": {},
  "Result": {
    "fontSizeMedium": "13px",
    "titleFontSizeMedium": "13px"
  },
  "Scrollbar": {},
  "Select": {},
  "Skeleton": {},
  "Slider": {
    "fontSize": "13px",
    "markFontSize": "13px"
  },
  "Space": {},
  "Spin": {
    "fontSize": "13px"
  },
  "Statistic": {
    "labelFontSize": "13px",
    "valueFontSize": "13px"
  },
  "Steps": {
    "stepHeaderFontSizeMedium": "13px",
    "indicatorIndexFontSizeMedium": "13px"
  },
  "Switch": {},
  "Table": {
    "fontSizeMedium": "13px"
  },
  "Tabs": {
    "tabFontSizeCard": "13px",
    "tabFontSizeMedium": "13px"
  },
  "Tag": {
    "fontSizeMedium": "12px",
    "heightMedium": "20px",
    "padding": "0px 8px",
    "borderRadius": "4px",
    "textColor": "#171F26",
    "color": "#E8E9E9"
  },
  "Thing": {
    "fontSize": "13px"
  },
  "TimePicker": {
    "itemFontSize": "13px"
  },
  "Timeline": {
    "titleFontSizeMedium": "13px",
    "contentFontSize": "13px"
  },
  "Tooltip": {},
  "Transfer": {
    "titleFontSizeMedium": "13px",
    "fontSizeMedium": "13px"
  },
  "Tree": {
    "fontSize": "13px"
  },
  "TreeSelect": {},
  "Typography": {
    "blockquoteFontSize": "13px",
    "liFontSize": "13px",
    "pFontSize": "13px",
    "headerFontSize1": "13px",
    "headerFontSize2": "13px",
    "headerFontSize3": "13px",
    "headerFontSize4": "13px",
    "headerFontSize5": "13px",
    "headerFontSize6": "13px"
  },
  "Upload": {
    "fontSize": "13px"
  },
  "Watermark": {},
  "Split": {},
  "Row": {},
  "Marquee": {},
  "Heatmap": {
    "fontSizeMedium": "13px"
  },
  "InternalSelectMenu": {
    "optionFontSizeMedium": "13px"
  },
  "InternalSelection": {
    "optionFontSizeMedium": "13px"
  },
  "InputOtp": {}
}
src/styles/robotaxi.scss
New file
@@ -0,0 +1,70 @@
/* 页面列表样式 */
.n-pro-layout__nav,
.n-pro-layout__aside,
.n-pro-layout__logo,
.n-pro-layout__sidebar {
  background: #3D4C63;
  border-right: none !important;
}
.n-pro-layout__tabbar {
  height: 40px !important;
  border: none !important;
}
.n-pro-layout__content {
  margin-top: 76px !important;
}
.n-pro-layout__logo {
  height: 68px !important;
}
.roboTaxi {
  .roboTaxi-form-card {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    padding: 16px;
    gap: 16px;
    align-self: stretch;
    z-index: 0;
    border-radius: 6px;
    background: #FFFFFF;
    box-shadow: 0px 0px 10px 0px rgba(23, 31, 38, 0.05);
  }
  .search-panel {
    button {
      min-width: 84px;
    }
    .n-button--secondary {
      box-sizing: border-box;
      border: 1px solid rgba(23, 31, 38, 0.15);
    }
  }
  .n-button--secondary {
    box-sizing: border-box;
    border: 1px solid #7ABDFF;
  }
  .n-card {
    border-radius: 6px;
  }
  .n-card-header {
    padding: 12px;
  }
  .n-card__content {
    padding: 12px;
    padding-top: 0;
  }
  .n-base-selection-input__content {
    font-size: 13px;
  }
}
src/views/operationsManagement/geofenceManagement/index.vue
@@ -31,75 +31,81 @@
const columns = computed<DataTableColumns<any>>(() => [
   {
    title: '围栏ID',
    align: 'center',
    key: 'id',
    resizable: true,
    ellipsis: true
  },
  {
    title: '围栏名称',
    align: 'center',
    key: 'name',
    ellipsis: true
    resizable: true,
    ellipsis: true,
    render(row) {
      return h(
        'div',
        {
          class: 'cursor-pointer text-ellipsis whitespace-nowrap w-full overflow-hidden text-[#0068FF]'
        },
        {
          default: () => row.name
        }
      )
    }
  },
  {
    title: '围栏构成',
    align: 'center',
    key: 'polygon',
    resizable: true,
    ellipsis: true
  },
  {
    title: '状态',
    align: 'center',
    key: 'status',
    ellipsis: true,
    resizable: true,
    render(row) {
        return h(
          NTag,
          {
            style: {
              marginRight: '6px'
            },
            round: true,
            type: row.status === 1 ? 'default' : row.status === 2 ? 'success' : 'info',
            type: row.status === 1 || row.status === 3 ? 'default' : row.status === 2 ? 'success' : 'warning',
            bordered: false
          },
          {
            default: () => row.status === 1 ? '草稿' : row.status === 2 ? '启用中' : '已停用'
            default: () => row.status === 1 ? '草稿' : row.status === 2 ? '启用中' : row.status === 3 ? '已停用' : '待生效'
          }
        )
      }
  },
  {
    title: '更新人',
    align: 'center',
    key: 'updateUser',
    ellipsis: true
    ellipsis: true,
    resizable: true
  },
  {
    title: '更新时间',
    align: 'center',
    key: 'updateTime',
    ellipsis: true,
    resizable: true,
    sorter: true
  },
  {
    title: '创建人',
    align: 'center',
    key: 'createUser',
    ellipsis: true
    ellipsis: true,
    resizable: true
  },
  {
    title: '创建时间',
    align: 'center',
    key: 'createTime',
    ellipsis: true,
    sorter: true
    sorter: true,
    resizable: true
  },
  {
    title: '操作',
    align: 'center',
    key: 'actions',
    width: 260,
    width: 100,
    fixed: 'right',
    render: (row) => {
      return (
@@ -114,6 +120,7 @@
          <NButton
            text
            type="primary"
            disabled={row.status === 2}
          >
            复制
          </NButton>
@@ -135,6 +142,10 @@
  {
    label: '已停用',
    value: 3,
  },
  {
    label: '待生效',
    value: 4,
  },
]
@@ -203,11 +214,31 @@
        updateUser: '张三',
        createUser: '张三',
      },
      {
        id: 2,
        name: '四川省成都市',
        status: 3,
        polygon: '1运营区域|2禁行区域',
        createTime: '2023-01-01 10:00:00',
        updateTime: '2023-01-01 10:00:00',
        updateUser: '张三',
        createUser: '张三',
      },
      {
        id: 2,
        name: '四川省成都市',
        status: 4,
        polygon: '1运营区域|2禁行区域',
        createTime: '2023-01-01 10:00:00',
        updateTime: '2023-01-01 10:00:00',
        updateUser: '张三',
        createUser: '张三',
      },
    ]
    listData.value.forEach((item: any, index: number)  => {
      item.serialNumber = index + 1
    })
    count.value = 1
    count.value = listData.value.length
    endLoading()
  }, 1000)
}
@@ -232,9 +263,9 @@
</script>
<template>
  <n-flex>
    <NSpace vertical class="flex-1">
      <n-card>
  <n-flex class="roboTaxi">
    <NSpace vertical class="flex-1" :size="12">
      <div class="roboTaxi-form-card">
        <n-form ref="formRef" :model="model" label-placement="left" inline :show-feedback="false">
          <SearchPanel>
            <n-gi v-for="item in filterItems" :key="item.path">
@@ -244,30 +275,26 @@
            </n-gi>
            <template #action>
              <NButton strong secondary @click="handleResetSearch">
                <template #icon>
                  <icon-park-outline-redo />
                </template>
                {{ $t('common.reset') }}
              </NButton>
              <NButton type="primary" @click="getList">
                <template #icon>
                  <icon-park-outline-search />
                </template>
                {{ $t('common.search') }}
              </NButton>
            </template>
          </SearchPanel>
        </n-form>
      </n-card>
      </div>
      <n-card class="flex-1">
        <template #header>
          <NButton type="primary" @click="handleToDetail({}, 'add')">
            新建围栏
          </NButton>
          <n-flex justify="flex-end">
            <NButton type="primary" secondary @click="handleToDetail({}, 'add')">
              新建围栏
            </NButton>
          </n-flex>
        </template>
        <NSpace vertical>
          <n-data-table :columns="columns" :data="listData" :loading="loading" />
          <n-data-table :columns="columns" :data="listData" :loading="loading" :bordered="false" :header-height="18" :row-height="18"/>
          <Pagination :count="count" @change="changePage" />
        </NSpace>
      </n-card>
src/views/transaction/transactionStrategy/index.vue
@@ -128,10 +128,10 @@
    <n-card>
      <n-form ref="formRef" :model="model" label-placement="left" inline :show-feedback="false"
        require-mark-placement="left">
        <NSpace vertical>
          <n-spin :show="loading">
        <n-spin :show="loading">
          <NSpace vertical :size="16">
            <!-- 发单策略 -->
            <NSpace vertical>
            <NSpace vertical :size="16">
              <div class="text-base font-bold">发单策略</div>
              <div class="pl-4">
                <n-form-item label="用户取消订单" path="condition_1" required>
@@ -139,7 +139,7 @@
                    <template #trigger>
                      <icon-park-outline-help />
                    </template>
                      自然日(00:00~24:00)内用户取消订单数超过X单后,不播单
                    自然日(00:00~24:00)内用户取消订单数超过X单后,不播单
                  </n-tooltip>
                </n-form-item>
              </div>
@@ -150,76 +150,76 @@
              </div>
            </NSpace>
            <!-- 发单拦截策略 -->
            <NSpace vertical>
            <NSpace vertical :size="16">
              <div class="text-base font-bold">发单拦截策略</div>
              <div class="pl-4">
                <n-form-item label="小额豁免配置" path="condition_1" />
              </div>
              <NSpace vertical class="pl-20">
              <NSpace vertical class="pl-20" :size="16">
                <n-form-item label="金额上限" path="condition_1" required>
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"
                    class="mr-2" />元内可豁免
                </n-form-item>
                <n-form-item label="豁免城市" path="condition_1" required>
                  <PcaCascader v-model:value="model.condition_1" />
                  <PcaCascader v-model:value="model.condition_1" class="w-[240px]" />
                </n-form-item>
                <n-form-item label="豁免时效" path="condition_1" required>
                  <n-date-picker v-model:value="model.condition_1" type="daterange" clearable class="mr-2" />
                  <n-date-picker v-model:value="model.condition_1" type="daterange" clearable class="mr-2 w-[240px]" />
                  <n-checkbox v-model:checked="model.condition_2">
                    长期有效
                  </n-checkbox>
                </n-form-item>
                <n-form-item label="豁免角色" path="condition_1" required>
                  <n-select v-model:value="model.condition_3" :options="options" multiple />
                  <n-select v-model:value="model.condition_3" :options="options" multiple class="w-[240px]" />
                </n-form-item>
              </NSpace>
              <div class="pl-4">
                <n-form-item label="分级预付配置" path="condition_1" />
              </div>
              <NSpace vertical class="pl-20">
              <NSpace vertical class="pl-20" :size="16">
                <n-form-item label="小额免密授权" path="condition_1">
                  订单>
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  元,需免密授权
                </n-form-item>
                <n-form-item label="预付" path="condition_1" required>
                  订单>
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  元,需预付
                </n-form-item>
              </NSpace>
            </NSpace>
            <!-- 播单策略 -->
            <NSpace vertical>
            <NSpace vertical :size="16">
              <div class="text-base font-bold">播单策略</div>
              <NSpace vertical class="pl-20">
              <NSpace vertical class="pl-20" :size="16">
                <n-form-item label="第一轮推单" path="condition_1" required>
                  推单距离为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  公里,推单时间为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  秒
                </n-form-item>
                <n-form-item label="第二轮推单" path="condition_1" required>
                  推单距离为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  公里,推单时间为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  秒
                </n-form-item>
                <n-form-item label="第三轮推单" path="condition_1" required>
                  推单距离为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  公里,推单时间为
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mr-2" />
                  <n-input-number v-model:value="model.condition_1" min="0" :show-button="false" class="mx-2" />
                  秒
                </n-form-item>
              </NSpace>
            </NSpace>
            <!-- 分单策略 -->
            <NSpace vertical>
            <NSpace vertical :size="16">
              <div class="text-base font-bold">分单策略</div>
              <NSpace vertical class="pl-20">
              <NSpace vertical class="pl-20" :size="16">
                <n-form-item label="举手规则配置" path="condition_1" required>
                  <n-radio-group v-model:value="model.condition_1" name="radiobuttongroup1">
                    <n-radio-button :value="1" label="单手举手" />
@@ -231,7 +231,7 @@
                  可同时抢单
                </n-form-item>
              </NSpace>
              <NSpace vertical class="pl-20">
              <NSpace vertical class="pl-20" :size="16">
                <n-form-item label="分单倾向配置" path="condition_1" required>
                </n-form-item>
                <div class="pl-30 w-[500px]">
@@ -244,8 +244,8 @@
                </div>
              </NSpace>
            </NSpace>
          </n-spin>
        </NSpace>
          </NSpace>
        </n-spin>
      </n-form>
      <NSpace justify="center" class="w-[50%] mt-12">
        <NButton type='primary'>