mirror of
https://github.com/continew-org/continew-admin-ui.git
synced 2025-12-25 14:58:38 +08:00
Merge branch 'dev' of https://gitee.com/continew/continew-admin-ui into dev
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
import { type EChartsOption, graphic } from 'echarts'
|
||||
import { useChart } from '@/hooks'
|
||||
import { type DashboardChartCommonResp, getAnalysisTimeslot as getData } from '@/apis/common'
|
||||
import handleIcon from '@/assets/icons/slider.svg'
|
||||
|
||||
// 提示框
|
||||
const tooltipItemsHtmlString = (items) => {
|
||||
@@ -23,7 +24,7 @@ const tooltipItemsHtmlString = (items) => {
|
||||
<span class="tooltip-value">
|
||||
${el.value}
|
||||
</span>
|
||||
</div>`
|
||||
</div>`,
|
||||
)
|
||||
.join('')
|
||||
}
|
||||
@@ -36,7 +37,7 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
left: '40',
|
||||
right: 0,
|
||||
top: '20',
|
||||
bottom: '100'
|
||||
bottom: '100',
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
@@ -49,24 +50,24 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
if (idx === 0) return ''
|
||||
if (idx === xAxis.value.length - 1) return ''
|
||||
return `${value}`
|
||||
}
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: isDark ? '#3f3f3f' : '#A9AEB8'
|
||||
}
|
||||
color: isDark ? '#3f3f3f' : '#A9AEB8',
|
||||
},
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
alignWithLabel: true,
|
||||
lineStyle: {
|
||||
color: '#86909C'
|
||||
color: '#86909C',
|
||||
},
|
||||
interval(idx: number) {
|
||||
if (idx === 0) return false
|
||||
if (idx === xAxis.value.length - 1) return false
|
||||
return true
|
||||
}
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
@@ -75,16 +76,16 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
return idx !== xAxis.value.length - 1
|
||||
},
|
||||
lineStyle: {
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF'
|
||||
}
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF',
|
||||
},
|
||||
},
|
||||
axisPointer: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#23ADFF',
|
||||
width: 2
|
||||
}
|
||||
}
|
||||
width: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
@@ -95,17 +96,17 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
return `${value / 1000}k`
|
||||
}
|
||||
return `${value}`
|
||||
}
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF'
|
||||
}
|
||||
}
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF',
|
||||
},
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
@@ -117,7 +118,7 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
${tooltipItemsHtmlString(params)}
|
||||
</div>`
|
||||
},
|
||||
className: 'echarts-tooltip-diy'
|
||||
className: 'echarts-tooltip-diy',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -133,23 +134,23 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
focus: 'series',
|
||||
itemStyle: {
|
||||
borderWidth: 2,
|
||||
borderColor: '#E0E3FF'
|
||||
}
|
||||
borderColor: '#E0E3FF',
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
opacity: 0.8,
|
||||
color: new graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(17, 126, 255, 0.16)'
|
||||
color: 'rgba(17, 126, 255, 0.16)',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(17, 128, 255, 0)'
|
||||
}
|
||||
])
|
||||
}
|
||||
}
|
||||
color: 'rgba(17, 128, 255, 0)',
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
],
|
||||
dataZoom: [
|
||||
{
|
||||
@@ -159,23 +160,22 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
right: 14,
|
||||
height: 14,
|
||||
borderColor: 'transparent',
|
||||
handleIcon:
|
||||
'image://http://p3-armor.byteimg.com/tos-cn-i-49unhts6dw/1ee5a8c6142b2bcf47d2a9f084096447.svg~tplv-49unhts6dw-image.image',
|
||||
handleIcon: `image://${handleIcon}`,
|
||||
handleSize: '20',
|
||||
handleStyle: {
|
||||
shadowColor: 'rgba(0, 0, 0, 0.2)',
|
||||
shadowBlur: 4
|
||||
shadowBlur: 4,
|
||||
},
|
||||
brushSelect: false,
|
||||
backgroundColor: isDark ? '#313132' : '#F2F3F5'
|
||||
backgroundColor: isDark ? '#313132' : '#F2F3F5',
|
||||
},
|
||||
{
|
||||
type: 'inside',
|
||||
start: 0,
|
||||
end: 100,
|
||||
zoomOnMouseWheel: false
|
||||
}
|
||||
]
|
||||
zoomOnMouseWheel: false,
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ const tooltipItemsHtmlString = (items) => {
|
||||
<span class="tooltip-value">
|
||||
${el.value}
|
||||
</span>
|
||||
</div>`
|
||||
</div>`,
|
||||
)
|
||||
.join('')
|
||||
}
|
||||
@@ -43,14 +43,14 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
left: '38',
|
||||
right: '5',
|
||||
top: '10',
|
||||
bottom: '50'
|
||||
bottom: '50',
|
||||
},
|
||||
legend: {
|
||||
bottom: -3,
|
||||
icon: 'circle',
|
||||
textStyle: {
|
||||
color: '#4E5969'
|
||||
}
|
||||
color: '#4E5969',
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
@@ -63,13 +63,13 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
if (idx === 0) return ''
|
||||
if (idx === xAxis.value.length - 1) return ''
|
||||
return `${value}`
|
||||
}
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
axisTick: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
@@ -78,16 +78,16 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
return idx !== xAxis.value.length - 1
|
||||
},
|
||||
lineStyle: {
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF'
|
||||
}
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF',
|
||||
},
|
||||
},
|
||||
axisPointer: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: '#23ADFF',
|
||||
width: 2
|
||||
}
|
||||
}
|
||||
width: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
@@ -98,17 +98,17 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
return `${value / 1000}k`
|
||||
}
|
||||
return `${value}`
|
||||
}
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'dashed',
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF'
|
||||
}
|
||||
}
|
||||
color: isDark ? '#3F3F3F' : '#E5E8EF',
|
||||
},
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
@@ -120,7 +120,7 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
${tooltipItemsHtmlString(params)}
|
||||
</div>`
|
||||
},
|
||||
className: 'echarts-tooltip-diy'
|
||||
className: 'echarts-tooltip-diy',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -136,22 +136,22 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
focus: 'series',
|
||||
itemStyle: {
|
||||
borderWidth: 2,
|
||||
borderColor: '#E0E3FF'
|
||||
}
|
||||
borderColor: '#E0E3FF',
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
opacity: 0.8,
|
||||
color: new graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(17, 126, 255, 0.16)'
|
||||
color: 'rgba(17, 126, 255, 0.16)',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(17, 128, 255, 0)'
|
||||
}
|
||||
])
|
||||
}
|
||||
color: 'rgba(17, 128, 255, 0)',
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '独立IP',
|
||||
@@ -166,24 +166,24 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
focus: 'series',
|
||||
itemStyle: {
|
||||
borderWidth: 2,
|
||||
borderColor: '#E2F2FF'
|
||||
}
|
||||
borderColor: '#E2F2FF',
|
||||
},
|
||||
},
|
||||
areaStyle: {
|
||||
opacity: 0.8,
|
||||
color: new graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{
|
||||
offset: 0,
|
||||
color: 'rgba(17, 126, 255, 0.16)'
|
||||
color: 'rgba(17, 126, 255, 0.16)',
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: 'rgba(17, 128, 255, 0)'
|
||||
}
|
||||
])
|
||||
}
|
||||
}
|
||||
]
|
||||
color: 'rgba(17, 128, 255, 0)',
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -23,15 +23,15 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
icon: 'circle',
|
||||
itemWidth: 8,
|
||||
textStyle: {
|
||||
color: isDark ? 'rgba(255,255,255,0.7)' : '#4E5969'
|
||||
color: isDark ? 'rgba(255,255,255,0.7)' : '#4E5969',
|
||||
},
|
||||
itemStyle: {
|
||||
borderWidth: 0
|
||||
}
|
||||
borderWidth: 0,
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'item'
|
||||
trigger: 'item',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -40,15 +40,15 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
center: ['50%', '42%'],
|
||||
label: {
|
||||
formatter: '{d}% ',
|
||||
color: isDark ? 'rgba(255, 255, 255, 0.7)' : '#4E5969'
|
||||
color: isDark ? 'rgba(255, 255, 255, 0.7)' : '#4E5969',
|
||||
},
|
||||
itemStyle: {
|
||||
borderColor: isDark ? '#000' : '#fff',
|
||||
borderWidth: 1
|
||||
borderWidth: 1,
|
||||
},
|
||||
data: chartData.value
|
||||
}
|
||||
]
|
||||
data: chartData.value,
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
@@ -64,8 +64,8 @@ const getChartData = async () => {
|
||||
chartData.value.push({
|
||||
...item,
|
||||
itemStyle: {
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index]
|
||||
}
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index],
|
||||
},
|
||||
})
|
||||
})
|
||||
} finally {
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import type { EChartsOption } from 'echarts'
|
||||
import { useChart } from '@/hooks'
|
||||
import { useAppStore } from '@/stores'
|
||||
|
||||
@@ -50,24 +49,24 @@ const count = ref(0)
|
||||
const growth = ref(0)
|
||||
const xAxis = ref<string[]>([])
|
||||
const chartData = ref<number[]>([])
|
||||
const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
const { chartOption } = useChart(() => {
|
||||
return {
|
||||
grid: {
|
||||
left: 0,
|
||||
right: 30,
|
||||
top: 10,
|
||||
bottom: 0
|
||||
bottom: 0,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: xAxis.value
|
||||
data: xAxis.value,
|
||||
},
|
||||
yAxis: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis'
|
||||
trigger: 'axis',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -79,10 +78,10 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
lineStyle: {
|
||||
color: '#246EFF',
|
||||
width: 2,
|
||||
type: 'dashed'
|
||||
}
|
||||
}
|
||||
]
|
||||
type: 'dashed',
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import type { EChartsOption } from 'echarts'
|
||||
import { useChart } from '@/hooks'
|
||||
import { useAppStore } from '@/stores'
|
||||
|
||||
@@ -49,13 +48,13 @@ const isDark = computed(() => appStore.theme === 'dark')
|
||||
const count = ref(0)
|
||||
const growth = ref(0)
|
||||
const chartData = ref<number[]>([])
|
||||
const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
const { chartOption } = useChart(() => {
|
||||
return {
|
||||
grid: {
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
bottom: 0
|
||||
bottom: 0,
|
||||
},
|
||||
legend: {
|
||||
show: true,
|
||||
@@ -66,11 +65,11 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
itemWidth: 6,
|
||||
itemHeight: 6,
|
||||
textStyle: {
|
||||
color: '#4E5969'
|
||||
}
|
||||
color: '#4E5969',
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -79,11 +78,11 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
radius: ['50%', '70%'],
|
||||
center: ['30%', '50%'],
|
||||
label: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
data: chartData.value
|
||||
}
|
||||
]
|
||||
data: chartData.value,
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
@@ -101,8 +100,8 @@ const getChartData = async () => {
|
||||
name: `示例${index + 1}`,
|
||||
value: item,
|
||||
itemStyle: {
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index]
|
||||
}
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index],
|
||||
},
|
||||
})
|
||||
})
|
||||
} finally {
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import type { EChartsOption } from 'echarts'
|
||||
import { useChart } from '@/hooks'
|
||||
import { useAppStore } from '@/stores'
|
||||
import { type DashboardChartCommonResp, getDashboardOverviewIp as getData } from '@/apis'
|
||||
@@ -52,24 +51,24 @@ const today = ref(0)
|
||||
const growth = ref(0)
|
||||
const xAxis = ref<string[]>([])
|
||||
const chartData = ref<number[]>([])
|
||||
const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
const { chartOption } = useChart(() => {
|
||||
return {
|
||||
grid: {
|
||||
left: 0,
|
||||
right: 30,
|
||||
top: 10,
|
||||
bottom: 0
|
||||
bottom: 0,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: xAxis.value
|
||||
data: xAxis.value,
|
||||
},
|
||||
yAxis: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis'
|
||||
trigger: 'axis',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -79,10 +78,10 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
color: '#2CAB40',
|
||||
width: 2
|
||||
}
|
||||
}
|
||||
]
|
||||
width: 2,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue'
|
||||
import type { EChartsOption } from 'echarts'
|
||||
import { useChart } from '@/hooks'
|
||||
import { useAppStore } from '@/stores'
|
||||
import { type DashboardChartCommonResp, getDashboardOverviewPv as getData } from '@/apis'
|
||||
@@ -52,24 +51,24 @@ const today = ref(0)
|
||||
const growth = ref(0)
|
||||
const xAxis = ref<string[]>([])
|
||||
const chartData = ref<number[]>([])
|
||||
const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
const { chartOption } = useChart(() => {
|
||||
return {
|
||||
grid: {
|
||||
left: 0,
|
||||
right: 30,
|
||||
top: 10,
|
||||
bottom: 0
|
||||
bottom: 0,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: xAxis.value
|
||||
data: xAxis.value,
|
||||
},
|
||||
yAxis: {
|
||||
show: false
|
||||
show: false,
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis'
|
||||
trigger: 'axis',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -79,10 +78,10 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
showSymbol: false,
|
||||
lineStyle: {
|
||||
color: '#246EFF',
|
||||
width: 2
|
||||
}
|
||||
}
|
||||
]
|
||||
width: 2,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
left: 55,
|
||||
right: 20,
|
||||
top: 0,
|
||||
bottom: 20
|
||||
bottom: 20,
|
||||
},
|
||||
xAxis: {
|
||||
type: 'value',
|
||||
@@ -30,38 +30,38 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
formatter(value: number, idx: number) {
|
||||
if (idx === 0) return String(value)
|
||||
return `${Number(value) / 1000}k`
|
||||
}
|
||||
},
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: isDark ? '#484849' : '#E5E8EF'
|
||||
}
|
||||
}
|
||||
color: isDark ? '#484849' : '#E5E8EF',
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category',
|
||||
data: yAxis.value,
|
||||
axisLabel: {
|
||||
show: true,
|
||||
color: '#4E5969'
|
||||
color: '#4E5969',
|
||||
},
|
||||
axisTick: {
|
||||
show: true,
|
||||
length: 2,
|
||||
lineStyle: {
|
||||
color: '#A9AEB8'
|
||||
color: '#A9AEB8',
|
||||
},
|
||||
alignWithLabel: true
|
||||
alignWithLabel: true,
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: isDark ? '#484849' : '#A9AEB8'
|
||||
}
|
||||
}
|
||||
color: isDark ? '#484849' : '#A9AEB8',
|
||||
},
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis'
|
||||
trigger: 'axis',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -70,10 +70,10 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
barWidth: 7,
|
||||
itemStyle: {
|
||||
color: '#4086FF',
|
||||
borderRadius: 4
|
||||
}
|
||||
}
|
||||
]
|
||||
borderRadius: 4,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -23,15 +23,15 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
icon: 'circle',
|
||||
itemWidth: 8,
|
||||
textStyle: {
|
||||
color: isDark ? 'rgba(255,255,255,0.7)' : '#4E5969'
|
||||
color: isDark ? 'rgba(255,255,255,0.7)' : '#4E5969',
|
||||
},
|
||||
itemStyle: {
|
||||
borderWidth: 0
|
||||
}
|
||||
borderWidth: 0,
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'item'
|
||||
trigger: 'item',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
@@ -40,15 +40,15 @@ const { chartOption } = useChart((isDark: EChartsOption) => {
|
||||
center: ['50%', '42%'],
|
||||
label: {
|
||||
formatter: '{d}% ',
|
||||
color: isDark ? 'rgba(255, 255, 255, 0.7)' : '#4E5969'
|
||||
color: isDark ? 'rgba(255, 255, 255, 0.7)' : '#4E5969',
|
||||
},
|
||||
itemStyle: {
|
||||
borderColor: isDark ? '#000' : '#fff',
|
||||
borderWidth: 1
|
||||
borderWidth: 1,
|
||||
},
|
||||
data: chartData.value
|
||||
}
|
||||
]
|
||||
data: chartData.value,
|
||||
},
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
@@ -64,8 +64,8 @@ const getChartData = async () => {
|
||||
chartData.value.push({
|
||||
...item,
|
||||
itemStyle: {
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index]
|
||||
}
|
||||
color: data.length > 1 && index === data.length - 1 ? colors[colors.length - 1] : colors[index],
|
||||
},
|
||||
})
|
||||
})
|
||||
} finally {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
<img :src="`${image.src}?${new Date().getTime()}`" style="width: 100%" alt="" />
|
||||
<img :src="image.src" style="width: 100%" alt="" />
|
||||
</a-link>
|
||||
</div>
|
||||
</a-carousel-item>
|
||||
@@ -22,12 +22,12 @@
|
||||
<script lang="ts" setup>
|
||||
const images = [
|
||||
{
|
||||
src: 'https://continew.top/qrcode-text.png',
|
||||
url: 'https://continew.top/about/intro.html'
|
||||
src: `https://continew.top/qrcode-text.png?${new Date().getTime()}`,
|
||||
url: 'https://continew.top/about/intro.html',
|
||||
},
|
||||
{
|
||||
src: 'https://continew.top/sponsor.png',
|
||||
url: 'https://continew.top/sponsor.html'
|
||||
}
|
||||
src: `https://continew.top/sponsor.png?${new Date().getTime()}`,
|
||||
url: 'https://continew.top/sponsor.html',
|
||||
},
|
||||
]
|
||||
</script>
|
||||
|
||||
@@ -30,7 +30,7 @@ const links = [
|
||||
{ text: '常见问题', url: 'https://continew.top/faq.html' },
|
||||
{ text: '更新日志', url: 'https://continew.top/admin/other/changelog.html' },
|
||||
{ text: '贡献指南', url: 'https://continew.top/admin/other/contributing.html' },
|
||||
{ text: '赞助支持 💖', url: 'https://continew.top/sponsor.html' }
|
||||
{ text: '赞助支持 💖', url: 'https://continew.top/sponsor.html' },
|
||||
]
|
||||
</script>
|
||||
|
||||
|
||||
198
src/views/dashboard/workplace/components/LatestActivity.vue
Normal file
198
src/views/dashboard/workplace/components/LatestActivity.vue
Normal file
@@ -0,0 +1,198 @@
|
||||
<template>
|
||||
<a-card class="general-card" title="最新动态" style="margin-bottom: 14px">
|
||||
<template #extra>
|
||||
<a-dropdown>
|
||||
<a-link>更多</a-link>
|
||||
<template #content>
|
||||
<a-doption>
|
||||
<a-link href="https://gitee.com/organizations/continew/events" target="_blank" rel="noopener">Gitee</a-link>
|
||||
</a-doption>
|
||||
<a-doption>
|
||||
<a-link href="https://gitcode.com/org/continew/discussion" target="_blank" rel="noopener">GitCode</a-link>
|
||||
</a-doption>
|
||||
<a-doption>
|
||||
<a-link href="https://github.com/orgs/continew-org/discussions" target="_blank" rel="noopener">GitHub</a-link>
|
||||
</a-doption>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<a-skeleton v-if="loading" :loading="loading" :animation="true">
|
||||
<a-skeleton-line :rows="10" />
|
||||
</a-skeleton>
|
||||
<div v-else>
|
||||
<a-empty v-if="dataList.length === 0">暂无动态</a-empty>
|
||||
<a-comment
|
||||
v-for="(item, index) in dataList"
|
||||
v-else
|
||||
:key="index"
|
||||
:author="item.actor.nickname"
|
||||
:class="`animated-fade-up-${index}`"
|
||||
>
|
||||
<template #avatar>
|
||||
<a-badge>
|
||||
<template #content>
|
||||
<GiSvgIcon v-if="item.platform === 'GitHub'" name="github" :size="15" />
|
||||
<GiSvgIcon v-else-if="item.platform === 'Gitee'" name="gitee" :size="15" />
|
||||
</template>
|
||||
<a :href="item.actor.url" target="_blank" rel="noopener">
|
||||
<a-avatar :size="30">
|
||||
<img :src="item.actor.avatar" alt="avatar" />
|
||||
</a-avatar>
|
||||
</a>
|
||||
</a-badge>
|
||||
</template>
|
||||
<template #datetime>
|
||||
<span :title="item.createTime">{{ item.createTimeString }}</span>
|
||||
</template>
|
||||
<template #content>
|
||||
<div class="content">
|
||||
<p v-if="item.type === 'PUSH'">
|
||||
推送到了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
{{ `的 ${item.payload.branch} 分支 ${item.payload.commits.length} 个提交` }}
|
||||
<a-comment
|
||||
v-for="(commit, idx) in item.payload.commits"
|
||||
:key="idx"
|
||||
class="commit"
|
||||
>
|
||||
<template #content>
|
||||
<a-link :href="commit.url" target="_blank" rel="noopener" style="font-size: 12px" :title="commit.message">{{ commit.sha.substring(0, 7) }}</a-link>
|
||||
<a :href="commit.url" target="_blank" rel="noopener" :title="commit.message">{{ commit.message }}</a>
|
||||
</template>
|
||||
</a-comment>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'ISSUE_OPEN'">
|
||||
在 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
创建了 Issue <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'ISSUE_CLOSE'">
|
||||
更改了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
的 Issue <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
状态为 {{ item.payload.stateString }}
|
||||
</p>
|
||||
<p v-else-if="item.type === 'ISSUE_COMMENT'">
|
||||
评论了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
的 Issue <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'PULL_REQUEST_OPEN'">
|
||||
在 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
创建了 Pull Request <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'PULL_REQUEST_MERGE'">
|
||||
接受了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
的 Pull Request <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'PULL_REQUEST_CLOSE'">
|
||||
更改了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
的 Pull Request <a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.title }}</a-link>
|
||||
状态为 {{ item.payload.stateString }}
|
||||
</p>
|
||||
<p v-else-if="item.type === 'CREATE'">
|
||||
推送了新的 {{ item.payload.refType }}
|
||||
<a-link :href="item.payload.url" target="_blank" rel="noopener">{{ item.payload.ref }}</a-link>
|
||||
到 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
</p>
|
||||
<p v-else-if="item.type === 'DELETE'">
|
||||
删除了 <a-link :href="item.repo.url" target="_blank" rel="noopener">{{ item.repo.alias }}</a-link>
|
||||
的 {{ item.payload.ref }} {{ item.payload.refType }}
|
||||
</p>
|
||||
<p v-else>暂无</p>
|
||||
</div>
|
||||
</template>
|
||||
</a-comment>
|
||||
</div>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import dayjs from 'dayjs'
|
||||
import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios'
|
||||
import qs from 'query-string'
|
||||
|
||||
dayjs.extend(relativeTime)
|
||||
dayjs.locale('zh-cn')
|
||||
export interface DataItem {
|
||||
type: string
|
||||
actor: {
|
||||
username: string
|
||||
nickname: string
|
||||
avatar: string
|
||||
url: string
|
||||
}
|
||||
repo: {
|
||||
name: string
|
||||
alias: string
|
||||
url: string
|
||||
}
|
||||
payload: object
|
||||
createTime: string
|
||||
createTimeString: string
|
||||
}
|
||||
|
||||
const get = <T = unknown>(url: string, params?: object, config?: AxiosRequestConfig): Promise<ApiRes<T>> => {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios
|
||||
.request<T>({
|
||||
method: 'get',
|
||||
url,
|
||||
params,
|
||||
paramsSerializer: (obj) => {
|
||||
return qs.stringify(obj)
|
||||
},
|
||||
...config,
|
||||
})
|
||||
.then((res: AxiosResponse) => resolve(res.data))
|
||||
.catch((err: { msg: string }) => reject(err))
|
||||
})
|
||||
}
|
||||
|
||||
const dataList = ref<DataItem[]>([])
|
||||
const loading = ref(false)
|
||||
// 查询列表数据
|
||||
const getDataList = async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
const { data } = await get('https://api.charles7c.top/git/orgs/events/continew')
|
||||
data.forEach((item) => {
|
||||
dataList.value.push({
|
||||
...item,
|
||||
createTimeString: dayjs(new Date(item.createTime)).fromNow(),
|
||||
})
|
||||
})
|
||||
} catch (err) {
|
||||
// console.log(err)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getDataList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
:deep(.arco-comment:not(:first-of-type), .arco-comment-inner-comment) {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
:deep(.arco-comment:not(:last-of-type)) {
|
||||
border-bottom: 1px solid var(--color-border-1);
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
:deep(.arco-comment-content) {
|
||||
color: var(--color-text-2);
|
||||
}
|
||||
|
||||
:deep(.arco-comment-datetime) {
|
||||
color: var(--color-text-4);
|
||||
}
|
||||
|
||||
.commit.arco-comment {
|
||||
margin-top: 10px;
|
||||
font-size: 12px;
|
||||
border-bottom: none;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
@@ -24,7 +24,7 @@
|
||||
css: true,
|
||||
}"
|
||||
>
|
||||
{{ item.title }}
|
||||
{{ item.title }}
|
||||
</a-typography-paragraph>
|
||||
</a-link>
|
||||
</div>
|
||||
@@ -68,6 +68,10 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
:deep(.arco-typography) {
|
||||
color: var(--color-text-2);
|
||||
}
|
||||
|
||||
.item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -1,31 +1,45 @@
|
||||
<template>
|
||||
<a-card class="general-card" title="我的项目">
|
||||
<template #extra>
|
||||
<a-link href="https://github.com/charles7c" target="_blank" rel="noopener">更多</a-link>
|
||||
<a-dropdown>
|
||||
<a-link>更多</a-link>
|
||||
<template #content>
|
||||
<a-doption>
|
||||
<a-link href="https://gitee.com/charles7c" target="_blank" rel="noopener">Gitee</a-link>
|
||||
</a-doption>
|
||||
<a-doption>
|
||||
<a-link href="https://gitcode.com/charles_7c" target="_blank" rel="noopener">GitCode</a-link>
|
||||
</a-doption>
|
||||
<a-doption>
|
||||
<a-link href="https://github.com/charles7c" target="_blank" rel="noopener">GitHub</a-link>
|
||||
</a-doption>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
</template>
|
||||
<a-row :gutter="16">
|
||||
<a-row :gutter="[14, 14]">
|
||||
<a-col
|
||||
v-for="(item, index) in list"
|
||||
:key="index"
|
||||
:xs="12"
|
||||
:sm="12"
|
||||
:xs="24"
|
||||
:sm="24"
|
||||
:md="12"
|
||||
:lg="12"
|
||||
:xl="8"
|
||||
:xxl="8"
|
||||
class="my-project-item"
|
||||
>
|
||||
<a-card style="min-height: 204px; max-height: 204px" :bordered="true" hoverable>
|
||||
<a-card :bordered="true" hoverable>
|
||||
<div class="badge badge-right" :style="`background-color: ${item.statusColor}`">{{ item.status }}</div>
|
||||
<a :href="item.url" target="_blank">
|
||||
<a-space direction="vertical">
|
||||
<a-card-meta>
|
||||
<template #title>
|
||||
<a-space>
|
||||
<a-image :src="item.logo" width="30px" alt="logo" />
|
||||
<a-typography-text bold>{{ item.name }}</a-typography-text>
|
||||
<img :src="item.logo" width="35px" height="25px" alt="logo" />
|
||||
<a-typography-text bold>{{ item.alias }}</a-typography-text>
|
||||
</a-space>
|
||||
</template>
|
||||
<template #description>
|
||||
<a-typography-paragraph
|
||||
:ellipsis="{
|
||||
rows: 6,
|
||||
rows: 2,
|
||||
showTooltip: true,
|
||||
css: true,
|
||||
}"
|
||||
@@ -34,8 +48,26 @@
|
||||
{{ item.desc }}
|
||||
</a-typography-text>
|
||||
</a-typography-paragraph>
|
||||
</a-space>
|
||||
</a>
|
||||
</template>
|
||||
<template #avatar>
|
||||
<a-avatar-group :size="32" :max-count="7">
|
||||
<a-avatar
|
||||
v-for="(contributor, idx) in item.contributors"
|
||||
:key="idx"
|
||||
:title="contributor.name"
|
||||
>
|
||||
<img :src="contributor.avatar" alt="avatar" />
|
||||
</a-avatar>
|
||||
</a-avatar-group>
|
||||
</template>
|
||||
</a-card-meta>
|
||||
<template v-if="!loading && item.status !== '孵化'" #actions>
|
||||
<a-tooltip content="点个 Star 吧">
|
||||
<span class="icon-hover">
|
||||
<a :href="item.url" target="_blank" rel="noopener"><IconThumbUp :size="20" /></a>
|
||||
</span>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
@@ -43,68 +75,119 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios'
|
||||
import qs from 'query-string'
|
||||
|
||||
const list = [
|
||||
{
|
||||
name: 'ContiNew Admin',
|
||||
desc: '🔥Almost最佳后端规范🔥持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。当前采用技术栈:Spring Boot3(Java17)、Vue3 & Arco Design、TS、Vite5 、Sa-Token、MyBatisPlus、Redisson、JetCache、Jackson、SpringDoc、Crane4j、Liquibase、Hutool 等。',
|
||||
alias: 'ContiNew Admin',
|
||||
name: 'continew-admin',
|
||||
owner: 'continew-org',
|
||||
desc: '🔥Almost最佳后端规范🔥持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。',
|
||||
logo: 'https://continew.top/logo.svg',
|
||||
url: 'https://gitee.com/continew/continew-admin',
|
||||
url: 'https://gitee.com/continew/continew-admin/stargazers',
|
||||
status: '迭代',
|
||||
statusColor: 'rgb(var(--primary-6))'
|
||||
statusColor: 'rgb(var(--primary-6))',
|
||||
},
|
||||
{
|
||||
name: 'ContiNew Starter',
|
||||
alias: 'ContiNew Starter',
|
||||
name: 'continew-starter',
|
||||
owner: 'continew-org',
|
||||
desc: '🔥高质量Starter🔥包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。',
|
||||
logo: 'https://continew.top/logo.svg',
|
||||
url: 'https://gitee.com/continew/continew-starter',
|
||||
url: 'https://gitee.com/continew/continew-starter/stargazers',
|
||||
status: '迭代',
|
||||
statusColor: 'rgb(var(--primary-6))'
|
||||
statusColor: 'rgb(var(--primary-6))',
|
||||
},
|
||||
{
|
||||
name: 'ContiNew Admin UI',
|
||||
alias: 'ContiNew Admin UI',
|
||||
name: 'continew-admin-ui',
|
||||
owner: 'continew-org',
|
||||
desc: '全新 3.x 版本,基于 Gi Demo 前端模板开发的 ContiNew Admin 前端适配项目。',
|
||||
logo: 'https://continew.top/logo.svg',
|
||||
url: 'https://gitee.com/continew/continew-admin-ui',
|
||||
url: 'https://gitee.com/continew/continew-admin-ui/stargazers',
|
||||
status: '迭代',
|
||||
statusColor: 'rgb(var(--primary-6))'
|
||||
statusColor: 'rgb(var(--primary-6))',
|
||||
},
|
||||
{
|
||||
name: 'ContiNew Admin UI Arco',
|
||||
alias: 'ContiNew Admin UI Arco',
|
||||
name: 'continew-admin-ui-arco',
|
||||
owner: 'continew-org',
|
||||
desc: '2.5 版本,基于 Arco Design Pro 前端模板开发的 ContiNew Admin 前端适配项目。',
|
||||
logo: 'https://continew.top/logo.svg',
|
||||
url: 'https://gitee.com/continew/continew-admin-ui-arco',
|
||||
url: 'https://gitee.com/continew/continew-admin-ui-arco/stargazers',
|
||||
status: '归档',
|
||||
statusColor: 'rgb(var(--warning-6))'
|
||||
statusColor: 'rgb(var(--warning-6))',
|
||||
},
|
||||
{
|
||||
name: 'ContiNew Cloud',
|
||||
desc: 'ContiNew Admin 微服务版本。',
|
||||
alias: 'ContiNew Cloud',
|
||||
name: 'continew-admin',
|
||||
owner: 'continew',
|
||||
desc: 'ContiNew Admin 微服务版本。基于 SpringBoot 3.x、Spring Cloud 2023 & Alibaba。',
|
||||
logo: 'https://continew.top/logo.svg',
|
||||
url: '#',
|
||||
status: '孵化',
|
||||
statusColor: 'rgb(var(--danger-6))'
|
||||
statusColor: 'rgb(var(--danger-6))',
|
||||
},
|
||||
{
|
||||
alias: 'charles7c.github.io',
|
||||
name: 'charles7c.github.io',
|
||||
desc: '基于 VitePress 构建的个人知识库/博客。扩展 VitePress 默认主题:增加ICP备案号、公安备案号显示,增加文章元数据信息(原创标识、作者、发布时间、分类、标签)显示,增加文末版权声明,增加 Gitalk 评论功能,主页美化、自动生成侧边栏、文章内支持 Mermaid 流程图、MD公式、MD脚注、增加我的标签、我的归档等独立页面,以及浏览器滚条等细节优化。查尔斯的个人技术知识库,记录 & 分享个人碎片化、结构化、体系化的技术知识内容。',
|
||||
owner: 'charles7c',
|
||||
desc: '基于 VitePress 构建的个人知识库/博客。扩展 VitePress 默认主题:增加ICP备案号、公安备案号显示,增加文章元数据信息(原创标识、作者、发布时间、分类、标签)显示,增加文末版权声明,增加 Gitalk 评论功能,主页美化、自动生成侧边栏、文章内支持 Mermaid 流程图、MD公式、MD脚注、增加我的标签、我的归档等独立页面,以及浏览器滚条等细节优化。',
|
||||
logo: 'https://blog.charles7c.top/logo.png',
|
||||
url: 'https://github.com/Charles7c/charles7c.github.io',
|
||||
url: 'https://github.com/Charles7c/charles7c.github.io/stargazers',
|
||||
status: '归档',
|
||||
statusColor: 'rgb(var(--warning-6))'
|
||||
}
|
||||
statusColor: 'rgb(var(--warning-6))',
|
||||
},
|
||||
]
|
||||
|
||||
const get = <T = unknown>(url: string, params?: object, config?: AxiosRequestConfig): Promise<ApiRes<T>> => {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios
|
||||
.request<T>({
|
||||
method: 'get',
|
||||
url,
|
||||
params,
|
||||
paramsSerializer: (obj) => {
|
||||
return qs.stringify(obj)
|
||||
},
|
||||
...config,
|
||||
})
|
||||
.then((res: AxiosResponse) => resolve(res.data))
|
||||
.catch((err: { msg: string }) => reject(err))
|
||||
})
|
||||
}
|
||||
|
||||
const loading = ref(false)
|
||||
// 查询数据
|
||||
const getDataList = async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
for (const item of list) {
|
||||
const { data } = await get(`https://api.charles7c.top/git/repos/contributors/${item.owner}/${item.name}`)
|
||||
item.contributors = data
|
||||
}
|
||||
} catch (err) {
|
||||
// console.log(err)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getDataList()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
:deep(.arco-card-body) {
|
||||
min-height: 128px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
.badge {
|
||||
position: absolute;
|
||||
font-size: 12px;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
font-size: 10px;
|
||||
height: 16px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
width: 74px;
|
||||
color: #fff;
|
||||
@@ -115,8 +198,8 @@ const list = [
|
||||
-o-transform: rotate(-45deg);
|
||||
-webkit-transform: rotate(-45deg);
|
||||
transform: rotate(-45deg);
|
||||
left: -18px;
|
||||
top: 9px;
|
||||
left: -20px;
|
||||
top: 6px;
|
||||
}
|
||||
.badge-right {
|
||||
-moz-transform: rotate(45deg);
|
||||
@@ -124,34 +207,29 @@ const list = [
|
||||
-o-transform: rotate(45deg);
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
right: -18px;
|
||||
top: 9px;
|
||||
right: -20px;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
||||
.my-project {
|
||||
&-header {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&-title {
|
||||
margin-top: 0 !important;
|
||||
margin-bottom: 18px !important;
|
||||
}
|
||||
.icon-hover {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
color: rgba(var(--primary-6));
|
||||
border-radius: 50%;
|
||||
transition: all 0.1s;
|
||||
animation: icon-hover-animated 1.2s ease-in-out infinite;
|
||||
}
|
||||
.icon-hover:hover {
|
||||
background-color: rgb(var(--gray-2));
|
||||
}
|
||||
|
||||
&-list {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&-item {
|
||||
// padding-right: 16px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
@keyframes icon-hover-animated {
|
||||
50% {
|
||||
transform: scale(0.8);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -33,7 +33,7 @@ const links = [
|
||||
{ text: '菜单管理', icon: 'menu', path: '/system/menu' },
|
||||
{ text: '文件管理', icon: 'file', path: '/system/file' },
|
||||
{ text: '代码生成', icon: 'code', path: '/tool/generator' },
|
||||
{ text: '系统日志', icon: 'history', path: '/monitor/log' }
|
||||
{ text: '系统日志', icon: 'history', path: '/monitor/log' },
|
||||
]
|
||||
</script>
|
||||
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
<a-card class="card" :bordered="false">
|
||||
<a-row align="center" wrap :gutter="[{ xs: 0, sm: 14, md: 14, lg: 14, xl: 14, xxl: 14 }, 16]" class="content">
|
||||
<a-space size="medium">
|
||||
<a-avatar :size="68">
|
||||
<img :src="userStore.avatar" alt="avatar" />
|
||||
</a-avatar>
|
||||
<Avatar :src="userStore.avatar" :name="userStore.nickname" :size="68" />
|
||||
<div class="welcome">
|
||||
<p class="hello">{{ goodTimeText() }}!{{ userStore.name }}</p>
|
||||
<p class="hello">{{ goodTimeText() }}!{{ userStore.nickname }}</p>
|
||||
<p>北海虽赊,扶摇可接;东隅已逝,桑榆非晚。</p>
|
||||
</div>
|
||||
</a-space>
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
<a-grid-item :span="24">
|
||||
<Project />
|
||||
</a-grid-item>
|
||||
<a-grid-item :span="24">
|
||||
<LatestActivity />
|
||||
</a-grid-item>
|
||||
</a-grid>
|
||||
</div>
|
||||
</div>
|
||||
@@ -36,6 +39,7 @@
|
||||
<script setup lang="ts">
|
||||
import Welcome from './components/Welcome.vue'
|
||||
import Project from './components/Project.vue'
|
||||
import LatestActivity from './components/LatestActivity.vue'
|
||||
import QuickOperation from './components/QuickOperation.vue'
|
||||
import Carousel from './components/Carousel.vue'
|
||||
import Notice from './components/Notice.vue'
|
||||
|
||||
Reference in New Issue
Block a user