feat: 添加首页统计demo

master
luoer 2024-01-08 17:33:26 +08:00
parent 6bc11b3c95
commit 40eeb6899a
15 changed files with 204 additions and 8577 deletions

View File

@ -213,8 +213,6 @@ export const AnFormModal = defineComponent({
<Modal
titleAlign="start"
closable={false}
maskAnimationName=""
modalAnimationName=""
{...this.modalProps}
v-model:visible={this.visible}
class="an-form-modal"

View File

@ -100,7 +100,7 @@ export class PluginContainer {
widgets: any[] = [];
constructor(private plugins: AnTablePlugin[]) {
this.plugins.unshift(useTableRefresh(), useColumnConfig(), useRowFormat(), useRowDelete(), useRowModify());
this.plugins.unshift(useTableRefresh(), useRowFormat(), useRowDelete(), useRowModify());
for (const plugin of plugins) {
const action = plugin.action?.();
if (action) {

View File

@ -18,7 +18,7 @@ export function useTableRefresh(): AnTablePlugin {
return () => {
const { loading, refresh } = context;
return (
<Button disabled={loading.value} onClick={refresh}>
<Button loading={loading.value} onClick={refresh}>
{{
icon: () => <span class="icon-park-outline-redo"></span>,
}}

View File

View File

@ -12,7 +12,7 @@
<div>
<button
@click="onBack"
class="select-none bg-transparent text-white h-8 px-2 rounded hover:bg-[rgba(255,255,255,.1)]"
class="select-none bg-transparent text-white h-8 px-2 rounded hover:bg-[rgba(255,255,255,.1)] cursor-pointer"
>
<i class="icon-park-outline-back mr-1"></i>
返回
@ -60,7 +60,7 @@
{{ currentFormated }}
</div>
<div class="w-96">
<audio ref="audioRef" src="" class="hidden"></audio>
<audio ref="audioRef" :src="url" class="hidden" @timeupdate="onTimeUpdate"></audio>
<a-slider class="block!"></a-slider>
</div>
<div>
@ -142,7 +142,8 @@ const emit = defineEmits(['update:visible']);
const show = useVModel(props, 'visible', emit);
const headerRef = ref<HTMLElement | null>(null);
const viewRef = ref<HTMLElement | null>(null);
const videoRef = ref<HTMLElement | null>(null);
const videoRef = ref<HTMLVideoElement | null>(null);
const audioRef = ref<HTMLAudioElement | null>(null);
const onBack = () => (show.value = false);
const playing = ref(true);
const volume = ref(50);
@ -163,6 +164,13 @@ const volumeIcon = computed(() => {
}
});
const onTimeUpdate = (e: Event) => {};
const playAudio = async () => {
await nextTick();
duration.value = audioRef.value?.duration ?? 0;
};
const typeIcon = computed(() => {
return getIcon(props.type ?? 'text');
});
@ -213,6 +221,8 @@ watch(
}
if (props.type === ViewType.VIDEO) {
loadVideo();
} else if (props.type === ViewType.AUDIO) {
playAudio();
}
},
{

50
src/constants/file.ts Normal file
View File

@ -0,0 +1,50 @@
import { defineConstants } from './defineConstants';
/**
*
*/
export enum FileType {
/**
*
*/
VIDEO = 1,
/**
*
*/
AUDIO = 2,
/**
*
*/
IMAGE = 3,
/**
*
*/
TEXT = 4,
/**
*
*/
OTHER = 5,
}
export const FileTypes = defineConstants([
{
label: '视频',
value: FileType.VIDEO,
},
{
label: '音频',
value: FileType.AUDIO,
},
{
label: '图片',
value: FileType.IMAGE,
},
{
label: '文本',
value: FileType.TEXT,
},
{
label: '其他',
value: FileType.OTHER,
},
]);

View File

@ -18,8 +18,8 @@
</a-avatar>
<div class="leading-4 my-2">
{{ userStore.nickname }}
<span class="text-xs text-gray-400">(管理员)</span>
<div class="text-xs text-gray-500">@{{ userStore.username }}</div>
<span class="text-xs text-gray-400">({{ userStore.username }})</span>
<div class="text-xs text-gray-400">管理员</div>
</div>
</div>
</a-doption>

View File

@ -32,7 +32,7 @@ const { component: CategoryTable } = useTable({
width: 180,
buttons: [
{
text: '文章列表',
text: '文章',
},
{
type: 'modify',

View File

@ -20,7 +20,29 @@ enum MIME {
APPLICATION = 'application',
}
function getIcon(mimetype: string) {
function getFmtIcon(mimetype: string) {
const [type, subtype] = mimetype.split('/');
if (type === MIME.IMAGE) {
return 'icon-fmt-png';
}
if (type === MIME.VIDEO) {
return 'icon-fmt-video';
}
if (type === MIME.TEXT) {
return 'icon-fmt-txt';
}
if (type === MIME.AUDIO) {
return 'icon-fmt-mp3';
}
if (type === MIME.APPLICATION) {
if (subtype === 'zip') {
return 'icon-fmt-zip';
}
}
return 'icon-fmt-visio';
}
function getFileIcon(mimetype: string) {
const [type, subtype] = mimetype.split('/');
if (type === MIME.IMAGE) {
return 'icon-file-iimage';
@ -42,4 +64,8 @@ function getIcon(mimetype: string) {
return 'icon-file-iunknown';
}
function getIcon(mimetype: string) {
return getFmtIcon(mimetype)
}
export { getIcon, getIconnameByMimetype };

View File

@ -37,6 +37,7 @@ import AnCategory from './components/AnCategory.vue';
import AnPreview from './components/AnPreview.vue';
import AnUpload from './components/AnUpload.vue';
import { getIcon } from './components/util';
import { FileTypes } from '@/constants/file';
const current = ref<FileCategory>();
const viewer = reactive({ visible: false, url: undefined, type: undefined });
@ -99,18 +100,23 @@ const {
<i class="hidden! group-hover:inline-block! icon-park-outline-copy hover:text-gray-700 cursor-pointer"></i>
</span>
</span>
<div class="h-5 inline-flex items-center text-xs text-gray-400 space-x-2">
<div class="h-5 inline-flex items-center text-xs text-gray-400 space-x-4">
<span>
<i class="icon-park-outline-folder-close mr-1"></i>
{record.category?.name ?? '默认分类'}
</span>
<span>{numeral(record.size).format('0 b')}</span>
</div>
</div>
</div>
);
},
},
{
title: '文件大小',
width: 100,
align: 'right',
render: ({ record }) => <span class="text-gray-500">{numeral(record.size).format('0 b')}</span>,
},
useCreateColumn(),
useUpdateColumn(),
{
@ -118,6 +124,9 @@ const {
title: '操作',
width: 160,
buttons: [
{
text: '下载',
},
{
type: 'modify',
text: '修改',
@ -149,28 +158,7 @@ const {
field: 'type',
label: '类型',
setter: 'select',
options: [
{
label: '视频',
value: 1,
},
{
label: '音频',
value: 2,
},
{
label: '图片',
value: 3,
},
{
label: '文本',
value: 4,
},
{
label: '其他',
value: 5,
},
],
options: FileTypes,
setterProps: {
style: {
width: '100px',

View File

@ -1,146 +1,102 @@
<template>
<div class="m-4 bg-white p-4">
<a-button @click="visible = true">预览</a-button>
<an-viewer v-model:visible="visible" type="audio" :url="textUrl" :download="'s'" :name="'明日之星.png'"></an-viewer>
<div class="w-full p-5 flex gap-4">
<div class="flex-1">
<div class="bg-white px-5 py-4 rounded-sm">
<div>统计概览</div>
<div class="flex justify-between gap-4 mt-4">
<div v-for="item in stat" :key="item.title" class="flex-1 items-center flex gap-4 bg-gray-100 py-3 px-4">
<!-- <div class="text-xl text-gray-500">
<i :class="item.icon"></i>
</div> -->
<div>
<div class="text-gray-500">
{{ item.title }}
</div>
<div class="text-lg mt-1.5">
{{ item.count }}
</div>
</div>
</div>
</div>
</div>
<div class="bg-white px-5 py-4 rounded-sm mt-4">
<div>常用服务</div>
<div class="grid grid-cols-5 justify-between gap-4 mt-4">
<div v-for="item in stat" :key="item.title" class="group flex-1 flex justify-between bg-gray-100 py-3 px-3">
<div class="text-gray-500">
{{ item.title }}
</div>
<div class="hidden group-hover:block hover:bg-gray-50 cursor-pointer text-gray-400">
<i class="icon-park-outline-delete text-xs"></i>
</div>
</div>
<div class="py-3 px-3 border border-dashed rounded-sm border-gray-400 text-gray-500 hover:bg-gray-100 cursor-pointer">
<i class="icon-park-outline-add ml-2"></i>
添加服务
</div>
</div>
</div>
</div>
<div class="w-96">
<div class="bg-white py-4 px-5 rounded">
<div class="flex gap-4">
<a-avatar :src="'https://github.com/juetan.png'"></a-avatar>
<div>
<div class="mt-1">欢迎{{ userStore.nickname }}</div>
<div class="text-gray-400 mt-1.5">管理员</div>
</div>
</div>
</div>
<div class="bg-white py-4 px-5 mt-4">
<div class="flex items-center justify-between">
<span>公告</span>
<a-link>更多</a-link>
</div>
<div class="flex justify-between gap-4 mt-4">
<ul class="list-none w-full m-0 p-0">
<li v-for="i in 8" class="w-full h-6 items-center overflow-hidden justify-between flex gap-2 mb-2">
<span class="flex-1 truncate hover:underline underline-offset-2 cursor-pointer">但是预测已加载的数据不足以</span>
<span class="text-gray-400">3天前</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</template>
<script setup lang="tsx">
import AnViewer from '@/components/AnViewer/AnViewer.vue';
<script setup lang="ts">
import { useUserStore } from '@/store';
const visible = ref(false);
const videoUrl = 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4'
const imageUrl =
'https://images.unsplash.com/photo-1682687982468-4584ff11f88a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDF8MHxlZGl0b3JpYWwtZmVlZHwxfHx8ZW58MHx8fHx8';
const textUrl = `
1. 是非对错有时只是角度问题 2. 越在意什么什么越会折磨你 3. 反感一个人连听见名字都恶心 4.
温和久了稍有脾气就成了恶人 5. 离去的都是风景留下的才是人生 6. 任何安慰都没有自己看透来的奏效 7.
我也想对每个人好可狼我喂不饱 8. 友情都存在着吃醋更别说爱情了 9. 原有前程可奔赴亦有岁月可回首 10.
偏见来自无非两个地方无知和愚蠢 11. 其实一切的问题时间已经给了答案 12.
所有偷过的懒都会变成打脸的巴掌 13. 信任变得很难假的和真的越来越像 14.
理性的人适合共事感性的人适合共处 15. 没有新故事的人才会对过去念念不忘 16.
你嘴巴那么毒内心一定是有很多苦吧 17. 人生有两次很棒虚惊一场和失而复得 18.
如果觉得生活苦那就给自己撒点糖吧 19. 如果没有见过光明我本可以忍受黑暗 20.
谁心里没有故事只不过是学会了控制 21. 我觉得单身挺好可是一直却招人讽刺 22.
我欣赏你的直言不讳但请管好你的嘴 23. 希望曾经的仰望都能成为以后的日常 24.
心若没有栖息的地方到哪里都是流浪 25. 越长大你越知道有钱比有什么都舒坦 26.
两个人的沟通70%是情绪30%是内容 27. 不发生点烂事永远看不清身边人的模样 28.
对于我们最爱的人不说永远只说珍惜 29. 多少次的义无反顾在时间面前也得认输 30.
我会等因为最好的东西总是压轴出场 31. 幸福是比较级要有东西垫底才感觉的到 32.
在泥泞的道路上要保持一颗玩泥巴的心 33. 这世界上唯一扛得住岁月摧残的就是才华 34.
半山腰总是最挤的所以你得去山顶看看 35. 电影是多么慈祥总是让错过的人重新相逢 36.
并不是因为脆弱而是因为坚强得太久 37. 梦想成真之前它看上去总是那么遥不可及 38.
人生是场荒芜的旅行冷暖自知苦乐在心 39. 如果每个人都理解你那你得普通成什么样 40.
少又不甘多又嫌烦哪有恰到好处的陪伴 41. 听说过很多减肥方法依然胖着过完这一生 42.
我不在意你曾堕落我只在意你是否会崛起 43. 我可以受十分的苦但我受不了半分的委屈 44.
我要做个思想上的女流氓生活上的好菇凉 45. 小时候我们词不达意长大后我们言不由衷 46.
心上的纠葛解的开是结解不开是劫 47. 因为陌生所以勇敢因为距离所以美丽 48.
这世界是如此喧哗让沉默的人显得有点傻 49. 自己生活贫乏的人才喜欢刺探别人的私事 50.
不讲道理是女人的特权发脾气是女人的专利 51. 历史只有人名真的小说只有人名是假的 52.
楼底与楼顶的风景永远不同谁也别羡慕谁 53. 你都从没得到过名利却跟我说什么淡泊名利 54.
人类的极限是由少数人创造的不能一概而论 55. 生活总嘲笑我们太年轻可青春却不经易老去 56.
水凉了还可以喝心凉了连说快乐都显得落寞 57. 我希望躺在向日葵上即使沮丧也能朝着阳光 58.
喜欢发呆的人心里一定有另一个纯净的世界 59. 一个人需要隐藏多少秘密才能巧妙地度过一生 60.
已婚者不安心未婚者不甘心旁观者太热心 61. 长大这两个字连偏旁部首都没有一看就孤独
1. 是非对错有时只是角度问题 2. 越在意什么什么越会折磨你 3. 反感一个人连听见名字都恶心 4.
温和久了稍有脾气就成了恶人 5. 离去的都是风景留下的才是人生 6. 任何安慰都没有自己看透来的奏效 7.
我也想对每个人好可狼我喂不饱 8. 友情都存在着吃醋更别说爱情了 9. 原有前程可奔赴亦有岁月可回首 10.
偏见来自无非两个地方无知和愚蠢 11. 其实一切的问题时间已经给了答案 12.
所有偷过的懒都会变成打脸的巴掌 13. 信任变得很难假的和真的越来越像 14.
理性的人适合共事感性的人适合共处 15. 没有新故事的人才会对过去念念不忘 16.
你嘴巴那么毒内心一定是有很多苦吧 17. 人生有两次很棒虚惊一场和失而复得 18.
如果觉得生活苦那就给自己撒点糖吧 19. 如果没有见过光明我本可以忍受黑暗 20.
谁心里没有故事只不过是学会了控制 21. 我觉得单身挺好可是一直却招人讽刺 22.
我欣赏你的直言不讳但请管好你的嘴 23. 希望曾经的仰望都能成为以后的日常 24.
心若没有栖息的地方到哪里都是流浪 25. 越长大你越知道有钱比有什么都舒坦 26.
两个人的沟通70%是情绪30%是内容 27. 不发生点烂事永远看不清身边人的模样 28.
对于我们最爱的人不说永远只说珍惜 29. 多少次的义无反顾在时间面前也得认输 30.
我会等因为最好的东西总是压轴出场 31. 幸福是比较级要有东西垫底才感觉的到 32.
在泥泞的道路上要保持一颗玩泥巴的心 33. 这世界上唯一扛得住岁月摧残的就是才华 34.
半山腰总是最挤的所以你得去山顶看看 35. 电影是多么慈祥总是让错过的人重新相逢 36.
并不是因为脆弱而是因为坚强得太久 37. 梦想成真之前它看上去总是那么遥不可及 38.
人生是场荒芜的旅行冷暖自知苦乐在心 39. 如果每个人都理解你那你得普通成什么样 40.
少又不甘多又嫌烦哪有恰到好处的陪伴 41. 听说过很多减肥方法依然胖着过完这一生 42.
我不在意你曾堕落我只在意你是否会崛起 43. 我可以受十分的苦但我受不了半分的委屈 44.
我要做个思想上的女流氓生活上的好菇凉 45. 小时候我们词不达意长大后我们言不由衷 46.
心上的纠葛解的开是结解不开是劫 47. 因为陌生所以勇敢因为距离所以美丽 48.
这世界是如此喧哗让沉默的人显得有点傻 49. 自己生活贫乏的人才喜欢刺探别人的私事 50.
不讲道理是女人的特权发脾气是女人的专利 51. 历史只有人名真的小说只有人名是假的 52.
楼底与楼顶的风景永远不同谁也别羡慕谁 53. 你都从没得到过名利却跟我说什么淡泊名利 54.
人类的极限是由少数人创造的不能一概而论 55. 生活总嘲笑我们太年轻可青春却不经易老去 56.
水凉了还可以喝心凉了连说快乐都显得落寞 57. 我希望躺在向日葵上即使沮丧也能朝着阳光 58.
喜欢发呆的人心里一定有另一个纯净的世界 59. 一个人需要隐藏多少秘密才能巧妙地度过一生 60.
已婚者不安心未婚者不甘心旁观者太热心 61. 长大这两个字连偏旁部首都没有一看就孤独
1. 是非对错有时只是角度问题 2. 越在意什么什么越会折磨你 3. 反感一个人连听见名字都恶心 4.
温和久了稍有脾气就成了恶人 5. 离去的都是风景留下的才是人生 6. 任何安慰都没有自己看透来的奏效 7.
我也想对每个人好可狼我喂不饱 8. 友情都存在着吃醋更别说爱情了 9. 原有前程可奔赴亦有岁月可回首 10.
偏见来自无非两个地方无知和愚蠢 11. 其实一切的问题时间已经给了答案 12.
所有偷过的懒都会变成打脸的巴掌 13. 信任变得很难假的和真的越来越像 14.
理性的人适合共事感性的人适合共处 15. 没有新故事的人才会对过去念念不忘 16.
你嘴巴那么毒内心一定是有很多苦吧 17. 人生有两次很棒虚惊一场和失而复得 18.
如果觉得生活苦那就给自己撒点糖吧 19. 如果没有见过光明我本可以忍受黑暗 20.
谁心里没有故事只不过是学会了控制 21. 我觉得单身挺好可是一直却招人讽刺 22.
我欣赏你的直言不讳但请管好你的嘴 23. 希望曾经的仰望都能成为以后的日常 24.
心若没有栖息的地方到哪里都是流浪 25. 越长大你越知道有钱比有什么都舒坦 26.
两个人的沟通70%是情绪30%是内容 27. 不发生点烂事永远看不清身边人的模样 28.
对于我们最爱的人不说永远只说珍惜 29. 多少次的义无反顾在时间面前也得认输 30.
我会等因为最好的东西总是压轴出场 31. 幸福是比较级要有东西垫底才感觉的到 32.
在泥泞的道路上要保持一颗玩泥巴的心 33. 这世界上唯一扛得住岁月摧残的就是才华 34.
半山腰总是最挤的所以你得去山顶看看 35. 电影是多么慈祥总是让错过的人重新相逢 36.
并不是因为脆弱而是因为坚强得太久 37. 梦想成真之前它看上去总是那么遥不可及 38.
人生是场荒芜的旅行冷暖自知苦乐在心 39. 如果每个人都理解你那你得普通成什么样 40.
少又不甘多又嫌烦哪有恰到好处的陪伴 41. 听说过很多减肥方法依然胖着过完这一生 42.
我不在意你曾堕落我只在意你是否会崛起 43. 我可以受十分的苦但我受不了半分的委屈 44.
我要做个思想上的女流氓生活上的好菇凉 45. 小时候我们词不达意长大后我们言不由衷 46.
心上的纠葛解的开是结解不开是劫 47. 因为陌生所以勇敢因为距离所以美丽 48.
这世界是如此喧哗让沉默的人显得有点傻 49. 自己生活贫乏的人才喜欢刺探别人的私事 50.
不讲道理是女人的特权发脾气是女人的专利 51. 历史只有人名真的小说只有人名是假的 52.
楼底与楼顶的风景永远不同谁也别羡慕谁 53. 你都从没得到过名利却跟我说什么淡泊名利 54.
人类的极限是由少数人创造的不能一概而论 55. 生活总嘲笑我们太年轻可青春却不经易老去 56.
水凉了还可以喝心凉了连说快乐都显得落寞 57. 我希望躺在向日葵上即使沮丧也能朝着阳光 58.
喜欢发呆的人心里一定有另一个纯净的世界 59. 一个人需要隐藏多少秘密才能巧妙地度过一生 60.
已婚者不安心未婚者不甘心旁观者太热心 61. 长大这两个字连偏旁部首都没有一看就孤独
1. 是非对错有时只是角度问题 2. 越在意什么什么越会折磨你 3. 反感一个人连听见名字都恶心 4.
温和久了稍有脾气就成了恶人 5. 离去的都是风景留下的才是人生 6. 任何安慰都没有自己看透来的奏效 7.
我也想对每个人好可狼我喂不饱 8. 友情都存在着吃醋更别说爱情了 9. 原有前程可奔赴亦有岁月可回首 10.
偏见来自无非两个地方无知和愚蠢 11. 其实一切的问题时间已经给了答案 12.
所有偷过的懒都会变成打脸的巴掌 13. 信任变得很难假的和真的越来越像 14.
理性的人适合共事感性的人适合共处 15. 没有新故事的人才会对过去念念不忘 16.
你嘴巴那么毒内心一定是有很多苦吧 17. 人生有两次很棒虚惊一场和失而复得 18.
如果觉得生活苦那就给自己撒点糖吧 19. 如果没有见过光明我本可以忍受黑暗 20.
谁心里没有故事只不过是学会了控制 21. 我觉得单身挺好可是一直却招人讽刺 22.
我欣赏你的直言不讳但请管好你的嘴 23. 希望曾经的仰望都能成为以后的日常 24.
心若没有栖息的地方到哪里都是流浪 25. 越长大你越知道有钱比有什么都舒坦 26.
两个人的沟通70%是情绪30%是内容 27. 不发生点烂事永远看不清身边人的模样 28.
对于我们最爱的人不说永远只说珍惜 29. 多少次的义无反顾在时间面前也得认输 30.
我会等因为最好的东西总是压轴出场 31. 幸福是比较级要有东西垫底才感觉的到 32.
在泥泞的道路上要保持一颗玩泥巴的心 33. 这世界上唯一扛得住岁月摧残的就是才华 34.
半山腰总是最挤的所以你得去山顶看看 35. 电影是多么慈祥总是让错过的人重新相逢 36.
并不是因为脆弱而是因为坚强得太久 37. 梦想成真之前它看上去总是那么遥不可及 38.
人生是场荒芜的旅行冷暖自知苦乐在心 39. 如果每个人都理解你那你得普通成什么样 40.
少又不甘多又嫌烦哪有恰到好处的陪伴 41. 听说过很多减肥方法依然胖着过完这一生 42.
我不在意你曾堕落我只在意你是否会崛起 43. 我可以受十分的苦但我受不了半分的委屈 44.
我要做个思想上的女流氓生活上的好菇凉 45. 小时候我们词不达意长大后我们言不由衷 46.
心上的纠葛解的开是结解不开是劫 47. 因为陌生所以勇敢因为距离所以美丽 48.
这世界是如此喧哗让沉默的人显得有点傻 49. 自己生活贫乏的人才喜欢刺探别人的私事 50.
不讲道理是女人的特权发脾气是女人的专利 51. 历史只有人名真的小说只有人名是假的 52.
楼底与楼顶的风景永远不同谁也别羡慕谁 53. 你都从没得到过名利却跟我说什么淡泊名利 54.
人类的极限是由少数人创造的不能一概而论 55. 生活总嘲笑我们太年轻可青春却不经易老去 56.
水凉了还可以喝心凉了连说快乐都显得落寞 57. 我希望躺在向日葵上即使沮丧也能朝着阳光 58.
喜欢发呆的人心里一定有另一个纯净的世界 59. 一个人需要隐藏多少秘密才能巧妙地度过一生 60.
已婚者不安心未婚者不甘心旁观者太热心 61. 长大这两个字连偏旁部首都没有一看就孤独
`;
const userStore = useUserStore();
const stat = {
post: {
title: '文章',
count: 22,
icon: 'icon-park-outline-folder-close'
},
material: {
title: '素材',
count: 119,
icon: 'icon-park-outline-folder-close'
},
comment: {
title: '评论',
count: 1802,
icon: 'icon-park-outline-user'
},
user: {
title: '用户',
count: 98,
icon: 'icon-park-outline-user'
},
category: {
title: '分类',
count: 26,
icon: 'icon-park-outline-tag'
},
};
</script>
<style scoped></style>
<route lang="json">
{
"meta": {
"sort": 10001,
"title": "概览",
"icon": "icon-park-outline-home"
}
}
</route>
@/components/AnForm/components/useFormModel

File diff suppressed because it is too large Load Diff

View File

@ -7,8 +7,8 @@
<script setup lang="tsx">
import { useTable } from '@/components/AnTable';
import { Image } from '@arco-design/web-vue';
import data from './data.json';
const data: any = []
defineOptions({ name: 'SystemLogoPage' });
const { component: OperationTable } = useTable({

View File

@ -1,7 +1,7 @@
<template>
<BreadPage :content-padding="false">
<template #content>
<section class="my-page m-4 bg-white rounded">
<section class="my-page m-4 bg-white rounded px-4">
<a-tabs size="large" class="h-full">
<a-tab-pane key="8" title="常规设置">
<a-form

View File

@ -7,7 +7,6 @@ export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
AAlert: typeof import('@arco-design/web-vue')['Alert']
AAutoComplete: typeof import('@arco-design/web-vue')['AutoComplete']
AAvatar: typeof import('@arco-design/web-vue')['Avatar']
ABadge: typeof import('@arco-design/web-vue')['Badge']
@ -17,7 +16,6 @@ declare module '@vue/runtime-core' {
ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
ACheckboxGroup: typeof import('@arco-design/web-vue')['CheckboxGroup']
AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
ADatePicker: typeof import('@arco-design/web-vue')['DatePicker']
ADivider: typeof import('@arco-design/web-vue')['Divider']
ADoption: typeof import('@arco-design/web-vue')['Doption']
ADrawer: typeof import('@arco-design/web-vue')['Drawer']
@ -25,7 +23,6 @@ declare module '@vue/runtime-core' {
AEmpty: typeof import('@arco-design/web-vue')['Empty']
AForm: typeof import('@arco-design/web-vue')['Form']
AFormItem: typeof import('@arco-design/web-vue')['FormItem']
AImage: typeof import('@arco-design/web-vue')['Image']
AImagePreview: typeof import('@arco-design/web-vue')['ImagePreview']
AImagePreviewGroup: typeof import('@arco-design/web-vue')['ImagePreviewGroup']
AInput: typeof import('@arco-design/web-vue')['Input']
@ -40,6 +37,7 @@ declare module '@vue/runtime-core' {
AMenu: typeof import('@arco-design/web-vue')['Menu']
AMenuItem: typeof import('@arco-design/web-vue')['MenuItem']
AModal: typeof import('@arco-design/web-vue')['Modal']
AnAudio: typeof import('./../components/AnViewer/AnAudio.vue')['default']
AnEmpty: typeof import('./../components/AnEmpty/AnEmpty.vue')['default']
AnForbidden: typeof import('./../components/AnForbidden/AnForbidden.vue')['default']
AnToast: typeof import('./../components/AnToast/AnToast.vue')['default']