diff --git a/src/components/admin/MainWrapper.vue b/src/components/admin/MainWrapper.vue index 78a44a6..208efeb 100644 --- a/src/components/admin/MainWrapper.vue +++ b/src/components/admin/MainWrapper.vue @@ -7,7 +7,7 @@ {{ state.name }} + :inline-collapsed="state.collapsed" :items="items" style="border-inline-end: none;" @click="menuItemclick">
@@ -59,7 +59,7 @@ const items = reactive([ { key: '1', icon: () => h(DashboardOutlined), - label: h('a',{href:"/admin/dashboard"},'仪表盘'), + label: "仪表盘", title: '仪表盘', url: '/admin/dashboard' }, diff --git a/src/components/blogs/HomePage.vue b/src/components/blogs/HomePage.vue index f09500c..71c1d7f 100644 --- a/src/components/blogs/HomePage.vue +++ b/src/components/blogs/HomePage.vue @@ -53,9 +53,10 @@
- {{ - linkbutton.linktext - }} + {{ + linkbutton.linktext + }}
@@ -116,7 +117,10 @@ import 'APlayer/dist/APlayer.min.css'; import APlayer from 'APlayer'; import { createEcharts } from "@/hooks/intex" import { useRouter, useRoute } from 'vue-router'; -import iconComponents from "@/assets/index" +import iconComponents from "@/assets/index"; +import { get } from "@/tools/request"; +import { number } from 'echarts'; + const router = useRouter() const route = useRoute() @@ -191,7 +195,7 @@ const items = ref([ title: '关于sunfree', }, ]); -const updateCarouselVisibility = (routeName:any) => { +const updateCarouselVisibility = (routeName: any) => { handleScrollEnabled.value = false; if (scrollbar.value) { scrollbar.value.scrollTop = 0; @@ -252,24 +256,29 @@ const downScroll = () => { // 折叠面板 const activeKey = ref(['']); const customStyle = 'background: #F5F5F5;border-radius: 4px;margin-bottom: 12px;border: 0;overflow: hidden'; -const panels = reactive([ - { - id: "1", - header: "内容1", - text: "内容1" - }, - { - id: "2", - header: "内容2", - text: "内容2" - }, - { - id: "3", - header: "内容3", - text: "内容3" +interface panelList { + id: number, + header: string, + text: string +} +const panels = ref([]) +const panelData = async () => { + try { + const response = await get("/classtic/list"); + if (response) { + panels.value = response.data.data.map((item: any) => ({ + id: item.id, + header: item.header, + text: item.TEXT, + })); + } else { + console.error("Response data structure is not as expected:"); + } + } catch (error) { + console.error("Failed to fetch data", error); } -] -) +} +// console.log(panels) // 社交按钮 const buttons = ref([ { icon: iconComponents.CravatarLined, url: 'https://cravatar.cn/' }, @@ -282,25 +291,36 @@ const handleClick = (url: string) => { window.open(url) } // 链接按钮 -const linkbuttons = reactive([ - { - id: "1", - linktext: "测试" - }, - { - id: "2", - linktext: "开发" - }, - { - id: "3", - linktext: "运营" - }, - { - id: "4", - linktext: "实施" +interface comlinkList { + id: number, + linktext: string, + linkurl: string +} +const linkbuttons = ref([]) +const comLinkData = async () => { + try { + const response = await get("/comlink/list"); + if (response) { + linkbuttons.value = response.data.data.map((items: any) => ({ + id: items.id, + linktext: items.linktext, + linkurl: items.linkurl + })) + } else { + console.log("response data is not exist") + } + } catch (error) { + console.error("Failed to fetch data", error); } -]) +} +const comLinkClick = (url: string) => { + if (url.startsWith('http://') || url.startsWith('https://')) { + window.open (url,"_blank"); // 使用 window.location.href 打开外部链接 + } else { + router.push(url); // 否则使用 Vue Router 的 push 方法导航 + } +} /** * 右侧栏 */ @@ -347,11 +367,11 @@ function generateDates(numDays: number) { } return dates; } -const writList=[5,4,3,2,1,0] -writList.forEach((item,index)=>{ +const writList = [5, 4, 3, 2, 1, 0] +writList.forEach((item, index) => { data[index].writCount = item; }) -const formattedData = newData.map((value:any, index:number) => [index % 15, Math.floor(index / 15), value.writCount]); +const formattedData = newData.map((value: any, index: number) => [index % 15, Math.floor(index / 15), value.writCount]); const heatMapData = { tooltip: { position: 'top', @@ -424,6 +444,9 @@ const random = ref(); onMounted(() => { + scrollbar.value = document.querySelector('.simplebar-content-wrapper'); + panelData() + comLinkData() nextTick(() => { const authorElement = document.querySelector('.author'); if (authorElement) { @@ -485,7 +508,8 @@ onMounted(() => { } }); createEcharts(heat, heatMapData); - scrollbar.value = document.querySelector('.simplebar-content-wrapper'); + + }) watch( () => route.name, diff --git a/src/components/blogs/ceshi.vue b/src/components/blogs/ceshi.vue index e0ef29d..f142ba1 100644 --- a/src/components/blogs/ceshi.vue +++ b/src/components/blogs/ceshi.vue @@ -1,65 +1,11 @@ - - + + \ No newline at end of file diff --git a/src/router/admin.ts b/src/router/admin.ts index 5d98b9d..ce16991 100644 --- a/src/router/admin.ts +++ b/src/router/admin.ts @@ -10,6 +10,11 @@ const adminRoute:Array=[ path:"dashboard", name:"dashboard", component:()=>import("@/views/admin/DashBoardView.vue") + }, + { + path:"blogmanage", + name:"blogmanage", + component:()=>import("@/views/admin/blogmange/BlogManageView.vue") } ] diff --git a/src/router/blog.ts b/src/router/blog.ts index 196a8a8..65be12c 100644 --- a/src/router/blog.ts +++ b/src/router/blog.ts @@ -15,7 +15,7 @@ const blogRoute:Array=[ { path:"/blog", name:"blog", - component:()=>import("@/views/blog/BlogContentView.vue") + component:()=>import("@/views/blog/blogcontent/BlogListView.vue") }, { path:"/diary", @@ -47,7 +47,7 @@ const blogRoute:Array=[ { path:"/wechatcode", name:"wechatcode", - component:()=>import("@/components/blogs/WechatCode.vue"), + component:()=>import("@/components/blogs/WeChatCode.vue"), }, ] export default blogRoute diff --git a/src/stores/blog.ts b/src/stores/blog.ts new file mode 100644 index 0000000..9c86768 --- /dev/null +++ b/src/stores/blog.ts @@ -0,0 +1,48 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' +import { get } from "@/tools/request" +import dayjs from 'dayjs'; + +export const blogContentStore = defineStore("blog", () => { + interface blogInterface { + key:string, + id: number, + blogtitle: string, + create_at: Date, + readnum: number, + readminite: number, + wordcount: number, + img: string, + blogcontent: string, + typename: string, + labelname: string + } + const bloglist = ref([]) + async function blogList() { + try { + const response = await get("/blogs/list"); + if (response) { + bloglist.value = response.data.data.map((items: any,index:any) => ({ + key: (index + 1).toString(), + id: items.id, + blogtitle: items.blogtitle, + create_at: dayjs(items.create_at).format('YYYY-MM-DD HH:mm:ss'), + update_at: dayjs(items.update_at).format('YYYY-MM-DD HH:mm:ss'), + readnum: items.readnum, + readminite: items.readminite, + wordcount: items.wordcount, + img: items.img, + blogcontent: items.blogcontent, + typename: items.typename, + labelname: items.labelname + })) + } else { + console.log("bloglist is not exits") + } + } catch (error) { + console.log("bloglist is error") + } + + } + return { blogList, bloglist } +}) \ No newline at end of file diff --git a/src/stores/counter.ts b/src/stores/counter.ts index b6757ba..7a72d1f 100644 --- a/src/stores/counter.ts +++ b/src/stores/counter.ts @@ -10,3 +10,4 @@ export const useCounterStore = defineStore('counter', () => { return { count, doubleCount, increment } }) + diff --git a/src/views/admin/blogmange/BlogFormView.vue b/src/views/admin/blogmange/BlogFormView.vue new file mode 100644 index 0000000..c1f1680 --- /dev/null +++ b/src/views/admin/blogmange/BlogFormView.vue @@ -0,0 +1,138 @@ + + + + + \ No newline at end of file diff --git a/src/views/admin/blogmange/BlogManageView.vue b/src/views/admin/blogmange/BlogManageView.vue new file mode 100644 index 0000000..e92a2ec --- /dev/null +++ b/src/views/admin/blogmange/BlogManageView.vue @@ -0,0 +1,188 @@ + + + + + \ No newline at end of file diff --git a/src/views/blog/blogcontent/BlogDetailView.vue b/src/views/blog/blogcontent/BlogDetailView.vue new file mode 100644 index 0000000..8c7c3ac --- /dev/null +++ b/src/views/blog/blogcontent/BlogDetailView.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/views/blog/BlogContentView.vue b/src/views/blog/blogcontent/BlogListView.vue similarity index 76% rename from src/views/blog/BlogContentView.vue rename to src/views/blog/blogcontent/BlogListView.vue index 61bf6db..d124e8f 100644 --- a/src/views/blog/BlogContentView.vue +++ b/src/views/blog/blogcontent/BlogListView.vue @@ -1,42 +1,42 @@ - +