add profile function

This commit is contained in:
simple321vip
2023-04-03 21:37:44 +08:00
parent ad0234fc45
commit c0a8a9cd95
6 changed files with 193 additions and 3 deletions
+55
View File
@@ -0,0 +1,55 @@
import { service } from '../utils/request'
const headers = {
'Content-Type': 'application/json;charsetset=UTF-8'
}
const create_profile = (data: Object) => {
return service({
url: '/wiki/api/v1/author/profile',
method: 'POST',
data: data
})
}
const update_profile = (data: Object) => {
return service({
url: '/wiki/api/v1/author/profile',
method: 'PUT',
data: data
})
}
const get_profile = () => {
return service({
url: '/wiki/api/v1/author/profile',
method: 'GET',
headers: headers
})
}
const get_profileName = () => {
return service({
url: '/wiki/api/v1/author/profile/name',
method: 'GET',
headers: headers
})
}
const judge_profile = (data: Object) => {
return service({
url: '/wiki/api/v1/author/profile/judge',
method: 'POST',
data: data
})
}
export {
create_profile,
get_profile,
update_profile,
get_profileName,
judge_profile
}
+3
View File
@@ -22,6 +22,9 @@ router.beforeEach((to, from, next) => {
if (url.search("write") != -1) {
next('/BlogEditer')
}
if (url.search("profile") != -1) {
next('/ProfileEditer')
}
if (url.search("view") != -1) {
let arr = url.split('?')
let bid = arr[1].split('=')[1]
+4
View File
@@ -95,6 +95,10 @@ const routes: Array<RouteRecordRaw> = [
path: "/BlogEditer",
component: () => import('@/view/blog/createBlog.vue'),
},
{
path: "/ProfileEditer",
component: () => import('@/view/dashboard/editProfile.vue'),
},
{
path: "/BlogViewer",
component: () => import('@/view/blog/mdview.vue'),
+4 -1
View File
@@ -7,13 +7,15 @@ export const settingsStore = defineStore('settings', () => {
sideMode: '#191a23',
isMobile: false,
isRouterAlive: true,
isLoading: false
isLoading: false,
profileName: null,
})
const sideMode = computed(() => settings.value.sideMode)
const isMobile = computed(() => settings.value.isMobile)
const isRouterAlive = computed(() => settings.value.isRouterAlive)
const isLoading = computed(() => settings.value.isLoading)
const profileName = computed(() => settings.value.profileName)
return {
settings,
@@ -21,6 +23,7 @@ export const settingsStore = defineStore('settings', () => {
isMobile,
isRouterAlive,
isLoading,
profileName,
}
})
+44
View File
@@ -0,0 +1,44 @@
<template>
<md-editor v-model="content" @save="onUpdateContent" />
</template>
<script setup lang="ts">
import MdEditor from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import { ref } from 'vue';
import { useRoute } from 'vue-router'
import {
get_profile,
update_profile
} from '../../api/profile'
let content = ref<string>('')
let lastUpdateDatetime = ref<string>('')
const route = useRoute()
const params = route.query
const onUpdateContent = async () => {
await update_profile({ content: content.value }).then(resp => {
lastUpdateDatetime.value = resp.data.updateDatetime
}).catch(() => {
})
}
const onGetProfile = async () => {
await get_profile().then(resp => {
content.value = resp.data.content
lastUpdateDatetime.value = resp.data.updateDatetime
}).catch(() => {
})
}
onGetProfile()
</script>
<style></style>
+83 -2
View File
@@ -97,26 +97,61 @@
</div>
</div>
</div>
<!-- create blogtype dialog -->
<el-dialog v-model="profileNameCreateDialogVisible" title="发现主人还没有创建新的wiki个人主页, 来创建吧" width="30%"
@close="onCloseProfileDialog">
Profile name:
<el-autocomplete v-model="profileName" :fetch-suggestions="querySearchAsync" />
<el-input v-model="profileName">
</el-input>
<el-descriptions title="你的 wiki 主页将为">
<el-icon>
<Link />
</el-icon>
<el-descriptions-item>https://www.violin-home.cn/docs#/{{ profileName ? profileName : profileNameText
}}/</el-descriptions-item>
<!-- <el-descriptions-item label="Remarks">
<el-tag size="small">School</el-tag>
</el-descriptions-item>
<el-descriptions-item label="Address">No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu
Province</el-descriptions-item> -->
</el-descriptions>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCloseProfileDialog">取消</el-button>
<el-button type="primary" @click="onCreateProfile">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import $moment from "moment"
import { Link } from "@element-plus/icons-vue"
import EchartsLine from '@/view/dashboard/dashboardCharts/index.vue'
import DashboardTable from '@/view/dashboard/dashboardTable/index.vue'
import { useRouter } from 'vue-router'
import { useWeatherInfo } from '@/service/weather'
import { countWiki } from "@/api/blog"
import { bookmarks_count } from "@/api/bookmark"
import { get_profileName, create_profile, judge_profile } from "@/api/profile"
import { settingsStore } from "@/store/modules/settings"
// -- IMPORT --
const weatherInfo = useWeatherInfo()
const router = useRouter()
const useSettingsStore = settingsStore()
// -- REACTIVE OBJECT --
// -- REF OBJECT --
let time = ref<String>($moment().format("YYYY年MM月DD日 HH:mm:ss"));
const profileNameCreateDialogVisible = ref(false)
const profileName = ref<string>()
const profileNameText = ref<string>("{Profile name}")
const statistics = ref({
wiki_count: 0,
@@ -153,9 +188,9 @@ const toolCards = ref([
bg: 'rgba(255, 214, 102,.3)'
},
{
label: '表单生成器',
label: 'wiki主页编辑',
icon: 'document-checked',
name: 'formCreate',
name: 'profile',
color: '#ff85c0',
bg: 'rgba(255, 133, 192,.3)'
},
@@ -185,7 +220,48 @@ const toTarget = (name: string) => {
case 'scrum':
window.open('https://www.leangoo.com/kanban/board_list?#/home/list', '_blank')
break;
case 'profile':
if (useSettingsStore.settings.profileName) {
openTag()
break;
}
profileNameCreateDialogVisible.value = true
break;
}
}
const onCreateProfile = async () => {
if (!profileName.value) {
return
}
await create_profile({ name: profileName.value }).then(() => {
openTag()
}).finally(() => {
profileNameCreateDialogVisible.value = false
})
}
const openTag = () => {
const { href } = router.resolve({
path: '/profile/'
})
window.open(href, '_blank')
}
const querySearchAsync = async (queryString: string, cb: any) => {
judge_profile({ name: profileName.value }).then(() => {
}).then(e => {
})
}
const onCloseProfileDialog = () => {
profileName.value = ""
profileNameCreateDialogVisible.value = false
}
/**
@@ -203,6 +279,11 @@ bookmarks_count().then((resp) => {
const data = resp.data
statistics.value.bookmark_count = data.count
})
get_profileName().then((resp) => {
if (resp.data) {
useSettingsStore.settings.profileName = resp.data.name
}
})
</script>