feat: use lucide icons

This commit is contained in:
xingyu4j
2025-11-13 18:36:35 +08:00
parent 83a5ca15b5
commit 7f84c42bcc
20 changed files with 58 additions and 58 deletions

View File

@@ -71,7 +71,7 @@ async function handleGenerateQrCode(row: MpAccountApi.Account) {
/** 清空 API 配额 */ /** 清空 API 配额 */
async function handleCleanQuota(row: MpAccountApi.Account) { async function handleCleanQuota(row: MpAccountApi.Account) {
const hideLoading = message.loading({ const hideLoading = message.loading({
content: $t('ui.actionMessage.processing', ['清空 API 配额']), content: '正在清空 API 配额',
duration: 0, duration: 0,
}); });
try { try {

View File

@@ -103,7 +103,7 @@ const [Grid, gridApi] = useVbenVxeGrid({
}, },
gridOptions: { gridOptions: {
columns: useGridColumns(Number(msgType.value) as MsgType), columns: useGridColumns(Number(msgType.value) as MsgType),
height: 'calc(100vh - 300px)', height: 'auto',
keepSource: true, keepSource: true,
proxyConfig: { proxyConfig: {
ajax: { ajax: {

View File

@@ -39,7 +39,7 @@ defineExpose({
<img :src="mapImageUrl" alt="地图位置" /> <img :src="mapImageUrl" alt="地图位置" />
</Row> </Row>
<Row class="mt-2"> <Row class="mt-2">
<IconifyIcon icon="mdi:map-marker" class="mr-1" /> <IconifyIcon icon="lucide:map-pin" class="mr-1" />
{{ label }} {{ label }}
</Row> </Row>
</Col> </Col>

View File

@@ -298,7 +298,7 @@ watch(
<Button type="primary" @click="selectMaterialFun(item)"> <Button type="primary" @click="selectMaterialFun(item)">
选择 选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
</Row> </Row>
@@ -325,7 +325,7 @@ watch(
<Button type="link" @click="selectMaterialFun(row)"> <Button type="link" @click="selectMaterialFun(row)">
选择 选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:plus" /> <IconifyIcon icon="lucide:plus" />
</template> </template>
</Button> </Button>
</template> </template>
@@ -342,7 +342,7 @@ watch(
<Button type="link" @click="selectMaterialFun(row)"> <Button type="link" @click="selectMaterialFun(row)">
选择 选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:plus-circle" /> <IconifyIcon icon="lucide:circle-plus" />
</template> </template>
</Button> </Button>
</template> </template>
@@ -360,7 +360,7 @@ watch(
<Button type="primary" @click="selectMaterialFun(item)"> <Button type="primary" @click="selectMaterialFun(item)">
选择 选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
</Row> </Row>

View File

@@ -45,7 +45,7 @@ defineProps<{
<div v-else-if="item.type === MsgType.Link" class="flex flex-col gap-2"> <div v-else-if="item.type === MsgType.Link" class="flex flex-col gap-2">
<a :href="item.url" target="_blank" class="text-success no-underline"> <a :href="item.url" target="_blank" class="text-success no-underline">
<div class="flex items-center text-sm font-medium text-[#52c41a]"> <div class="flex items-center text-sm font-medium text-[#52c41a]">
<IconifyIcon icon="mdi:link" class="mr-1" /> <IconifyIcon icon="lucide:link" class="mr-1" />
{{ item.title }} {{ item.title }}
</div> </div>
</a> </a>

View File

@@ -108,7 +108,7 @@ function selectMaterial(item: any) {
<Row class="ope-row" justify="center"> <Row class="ope-row" justify="center">
<Button danger shape="circle" @click="onDelete"> <Button danger shape="circle" @click="onDelete">
<template #icon> <template #icon>
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
</template> </template>
</Button> </Button>
</Row> </Row>
@@ -121,7 +121,7 @@ function selectMaterial(item: any) {
<Button type="primary" @click="showDialog = true"> <Button type="primary" @click="showDialog = true">
素材库选择 素材库选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
<Modal <Modal
@@ -152,7 +152,7 @@ function selectMaterial(item: any) {
<Button type="primary"> <Button type="primary">
上传图片 上传图片
<template #icon> <template #icon>
<IconifyIcon icon="mdi:upload" /> <IconifyIcon icon="lucide:upload" />
</template> </template>
</Button> </Button>
</Upload> </Upload>

View File

@@ -114,7 +114,7 @@ function selectMaterial(item: any) {
/> />
<IconifyIcon <IconifyIcon
v-else v-else
icon="mdi:plus" icon="lucide:plus"
:size="40" :size="40"
class="text-gray-400" class="text-gray-400"
/> />

View File

@@ -50,7 +50,7 @@ function onDelete() {
<Col class="ope-row"> <Col class="ope-row">
<Button danger shape="circle" @click="onDelete"> <Button danger shape="circle" @click="onDelete">
<template #icon> <template #icon>
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
</template> </template>
</Button> </Button>
</Col> </Col>
@@ -67,7 +67,7 @@ function onDelete() {
: '选择草稿箱图文' : '选择草稿箱图文'
}} }}
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
</Col> </Col>

View File

@@ -140,7 +140,7 @@ function selectMaterial(item: any) {
<Button type="primary" @click="showDialog = true"> <Button type="primary" @click="showDialog = true">
素材库选择 素材库选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
<Modal <Modal
@@ -171,7 +171,7 @@ function selectMaterial(item: any) {
<Button type="primary"> <Button type="primary">
新建视频 新建视频
<template #icon> <template #icon>
<IconifyIcon icon="mdi:upload" /> <IconifyIcon icon="lucide:upload" />
</template> </template>
</Button> </Button>
</Upload> </Upload>

View File

@@ -109,7 +109,7 @@ function selectMaterial(item: Reply) {
<Row class="ope-row" justify="center"> <Row class="ope-row" justify="center">
<Button danger shape="circle" @click="onDelete"> <Button danger shape="circle" @click="onDelete">
<template #icon> <template #icon>
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
</template> </template>
</Button> </Button>
</Row> </Row>
@@ -121,7 +121,7 @@ function selectMaterial(item: Reply) {
<Button type="primary" @click="showDialog = true"> <Button type="primary" @click="showDialog = true">
素材库选择 素材库选择
<template #icon> <template #icon>
<IconifyIcon icon="mdi:check-circle" /> <IconifyIcon icon="lucide:circle-check" />
</template> </template>
</Button> </Button>
<Modal <Modal
@@ -152,7 +152,7 @@ function selectMaterial(item: Reply) {
<Button type="primary"> <Button type="primary">
点击上传 点击上传
<template #icon> <template #icon>
<IconifyIcon icon="mdi:upload" /> <IconifyIcon icon="lucide:upload" />
</template> </template>
</Button> </Button>
</Upload> </Upload>

View File

@@ -89,7 +89,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.Text"> <Tabs.TabPane :key="ReplyType.Text">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:text" class="mr-1" /> <IconifyIcon icon="lucide:file-text" class="mr-1" />
文本 文本
</Row> </Row>
</template> </template>
@@ -100,7 +100,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.Image"> <Tabs.TabPane :key="ReplyType.Image">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:image" class="mr-1" /> <IconifyIcon icon="lucide:image" class="mr-1" />
图片 图片
</Row> </Row>
</template> </template>
@@ -111,7 +111,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.Voice"> <Tabs.TabPane :key="ReplyType.Voice">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:microphone" class="mr-1" /> <IconifyIcon icon="lucide:mic" class="mr-1" />
语音 语音
</Row> </Row>
</template> </template>
@@ -122,7 +122,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.Video"> <Tabs.TabPane :key="ReplyType.Video">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:video" class="mr-1" /> <IconifyIcon icon="lucide:video" class="mr-1" />
视频 视频
</Row> </Row>
</template> </template>
@@ -133,7 +133,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.News"> <Tabs.TabPane :key="ReplyType.News">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:newspaper" class="mr-1" /> <IconifyIcon icon="lucide:newspaper" class="mr-1" />
图文 图文
</Row> </Row>
</template> </template>
@@ -144,7 +144,7 @@ defineExpose({
<Tabs.TabPane :key="ReplyType.Music"> <Tabs.TabPane :key="ReplyType.Music">
<template #tab> <template #tab>
<Row align="middle"> <Row align="middle">
<IconifyIcon icon="mdi:music" class="mr-1" /> <IconifyIcon icon="lucide:music" class="mr-1" />
音乐 音乐
</Row> </Row>
</template> </template>

View File

@@ -26,7 +26,7 @@ function playVideo() {
<div class="cursor-pointer" @click="playVideo()"> <div class="cursor-pointer" @click="playVideo()">
<!-- 提示 --> <!-- 提示 -->
<div class="flex items-center"> <div class="flex items-center">
<IconifyIcon icon="mdi:play-circle" :size="32" class="mr-2" /> <IconifyIcon icon="lucide:circle-play" :size="32" class="mr-2" />
<p class="text-sm">点击播放视频</p> <p class="text-sm">点击播放视频</p>
</div> </div>

View File

@@ -68,8 +68,12 @@ function amrStop() {
<!-- 微信消息 - 语音播放 --> <!-- 微信消息 - 语音播放 -->
<div class="wx-voice-div cursor-pointer" @click="playVoice"> <div class="wx-voice-div cursor-pointer" @click="playVoice">
<div class="flex items-center"> <div class="flex items-center">
<IconifyIcon v-if="playing !== true" icon="mdi:play-circle" :size="32" /> <IconifyIcon
<IconifyIcon v-else icon="mdi:pause-circle" :size="32" /> v-if="playing !== true"
icon="lucide:circle-play"
:size="32"
/>
<IconifyIcon v-else icon="lucide:circle-pause" :size="32" />
<span v-if="duration" class="amr-duration">{{ duration }} </span> <span v-if="duration" class="amr-duration">{{ duration }} </span>
</div> </div>
<div v-if="content" class="mt-2"> <div v-if="content" class="mt-2">

View File

@@ -35,7 +35,7 @@ const { hasAccessByCodes } = useAccess();
@click="emit('delete', item.id)" @click="emit('delete', item.id)"
> >
<template #icon> <template #icon>
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
</template> </template>
</Button> </Button>
</div> </div>

View File

@@ -89,7 +89,7 @@ const customRequest: UploadProps['customRequest'] = async function (options) {
class="mb-4" class="mb-4"
> >
<Button type="primary"> <Button type="primary">
<IconifyIcon icon="mdi:upload" class="mr-1" /> <IconifyIcon icon="lucide:upload" class="mr-1" />
点击上传 点击上传
</Button> </Button>
<template #itemRender="{ file, actions }"> <template #itemRender="{ file, actions }">

View File

@@ -126,7 +126,7 @@ const customRequest: UploadProps['customRequest'] = async function (options) {
class="mb-4" class="mb-4"
> >
<Button type="primary"> <Button type="primary">
<IconifyIcon icon="mdi:video-plus" class="mr-1" /> <IconifyIcon icon="lucide:video" class="mr-1" />
选择视频 选择视频
</Button> </Button>
</Upload> </Upload>

View File

@@ -5,7 +5,7 @@ import { watch } from 'vue';
import { useAccess } from '@vben/access'; import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { formatDate2 } from '@vben/utils'; import { formatDate2, openWindow } from '@vben/utils';
import { Button } from 'ant-design-vue'; import { Button } from 'ant-design-vue';
@@ -90,10 +90,6 @@ const [Grid, gridApi] = useVbenVxeGrid({
} as VxeTableGridOptions<any>, // TODO @dylan这里有个告警哈 } as VxeTableGridOptions<any>, // TODO @dylan这里有个告警哈
}); });
function handleDownload(url: string) {
window.open(url, '_blank');
}
watch( watch(
() => props.list, () => props.list,
(list: any[]) => { (list: any[]) => {
@@ -125,8 +121,8 @@ watch(
{{ formatDate2(row.createTime) }} {{ formatDate2(row.createTime) }}
</template> </template>
<template #actions="{ row }"> <template #actions="{ row }">
<Button type="link" @click="handleDownload(row.url)"> <Button type="link" @click="openWindow(row.url)">
<IconifyIcon icon="mdi:download" /> <IconifyIcon icon="lucide:download" />
下载 下载
</Button> </Button>
<Button <Button
@@ -135,7 +131,7 @@ watch(
type="link" type="link"
@click="emit('delete', row.id)" @click="emit('delete', row.id)"
> >
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
删除 删除
</Button> </Button>
</template> </template>

View File

@@ -5,7 +5,7 @@ import { watch } from 'vue';
import { useAccess } from '@vben/access'; import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { formatDate2 } from '@vben/utils'; import { formatDate2, openWindow } from '@vben/utils';
import { Button } from 'ant-design-vue'; import { Button } from 'ant-design-vue';
@@ -78,10 +78,6 @@ const [Grid, gridApi] = useVbenVxeGrid({
} as VxeTableGridOptions<any>, // TODO @dylan这里有个告警哈 } as VxeTableGridOptions<any>, // TODO @dylan这里有个告警哈
}); });
function handleDownload(url: string) {
window.open(url, '_blank');
}
watch( watch(
() => props.list, () => props.list,
(list: any[]) => { (list: any[]) => {
@@ -113,8 +109,8 @@ watch(
{{ formatDate2(row.createTime) }} {{ formatDate2(row.createTime) }}
</template> </template>
<template #actions="{ row }"> <template #actions="{ row }">
<Button type="link" @click="handleDownload(row.url)"> <Button type="link" @click="openWindow(row.url)">
<IconifyIcon icon="mdi:download" /> <IconifyIcon icon="lucide:download" />
下载 下载
</Button> </Button>
<Button <Button
@@ -123,7 +119,7 @@ watch(
type="link" type="link"
@click="emit('delete', row.id)" @click="emit('delete', row.id)"
> >
<IconifyIcon icon="mdi:delete" /> <IconifyIcon icon="lucide:trash-2" />
删除 删除
</Button> </Button>
</template> </template>

View File

@@ -2,7 +2,7 @@
import { provide, reactive, ref } from 'vue'; import { provide, reactive, ref } from 'vue';
import { useAccess } from '@vben/access'; import { useAccess } from '@vben/access';
import { Page } from '@vben/common-ui'; import { DocAlert, Page } from '@vben/common-ui';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { import {
@@ -99,6 +99,9 @@ async function handleDelete(id: number) {
<template> <template>
<Page auto-content-height> <Page auto-content-height>
<template #doc>
<DocAlert title="公众号素材" url="https://doc.iocoder.cn/mp/material/" />
</template>
<div class="h-full"> <div class="h-full">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<Card class="h-[10%]" :bordered="false"> <Card class="h-[10%]" :bordered="false">
@@ -109,13 +112,13 @@ async function handleDelete(id: number) {
</Form> </Form>
</Card> </Card>
<Card :bordered="false" class="mt-4 h-[90%]"> <Card :bordered="false" class="mt-4 h-[88%]">
<Tabs v-model:active-key="type" @change="onTabChange"> <Tabs v-model:active-key="type" @change="onTabChange">
<!-- tab 1图片 --> <!-- tab 1图片 -->
<Tabs.TabPane :key="UploadType.Image"> <Tabs.TabPane :key="UploadType.Image">
<template #tab> <template #tab>
<span class="flex items-center"> <span class="flex items-center">
<IconifyIcon icon="mdi:image" class="mr-1" /> <IconifyIcon icon="lucide:image" class="mr-1" />
图片 图片
</span> </span>
</template> </template>
@@ -149,7 +152,7 @@ async function handleDelete(id: number) {
<Tabs.TabPane :key="UploadType.Voice"> <Tabs.TabPane :key="UploadType.Voice">
<template #tab> <template #tab>
<span class="flex items-center"> <span class="flex items-center">
<IconifyIcon icon="mdi:microphone" class="mr-1" /> <IconifyIcon icon="lucide:mic" class="mr-1" />
语音 语音
</span> </span>
</template> </template>
@@ -183,7 +186,7 @@ async function handleDelete(id: number) {
<Tabs.TabPane :key="UploadType.Video"> <Tabs.TabPane :key="UploadType.Video">
<template #tab> <template #tab>
<span class="flex items-center"> <span class="flex items-center">
<IconifyIcon icon="mdi:video" class="mr-1" /> <IconifyIcon icon="lucide:video" class="mr-1" />
视频 视频
</span> </span>
</template> </template>

View File

@@ -9,6 +9,7 @@ import { getDictOptions } from '@vben/hooks';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { import {
Button,
DatePicker, DatePicker,
Form, Form,
FormItem, FormItem,
@@ -106,7 +107,7 @@ function showTotal(total: number) {
<template> <template>
<Page auto-content-height class="flex flex-col"> <Page auto-content-height class="flex flex-col">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<div class="mb-4 rounded-lg bg-white p-4"> <div class="bg-background mb-4 rounded-lg p-4">
<Form <Form
ref="queryFormRef" ref="queryFormRef"
:model="queryParams" :model="queryParams"
@@ -147,24 +148,24 @@ function showTotal(total: number) {
/> />
</FormItem> </FormItem>
<FormItem> <FormItem>
<a-button type="primary" @click="handleQuery"> <Button type="primary" @click="handleQuery">
<template #icon> <template #icon>
<IconifyIcon icon="mdi:magnify" /> <IconifyIcon icon="mdi:magnify" />
</template> </template>
搜索 搜索
</a-button> </Button>
<a-button class="ml-2" @click="resetQuery"> <Button class="ml-2" @click="resetQuery">
<template #icon> <template #icon>
<IconifyIcon icon="mdi:refresh" /> <IconifyIcon icon="mdi:refresh" />
</template> </template>
重置 重置
</a-button> </Button>
</FormItem> </FormItem>
</Form> </Form>
</div> </div>
<!-- 列表 --> <!-- 列表 -->
<div class="flex-1 rounded-lg bg-white p-4"> <div class="bg-background flex-1 rounded-lg p-4">
<MessageTable :list="list" :loading="loading" @send="handleSend" /> <MessageTable :list="list" :loading="loading" @send="handleSend" />
<div v-show="total > 0" class="mt-4 flex justify-end"> <div v-show="total > 0" class="mt-4 flex justify-end">
<Pagination <Pagination