Browse Source

add new

master
sunfree 9 months ago
parent
commit
c267fa3f59
  1. 22
      src/api/admin.ts
  2. 22
      src/api/blog.ts
  3. 59
      src/components/blogs/ceshi.vue
  4. 27
      src/stores/index.ts
  5. 20
      src/views/admin/blogmange/BlogFormView.vue
  6. 51
      src/views/admin/classticmanage/ClassticManageView.vue

22
src/api/admin.ts

@ -0,0 +1,22 @@
// 博客管理
export interface blogInterface {
key: string,
blogtitle: string,
create_at: Date,
readnum: number,
readminite: number,
wordcount: number,
img: string,
blogcontent: string,
typename: string,
labelnames: string
}
// 语录管理
export interface classticInterface {
key:string,
id?:number,
header: string,
text: string,
descr: string
}

22
src/api/blog.ts

@ -1,22 +0,0 @@
// 博客管理
export interface blogInterface {
key: string,
blogtitle: string,
create_at: Date,
readnum: number,
readminite: number,
wordcount: number,
img: string,
blogcontent: string,
typename: string,
labelnames: string
}
// 语录管理
export interface classticInterface {
key:string,
id:number,
header: string,
text: string,
descr: string
}

59
src/components/blogs/ceshi.vue

@ -1,13 +1,58 @@
<template>
<v-md-editor v-model="text" height="400px"></v-md-editor>
<a-form
:model="formState"
name="basic"
:label-col="{ span: 8 }"
:wrapper-col="{ span: 16 }"
autocomplete="off"
@finish="onFinish"
@finishFailed="onFinishFailed"
>
<a-form-item
label="Username"
name="username"
:rules="[{ required: true, message: 'Please input your username!' }]"
>
<a-input v-model:value="formState.username" />
</a-form-item>
<a-form-item
label="Password"
name="password"
:rules="[{ required: true, message: 'Please input your password!' }]"
>
<a-input-password v-model:value="formState.password" />
</a-form-item>
<a-form-item name="remember" :wrapper-col="{ offset: 8, span: 16 }">
<a-checkbox v-model:checked="formState.remember">Remember me</a-checkbox>
</a-form-item>
<a-form-item :wrapper-col="{ offset: 8, span: 16 }">
<a-button type="primary" html-type="submit">Submit</a-button>
</a-form-item>
</a-form>
</template>
<script lang="ts" setup>
import { reactive } from 'vue';
<script>
export default {
data() {
return {
text: `<h1 align="center">Markdown Editor built on Vue</h1>`,
interface FormState {
username: string;
password: string;
remember: boolean;
}
const formState = reactive<FormState>({
username: '',
password: '',
remember: true,
});
const onFinish = (values: any) => {
console.log('Success:', values);
};
},
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
</script>

27
src/stores/index.ts

@ -1,15 +1,20 @@
import { reactive, ref } from 'vue'
import { defineStore } from 'pinia'
import { get } from "@/tools/request"
import { get, post, put } from "@/tools/request"
import dayjs from 'dayjs';
import { useRouter } from "vue-router"
import type { blogInterface,classticInterface } from '@/api/blog';
import type { blogInterface, classticInterface } from '@/api/admin';
const router = useRouter()
// 博客列表
const bloglist = ref<blogInterface[]>([])
// 语录列表
const classticlist = ref<classticInterface[]>([])
// 语录新增
const classticadd=reactive({
header:"",
text:"",
descr:""
})
export const useAuthStore = defineStore("auth", () => {
const tokenValue = ref("")
@ -46,7 +51,7 @@ export const classticContentStore = defineStore("classtic", () => {
}
return { classticlist, classticList }
})
// 语录查询接口
export const classticSearchStore = defineStore("chassticsearch", () => {
const searchValue = reactive({
title: ""
@ -74,6 +79,20 @@ export const classticSearchStore=defineStore("chassticsearch",()=>{
}
return { classticSearch, searchValue }
})
// 语录新增/编辑接口
export const classticAddStore=defineStore("classticadd",()=>{
const onSubmit=async ()=>{
await post("/classtics/add",
{
header:classticadd.header,
text:classticadd.text,
descr:classticadd.descr
}
)
}
return {onSubmit,classticadd}
})
// 链接接口
export const comLinkContentStore = defineStore("comlink", () => {

20
src/views/admin/blogmange/BlogFormView.vue

@ -33,9 +33,8 @@ import { ref, onMounted, reactive } from 'vue';
import type { UnwrapRef } from 'vue';
import type { Rule } from 'ant-design-vue/es/form';
import { post, get, put } from '@/tools/request';
import { useRouter, useRoute } from 'vue-router'
import { useRouter } from 'vue-router'
const router = useRouter()
const route = useRoute()
interface FormState {
id?: number;
blogtitle: string;
@ -75,23 +74,6 @@ onMounted(async () => {
...items
}))
})
const { id } = route.params
if (id) {
get(`/blogs/list/search/${id}`).then(response => {
const blog = response.data.data;
//
formState.id = blog.id;
formState.blogtitle = blog.blogtitle;
formState.typeid = blog.typeid;
formState.blogcontent = blog.blogcontent;
formState.descr = blog.descr;
// Vditor
console.log(blog.id)
if (blog.id) {
content.value=blog.blogcontent;
}
})
}
});
const onSubmit = () => {
formRef.value

51
src/views/admin/classticmanage/ClassticManageView.vue

@ -8,19 +8,19 @@
<a-button @click="classticSearch.classticSearch">查询</a-button>
<a-button type="primary" ghost @click="modal('add')">新增</a-button>
<a-modal v-model:open="addModal.addOpen" ok-text="确认" cancel-text="取消" :title="addModal.addTitle"
@ok="handleOk">
<a-form :model="formState" name="basic">
<a-form-item label="语录标题" name="classticname"
:rules="[{ required: true, message: '请输入语录标题' }]" v-bind="formItemLayout">
<a-input v-model:value="formState.name" />
@ok="classticAdd.onSubmit">
<a-form :model="classticAdd.classticadd" name="basic">
<a-form-item label="语录标题" name="classticname" :rules="[{ required: true, message: '请输入语录标题' }]"
v-bind="formItemLayout">
<a-input v-model:value="classticAdd.classticadd.header" />
</a-form-item>
<a-form-item label="语录内容" name="classticcontent"
:rules="[{ required: true, message: '请输入语录内容' }]" v-bind="formItemLayout">
<a-input v-model:value="formState.name" />
<a-input v-model:value="classticAdd.classticadd.text" />
</a-form-item>
<a-form-item label="备注" name="classticdescr"
:rules="[{ message: '请输入备注' }]" v-bind="formItemLayout">
<a-textarea v-model:value="formState.name" />
<a-form-item label="备注" name="classticdescr" :rules="[{ message: '请输入备注' }]"
v-bind="formItemLayout">
<a-textarea v-model:value="classticAdd.classticadd.descr" />
</a-form-item>
</a-form>
</a-modal>
@ -52,9 +52,11 @@
import { ref, reactive, onMounted } from 'vue';
import { useRouter } from "vue-router"
const router = useRouter()
import { classticContentStore,classticSearchStore } from "@/stores"
import { classticAddStore, classticContentStore, classticSearchStore } from "@/stores"
import { put, post } from "@/tools/request"
const classticContent = classticContentStore()
const classticSearch = classticSearchStore()
const classticAdd=classticAddStore()
const formItemLayout = {
labelCol: { span: 4, offset: 2 },
wrapperCol: { span: 16 },
@ -73,36 +75,8 @@ const modal = (mode: string) => {
}
addModal.addOpen = true;
}
const addhandleOk = () => {
addOpen.value = true;
};
const edithandleOk = () => {
// Logic for editing
console.log('Edit logic here');
}
const handleOk = () => {
if (addModal.modalMode === 'add') {
// Handle add action
addhandleOk();
} else if (addModal.modalMode === 'edit') {
// Handle edit action
edithandleOk();
}
addModal.addOpen = false;
}
interface FormState {
name: string,
content: string,
descr: string
}
const formState = reactive<FormState>({
name: '',
content: '',
descr: ''
});
const deleteOpen = ref<boolean>(false);
@ -128,7 +102,6 @@ const blogAdd = function () {
//
onMounted(async () => {
classticContent.classticList()
});
const columns = [
{

Loading…
Cancel
Save