Compare commits

..

No commits in common. "53e70cbde4a2c8462437fad7fb024740d73bd931" and "08ea47b8da078f0029c5566af5f188dd984176d6" have entirely different histories.

33 changed files with 116 additions and 846 deletions

View File

@ -15,7 +15,7 @@ jobs:
uses: https://gitee.com/kongxiangyiren/gitea-tool-cache@v5
with:
# 只有node支持版本号别名
node-version: 18.20.2
node-version: 18
- uses: https://gitea.cn/actions/setup-node@v4
with:
# gitea-tool-cache导出 node 具体版本

View File

@ -25,7 +25,6 @@
},
"dependencies": {
"@vicons/ionicons5": "^0.12.0",
"@vueup/vue-quill": "^1.2.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"aplayer": "^1.10.1",

View File

@ -46,11 +46,3 @@ export function listMusic() {
method: "get",
});
}
export function uploadImg(data) {
return request({
url: "/file/upload",
method: "post",
data
})
}

View File

@ -14,32 +14,3 @@ export function ipStat() {
method: 'get'
});
}
// menuIcon
export function menuIcon(params) {
return request({
url: '/mix/icon',
method: 'get',
params:{url:params}
});
}
// qq2phone
export function qq2phone(params) {
return request({
url: '/mix/qq',
method: 'get',
params:{qq:params}
});
}
// phone2qq
export function phone2qq(params) {
return request({
url: '/mix/tel',
method: 'get',
params:{tel:params}
});
}

View File

@ -6,7 +6,7 @@
//#BE8AEF #B172EC #A45BE9 #9744E5 #8A2BE2 #7B1DD3 #6C19B9 #5C169F
@jb: linear-gradient(90deg,#BE8AEF,#409eff, #8A2BE2);
:root:root {
--van-primary-color: #8a2be2;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

View File

@ -29,7 +29,7 @@ const data = reactive({
onMounted(async () => {
// 8834041785
const res = await fetch("https://met.hxyouzi.com/meting-api/?server=tencent&type=playlist&id=7567066822")
// const res = await fetch("https://api.moeyao.cn/meting/?server=tencent&type=playlist&id=8834041785")
// const res = await fetch("https://met.hxyouzi.com/meting-api/?server=tencent&type=playlist&id=8834041785")
const mlist = await res.json()
data.audio = []
mlist.forEach(i => {

View File

@ -17,10 +17,10 @@
<div class="" style="border:1px solid #ccc;border-radius: 4px;overflow: hidden;">
<Toolbar style="border-bottom: 1px solid #ccc;font-size: 12px;" :editor="editorRef" :defaultConfig="toolbarConfig"
:mode="mode" />
<Editor style="min-height: 300px; overflow-y: hidden;" v-model="info.cont" :defaultConfig="editorConfig" :mode="mode"
<Editor style="height: 500px; overflow-y: hidden;" v-model="info.cont" :defaultConfig="editorConfig" :mode="mode"
@onCreated="handleCreated" />
</div>
<div class="btns mt-8 w-[100%]">
<div class="btns absolute bottom-0 w-[100%]">
<n-button type="primary" @click="handleSubmit">提交</n-button>
</div>
</div>
@ -51,17 +51,13 @@ const emit = defineEmits(['close'])
//mark method
const handleCreated = (editor) => {
editorRef.value = editor
}
//mark
editorConfig.value.placeholder = '请输入内容...'
toolbarConfig.excludeKeys = ['fullScreen', 'emoji', 'line-height', 'headings', 'list-ul', 'list-ol', 'line', 'hr', 'link', '|', 'image', 'code', 'code-theme', 'insertVideo']
toolbarConfig.excludeKeys = ['fullScreen', 'header1','header2','header3', 'emoji', 'line-height', 'headings', 'list-ul', 'list-ol', 'line', 'hr', 'link', '|', 'image', 'code', 'code-theme', 'insertVideo']
editorConfig.value.MENU_CONF['uploadImage'] = {
server: "https://www.hxyouzi.com/api/art/upimg",
fieldName: 'file',

View File

@ -1,10 +1,6 @@
<template>
<div class="box flex justify-between items-center md:py-1 h-[50px]" ref="menuH">
<div class="md:hidden flex items-center">
<div class="logo ml-8 mr-20 flex items-center" @click="toHome">
<img class="rounded-full" src="@/assets/柚子娘.jpg" width="40" alt="">
<img src="@/assets/youzi_title.png" width="200" height="50" alt="">
</div>
<div class="box flex justify-between items-center md:py-1" ref="menuH">
<div class="md:hidden">
<n-menu v-model:value="activeKey" :options="menuInfo.options" mode="horizontal" />
</div>
<n-icon size="30" class="menuIcon ml-2 hidden md:block text-pp-500" @click="active = true">
@ -98,7 +94,7 @@ menuInfo.menuList.forEach((i, idx) => {
activeKey.value = idx + 1 + "";
}
});
const homeItem = ref(null)
onMounted(() => {
// console.log(5555, setMenu);
setMenuH(menuH.value.clientHeight);
@ -107,12 +103,6 @@ onMounted(() => {
function goLogin() {
push("/login");
}
function toHome() {
push("/home");
const i = document.querySelector(".n-menu-item .n-menu-item-content-header");
i.click();
}
function handleSelect(k) {
switch (k) {
case "logout":

View File

@ -1 +0,0 @@
<svg t="1731026889534" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15633" id="mx_n_1731026889534" width="32" height="32"><path d="M512 1024A512 512 0 1 0 512 0a512 512 0 0 0 0 1024zM512 214.235429a54.564571 54.564571 0 1 1 0 109.202285 54.564571 54.564571 0 0 1 0-109.202285zM512 397.165714a54.564571 54.564571 0 1 1 0 109.202286 54.564571 54.564571 0 0 1 0-109.202286zM210.505143 483.474286a41.106286 41.106286 0 0 1 58.368-0.438857L512 722.870857l243.053714-239.689143a41.252571 41.252571 0 1 1 58.075429 58.806857l-272.091429 268.361143a41.252571 41.252571 0 0 1-58.002285 0l-272.091429-268.434285a41.325714 41.325714 0 0 1-0.438857-58.368z" fill="#B1C3E7" p-id="15634"></path></svg>

Before

Width:  |  Height:  |  Size: 734 B

View File

@ -3,7 +3,6 @@ import { createApp } from "vue";
import http from '@/api/index.js';
import icon from "@/icon/index.js";
import store from "@/stores/index.js";
import "@wangeditor/editor/dist/css/style.css"; // 引入 css
import "qweather-icons/font/qweather-icons.css";
import "tailwindcss/tailwind.css";
@ -25,7 +24,7 @@ document.oncontextmenu = function () {
app.use(createPinia());
app.use(router).use(VueWechatTitle);
window.$store = store
window.$http = http
// window.$icon = icon
for (const key in icon) {

View File

@ -30,10 +30,6 @@ const router = createRouter({
path: "/tour",
component: () => import("@/views/tour/index.vue"),
},
{
path: "/widget",
component: () => import("@/views/widget/index.vue"),
},
{
path: "/plink",
component: () => import("@/views/plink/index.vue"),

View File

@ -1,12 +0,0 @@
const files = import.meta.glob('./*.js', {
eager: true,
})
const store = {}
// console.log("stores封装",files);
for (const i in files) {
const t = i.split("/")
const name = t[1].split(".")[0]
store[name] = files[i]
}
export default store

View File

@ -6,7 +6,6 @@ export const usesizeStore = defineStore("size", {
navH: 0,
conH: 0,
footH:0,
searchH:0,
}),
actions: {
setMenuH(v) {
@ -18,9 +17,6 @@ export const usesizeStore = defineStore("size", {
setFootH(v){
this.footH = v;
},
setSearchH(v){
this.searchH = v;
},
setX(v){
this.x = v;

View File

@ -1,20 +0,0 @@
import axios from 'axios';
const token = "Bearer " + "1|YbgN4rXb5pj225CNuMNj20fxbpo2xGHliGxtTWDH"
let baseURL = 'https://pic.hxyouzi.com/api/v1';
let headers = {
'Content-Type': 'application/form-data',
'Authorization': token,
'Accept': 'application/json'
};
const request = axios.create({
baseURL,
headers
});
export function uploadImage(data) {
return request.post('/upload', data);
}

View File

@ -1,16 +1,18 @@
import orange from "@/icon/orange.svg";
import { NIcon } from "naive-ui";
import { RouterLink } from "vue-router";
const menuInfo = {
options: [
// {
// label: () => "",
// key: "0",
// disabled: true,
// icon: () => h(NIcon, { class: "orange" }, { default: () => h(orange) }),
// },
{
label: () => "",
key: "0",
disabled: true,
icon: () => h(NIcon, { class: "orange" }, { default: () => h(orange) }),
},
{
key: "1",
label: () => h(RouterLink, { ref:"homeItem",to: "/home", class: "menu-item font-[500] text-lg" }, { default: () => "首页" }),
label: () => h(RouterLink, { to: "/home", class: "menu-item font-[500] text-lg" }, { default: () => "首页" }),
},
{
key: "2",
@ -22,13 +24,9 @@ const menuInfo = {
},
{
key: "4",
label: () => h(RouterLink, { to: "/widget", class: "menu-item font-[500] text-lg" }, { default: () => "工具" }),
},
{
key: "5",
label: () => h(RouterLink, { to: "/plink", class: "menu-item font-[500] text-lg" }, { default: () => "友链" }),
},
],
menuList: ["/home", "/gallery", "/article", "/widget","/plink"],
menuList: ["/home", "/gallery", "/article","/plink"],
};
export default menuInfo;

View File

@ -4,7 +4,6 @@ import cookie from 'vue-cookies';
import router from '../router/index.js';
let baseURL = import.meta.env.VITE_APP_BASE_URL + '/api';
// let baseURL = 'http://127.0.0.1:7777/api';
let headers = {
'Content-Type': 'application/x-www-form-urlencoded'

View File

@ -1,5 +1,5 @@
<template>
<n-scrollbar style="max-height: 100vh;scroll-behavior: smooth;">
<n-scrollbar style="max-height: 100vh">
<div class="title">
{{ info.title }}
</div>
@ -8,21 +8,8 @@
{{ info.nickname }}
</div>
<div ref="containerRef " class="cont editor">
<Editor class=" min-h-[300px]" v-model="info.cont" :defaultConfig="editorConfig" @onCreated="onCreated" />
<n-card class="fixed top-24 right-28 w-80 cursor-pointer">
<template #header>
<div>目录</div>
</template>
<n-scrollbar class="max-h-[500px] p-2">
<div class="truncate cursor-pointer my-2" v-for="i in indexs"
:style="{ marginLeft: (i.level - 1) * 12 + 'px',
fontSize: i.level == 1 ? '16px' : '12px',
}">
<a class="hover:text-orange-500" :href="`#${i.id}`">{{ i.text }}</a>
</div>
</n-scrollbar>
</n-card>
<div class="cont">
<Editor v-model="info.cont" :defaultConfig="editorConfig" />
</div>
<div class="time">--发表于 {{ formatTime(info.updated_at, "YYYY年MM月DD日hh时") }}</div>
@ -32,79 +19,32 @@
<script setup>
import { formatTime } from "@/util/index.js";
import { Editor } from "@wangeditor/editor-for-vue";
import { nextTick, onMounted } from "vue";
import { useRoute } from "vue-router";
const editorConfig = { readOnly: true };
const info = ref({updated_at:new Date()});
const route = useRoute();
const deditor = shallowRef(null);
const indexs = ref([]);
const containerRef = ref(null);
// console.log(route.params.id);
// getInfo(route.params.id);
// async function getInfo(id) {
// const res = await $http.art.queryArtInfo(id);
// // console.log("**********", res);
// info.value = res.data[0];
// }
//
function initIndex() {
const hs = document.querySelectorAll("h1,h2");
const list = [];
for (let i = 0; i < hs.length; i++) {
const h = hs[i];
const id = h.id;
const text = h.innerText;
const level = parseInt(h.tagName.slice(1));
list.push({ id, text, level });
}
indexs.value = list;
console.log(list);
}
async function onCreated(editor) {
const res = await $http.art.queryArtInfo(route.params.id);
getInfo(route.params.id);
async function getInfo(id) {
const res = await $http.art.queryArtInfo(id);
// console.log("**********", res);
info.value = res.data[0];
deditor.value = editor
// console.log(editor);
nextTick(() => {
initIndex();
})
}
onMounted(() => {
});
//
onBeforeUnmount(() => {
const editor = deditor.value
if (editor == null) return
editor.destroy()
})
</script>
<style scoped lang="less">
* {
scroll-behavior: smooth;
}
.title {
font-style: italic;
font-size: 20px;
text-align: center;
padding: 10px 0;
}
.author {
padding: 5px 20px;
text-align: right;
color: @purple;
}
.cont {
width: 96%;
margin: 0px auto;
@ -116,17 +56,7 @@ onBeforeUnmount(() => {
text-align: right;
padding: 5px 30px;
}
:deep(#w-e-element-3) {
margin: unset !important;
}
:deep(.n-card > .n-card-header) {
padding: 6px 0;
text-align: center;
}
:deep(.n-card > .n-card__content) {
padding: 0px;
}
</style>

View File

@ -1,75 +0,0 @@
<template>
<n-scrollbar style="max-height: 100vh">
<div class="title">
{{ info.title }}
</div>
<div class="author">
{{ info.nickname }}
</div>
<div class="cont editor">
<QuillEditor theme="snow" :options="ops" v-html="info.cont"></QuillEditor>
</div>
<div class="time">--发表于 {{ formatTime(info.updated_at, "YYYY年MM月DD日hh时") }}</div>
</n-scrollbar>
</template>
<script setup>
import { formatTime } from "@/util/index.js";
import { QuillEditor } from '@vueup/vue-quill';
import '@vueup/vue-quill/dist/vue-quill.snow.css';
import { useRoute } from "vue-router";
const info = ref({ updated_at: new Date() });
const route = useRoute();
getInfo(route.params.id);
// options
const ops = ref({
placeholder: "请输入内容",
readOnly: true,
modules: {
toolbar: null,
},
});
async function getInfo(id) {
const res = await $http.art.queryArtInfo(id);
info.value = res.data[0];
}
</script>
<style scoped lang="less">
.title {
font-style: italic;
font-size: 20px;
text-align: center;
padding: 10px 0;
}
.author {
padding: 5px 20px;
text-align: right;
color: @purple;
}
.cont {
width: 96%;
margin: 0px auto;
min-height: 80vh;
}
.time {
font-style: italic;
text-align: right;
padding: 5px 30px;
}
</style>

View File

@ -7,8 +7,8 @@
</div>
</div>
<div class="table w-[95%] mx-auto">
<n-data-table :columns="columns" striped :single-line="false" :paginate-single-page="false"
:pagination="pagination" :data="artiList">
<n-data-table :columns="columns" striped :single-line="false" :paginate-single-page="false" :pagination="pagination"
:data="artiList">
<template #empty>
<div>
<span>您还未发表过文章</span><span class="text-pp-200 hover:underline" @click="add">去写一篇 ></span>
@ -18,12 +18,10 @@
</div>
<n-drawer v-model:show="dshow" :width="702" :mask-closable="false">
<n-drawer-content :native-scrollbar="false" class="pb-6" :title="dtitle" closable>
<!-- <n-scrollbar class="h-full"> -->
<n-drawer-content :title="dtitle" closable>
<artiView v-if="show == 'view'" :id="opId" />
<edition v-if="show == 'add'" :id="-1" @close="handdleCloseEditor" />
<edition v-if="show == 'edit'" :id="curId" @close="handdleCloseEditor" />
<!-- </n-scrollbar> -->
</n-drawer-content>
</n-drawer>
@ -71,8 +69,6 @@ const columns = createColumns({
}
})
function createColumns({ edit, remove, view }) {
return [
{

View File

@ -1,10 +1,8 @@
<template>
<div class="div w-[100%]" ref="gw">
<div class="list px-3">
<n-upload style="height: 200px; width: 50%" multiple directory-dnd action="https://pic.hxyouzi.com/api/v1/upload"
accept="image/*" :data="{ strategy_id: 2 }"
:headers="{ Authorization: 'Bearer ' + '1|YbgN4rXb5pj225CNuMNj20fxbpo2xGHliGxtTWDH' }" :show-file-list="false"
:on-finish="fileFinish">
<n-upload style="height: 200px; width: 50%" multiple directory-dnd action="https://www.hxyouzi.com/api/file/upload"
accept="image/*" :headers="{ Authorization: token }" :show-file-list="false" :on-finish="fileFinish">
<n-upload-dragger>
<div style="margin-bottom: 12px">
<n-icon size="48" class="up">
@ -62,15 +60,9 @@ const bottomLen = ref(20)
// console.log(4444, size.conH);
const list = ref([]);
const token = cookie.get("token");
async function fileFinish(file) {
function fileFinish(file) {
const res = JSON.parse(file.event.currentTarget.response);
console.log("返回文件",res);
const r = await $http.file.uploadImg({
url: res.data.links.url,
filename : res.data.origin_name,
});
console.log("上传服务器",r);
// console.log(res);
if (res.code == 1) {
$msg.success(res.msg);
getMyfile();
@ -310,7 +302,6 @@ onMounted(() => {
:deep(.n-image) {
display: flex;
img {
width: 200px;
height: auto;

View File

@ -33,11 +33,7 @@
<n-input v-model:value="menuValue.menuLink" placeholder="请输入导航链接" />
</n-form-item-row>
<n-form-item-row label="导航图标" path="menuIcon">
<n-input v-model:value="menuValue.menuIcon" placeholder="请输入导航图标" >
<template #suffix>
<n-button type="primary" size="tiny" @click="getMenuIcon">获取</n-button>
</template>
</n-input>
<n-input v-model:value="menuValue.menuIcon" placeholder="请输入导航图标" />
</n-form-item-row>
<n-form-item-row label="导航描述" path="menuDesc">
<n-input type="textarea" v-model:value="menuValue.menuDesc" placeholder="请输入导航描述" />
@ -256,19 +252,6 @@ function createColumns({ edit, remove, view }) {
function addMenu() {
mshow.value = true
}
async function getMenuIcon(){
if (menuValue.menuLink == null || !menuValue.menuLink) {
$msg.error('请输入导航链接')
return
}
const res = await $http.mix.menuIcon(menuValue.menuLink)
console.log(res);
menuValue.menuIcon = res.baseUrl+res.data
}
onMounted(async () => {
getClass()
getList()

View File

@ -1,10 +1,10 @@
<template>
<div>
<div class="box" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
<div class="box xxx" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
<n-layout>
<n-layout has-sider>
<n-layout-content class="sm:w-[90vh] w-[70%]" :content-style="{ height: `calc(100vh - ${size.menuH}px)`,backgroundColor:'#f1f2f3' }">
<n-scrollbar class="" trigger="hover" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
<n-scrollbar class="pt-6" trigger="hover" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
<search></search>
<NavMenu />
</n-scrollbar>

View File

@ -1,60 +1,42 @@
<template>
<div class="box flex flex-wrap px-8">
<n-card :style="{ height: boxH + 'px' }">
<n-scrollbar :class="`h-[${boxH}px]`" :style="{ height: boxH - 40 + 'px' }">
<n-collapse default-expanded-names="0" accordion>
<n-collapse-item v-for="(i, idx) in navList" :name="idx + ''" :key="i.menuClass">
<template #arrow="{ collapsed }">
<img :class="{ zhuan: !collapsed }" width="20" height="20" :src="i.icon" alt="">
</template>
<template #header>
<div class="ml-4" :style="{ color: i.color }">
{{ i.menuClass }}
<div class="box flex flex-wrap pl-[2%] mt-8">
<n-card title="" style="margin-bottom: 16px" v-for="(ii, iii) in navList">
<n-tabs default-value="0" justify-content="space-evenly" type="line">
<n-tab-pane class="flex flex-wrap" :name="index + ''" :tab="item.menuClass" v-for="(item, index) in ii">
<div class="card hover:shadow-[0px_0px_5px_1px_#8A2BE2] mr-4 mb-4 rounded-md py-4 flex justify-center items-center w-[320px] bg-[#f2e8fc]"
@click="link(it.menuLink)" v-for="(it, idx) in item.children" :key="index">
<div class="left mr-3">
<img v-if="it.isHaveIco" width="40" height="40" class="rounded-full bg-[white]" :src="it.menuIcon" alt="" @error="it.isHaveIco=false">
<div v-else class="w-[40px] h-[40px] flex justify-center items-center rounded-full bg-[white] font-bold text-2xl text-orange-500">
{{ it.menuName.slice(0,1) }}
</div>
</template>
<template #header-extra="{collapsed}">
<n-icon size="26" :color="i.color">
<IosArrowDropright :class="{extra_collapsed:!collapsed}" class="extra_collapse"></IosArrowDropright>
</n-icon>
</template>
<div class="flex flex-wrap items-center">
<div class="w-[200px] mr-20 my-4" v-for="(j,ii) in i.children">
<n-popover trigger="hover" animated :delay="1000" width="trigger">
</div>
<div class="right w-[224px]">
<div class="text-[20px] text-pp-700 font-bold">{{ it.menuName }}</div>
<n-popover trigger="hover" width="trigger">
<template #trigger>
<div>
<n-button @click="link(j.menuLink)" class="btn w-full hover:text-[white]" type="primary" ghost>
<template #icon>
<img v-if="!j.exp" width="20" height="20" class="mr-2" :src="j.menuIcon" alt="" @error="navList[idx].children[ii].exp=true">
<div :style="{backgroundColor:j.color}" class="w-[20px] h-[20px] text-[12px] text-[white] rounded-full flex justify-center items-center" v-else>{{ j.menuName[0] }}</div>
<div class="truncate">{{ it.menuDesc }}</div>
</template>
{{ j.menuName }}
</n-button>
</div>
</template>
{{ j.menuDesc }}
<span>{{ it.menuDesc }}</span>
</n-popover>
</div>
</div>
</n-collapse-item>
</n-collapse>
</n-scrollbar>
</n-tab-pane>
</n-tabs>
</n-card>
</div>
</template>
<script setup>
import { IosArrowDropright } from "@vicons/ionicons4";
import { chunkArrayInGroups } from '@/util/index.js';
import { onMounted } from 'vue';
//mark import
//mark data
const navList = ref([])
const isHaveIco = ref(true)
const size = $store.size.usesizeStore()
const boxH = ref(0)
//mark method
function formatNav(list) {
@ -67,19 +49,16 @@ function formatNav(list) {
}
});
menu.forEach(i => {
const children = list.filter(it => it.menuClass == i)
result.push({
menuClass: i,
children,
color: children[0].color,
icon: "https://www.hxyouzi.com/img/svg/menu/" + children[0].icon,
exp: false,
children: list.filter(it => it.menuClass == i),
exp: false
})
})
console.log(result);
// console.log(result);
return result
// return chunkArrayInGroups(result, 4)
return chunkArrayInGroups(result, 4)
}
@ -91,10 +70,6 @@ function link(url) {
onMounted(async () => {
const res = await $http.nav.listNav()
navList.value = formatNav(res.data)
//
const screenHeight = document.documentElement.clientHeight
boxH.value = screenHeight - size.searchH - size.menuH - 24 - 66
console.log(66666, navList.value);
})
</script>
@ -104,48 +79,16 @@ onMounted(async () => {
align-items: start;
}
:deep(.n-collapse-item__header) {
background-color: red;
}
:deep(.n-collapse-item__header-main) {
:deep(.n-tabs-tab__label) {
color: #31101b;
font-size: 20px;
align-items: center;
// justify-content: center;
font-weight: 600;
}
:deep(.n-collapse-item-arrow) {
align-items: center;
}
//
@keyframes rotate {
from {
transform: rotate(0deg);
/* 起始角度 */
}
to {
transform: rotate(360deg);
/* 结束角度 */
}
}
.zhuan {
// transform: rotate(0deg) !important;
animation: rotate 2s infinite;
/* 播放名为bounce的动画循环无限次每次动画时长1秒 */
}
.btn {
transition: all .5s ease-in-out;
/* 指定过渡属性,持续时长,过渡曲线,何时开始 */
&:hover {
transform: translateX(10px);
background: @jb;
};
}
.extra_collapse {
transform: rotate(0deg);
}
.extra_collapsed {
transform: rotate(90deg);
:deep(.n-tabs-tab--active) .n-tabs-tab__label{
color: @purple;
}
</style>

View File

@ -1,19 +1,16 @@
<template>
<div ref="searhBox" class="py-10 px-40 md:px-4 search-box " round>
<div class="py-10 px-40 md:px-4 search-box " round>
<!-- <img class="h-[50px] mb-4 mx-auto" height="30" :src="img" alt=""> -->
<div class="relative">
<!-- <n-select size="large" round class="w-[13%] md:w-[40%]" @change="updateEngine" v-model:value="engine" :options="selectOptions" /> -->
<n-input size="large" placeholder="探索世界吧!" ref="input" round class="w-full" v-model:value="searchValue" clearable
@keyup.enter="toSearch(0)" @focus="inputFocus" @blur="inputBlur" @keydown.arrow-down.prevent="select" />
<n-input size="large" placeholder="探索世界吧!" ref="input" round class="w-full" v-model:value="searchValue" clearable @keyup.enter="toSearch(0)"
@focus="smodel = true" @blur="inputBlur" />
<!-- <n-button size="large" round class="w-[15%] md:w-[30%]" type="primary" @click="toSearch">搜索</n-button> -->
<ul ref="mos" v-show="smodel" tabindex="2" @blur="ulBlur"
class="absolute left-0 bg-[#FAEEFB] z-50 !rounded-2xl overflow-hidden py-2">
<li ref="item" tabindex="1" v-for="(s, i) in selectOptions" class="sop" @keyup.enter="toSearch(i)"
@blur="itemBlur" @keydown.arrow-down.prevent="downSelect(i)" @keydown.arrow-up.prevent="upSelect(i)"
@click="toSearch(i)">
<div ref="mos" v-show="smodel" class="absolute left-0 bg-[#FAEEFB] z-50 !rounded-2xl overflow-hidden py-2">
<div v-for="(s, i) in selectOptions" class="sop" @click="toSearch(i)">
<div><span class="text-[#409eff]">{{ s.label }}: </span>{{ searchValue }}</div>
</li>
</ul>
</div>
</div>
</div>
</div>
@ -22,16 +19,14 @@
<script setup>
//mark import
import { usesizeStore } from "@/stores/size.js";
import { onMounted } from 'vue';
//mark data
const size = usesizeStore()
const searchValue = ref('')
const selectOptions = [
{ label: '必应', value: 'https://cn.bing.com/search?q=' },
{ label: '谷歌', value: 'https://www.google.com/search?q=' },
{ label: '百度', value: 'https://www.baidu.com/s?wd=' },
{ label: '翻译', value: 'https://translate.volcengine.com?text=' }
{ label: '翻译', value: '#' }
]
const smodel = ref(false)
@ -39,61 +34,26 @@ const input = ref(null)
const mos = ref(null)
const inWidth = ref(0)
const inHeight = ref(0)
const item = ref(null)
const searhBox = ref(null)
//mark method
// https://cn.bing.com/search?q=111
function toSearch(i) {
console.log(666666);
if (!searchValue.value) return
// if (i == 3) {
// $msg.info('')
// return
// }
if (i == 3) {
$msg.info('翻译功能正在开发中')
return
}
window.open(selectOptions[i].value + searchValue.value, "_blank")
}
function inputFocus() {
smodel.value = true
}
function inputBlur(e) {
if (e.relatedTarget) return
function inputBlur() {
setTimeout(() => {
smodel.value = false
}, 200);
}
function ulBlur() {
console.log("*******");
smodel.value = false
}
function itemBlur(e) {
if (!e.relatedTarget) {
setTimeout(() => {
smodel.value = false
}, 200);
}
}
function select() {
// item0
// console.log(item.value[0]);
item.value[1].focus()
}
function downSelect(i) {
if (i == selectOptions.length - 1) item.value[0].focus()
else item.value[i + 1].focus()
}
function upSelect(i) {
if (i == 0) item.value[selectOptions.length - 1].focus()
else item.value[i - 1].focus()
}
//mark
onMounted(() => {
@ -101,40 +61,26 @@ onMounted(() => {
inHeight.value = input.value.$el.offsetHeight
mos.value.style.width = inWidth.value + 'px'
mos.value.style.top = inHeight.value + 'px'
const h = searhBox.value.offsetHeight
size.setSearchH(h)
})
</script>
<style scoped lang="less">
<style scoped>
.search-box {
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.sop {
padding: 4px 10px;
transition: all 0.4s ease-in-out;
outline: none;
}
.sop:hover,
.sop:focus {
.sop:hover {
padding: 4px 20px;
background: #f2e8fc;
/* padding: 2px 0 2px 4px; */
}
.sop:focus span {
color: @purple !important;
}
.sop:hover span {
color: @orange !important;
}
</style>
<style>
.n-input-group>*:not(:first-child) {

View File

@ -12,8 +12,7 @@
今天就是 <span class="text-pp-300 text-lg">{{ holi.data.hname }}</span>
</div>
<div class="holi text-center" v-else>
还有 <span class="text-[#409eff] text-lg">{{ holi.subdate }}</span> 天就是 <span class="text-pp-300 text-lg">{{
holi.data.hname }}</span>
还有 <span class="text-[#409eff] text-lg">{{ holi.subdate }}</span> 天就是 <span class="text-pp-300 text-lg">{{ holi.data.hname }}</span>
</div>
</div>
<div class="right h-[150px]">
@ -26,26 +25,12 @@
<div class="lunarDate p-1 text-[22px] text-center">
{{ jq.data.yearTips }} {{ jq.data.lunarCalendar }}
</div>
<div class=" p-1 pl-6">
<n-popover trigger="hover" animated :delay="1000" width="trigger">
<template #trigger>
<div class="suit">
<div class="suit p-1 pl-6">
<span class="text-pp-300">{{ jq.data.suit }}</span>
</div>
</template>
{{ jq.data.suit }}
</n-popover>
</div>
<div class="suit p-1 pl-6">
<n-popover trigger="hover" animated :delay="1000" width="trigger">
<template #trigger>
<div class="suit">
<span class="text-pp-300">{{ jq.data.avoid }}</span>
</div>
</template>
{{ jq.data.avoid }}
</n-popover>
</div>
</div>
<div class="img">
<img :src="jqImg" alt="">
@ -62,21 +47,21 @@
</div>
<!-- <template v-if="isBaidu"> -->
<div class="list">
<div class=" hover:text-orange-500" @click="gotonews(item.url)" v-for="(item, index) in baidu" :key="index"
<div class=" hover:text-orange-500" @click="gotonews(item.url)" v-for="(item, index) in baidu.data" :key="index"
v-show="index < 10">
<div v-if="index < 3" class="flex my-2 justify-between">
<div class="hot flex items-center">
<n-icon size="16" class=" orange mr-2">
<hot />
</n-icon>
<div>{{ item.keyword }}</div>
<div>{{ item.title }}</div>
</div>
<div class="text-pp-500">{{ item.hotValue }}</div>
<div class="text-pp-500">{{ item.hot }}</div>
</div>
<div v-if="index > 2 && isBaidu" class="flex my-2 justify-between">
<div>{{ item.keyword }}</div>
<div class="text-pp-500">{{ item.hotValue }}</div>
<div>{{ item.title }}</div>
<div class="text-pp-500">{{ item.hot }}</div>
</div>
</div>
<n-divider v-if="!isBaidu">
@ -105,7 +90,7 @@ import hot from "@/icon/hot.svg";
import more from "@/icon/more.svg";
import { formatTime } from '@/util/index.js';
import ww from 'chinese-workday';
import { onMounted, ref } from 'vue';
import { ref } from 'vue';
//mark data
@ -128,7 +113,7 @@ const j = jq.data.solarTerms.slice(0, 2)
const jNum = jqs.indexOf(j) + 1
jqImg.value = 'https://www.hxyouzi.com/img/jieqi/' + jNum + '.jpg'
const isBaidu = ref(false);
const baidu = ref({})
const baidu = await $http.news.listBaiduNews()
// const holi = await $http.wea.getNextHoliday()
// console.log(555555555555,holi);
@ -137,11 +122,7 @@ const baidu = ref({})
//mark lifeCycle
onMounted(async () => {
baidu.value = (await $http.news.listBaiduNews()).data
console.log("新闻", baidu.value);
})
//mark watch
//mark computed
@ -158,8 +139,6 @@ const gotonews = (url) => {
window.open(url, "_blank")
}
</script>
<style scoped lang="less">

View File

@ -1,50 +0,0 @@
<template>
<div>
<div class="flex justify-evenly w-full px-8 my-8">
<n-input v-model:value="phone" type="text" placeholder="请输入手机号" @keyup.enter="submit" @input="inputChange"></n-input>
<n-button class="w-32 ml-8" type="primary" size="medium" @click="submit">确认</n-button>
</div>
<div class="px-8" v-if="isSuccess">
<div class="mb-2">QQ号 <span class="text-pp-400">{{ result.qq }}</span></div>
<div class="diqu">手机号地区 <span class="text-pp-400">{{ result.phonediqu }}</span></div>
</div>
<div class=" text-center text-[red]" v-else>
该手机号不存在或未绑定QQ号
</div>
</div>
</template>
<script setup>
//mark import
//mark data
const phone = ref('');
const result = ref({});
const isSuccess = ref(true);
//mark method
function inputChange() {
//
phone.value = phone.value.replace(/\D/g, '');
}
async function submit() {
if (phone.value.length == 0) {
return;
}
const res = await $http.mix.phone2qq(phone.value);
console.log(res);
if (res.status == 200) {
result.value = res;
isSuccess.value = true;
} else {
isSuccess.value = false;
}
}
//mark
</script>
<style scoped></style>

View File

@ -1,50 +0,0 @@
<template>
<div>
<div class="flex justify-evenly w-full px-8 my-8">
<n-input v-model:value="qq" type="text" placeholder="请输入qq号" @keyup.enter="submit" @input="inputChange"></n-input>
<n-button class="w-32 ml-8" type="primary" size="medium" @click="submit">确认</n-button>
</div>
<div class="px-8" v-if="isSuccess">
<div class="mb-2">手机号 <span class="text-pp-400">{{ result.phone }}</span></div>
<div class="diqu">手机号地区 <span class="text-pp-400">{{ result.phonediqu }}</span></div>
</div>
<div class=" text-center text-[red]" v-else>
该qq号不存在或未绑定手机号
</div>
</div>
</template>
<script setup>
//mark import
//mark data
const qq = ref('');
const result = ref({});
const isSuccess = ref(true);
//mark method
function inputChange() {
//
qq.value = qq.value.replace(/\D/g, '');
}
async function submit() {
if (qq.value.length == 0) {
return;
}
const res = await $http.mix.qq2phone(qq.value);
console.log(res);
if (res.status == 200) {
result.value = res;
isSuccess.value = true;
} else {
isSuccess.value = false;
}
}
//mark
</script>
<style scoped></style>

View File

@ -1,64 +0,0 @@
<template>
<div class="h-full mt-[5vh] flex justify-around">
<n-card class="left h-[80vh] rounded-sm mt-4 w-[40vw]">
<template #header>
<div class="text-xl text-center">小工具</div>
</template>
<div class=" flex justify-around">
<n-card v-show="i.show" class="w-[45%] mt-4 h-20 bg-[#f3f4f5]" hoverable size="small" @click="handdleWidget(i)" v-for="i in widgets">
<template #header>
<div class="text-pp-500 text-center">{{ i.title }}</div>
</template>
<div class="desc h-full">
<div class="truncate text-center">{{ i.desc }}</div>
</div>
</n-card>
</div>
</n-card>
<n-divider class="h-[80vh] bg-pp-500 mt-4" vertical />
<div class="right h-[80vh] w-[40vw]">
<n-card class="w-full h-full mt-4" :title="title" size="medium">
<component class="w-full" :is="comp"></component>
</n-card>
</div>
</div>
</template>
<script setup>
//mark import
import phone2qq from './component/phone2qq.vue';
import qq2phone from './component/qq2phone.vue';
//mark data
const comp = ref(markRaw(qq2phone),);
const title = ref('QQ号查手机号');
const widgets = ref([{
name: 'qq2phone',
comp: markRaw(qq2phone),
title: 'QQ号查手机号',
desc: "请勿乱用,打扰别人生活!",
show: true
}, {
name: 'phone2qq',
comp: markRaw(phone2qq),
title: '手机号查QQ号',
desc: "请勿乱用,打扰别人生活!",
show: true
}]);
//mark method
function handdleWidget(i) {
comp.value = i.comp;
title.value = i.title;
}
//mark
</script>
<style scoped></style>

View File

@ -41,5 +41,4 @@ module.exports = {
},
},
plugins: [],
important: true,
};

View File

@ -29,9 +29,6 @@ export default defineConfig({
pure: ['console.log'], // 删除 console.log
drop: ['debugger'], // 删除 debugger
},
define: {
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
},
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
@ -39,8 +36,7 @@ export default defineConfig({
},
base: "/blog/",
server:{
host:'0.0.0.0',
port: 8080,
host:'0.0.0.0'
},
css: {
preprocessorOptions: {

163
yarn.lock
View File

@ -766,14 +766,6 @@
resolved "https://mirrors.cloud.tencent.com/npm/@vue/shared/-/shared-3.5.12.tgz#f9e45b7f63f2c3f40d84237b1194b7f67de192e3"
integrity sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==
"@vueup/vue-quill@^1.2.0":
version "1.2.0"
resolved "https://mirrors.cloud.tencent.com/npm/@vueup/vue-quill/-/vue-quill-1.2.0.tgz#cd0d93559256d069f639723dd91c044e8162c72a"
integrity sha512-kd5QPSHMDpycklojPXno2Kw2JSiKMYduKYQckTm1RJoVDA557MnyUXgcuuDpry4HY/Rny9nGNcK+m3AHk94wag==
dependencies:
quill "^1.3.7"
quill-delta "^4.2.2"
"@wangeditor/basic-modules@^1.1.7":
version "1.1.7"
resolved "https://mirrors.cloud.tencent.com/npm/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz#a9c3ccf4ef53332f29550d59d3676e15f395946f"
@ -1026,7 +1018,7 @@ buffer@^6.0.3:
base64-js "^1.3.1"
ieee754 "^1.2.1"
call-bind@^1.0.2, call-bind@^1.0.7:
call-bind@^1.0.7:
version "1.0.7"
resolved "https://mirrors.cloud.tencent.com/npm/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
@ -1072,11 +1064,6 @@ chownr@^1.1.1:
resolved "https://mirrors.cloud.tencent.com/npm/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
clone@^2.1.1:
version "2.1.2"
resolved "https://mirrors.cloud.tencent.com/npm/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
color-convert@^2.0.1:
version "2.0.1"
resolved "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@ -1241,18 +1228,6 @@ decompress-response@^6.0.0:
dependencies:
mimic-response "^3.1.0"
deep-equal@^1.0.1:
version "1.1.2"
resolved "https://mirrors.cloud.tencent.com/npm/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761"
integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==
dependencies:
is-arguments "^1.1.1"
is-date-object "^1.0.5"
is-regex "^1.1.4"
object-is "^1.1.5"
object-keys "^1.1.1"
regexp.prototype.flags "^1.5.1"
deep-extend@^0.6.0:
version "0.6.0"
resolved "https://mirrors.cloud.tencent.com/npm/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
@ -1263,7 +1238,7 @@ deepmerge@~4.3.0:
resolved "https://mirrors.cloud.tencent.com/npm/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
define-data-property@^1.0.1, define-data-property@^1.1.4:
define-data-property@^1.1.4:
version "1.1.4"
resolved "https://mirrors.cloud.tencent.com/npm/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
@ -1272,15 +1247,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:
es-errors "^1.3.0"
gopd "^1.0.1"
define-properties@^1.2.1:
version "1.2.1"
resolved "https://mirrors.cloud.tencent.com/npm/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
dependencies:
define-data-property "^1.0.1"
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@ -1589,11 +1555,6 @@ event-emitter@^0.3.5:
d "1"
es5-ext "~0.10.14"
eventemitter3@^2.0.3:
version "2.0.3"
resolved "https://mirrors.cloud.tencent.com/npm/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==
evtd@^0.2.2, evtd@^0.2.4:
version "0.2.4"
resolved "https://mirrors.cloud.tencent.com/npm/evtd/-/evtd-0.2.4.tgz#0aac39ba44d6926e6668948ac27618e0795b9d07"
@ -1611,21 +1572,6 @@ ext@^1.7.0:
dependencies:
type "^2.7.2"
extend@^3.0.2:
version "3.0.2"
resolved "https://mirrors.cloud.tencent.com/npm/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
fast-diff@1.1.2:
version "1.1.2"
resolved "https://mirrors.cloud.tencent.com/npm/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
fast-diff@1.2.0:
version "1.2.0"
resolved "https://mirrors.cloud.tencent.com/npm/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-glob@^3.3.0, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
@ -1698,11 +1644,6 @@ function-bind@^1.1.2:
resolved "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
functions-have-names@^1.2.3:
version "1.2.3"
resolved "https://mirrors.cloud.tencent.com/npm/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://mirrors.cloud.tencent.com/npm/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
@ -1762,7 +1703,7 @@ gsap@^3.12.2:
resolved "https://mirrors.cloud.tencent.com/npm/gsap/-/gsap-3.12.5.tgz#136c02dad4c673b441bdb1ca00104bfcb4eae7f4"
integrity sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==
has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
has-property-descriptors@^1.0.2:
version "1.0.2"
resolved "https://mirrors.cloud.tencent.com/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
@ -1779,13 +1720,6 @@ has-symbols@^1.0.3:
resolved "https://mirrors.cloud.tencent.com/npm/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
has-tostringtag@^1.0.0:
version "1.0.2"
resolved "https://mirrors.cloud.tencent.com/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
hasown@^2.0.0, hasown@^2.0.2:
version "2.0.2"
resolved "https://mirrors.cloud.tencent.com/npm/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
@ -1842,14 +1776,6 @@ ini@~1.3.0:
resolved "https://mirrors.cloud.tencent.com/npm/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
is-arguments@^1.1.1:
version "1.1.1"
resolved "https://mirrors.cloud.tencent.com/npm/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
dependencies:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@ -1864,13 +1790,6 @@ is-core-module@^2.13.0:
dependencies:
hasown "^2.0.2"
is-date-object@^1.0.5:
version "1.0.5"
resolved "https://mirrors.cloud.tencent.com/npm/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
dependencies:
has-tostringtag "^1.0.0"
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@ -1903,14 +1822,6 @@ is-plain-object@^5.0.0:
resolved "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
is-regex@^1.1.4:
version "1.1.4"
resolved "https://mirrors.cloud.tencent.com/npm/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
dependencies:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
is-url@^1.2.4:
version "1.2.4"
resolved "https://mirrors.cloud.tencent.com/npm/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
@ -2329,19 +2240,6 @@ object-inspect@^1.13.1:
resolved "https://mirrors.cloud.tencent.com/npm/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
object-is@^1.1.5:
version "1.1.6"
resolved "https://mirrors.cloud.tencent.com/npm/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07"
integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
object-keys@^1.1.1:
version "1.1.1"
resolved "https://mirrors.cloud.tencent.com/npm/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@ -2368,11 +2266,6 @@ package-json-from-dist@^1.0.0:
resolved "https://mirrors.cloud.tencent.com/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
parchment@^1.1.4:
version "1.1.4"
resolved "https://mirrors.cloud.tencent.com/npm/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5"
integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://mirrors.cloud.tencent.com/npm/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
@ -2569,36 +2462,6 @@ queue-microtask@^1.2.2:
resolved "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
quill-delta@^3.6.2:
version "3.6.3"
resolved "https://mirrors.cloud.tencent.com/npm/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032"
integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==
dependencies:
deep-equal "^1.0.1"
extend "^3.0.2"
fast-diff "1.1.2"
quill-delta@^4.2.2:
version "4.2.2"
resolved "https://mirrors.cloud.tencent.com/npm/quill-delta/-/quill-delta-4.2.2.tgz#015397d046e0a3bed087cd8a51f98c11a1b8f351"
integrity sha512-qjbn82b/yJzOjstBgkhtBjN2TNK+ZHP/BgUQO+j6bRhWQQdmj2lH6hXG7+nwwLF41Xgn//7/83lxs9n2BkTtTg==
dependencies:
fast-diff "1.2.0"
lodash.clonedeep "^4.5.0"
lodash.isequal "^4.5.0"
quill@^1.3.7:
version "1.3.7"
resolved "https://mirrors.cloud.tencent.com/npm/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8"
integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
dependencies:
clone "^2.1.1"
deep-equal "^1.0.1"
eventemitter3 "^2.0.3"
extend "^3.0.2"
parchment "^1.1.4"
quill-delta "^3.6.2"
qweather-icons@^1.3.3:
version "1.6.0"
resolved "https://mirrors.cloud.tencent.com/npm/qweather-icons/-/qweather-icons-1.6.0.tgz#097676b8bbbe34e3e7c18371de8c6631d37c1e49"
@ -2674,16 +2537,6 @@ regenerator-runtime@^0.14.0:
resolved "https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
regexp.prototype.flags@^1.5.1:
version "1.5.3"
resolved "https://mirrors.cloud.tencent.com/npm/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42"
integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-errors "^1.3.0"
set-function-name "^2.0.2"
repeat-string@^1.5.2:
version "1.6.1"
resolved "https://mirrors.cloud.tencent.com/npm/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@ -2776,16 +2629,6 @@ set-function-length@^1.2.1:
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
set-function-name@^2.0.2:
version "2.0.2"
resolved "https://mirrors.cloud.tencent.com/npm/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
define-data-property "^1.1.4"
es-errors "^1.3.0"
functions-have-names "^1.2.3"
has-property-descriptors "^1.0.2"
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"