董国庆
2026-06-23 ffb4d50a336bc3739940b6771a74c57caf3ec138
修改bug
5个文件已修改
254 ■■■■■ 已修改文件
src/assets/element-img/tooltip.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/evaluationTag/index.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/financeBill/index.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/testDemo/operationWorkbench/list.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userContent/contentCenter/components/FaqForm.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/element-img/tooltip.png

src/views/system/evaluationTag/index.vue
@@ -2,7 +2,7 @@
import noDataImg from '@/assets/element-img/no-data.png'
import type { DataTableColumns } from 'naive-ui'
import { computed, h, onMounted, reactive, ref, watch } from 'vue'
import { NButton, NTag, NTooltip, useMessage } from 'naive-ui'
import { NButton, NTag, NSwitch, NTooltip, useMessage } from 'naive-ui'
import dayjs from 'dayjs'
import dragIcon from '@/assets/point/union.png'
import tooltipIcon from '@/assets/element-img/tooltip.png'
@@ -51,6 +51,7 @@
const modalTitle = ref('新增评价标签')
const draggingTagId = ref<string | null>(null)
const dragOverTagId = ref<string | null>(null)
const statusUpdatingId = ref<string | null>(null)
type TagFormRowData = Partial<TagFormValue>
@@ -455,6 +456,7 @@
    return
  }
  statusUpdatingId.value = row.id
  try {
    const res = await updateEvaluationTagStatus({
      id: row.id,
@@ -469,6 +471,9 @@
  }
  catch (error) {
    console.error('更新评价标签状态失败:', error)
  }
  finally {
    statusUpdatingId.value = null
  }
}
@@ -613,7 +618,7 @@
      title: () => (
        <div class="status-header flex items-center">
          <span>状态</span>
          <NTooltip trigger="hover" placement="top-start" class="flex items-center">
          <NTooltip trigger="hover" placement="top-center" class="flex items-center">
            {{
              trigger: () => (
                <span
@@ -621,7 +626,7 @@
                    marginLeft: '8px',
                  }}
                >
                  <img src={tooltipIcon} alt="提示" style={{ width: '18px', height: '18px', display: 'block' }} />
                  <img src={tooltipIcon} alt="提示" style={{ width: '10px', height: '10px', display: 'block' }} />
                </span>
              ),
              default: () => `最多可同时启用 ${maxEnabledCount} 个标签`,
@@ -651,7 +656,7 @@
    {
      title: '操作',
      key: 'actions',
      width: 120,
      width: 180,
      render: row => (
        <div class="flex items-center">
          <div>
@@ -664,15 +669,20 @@
              编辑
            </NButton>
          </div>
          <div class="ml-12px">
            <NButton
              text
          <div class="ml-12px flex items-center">
            <NSwitch
              v-permission="2026061534"
              type="primary"
              onClick={() => handleToggleStatus(row)}
              value={row.status}
              checkedValue={1}
              uncheckedValue={0}
              loading={statusUpdatingId.value === row.id}
              onUpdateValue={() => handleToggleStatus(row)}
            >
              {Number(row.status) === 1 ? '停用' : '启用'}
            </NButton>
              {{
                checked: () => '启用',
                unchecked: () => '停用',
              }}
            </NSwitch>
          </div>
        </div>
      ),
@@ -701,17 +711,22 @@
      <n-spin :show="loading">
        <div class="box">
          <div v-if="configData" class="switch-card mb-24px px-12px">
            <n-form label-placement="left" inline :show-feedback="false" require-mark-placement="left">
            <n-form
              label-placement="left"
              inline
              :show-feedback="false"
              require-mark-placement="left"
            >
              <div class="form-row">
                <n-form-item label="是否开启评价弹窗" required class="row-item">
                  <n-radio-group v-model:value="configData.popupEnabled" name="popupEnabled" @update:value="markDirty">
                  <n-radio-group
                    v-model:value="configData.popupEnabled"
                    name="popupEnabled"
                    @update:value="markDirty"
                  >
                    <n-space>
                      <n-radio :value="1">
                        是
                      </n-radio>
                      <n-radio :value="0">
                        否
                      </n-radio>
                      <n-radio :value="1"> 是 </n-radio>
                      <n-radio :value="0"> 否 </n-radio>
                    </n-space>
                  </n-radio-group>
                </n-form-item>
@@ -720,8 +735,18 @@
          </div>
          <div v-if="configData" class="box-inner">
            <n-tabs v-model:value="activeTab" type="line" animated class="dimension-tabs px-12px">
              <n-tab-pane v-for="item in tabOptions" :key="item.value" :name="item.value" :tab="item.label" />
            <n-tabs
              v-model:value="activeTab"
              type="line"
              animated
              class="dimension-tabs px-12px"
            >
              <n-tab-pane
                v-for="item in tabOptions"
                :key="item.value"
                :name="item.value"
                :tab="item.label"
              />
            </n-tabs>
            <div class="mb-12px">
@@ -729,12 +754,20 @@
                <SearchPanel>
                  <n-gi class="n-grid-item">
                    <n-form-item label="标签内容">
                      <n-input v-model:value="currentInputFilter.labelContent" placeholder="请输入" clearable />
                      <n-input
                        v-model:value="currentInputFilter.labelContent"
                        placeholder="请输入"
                        clearable
                      />
                    </n-form-item>
                  </n-gi>
                  <n-gi class="n-grid-item">
                    <n-form-item label="创建人">
                      <n-input v-model:value="currentInputFilter.createBy" placeholder="请输入" clearable />
                      <n-input
                        v-model:value="currentInputFilter.createBy"
                        placeholder="请输入"
                        clearable
                      />
                    </n-form-item>
                  </n-gi>
                  <n-gi class="n-grid-item">
@@ -749,17 +782,16 @@
                        <template #arrow>
                          <img
                            src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png"
                            :class="`arrow-icon ${isStatusSelectOpen ? 'arrow-icon--open' : ''}`"
                            style="width: 16px; height: 16px;"
                            :class="`arrow-icon ${
                              isStatusSelectOpen ? 'arrow-icon--open' : ''
                            }`"
                            style="width: 16px; height: 16px"
                            alt="arrow"
                          >
                          />
                        </template>
                        <template #empty>
                          <div class="flex-center">
                            <img
                              :src="noDataImg"
                              style="width: 50%;"
                            >
                            <img :src="noDataImg" style="width: 50%" />
                          </div>
                        </template>
                      </n-select>
@@ -781,9 +813,7 @@
                    </n-form-item>
                  </n-gi>
                  <template #action>
                    <NButton @click="handleResetSearch">
                      重置
                    </NButton>
                    <NButton @click="handleResetSearch"> 重置 </NButton>
                    <NButton type="primary" @click="handleSearch">
                      查询
                    </NButton>
@@ -795,9 +825,7 @@
            <n-card class="robotaxi-table-card" :bordered="false">
              <template #header>
                <n-flex justify="space-between">
                  <NButton @click="handleOpenOperationLog">
                    操作日志
                  </NButton>
                  <NButton @click="handleOpenOperationLog"> 操作日志 </NButton>
                  <div class="flex items-center justify-end">
                    <NButton type="primary" secondary @click="handleAddTag">
                      新增
@@ -820,7 +848,11 @@
                >
                  <template #empty>
                    <div class="flex-center">
                      <img :src="noDataImg" 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' }">
                      <img
                        :src="noDataImg"
                        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>
@@ -841,10 +873,14 @@
    <div class="footer">
      <n-space justify="end">
        <NButton class="w-84px" @click="handleCancelChanges">
          取消
        </NButton>
        <NButton v-permission="2026061535" type="primary" class="w-84px" :loading="saving" @click="handleSave">
        <NButton class="w-84px" @click="handleCancelChanges"> 取消 </NButton>
        <NButton
          v-permission="2026061535"
          type="primary"
          class="w-84px"
          :loading="saving"
          @click="handleSave"
        >
          保存
        </NButton>
      </n-space>
@@ -858,7 +894,10 @@
      :saving="tagModalSaving"
      @save="handleSaveTagForm"
    />
    <OperationLogModal v-model:show="showOperationLogModal" :business-type="59" />
    <OperationLogModal
      v-model:show="showOperationLogModal"
      :business-type="59"
    />
  </div>
</template>
@@ -868,6 +907,9 @@
  height: calc(100vh - 76px);
  width: 100%;
  background: #f5f7fa;
  :deep(.n-card-header) {
    padding: 12px 0px !important;
  }
}
.page-body {
@@ -969,7 +1011,7 @@
  transform: translateX(-50%);
  &::after {
    content: '';
    content: "";
    position: absolute;
    top: 100%;
    left: 50%;
src/views/system/financeBill/index.vue
@@ -1,6 +1,6 @@
<script setup lang="tsx">
import noDataImg from '@/assets/element-img/no-data.png'
import type { DataTableColumns } from 'naive-ui'
import type { DataTableColumns, FormInst, FormRules } from 'naive-ui'
import { computed, onMounted, ref } from 'vue'
import { NButton, NTag, useMessage } from 'naive-ui'
import dayjs from 'dayjs'
@@ -23,6 +23,11 @@
  codeResult: string
  responseJson: string
  createTime: string
}
interface PushFormModel {
  startTime: number | null
  endTime: number | null
}
const message = useMessage()
@@ -141,34 +146,64 @@
const showPushModal = ref(false)
const pushLoading = ref(false)
const pushStartTime = ref<number | null>(null)
const pushEndTime = ref<number | null>(null)
const pushFormRef = ref<FormInst | null>(null)
const pushFormModel = ref<PushFormModel>({
  startTime: null,
  endTime: null,
})
function validatePushDateRange() {
  const { startTime, endTime } = pushFormModel.value
  if (startTime !== null && endTime !== null && startTime > endTime)
    return new Error('开始日期不能晚于结束日期')
  return true
}
const pushFormRules: FormRules = {
  startTime: [
    {
      validator: validatePushDateRange,
      trigger: ['change', 'blur'],
    },
  ],
  endTime: [
    {
      validator: validatePushDateRange,
      trigger: ['change', 'blur'],
    },
  ],
}
function handleManualPush() {
  // 开始/结束日期均默认昨天
  const yesterday = dayjs().subtract(1, 'day').valueOf()
  pushStartTime.value = yesterday
  pushEndTime.value = yesterday
  pushFormModel.value.startTime = yesterday
  pushFormModel.value.endTime = yesterday
  pushFormRef.value?.restoreValidation()
  showPushModal.value = true
}
function handleClosePushModal() {
  showPushModal.value = false
  pushStartTime.value = null
  pushEndTime.value = null
  pushFormModel.value.startTime = null
  pushFormModel.value.endTime = null
  pushFormRef.value?.restoreValidation()
}
async function handleConfirmPush() {
  if (pushStartTime.value && pushEndTime.value && pushStartTime.value > pushEndTime.value) {
    message.warning('开始日期不能晚于结束日期')
  try {
    await pushFormRef.value?.validate()
  }
  catch {
    return
  }
  pushLoading.value = true
  try {
    const res = await manualPushFinanceBill({
      startTime: pushStartTime.value ? dayjs(pushStartTime.value).startOf('day').format('YYYY-MM-DD HH:mm:ss') : undefined,
      endTime: pushEndTime.value ? dayjs(pushEndTime.value).endOf('day').format('YYYY-MM-DD HH:mm:ss') : undefined,
      startTime: pushFormModel.value.startTime !== null ? dayjs(pushFormModel.value.startTime).startOf('day').format('YYYY-MM-DD HH:mm:ss') : undefined,
      endTime: pushFormModel.value.endTime !== null ? dayjs(pushFormModel.value.endTime).endOf('day').format('YYYY-MM-DD HH:mm:ss') : undefined,
    })
    if (res.code === 200) {
      message.success(res.msg || '手动推送成功')
@@ -298,36 +333,46 @@
      }"
      @update:show="(show) => !show && handleClosePushModal()"
    >
      <div class="push-form">
      <n-form
        ref="pushFormRef"
        :model="pushFormModel"
        :rules="pushFormRules"
        class="push-form"
        label-placement="top"
      >
        <div class="push-form-label">
          订单日期时间段
        </div>
        <div class="push-form-range">
          <n-date-picker
            v-model:value="pushStartTime"
            class="flex-1"
            type="date"
            format="yyyy/MM/dd"
            placeholder="开始日期"
            clearable
            :actions="[]"
            update-value-on-close
            close-on-select
          />
          <n-form-item path="startTime" class="push-form-item">
            <n-date-picker
              v-model:value="pushFormModel.startTime"
              class="w-full"
              type="date"
              format="yyyy/MM/dd"
              placeholder="开始日期"
              clearable
              :actions="[]"
              update-value-on-close
              close-on-select
            />
          </n-form-item>
          <span class="push-form-separator">-</span>
          <n-date-picker
            v-model:value="pushEndTime"
            class="flex-1"
            type="date"
            format="yyyy/MM/dd"
            placeholder="结束日期"
            clearable
            :actions="[]"
            update-value-on-close
            close-on-select
          />
          <n-form-item path="endTime" class="push-form-item">
            <n-date-picker
              v-model:value="pushFormModel.endTime"
              class="w-full"
              type="date"
              format="yyyy/MM/dd"
              placeholder="结束日期"
              clearable
              :actions="[]"
              update-value-on-close
              close-on-select
            />
          </n-form-item>
        </div>
      </div>
      </n-form>
      <template #action>
        <div class="flex justify-end gap-12px">
          <NButton @click="handleClosePushModal">
@@ -402,11 +447,16 @@
.push-form-range {
  display: flex;
  align-items: center;
  align-items: flex-start;
  gap: 8px;
}
.push-form-item {
  flex: 1;
}
.push-form-separator {
  margin-top: 6px;
  color: rgba(23, 31, 38, 0.6);
}
</style>
src/views/testDemo/operationWorkbench/list.vue
@@ -85,6 +85,8 @@
  { label: '待生效', value: 1 },
  { label: '启用中', value: 2 },
  { label: '已停用', value: 3 },
  { label: '待测试', value: 4 },
  { label: '测试中', value: 5 },
]
const fenceCompositionOptions = [
src/views/userContent/contentCenter/components/FaqForm.vue
@@ -107,6 +107,7 @@
                v-model:value="item.question"
                type="textarea"
                placeholder="请输入"
                auto-height
                :bordered="false"
                :resizable="false"
              />
@@ -118,6 +119,7 @@
                placeholder="请输入"
                :bordered="false"
                :resizable="false"
                auto-height
              />
            </td>
            <td style="text-align: center;">