Commit 8e1b042a by lijiabin

【需求 17679】 perf: 继续优化类型

parent b034b191
......@@ -12,3 +12,6 @@ declare module 'vue' {
dayjs: typeof dayjs
}
}
// src/types/wangeditor.d.ts
declare module '@wangeditor/editor-for-vue' {}
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
/>
</svg>
</template>
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
<path
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
/>
</svg>
</template>
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
<path
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
/>
</svg>
</template>
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
/>
</svg>
</template>
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
role="img"
class="iconify iconify--mdi"
width="24"
height="24"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 24 24"
>
<path
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
fill="currentColor"
></path>
</svg>
</template>
......@@ -24,9 +24,9 @@ export const app_config: { [key: string]: IConfig } = {
// 开发环境
development: {
// baseUrl: 'http://culture.yswg.com.cn:8089', // 线上测试机
baseUrl: 'http://culture.yswg.com.cn:8089', // 线上测试机
// baseUrl: 'http://192.168.2.168:8089', // 立鹏本地/
baseUrl: 'http://192.168.2.55:8089', // 首拥本地
// baseUrl: 'http://192.168.2.55:8089', // 首拥本地
loginType: 1,
wxRedirect: '',
},
......
......@@ -6,7 +6,6 @@ export enum ArticleTypeEnum {
COLUMN = 'column', // 专栏
PRACTICE = 'practice', // 实践
INTERVIEW = 'interview', // 专访
LONG_ARTICLE = 'longArticle', // 长文章
}
// 发布状态枚举
......
......@@ -7,7 +7,7 @@ export const useHintAnimation = (
el: MaybeRef<HTMLElement | null>,
{ classes = [], duration = 200 }: UseHintAnimationOptions = {},
) => {
let timer: number | null = null
let timer: NodeJS.Timeout | null = null
const triggerAnimation = () => {
const dom = unref(el)
if (!dom) return
......
......@@ -41,10 +41,24 @@ import type { Component } from 'vue'
import { addOrUpdateArticle, addOrUpdatePractice } from '@/api'
import { ArticleTypeEnum, ReleaseStatusTypeEnum } from '@/constants'
import LoadingComponent from '@/components/common/LoadingComponent/index.vue'
const typeMap: Record<
ArticleTypeEnum,
{ title: string; component: Component; api?: (data: any) => Promise<any> }
> = {
interface ApiMap {
[ArticleTypeEnum.VIDEO]: typeof addOrUpdateArticle
[ArticleTypeEnum.QUESTION]: typeof addOrUpdateArticle
[ArticleTypeEnum.POST]: typeof addOrUpdateArticle
[ArticleTypeEnum.PRACTICE]: typeof addOrUpdatePractice
[ArticleTypeEnum.COLUMN]: typeof addOrUpdateArticle
[ArticleTypeEnum.INTERVIEW]: typeof addOrUpdateArticle
}
interface TypeConfig<T extends ArticleTypeEnum> {
title: string
component: Component
api?: ApiMap[T]
}
const typeMap: {
[key in ArticleTypeEnum]: TypeConfig<key>
} = {
[ArticleTypeEnum.VIDEO]: {
title: '视频',
component: defineAsyncComponent({
......@@ -148,7 +162,7 @@ const handleClosed = () => {
const handleSubmit = async (releaseStatus: ReleaseStatusTypeEnum) => {
loading.value = true
try {
const formData = await formComponentRef.value?.getValidatedFormData(releaseStatus)
const formData = (await formComponentRef.value?.getValidatedFormData(releaseStatus)) as any
if (!formData) return
console.log(formData)
await typeMap[articleType.value].api?.({
......
import type { Router } from 'vue-router'
import { saveScrollPosition } from './scrollStorage'
import { parseCode, parseIsCodeLogin, parseIsCutEmail } from '@/utils/wxUtil'
import { parseCode } from '@/utils/wxUtil'
import { useUserStore } from '@/stores'
// 白名单
......@@ -9,8 +9,8 @@ const WHITE_LIST: string[] = ['/aa']
export function registerRouterGuards(router: Router) {
router.beforeEach(async (to, from) => {
console.log('to', to)
console.log('from', from)
// console.log('to', to)
// console.log('from', from)
// 保存当前页面的滚动位置
if (from.fullPath) {
saveScrollPosition(from.fullPath, window.scrollY)
......@@ -27,32 +27,17 @@ export function registerRouterGuards(router: Router) {
// console.log(code, isCodeLogin, cutEmail)
const userStore = useUserStore()
if (code) {
console.log('code', code)
// console.log('code', code)
await userStore.getUserInfoByCode({
code,
isCodeLogin: 0,
})
// 去除url里面的code 重定向 path 不能重定向首页 因为有消息推送
return {
path: to.path, // 重定向到首页 去除code 重定向到首页 没有code 不会进入到这里了
path: to.path,
replace: true,
}
}
// else if (
// to.fullPath.includes('/homePage/askTab#tabsRef?t=') &&
// !from.fullPath.includes('/homePage')
// ) {
// return {
// path: to.path,
// // replace: true,
// }
// }
else {
} else {
return true
}
})
// router.afterEach((to, from) => {
// console.log('afterEach to', to)
// console.log('afterEach from', from)
// })
}
......@@ -6,41 +6,9 @@ import { constantsRoute } from './route'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: constantsRoute,
// scrollBehavior(to, from, savedPosition) {
// return new Promise((resolve) => {
// // console.log(to, from, savedPosition)
// // 如果有浏览器保存的位置(前进/后退),优先使用
// if (savedPosition) {
// resolve(savedPosition)
// return
// }
// // 如果有锚点,滚动到锚点
// if (to.hash) {
// resolve({ el: to.hash })
// return
// }
// // 检查是否有保存的滚动位置
// const savedScrollY = scrollPositionMap.get(to.fullPath)
// if (savedScrollY !== undefined) {
// resolve({ top: savedScrollY })
// return
// }
// // 默认滚动到顶部
// resolve({ top: 0 })
// })
// },
scrollBehavior,
})
// 在路由离开前保存当前滚动位置
// router.beforeEach((to, from, next) => {
// // 保存当前页面的滚动位置
// if (from.fullPath) {
// scrollPositionMap.set(from.fullPath, window.scrollY)
// }
// next()
// })
registerRouterGuards(router)
export default router
......@@ -177,23 +177,6 @@ export const constantsRoute = [
name: 'CulturePublishLongArticle',
component: () => import('@/views/publishLongArticle/index.vue'),
},
// 发布文章
// {
// {
// path: 'deshboard',
// name: 'CultureHome',
// component: () => import('@/views/home/index.vue')
// },
// {
// path: 'ya',
// name: 'CultureYa',
// component: () => import('@/views/ya/index.vue')
// },
// {
// path: 'ask',
// name: 'CultureAsk',
// component: () => import('@/views/ask/index.vue')
// }
],
},
{
......
......@@ -28,9 +28,15 @@
@click="handleBackUser"
>返回个人账号</el-button
>
<!-- v-if="userInfo.isAdmin || userInfo.isOfficialAccount" -->
<el-button type="primary" plain size="small" @click="handleAdmin">后台管理</el-button>
<el-button
v-if="userInfo.isAdmin || userInfo.isOfficialAccount"
type="primary"
plain
size="small"
@click="handleAdmin"
>后台管理</el-button
>
</div>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment