Skip to content

Commit e7cd6cf

Browse files
authored
feat(link): add button to convert approved friend-link avatars to inline (#1004)
1 parent 7f38999 commit e7cd6cf

1 file changed

Lines changed: 49 additions & 16 deletions

File tree

src/views/manage-friends/index.tsx

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,19 @@ import {
1616
useDialog,
1717
useMessage,
1818
} from 'naive-ui'
19-
import { defineComponent, onBeforeMount, ref, toRaw, watch } from 'vue'
19+
import {
20+
defineComponent,
21+
Fragment,
22+
onBeforeMount,
23+
ref,
24+
toRaw,
25+
watch,
26+
} from 'vue'
2027
import { useRoute, useRouter } from 'vue-router'
2128
import type { LinkModel, LinkResponse, LinkStateCount } from '~/models/link'
2229

2330
import { HeaderActionButton } from '~/components/button/rounded-button'
24-
import { CheckIcon, PlusIcon as Plus } from '~/components/icons'
31+
import { CheckIcon, PlusIcon as Plus, RefreshCircle } from '~/components/icons'
2532
import { Table } from '~/components/table'
2633
import { RelativeTime } from '~/components/time/relative-time'
2734
import { useDataTableFetch } from '~/hooks/use-table'
@@ -168,6 +175,25 @@ export default defineComponent({
168175
}
169176
}
170177

178+
const handleMigrateAvatars = async () => {
179+
const l = message.loading('迁移中', { duration: 20e4 })
180+
181+
try {
182+
await RESTManager.api.links.avatar.migrate.post({
183+
timeout: 20e4,
184+
})
185+
message.success('迁移完成')
186+
await fetchDataFn()
187+
} catch (error) {
188+
console.error(error)
189+
message.error('迁移失败')
190+
} finally {
191+
requestAnimationFrame(() => {
192+
l.destroy()
193+
})
194+
}
195+
}
196+
171197
const modal = useDialog()
172198

173199
return () => (
@@ -181,14 +207,21 @@ export default defineComponent({
181207
editDialogData.value = resetEditData()
182208
editDialogShow.value = true
183209
}}
184-
></HeaderActionButton>
210+
/>
185211

186212
<HeaderActionButton
187213
icon={<CheckIcon />}
188214
variant="info"
189215
onClick={handleCheck}
190216
name="检查友链可用性"
191-
></HeaderActionButton>
217+
/>
218+
219+
<HeaderActionButton
220+
icon={<RefreshCircle />}
221+
variant="info"
222+
onClick={handleMigrateAvatars}
223+
name="迁移头像"
224+
/>
192225
</Fragment>
193226
}
194227
>
@@ -202,15 +235,15 @@ export default defineComponent({
202235
router.replace({ name: RouteName.Friend, query: { state: e } })
203236
}}
204237
>
205-
<NTabPane name={LinkState.Pass} tab="朋友们"></NTabPane>
238+
<NTabPane name={LinkState.Pass} tab="朋友们" />
206239
<NTabPane
207240
name={LinkState.Audit}
208241
tab={() => (
209242
<NBadge value={stateCount.value.audit} processing>
210243
<NText>待审核</NText>
211244
</NBadge>
212245
)}
213-
></NTabPane>
246+
/>
214247

215248
<NTabPane
216249
name={LinkState.Outdate}
@@ -219,23 +252,23 @@ export default defineComponent({
219252
<NText>过时的</NText>
220253
</NBadge>
221254
)}
222-
></NTabPane>
255+
/>
223256
<NTabPane
224257
name={LinkState.Reject}
225258
tab={() => (
226259
<NBadge value={stateCount.value.reject} type="warning">
227260
<NText>已拒绝</NText>
228261
</NBadge>
229262
)}
230-
></NTabPane>
263+
/>
231264
<NTabPane
232265
name={LinkState.Banned}
233266
tab={() => (
234267
<NBadge value={stateCount.value.banned} type="error">
235268
<NText>封禁的</NText>
236269
</NBadge>
237270
)}
238-
></NTabPane>
271+
/>
239272
</NTabs>
240273

241274
<Table
@@ -419,7 +452,7 @@ export default defineComponent({
419452
]}
420453
onFetchData={fetchDataFn}
421454
pager={pager}
422-
></Table>
455+
/>
423456

424457
{/* Modal */}
425458

@@ -443,31 +476,31 @@ export default defineComponent({
443476
autofocus
444477
value={editDialogData.value.name}
445478
onInput={(e) => void (editDialogData.value.name = e)}
446-
></NInput>
479+
/>
447480
</NFormItem>
448481

449482
<NFormItem label="头像">
450483
<NInput
451484
autofocus
452485
value={editDialogData.value.avatar}
453486
onInput={(e) => void (editDialogData.value.avatar = e)}
454-
></NInput>
487+
/>
455488
</NFormItem>
456489

457490
<NFormItem label="网址" required>
458491
<NInput
459492
autofocus
460493
value={editDialogData.value.url}
461494
onInput={(e) => void (editDialogData.value.url = e)}
462-
></NInput>
495+
/>
463496
</NFormItem>
464497

465498
<NFormItem label="描述">
466499
<NInput
467500
autofocus
468501
value={editDialogData.value.description}
469502
onInput={(e) => void (editDialogData.value.description = e)}
470-
></NInput>
503+
/>
471504
</NFormItem>
472505

473506
<NFormItem label="类型">
@@ -481,7 +514,7 @@ export default defineComponent({
481514
onUpdateValue={(e) =>
482515
void (editDialogData.value.type = e | 0)
483516
}
484-
></NSelect>
517+
/>
485518
</NFormItem>
486519
{editDialogData.value.id && (
487520
<NFormItem label="状态">
@@ -495,7 +528,7 @@ export default defineComponent({
495528
onUpdateValue={(e) =>
496529
void (editDialogData.value.state = e | 0)
497530
}
498-
></NSelect>
531+
/>
499532
</NFormItem>
500533
)}
501534
</NForm>

0 commit comments

Comments
 (0)