zjk
2026-04-27 7f37ae72b47baf08fcae83c3c744fde320494f97
refactor(activityManagement): 清理未使用的文本文件并优化表格组件

- 删除 activityManagement 目录下已不再使用的三个文本文件
- 为 banner 管理页面的所有表格列添加 resizable 属性以支持列宽调整
- 优化 ReceiveRecord 组件中的日期选择器和表格列配置
- 为 ActivityOrderList 组件添加下单时间筛选功能
- 重构 ActivityInfo 组件布局,使用 div 替换 NCard 并优化空状态显示
- 修复多个组件中的代码格式和模板语法一致性
3个文件已删除
4个文件已修改
685 ■■■■■ 已修改文件
src/views/userContent/active/activityManagement/components/ActivityInfo.vue 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/components/ActivityOrderList.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/components/ReceiveRecord.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/new.txt 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/notice.txt 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/user.txt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/banner/index.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/active/activityManagement/components/ActivityInfo.vue
@@ -115,8 +115,8 @@
}))
const strategyColumns = [
  { title: '策略名称', key: 'name', minWidth: 200 },
  { title: '优惠券数量', key: 'couponCount', width: 120 },
  { title: '策略名称', key: 'name', minWidth: 400 },
  // { title: '优惠券数量', key: 'couponCount', width: 120 },
]
const strategyData = computed(() => {
@@ -128,9 +128,9 @@
})
const userColumns = [
  { title: '用户群', key: 'group', width: 200 },
  { title: '策略名称', key: 'name', minWidth: 200 },
  { title: '用户数量', key: 'userCount', width: 120 },
  { title: '用户群', key: 'group', width: 400 },
  { title: '策略名称', key: 'name', minWidth: 400 },
  // { title: '用户数量', key: 'userCount', width: 120 },
]
const userData = computed(() => {
@@ -170,173 +170,195 @@
</script>
<template>
  <n-spin :show="loading">
  <NSpin :show="loading">
    <div class="flex flex-col gap-12px">
    <!-- 基础信息 -->
    <n-card class="rounded-6px" :bordered="false" size="medium">
      <div class="head">基础信息</div>
      <div class="info-grid mt-16px">
        <div class="info-item">
          <span class="label">活动名称:</span>
          <span class="value">{{ basicInfo.name }}</span>
      <!-- 基础信息 -->
      <div class="box">
        <div class="head">
          基础信息
        </div>
        <div class="info-item">
          <span class="label">活动类型:</span>
          <span class="value">{{ basicInfo.type }}</span>
        </div>
        <div class="info-item">
          <span class="label">活动时间:</span>
          <span class="value">{{ basicInfo.time }}</span>
        </div>
        <div class="info-item">
          <span class="label">是否开启活动总限额:</span>
          <span class="value">{{ basicInfo.hasLimit }}</span>
        </div>
        <div class="info-item col-span-2">
          <span class="label">限额策略:</span>
          <span class="value">{{ basicInfo.limitStrategy }}</span>
        </div>
        <div class="info-item col-span-3 items-start">
          <span class="label shrink-0">活动说明:</span>
          <span class="value">{{ basicInfo.desc }}</span>
        </div>
        <div class="info-item col-span-3 items-start">
          <span class="label shrink-0">活动封面图:</span>
          <div class="w-182px h-120px bg-[#F2F3F5] rounded-4px">
            <n-image
              v-if="basicInfo.cover"
              :src="basicInfo.cover"
              object-fit="cover"
              class="rounded-4px border border-[#E5E5E5]"
              fallback-src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab6c7ff4-403a-4a2c-9ebf-310c023dc20f.png"
            />
        <div class="info-grid mt-16px">
          <div class="info-item">
            <span class="label">活动名称:</span>
            <span class="value">{{ basicInfo.name }}</span>
          </div>
          <div class="info-item">
            <span class="label">活动类型:</span>
            <span class="value">{{ basicInfo.type }}</span>
          </div>
          <div class="info-item">
            <span class="label">活动时间:</span>
            <span class="value">{{ basicInfo.time }}</span>
          </div>
          <div class="info-item">
            <span class="label">是否开启活动总限额:</span>
            <span class="value">{{ basicInfo.hasLimit }}</span>
          </div>
          <div class="info-item col-span-2">
            <span class="label">限额策略:</span>
            <span class="value">{{ basicInfo.limitStrategy }}</span>
          </div>
          <div class="info-item col-span-3 items-start">
            <span class="label shrink-0">活动说明:</span>
            <span class="value">{{ basicInfo.desc }}</span>
          </div>
          <div class="info-item col-span-3 items-start">
            <span class="label shrink-0">活动封面图:</span>
            <div class="w-182px h-120px bg-[#F2F3F5] rounded-4px">
              <NImage
                v-if="basicInfo.cover"
                :src="basicInfo.cover"
                object-fit="cover"
                class="rounded-4px border border-[#E5E5E5]"
                fallback-src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab6c7ff4-403a-4a2c-9ebf-310c023dc20f.png"
              />
            </div>
          </div>
        </div>
      </div>
    </n-card>
    <!-- 活动策略 1 -->
    <n-card class="rounded-6px" :bordered="false" size="medium">
      <div class="head">活动策略</div>
      <div class="mt-16px">
        <n-data-table
          :columns="strategyColumns"
          :data="strategyData"
          :bordered="false"
        />
      </div>
    </n-card>
    <!-- 发放用户 -->
    <n-card class="rounded-6px" :bordered="false" size="medium">
      <div class="head">发放用户</div>
      <div class="mt-16px">
        <n-data-table
          :columns="userColumns"
          :data="userData"
          :bordered="false"
        />
      </div>
    </n-card>
    <!-- 通知方式 -->
    <n-card class="rounded-6px" :bordered="false" size="medium">
      <div class="head">通知方式</div>
      <div class="mt-16px">
        <div class="sub-title mb-12px">微信消息通知</div>
        <div class="info-grid">
          <div class="info-item">
            <span class="label">触达时机:</span>
            <span class="value">{{ wechatNotify.trigger }}</span>
          </div>
          <div class="info-item">
            <span class="label">到期时间通知:</span>
            <span class="value">{{ wechatNotify.expire }}</span>
          </div>
          <div class="info-item">
            <span class="label">券生效通知:</span>
            <span class="value">{{ wechatNotify.effect }}</span>
          </div>
      <!-- 活动策略 1 -->
      <div class="box">
        <div class="head">
          活动策略
        </div>
        <div class="sub-title mt-32px mb-12px">短信通知</div>
        <div class="info-grid">
          <div class="info-item">
            <span class="label">触达时机:</span>
            <span class="value">{{ smsNotify.trigger }}</span>
          </div>
          <div class="info-item">
            <span class="label">到期时间通知:</span>
            <span class="value">{{ smsNotify.expire }}</span>
          </div>
          <div class="info-item">
            <span class="label">券生效通知:</span>
            <span class="value">{{ smsNotify.effect }}</span>
          </div>
          <div class="info-item col-span-3">
            <span class="label">短信通知屏蔽时间:</span>
            <span class="value">{{ smsNotify.blockTime }}</span>
          </div>
        <div class="mt-16px">
          <NDataTable
            :columns="strategyColumns"
            :data="strategyData"
            :bordered="false"
            :style="strategyData.length === 0 ? { minHeight: '262px' } : {}"
            :pagination="false"
          >
            <template #empty>
              <div class="flex-center">
                <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }">
              </div>
            </template>
          </NDataTable>
        </div>
      </div>
        <div class="sub-title mt-32px mb-12px">小程序弹窗通知</div>
        <div class="info-grid">
          <div class="info-item">
            <span class="label">触达时机:</span>
            <span class="value">{{ miniProgramNotify.trigger }}</span>
      <!-- 发放用户 -->
      <div class="box">
        <div class="head">
          发放用户
        </div>
        <div class="mt-16px">
          <NDataTable
            :columns="userColumns"
            :data="userData"
            :bordered="false"
            :style="userData.length === 0 ? { minHeight: '262px' } : {}"
            :pagination="false"
          >
            <template #empty>
              <div class="flex-center">
                <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }">
              </div>
            </template>
          </NDataTable>
        </div>
      </div>
      <!-- 通知方式 -->
      <div class="box">
        <div class="head">
          通知方式
        </div>
        <div class="mt-16px">
          <div class="sub-title mb-12px">
            微信消息通知
          </div>
          <div class="info-item">
            <span class="label">弹窗标题:</span>
            <span class="value">{{ miniProgramNotify.title }}</span>
          <div class="info-grid">
            <div class="info-item">
              <span class="label">触达时机:</span>
              <span class="value">{{ wechatNotify.trigger }}</span>
            </div>
            <div class="info-item">
              <span class="label">到期时间通知:</span>
              <span class="value">{{ wechatNotify.expire }}</span>
            </div>
            <div class="info-item">
              <span class="label">券生效通知:</span>
              <span class="value">{{ wechatNotify.effect }}</span>
            </div>
          </div>
          <div class="info-item">
            <span class="label">按钮文案:</span>
            <span class="value">{{ miniProgramNotify.buttonText }}</span>
          <div class="sub-title mt-32px mb-12px">
            短信通知
          </div>
          <div class="info-item">
            <span class="label">券生效通知:</span>
            <span class="value">{{ miniProgramNotify.effect }}</span>
          <div class="info-grid">
            <div class="info-item">
              <span class="label">触达时机:</span>
              <span class="value">{{ smsNotify.trigger }}</span>
            </div>
            <div class="info-item">
              <span class="label">到期时间通知:</span>
              <span class="value">{{ smsNotify.expire }}</span>
            </div>
            <div class="info-item">
              <span class="label">券生效通知:</span>
              <span class="value">{{ smsNotify.effect }}</span>
            </div>
            <div class="info-item col-span-3">
              <span class="label">短信通知屏蔽时间:</span>
              <span class="value">{{ smsNotify.blockTime }}</span>
            </div>
          </div>
          <div class="info-item">
            <span class="label">生效toast文案:</span>
            <span class="value">{{ miniProgramNotify.effectToast }}</span>
          <div class="sub-title mt-32px mb-12px">
            小程序弹窗通知
          </div>
          <div class="info-item">
            <span class="label">到期时间通知:</span>
            <span class="value">{{ miniProgramNotify.expire }}</span>
          </div>
          <div class="info-item">
            <span class="label">到期toast文案:</span>
            <span class="value">{{ miniProgramNotify.expireToast }}</span>
          </div>
          <div class="info-item">
            <span class="label">是否开启浮窗:</span>
            <span class="value">{{ miniProgramNotify.enableFloat }}</span>
          </div>
          <div class="info-item">
            <span class="label">浮窗优先级:</span>
            <span class="value">{{ miniProgramNotify.floatPriority }}</span>
          </div>
          <div class="info-item col-span-3">
            <span class="label">跳转链接:</span>
            <span class="value">{{ miniProgramNotify.linkUrl }}</span>
          <div class="info-grid">
            <div class="info-item">
              <span class="label">弹窗标题:</span>
              <span class="value">{{ miniProgramNotify.title }}</span>
            </div>
            <div class="info-item">
              <span class="label">按钮文案:</span>
              <span class="value">{{ miniProgramNotify.buttonText }}</span>
            </div>
            <div class="info-item">
              <span class="label">券生效通知:</span>
              <span class="value">{{ miniProgramNotify.effect }}</span>
            </div>
            <div class="info-item">
              <span class="label">生效toast文案:</span>
              <span class="value">{{ miniProgramNotify.effectToast }}</span>
            </div>
            <div class="info-item">
              <span class="label">到期时间通知:</span>
              <span class="value">{{ miniProgramNotify.expire }}</span>
            </div>
            <div class="info-item">
              <span class="label">到期toast文案:</span>
              <span class="value">{{ miniProgramNotify.expireToast }}</span>
            </div>
            <div class="info-item">
              <span class="label">是否开启浮窗:</span>
              <span class="value">{{ miniProgramNotify.enableFloat }}</span>
            </div>
            <div class="info-item">
              <span class="label">浮窗优先级:</span>
              <span class="value">{{ miniProgramNotify.floatPriority }}</span>
            </div>
            <div class="info-item">
              <span class="label">跳转链接:</span>
              <span class="value">{{ miniProgramNotify.linkUrl }}</span>
            </div>
          </div>
        </div>
      </div>
    </n-card>
    </div>
  </n-spin>
  </NSpin>
</template>
<style scoped lang="scss">
:deep(.n-card__content) {
  padding: 16px 24px;
}
.head {
  font-family: PingFang SC;
  font-size: 16px;
  font-size: 14px;
  font-weight: 600;
  line-height: 24px;
  letter-spacing: normal;
  color: #171f26;
  position: relative;
@@ -355,6 +377,12 @@
    border-radius: 3px;
    background: #0068ff;
  }
}
.box {
  background-color: #fff;
  border-radius: 6px;
  padding: 16px 24px;
}
.info-grid {
@@ -393,9 +421,9 @@
.sub-title{
  font-size: 14px;
font-weight: 500;
line-height: 20px;
color: #171F26;
  font-weight: 500;
  line-height: 20px;
  color: #171F26;
}
:deep(.n-data-table .n-data-table-th) {
src/views/userContent/active/activityManagement/components/ActivityOrderList.vue
@@ -26,6 +26,7 @@
  channel: null,
  city: null,
  status: null,
  orderTime: null,
})
const loading = ref(false)
@@ -75,6 +76,7 @@
    channel: null,
    city: null,
    status: null,
    orderTime: null,
  }
  currentPage.value = 1
  getList()
@@ -93,7 +95,7 @@
}
function handleDetail(row: any) {
  message.info('点击了详情: ' + row.id)
  message.info(`点击了详情: ${row.id}`)
}
async function getList() {
@@ -104,7 +106,8 @@
    for (let i = 0; i < pageSize.value; i++) {
      const idx = (currentPage.value - 1) * pageSize.value + i + 1
      if (idx > 1000) break
      if (idx > 1000)
        break
      mockData.push({
        id: `mock-${idx}`,
@@ -122,7 +125,8 @@
    }
    list.value = mockData
    total.value = 1000
  } finally {
  }
  finally {
    loading.value = false
  }
}
@@ -269,26 +273,30 @@
      </NSelect>
    ),
  },
  {
    label: '下单时间',
    path: 'orderTime',
    render: () => <n-date-picker format="yyyy/MM/dd" v-model:value={searchModel.value.orderTime} type="daterange" clearable actions={[]} close-on-select={true} />,
  },
])
const columns = computed<DataTableColumns<any>>(() => [
  { type: 'selection', width: 40 },
  { title: '订单编号', key: 'orderNo', width: 100, align: 'left' },
  { title: '下单时间', key: 'orderTime', width: 150, align: 'left' },
  { title: '订单来源', key: 'source', width: 120, align: 'left' },
  { title: '乘车时间', key: 'rideTime', width: 150, align: 'left' },
  { title: '下单用户昵称', key: 'userName', width: 120, align: 'left' },
  { title: '下单用户手机', key: 'userPhone', width: 120, align: 'left' },
  { title: '起点', key: 'startPoint', width: 150, align: 'left', ellipsis: true },
  { title: '终点', key: 'endPoint', width: 150, align: 'left', ellipsis: true },
  { title: '订单金额', key: 'orderAmount', width: 100, align: 'left' },
  { title: '优惠金额', key: 'discountAmount', width: 100, align: 'left' },
  { type: 'selection', width: 50, resizable: true },
  { title: '订单编号', key: 'orderNo', width: 100, resizable: true },
  { title: '下单时间', key: 'orderTime', width: 150, resizable: true },
  { title: '订单来源', key: 'source', width: 120, resizable: true },
  { title: '乘车时间', key: 'rideTime', width: 150, resizable: true },
  { title: '下单用户昵称', key: 'userName', width: 120, resizable: true },
  { title: '下单用户手机', key: 'userPhone', width: 120, resizable: true },
  { title: '起点', key: 'startPoint', width: 150, resizable: true, ellipsis: true },
  { title: '终点', key: 'endPoint', width: 150, resizable: true, ellipsis: true },
  { title: '订单金额', key: 'orderAmount', width: 100, resizable: true },
  { title: '优惠金额', key: 'discountAmount', width: 100, resizable: true },
  {
    title: '操作',
    key: 'actions',
    width: 80,
    fixed: 'right',
    align: 'left',
    render: (row) => {
      return <NButton text type="primary" onClick={() => handleDetail(row)}>详情</NButton>
    },
@@ -303,27 +311,31 @@
<template>
  <div class="orderListCard roboTaxi">
    <div class="roboTaxi-form-card">
      <n-form
      <NForm
        :model="searchModel"
        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">
          <NGi v-for="item in filterItems" :key="item.path" class="n-grid-item">
            <NFormItem :label="item.label" :path="item.path">
              <component :is="item.render" />
            </n-form-item>
          </n-gi>
            </NFormItem>
          </NGi>
          <template #action>
            <NButton @click="handleReset">重置</NButton>
            <NButton type="primary" @click="handleSearch">查询</NButton>
            <NButton @click="handleReset">
              重置
            </NButton>
            <NButton type="primary" @click="handleSearch">
              查询
            </NButton>
          </template>
        </SearchPanel>
      </n-form>
      </NForm>
    </div>
    <n-card class="flex-1 robotaxi-table-card" :bordered="false">
    <NCard class="flex-1 robotaxi-table-card" :bordered="false">
      <template #header>
        <div class="flex items-center gap-16px">
          <div class="flex gap-2px items-center">
@@ -337,23 +349,21 @@
                })
              }}
            </span>
            <NButton @click="handleBatchExport"
              >批量导出订单</NButton
            >
            <NButton @click="handleBatchExport">
              批量导出订单
            </NButton>
          </div>
          <!-- <NButton @click="handleBatchExport">批量导出订单</NButton> -->
          <div class="label">
            <span class="mr-16px"
              >订单金额合计: <span class="value">{{ orderTotal }}元</span>
            <span class="mr-16px">订单金额合计: <span class="value">{{ orderTotal }}元</span>
            </span>
            <span
              >优惠金额合计: <span class="value">{{ discountTotal }}元</span>
            <span>优惠金额合计: <span class="value">{{ discountTotal }}元</span>
            </span>
          </div>
        </div>
      </template>
      <div class="flex-1 flex flex-col h-full">
        <n-data-table
        <NDataTable
          class="flex-1"
          :columns="columns"
          :data="list"
@@ -361,8 +371,8 @@
          :bordered="false"
          :scroll-x="1400"
          :row-key="(row) => row.id"
          @update:checked-row-keys="handleCheck"
          flex-height
          @update:checked-row-keys="handleCheck"
        />
        <Pagination
          :count="total"
@@ -372,7 +382,7 @@
          @change="handlePageChange"
        />
      </div>
    </n-card>
    </NCard>
  </div>
</template>
src/views/userContent/active/activityManagement/components/ReceiveRecord.vue
@@ -90,7 +90,8 @@
    for (let i = 0; i < pageSize.value; i++) {
      const idx = (currentPage.value - 1) * pageSize.value + i + 1
      if (idx > 1000) break
      if (idx > 1000)
        break
      mockData.push({
        id: `mock-${idx}`,
@@ -104,7 +105,8 @@
    }
    list.value = mockData
    total.value = 1000
  } finally {
  }
  finally {
    loading.value = false
  }
}
@@ -119,15 +121,18 @@
  {
    label: '领取时间',
    path: 'time',
    render: () => <NDatePicker
    v-model:value={searchModel.value.time}
    type="datetimerange" clearable
    actions={[]}
    close-on-select={true}
    start-placeholder="开始时间"
    end-placeholder="结束时间"
    separator="-"
     />,
    render: () => (
      <NDatePicker
        v-model:value={searchModel.value.time}
        type="datetimerange"
        clearable
        actions={[]}
        close-on-select={true}
        start-placeholder="开始时间"
        end-placeholder="结束时间"
        separator="-"
      />
    ),
  },
  {
    label: '领取人',
@@ -143,14 +148,15 @@
    label: '状态',
    path: 'status',
    render: () => (
      <NSelect v-model:value={searchModel.value.status}
       options={statusOptions}
       placeholder="请选择"
       clearable
       max-tag-count="responsive"
      <NSelect
        v-model:value={searchModel.value.status}
        options={statusOptions}
        placeholder="请选择"
        clearable
        max-tag-count="responsive"
        onUpdate:show={(value: boolean) => isStatusSelectOpen.value = value}
      >
      {{
        {{
          arrow: () => (
            <img
              src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png"
@@ -166,16 +172,16 @@
])
const columns = computed<DataTableColumns<any>>(() => [
  { type: 'selection' },
  { title: '领取时间', key: 'time', align: 'left' },
  { title: '领取人', key: 'receiver', align: 'left' },
  { title: '领取人电话', key: 'phone', align: 'left' },
  { title: '领取数量', key: 'count', align: 'left' },
  { title: '到期时间', key: 'expireTime', align: 'left' },
  { type: 'selection', width: 50, resizable: true },
  { title: '领取时间', key: 'time', resizable: true },
  { title: '领取人', key: 'receiver', resizable: true },
  { title: '领取人电话', key: 'phone', resizable: true },
  { title: '领取数量', key: 'count', resizable: true },
  { title: '到期时间', key: 'expireTime', resizable: true },
  {
    title: '状态',
    key: 'status',
    align: 'left',
    resizable: true,
    render: (row) => {
      let type: 'default' | 'success' | 'warning' | 'error' | 'info' | 'primary' = 'default'
      switch (row.status) {
@@ -209,27 +215,31 @@
<template>
  <div class="recordCard roboTaxi">
    <div class="roboTaxi-form-card">
      <n-form
      <NForm
        :model="searchModel"
        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">
          <NGi v-for="item in filterItems" :key="item.path">
            <NFormItem :label="item.label" :path="item.path">
              <component :is="item.render" />
            </n-form-item>
          </n-gi>
            </NFormItem>
          </NGi>
          <template #action>
            <NButton @click="handleReset">重置</NButton>
            <NButton type="primary" @click="handleSearch">查询</NButton>
            <NButton @click="handleReset">
              重置
            </NButton>
            <NButton type="primary" @click="handleSearch">
              查询
            </NButton>
          </template>
        </SearchPanel>
      </n-form>
      </NForm>
    </div>
    <n-card class="flex-1 robotaxi-table-card" :bordered="false">
    <NCard class="flex-1 robotaxi-table-card" :bordered="false">
      <template #header>
        <div class="flex gap-2 items-center">
          <span
@@ -244,14 +254,15 @@
          </span>
          <NButton
            @click="handleBatchDelete"
            :disabled="checkedRowKeys.length === 0"
            >批量删除</NButton
            @click="handleBatchDelete"
          >
            批量删除
          </NButton>
        </div>
      </template>
      <div class="flex-1 flex flex-col h-full">
        <n-data-table
        <NDataTable
          class="flex-1"
          :columns="columns"
          :data="list"
@@ -259,8 +270,8 @@
          :bordered="false"
          :scroll-x="1000"
          :row-key="(row) => row.id"
          @update:checked-row-keys="handleCheck"
          flex-height
          @update:checked-row-keys="handleCheck"
        />
        <Pagination
          :count="total"
@@ -270,7 +281,7 @@
          @change="handlePageChange"
        />
      </div>
    </n-card>
    </NCard>
  </div>
</template>
src/views/userContent/active/activityManagement/new.txt
File was deleted
src/views/userContent/active/activityManagement/notice.txt
File was deleted
src/views/userContent/active/activityManagement/user.txt
File was deleted
src/views/userContent/banner/index.vue
@@ -47,17 +47,18 @@
    label: '状态',
    path: 'status',
    render: () => (
      <n-select
    v-model:value={searchForm.value.status}
    options={statusOptions as any}
     placeholder="请选择状态"
     onUpdate:show={(value: boolean) => isStatusSelectOpen.value = value}
     clearable >
      {{
      <n-select
        v-model:value={searchForm.value.status}
        options={statusOptions as any}
        placeholder="请选择状态"
        onUpdate:show={(value: boolean) => isStatusSelectOpen.value = value}
        clearable
      >
        {{
          arrow: () => (
            <img
              src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png"
              class={`arrow-icon ${isStatusSelectOpen.value ? 'arrow-icon--open' : ''}`}
              class={`arrow-icon ${isStatusSelectOpen.value ? 'arrow-icon--open' : ''}`}
              style={{ width: '16px', height: '16px' }}
              alt="arrow"
            />
@@ -71,7 +72,7 @@
            </div>
          ),
        }}
 </n-select>
      </n-select>
    ),
  },
])
@@ -80,11 +81,13 @@
  {
    type: 'selection',
    width: 50,
    resizable: true,
  },
  {
    title: '广告图',
    key: 'bannerPictures',
    width: 120,
    resizable: true,
    render: (row) => {
      let url = ''
      try {
@@ -113,6 +116,7 @@
    title: '广告标题',
    key: 'bannerTitle',
    width: 120,
    resizable: true,
  },
  // {
  //   title: '排序',
@@ -124,6 +128,7 @@
    title: '显示时间',
    key: 'time',
    width: 300,
    resizable: true,
    render: (row) => {
      return `${row.startTime} 至 ${row.endTime}`
    },
@@ -132,6 +137,7 @@
    title: '状态',
    key: 'status',
    width: 100,
    resizable: true,
    render: (row) => {
      const statusMap = {
        0: { text: '未开始', type: 'warning' as const },
@@ -147,6 +153,7 @@
    title: '上架状态',
    key: 'bannerStatus',
    width: 100,
    resizable: true,
    render: (row) => {
      return (
        <n-switch
@@ -190,6 +197,7 @@
    key: 'jumpTarget',
    width: 200,
    ellipsis: true,
    resizable: true,
    render: (row) => {
      if (row.jumpType === 2) {
        const name = row.appletName || '小程序'
@@ -206,6 +214,7 @@
    title: '创建时间',
    key: 'createTime',
    width: 180,
    resizable: true,
    render: row => row.createTime ? dayjs(row.createTime).format('YYYY/MM/DD HH:mm') : '-',
  },
  {
@@ -301,7 +310,7 @@
    positiveText: '确定',
    negativeText: '取消',
    maskClosable: false,
                autoFocus: false,
    autoFocus: false,
    onPositiveClick: async () => {
      const { error, code } = await deleteBanner(row.id) as any
      if (!error && code === 200) {
@@ -322,7 +331,7 @@
    positiveText: '确定',
    negativeText: '取消',
    maskClosable: false,
                autoFocus: false,
    autoFocus: false,
    onPositiveClick: async () => {
      // 并发删除
      try {
@@ -390,8 +399,12 @@
            </n-form-item>
          </n-gi>
          <template #action>
            <n-button @click="handleReset"> 重置 </n-button>
            <n-button type="primary" @click="handleSearch"> 查询 </n-button>
            <n-button @click="handleReset">
              重置
            </n-button>
            <n-button type="primary" @click="handleSearch">
              查询
            </n-button>
          </template>
        </SearchPanel>
      </n-form>
@@ -445,7 +458,7 @@
                src="/src/assets/element-img/no-data.png"
                style="width: 123px; height: 125px"
                @error="(e: any) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }"
              />
              >
            </div>
          </template>
        </n-data-table>