ai-coding
2026-06-28 288fcfc3b4e520e326e08b25a4cd93068a9e7ee1
Merge origin/release-628 into develop
[ai-coding] [黄星炤]
4个文件已修改
87 ■■■■■ 已修改文件
src/service/api/fleet.ts 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/table.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/fleetManagement/components/StaffSelectModal.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/fleetManagement/components/VehicleSelectModal.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/service/api/fleet.ts
@@ -29,6 +29,7 @@
  vehicleAttribute?: number
  pageNum: number
  pageSize: number
  isBind?: number
}) {
  return request.Post<Service.ResponseResult<any>>('/vehicleConvoy/api/v1/vehicle/page-list', data)
}
src/utils/table.ts
@@ -20,7 +20,7 @@
]
export function shouldIgnoreTableRowClick(target: EventTarget | null, extraSelectors: string[] = []) {
  if (!(target instanceof HTMLElement))
  if (!(target instanceof Element))
    return false
  return [...DEFAULT_IGNORE_ROW_CLICK_SELECTORS, ...extraSelectors].some(selector => target.closest(selector))
src/views/assetManagement/fleetManagement/components/StaffSelectModal.vue
@@ -12,7 +12,7 @@
} from '@/utils/table'
interface StaffItem {
  id: number
  id: number | string
  nickName: string
  uniqueNumber: string
  phoneNumber: string
@@ -25,7 +25,7 @@
}
interface Props {
  selectedIds?: number[]
  selectedIds?: Array<string | number>
  requestParams?: {
    isBind?: number
  }
@@ -58,12 +58,12 @@
const isRoleSelectOpen = ref(false)
// 选中的行
const checkedRowKeys = ref<number[]>([])
const checkedRowKeys = ref<string[]>([])
const listData = ref<StaffItem[]>([])
// 缓存所有加载过的数据,以便在 handleConfirm 时能找到不在当前页但在 checkedRowKeys 中的项
const allLoadedData = ref<Map<number, StaffItem>>(new Map())
const allLoadedData = ref<Map<string, StaffItem>>(new Map())
const count = ref(0)
const currentPage = ref(1)
@@ -165,10 +165,11 @@
    const res = await fetchOperationsUserList({
      nickName: searchModel.value.nickName,
      phoneNumber: searchModel.value.phoneNumber,
      roleId: searchModel.value.roleId,
      roleId: searchModel.value.roleId as number | undefined,
      ...props.requestParams,
      pageNum: currentPage.value,
      pageSize: pageSize.value,
      isBind: 0,
    })
    if (res.code === 200 && res.data) {
@@ -177,11 +178,11 @@
      // 存入缓存
      listData.value.forEach((item) => {
        allLoadedData.value.set(item.id, item)
        allLoadedData.value.set(String(item.id), item)
      })
    }
    else {
      window.$message?.error(res.message || '获取人员列表失败')
      // window.$message?.error(res.message || '获取人员列表失败')
    }
  }
  catch (error) {
@@ -221,6 +222,7 @@
  searchModel.value.phoneNumber = ''
  searchModel.value.roleId = null
  currentPage.value = 1
  pageSize.value = 10
  getStaffList()
}
@@ -250,18 +252,22 @@
}
function handleUpdateChecked(rowKeys: Array<string | number>) {
  checkedRowKeys.value = rowKeys.map(key => Number(key))
  checkedRowKeys.value = rowKeys.map(key => String(key))
}
function toggleRowSelection(row: StaffItem) {
  if (props.selectionDisabled?.(row))
    return
  checkedRowKeys.value = toggleMultiSelectRowKey(checkedRowKeys.value, row.id)
  const rowKey = String(row.id)
  if (!rowKey)
    return
  checkedRowKeys.value = toggleMultiSelectRowKey(checkedRowKeys.value, rowKey)
}
function getRowClassName(row: StaffItem) {
  return getMultiSelectRowClassName(row.id, checkedRowKeys.value)
  return getMultiSelectRowClassName(String(row.id), checkedRowKeys.value)
}
function getRowProps(row: StaffItem) {
@@ -276,8 +282,10 @@
}
// 分页改变
function handlePageChange(page: number) {
  currentPage.value = page
function changePage(page: number, size: number) {
  const isPageSizeChanged = size !== pageSize.value
  pageSize.value = size
  currentPage.value = isPageSizeChanged ? 1 : page
  getStaffList()
}
@@ -285,7 +293,7 @@
watch(visible, (val) => {
  if (val) {
    handleReset()
    checkedRowKeys.value = [...props.selectedIds]
    checkedRowKeys.value = props.selectedIds.map(id => String(id))
    getRoleList()
  }
  else {
@@ -309,7 +317,7 @@
        <span style="font-size: 16px; font-weight: bold">选择成员</span>
      </template>
      <template #header-extra>
        <div class="modal-close-trigger" text  @click="handleCancel">
        <div class="modal-close-trigger" text @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
@@ -371,17 +379,10 @@
            :data="listData"
            :loading="loading"
            :bordered="false"
            :row-key="(row: StaffItem) => row.id"
            :row-key="(row: StaffItem) => String(row.id)"
            :row-class-name="getRowClassName"
            :row-props="getRowProps"
            :pagination="{
              page: currentPage,
              pageSize,
              itemCount: count,
              showSizePicker: false,
              onChange: handlePageChange,
              prefix: ({ itemCount }) => `第 ${(currentPage - 1) * pageSize + 1}-${Math.min(currentPage * pageSize, itemCount || 0)} 条 / 总共 ${itemCount || 0} 条`,
            }"
            :pagination="false"
            @update:checked-row-keys="handleUpdateChecked"
          >
            <template #empty>
@@ -391,6 +392,13 @@
            </template>
          </n-data-table>
        </div>
        <Pagination
          :count="count"
          :page="currentPage"
          :page-size="pageSize"
          style="margin-top: 12px; flex-shrink: 0"
          @change="changePage"
        />
      </div>
      <template #footer>
src/views/assetManagement/fleetManagement/components/VehicleSelectModal.vue
@@ -150,14 +150,26 @@
async function getVehicleList() {
  startLoading()
  try {
    const requestList = props.requestList || fetchVehiclePageList
    const res = await requestList({
      vehicleCode: searchModel.value.vehicleCode,
      fleetName: searchModel.value.fleetName,
      plateNumber: searchModel.value.plateNumber,
      pageNum: currentPage.value,
      pageSize: pageSize.value,
    })
    let res
    if (props.requestList) {
      res = await props.requestList({
        vehicleCode: searchModel.value.vehicleCode,
        fleetName: searchModel.value.fleetName,
        plateNumber: searchModel.value.plateNumber,
        pageNum: currentPage.value,
        pageSize: pageSize.value,
      })
    }
    else {
      res = await fetchVehiclePageList({
        vehicleCode: searchModel.value.vehicleCode,
        fleetName: searchModel.value.fleetName,
        plateNumber: searchModel.value.plateNumber,
        pageNum: currentPage.value,
        pageSize: pageSize.value,
        isBind: 0,
      })
    }
    if (res.code === 200 && res.data) {
      listData.value = res.data.records || []
@@ -279,7 +291,7 @@
        <span style="font-size: 16px; font-weight: bold">添加车辆</span>
      </template>
      <template #header-extra>
        <div class="modal-close-trigger" text  @click="handleCancel">
        <div class="modal-close-trigger" text @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>