| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="8.461538314819336" height="10" viewBox="0 0 8.461538314819336 10"><path d="M5.3846154,0C5.7901392,0,6.1223712,0.31379911,6.1517363,0.71182215C6.1517363,0.71182215,6.1538463,0.76923078,6.1538463,0.76923078C6.1538463,0.76923078,6.1538463,1.1538461,6.1538463,1.1538461C6.1538463,1.1538461,8.4615383,1.1538461,8.4615383,1.1538461C8.4615383,1.1538461,8.4615383,1.9230769,8.4615383,1.9230769C8.4615383,1.9230769,8.0769234,1.9230769,8.0769234,1.9230769C8.0769234,1.9230769,8.0769234,10,8.0769234,10C8.0769234,10,0.38461539,10,0.38461539,10C0.38461539,10,0.38461539,1.9230769,0.38461539,1.9230769C0.38461539,1.9230769,0,1.9230769,0,1.9230769C0,1.9230769,0,1.1538461,0,1.1538461C0,1.1538461,2.3076923,1.1538461,2.3076923,1.1538461C2.3076923,1.1538461,2.3076923,0.76923078,2.3076923,0.76923078C2.3076923,0.36370701,2.6214914,0.031474944,3.0195143,0.0021098899C3.0195143,0.0021098899,3.0769231,0,3.0769231,0C3.0769231,0,5.3846154,0,5.3846154,0ZM7.3076921,1.9230769C7.3076921,1.9230769,1.1538461,1.9230769,1.1538461,1.9230769C1.1538461,1.9230769,1.1538461,9.2307692,1.1538461,9.2307692C1.1538461,9.2307692,7.3076921,9.2307692,7.3076921,9.2307692C7.3076921,9.2307692,7.3076921,1.9230769,7.3076921,1.9230769ZM3.0769231,3.8461537C3.0769231,3.8461537,3.0769231,7.6923075,3.0769231,7.6923075C3.0769231,7.6923075,2.3076923,7.6923075,2.3076923,7.6923075C2.3076923,7.6923075,2.3076923,3.8461537,2.3076923,3.8461537C2.3076923,3.8461537,3.0769231,3.8461537,3.0769231,3.8461537ZM4.6153846,3.8461537C4.6153846,3.8461537,4.6153846,7.6923075,4.6153846,7.6923075C4.6153846,7.6923075,3.8461537,7.6923075,3.8461537,7.6923075C3.8461537,7.6923075,3.8461537,3.8461537,3.8461537,3.8461537C3.8461537,3.8461537,4.6153846,3.8461537,4.6153846,3.8461537ZM6.1538463,3.8461537C6.1538463,3.8461537,6.1538463,7.6923075,6.1538463,7.6923075C6.1538463,7.6923075,5.3846154,7.6923075,5.3846154,7.6923075C5.3846154,7.6923075,5.3846154,3.8461537,5.3846154,3.8461537C5.3846154,3.8461537,6.1538463,3.8461537,6.1538463,3.8461537ZM5.3846154,0.76923078C5.3846154,0.76923078,3.0769231,0.76923078,3.0769231,0.76923078C3.0769231,0.76923078,3.0769231,1.1538461,3.0769231,1.1538461C3.0769231,1.1538461,5.3846154,1.1538461,5.3846154,1.1538461C5.3846154,1.1538461,5.3846154,0.76923078,5.3846154,0.76923078Z" fill="#FFFFFF" fill-opacity="1"/></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="10" height="10" viewBox="0 0 10 10"><path d="M4.6431327,0C7.2074637,0,9.2862654,2.0703983,9.2862654,4.6243639C9.2862654,5.7668924,8.8702431,6.8126459,8.1808395,7.6195607C8.1808395,7.6195607,10,9.4313183,10,9.4313183C10,9.4313183,9.4290094,10,9.4290094,10C9.4290094,10,7.6063123,8.1847401,7.6063123,8.1847401C6.8023014,8.8492327,5.7695599,9.2487278,4.6431327,9.2487278C2.0788014,9.2487278,0,7.1783299,0,4.6243639C0,2.0703983,2.0788014,0,4.6431327,0ZM4.6431327,0.80423725C2.5247719,0.80423725,0.80750132,2.5145662,0.80750132,4.6243639C0.80750132,6.7341619,2.5247719,8.4444904,4.6431327,8.4444904C6.7614932,8.4444904,8.4787636,6.7341619,8.4787636,4.6243639C8.4787636,2.5145662,6.7614932,0.80423725,4.6431327,0.80423725ZM5.0468831,2.8148303C5.0468831,2.8148303,5.0468831,4.2222452,5.0468831,4.2222452C5.0468831,4.2222452,6.4600105,4.2222452,6.4600105,4.2222452C6.4600105,4.2222452,6.4600105,5.0264826,6.4600105,5.0264826C6.4600105,5.0264826,5.0468831,5.0264826,5.0468831,5.0264826C5.0468831,5.0264826,5.0468831,6.433898,5.0468831,6.433898C5.0468831,6.433898,4.2393818,6.433898,4.2393818,6.433898C4.2393818,6.433898,4.2393818,5.0264826,4.2393818,5.0264826C4.2393818,5.0264826,2.8262546,5.0264826,2.8262546,5.0264826C2.8262546,5.0264826,2.8262546,4.2222452,2.8262546,4.2222452C2.8262546,4.2222452,4.2393818,4.2222452,4.2393818,4.2222452C4.2393818,4.2222452,4.2393818,2.8148303,4.2393818,2.8148303C4.2393818,2.8148303,5.0468831,2.8148303,5.0468831,2.8148303Z" fill="#FFFFFF" fill-opacity="1"/></svg> |
| | |
| | | |
| | | .n-base-selection-label { |
| | | font-size: 13px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .n-base-selection-placeholder__inner { |
| | |
| | | } |
| | | .n-base-selection-label { |
| | | font-size: 13px; |
| | | font-weight: 500; |
| | | } |
| | | .n-base-selection-placeholder__inner { |
| | | font-weight: 400; |
| | |
| | | width: 12px; |
| | | height: 12px; |
| | | margin-right: 6px; |
| | | margin-top: 4px; |
| | | margin-top: 3px; |
| | | " |
| | | /> |
| | | <div class="photo-tip"> |
| | |
| | | <line x1="12" y1="3" x2="12" y2="15" /> |
| | | </svg> |
| | | </template> |
| | | 点击上传 |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | </n-button> |
| | | <span class="file-upload-hint">仅支持PDF,大小≤5MB,最多上传5个</span> |
| | | </div> |
| | |
| | | <line x1="12" y1="3" x2="12" y2="15" /> |
| | | </svg> |
| | | </template> |
| | | 点击上传 |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | </n-button> |
| | | <span class="file-upload-hint">仅支持PDF,大小≤5MB,最多上传5个</span> |
| | | </div> |
| | |
| | | <line x1="12" y1="3" x2="12" y2="15" /> |
| | | </svg> |
| | | </template> |
| | | 点击上传 |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | </n-button> |
| | | <span class="file-upload-hint">仅支持PDF,大小≤5MB,最多上传5个</span> |
| | | </div> |
| | |
| | | align: 'left', |
| | | key: 'actions', |
| | | fixed: 'right', |
| | | width: 120, |
| | | width: 140, |
| | | // resizable: true, |
| | | render: (row) => { |
| | | return ( |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <n-modal v-model:show="showModal"> |
| | | <n-modal v-model:show="showModal" :mask-closable="false"> |
| | | <n-card style="width: 1000px; height: 80vh; max-height: 800px; border-radius: 8px; display: flex; flex-direction: column;" :bordered="false" |
| | | :segmented="{ content: true }" content-style="padding: 16px 24px; flex: 1; display: flex; flex-direction: column; overflow: hidden;" |
| | | footer-style="padding: 16px 24px; border-top: 1px solid rgba(46, 61, 77, 0.1); flex-shrink: 0;"> |
| | |
| | | <!-- 搜索区域 --> |
| | | <div class="mb-4 flex items-end gap-4" style="flex-shrink: 0;"> |
| | | <div class="flex-1"> |
| | | <div class="mb-2 text-sm"> |
| | | <div class="mb-16px text-sm"> |
| | | 白名单账号 |
| | | </div> |
| | | <n-input v-model:value="searchModel.account" placeholder="请输入" clearable /> |
| | | </div> |
| | | <div class="flex-1"> |
| | | <div class="mb-2 text-sm"> |
| | | <div class="mb-16px text-sm"> |
| | | 来源 |
| | | </div> |
| | | <n-select v-model:value="searchModel.whitelistSource" :options="sourceOptions" placeholder="请搜索" clearable |
| | |
| | | </n-select> |
| | | </div> |
| | | <div class="flex-1"> |
| | | <div class="mb-2 text-sm"> |
| | | <div class="mb-16px text-sm"> |
| | | 冻结状态 |
| | | </div> |
| | | <n-select v-model:value="searchModel.status" :options="statusOptions" placeholder="请搜索" clearable |
| | |
| | | } |
| | | |
| | | .text-sm { |
| | | font-size: 0.875rem; |
| | | line-height: 1.25rem; |
| | | font-size: 13px; |
| | | } |
| | | |
| | | .footer-btn { |
| | |
| | | font-size: 13px; |
| | | line-height: 18px; |
| | | } |
| | | :deep(.n-base-selection-placeholder.n-base-selection-overlay) { |
| | | font-size: 13px; |
| | | } |
| | | </style> |
| | |
| | | if (amount <= 0) |
| | | return new Error('优惠金额必须大于0') |
| | | |
| | | if (!formModel.value.type) |
| | | return new Error('请先选择优惠券类型') |
| | | // if (!formModel.value.type) |
| | | // return new Error('请先选择优惠券类型') |
| | | |
| | | if (formModel.value.type === 2) { |
| | | const condition = formModel.value.conditionAmount |
| | |
| | | ]) |
| | | |
| | | const columns = computed<DataTableColumns<any>>(() => [ |
| | | { title: '序号', key: 'id', width: 80, align: 'left', resizable: true, render: (_, index) => (currentPage.value - 1) * pageSize.value + index + 1 }, |
| | | { title: '序号', key: 'id', width: 60, align: 'left', resizable: true, render: (_, index) => (currentPage.value - 1) * pageSize.value + index + 1 }, |
| | | { title: '添加时间', key: 'createTime', align: 'left', width: 180, ellipsis: true, resizable: true, render: row => row.createTime ? dayjs(row.createTime).format('YYYY/MM/DD HH:mm') : '-' }, |
| | | { title: '优惠券名称', key: 'couponName', align: 'left', width: 400, ellipsis: true, resizable: true }, |
| | | { title: '优惠券名称', key: 'couponName', align: 'left', width: 260, ellipsis: true, resizable: true }, |
| | | { |
| | | title: '优惠券类型', |
| | | key: 'couponType', |
| | |
| | | title: '操作', |
| | | key: 'actions', |
| | | align: 'left', |
| | | width: 220, |
| | | width: 180, |
| | | fixed: 'right', |
| | | render: row => ( |
| | | <n-space size={12}> |
| | |
| | | :loading="loading" |
| | | :bordered="false" |
| | | flex-height |
| | | :scroll-x="1280" |
| | | :scroll-x="1100" |
| | | > |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | |
| | | { |
| | | label: '状态', |
| | | path: 'status', |
| | | render: () => <n-select v-model:value={searchForm.value.status} options={statusOptions as any} placeholder="请选择状态" clearable > |
| | | render: () => ( |
| | | <n-select |
| | | v-model:value={searchForm.value.status} |
| | | options={statusOptions as any} |
| | | placeholder="请选择状态" |
| | | clearable > |
| | | {{ |
| | | arrow: () => ( |
| | | <img |
| | |
| | | /> |
| | | ), |
| | | }} |
| | | , |
| | | </n-select>, |
| | | </n-select> |
| | | ), |
| | | }, |
| | | ]) |
| | | |
| | |
| | | width: 200, |
| | | fixed: 'right', |
| | | render: row => ( |
| | | <div class="flex justify-center gap-3"> |
| | | <div class="flex justify-start gap-3"> |
| | | <span |
| | | v-permission="30223" |
| | | style={{ color: '#0068FF', cursor: 'pointer' }} |
| | |
| | | <n-flex justify="space-between"> |
| | | <div class="flex gap-2 items-center"> |
| | | <span v-if="selectedRowKeys.length > 0" class="text-gray-500"> |
| | | {{ $t('accountManagement.messages.selectedRecords', { count: selectedRowKeys.length }) }} |
| | | {{ |
| | | $t("accountManagement.messages.selectedRecords", { |
| | | count: selectedRowKeys.length, |
| | | }) |
| | | }} |
| | | </span> |
| | | |
| | | <n-button |
| | | v-permission="30221" |
| | | :disabled="selectedRowKeys.length === 0" |
| | | @click="handleBatchDelete" |
| | | > |
| | | 批量删除 |
| | | </n-button> |
| | | <n-button |
| | | v-permission="30221" |
| | | :disabled="selectedRowKeys.length === 0" |
| | | @click="handleBatchDelete" |
| | | > |
| | | 批量删除 |
| | | </n-button> |
| | | </div> |
| | | <n-button |
| | | v-permission="30222" |
| | |
| | | <n-input v-model:value="step.content" placeholder="请输入" style="width: 300px;" /> |
| | | </n-form-item> |
| | | |
| | | <n-form-item label="图片" :path="`steps[${index}].images`" required label-width="auto" label-placement="top"> |
| | | <n-form-item label="图片" :path="`steps[${index}].images`" required label-width="auto"> |
| | | <div class="flex flex-col"> |
| | | <n-upload |
| | | v-model:file-list="step.images" :max="9" list-type="image-card" |
| | |
| | | .n-form-item-feedback-wrapper { |
| | | height: 0px !important; |
| | | } |
| | | /* 隐藏原生 SVG 图标 */ |
| | | ::v-deep .n-upload-file-info__action { |
| | | background-color: #000000; |
| | | } |
| | | ::v-deep .n-upload-file-info__action .n-base-icon svg { |
| | | display: none; |
| | | } |
| | | |
| | | /* 替换预览图标(第一个操作按钮) */ |
| | | ::v-deep .n-upload-file-info__action > *:nth-child(1) .n-base-icon { |
| | | background: url('@/assets/element-img/look.svg') no-repeat center center !important; |
| | | background-size: contain !important; |
| | | width: 16px !important; |
| | | height: 16px !important; |
| | | display: inline-block; |
| | | } |
| | | |
| | | /* 替换删除图标(第二个操作按钮) */ |
| | | ::v-deep .n-upload-file-info__action > *:nth-child(2) .n-base-icon { |
| | | background: url('@/assets/element-img/delete.svg') no-repeat center center !important; |
| | | background-size: contain !important; |
| | | width: 16px !important; |
| | | height: 16px !important; |
| | | display: inline-block; |
| | | } |
| | | </style> |
| | |
| | | border-radius: 4px; |
| | | background-color: #E6F4FF; |
| | | color:#0068FF; |
| | | width: 97px; |
| | | width: 84px; |
| | | padding: 7px 16px; |
| | | font-size: 13px; |
| | | cursor: pointer; |