董国庆
2026-05-14 d4f2f7f9ba218e7a6c93a35d6a38539ed5f578d2
Merge branch 'deploy-1.0' of http://120.76.84.145:10101/gitblit/r/H5/xp-robotaxi-web into deploy-1.0
10个文件已修改
218 ■■■■■ 已修改文件
src/components/custom/OperationLogModal.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleModel/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/operationWorkbench/list.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/siteInfo/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/cruiseCheckIn/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/cruiseCheckInRule/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/geofenceManagement/index.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/directServiceManagement/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/passwordFreeStrategy/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/custom/OperationLogModal.vue
@@ -87,25 +87,33 @@
})
const routeBusinessTypeMap: Array<{ path: string, type: number }> = [
  { path: '/testDemo/geofenceManagement', type: 11 },
  { path: '/testDemo/testPlanList', type: 12 },
  { path: '/system/accountPermission/accountManagement', type: 13 },
  { path: '/system/accountPermission/permissionGroup', type: 14 },
  { path: '/system/accountPermission/roleManagement', type: 15 },
  { path: '/system/appVersion/appVersionManage', type: 16 },
  { path: '/userContent/active/activityManagement', type: 18 },
  { path: '/userContent/active/coupon', type: 19 },
  { path: '/userContent/banner', type: 20 },
  { path: '/businessOperations/openCity', type: 21 },
  { path: '/businessOperations/geofenceManagement', type: 22 },
  { path: '/businessOperations/siteInfo', type: 23 },
  { path: '/businessOperations/cruise/parade-plan', type: 24 },
  { path: '/assetManagement/vehicleManagement/inventoryVehicle', type: 25 },
  { path: '/assetManagement/vehicleManagement/operatingVehicle', type: 26 },
  { path: '/assetManagement/fleetManagement', type: 27 },
  { path: '/assetManagement/vehicleModel', type: 28 },
  { path: '/transaction/pricingManagement', type: 29 },
  { path: '/transaction/navigationAndRoutePlanning', type: 30 },
  { path: '/transaction/directServiceManagement', type: 31 },
  { path: '/transaction/passwordFreeStrategy', type: 32 },
  { path: '/operations/personnel/personnelManagement', type: 33 },
  { path: '/operations/attendance/address', type: 34 },
  { path: '/operations/cruiseCheckInManagement/cruiseCheckIn', type: 34 },
  { path: '/operations/attendance/shift', type: 35 },
  { path: '/operations/taskOrder/taskOrderCenter', type: 37 },
  { path: '/operations/cruiseCheckInManagement/cruiseCheckInRule', type: 38 },
  { path: '/service/review/personnel', type: 39 },
  { path: '/service/review/policyApplication', type: 40 },
  { path: '/service/ticket/feedbackType', type: 41 },
src/views/assetManagement/vehicleModel/index.vue
@@ -5,6 +5,7 @@
import { useBoolean } from '@/hooks'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import Pagination from '@/components/common/Pagination.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import { deleteVehicleModelById, queryVehicleModelList } from '@/service/api/vehicleConvoy'
import AddOrEditModal from './components/AddOrEditModal.vue'
import dayjs from 'dayjs'
@@ -12,6 +13,7 @@
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false)
const dialog = useDialog()
const addOrEditModalRef = ref()
const showOperationLogModal = ref(false)
const initialModel = {
  name: '',
@@ -32,6 +34,10 @@
function handleSearch() {
  pagination.page = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
const filterItems = computed(() => [
@@ -206,11 +212,14 @@
      <n-card class="flex-1 robotaxi-table-card">
        <template #header>
          <n-flex justify="flex-end">
          <n-flex justify="space-between">
            <NButton @click="handleOpenOperationLog">
              操作日志
            </NButton>
            <NButton
              v-permission="202642940"
              type="primary"
              secondary
              v-permission="202642940"
              @click="handleAdd"
            >
              新增车型
@@ -250,6 +259,7 @@
    </div>
    <AddOrEditModal ref="addOrEditModalRef" @refresh="getList" />
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/businessOperations/operationWorkbench/list.vue
@@ -5,22 +5,24 @@
import { onBeforeRouteLeave, useRoute, useRouter } from 'vue-router'
import dayjs from 'dayjs'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import { useBoolean, usePermission } from '@/hooks'
import { copyFence, fetchEnabledOpenCityList, getFenceList } from '@/service/api/operations'
import { deletePoint, enableDisablePoint, exportPointExcel, fetchFenceAndStationAreaList, fetchPointPageList } from '@/service/api/point'
import { deleteStation, fetchStationListByElectronicId, fetchStationPageList, updateStationStatus } from '@/service/api/station'
import { useWorkbenchStore } from '@/store'
import { downloadFile } from '@/utils'
const { hasPermission } = usePermission()
import sortDefault from '@/assets/geofence/sort1.png'
import sortAsc from '@/assets/geofence/sort2.png'
import sortDesc from '@/assets/geofence/sort3.png'
import moreIcon from '@/assets/element-img/more.png'
const { hasPermission } = usePermission()
type WorkbenchTab = 'fence' | 'point' | 'station'
type CityOptionItem = { label: string, value: string }
type PointAreaOption = {
interface CityOptionItem { label: string, value: string }
interface PointAreaOption {
  label: string
  value: string
  type: number
@@ -175,6 +177,7 @@
const fenceStationLoadingMap = ref<Record<string, boolean>>({})
const fenceStrategyExpandedMap = ref<Record<string, boolean>>({})
const initialized = ref(false)
const showOperationLogModal = ref(false)
const isPointStatusSelectOpen = ref(false)
const isPointAreaSelectOpen = ref(false)
const isFenceStatusListOpen = ref(false)
@@ -451,7 +454,7 @@
function normalizeOpenCityOptions(list: any[]): CityOptionItem[] {
  return list
    .map((item) => ({
    .map(item => ({
      label: String(item.cityName || item.name || item.label || ''),
      value: String(item.cityCode || item.adcode || item.value || ''),
    }))
@@ -864,7 +867,7 @@
}
function handlePointToDetail(row: any, type: 'detail' | 'edit') {
  if(type==='detail' && !hasPermission('202642925'))
  if (type === 'detail' && !hasPermission('202642925'))
    return
  const context = buildWorkbenchMapContext('point', type, row)
  workbenchStore.setListContext({
@@ -883,7 +886,7 @@
}
function handleStationToMap(row: any, type: 'detail' | 'edit') {
  if(type==='detail' && !hasPermission('202642931'))
  if (type === 'detail' && !hasPermission('202642931'))
    return
  const context = buildWorkbenchMapContext('station', type, row)
  workbenchStore.setListContext({
@@ -924,12 +927,12 @@
  const statusText = getPointStatusText(row.operationStatus, row.verificationStatus)
  if (statusText === '已停用') {
    const stopReason = String(row?.hoverStatusDes  || '' ).trim()
    const stopReason = String(row?.hoverStatusDes || '').trim()
    return stopReason || ''
  }
  if (statusText === '测试不通过') {
    const failReason = String( row?.remarks|| '',).trim()
    const failReason = String(row?.remarks || '').trim()
    return failReason || ''
  }
@@ -1087,16 +1090,19 @@
  // const loadingChildList = fenceStationLoadingMap.value[rowKey]
  // if (loadingChildList)
    // return <div class="fence-expand-placeholder">加载中...</div>
  // return <div class="fence-expand-placeholder">加载中...</div>
  if (stationList.length === 0)
    return <div class="flex-center py-12px">
            <img
              src="/src/assets/element-img/no-data.png"
              style="width: 123px; height: 125px"
              alt="no-data"
            />
          </div>
  if (stationList.length === 0) {
    return (
      <div class="flex-center py-12px">
        <img
          src="/src/assets/element-img/no-data.png"
          style="width: 123px; height: 125px"
          alt="no-data"
        />
      </div>
    )
  }
  return (
    <div class="fence-expand-panel">
@@ -1109,14 +1115,16 @@
        rowKey={(item: any) => item.id ?? item.stationId ?? item.stationNumber}
        scrollX={1000}
      >
    {{empty: <div class="flex-center">
        {{ empty: (
          <div class="flex-center">
            <img
              src="/src/assets/element-img/no-data.png"
              style="width: 123px; height: 125px"
              alt="no-data"
            />
          </div>}}
          </n-data-table>
          </div>
        ) }}
      </n-data-table>
    </div>
  )
}
@@ -1300,7 +1308,7 @@
    ].map(escapeCsvCell).join(',')
  })
  return ['\uFEFF' + headers.map(escapeCsvCell).join(','), ...records].join('\n')
  return [`\uFEFF${headers.map(escapeCsvCell).join(',')}`, ...records].join('\n')
}
function handleStationBatchExport() {
@@ -1440,7 +1448,7 @@
            v-model:value={fenceModel.value.cityCode}
            options={cityOptions.value}
            placeholder="请选择"
            onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
            onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
            onUpdate:show={(val: boolean) => isFenceCityOpen.value = val}
          >
            {{
@@ -1542,7 +1550,7 @@
            v-model:value={stationModel.value.cityCode}
            options={cityOptions.value}
            placeholder="请选择"
            onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
            onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
            onUpdate:show={(val: boolean) => isStationCityOpen.value = val}
          >
            {{
@@ -1628,7 +1636,7 @@
          v-model:value={pointModel.value.cityCode}
          options={cityOptions.value}
          placeholder="请选择"
          onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
          onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))}
          onUpdate:show={(val: boolean) => isPointCityOpen.value = val}
        >
          {{
@@ -1836,7 +1844,10 @@
            <div class="strategy-cell">
              {visibleRows.map((item: any) => (
                <div class="strategy-row">
                  <span class="strategy-label">{item.label}:</span>
                  <span class="strategy-label">
                    {item.label}
                    :
                  </span>
                  <span class="strategy-time">{item.timeText}</span>
                </div>
              ))}
@@ -2156,7 +2167,7 @@
      ellipsis: true,
      resizable: true,
      render(row) {
        return row.pointOnOffName ||'上下车均可'|| '-'
        return row.pointOnOffName || '上下车均可' || '-'
      },
    },
    {
@@ -2257,6 +2268,17 @@
})
const cardClassName = computed(() => activeTab.value === 'point' ? 'point-management-list' : '')
const currentOperationLogBusinessType = computed(() => {
  if (activeTab.value === 'fence')
    return 22
  if (activeTab.value === 'station')
    return 57
  return 45
})
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
watch(
  () => [activeTab.value, cityValue.value],
@@ -2385,6 +2407,9 @@
      <template #header>
        <n-flex justify="space-between" align="center">
          <n-flex align="center">
            <NButton @click="handleOpenOperationLog">
              操作日志
            </NButton>
            <template v-if="activeTab === 'point'">
              <span v-if="checkedRowKeys.length > 0" class="selected-text">
                已选择{{ checkedRowKeys.length }}条记录
@@ -2412,7 +2437,9 @@
          </n-flex>
          <n-flex align="center">
            <NButton v-permission="202642919" @click="handleBackToMap"> 查看地图视图 </NButton>
            <NButton v-permission="202642919" @click="handleBackToMap">
              查看地图视图
            </NButton>
            <NButton
              v-if="activeTab === 'fence'"
              v-permission="202642920"
@@ -2424,9 +2451,9 @@
            </NButton>
            <NButton
              v-else-if="activeTab === 'point'"
              v-permission="202642923"
              type="primary"
              secondary
              v-permission="202642923"
              @click="handleCreate"
            >
              新建点位
@@ -2435,14 +2462,13 @@
              v-else-if="activeTab === 'station'"
              trigger="hover"
              :disabled="!stationCreateDisabledReason"
            >
              <template #trigger>
                <span>
                  <NButton
                    v-permission="202642929"
                    type="primary"
                    secondary
                    v-permission="202642929"
                    :disabled="!!stationCreateDisabledReason"
                    @click="handleCreate"
                  >
@@ -2457,7 +2483,7 @@
      </template>
      <div class="flex-1 flex flex-col h-full">
        <n-data-table
        <NDataTable
          class="flex-1"
          :columns="columns"
          :data="listData"
@@ -2483,10 +2509,10 @@
                src="/src/assets/element-img/no-data.png"
                style="width: 123px; height: 125px"
                alt="no-data"
              />
              >
            </div>
          </template>
        </n-data-table>
        </NDataTable>
        <Pagination
          :count="pagination.itemCount"
          :page="pagination.page"
@@ -2496,6 +2522,11 @@
        />
      </div>
    </n-card>
    <OperationLogModal
      v-model:show="showOperationLogModal"
      :business-type="currentOperationLogBusinessType"
    />
  </div>
</template>
src/views/businessOperations/siteInfo/index.vue
@@ -3,6 +3,7 @@
import { useBoolean } from '@/hooks'
import { NButton, NDatePicker, NInput, NSelect, NSpace } from 'naive-ui'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import { deletePointSituationReport, exportPointSituationReport, fetchPointSituationReportList } from '@/service/api/operations'
import { downloadFile } from '@/utils/common'
import { computed, onMounted, reactive, ref } from 'vue'
@@ -207,7 +208,8 @@
          </NButton>
          <NButton
            v-permission="202642938"
            text type="primary"
            text
            type="primary"
            onClick={() => handleDelete(row)}
          >
            删除
@@ -291,6 +293,7 @@
const listData = ref<any>([])
const checkedRowKeys = ref<Array<string | number>>([])
const showOperationLogModal = ref(false)
const pagination = reactive({
  page: 1,
@@ -318,6 +321,10 @@
function handleResetSearch() {
  model.value = { ...initialModel }
  handleSearch()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
async function getList() {
@@ -429,6 +436,9 @@
      <template #header>
        <n-flex justify="space-between" align="center">
          <n-flex align="center">
            <NButton @click="handleOpenOperationLog">
              操作日志
            </NButton>
            <span v-if="checkedRowKeys.length > 0" style="color: rgba(23, 31, 38, 0.6);font-weight: 400;">已选择{{ checkedRowKeys.length }}条记录</span>
            <NButton v-permission="202642936" :disabled="checkedRowKeys.length === 0" @click="handleBatchExport">
              批量导出
@@ -466,6 +476,8 @@
        />
      </div>
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/operations/cruiseCheckIn/index.vue
@@ -4,6 +4,7 @@
import { NButton, NSwitch, NTag } from 'naive-ui'
import { addCheckLocation, deleteCheckLocation, editCheckLocation, getCheckLocationList, updateCheckLocationStatus } from '@/service/api/attendance'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import AddressFormModal from '@/views/operations/attendance/address/components/AddressFormModal.vue'
import dayjs from 'dayjs'
@@ -12,6 +13,7 @@
const modalRef = ref()
const showFormModal = ref(false)
const showOperationLogModal = ref(false)
const formMode = ref<'add' | 'edit'>('add')
const pageParams = ref({
@@ -31,6 +33,10 @@
function handleSearch() {
  pageParams.value.pageNum = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
async function handleSwitchChange(row: any) {
@@ -133,7 +139,7 @@
            删除
          </span>
          <NSwitch
           v-permission="2026429691"
            v-permission="2026429691"
            value={row.status}
            checked-value={1}
            unchecked-value={0}
@@ -266,7 +272,10 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex justify="flex-end">
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <NButton v-permission="202642967" type="primary" secondary @click="handleAdd">
            新增巡游打卡地
          </NButton>
@@ -291,6 +300,7 @@
      <AddressFormModal ref="modalRef" v-model:show="showFormModal" title="巡游打卡地" :mode="formMode" :type="2" @confirm="handleConfirmForm" />
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/operations/cruiseCheckInRule/index.vue
@@ -4,6 +4,7 @@
import { useBoolean } from '@/hooks'
import { NButton } from 'naive-ui'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import DetailModal from './components/DetailModal.vue'
import { deleteCruiseCheckInRule, fetchCruiseCheckInRuleList } from '@/service/api/maintenance'
@@ -14,6 +15,7 @@
const router = useRouter()
const showDetailModal = ref(false)
const showOperationLogModal = ref(false)
const detailModalRef = ref()
const pageParams = ref({
@@ -35,6 +37,10 @@
function handleSearch() {
  pageParams.value.pageNum = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
const tableScrollX = computed(() => Math.min(1600, 70 + 200 + 150 + 150 + 150 + 150 + 120))
@@ -224,7 +230,10 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex justify="flex-end">
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <NButton v-permission="202642961" type="primary" secondary @click="handleAdd">
            添加巡游打卡规则
          </NButton>
@@ -252,6 +261,7 @@
      ref="detailModalRef"
      v-model:show="showDetailModal"
    />
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/testDemo/geofenceManagement/index.vue
@@ -4,11 +4,13 @@
import { copyFence, getFenceList } from '@/service/api/copyText'
import { NButton, NSpace, NTag, NTooltip } from 'naive-ui'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
import { useRouter } from 'vue-router'
import sortDefault from '@/assets/geofence/sort1.png'
import sortAsc from '@/assets/geofence/sort2.png'
import sortDesc from '@/assets/geofence/sort3.png'
import dayjs from 'dayjs'
const { hasPermission } = usePermission()
const router = useRouter()
@@ -36,6 +38,7 @@
  pageNum: 1,
  pageSize: 10,
})
const showOperationLogModal = ref(false)
function handleResetSearch() {
  model.value = { ...initialModel }
@@ -45,6 +48,10 @@
function handleSearch() {
  pageParams.value.pageNum = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
const columns = computed<DataTableColumns<any>>(() => [
@@ -496,10 +503,15 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex v-permission="202642975" justify="flex-end">
          <NButton type="primary" secondary @click="handleToDetail({}, 'add')">
            新建围栏
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <div v-permission="202642975">
            <NButton type="primary" secondary @click="handleToDetail({}, 'add')">
              新建围栏
            </NButton>
          </div>
        </n-flex>
      </template>
      <div class="flex-1 flex flex-col h-full">
@@ -517,6 +529,8 @@
        <Pagination class="robotaxi-pagination mt-12px" :count="count" :page="pageParams.pageNum" :page-size="pageParams.pageSize" @change="changePage" />
      </div>
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/transaction/directServiceManagement/index.vue
@@ -9,11 +9,13 @@
import dayjs from 'dayjs'
import { useRouter } from 'vue-router'
import Pagination from '@/components/common/Pagination.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false)
const message = useMessage()
const router = useRouter()
const dialog = useDialog()
const showOperationLogModal = ref(false)
const initialModel = {
  cityCode: null,
@@ -33,6 +35,10 @@
function handleSearch() {
  pageParams.value.pageNum = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
const count = ref(0)
@@ -343,7 +349,10 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex justify="flex-end">
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <NButton
            v-permission="202642944"
            secondary
@@ -385,6 +394,7 @@
        />
      </div>
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/transaction/passwordFreeStrategy/index.vue
@@ -8,10 +8,12 @@
import SearchPanel from '@/components/custom/SearchPanel.vue'
import Pagination from '@/components/common/Pagination.vue'
import dayjs from 'dayjs'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false)
const router = useRouter()
const dialog = useDialog()
const showOperationLogModal = ref(false)
const initialModel = {
  createTimeRange: null as [number, number] | null,
@@ -32,6 +34,10 @@
function handleSearch() {
  pageParams.value.page = 1
  getList()
}
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
const count = ref(0)
@@ -268,10 +274,13 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex justify="flex-end">
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <NButton
            secondary
            v-permission="202642951"
            secondary
            type="primary"
            @click="handleAdd"
          >
@@ -309,5 +318,6 @@
        />
      </div>
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>
src/views/userContent/active/activityManagement/index.vue
@@ -6,6 +6,7 @@
import { fetchCouponActivityList, updateCouponActivityStatus } from '@/service/api/coupon'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import Pagination from '@/components/common/Pagination.vue'
import OperationLogModal from '@/components/custom/OperationLogModal.vue'
const router = useRouter()
const message = useMessage()
@@ -45,6 +46,11 @@
const total = ref(0)
const currentPage = ref(1)
const pageSize = ref(10)
const showOperationLogModal = ref(false)
function handleOpenOperationLog() {
  showOperationLogModal.value = true
}
function handleSearch() {
  currentPage.value = 1
@@ -350,7 +356,10 @@
    <n-card class="flex-1 robotaxi-table-card">
      <template #header>
        <n-flex justify="flex-end">
        <n-flex justify="space-between">
          <NButton @click="handleOpenOperationLog">
            操作日志
          </NButton>
          <NButton v-permission="202642910" type="primary" secondary @click="handleAdd">
            添加活动
          </NButton>
@@ -381,6 +390,8 @@
        />
      </div>
    </n-card>
    <OperationLogModal v-model:show="showOperationLogModal" />
  </div>
</template>