feat: 添加首页统计demo
parent
6bc11b3c95
commit
40eeb6899a
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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>,
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
]);
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ const { component: CategoryTable } = useTable({
|
|||
width: 180,
|
||||
buttons: [
|
||||
{
|
||||
text: '文章列表',
|
||||
text: '文章',
|
||||
},
|
||||
{
|
||||
type: 'modify',
|
||||
|
|
|
|||
|
|
@ -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 };
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
Loading…
Reference in New Issue