chore: pnpm eslint . --fix

This commit is contained in:
pany 2024-11-19 13:46:35 +08:00
parent 28ed4c0977
commit d47428ccc7
15 changed files with 39 additions and 46 deletions

View File

@ -22,6 +22,7 @@ export default antfu(
rules: {
// vue
"vue/block-order": ["error", { order: ["script", "template", "style"] }],
"vue/attributes-order": "off",
// ts
"ts/no-use-before-define": "off",
// node

View File

@ -10,7 +10,7 @@ const props = defineProps<Props>()
<template>
<el-empty v-if="props.list.length === 0" />
<el-card v-for="(item, index) in props.list" v-else :key="index" shadow="never" class="card-container">
<el-card v-else v-for="(item, index) in props.list" :key="index" shadow="never" class="card-container">
<template #header>
<div class="card-header">
<div>

View File

@ -1,9 +1,10 @@
<script lang="ts" setup>
import type { ElScrollbar } from "element-plus"
import type { RouteRecordName, RouteRecordRaw } from "vue-router"
import { useDevice } from "@/hooks/useDevice"
import { usePermissionStore } from "@/store/modules/permission"
import { isExternal } from "@/utils/validate"
import { ElMessage, ElScrollbar } from "element-plus"
import { ElMessage } from "element-plus"
import { cloneDeep, debounce } from "lodash-es"
import { computed, ref, shallowRef } from "vue"
import { useRouter } from "vue-router"
@ -171,7 +172,7 @@ function handleReleaseUpOrDown() {
<el-empty v-if="resultList.length === 0" description="暂无搜索结果" :image-size="100" />
<template v-else>
<p>搜索结果</p>
<ElScrollbar ref="scrollbarRef" max-height="40vh" always>
<el-scrollbar ref="scrollbarRef" max-height="40vh" always>
<SearchResult
ref="searchResultRef"
v-model="activeRouteName"
@ -179,7 +180,7 @@ function handleReleaseUpOrDown() {
:is-press-up-or-down="isPressUpOrDown"
@click="handleEnter"
/>
</ElScrollbar>
</el-scrollbar>
</template>
<template #footer>
<SearchFooter :total="resultList.length" />

View File

@ -74,7 +74,7 @@ defineExpose({ getScrollTop })
@mouseenter="handleMouseenter(item)"
>
<SvgIcon v-if="item.meta?.svgIcon" :name="item.meta.svgIcon" />
<component :is="item.meta.elIcon" v-else-if="item.meta?.elIcon" class="el-icon" />
<component v-else-if="item.meta?.elIcon" :is="item.meta.elIcon" class="el-icon" />
<span class="result-item-title">
{{ item.meta?.title }}
</span>

View File

@ -1,4 +1,5 @@
import { ElLoading, type LoadingOptions } from "element-plus"
import type { LoadingOptions } from "element-plus"
import { ElLoading } from "element-plus"
const defaultOptions = {
lock: true,

View File

@ -1,5 +1,6 @@
import type { Ref } from "vue"
import { debounce } from "lodash-es"
import { onBeforeUnmount, type Ref, ref } from "vue"
import { onBeforeUnmount, ref } from "vue"
interface Observer {
watermarkElMutationObserver?: MutationObserver

View File

@ -58,7 +58,7 @@ function resolvePath(routePath: string) {
<SidebarItemLink v-if="theOnlyOneChild.meta" :to="resolvePath(theOnlyOneChild.path)">
<el-menu-item :index="resolvePath(theOnlyOneChild.path)">
<SvgIcon v-if="theOnlyOneChild.meta.svgIcon" :name="theOnlyOneChild.meta.svgIcon" />
<component :is="theOnlyOneChild.meta.elIcon" v-else-if="theOnlyOneChild.meta.elIcon" class="el-icon" />
<component v-else-if="theOnlyOneChild.meta.elIcon" :is="theOnlyOneChild.meta.elIcon" class="el-icon" />
<template v-if="theOnlyOneChild.meta.title" #title>
{{ theOnlyOneChild.meta.title }}
</template>
@ -68,7 +68,7 @@ function resolvePath(routePath: string) {
<el-sub-menu v-else :index="resolvePath(props.item.path)" teleported>
<template #title>
<SvgIcon v-if="props.item.meta?.svgIcon" :name="props.item.meta.svgIcon" />
<component :is="props.item.meta.elIcon" v-else-if="props.item.meta?.elIcon" class="el-icon" />
<component v-else-if="props.item.meta?.elIcon" :is="props.item.meta.elIcon" class="el-icon" />
<span v-if="props.item.meta?.title">{{ props.item.meta.title }}</span>
</template>
<template v-if="props.item.children">

View File

@ -1,10 +1,10 @@
<script lang="ts" setup>
import type { ElScrollbar } from "element-plus"
import type { RouterLink } from "vue-router"
import Screenfull from "@/components/Screenfull/index.vue"
import { useRouteListener } from "@/hooks/useRouteListener"
import { useSettingsStore } from "@/store/modules/settings"
import { ArrowLeft, ArrowRight } from "@element-plus/icons-vue"
import { ElScrollbar } from "element-plus"
import { nextTick, ref } from "vue"
import { useRoute } from "vue-router"
@ -107,11 +107,11 @@ listenerRouteChange(() => {
<el-icon class="arrow left" @click="scrollTo('left')">
<ArrowLeft />
</el-icon>
<ElScrollbar ref="scrollbarRef" @wheel.passive="wheelScroll" @scroll="scroll">
<el-scrollbar ref="scrollbarRef" @wheel.passive="wheelScroll" @scroll="scroll">
<div ref="scrollbarContentRef" class="scrollbar-content">
<slot />
</div>
</ElScrollbar>
</el-scrollbar>
<el-icon class="arrow right" @click="scrollTo('right')">
<ArrowRight />
</el-icon>

View File

@ -1,13 +1,13 @@
<script lang="ts" setup>
import type { TagView } from "@/store/modules/tags-view"
import type { RouteLocationNormalizedLoaded, RouteRecordRaw } from "vue-router"
import type { RouteLocationNormalizedLoaded, RouteRecordRaw, RouterLink } from "vue-router"
import { useRouteListener } from "@/hooks/useRouteListener"
import { usePermissionStore } from "@/store/modules/permission"
import { useTagsViewStore } from "@/store/modules/tags-view"
import { Close } from "@element-plus/icons-vue"
import path from "path-browserify"
import { ref, watch } from "vue"
import { RouterLink, useRoute, useRouter } from "vue-router"
import { useRoute, useRouter } from "vue-router"
import ScrollPane from "./ScrollPane.vue"
const router = useRouter()
@ -163,10 +163,10 @@ listenerRouteChange((route) => {
<template>
<div class="tags-view-container">
<ScrollPane class="tags-view-wrapper" :tag-refs="tagRefs">
<RouterLink
<router-link
v-for="tag in tagsViewStore.visitedViews"
ref="tagRefs"
:key="tag.path"
ref="tagRefs"
:class="{ active: isActive(tag) }"
class="tags-view-item"
:to="{ path: tag.path, query: tag.query }"
@ -177,7 +177,7 @@ listenerRouteChange((route) => {
<el-icon v-if="!isAffix(tag)" :size="12" @click.prevent.stop="closeSelectedTag(tag)">
<Close />
</el-icon>
</RouterLink>
</router-link>
</ScrollPane>
<ul v-show="visible" class="contextmenu" :style="{ left: `${left}px`, top: `${top}px` }">
<li @click="refreshSelectedTag(selectedTag)">

View File

@ -1,18 +1,11 @@
import type { Router, RouteRecordNormalized, RouteRecordRaw } from "vue-router"
import { cloneDeep, omit } from "lodash-es"
import {
createRouter,
createWebHashHistory,
createWebHistory,
type Router,
type RouteRecordNormalized,
type RouteRecordRaw
} from "vue-router"
import { createRouter, createWebHashHistory, createWebHistory } from "vue-router"
/** 路由模式 */
export const history
= import.meta.env.VITE_ROUTER_HISTORY === "hash"
? createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH)
: createWebHistory(import.meta.env.VITE_PUBLIC_PATH)
export const history = import.meta.env.VITE_ROUTER_HISTORY === "hash"
? createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH)
: createWebHistory(import.meta.env.VITE_PUBLIC_PATH)
/** 路由降级(把三级及其以上的路由转化为二级路由) */
export function flatMultiLevelRoutes(routes: RouteRecordRaw[]) {

View File

@ -1,5 +1,6 @@
import type { RouteRecordRaw } from "vue-router"
import routeSettings from "@/config/route"
import { createRouter, type RouteRecordRaw } from "vue-router"
import { createRouter } from "vue-router"
import { flatMultiLevelRoutes, history } from "./helper"
const Layouts = () => import("@/layouts/index.vue")

View File

@ -34,23 +34,20 @@ export const useTagsViewStore = defineStore("tags-view", () => {
const addCachedView = (view: TagView) => {
if (typeof view.name !== "string") return
if (cachedViews.value.includes(view.name)) return
if (view.meta?.keepAlive)
cachedViews.value.push(view.name)
if (view.meta?.keepAlive) cachedViews.value.push(view.name)
}
// #endregion
// #region del
const delVisitedView = (view: TagView) => {
const index = visitedViews.value.findIndex(v => v.path === view.path)
if (index !== -1)
visitedViews.value.splice(index, 1)
if (index !== -1) visitedViews.value.splice(index, 1)
}
const delCachedView = (view: TagView) => {
if (typeof view.name !== "string") return
const index = cachedViews.value.indexOf(view.name)
if (index !== -1)
cachedViews.value.splice(index, 1)
if (index !== -1) cachedViews.value.splice(index, 1)
}
// #endregion

View File

@ -1,5 +1,6 @@
import type { AxiosInstance, AxiosRequestConfig } from "axios"
import { useUserStore } from "@/store/modules/user"
import axios, { type AxiosInstance, type AxiosRequestConfig } from "axios"
import axios from "axios"
import { ElMessage } from "element-plus"
import { get, merge } from "lodash-es"
import { getToken } from "./cache/cookies"
@ -27,8 +28,7 @@ function createService() {
const apiData = response.data
// 二进制数据则直接返回
const responseType = response.request?.responseType
if (responseType === "blob" || responseType === "arraybuffer")
return apiData
if (responseType === "blob" || responseType === "arraybuffer") return apiData
// 这个 code 是和后端约定的业务 code
const code = apiData.code
// 如果没有 code, 代表这不是项目后端开发的 api

View File

@ -64,21 +64,18 @@ export function isEmail(email: string) {
/** 判断是否为 MAC 地址 */
export function isMAC(mac: string) {
const reg
= /^(([a-f0-9][0,2468ace]:([a-f0-9]{2}:){4})|([a-f0-9][0,2468ace]-([a-f0-9]{2}-){4}))[a-f0-9]{2}$/i
const reg = /^(([a-f0-9][0,2468ace]:([a-f0-9]{2}:){4})|([a-f0-9][0,2468ace]-([a-f0-9]{2}-){4}))[a-f0-9]{2}$/i
return reg.test(mac)
}
/** 判断是否为 IPv4 地址 */
export function isIPv4(ip: string) {
const reg
= /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:\d|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]))?$/
const reg = /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:\d|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]))?$/
return reg.test(ip)
}
/** 判断是否为车牌(兼容新能源车牌) */
export function isLicensePlate(str: string) {
const reg
= /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/
const reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/
return reg.test(str)
}

View File

@ -1,9 +1,10 @@
<script lang="ts" setup>
import type { CreateOrUpdateTableRequestData, TableData } from "@/api/table/types/table"
import type { FormInstance, FormRules } from "element-plus"
import { createTableDataApi, deleteTableDataApi, getTableDataApi, updateTableDataApi } from "@/api/table"
import { usePagination } from "@/hooks/usePagination"
import { CirclePlus, Delete, Download, Refresh, RefreshRight, Search } from "@element-plus/icons-vue"
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus"
import { ElMessage, ElMessageBox } from "element-plus"
import { cloneDeep } from "lodash-es"
import { reactive, ref, watch } from "vue"