董国庆
2026-06-25 fd2be4592ad78d5f76fa287721a0153fad9f6ea6
Merge branch 'deploy-2.0' into delete_station
32个文件已修改
275 ■■■■■ 已修改文件
src/components/custom/OperationLogModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/styles/index.css 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/fleetManagement/components/StaffSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/fleetManagement/components/VehicleSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleManagement/components/VehicleMaterialSelectModal.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleManagement/inventoryVehicle/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleManagement/operatingVehicle/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/cruise/parade-plan/detail.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/businessOperations/cruise/patrol-points/components/SelectPointModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/attendance/plan/copy.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/attendance/plan/edit.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/cruiseCheckInRule/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/personnel/personnelManagement/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/taskOrder/pendingReassignment/components/ReassignModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/taskOrder/taskOrderCenter/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/specialPointManagement/components/SelectPointModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/testPlanManagement/components/AssignVehicleModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/testPlanManagement/components/ManageTestVehicleModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/testPlanManagement/components/PointSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/testPlanManagement/components/VehicleSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/testPointManagement/index.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/directServiceManagement/components/CruisePlanSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/directServiceManagement/components/UserSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/order/orderManagement/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/passwordFreeStrategy/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/pricingManagement/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/add.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/components/CouponSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/components/UserSelectModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/coupon/BatchSendModal.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/coupon/index.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/contentCenter/components/AgreementListForm.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/custom/OperationLogModal.vue
@@ -326,8 +326,8 @@
        <span class="modal-title">{{ title }}</span>
      </template>
      <template #header-extra>
        <div class="cursor-pointer" @click="handleClose">
          <span class="modal-close-icon">×</span>
        <div class="modal-close-trigger" @click="handleClose">
          <span class="modal-close-icon modal-close-text">×</span>
        </div>
      </template>
src/styles/index.css
@@ -25,3 +25,37 @@
  pointer-events: none !important;
  cursor: default !important;
}
.modal-close-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 6px;
  cursor: pointer;
  user-select: none;
  transition: background-color 0.2s ease, color 0.2s ease;
}
.modal-close-trigger:hover {
  background-color: rgba(23, 31, 38, 0.08);
}
.modal-close-trigger:active {
  background-color: rgba(23, 31, 38, 0.14);
}
.modal-close-trigger > * {
  pointer-events: none;
}
.modal-close-text {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 10px;
  height: 10px;
  font-size: 18px;
  line-height: 1;
}
src/views/assetManagement/fleetManagement/components/StaffSelectModal.vue
@@ -309,8 +309,8 @@
        <span style="font-size: 16px; font-weight: bold">选择成员</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px;width: 10px;height: 10px;">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/assetManagement/fleetManagement/components/VehicleSelectModal.vue
@@ -279,8 +279,8 @@
        <span style="font-size: 16px; font-weight: bold">添加车辆</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/assetManagement/vehicleManagement/components/VehicleMaterialSelectModal.vue
@@ -138,8 +138,8 @@
      </template>
      <template #header-extra>
        <div class="close-btn" @click="handleCancel">
          <span class="close-icon">×</span>
        <div class="close-btn modal-close-trigger" @click="handleCancel">
          <span class="close-icon modal-close-text">×</span>
        </div>
      </template>
@@ -212,12 +212,7 @@
}
.close-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  flex-shrink: 0;
}
.close-icon {
src/views/assetManagement/vehicleManagement/inventoryVehicle/index.vue
@@ -416,6 +416,14 @@
    render: (row) => {
      return (
        <NSpace wrap={false} size={8}>
          <NButton
            text
            v-permission="50119"
            type="primary"
            onClick={() => handleDetail(row)}
          >
            详情
          </NButton>
          {row.status == '1' && (
            <NButton
              text
@@ -446,14 +454,7 @@
              更新信息
            </NButton>
          )}
          <NButton
            text
            v-permission="50119"
            type="primary"
            onClick={() => handleDetail(row)}
          >
            详情
          </NButton>
          {/* <NButton
            text
            v-permission="50120"
src/views/assetManagement/vehicleManagement/operatingVehicle/index.vue
@@ -404,20 +404,21 @@
        <NSpace justify="flex-start" wrap={false} size={8}>
          <NButton
            text
            v-permission="50134"
            type="primary"
            onClick={() => handleConvertToInventory(row)}
          >
            转为在库车辆
          </NButton>
          <NButton
            text
            v-permission="50131"
            type="primary"
            onClick={() => handleViewDetail(row)}
          >
            详情
          </NButton>
          <NButton
            text
            v-permission="50134"
            type="primary"
            onClick={() => handleConvertToInventory(row)}
          >
            转为在库车辆
          </NButton>
        </NSpace>
      )
    },
src/views/businessOperations/cruise/parade-plan/detail.vue
@@ -902,13 +902,13 @@
    <div
      class="absolute bottom-0 left-0 right-0 flex justify-end gap-3 bg-white px-6 py-4"
      style="box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1); z-index: 100"
      style="box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1); z-index: 100" v-if="isEdit"
    >
      <NButton style="width: 84px; height: 32px" @click="handleBack">
        返回
      </NButton>
      <NButton
        v-if="isEdit"
        type="primary"
        style="width: 84px; height: 32px"
        @click="handleSave"
src/views/businessOperations/cruise/patrol-points/components/SelectPointModal.vue
@@ -264,8 +264,8 @@
        <span style="font-size: 16px; font-weight: bold">选择点位</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
      <div class="flex flex-col h-full overflow-hidden">
src/views/operations/attendance/plan/copy.vue
@@ -496,7 +496,8 @@
    >
      <div class="schedule-selector-header">
        <span class="schedule-selector-title">排班选择</span>
        <n-icon size="20" class="cursor-pointer" @click="closeScheduleModal">
        <div class="modal-close-trigger" @click="closeScheduleModal">
          <n-icon size="20">
          <svg
            xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
            stroke-linecap="round" stroke-linejoin="round"
@@ -506,6 +507,7 @@
          </svg>
        </n-icon>
      </div>
      </div>
      <div class="schedule-selector-content">
        <div
          v-for="shift in shiftTags" :key="`${shift.shiftName}-${shift.time}`" class="shift-option"
src/views/operations/attendance/plan/edit.vue
@@ -508,7 +508,8 @@
                            <line x1="15" y1="9" x2="9" y2="15" />
                            <line x1="9" y1="9" x2="15" y2="15" />
                          </svg>
                        </n-icon> -->
                          </n-icon>
        </div> -->
                        <img v-if="shifts && shifts.length > 0" src="/src/assets/point/warn.png" class="cell-delete-icon" @click.stop="openDeleteConfirm(teamIndex, dateIndex)">
                      </span>
                    </div>
@@ -539,7 +540,8 @@
    >
      <div class="schedule-selector-header">
        <span class="schedule-selector-title">排班选择</span>
        <n-icon size="20" class="cursor-pointer" @click="closeScheduleModal">
        <div class="modal-close-trigger" @click="closeScheduleModal">
          <n-icon size="20">
          <svg
            xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
            stroke-linecap="round" stroke-linejoin="round"
@@ -549,6 +551,7 @@
          </svg>
        </n-icon>
      </div>
      </div>
      <div class="schedule-selector-content">
        <div
          v-for="shift in shiftTags" :key="`${shift.shiftName}-${shift.time}`" class="shift-option"
src/views/operations/cruiseCheckInRule/index.vue
@@ -96,14 +96,6 @@
        <div class="flex items-center justify-start gap-2">
          <span
            class="cursor-pointer"
            v-permission="202642962"
            style={{ color: '#0068FF' }}
            onClick={() => handleEdit(row)}
          >
            编辑
          </span>
          <span
            class="cursor-pointer"
            v-permission="202642963"
            style={{ color: '#0068FF' }}
            onClick={() => handleDetail(row)}
@@ -112,6 +104,15 @@
          </span>
          <span
            class="cursor-pointer"
            v-permission="202642962"
            style={{ color: '#0068FF' }}
            onClick={() => handleEdit(row)}
          >
            编辑
          </span>
          <span
            class="cursor-pointer"
            v-permission="202642964"
            style={{ color: '#0068FF' }}
            onClick={() => handleDelete(row)}
src/views/operations/personnel/personnelManagement/index.vue
@@ -410,8 +410,8 @@
      <div class="flex items-center gap-16px">
        {/* <a v-permission="70115" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleEdit(row)}>编辑</a> */}
        <a v-permission="70117" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleResetPassword(row)}>重置密码</a>
        <a v-permission="70111" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => router.push(`/operations/personnel/personnelManagement/detail/${row.id}`)}>详情</a>
        <a v-permission="70117" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleResetPassword(row)}>重置密码</a>
        <a v-permission="70118" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleDelete(row)}>删除</a>
        <NSwitch
          v-permission="70116"
src/views/operations/taskOrder/pendingReassignment/components/ReassignModal.vue
@@ -314,8 +314,8 @@
        <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">任务改派</span>
      </template>
      <template #header-extra>
        <div text class="cursor-pointer" @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span>
        <div text class="cursor-pointer modal-close-trigger"  @click="handleCancel">
          <span class="modal-close-text" style="color: #999;">×</span>
        </div>
      </template>
src/views/operations/taskOrder/taskOrderCenter/index.vue
@@ -524,6 +524,14 @@
    render: (row) => {
      return (
        <NSpace>
          <NButton
            text
            v-permission="7054"
            type="primary"
            onClick={() => handleDetail(row)}
          >
            详情
          </NButton>
          {(row.status === 0 || row.status === 1) && (
            <NButton
              text
@@ -534,14 +542,7 @@
              分配
            </NButton>
          )}
          <NButton
            text
            v-permission="7054"
            type="primary"
            onClick={() => handleDetail(row)}
          >
            详情
          </NButton>
          <NButton
            text
            v-permission="7055"
src/views/testDemo/specialPointManagement/components/SelectPointModal.vue
@@ -196,8 +196,8 @@
        <span style="font-size: 16px; font-weight: bold">选择点位</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px;width: 10px;height: 10px;">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
      <div class="mb-4 flex items-end gap-4">
src/views/testDemo/testPlanManagement/components/AssignVehicleModal.vue
@@ -286,8 +286,8 @@
        <span style="font-size: 16px; font-weight: bold">{{ modalTitle }}</span>
      </template>
      <template #header-extra>
        <div class="cursor-pointer" text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="cursor-pointer modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/testDemo/testPlanManagement/components/ManageTestVehicleModal.vue
@@ -426,8 +426,8 @@
        <span style="font-size: 16px; font-weight: bold">管理测试车辆</span>
      </template>
      <template #header-extra>
        <div class="cursor-pointer" text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="cursor-pointer modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/testDemo/testPlanManagement/components/PointSelectModal.vue
@@ -224,8 +224,8 @@
        <span style="font-size: 16px; font-weight: bold">选择点位</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/testDemo/testPlanManagement/components/VehicleSelectModal.vue
@@ -223,8 +223,8 @@
        <span style="font-size: 16px; font-weight: bold">选择测试车辆</span>
      </template>
      <template #header-extra>
        <div text @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px">×</span>
        <div class="modal-close-trigger" text  @click="handleCancel">
          <span class="modal-close-text">×</span>
        </div>
      </template>
src/views/testDemo/testPointManagement/index.vue
@@ -10,8 +10,8 @@
import { uploadSingleFile } from '@/utils/upload'
// 定义地图图标在线链接
const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/36c926b7-1e6d-4310-86c2-a71b69dc49b7.png'
const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/8f048a0f-3c36-4b6e-ae14-77d85bc919bf.png'
const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/d8c0a834-069f-4e11-8130-1257d73ef449.png'
const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab2e2d89-ea82-4081-9729-ab212460c375.png'
const MARK_ICON_BLUE = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/73a51310-2871-4c4a-a763-8e1a59a31f50.png'
const router = useRouter()
src/views/transaction/directServiceManagement/components/CruisePlanSelectModal.vue
@@ -200,8 +200,8 @@
        <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">设置巡游计划</span>
      </template>
      <template #header-extra>
        <div text class="cursor-pointer" @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span>
        <div text class="cursor-pointer modal-close-trigger"  @click="handleCancel">
          <span class="modal-close-text" style="color: #999;">×</span>
        </div>
      </template>
src/views/transaction/directServiceManagement/components/UserSelectModal.vue
@@ -268,8 +268,8 @@
        <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">选择用户</span>
      </template>
      <template #header-extra>
        <div text class="cursor-pointer" @click="handleCancel">
          <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span>
        <div text class="cursor-pointer modal-close-trigger"  @click="handleCancel">
          <span class="modal-close-text" style="color: #999;">×</span>
        </div>
      </template>
src/views/transaction/order/orderManagement/index.vue
@@ -224,6 +224,9 @@
  { label: '待评价', value: 9, type: 'default', color: '#FFF8E6', textColor: '#FF9000' },
  { label: '已完成', value: 10, type: 'success', color: '#DCF5DD', textColor: '#0BB52D' },
  { label: '已取消', value: 0, type: 'default', color: '#171F260D', textColor: '#171F26CC' },
  { label: '退款中', value: 11, type: 'warning', color: '#FFF8E6', textColor: '#FF9000' },
  { label: '已退款', value: 12, type: 'success', color: '#DCF5DD', textColor: '#0BB52D' },
  { label: '退款失败', value: 13, type: 'error', color: '#FFF8E6', textColor: '#FF9000' },
]
const columns = computed<DataTableColumns<any>>(() => [
src/views/transaction/passwordFreeStrategy/index.vue
@@ -227,14 +227,6 @@
        <div class="flex items-center justify-start gap-2">
          <NButton
            text
            v-permission="202642951"
            type="primary"
            onClick={() => handleEdit(row)}
          >
            编辑
          </NButton>
          <NButton
            text
            v-permission="202642952"
            type="primary"
            onClick={() => handleDetail(row)}
@@ -243,6 +235,15 @@
          </NButton>
          <NButton
            text
            v-permission="202642951"
            type="primary"
            onClick={() => handleEdit(row)}
          >
            编辑
          </NButton>
          <NButton
            text
            v-permission="202642953"
            type="primary"
            onClick={() => handleDelete(row)}
src/views/transaction/pricingManagement/index.vue
@@ -120,20 +120,21 @@
          </NButton> */}
          <NButton
            text
            v-permission="6023"
            type="primary"
            onClick={() => router.push({ name: 'setPrice', query: { id: row.id, type: 'add', category: row.pricingType } })}
          >
            设置价格
          </NButton>
          <NButton
            text
            v-permission="6024"
            type="primary"
            onClick={() => router.push({ name: 'pricingDetail', query: { id: row.id, type: 'view', category: row.pricingType } })}
          >
            详情
          </NButton>
          <NButton
            text
            v-permission="6023"
            type="primary"
            onClick={() => router.push({ name: 'setPrice', query: { id: row.id, type: 'add', category: row.pricingType } })}
          >
            设置价格
          </NButton>
          {/* <NButton
            text
            v-permission="6025"
src/views/userContent/active/activityManagement/add.vue
@@ -567,7 +567,7 @@
function createUserColumns(groupIndex: number): DataTableColumns<any> {
  return [
    { title: '用户名称', key: 'nickName', width: 150 },
    { title: '白名单账号', key: 'account' },
    { title: '白名单账号', key: 'account',width:220 },
    {
      title: '状态',
      key: 'status',
@@ -2177,7 +2177,7 @@
.custom-tabs {
  position: fixed;
  background-color: rgb(244, 246, 248);
  z-index: 9999;
  z-index: 999;
  padding: 12px 12px 0 12px;
}
:deep(.n-upload-trigger--image-card) {
src/views/userContent/active/activityManagement/components/CouponSelectModal.vue
@@ -249,8 +249,8 @@
        <span style="font-size: 16px; font-weight: bold">选择优惠券</span>
      </template>
      <template #header-extra>
        <div @click="showModal = false">
          <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span>
        <div class="modal-close-trigger"  @click="showModal = false">
          <span class="modal-close-text">×</span>
        </div>
      </template>
      <div class="flex flex-col h-full overflow-hidden">
src/views/userContent/active/activityManagement/components/UserSelectModal.vue
@@ -231,8 +231,8 @@
        <span style="font-size: 16px; font-weight: bold">选择用户</span>
      </template>
      <template #header-extra>
        <div @click="showModal = false">
          <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span>
        <div class="modal-close-trigger"  @click="showModal = false">
          <span class="modal-close-text">×</span>
        </div>
      </template>
      <div class="flex flex-col h-full overflow-hidden">
src/views/userContent/active/coupon/BatchSendModal.vue
@@ -225,8 +225,8 @@
        <span style="font-size: 16px; font-weight: bold">选择用户</span>
      </template>
      <template #header-extra>
        <div @click="showModal = false">
          <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span>
        <div class="modal-close-trigger"  @click="showModal = false">
          <span class="modal-close-text">×</span>
        </div>
      </template>
      <div class="flex flex-col h-full overflow-hidden">
src/views/userContent/active/coupon/index.vue
@@ -476,14 +476,14 @@
      const status = Number(row.status)
      return (
        <n-space size={12}>
          <NButton text type="primary" v-permission="302314" onClick={() => handleDetail(row)}>
            详情
          </NButton>
          {status === 2 && (
            <NButton v-permission="302313" text type="primary" onClick={() => handleSend(row)}>
              发券
            </NButton>
          )}
          <NButton text type="primary" v-permission="302314" onClick={() => handleDetail(row)}>
            详情
          </NButton>
          {status === 1 && (
            <NButton text type="primary" v-permission="302316" onClick={() => handleEdit(row)}>
              编辑
src/views/userContent/contentCenter/components/AgreementListForm.vue
@@ -2,7 +2,7 @@
import noDataImg from "@/assets/element-img/no-data.png";
import { computed, h, onMounted, ref, watch } from "vue";
import { useRouter } from "vue-router";
import { NButton, NDataTable, NPopconfirm, NSpace, useMessage } from "naive-ui";
import { NButton, NDataTable, NSpace, useDialog, useMessage } from "naive-ui";
import type { DataTableColumns } from "naive-ui";
import OperationLogModal from "@/components/custom/OperationLogModal.vue";
import dragIcon from "@/assets/point/union.png";
@@ -31,6 +31,7 @@
}
const router = useRouter();
const dialog = useDialog();
const message = useMessage();
const tableLoading = ref(false);
const deleteLoadingId = ref<number | null>(null);
@@ -92,20 +93,15 @@
              { default: () => "编辑" }
            ),
            h(
              NPopconfirm,
              { onPositiveClick: () => handleDelete(row) },
              {
                trigger: () =>
                  h(
                    NButton,
                    {
                      text: true,
                      type: "primary",
                      loading: deleteLoadingId.value === row.id,
                onClick: () => handleDelete(row),
                    },
                    { default: () => "删除" }
                  ),
                default: () => "确认删除该协议吗?",
              {
                default: () => "删除",
              }
            ),
          ],
@@ -207,6 +203,22 @@
}
async function handleDelete(row: AgreementItem) {
  if (deleteLoadingId.value === row.nameId) return;
  dialog.warning({
    maskClosable: false,
    title: "确认删除",
    content: `确认删除协议"${row.title}"吗?`,
    positiveText: "确定",
    negativeText: "取消",
    autoFocus: false,
    onPositiveClick: async () => {
      await executeDelete(row);
    },
  });
}
async function executeDelete(row: AgreementItem) {
  deleteLoadingId.value = row.nameId;
  try {
    const res = await deleteLoginAgreement(row.nameId);
@@ -214,8 +226,10 @@
      message.success("删除成功");
      await loadList();
    } else {
      // message.error(res?.msg || '删除失败')
      message.error(res?.msg || "删除失败");
    }
  } catch (error: any) {
    message.error(error?.message || "删除失败");
  } finally {
    deleteLoadingId.value = null;
  }