feat: 添加首页统计demo
parent
6bc11b3c95
commit
40eeb6899a
|
|
@ -213,8 +213,6 @@ export const AnFormModal = defineComponent({
|
||||||
<Modal
|
<Modal
|
||||||
titleAlign="start"
|
titleAlign="start"
|
||||||
closable={false}
|
closable={false}
|
||||||
maskAnimationName=""
|
|
||||||
modalAnimationName=""
|
|
||||||
{...this.modalProps}
|
{...this.modalProps}
|
||||||
v-model:visible={this.visible}
|
v-model:visible={this.visible}
|
||||||
class="an-form-modal"
|
class="an-form-modal"
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ export class PluginContainer {
|
||||||
widgets: any[] = [];
|
widgets: any[] = [];
|
||||||
|
|
||||||
constructor(private plugins: AnTablePlugin[]) {
|
constructor(private plugins: AnTablePlugin[]) {
|
||||||
this.plugins.unshift(useTableRefresh(), useColumnConfig(), useRowFormat(), useRowDelete(), useRowModify());
|
this.plugins.unshift(useTableRefresh(), useRowFormat(), useRowDelete(), useRowModify());
|
||||||
for (const plugin of plugins) {
|
for (const plugin of plugins) {
|
||||||
const action = plugin.action?.();
|
const action = plugin.action?.();
|
||||||
if (action) {
|
if (action) {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ export function useTableRefresh(): AnTablePlugin {
|
||||||
return () => {
|
return () => {
|
||||||
const { loading, refresh } = context;
|
const { loading, refresh } = context;
|
||||||
return (
|
return (
|
||||||
<Button disabled={loading.value} onClick={refresh}>
|
<Button loading={loading.value} onClick={refresh}>
|
||||||
{{
|
{{
|
||||||
icon: () => <span class="icon-park-outline-redo"></span>,
|
icon: () => <span class="icon-park-outline-redo"></span>,
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
@click="onBack"
|
@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>
|
<i class="icon-park-outline-back mr-1"></i>
|
||||||
返回
|
返回
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
{{ currentFormated }}
|
{{ currentFormated }}
|
||||||
</div>
|
</div>
|
||||||
<div class="w-96">
|
<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>
|
<a-slider class="block!"></a-slider>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -142,7 +142,8 @@ const emit = defineEmits(['update:visible']);
|
||||||
const show = useVModel(props, 'visible', emit);
|
const show = useVModel(props, 'visible', emit);
|
||||||
const headerRef = ref<HTMLElement | null>(null);
|
const headerRef = ref<HTMLElement | null>(null);
|
||||||
const viewRef = 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 onBack = () => (show.value = false);
|
||||||
const playing = ref(true);
|
const playing = ref(true);
|
||||||
const volume = ref(50);
|
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(() => {
|
const typeIcon = computed(() => {
|
||||||
return getIcon(props.type ?? 'text');
|
return getIcon(props.type ?? 'text');
|
||||||
});
|
});
|
||||||
|
|
@ -213,6 +221,8 @@ watch(
|
||||||
}
|
}
|
||||||
if (props.type === ViewType.VIDEO) {
|
if (props.type === ViewType.VIDEO) {
|
||||||
loadVideo();
|
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>
|
</a-avatar>
|
||||||
<div class="leading-4 my-2">
|
<div class="leading-4 my-2">
|
||||||
{{ userStore.nickname }}
|
{{ userStore.nickname }}
|
||||||
<span class="text-xs text-gray-400">(管理员)</span>
|
<span class="text-xs text-gray-400">({{ userStore.username }})</span>
|
||||||
<div class="text-xs text-gray-500">@{{ userStore.username }}</div>
|
<div class="text-xs text-gray-400">管理员</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-doption>
|
</a-doption>
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ const { component: CategoryTable } = useTable({
|
||||||
width: 180,
|
width: 180,
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
text: '文章列表',
|
text: '文章',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'modify',
|
type: 'modify',
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,29 @@ enum MIME {
|
||||||
APPLICATION = 'application',
|
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('/');
|
const [type, subtype] = mimetype.split('/');
|
||||||
if (type === MIME.IMAGE) {
|
if (type === MIME.IMAGE) {
|
||||||
return 'icon-file-iimage';
|
return 'icon-file-iimage';
|
||||||
|
|
@ -42,4 +64,8 @@ function getIcon(mimetype: string) {
|
||||||
return 'icon-file-iunknown';
|
return 'icon-file-iunknown';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getIcon(mimetype: string) {
|
||||||
|
return getFmtIcon(mimetype)
|
||||||
|
}
|
||||||
|
|
||||||
export { getIcon, getIconnameByMimetype };
|
export { getIcon, getIconnameByMimetype };
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import AnCategory from './components/AnCategory.vue';
|
||||||
import AnPreview from './components/AnPreview.vue';
|
import AnPreview from './components/AnPreview.vue';
|
||||||
import AnUpload from './components/AnUpload.vue';
|
import AnUpload from './components/AnUpload.vue';
|
||||||
import { getIcon } from './components/util';
|
import { getIcon } from './components/util';
|
||||||
|
import { FileTypes } from '@/constants/file';
|
||||||
|
|
||||||
const current = ref<FileCategory>();
|
const current = ref<FileCategory>();
|
||||||
const viewer = reactive({ visible: false, url: undefined, type: undefined });
|
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>
|
<i class="hidden! group-hover:inline-block! icon-park-outline-copy hover:text-gray-700 cursor-pointer"></i>
|
||||||
</span>
|
</span>
|
||||||
</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>
|
<span>
|
||||||
<i class="icon-park-outline-folder-close mr-1"></i>
|
<i class="icon-park-outline-folder-close mr-1"></i>
|
||||||
{record.category?.name ?? '默认分类'}
|
{record.category?.name ?? '默认分类'}
|
||||||
</span>
|
</span>
|
||||||
<span>{numeral(record.size).format('0 b')}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '文件大小',
|
||||||
|
width: 100,
|
||||||
|
align: 'right',
|
||||||
|
render: ({ record }) => <span class="text-gray-500">{numeral(record.size).format('0 b')}</span>,
|
||||||
|
},
|
||||||
useCreateColumn(),
|
useCreateColumn(),
|
||||||
useUpdateColumn(),
|
useUpdateColumn(),
|
||||||
{
|
{
|
||||||
|
|
@ -118,6 +124,9 @@ const {
|
||||||
title: '操作',
|
title: '操作',
|
||||||
width: 160,
|
width: 160,
|
||||||
buttons: [
|
buttons: [
|
||||||
|
{
|
||||||
|
text: '下载',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'modify',
|
type: 'modify',
|
||||||
text: '修改',
|
text: '修改',
|
||||||
|
|
@ -149,28 +158,7 @@ const {
|
||||||
field: 'type',
|
field: 'type',
|
||||||
label: '类型',
|
label: '类型',
|
||||||
setter: 'select',
|
setter: 'select',
|
||||||
options: [
|
options: FileTypes,
|
||||||
{
|
|
||||||
label: '视频',
|
|
||||||
value: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '音频',
|
|
||||||
value: 2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '图片',
|
|
||||||
value: 3,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '文本',
|
|
||||||
value: 4,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '其他',
|
|
||||||
value: 5,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
setterProps: {
|
setterProps: {
|
||||||
style: {
|
style: {
|
||||||
width: '100px',
|
width: '100px',
|
||||||
|
|
|
||||||
|
|
@ -1,146 +1,102 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="m-4 bg-white p-4">
|
<div class="w-full p-5 flex gap-4">
|
||||||
<a-button @click="visible = true">预览</a-button>
|
<div class="flex-1">
|
||||||
<an-viewer v-model:visible="visible" type="audio" :url="textUrl" :download="'s'" :name="'明日之星.png'"></an-viewer>
|
<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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="tsx">
|
<script setup lang="ts">
|
||||||
import AnViewer from '@/components/AnViewer/AnViewer.vue';
|
import { useUserStore } from '@/store';
|
||||||
|
|
||||||
const visible = ref(false);
|
const userStore = useUserStore();
|
||||||
const videoUrl = 'https://api.dogecloud.com/player/get.mp4?vcode=5ac682e6f8231991&userId=17&ext=.mp4'
|
|
||||||
const imageUrl =
|
const stat = {
|
||||||
'https://images.unsplash.com/photo-1682687982468-4584ff11f88a?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDF8MHxlZGl0b3JpYWwtZmVlZHwxfHx8ZW58MHx8fHx8';
|
post: {
|
||||||
const textUrl = `
|
title: '文章',
|
||||||
1. 是非对错,有时只是角度问题。 2. 越在意什么,什么越会折磨你。 3. 反感一个人,连听见名字都恶心。 4.
|
count: 22,
|
||||||
温和久了,稍有脾气就成了恶人。 5. 离去的都是风景,留下的才是人生。 6. 任何安慰都没有自己看透来的奏效。 7.
|
icon: 'icon-park-outline-folder-close'
|
||||||
我也想对每个人好,可狼我喂不饱。 8. 友情都存在着吃醋,更别说爱情了。 9. 原有前程可奔赴,亦有岁月可回首。 10.
|
},
|
||||||
偏见来自无非两个地方:无知和愚蠢。 11. 其实一切的问题,时间已经给了答案。 12.
|
material: {
|
||||||
所有偷过的懒,都会变成打脸的巴掌。 13. 信任变得很难,假的和真的越来越像。 14.
|
title: '素材',
|
||||||
理性的人适合共事,感性的人适合共处。 15. 没有新故事的人,才会对过去念念不忘。 16.
|
count: 119,
|
||||||
你嘴巴那么毒,内心一定是有很多苦吧。 17. 人生有两次很棒,虚惊一场和失而复得。 18.
|
icon: 'icon-park-outline-folder-close'
|
||||||
如果觉得生活苦,那就给自己撒点糖吧。 19. 如果没有见过光明,我本可以忍受黑暗。 20.
|
},
|
||||||
谁心里没有故事,只不过是学会了控制。 21. 我觉得单身挺好,可是一直却招人讽刺。 22.
|
comment: {
|
||||||
我欣赏你的直言不讳,但请管好你的嘴。 23. 希望曾经的仰望,都能成为以后的日常。 24.
|
title: '评论',
|
||||||
心若没有栖息的地方,到哪里都是流浪。 25. 越长大你越知道,有钱比有什么都舒坦。 26.
|
count: 1802,
|
||||||
两个人的沟通,70%是情绪,30%是内容。 27. 不发生点烂事,永远看不清身边人的模样。 28.
|
icon: 'icon-park-outline-user'
|
||||||
对于我们最爱的人,不说永远,只说珍惜。 29. 多少次的义无反顾,在时间面前也得认输。 30.
|
},
|
||||||
我会等,因为最好的东西,总是压轴出场。 31. 幸福是比较级,要有东西垫底才感觉的到。 32.
|
user: {
|
||||||
在泥泞的道路上,要保持一颗玩泥巴的心。 33. 这世界上唯一扛得住岁月摧残的就是才华。 34.
|
title: '用户',
|
||||||
半山腰总是最挤的,所以你得去山顶看看。 35. 电影是多么慈祥,总是让错过的人重新相逢。 36.
|
count: 98,
|
||||||
哭,并不是因为脆弱,而是因为坚强得太久。 37. 梦想成真之前,它看上去总是那么遥不可及。 38.
|
icon: 'icon-park-outline-user'
|
||||||
人生是场荒芜的旅行,冷暖自知,苦乐在心。 39. 如果每个人都理解你,那你得普通成什么样。 40.
|
},
|
||||||
少又不甘,多又嫌烦,哪有恰到好处的陪伴。 41. 听说过很多减肥方法,依然胖着过完这一生。 42.
|
category: {
|
||||||
我不在意你曾堕落,我只在意你是否会崛起。 43. 我可以受十分的苦,但我受不了半分的委屈。 44.
|
title: '分类',
|
||||||
我要做个思想上的女流氓,生活上的好菇凉。 45. 小时候我们词不达意,长大后我们言不由衷。 46.
|
count: 26,
|
||||||
心上的纠葛,解的开,是结,解不开,是劫。 47. 因为陌生,所以勇敢;因为距离,所以美丽。 48.
|
icon: 'icon-park-outline-tag'
|
||||||
这世界是如此喧哗,让沉默的人显得有点傻。 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. 长大这两个字连偏旁部首都没有,一看就孤独。
|
|
||||||
`;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<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">
|
<script setup lang="tsx">
|
||||||
import { useTable } from '@/components/AnTable';
|
import { useTable } from '@/components/AnTable';
|
||||||
import { Image } from '@arco-design/web-vue';
|
import { Image } from '@arco-design/web-vue';
|
||||||
import data from './data.json';
|
|
||||||
|
|
||||||
|
const data: any = []
|
||||||
defineOptions({ name: 'SystemLogoPage' });
|
defineOptions({ name: 'SystemLogoPage' });
|
||||||
|
|
||||||
const { component: OperationTable } = useTable({
|
const { component: OperationTable } = useTable({
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<BreadPage :content-padding="false">
|
<BreadPage :content-padding="false">
|
||||||
<template #content>
|
<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-tabs size="large" class="h-full">
|
||||||
<a-tab-pane key="8" title="常规设置">
|
<a-tab-pane key="8" title="常规设置">
|
||||||
<a-form
|
<a-form
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ export {}
|
||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
declare module '@vue/runtime-core' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
AAlert: typeof import('@arco-design/web-vue')['Alert']
|
|
||||||
AAutoComplete: typeof import('@arco-design/web-vue')['AutoComplete']
|
AAutoComplete: typeof import('@arco-design/web-vue')['AutoComplete']
|
||||||
AAvatar: typeof import('@arco-design/web-vue')['Avatar']
|
AAvatar: typeof import('@arco-design/web-vue')['Avatar']
|
||||||
ABadge: typeof import('@arco-design/web-vue')['Badge']
|
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']
|
ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
|
||||||
ACheckboxGroup: typeof import('@arco-design/web-vue')['CheckboxGroup']
|
ACheckboxGroup: typeof import('@arco-design/web-vue')['CheckboxGroup']
|
||||||
AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
|
AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
|
||||||
ADatePicker: typeof import('@arco-design/web-vue')['DatePicker']
|
|
||||||
ADivider: typeof import('@arco-design/web-vue')['Divider']
|
ADivider: typeof import('@arco-design/web-vue')['Divider']
|
||||||
ADoption: typeof import('@arco-design/web-vue')['Doption']
|
ADoption: typeof import('@arco-design/web-vue')['Doption']
|
||||||
ADrawer: typeof import('@arco-design/web-vue')['Drawer']
|
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']
|
AEmpty: typeof import('@arco-design/web-vue')['Empty']
|
||||||
AForm: typeof import('@arco-design/web-vue')['Form']
|
AForm: typeof import('@arco-design/web-vue')['Form']
|
||||||
AFormItem: typeof import('@arco-design/web-vue')['FormItem']
|
AFormItem: typeof import('@arco-design/web-vue')['FormItem']
|
||||||
AImage: typeof import('@arco-design/web-vue')['Image']
|
|
||||||
AImagePreview: typeof import('@arco-design/web-vue')['ImagePreview']
|
AImagePreview: typeof import('@arco-design/web-vue')['ImagePreview']
|
||||||
AImagePreviewGroup: typeof import('@arco-design/web-vue')['ImagePreviewGroup']
|
AImagePreviewGroup: typeof import('@arco-design/web-vue')['ImagePreviewGroup']
|
||||||
AInput: typeof import('@arco-design/web-vue')['Input']
|
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']
|
AMenu: typeof import('@arco-design/web-vue')['Menu']
|
||||||
AMenuItem: typeof import('@arco-design/web-vue')['MenuItem']
|
AMenuItem: typeof import('@arco-design/web-vue')['MenuItem']
|
||||||
AModal: typeof import('@arco-design/web-vue')['Modal']
|
AModal: typeof import('@arco-design/web-vue')['Modal']
|
||||||
|
AnAudio: typeof import('./../components/AnViewer/AnAudio.vue')['default']
|
||||||
AnEmpty: typeof import('./../components/AnEmpty/AnEmpty.vue')['default']
|
AnEmpty: typeof import('./../components/AnEmpty/AnEmpty.vue')['default']
|
||||||
AnForbidden: typeof import('./../components/AnForbidden/AnForbidden.vue')['default']
|
AnForbidden: typeof import('./../components/AnForbidden/AnForbidden.vue')['default']
|
||||||
AnToast: typeof import('./../components/AnToast/AnToast.vue')['default']
|
AnToast: typeof import('./../components/AnToast/AnToast.vue')['default']
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue