zjk
2026-02-06 23f658a38b0960b8ff541371d43da3059fae4076
feat: 主题配置,电子围栏列表
1个文件已添加
15个文件已修改
1007 ■■■■■ 已修改文件
locales/zh_CN.json 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/AppMain.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/components/common/Logo.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.static.ts 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/app/index.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/app/theme copy.json 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/app/theme.json 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/activityAndPricing/pricingManagement/detail.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/activityAndPricing/pricingManagement/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/build-in/login/components/Login/index.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/build-in/login/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/workbench/index.vue 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operationsManagement/geofenceManagement/detail.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operationsManagement/pointManagement/index.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locales/zh_CN.json
@@ -125,8 +125,8 @@
  },
  "route": {
    "appRoot": "首页",
    "dashboard": "仪表盘",
    "workbench": "工作台",
    "dashboard": "首页",
    "workbench": "首页",
    "transaction": "交易管理",
    "order": "订单管理",
    "evaluationRecord": "评价记录",
package.json
@@ -19,6 +19,7 @@
  "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",
src/AppMain.vue
@@ -5,6 +5,8 @@
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 () => {
@@ -20,6 +22,8 @@
  // 注册模块 Vue-router
  await installRouter(app)
  app.use(Antd)
  // 注册模块 指令/静态资源
  const modules = import.meta.glob<{ install: (app: App) => void }>('./modules/*.ts', {
    eager: true,
src/layouts/components/common/Logo.vue
@@ -22,7 +22,7 @@
    class="h-60px text-xl flex-center cursor-pointer gap-2 p-x-2"
    @click="router.push('/')"
  >
    <svg-icons-logo class="text-1.5em" />
    <!-- <svg-icons-logo class="text-1.5em" /> -->
    <span
      v-show="!hidenLogoText"
      class="text-ellipsis overflow-hidden whitespace-nowrap"
src/layouts/index.vue
@@ -65,6 +65,7 @@
    :footer-height="40"
    :sidebar-width="sidebarWidth"
    :sidebar-collapsed-width="sidebarCollapsedWidth"
    class="robotaxi-content"
  >
    <template #logo>
      <Logo />
@@ -122,11 +123,11 @@
      <n-menu v-bind="layout.verticalMenuProps" :collapsed-width="sidebarCollapsedWidth" />
    </template>
    <template #sidebar-extra>
    <!-- <template #sidebar-extra>
      <n-scrollbar class="flex-[1_0_0]">
        <n-menu v-bind="layout.verticalExtraMenuProps" :collapsed-width="sidebarCollapsedWidth" />
      </n-scrollbar>
    </template>
    </template> -->
    <template #tabbar>
      <TabBar />
@@ -147,3 +148,9 @@
    </MobileDrawer>
  </ProLayout>
</template>
<style scoped>
.robotaxi-content {
  /* --pro-layout-color: #3D4C63 !important; */
}
</style>
src/router/routes.static.ts
@@ -1,26 +1,26 @@
export const staticRoutes: AppRoute.RowRoute[] = [
  {
    name: 'dashboard',
    path: '/dashboard',
    title: '仪表盘',
    requiresAuth: true,
    icon: 'icon-park-outline:analysis',
    menuType: 'dir',
    componentPath: null,
    id: 1,
    pid: null,
  },
  // {
  //   name: 'dashboard',
  //   path: '/dashboard',
  //   title: '首页',
  //   requiresAuth: true,
  //   icon: 'icon-park-outline:analysis',
  //   menuType: 'dir',
  //   componentPath: null,
  //   id: 1,
  //   pid: null,
  // },
  {
    name: 'workbench',
    path: '/dashboard/workbench',
    title: '工作台',
    requiresAuth: true,
    icon: 'icon-park-outline:alarm',
    icon: 'icon-park-outline:home',
    pinTab: true,
    menuType: 'page',
    componentPath: '/dashboard/workbench/index.vue',
    id: 101,
    pid: 1,
    id: 1,
    pid: null,
  },
  {
    name: 'transaction',
src/store/app/index.ts
@@ -60,7 +60,8 @@
    // 重置所有设置
    resetAlltheme() {
      this.theme = themeConfig
      this.primaryColor = '#18a058'
      // this.primaryColor = '#18a058'
      this.primaryColor = '#0068FF'
      this.collapsed = false
      this.grayMode = false
      this.colorWeak = false
src/store/app/theme copy.json
New file
@@ -0,0 +1,24 @@
{
  "common": {
    "primaryColor": "#18a058",
    "primaryColorHover": "#36ad6a",
    "primaryColorPressed": "#0c7a43",
    "primaryColorSuppl": "#36ad6a",
    "infoColor": "#2080f0",
    "infoColorHover": "#4098fc",
    "infoColorPressed": "#1060c9",
    "infoColorSuppl": "#4098fc",
    "successColor": "#18a058",
    "successColorHover": "#36ad6a",
    "successColorPressed": "#0c7a43",
    "successColorSuppl": "#36ad6a",
    "warningColor": "#f0a020",
    "warningColorHover": "#fcb040",
    "warningColorPressed": "#c97c10",
    "warningColorSuppl": "#fcb040",
    "errorColor": "#d03050",
    "errorColorHover": "#de576d",
    "errorColorPressed": "#ab1f3f",
    "errorColorSuppl": "#de576d"
  }
}
src/store/app/theme.json
@@ -1,24 +1,24 @@
{
  "common": {
    "primaryColor": "#18a058",
    "primaryColorHover": "#36ad6a",
    "primaryColorPressed": "#0c7a43",
    "primaryColorSuppl": "#36ad6a",
    "primaryColor": "#0068FF",
    "primaryColorHover": "#2986ff",
    "primaryColorPressed": "#004fd9",
    "primaryColorSuppl": "#E6F4FF",
    "infoColor": "#2080f0",
    "infoColorHover": "#4098fc",
    "infoColorPressed": "#1060c9",
    "infoColorSuppl": "#4098fc",
    "successColor": "#18a058",
    "successColorHover": "#36ad6a",
    "successColorPressed": "#0c7a43",
    "successColorSuppl": "#36ad6a",
    "warningColor": "#f0a020",
    "warningColorHover": "#fcb040",
    "warningColorPressed": "#c97c10",
    "warningColorSuppl": "#fcb040",
    "errorColor": "#d03050",
    "errorColorHover": "#de576d",
    "errorColorPressed": "#ab1f3f",
    "errorColorSuppl": "#de576d"
    "successColor": "#19B144",
    "successColorHover": "#28BD52",
    "successColorPressed": "#06A424",
    "successColorSuppl": "#DCF5DD",
    "warningColor": "#FFAA2A",
    "warningColorHover": "#FFBF5D",
    "warningColorPressed": "#EF960E",
    "warningColorSuppl": "#FFF6EA",
    "errorColor": "#E02716",
    "errorColorHover": "#F14637",
    "errorColorPressed": "#D02213",
    "errorColorSuppl": "#FFF3F1"
  }
}
src/views/activityAndPricing/pricingManagement/detail.vue
@@ -78,19 +78,19 @@
            <!-- </n-card> -->
            <!-- 一口价 -->
            <!-- 基础定价 -->
            <NSpace vertical v-if="category === '1'">
            <NSpace vertical v-if="category === '1'" :size="16">
              <div class="text-base font-bold">基础定价</div>
              <div class="pl-4">
                <n-form-item label="起步价设置" path="condition_1" required>
                  起步价为
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  元,起步价包含
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  公里,
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mr-3" />
                  分钟
                </n-form-item>
              </div>
@@ -98,7 +98,7 @@
                <n-form-item label="里程费设置" path="condition_1" required>
                  超过起步里程后每公里
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  元
                </n-form-item>
              </div>
@@ -106,34 +106,34 @@
                <n-form-item label="时长费设置" path="condition_1" required>
                  超过起步时长后每分钟
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  元
                </n-form-item>
              </div>
            </NSpace>
            <NSpace vertical v-else>
            <NSpace vertical v-else :size="16">
              <div class="text-base font-bold">基础定价</div>
              <NButton type='primary' text @click="addTimePeriod">
                添加时段
              </NButton>
              <div class="pl-4" v-for="item in model.condition_3">
                <NSpace vertical>
                <NSpace vertical :size="16">
                  <n-form-item label="时段" path="condition_1" required label-width="92px">
                    <n-time-picker v-model:value="model.condition_1" clearable />至
                    <n-time-picker v-model:value="model.condition_1" clearable />
                    <n-time-picker v-model:value="model.condition_1" clearable class="mr-3" />至
                    <n-time-picker v-model:value="model.condition_1" clearable class="mx-3" />
                    <icon-park-outline-delete @click="removeTimePeriod(item)" />
                  </n-form-item>
                  <div class="pl-20">
                    <n-form-item label="起步价设置" path="condition_1" required>
                      起步价为
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mx-3" />
                      元,起步价包含
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mx-3" />
                      公里,
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      分钟
                    </n-form-item>
                  </div>
@@ -141,7 +141,7 @@
                    <n-form-item label="里程费设置" path="condition_1" required>
                      超过起步里程后每公里
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mx-3" />
                      元
                    </n-form-item>
                  </div>
@@ -149,7 +149,7 @@
                    <n-form-item label="时长费设置" path="condition_1" required>
                      超过起步时长后每分钟
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mx-3" />
                      元
                    </n-form-item>
                  </div>
@@ -159,47 +159,47 @@
                <n-form-item label="等待费设置" path="condition_1" required>
                  司机到达预约地点
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  分钟后开始收取等待费,为
                  <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" />
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  元/分,不足一分钟按一分钟计算
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="远途费设置" path="condition_1" required>
                  <NSpace vertical>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      总里程超过
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      公里,不足
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      公里,超出部分每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      超过
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      不足
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      公里时,超出部分每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      超过
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      公里以后,超出部分每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                  </NSpace>
@@ -207,31 +207,31 @@
              </div>
              <div class="pl-4">
                <n-form-item label="夜间行驶费用设置" path="condition_1" required>
                  <NSpace vertical>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      <n-time-picker v-model:value="model.condition_1" clearable />
                      点为夜间行车时间,起步价变为
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元,时长费为每
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                  </NSpace>
@@ -239,33 +239,33 @@
              </div>
              <div class="pl-4">
                <n-form-item label="高峰期费用设置" path="condition_1" required>
                  <NSpace vertical>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      <n-time-picker v-model:value="model.condition_1" clearable />
                      和
                      <n-time-picker v-model:value="model.condition_1" clearable />
                      为高峰期行车时间,起步价变为
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元,时长费为每
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                  </NSpace>
@@ -273,30 +273,30 @@
              </div>
              <div class="pl-4">
                <n-form-item label="节假日额外收费" path="condition_1" required>
                  <NSpace vertical>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      节假日起步价变为
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      元,时长费为每
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数"  class="mr-3"/>
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数"  class="mr-3"/>
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数"  class="mr-3"/>
                      <n-input-number v-model:value="model.condition_1" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" />
                        :show-button="false" placeholder="最多3位数"  class="mr-3"/>
                      元
                    </NSpace>
                  </NSpace>
@@ -304,7 +304,7 @@
              </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_2" required>
@@ -327,30 +327,30 @@
              <div class="pl-20">
                <n-grid :cols="3" :x-gap="18">
                  <n-form-item-grid-item label="供需计算周期:" path="condition_1">
                    <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />分钟
                    <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mr-3"/>分钟
                  </n-form-item-grid-item>
                  <n-form-item-grid-item label="订单需求阈值:" path="condition_1">
                    <n-input-number v-model:value="model.condition_1" min="0" :precision="0"
                      :show-button="false" />单以上开始上浮
                      :show-button="false"  class="mr-3"/>单以上开始上浮
                  </n-form-item-grid-item>
                  <n-form-item-grid-item label="车辆供给阈值:" path="condition_1">
                    <n-input-number v-model:value="model.condition_1" min="0" :precision="0"
                      :show-button="false" />辆以下开始触发上浮
                      :show-button="false"  class="mr-3"/>辆以下开始触发上浮
                  </n-form-item-grid-item>
                </n-grid>
              </div>
              <div class="pl-20">
                <n-form-item label="供需价格系数:" path="condition_1">
                  每增加
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>
                  单,价格上浮
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />%
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>%
                </n-form-item>
              </div>
              <div class="pl-20">
                <n-form-item label="供需冷却时间:" path="condition_1">
                  调价后
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>
                  分钟内不再重复调整
                </n-form-item>
              </div>
@@ -361,15 +361,15 @@
              <div class="pl-20">
                <n-form-item label="拥堵判断阈值:" path="condition_1">
                  道路速度
                  < <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />
                  < <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>
                  km/h视为拥堵,拥堵价格上浮比例:
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />%
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>%
                </n-form-item>
              </div>
              <div class="pl-20">
                <n-form-item label="拥堵影响半径:" path="condition_1">
                  以订单起点为中心
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false" />
                  <n-input-number v-model:value="model.condition_1" min="0" :precision="0" :show-button="false"  class="mx-3"/>
                  m范围内
                </n-form-item>
              </div>
@@ -456,21 +456,21 @@
                </NSpace>
              </div>
              <div class="pl-4">
                <n-form-item label="等待费设置" path="condition_1" >
                  司机到达预约地点  3  分钟开始收取等待费,为  2  元/分,不足一分钟按一分钟计算
                <n-form-item label="等待费设置" path="condition_1">
                  司机到达预约地点 3 分钟开始收取等待费,为 2 元/分,不足一分钟按一分钟计算
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="远途费设置" path="condition_1" >
                <n-form-item label="远途费设置" path="condition_1">
                  <NSpace vertical>
                    <NSpace align="center">
                      总里程超过  50  公里不足  150 公里,超出部分每公里加收   1  元
                      总里程超过 50 公里不足 150 公里,超出部分每公里加收 1 元
                    </NSpace>
                    <NSpace align="center">
                      超过  150  公里不足  250 公里,超出部分每公里加收   1.2  元
                      超过 150 公里不足 250 公里,超出部分每公里加收 1.2 元
                    </NSpace>
                    <NSpace align="center">
                      超过  150  公里以后,超出部分每公里加收   1.3  元
                      超过 150 公里以后,超出部分每公里加收 1.3 元
                    </NSpace>
                  </NSpace>
                </n-form-item>
@@ -479,13 +479,13 @@
                <n-form-item label="夜间行驶费用设置" path="condition_1" required>
                  <NSpace vertical>
                    <NSpace align="center">
                      20:00   点为夜间行车时间,起步价变为  5  元
                      20:00 点为夜间行车时间,起步价变为 5 元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里  3  元, 时长费为每分钟  1   元
                      里程费为每公里 3 元, 时长费为每分钟 1 元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收 0.2、0.5、0.7  元
                      远途费为每公里加收 0.2、0.5、0.7 元
                    </NSpace>
                  </NSpace>
                </n-form-item>
@@ -494,13 +494,13 @@
                <n-form-item label="高峰期费用设置" path="condition_1" required>
                  <NSpace vertical>
                    <NSpace align="center">
                      08:30-09:3  和  018:00 -20:00   为高峰期行车时间,起步价变为  5  元
                      08:30-09:3 和 018:00 -20:00 为高峰期行车时间,起步价变为 5 元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里  3  元, 时长费为每分钟  1   元
                      里程费为每公里 3 元, 时长费为每分钟 1 元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收 0.2、0.5、0.7  元
                      远途费为每公里加收 0.2、0.5、0.7 元
                    </NSpace>
                  </NSpace>
                </n-form-item>
@@ -509,13 +509,13 @@
                <n-form-item label="节假日额外收费" path="condition_1" required>
                  <NSpace vertical>
                    <NSpace align="center">
                      08:30-09:3  和  018:00 -20:00   为高峰期行车时间,起步价变为  5  元
                      08:30-09:3 和 018:00 -20:00 为高峰期行车时间,起步价变为 5 元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里  3  元, 时长费为每分钟  1   元
                      里程费为每公里 3 元, 时长费为每分钟 1 元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收 0.2、0.5、0.7  元
                      远途费为每公里加收 0.2、0.5、0.7 元
                    </NSpace>
                  </NSpace>
                </n-form-item>
src/views/activityAndPricing/pricingManagement/index.vue
@@ -88,14 +88,14 @@
          <NButton
            text
            type='primary'
            onClick={() => router.push({name: 'pricingDetail', query: {id: row.id, type: 'add', category: 1 }})}
            onClick={() => router.push({name: 'pricingDetail', query: {id: row.id, type: 'add', category: row.pricingRules }})}
          >
            设置价格
          </NButton>
          <NButton
            text
            type='primary'
            onClick={() => router.push({name: 'pricingDetail', query: {id: row.id, type: 'view', category: 1}})}
            onClick={() => router.push({name: 'pricingDetail', query: {id: row.id, type: 'view', category: row.pricingRules }})}
          >
            查看
          </NButton>
@@ -162,7 +162,7 @@
    })
    count.value = 1
    endLoading()
  }, 1000)
  }, 500)
}
onMounted(() => {
  getList()
src/views/build-in/login/components/Login/index.vue
@@ -83,29 +83,29 @@
        </n-input>
      </n-form-item>
      <n-space vertical :size="20">
        <div class="flex-y-center justify-between">
        <!-- <div class="flex-y-center justify-between">
          <n-checkbox v-model:checked="isRemember">
            {{ $t('login.rememberMe') }}
          </n-checkbox>
          <n-button type="primary" text @click="toOtherForm('resetPwd')">
            {{ $t('login.forgotPassword') }}
          </n-button>
        </div>
        </div> -->
        <n-button block type="primary" size="large" :loading="isLoading" :disabled="isLoading" @click="handleLogin">
          {{ $t('login.signIn') }}
        </n-button>
        <n-flex>
        <!-- <n-flex>
          <n-text>{{ $t('login.noAccountText') }}</n-text>
          <n-button type="primary" text @click="toOtherForm('register')">
            {{ $t('login.signUp') }}
          </n-button>
        </n-flex>
        </n-flex> -->
      </n-space>
    </n-form>
    <n-divider>
    <!-- <n-divider>
      <span op-80>{{ $t('login.or') }}</span>
    </n-divider>
    <n-space justify="center">
    </n-divider> -->
    <!-- <n-space justify="center">
      <n-button circle>
        <template #icon>
          <n-icon><icon-park-outline-wechat /></n-icon>
@@ -121,7 +121,7 @@
          <n-icon><icon-park-outline-github-one /></n-icon>
        </template>
      </n-button>
    </n-space>
    </n-space> -->
  </div>
</template>
src/views/build-in/login/index.vue
@@ -23,7 +23,7 @@
      style="background: var(--card-color);box-shadow: var(--box-shadow-1);"
    >
      <div class="w-full flex flex-col items-center">
        <SvgIconsLogo class="text-6em" />
        <!-- <SvgIconsLogo class="text-6em" /> -->
        <n-h3>{{ appName }} </n-h3>
        <transition
          name="fade-slide"
src/views/dashboard/workbench/index.vue
@@ -1,314 +1,10 @@
<script setup lang="ts">
import { useAuthStore } from '@/store'
import Chart from './components/chart.vue'
const { userInfo } = useAuthStore()
</script>
<template>
  <n-grid
    :x-gap="16"
    :y-gap="16"
    :cols="3"
    item-responsive
    responsive="screen"
  >
    <!-- 左侧主要内容区 - 移动端全宽,桌面端2/3宽 -->
    <n-gi span="3 m:2">
      <n-space
        vertical
        :size="16"
      >
        <!-- 图表区域 -->
        <n-card style="--n-padding-left: 0;">
          <Chart />
        </n-card>
        <!-- 统计卡片区域 -->
        <n-grid
          :x-gap="16"
          :y-gap="16"
          :cols="4"
          item-responsive
          responsive="screen"
        >
          <n-gi span="2 l:1">
            <n-card>
              <n-thing>
                <template #avatar>
                  <n-el>
                    <n-icon-wrapper :size="46" color="var(--success-color)" :border-radius="999">
                      <nova-icon :size="26" icon="icon-park-outline:user" />
                    </n-icon-wrapper>
                  </n-el>
                </template>
                <template #header>
                  <n-statistic label="活跃用户">
                    <n-number-animation show-separator :from="0" :to="12039" />
                  </n-statistic>
                </template>
              </n-thing>
            </n-card>
          </n-gi>
          <n-gi span="2 l:1">
            <n-card>
              <n-thing>
                <template #avatar>
                  <n-el>
                    <n-icon-wrapper :size="46" color="var(--success-color)" :border-radius="999">
                      <nova-icon :size="26" icon="icon-park-outline:every-user" />
                    </n-icon-wrapper>
                  </n-el>
                </template>
                <template #header>
                  <n-statistic label="用户">
                    <n-number-animation show-separator :from="0" :to="44039" />
                  </n-statistic>
                </template>
              </n-thing>
            </n-card>
          </n-gi>
          <n-gi span="2 l:1">
            <n-card>
              <n-thing>
                <template #avatar>
                  <n-el>
                    <n-icon-wrapper :size="46" color="var(--success-color)" :border-radius="999">
                      <nova-icon :size="26" icon="icon-park-outline:preview-open" />
                    </n-icon-wrapper>
                  </n-el>
                </template>
                <template #header>
                  <n-statistic label="浏览量">
                    <n-number-animation show-separator :from="0" :to="551039" />
                  </n-statistic>
                </template>
              </n-thing>
            </n-card>
          </n-gi>
          <n-gi span="2 l:1">
            <n-card>
              <n-thing>
                <template #avatar>
                  <n-el>
                    <n-icon-wrapper :size="46" color="var(--success-color)" :border-radius="999">
                      <nova-icon :size="26" icon="icon-park-outline:star" />
                    </n-icon-wrapper>
                  </n-el>
                </template>
                <template #header>
                  <n-statistic label="收藏数">
                    <n-number-animation show-separator :from="0" :to="7739" />
                  </n-statistic>
                </template>
              </n-thing>
            </n-card>
          </n-gi>
        </n-grid>
        <n-card title="动态">
          <template #header-extra>
            <n-button
              type="primary"
              quaternary
            >
              更多
            </n-button>
          </template>
          <n-list hoverable>
            <n-list-item>
              <template #prefix>
                <n-avatar
                  round
                  :size="48"
                  :src="userInfo?.avatar"
                />
              </template>
              <n-thing
                title="客怎车"
                title-extra="09/29/2022"
                description="是“我的客厅怎么会有车”的缩写,指那些在车道间肆意穿梭,把马路当客厅的人,多有嘲讽意味,主要用于车祸视频中。"
              />
            </n-list-item>
            <n-list-item>
              <template #prefix>
                <n-avatar
                  round
                  :size="48"
                  :src="userInfo?.avatar"
                />
              </template>
              <n-thing
                title="街健五大神技"
                title-extra="09/29/2022"
                description="街头健身五大神技,包括1.单手引体向上。2.慢速双力臂。3.人旗。4.前水平。5.俄式挺身。"
              />
            </n-list-item>
            <n-list-item>
              <template #prefix>
                <n-avatar
                  round
                  :size="48"
                  :src="userInfo?.avatar"
                />
              </template>
              <n-thing
                title="天下岂有七十年太子乎"
                title-extra="09/29/2022"
                description="★含义:用来调侃由于英国女王超长的在位时间,导致其长子查理斯王子成为史上等待王位时间最久的王储 "
              />
            </n-list-item>
            <n-list-item>
              <template #prefix>
                <n-avatar
                  round
                  :size="48"
                  :src="userInfo?.avatar"
                />
              </template>
              <n-thing
                title="你干嘛~哈哈~哎哟~"
                title-extra="09/29/2022"
                description="出自著名偶像练习生、练习时长两年半、背带异常梳中分的蔡徐坤在2018年的一档综艺节目偶像练习生中出现的一幕"
              />
            </n-list-item>
          </n-list>
        </n-card>
      </n-space>
    </n-gi>
    <!-- 右侧边栏 - 移动端全宽,桌面端1/3宽 -->
    <n-gi span="3 m:1">
      <n-space
        vertical
        :size="16"
      >
        <n-card title="公告">
          <template #header-extra>
            <n-button
              type="primary"
              quaternary
            >
              更多
            </n-button>
          </template>
          <n-list>
            <n-list-item>
              <template #prefix>
                <n-tag
                  :bordered="false"
                  type="info"
                  size="small"
                >
                  通知
                </n-tag>
              </template>
              <n-button text>
                漂洋过海上大专
              </n-button>
            </n-list-item>
            <n-list-item>
              <template #prefix>
                <n-tag
                  :bordered="false"
                  type="success"
                  size="small"
                >
                  消息
                </n-tag>
              </template>
              <n-button text>
                你在玩很新的东西
              </n-button>
            </n-list-item>
            <n-list-item>
              <template #prefix>
                <n-tag
                  :bordered="false"
                  type="warning"
                  size="small"
                >
                  活动
                </n-tag>
              </template>
              <n-button text>
                上岸第一剑,先斩意中人
              </n-button>
            </n-list-item>
          </n-list>
        </n-card>
        <!-- 订单和待办统计 -->
        <n-grid
          :x-gap="16"
          :y-gap="16"
          :cols="2"
        >
          <!-- 移动端和桌面端都是每行2个 -->
          <n-gi :span="1">
            <n-card>
              <n-flex vertical align="center">
                <n-text depth="3">
                  订单数
                </n-text>
                <n-icon-wrapper :size="46" :border-radius="999">
                  <nova-icon :size="26" icon="icon-park-outline:all-application" />
                </n-icon-wrapper>
                <n-text strong class="text-2xl">
                  1,234,123
                </n-text>
              </n-flex>
            </n-card>
          </n-gi>
          <n-gi :span="1">
            <n-card>
              <n-flex vertical align="center">
                <n-text depth="3">
                  待办
                </n-text>
                <n-el>
                  <n-icon-wrapper :size="46" color="var(--warning-color)" :border-radius="999">
                    <nova-icon :size="26" icon="icon-park-outline:list-bottom" />
                  </n-icon-wrapper>
                </n-el>
                <n-text strong class="text-2xl">
                  78
                </n-text>
              </n-flex>
            </n-card>
          </n-gi>
        </n-grid>
        <n-card title="任务进度">
          <n-timeline>
            <n-timeline-item content="啊" />
            <n-timeline-item
              type="success"
              title="成功"
              content="哪里成功"
              time="2018-04-03 20:46"
            />
            <n-timeline-item
              type="error"
              content="哪里错误"
              time="2018-04-03 20:46"
            />
            <n-timeline-item
              type="warning"
              title="警告"
              content="哪里警告"
              time="2018-04-03 20:46"
            />
            <n-timeline-item
              type="info"
              title="信息"
              content="是的"
              time="2018-04-03 20:46"
              line-type="dashed"
            />
            <n-timeline-item content="啊" />
          </n-timeline>
        </n-card>
      </n-space>
    </n-gi>
  </n-grid>
  <n-card class="w-full h-full">
    <div class="text-base font-bold">首页开发中...</div>
  </n-card>
</template>
<style scoped></style>
src/views/operationsManagement/geofenceManagement/detail.vue
@@ -26,6 +26,7 @@
    timeList: [],
    edit: false,
    customTime: [],
    id: 1
  }
])
@@ -95,6 +96,29 @@
    type: 1,
    timeList: [],
    edit: false,
    customTime: [],
    id: groupList.value.length + 1
  })
}
const addTimeRange = (item: any) => {
  console.log(item)
  groupList.value.forEach((group) => {
    if (group.id === item.id) {
      group.timeList.push({
        startTime: 0,
        endTime: 0,
        id: group.timeList.length + 1
      })
    }
  })
}
const removeTimePeriod = (item: any) => {
  groupList.value.forEach((group) => {
    if (group.id === item.id) {
      group.timeList = group.timeList.filter((sub: any) => sub.id !== item.id)
    }
  })
}
@@ -111,6 +135,7 @@
    map.value = new AMap.Map(domRef.value, {
      zoom: 10,
      center: [113.264499, 23.130061],
      mapStyle: 'amap://styles/yuanshandai'
    })
    console.log('地图初始化成功:', map.value)
@@ -126,12 +151,13 @@
</script>
<template>
  <!-- 地图区域 -->
  <div class="w-full h-full" id="mapBox">
    <div id="map" ref="domRef" class="w-full h-full" style="position: relative;" />
  </div>
  <div class="w-full h-full">
    <!-- 地图区域 -->
    <div class="w-full h-[60%]" id="mapBox">
      <div id="map" ref="domRef" class="w-full h-full" style="position: relative;" />
    </div>
  <!-- <div class="flex-1 info">
    <div class="flex-1 info">
      <div class="text-[16px] font-bold my-4">新建围栏</div>
      <n-card :segmented="{
        content: true,
@@ -152,83 +178,91 @@
            </div>
          </div>
        </template>
<n-form ref="formRef" :rules="rules" :model="formModel" require-mark-placement="left">
  <n-tabs type="line" size="large" :tabs-padding="20" pane-style="padding: 20px;">
    <n-tab-pane name="基本信息">
      <n-grid :cols="2" :x-gap="18">
        <n-form-item-grid-item :span="1" label="围栏名称" path="name">
          <n-input v-model:value="formModel.name" />
        </n-form-item-grid-item>
        <n-form-item-grid-item :span="1" label="围栏描述" path="remark">
          <n-input v-model:value="formModel.remark" type="textarea" />
        </n-form-item-grid-item>
        <n-form-item-grid-item :span="2" label="区域类型" path="regionType">
          运营区
        </n-form-item-grid-item>
        <n-form-item-grid-item :span="2" label="区域状态" path="regionStatus">
          <NTag type="default" round>草稿</NTag>
        </n-form-item-grid-item>
      </n-grid>
    </n-tab-pane>
    <n-tab-pane name="生命周期">
      <n-grid :cols="2" :x-gap="18">
        <n-form-item-grid-item :span="1" label="生效时间" path="effectiveTime" required>
          <n-space vertical>
            <n-radio-group v-model:value="formModel.effectiveTime" name="effectiveTime" class="pl-8">
              <n-space vertical>
                <n-radio :value="1">立即生效</n-radio>
                <n-radio :value="2">定时生效</n-radio>
              </n-space>
            </n-radio-group>
            <n-date-picker v-model:value="formModel.effectiveTimeTimestamp" type="datetime" clearable
              v-if="formModel.effectiveTime === 2" class="pl-8" />
          </n-space>
        </n-form-item-grid-item>
        <n-form-item-grid-item :span="1" label="失效时间" path="expireTime" required>
          <n-space vertical>
            <n-radio-group v-model:value="formModel.expireTime" name="expireTime" class="pl-8">
              <n-space vertical>
                <n-radio :value="1">永不失效</n-radio>
                <n-radio :value="2">定时失效</n-radio>
              </n-space>
            </n-radio-group>
            <n-date-picker v-model:value="formModel.expireTimeTimestamp" type="datetime" clearable
              v-if="formModel.expireTime === 2" class="pl-8" />
          </n-space>
        </n-form-item-grid-item>
      </n-grid>
    </n-tab-pane>
    <n-tab-pane name="运营策略">
      <n-flex>
        <div v-for="item in groupList" :key="item.name" class="w-[32%]">
          <NSpace vertical>
            <div>
              <div v-if="!item.edit">{{ item.name }}</div>
              <n-input v-model:value="item.name" v-else />
            </div>
            <div>
              <div class="text-[12px] text-gray-500 mb-2">日期选择</div>
              <n-radio-group v-model:value="item.type" name="radiobuttongroup1">
                <n-radio-button v-for="item in dateOptions" :key="item.value" :value="item.value" :label="item.label" />
              </n-radio-group>
              <n-select class="mt-2" v-model:value="item.customTime" multiple :options="weekOptions"
                v-if="item.type === 4" />
            </div>
            <div>
              <div class="text-[12px] text-gray-500 mb-2">时段配置</div>
              <NButton type="primary" text @click="addStrategyGroup">添加时段</NButton>
            </div>
          </NSpace>
        </div>
        <div class="w-[32%]">
          <NButton type="primary" @click="addStrategyGroup">添加运营策略组</NButton>
        </div>
      </n-flex>
    </n-tab-pane>
  </n-tabs>
</n-form>
</n-card>
</div> -->
        <n-form ref="formRef" :rules="rules" :model="formModel" require-mark-placement="left">
          <n-tabs type="line" size="large" :tabs-padding="20" pane-style="padding: 20px;">
            <n-tab-pane name="基本信息">
              <n-grid :cols="2" :x-gap="18">
                <n-form-item-grid-item :span="1" label="围栏名称" path="name">
                  <n-input v-model:value="formModel.name" />
                </n-form-item-grid-item>
                <n-form-item-grid-item :span="1" label="围栏描述" path="remark">
                  <n-input v-model:value="formModel.remark" type="textarea" />
                </n-form-item-grid-item>
                <n-form-item-grid-item :span="2" label="区域类型" path="regionType">
                  运营区
                </n-form-item-grid-item>
                <n-form-item-grid-item :span="2" label="区域状态" path="regionStatus">
                  <NTag type="default" round>草稿</NTag>
                </n-form-item-grid-item>
              </n-grid>
            </n-tab-pane>
            <n-tab-pane name="生命周期">
              <n-grid :cols="2" :x-gap="18">
                <n-form-item-grid-item :span="1" label="生效时间" path="effectiveTime" required>
                  <n-space vertical>
                    <n-radio-group v-model:value="formModel.effectiveTime" name="effectiveTime" class="pl-8">
                      <n-space vertical>
                        <n-radio :value="1">立即生效</n-radio>
                        <n-radio :value="2">定时生效</n-radio>
                      </n-space>
                    </n-radio-group>
                    <n-date-picker v-model:value="formModel.effectiveTimeTimestamp" type="datetime" clearable
                      v-if="formModel.effectiveTime === 2" class="pl-8" />
                  </n-space>
                </n-form-item-grid-item>
                <n-form-item-grid-item :span="1" label="失效时间" path="expireTime" required>
                  <n-space vertical>
                    <n-radio-group v-model:value="formModel.expireTime" name="expireTime" class="pl-8">
                      <n-space vertical>
                        <n-radio :value="1">永不失效</n-radio>
                        <n-radio :value="2">定时失效</n-radio>
                      </n-space>
                    </n-radio-group>
                    <n-date-picker v-model:value="formModel.expireTimeTimestamp" type="datetime" clearable
                      v-if="formModel.expireTime === 2" class="pl-8" />
                  </n-space>
                </n-form-item-grid-item>
              </n-grid>
            </n-tab-pane>
            <n-tab-pane name="运营策略">
              <n-flex>
                <div v-for="item in groupList" :key="item.name" class="w-[32%] border border-gray-300 rounded p-4">
                  <NSpace vertical>
                    <div>
                      <div v-if="!item.edit">{{ item.name }}</div>
                      <n-input v-model:value="item.name" v-else />
                    </div>
                    <div>
                      <div class="text-[12px] text-gray-500 mb-2">日期选择</div>
                      <n-radio-group v-model:value="item.type" name="radiobuttongroup1">
                        <n-radio-button v-for="item in dateOptions" :key="item.value" :value="item.value"
                          :label="item.label" />
                      </n-radio-group>
                      <n-select class="mt-2 w-[240px]" v-model:value="item.customTime" multiple :options="weekOptions"
                        v-if="item.type === 4" />
                    </div>
                    <div>
                      <div class="text-[12px] text-gray-500 mb-2">时段配置</div>
                      <n-flex align="center" v-for="sub in item.timeList" :key="sub.id">
                        <n-time-picker v-model:value="sub.startTime" class="w-[100px]" />
                        至
                        <n-time-picker v-model:value="sub.endTime" class="w-[100px]" />
                        <icon-park-outline-delete @click="removeTimePeriod(sub)" class="cursor-pointer" />
                      </n-flex>
                      <NButton type="primary" text @click="addTimeRange(item)" class="mt-2">添加时段</NButton>
                    </div>
                  </NSpace>
                </div>
                <div class="w-[32%] border border-dashed border-gray-300 rounded p-4 flex items-center justify-center">
                  <NButton type="primary" @click="addStrategyGroup">添加运营策略组</NButton>
                </div>
              </n-flex>
            </n-tab-pane>
          </n-tabs>
        </n-form>
      </n-card>
    </div>
  </div>
</template>
<style lang="scss">
src/views/operationsManagement/pointManagement/index.vue
@@ -1,198 +1,50 @@
<script setup lang="tsx">
import type { DataTableColumns, FormInst } from 'naive-ui'
import { useBoolean } from '@/hooks'
import { fetchUserPage } from '@/service'
import { NButton, NPopconfirm, NSpace } from 'naive-ui'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import TableModal from './components/TableModal.vue'
import { ref, onMounted } from 'vue'
import { useScriptTag } from '@vueuse/core'
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false)
const { t } = useI18n()
// 添加更好的错误处理和调试
const { load } = useScriptTag('https://webapi.amap.com/maps?v=2.0&key=85e62187c6f8e51c797c87b1f36f787a')
const initialModel = {
  condition_1: '',
  condition_2: '',
  condition_3: null,
}
const model = ref({ ...initialModel })
function handleResetSearch() {
  model.value = { ...initialModel }
}
const domRef = ref<HTMLDivElement>()
const map = ref(null)
const mapError = ref('')
const formRef = ref<FormInst | null>()
const modalRef = ref()
function delteteUser(id: number) {
  window.$message.success(`删除用户id:${id}`)
}
const columns = computed<DataTableColumns<any>>(() => [
   {
    title: '序号',
    align: 'center',
    key: 'serialNumber',
    ellipsis: true
  },
  {
    title: '添加时间',
    align: 'center',
    key: 'createTime',
    ellipsis: true
  },
  {
    title: '开通城市',
    align: 'center',
    key: 'city',
    ellipsis: true
  },
  {
    title: '状态',
    align: 'center',
    key: 'status',
    ellipsis: true,
    render: (row) => {
      return row.status === 1 ? '启用' : '禁用'
    },
  },
  {
    title: '操作',
    align: 'center',
    key: 'actions',
    width: 260,
    fixed: 'right',
    render: (row) => {
      return (
        <NSpace justify="center">
          <NButton
            text
            type="primary"
            onClick={() => modalRef.value.openModal('edit', row)}
          >
            编辑
          </NButton>
          <NButton
            text
            type="primary"
          >
            启用
          </NButton>
          <NPopconfirm onPositiveClick={() => delteteUser(row.id!)}>
            {{
              default: () => '确认删除',
              trigger: () => <NButton text type="error">删除</NButton>,
            }}
          </NPopconfirm>
        </NSpace>
      )
    },
  },
])
const options = [
  {
    label: '启用',
    value: 1,
  },
  {
    label: '禁用',
    value: 2,
  },
]
const filterItems = computed(() => [
  {
    label: '城市',
    path: 'condition_1',
    render: () => <n-input v-model:value={model.value.condition_1} />,
  },
  {
    label: '状态',
    path: 'condition_3',
    render: () => <n-select v-model:value={model.value.condition_3} options={options} />,
  },
])
const count = ref(0)
const listData = ref<any>([])
async function getList() {
  startLoading()
  setTimeout(() => {
    listData.value = [
      {
        id: 1,
        city: '四川省成都市',
        status: 1,
        createTime: '2023-01-01 10:00:00',
        updateTime: '2023-01-01 10:00:00',
      },
      {
        id: 2,
        city: '四川省成都市',
        status: 2,
        createTime: '2023-01-01 10:00:00',
        updateTime: '2023-01-01 10:00:00',
      },
    ]
    listData.value.forEach((item: any, index: number)  => {
      item.serialNumber = index + 1
async function initMap() {
  try {
    if (!domRef.value) {
      return
    }
    await load()
    if (typeof AMap === 'undefined') {
      console.error('AMap未定义')
      return
    }
    map.value = new AMap.Map(domRef.value, {
      zoom: 10,
      center: [113.264499, 23.130061],
    })
    count.value = 1
    endLoading()
  }, 1000)
    console.log('地图初始化成功:', map.value)
  } catch (err) {
    mapError.value = '地图初始化失败: ' + (err as Error).message
    console.error('地图初始化错误:', err)
  }
}
onMounted(() => {
  getList()
  initMap()
})
function changePage(page: number, size: number) {
  window.$message.success(`分页器:${page},${size}`)
}
</script>
<template>
  <n-flex>
    <NSpace vertical class="flex-1">
      <n-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">
              <n-form-item :label="item.label" :path="item.path">
                <component :is="item.render" />
              </n-form-item>
            </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>
      <n-card class="flex-1">
        <template #header>
          <NButton type="primary" @click="modalRef.openModal('add')">
            新增城市
          </NButton>
        </template>
        <NSpace vertical>
          <n-data-table :columns="columns" :data="listData" :loading="loading" />
          <Pagination :count="count" @change="changePage" />
        </NSpace>
        <TableModal ref="modalRef" modal-name="开通城市" />
      </n-card>
    </NSpace>
  </n-flex>
  <!-- 地图区域 -->
  <div class="w-full h-full" id="mapBox">
    <div id="map" ref="domRef" class="w-full h-full" style="position: relative;" />
  </div>
</template>
<style lang="scss">
.robotaxi-content {
  padding: 0 !important;
}
</style>