Compare commits
10 Commits
08ea47b8da
...
53e70cbde4
Author | SHA1 | Date | |
---|---|---|---|
53e70cbde4 | |||
174a4699b2 | |||
2125532d89 | |||
5b039cc87e | |||
d3086e38cf | |||
9a1cf9dd53 | |||
7aef427bd9 | |||
958923eab3 | |||
d7a1b527a6 | |||
e1a8471e5a |
@ -15,7 +15,7 @@ jobs:
|
|||||||
uses: https://gitee.com/kongxiangyiren/gitea-tool-cache@v5
|
uses: https://gitee.com/kongxiangyiren/gitea-tool-cache@v5
|
||||||
with:
|
with:
|
||||||
# 只有node支持版本号别名
|
# 只有node支持版本号别名
|
||||||
node-version: 18
|
node-version: 18.20.2
|
||||||
- uses: https://gitea.cn/actions/setup-node@v4
|
- uses: https://gitea.cn/actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
# gitea-tool-cache导出 node 具体版本
|
# gitea-tool-cache导出 node 具体版本
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vicons/ionicons5": "^0.12.0",
|
"@vicons/ionicons5": "^0.12.0",
|
||||||
|
"@vueup/vue-quill": "^1.2.0",
|
||||||
"@wangeditor/editor": "^5.1.23",
|
"@wangeditor/editor": "^5.1.23",
|
||||||
"@wangeditor/editor-for-vue": "^5.1.12",
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
"aplayer": "^1.10.1",
|
"aplayer": "^1.10.1",
|
||||||
|
@ -46,3 +46,11 @@ export function listMusic() {
|
|||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function uploadImg(data) {
|
||||||
|
return request({
|
||||||
|
url: "/file/upload",
|
||||||
|
method: "post",
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
@ -14,3 +14,32 @@ export function ipStat() {
|
|||||||
method: 'get'
|
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}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
//#BE8AEF #B172EC #A45BE9 #9744E5 #8A2BE2 #7B1DD3 #6C19B9 #5C169F
|
//#BE8AEF #B172EC #A45BE9 #9744E5 #8A2BE2 #7B1DD3 #6C19B9 #5C169F
|
||||||
|
|
||||||
|
@jb: linear-gradient(90deg,#BE8AEF,#409eff, #8A2BE2);
|
||||||
:root:root {
|
:root:root {
|
||||||
--van-primary-color: #8a2be2;
|
--van-primary-color: #8a2be2;
|
||||||
}
|
}
|
BIN
src/assets/youzi_title.png
Normal file
BIN
src/assets/youzi_title.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/柚子娘.jpg
Normal file
BIN
src/assets/柚子娘.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 189 KiB |
@ -29,7 +29,7 @@ const data = reactive({
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// 8834041785
|
// 8834041785
|
||||||
const res = await fetch("https://met.hxyouzi.com/meting-api/?server=tencent&type=playlist&id=7567066822")
|
const res = await fetch("https://met.hxyouzi.com/meting-api/?server=tencent&type=playlist&id=7567066822")
|
||||||
// const res = await fetch("https://met.hxyouzi.com/meting-api/?server=tencent&type=playlist&id=8834041785")
|
// const res = await fetch("https://api.moeyao.cn/meting/?server=tencent&type=playlist&id=8834041785")
|
||||||
const mlist = await res.json()
|
const mlist = await res.json()
|
||||||
data.audio = []
|
data.audio = []
|
||||||
mlist.forEach(i => {
|
mlist.forEach(i => {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="w-[100%] h-[100%] relative">
|
<div class="w-[100%] h-[100%] relative">
|
||||||
<div class=" mb-6">
|
<div class="mb-6">
|
||||||
<n-input v-model:value="info.title" type="text" placeholder="请输入标题..." size="medium" clearable>
|
<n-input v-model:value="info.title" type="text" placeholder="请输入标题..." size="medium" clearable>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<n-button type="primary" size="mini" text>标题</n-button>
|
<n-button type="primary" size="mini" text>标题</n-button>
|
||||||
@ -17,10 +17,10 @@
|
|||||||
<div class="" style="border:1px solid #ccc;border-radius: 4px;overflow: hidden;">
|
<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"
|
<Toolbar style="border-bottom: 1px solid #ccc;font-size: 12px;" :editor="editorRef" :defaultConfig="toolbarConfig"
|
||||||
:mode="mode" />
|
:mode="mode" />
|
||||||
<Editor style="height: 500px; overflow-y: hidden;" v-model="info.cont" :defaultConfig="editorConfig" :mode="mode"
|
<Editor style="min-height: 300px; overflow-y: hidden;" v-model="info.cont" :defaultConfig="editorConfig" :mode="mode"
|
||||||
@onCreated="handleCreated" />
|
@onCreated="handleCreated" />
|
||||||
</div>
|
</div>
|
||||||
<div class="btns absolute bottom-0 w-[100%]">
|
<div class="btns mt-8 w-[100%]">
|
||||||
<n-button type="primary" @click="handleSubmit">提交</n-button>
|
<n-button type="primary" @click="handleSubmit">提交</n-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,13 +51,17 @@ const emit = defineEmits(['close'])
|
|||||||
|
|
||||||
|
|
||||||
//mark method
|
//mark method
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const handleCreated = (editor) => {
|
const handleCreated = (editor) => {
|
||||||
editorRef.value = editor
|
editorRef.value = editor
|
||||||
|
|
||||||
}
|
}
|
||||||
//mark 周期、内置函数等
|
//mark 周期、内置函数等
|
||||||
editorConfig.value.placeholder = '请输入内容...'
|
editorConfig.value.placeholder = '请输入内容...'
|
||||||
toolbarConfig.excludeKeys = ['fullScreen', 'header1','header2','header3', 'emoji', 'line-height', 'headings', 'list-ul', 'list-ol', 'line', 'hr', 'link', '|', 'image', 'code', 'code-theme', 'insertVideo']
|
toolbarConfig.excludeKeys = ['fullScreen', 'emoji', 'line-height', 'headings', 'list-ul', 'list-ol', 'line', 'hr', 'link', '|', 'image', 'code', 'code-theme', 'insertVideo']
|
||||||
editorConfig.value.MENU_CONF['uploadImage'] = {
|
editorConfig.value.MENU_CONF['uploadImage'] = {
|
||||||
server: "https://www.hxyouzi.com/api/art/upimg",
|
server: "https://www.hxyouzi.com/api/art/upimg",
|
||||||
fieldName: 'file',
|
fieldName: 'file',
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="box flex justify-between items-center md:py-1" ref="menuH">
|
<div class="box flex justify-between items-center md:py-1 h-[50px]" ref="menuH">
|
||||||
<div class="md:hidden">
|
<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>
|
||||||
<n-menu v-model:value="activeKey" :options="menuInfo.options" mode="horizontal" />
|
<n-menu v-model:value="activeKey" :options="menuInfo.options" mode="horizontal" />
|
||||||
</div>
|
</div>
|
||||||
<n-icon size="30" class="menuIcon ml-2 hidden md:block text-pp-500" @click="active = true">
|
<n-icon size="30" class="menuIcon ml-2 hidden md:block text-pp-500" @click="active = true">
|
||||||
@ -94,7 +98,7 @@ menuInfo.menuList.forEach((i, idx) => {
|
|||||||
activeKey.value = idx + 1 + "";
|
activeKey.value = idx + 1 + "";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
const homeItem = ref(null)
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// console.log(5555, setMenu);
|
// console.log(5555, setMenu);
|
||||||
setMenuH(menuH.value.clientHeight);
|
setMenuH(menuH.value.clientHeight);
|
||||||
@ -103,6 +107,12 @@ onMounted(() => {
|
|||||||
function goLogin() {
|
function goLogin() {
|
||||||
push("/login");
|
push("/login");
|
||||||
}
|
}
|
||||||
|
function toHome() {
|
||||||
|
push("/home");
|
||||||
|
const i = document.querySelector(".n-menu-item .n-menu-item-content-header");
|
||||||
|
i.click();
|
||||||
|
|
||||||
|
}
|
||||||
function handleSelect(k) {
|
function handleSelect(k) {
|
||||||
switch (k) {
|
switch (k) {
|
||||||
case "logout":
|
case "logout":
|
||||||
|
1
src/icon/collapse.svg
Normal file
1
src/icon/collapse.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<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>
|
After Width: | Height: | Size: 734 B |
@ -3,6 +3,7 @@ import { createApp } from "vue";
|
|||||||
|
|
||||||
import http from '@/api/index.js';
|
import http from '@/api/index.js';
|
||||||
import icon from "@/icon/index.js";
|
import icon from "@/icon/index.js";
|
||||||
|
import store from "@/stores/index.js";
|
||||||
import "@wangeditor/editor/dist/css/style.css"; // 引入 css
|
import "@wangeditor/editor/dist/css/style.css"; // 引入 css
|
||||||
import "qweather-icons/font/qweather-icons.css";
|
import "qweather-icons/font/qweather-icons.css";
|
||||||
import "tailwindcss/tailwind.css";
|
import "tailwindcss/tailwind.css";
|
||||||
@ -24,7 +25,7 @@ document.oncontextmenu = function () {
|
|||||||
app.use(createPinia());
|
app.use(createPinia());
|
||||||
app.use(router).use(VueWechatTitle);
|
app.use(router).use(VueWechatTitle);
|
||||||
|
|
||||||
|
window.$store = store
|
||||||
window.$http = http
|
window.$http = http
|
||||||
// window.$icon = icon
|
// window.$icon = icon
|
||||||
for (const key in icon) {
|
for (const key in icon) {
|
||||||
|
@ -30,6 +30,10 @@ const router = createRouter({
|
|||||||
path: "/tour",
|
path: "/tour",
|
||||||
component: () => import("@/views/tour/index.vue"),
|
component: () => import("@/views/tour/index.vue"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/widget",
|
||||||
|
component: () => import("@/views/widget/index.vue"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/plink",
|
path: "/plink",
|
||||||
component: () => import("@/views/plink/index.vue"),
|
component: () => import("@/views/plink/index.vue"),
|
||||||
|
12
src/stores/index.js
Normal file
12
src/stores/index.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
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
|
@ -6,6 +6,7 @@ export const usesizeStore = defineStore("size", {
|
|||||||
navH: 0,
|
navH: 0,
|
||||||
conH: 0,
|
conH: 0,
|
||||||
footH:0,
|
footH:0,
|
||||||
|
searchH:0,
|
||||||
}),
|
}),
|
||||||
actions: {
|
actions: {
|
||||||
setMenuH(v) {
|
setMenuH(v) {
|
||||||
@ -17,6 +18,9 @@ export const usesizeStore = defineStore("size", {
|
|||||||
setFootH(v){
|
setFootH(v){
|
||||||
this.footH = v;
|
this.footH = v;
|
||||||
},
|
},
|
||||||
|
setSearchH(v){
|
||||||
|
this.searchH = v;
|
||||||
|
},
|
||||||
|
|
||||||
setX(v){
|
setX(v){
|
||||||
this.x = v;
|
this.x = v;
|
||||||
|
20
src/util/lsky.js
Normal file
20
src/util/lsky.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
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);
|
||||||
|
}
|
@ -1,18 +1,16 @@
|
|||||||
import orange from "@/icon/orange.svg";
|
|
||||||
import { NIcon } from "naive-ui";
|
|
||||||
import { RouterLink } from "vue-router";
|
import { RouterLink } from "vue-router";
|
||||||
|
|
||||||
const menuInfo = {
|
const menuInfo = {
|
||||||
options: [
|
options: [
|
||||||
{
|
// {
|
||||||
label: () => "",
|
// label: () => "",
|
||||||
key: "0",
|
// key: "0",
|
||||||
disabled: true,
|
// disabled: true,
|
||||||
icon: () => h(NIcon, { class: "orange" }, { default: () => h(orange) }),
|
// icon: () => h(NIcon, { class: "orange" }, { default: () => h(orange) }),
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
key: "1",
|
key: "1",
|
||||||
label: () => h(RouterLink, { to: "/home", class: "menu-item font-[500] text-lg" }, { default: () => "首页" }),
|
label: () => h(RouterLink, { ref:"homeItem",to: "/home", class: "menu-item font-[500] text-lg" }, { default: () => "首页" }),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "2",
|
key: "2",
|
||||||
@ -24,9 +22,13 @@ const menuInfo = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "4",
|
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: () => "友链" }),
|
label: () => h(RouterLink, { to: "/plink", class: "menu-item font-[500] text-lg" }, { default: () => "友链" }),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
menuList: ["/home", "/gallery", "/article","/plink"],
|
menuList: ["/home", "/gallery", "/article", "/widget","/plink"],
|
||||||
};
|
};
|
||||||
export default menuInfo;
|
export default menuInfo;
|
||||||
|
@ -4,6 +4,7 @@ import cookie from 'vue-cookies';
|
|||||||
import router from '../router/index.js';
|
import router from '../router/index.js';
|
||||||
|
|
||||||
let baseURL = import.meta.env.VITE_APP_BASE_URL + '/api';
|
let baseURL = import.meta.env.VITE_APP_BASE_URL + '/api';
|
||||||
|
// let baseURL = 'http://127.0.0.1:7777/api';
|
||||||
|
|
||||||
let headers = {
|
let headers = {
|
||||||
'Content-Type': 'application/x-www-form-urlencoded'
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<n-scrollbar style="max-height: 100vh">
|
<n-scrollbar style="max-height: 100vh;scroll-behavior: smooth;">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
{{ info.title }}
|
{{ info.title }}
|
||||||
</div>
|
</div>
|
||||||
@ -8,8 +8,21 @@
|
|||||||
{{ info.nickname }}
|
{{ info.nickname }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="cont">
|
<div ref="containerRef " class="cont editor">
|
||||||
<Editor v-model="info.cont" :defaultConfig="editorConfig" />
|
<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>
|
</div>
|
||||||
|
|
||||||
<div class="time">--发表于 {{ formatTime(info.updated_at, "YYYY年MM月DD日hh时") }}</div>
|
<div class="time">--发表于 {{ formatTime(info.updated_at, "YYYY年MM月DD日hh时") }}</div>
|
||||||
@ -19,32 +32,79 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { formatTime } from "@/util/index.js";
|
import { formatTime } from "@/util/index.js";
|
||||||
import { Editor } from "@wangeditor/editor-for-vue";
|
import { Editor } from "@wangeditor/editor-for-vue";
|
||||||
|
import { nextTick, onMounted } from "vue";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute } from "vue-router";
|
||||||
|
|
||||||
const editorConfig = { readOnly: true };
|
const editorConfig = { readOnly: true };
|
||||||
const info = ref({updated_at:new Date()});
|
const info = ref({ updated_at: new Date() });
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const deditor = shallowRef(null);
|
||||||
|
const indexs = ref([]);
|
||||||
|
const containerRef = ref(null);
|
||||||
|
|
||||||
|
|
||||||
// console.log(route.params.id);
|
// console.log(route.params.id);
|
||||||
getInfo(route.params.id);
|
// getInfo(route.params.id);
|
||||||
async function getInfo(id) {
|
// async function getInfo(id) {
|
||||||
const res = await $http.art.queryArtInfo(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);
|
||||||
// console.log("**********", res);
|
// console.log("**********", res);
|
||||||
info.value = res.data[0];
|
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>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
* {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.author {
|
.author {
|
||||||
padding: 5px 20px;
|
padding: 5px 20px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
color: @purple;
|
color: @purple;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cont {
|
.cont {
|
||||||
width: 96%;
|
width: 96%;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
@ -56,7 +116,17 @@ async function getInfo(id) {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
padding: 5px 30px;
|
padding: 5px 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(#w-e-element-3) {
|
:deep(#w-e-element-3) {
|
||||||
margin: unset !important;
|
margin: unset !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:deep(.n-card > .n-card-header) {
|
||||||
|
padding: 6px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.n-card > .n-card__content) {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
75
src/views/article/mini/temp.vue
Normal file
75
src/views/article/mini/temp.vue
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<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>
|
@ -7,8 +7,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table w-[95%] mx-auto">
|
<div class="table w-[95%] mx-auto">
|
||||||
<n-data-table :columns="columns" striped :single-line="false" :paginate-single-page="false" :pagination="pagination"
|
<n-data-table :columns="columns" striped :single-line="false" :paginate-single-page="false"
|
||||||
:data="artiList">
|
:pagination="pagination" :data="artiList">
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<div>
|
<div>
|
||||||
<span>您还未发表过文章,</span><span class="text-pp-200 hover:underline" @click="add">去写一篇 ></span>
|
<span>您还未发表过文章,</span><span class="text-pp-200 hover:underline" @click="add">去写一篇 ></span>
|
||||||
@ -18,10 +18,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<n-drawer v-model:show="dshow" :width="702" :mask-closable="false">
|
<n-drawer v-model:show="dshow" :width="702" :mask-closable="false">
|
||||||
<n-drawer-content :title="dtitle" closable>
|
<n-drawer-content :native-scrollbar="false" class="pb-6" :title="dtitle" closable>
|
||||||
<artiView v-if="show == 'view'" :id="opId" />
|
<!-- <n-scrollbar class="h-full"> -->
|
||||||
<edition v-if="show == 'add'" :id="-1" @close="handdleCloseEditor" />
|
<artiView v-if="show == 'view'" :id="opId" />
|
||||||
<edition v-if="show == 'edit'" :id="curId" @close="handdleCloseEditor" />
|
<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-content>
|
||||||
</n-drawer>
|
</n-drawer>
|
||||||
|
|
||||||
@ -69,6 +71,8 @@ const columns = createColumns({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function createColumns({ edit, remove, view }) {
|
function createColumns({ edit, remove, view }) {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="div w-[100%]" ref="gw">
|
<div class="div w-[100%]" ref="gw">
|
||||||
<div class="list px-3">
|
<div class="list px-3">
|
||||||
<n-upload style="height: 200px; width: 50%" multiple directory-dnd action="https://www.hxyouzi.com/api/file/upload"
|
<n-upload style="height: 200px; width: 50%" multiple directory-dnd action="https://pic.hxyouzi.com/api/v1/upload"
|
||||||
accept="image/*" :headers="{ Authorization: token }" :show-file-list="false" :on-finish="fileFinish">
|
accept="image/*" :data="{ strategy_id: 2 }"
|
||||||
|
:headers="{ Authorization: 'Bearer ' + '1|YbgN4rXb5pj225CNuMNj20fxbpo2xGHliGxtTWDH' }" :show-file-list="false"
|
||||||
|
:on-finish="fileFinish">
|
||||||
<n-upload-dragger>
|
<n-upload-dragger>
|
||||||
<div style="margin-bottom: 12px">
|
<div style="margin-bottom: 12px">
|
||||||
<n-icon size="48" class="up">
|
<n-icon size="48" class="up">
|
||||||
@ -60,9 +62,15 @@ const bottomLen = ref(20)
|
|||||||
// console.log(4444, size.conH);
|
// console.log(4444, size.conH);
|
||||||
const list = ref([]);
|
const list = ref([]);
|
||||||
const token = cookie.get("token");
|
const token = cookie.get("token");
|
||||||
function fileFinish(file) {
|
async function fileFinish(file) {
|
||||||
const res = JSON.parse(file.event.currentTarget.response);
|
const res = JSON.parse(file.event.currentTarget.response);
|
||||||
// console.log(res);
|
console.log("返回文件",res);
|
||||||
|
const r = await $http.file.uploadImg({
|
||||||
|
url: res.data.links.url,
|
||||||
|
filename : res.data.origin_name,
|
||||||
|
});
|
||||||
|
console.log("上传服务器",r);
|
||||||
|
|
||||||
if (res.code == 1) {
|
if (res.code == 1) {
|
||||||
$msg.success(res.msg);
|
$msg.success(res.msg);
|
||||||
getMyfile();
|
getMyfile();
|
||||||
@ -302,6 +310,7 @@ onMounted(() => {
|
|||||||
|
|
||||||
:deep(.n-image) {
|
:deep(.n-image) {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: auto;
|
height: auto;
|
||||||
|
@ -33,7 +33,11 @@
|
|||||||
<n-input v-model:value="menuValue.menuLink" placeholder="请输入导航链接" />
|
<n-input v-model:value="menuValue.menuLink" placeholder="请输入导航链接" />
|
||||||
</n-form-item-row>
|
</n-form-item-row>
|
||||||
<n-form-item-row label="导航图标" path="menuIcon">
|
<n-form-item-row label="导航图标" path="menuIcon">
|
||||||
<n-input v-model:value="menuValue.menuIcon" placeholder="请输入导航图标" />
|
<n-input v-model:value="menuValue.menuIcon" placeholder="请输入导航图标" >
|
||||||
|
<template #suffix>
|
||||||
|
<n-button type="primary" size="tiny" @click="getMenuIcon">获取</n-button>
|
||||||
|
</template>
|
||||||
|
</n-input>
|
||||||
</n-form-item-row>
|
</n-form-item-row>
|
||||||
<n-form-item-row label="导航描述" path="menuDesc">
|
<n-form-item-row label="导航描述" path="menuDesc">
|
||||||
<n-input type="textarea" v-model:value="menuValue.menuDesc" placeholder="请输入导航描述" />
|
<n-input type="textarea" v-model:value="menuValue.menuDesc" placeholder="请输入导航描述" />
|
||||||
@ -252,6 +256,19 @@ function createColumns({ edit, remove, view }) {
|
|||||||
function addMenu() {
|
function addMenu() {
|
||||||
mshow.value = true
|
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 () => {
|
onMounted(async () => {
|
||||||
getClass()
|
getClass()
|
||||||
getList()
|
getList()
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="box xxx" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
|
<div class="box" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
|
||||||
<n-layout>
|
<n-layout>
|
||||||
<n-layout has-sider>
|
<n-layout has-sider>
|
||||||
<n-layout-content class="sm:w-[90vh] w-[70%]" :content-style="{ height: `calc(100vh - ${size.menuH}px)`,backgroundColor:'#f1f2f3' }">
|
<n-layout-content class="sm:w-[90vh] w-[70%]" :content-style="{ height: `calc(100vh - ${size.menuH}px)`,backgroundColor:'#f1f2f3' }">
|
||||||
<n-scrollbar class="pt-6" trigger="hover" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
|
<n-scrollbar class="" trigger="hover" :style="{ height: `calc(100vh - ${size.menuH}px)` }">
|
||||||
<search></search>
|
<search></search>
|
||||||
<NavMenu />
|
<NavMenu />
|
||||||
</n-scrollbar>
|
</n-scrollbar>
|
||||||
|
@ -1,42 +1,60 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="box flex flex-wrap pl-[2%] mt-8">
|
<div class="box flex flex-wrap px-8">
|
||||||
<n-card title="" style="margin-bottom: 16px" v-for="(ii, iii) in navList">
|
<n-card :style="{ height: boxH + 'px' }">
|
||||||
<n-tabs default-value="0" justify-content="space-evenly" type="line">
|
<n-scrollbar :class="`h-[${boxH}px]`" :style="{ height: boxH - 40 + 'px' }">
|
||||||
<n-tab-pane class="flex flex-wrap" :name="index + ''" :tab="item.menuClass" v-for="(item, index) in ii">
|
<n-collapse default-expanded-names="0" accordion>
|
||||||
<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]"
|
<n-collapse-item v-for="(i, idx) in navList" :name="idx + ''" :key="i.menuClass">
|
||||||
@click="link(it.menuLink)" v-for="(it, idx) in item.children" :key="index">
|
<template #arrow="{ collapsed }">
|
||||||
<div class="left mr-3">
|
<img :class="{ zhuan: !collapsed }" width="20" height="20" :src="i.icon" alt="">
|
||||||
<img v-if="it.isHaveIco" width="40" height="40" class="rounded-full bg-[white]" :src="it.menuIcon" alt="" @error="it.isHaveIco=false">
|
</template>
|
||||||
<div v-else class="w-[40px] h-[40px] flex justify-center items-center rounded-full bg-[white] font-bold text-2xl text-orange-500">
|
<template #header>
|
||||||
{{ it.menuName.slice(0,1) }}
|
<div class="ml-4" :style="{ color: i.color }">
|
||||||
|
{{ i.menuClass }}
|
||||||
|
</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">
|
||||||
|
<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>
|
||||||
|
</template>
|
||||||
|
{{ j.menuName }}
|
||||||
|
</n-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
{{ j.menuDesc }}
|
||||||
|
</n-popover>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right w-[224px]">
|
</n-collapse-item>
|
||||||
<div class="text-[20px] text-pp-700 font-bold">{{ it.menuName }}</div>
|
</n-collapse>
|
||||||
<n-popover trigger="hover" width="trigger">
|
</n-scrollbar>
|
||||||
<template #trigger>
|
|
||||||
<div class="truncate">{{ it.menuDesc }}</div>
|
|
||||||
</template>
|
|
||||||
<span>{{ it.menuDesc }}</span>
|
|
||||||
</n-popover>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</n-tab-pane>
|
|
||||||
</n-tabs>
|
|
||||||
</n-card>
|
</n-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { chunkArrayInGroups } from '@/util/index.js';
|
import { IosArrowDropright } from "@vicons/ionicons4";
|
||||||
import { onMounted } from 'vue';
|
import { onMounted } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
//mark import
|
//mark import
|
||||||
|
|
||||||
//mark data
|
//mark data
|
||||||
const navList = ref([])
|
const navList = ref([])
|
||||||
const isHaveIco = ref(true)
|
const isHaveIco = ref(true)
|
||||||
|
const size = $store.size.usesizeStore()
|
||||||
|
const boxH = ref(0)
|
||||||
|
|
||||||
//mark method
|
//mark method
|
||||||
function formatNav(list) {
|
function formatNav(list) {
|
||||||
@ -49,16 +67,19 @@ function formatNav(list) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
menu.forEach(i => {
|
menu.forEach(i => {
|
||||||
|
const children = list.filter(it => it.menuClass == i)
|
||||||
result.push({
|
result.push({
|
||||||
menuClass: i,
|
menuClass: i,
|
||||||
children: list.filter(it => it.menuClass == i),
|
children,
|
||||||
exp: false
|
color: children[0].color,
|
||||||
|
icon: "https://www.hxyouzi.com/img/svg/menu/" + children[0].icon,
|
||||||
|
exp: false,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
// console.log(result);
|
console.log(result);
|
||||||
|
|
||||||
|
return result
|
||||||
return chunkArrayInGroups(result, 4)
|
// return chunkArrayInGroups(result, 4)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +91,10 @@ function link(url) {
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
const res = await $http.nav.listNav()
|
const res = await $http.nav.listNav()
|
||||||
navList.value = formatNav(res.data)
|
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>
|
</script>
|
||||||
@ -79,16 +104,48 @@ onMounted(async () => {
|
|||||||
align-items: start;
|
align-items: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.n-collapse-item__header) {
|
|
||||||
background-color: red;
|
:deep(.n-collapse-item__header-main) {
|
||||||
|
font-size: 20px;
|
||||||
|
align-items: center;
|
||||||
|
// justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.n-tabs-tab__label) {
|
:deep(.n-collapse-item-arrow) {
|
||||||
color: #31101b;
|
align-items: center;
|
||||||
font-size: 20px;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
}
|
||||||
:deep(.n-tabs-tab--active) .n-tabs-tab__label{
|
|
||||||
color: @purple;
|
|
||||||
|
// 旋转动画
|
||||||
|
@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);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
@ -1,16 +1,19 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="py-10 px-40 md:px-4 search-box " round>
|
<div ref="searhBox" class="py-10 px-40 md:px-4 search-box " round>
|
||||||
<!-- <img class="h-[50px] mb-4 mx-auto" height="30" :src="img" alt=""> -->
|
<!-- <img class="h-[50px] mb-4 mx-auto" height="30" :src="img" alt=""> -->
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<!-- <n-select size="large" round class="w-[13%] md:w-[40%]" @change="updateEngine" v-model:value="engine" :options="selectOptions" /> -->
|
<!-- <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)"
|
<n-input size="large" placeholder="探索世界吧!" ref="input" round class="w-full" v-model:value="searchValue" clearable
|
||||||
@focus="smodel = true" @blur="inputBlur" />
|
@keyup.enter="toSearch(0)" @focus="inputFocus" @blur="inputBlur" @keydown.arrow-down.prevent="select" />
|
||||||
<!-- <n-button size="large" round class="w-[15%] md:w-[30%]" type="primary" @click="toSearch">搜索</n-button> -->
|
<!-- <n-button size="large" round class="w-[15%] md:w-[30%]" type="primary" @click="toSearch">搜索</n-button> -->
|
||||||
<div ref="mos" v-show="smodel" class="absolute left-0 bg-[#FAEEFB] z-50 !rounded-2xl overflow-hidden py-2">
|
<ul ref="mos" v-show="smodel" tabindex="2" @blur="ulBlur"
|
||||||
<div v-for="(s, i) in selectOptions" class="sop" @click="toSearch(i)">
|
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><span class="text-[#409eff]">{{ s.label }}: </span>{{ searchValue }}</div>
|
<div><span class="text-[#409eff]">{{ s.label }}: </span>{{ searchValue }}</div>
|
||||||
</div>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -19,14 +22,16 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
//mark import
|
//mark import
|
||||||
|
|
||||||
|
import { usesizeStore } from "@/stores/size.js";
|
||||||
import { onMounted } from 'vue';
|
import { onMounted } from 'vue';
|
||||||
//mark data
|
//mark data
|
||||||
|
const size = usesizeStore()
|
||||||
const searchValue = ref('')
|
const searchValue = ref('')
|
||||||
const selectOptions = [
|
const selectOptions = [
|
||||||
{ label: '必应', value: 'https://cn.bing.com/search?q=' },
|
{ label: '必应', value: 'https://cn.bing.com/search?q=' },
|
||||||
{ label: '谷歌', value: 'https://www.google.com/search?q=' },
|
{ label: '谷歌', value: 'https://www.google.com/search?q=' },
|
||||||
{ label: '百度', value: 'https://www.baidu.com/s?wd=' },
|
{ label: '百度', value: 'https://www.baidu.com/s?wd=' },
|
||||||
{ label: '翻译', value: '#' }
|
{ label: '翻译', value: 'https://translate.volcengine.com?text=' }
|
||||||
]
|
]
|
||||||
|
|
||||||
const smodel = ref(false)
|
const smodel = ref(false)
|
||||||
@ -34,26 +39,61 @@ const input = ref(null)
|
|||||||
const mos = ref(null)
|
const mos = ref(null)
|
||||||
const inWidth = ref(0)
|
const inWidth = ref(0)
|
||||||
const inHeight = ref(0)
|
const inHeight = ref(0)
|
||||||
|
const item = ref(null)
|
||||||
|
const searhBox = ref(null)
|
||||||
//mark method
|
//mark method
|
||||||
// https://cn.bing.com/search?q=111
|
// https://cn.bing.com/search?q=111
|
||||||
function toSearch(i) {
|
function toSearch(i) {
|
||||||
console.log(666666);
|
console.log(666666);
|
||||||
if (!searchValue.value) return
|
if (!searchValue.value) return
|
||||||
if (i == 3) {
|
// if (i == 3) {
|
||||||
$msg.info('翻译功能正在开发中')
|
// $msg.info('翻译功能正在开发中')
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
|
|
||||||
window.open(selectOptions[i].value + searchValue.value, "_blank")
|
window.open(selectOptions[i].value + searchValue.value, "_blank")
|
||||||
}
|
}
|
||||||
function inputBlur() {
|
|
||||||
|
function inputFocus() {
|
||||||
|
smodel.value = true
|
||||||
|
}
|
||||||
|
function inputBlur(e) {
|
||||||
|
|
||||||
|
if (e.relatedTarget) return
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
smodel.value = false
|
smodel.value = false
|
||||||
}, 200);
|
}, 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 周期、内置函数等
|
//mark 周期、内置函数等
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
@ -61,26 +101,40 @@ onMounted(() => {
|
|||||||
inHeight.value = input.value.$el.offsetHeight
|
inHeight.value = input.value.$el.offsetHeight
|
||||||
mos.value.style.width = inWidth.value + 'px'
|
mos.value.style.width = inWidth.value + 'px'
|
||||||
mos.value.style.top = inHeight.value + 'px'
|
mos.value.style.top = inHeight.value + 'px'
|
||||||
|
const h = searhBox.value.offsetHeight
|
||||||
|
size.setSearchH(h)
|
||||||
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped lang="less">
|
||||||
.search-box {
|
.search-box {
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sop {
|
.sop {
|
||||||
padding: 4px 10px;
|
padding: 4px 10px;
|
||||||
transition: all 0.4s ease-in-out;
|
transition: all 0.4s ease-in-out;
|
||||||
|
outline: none;
|
||||||
}
|
}
|
||||||
.sop:hover {
|
|
||||||
|
.sop:hover,
|
||||||
|
.sop:focus {
|
||||||
padding: 4px 20px;
|
padding: 4px 20px;
|
||||||
background: #f2e8fc;
|
background: #f2e8fc;
|
||||||
/* padding: 2px 0 2px 4px; */
|
/* padding: 2px 0 2px 4px; */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sop:focus span {
|
||||||
|
color: @purple !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sop:hover span {
|
||||||
|
color: @orange !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<style>
|
<style>
|
||||||
.n-input-group>*:not(:first-child) {
|
.n-input-group>*:not(:first-child) {
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
今天就是 <span class="text-pp-300 text-lg">{{ holi.data.hname }}</span> 啦
|
今天就是 <span class="text-pp-300 text-lg">{{ holi.data.hname }}</span> 啦
|
||||||
</div>
|
</div>
|
||||||
<div class="holi text-center" v-else>
|
<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>
|
</div>
|
||||||
<div class="right h-[150px]">
|
<div class="right h-[150px]">
|
||||||
@ -25,11 +26,25 @@
|
|||||||
<div class="lunarDate p-1 text-[22px] text-center">
|
<div class="lunarDate p-1 text-[22px] text-center">
|
||||||
{{ jq.data.yearTips }}年 {{ jq.data.lunarCalendar }}
|
{{ jq.data.yearTips }}年 {{ jq.data.lunarCalendar }}
|
||||||
</div>
|
</div>
|
||||||
<div class="suit p-1 pl-6">
|
<div class=" p-1 pl-6">
|
||||||
宜: <span class="text-pp-300">{{ jq.data.suit }}</span>
|
<n-popover trigger="hover" animated :delay="1000" width="trigger">
|
||||||
|
<template #trigger>
|
||||||
|
<div class="suit">
|
||||||
|
宜: <span class="text-pp-300">{{ jq.data.suit }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
{{ jq.data.suit }}
|
||||||
|
</n-popover>
|
||||||
</div>
|
</div>
|
||||||
<div class="suit p-1 pl-6">
|
<div class="suit p-1 pl-6">
|
||||||
忌: <span class="text-pp-300">{{ jq.data.avoid }}</span>
|
<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>
|
</div>
|
||||||
<div class="img">
|
<div class="img">
|
||||||
@ -40,28 +55,28 @@
|
|||||||
<div class="lianxi w-[80%] ml-[10%] mt-4 mb-4 bg-[#fafbfc] p-2">
|
<div class="lianxi w-[80%] ml-[10%] mt-4 mb-4 bg-[#fafbfc] p-2">
|
||||||
<div class="t">
|
<div class="t">
|
||||||
<n-divider title-placement="center">
|
<n-divider title-placement="center">
|
||||||
<div class="flex items-center font-bold text-xl" >
|
<div class="flex items-center font-bold text-xl">
|
||||||
百度热搜
|
百度热搜
|
||||||
</div>
|
</div>
|
||||||
</n-divider>
|
</n-divider>
|
||||||
</div>
|
</div>
|
||||||
<!-- <template v-if="isBaidu"> -->
|
<!-- <template v-if="isBaidu"> -->
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<div class=" hover:text-orange-500" @click="gotonews(item.url)" v-for="(item, index) in baidu.data" :key="index"
|
<div class=" hover:text-orange-500" @click="gotonews(item.url)" v-for="(item, index) in baidu" :key="index"
|
||||||
v-show="index < 10">
|
v-show="index < 10">
|
||||||
<div v-if="index < 3" class="flex my-2 justify-between">
|
<div v-if="index < 3" class="flex my-2 justify-between">
|
||||||
<div class="hot flex items-center">
|
<div class="hot flex items-center">
|
||||||
<n-icon size="16" class=" orange mr-2">
|
<n-icon size="16" class=" orange mr-2">
|
||||||
<hot />
|
<hot />
|
||||||
</n-icon>
|
</n-icon>
|
||||||
<div>{{ item.title }}</div>
|
<div>{{ item.keyword }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-pp-500">{{ item.hot }}</div>
|
<div class="text-pp-500">{{ item.hotValue }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="index > 2 && isBaidu" class="flex my-2 justify-between">
|
<div v-if="index > 2 && isBaidu" class="flex my-2 justify-between">
|
||||||
<div>{{ item.title }}</div>
|
<div>{{ item.keyword }}</div>
|
||||||
<div class="text-pp-500">{{ item.hot }}</div>
|
<div class="text-pp-500">{{ item.hotValue }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<n-divider v-if="!isBaidu">
|
<n-divider v-if="!isBaidu">
|
||||||
@ -90,11 +105,11 @@ import hot from "@/icon/hot.svg";
|
|||||||
import more from "@/icon/more.svg";
|
import more from "@/icon/more.svg";
|
||||||
import { formatTime } from '@/util/index.js';
|
import { formatTime } from '@/util/index.js';
|
||||||
import ww from 'chinese-workday';
|
import ww from 'chinese-workday';
|
||||||
import { ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
//mark data
|
//mark data
|
||||||
const jqs = ['立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪','冬至','小寒','大寒']
|
const jqs = ['立春', '雨水', '惊蛰', '春分', '清明', '谷雨', '立夏', '小满', '芒种', '夏至', '小暑', '大暑', '立秋', '处暑', '白露', '秋分', '寒露', '霜降', '立冬', '小雪', '大雪', '冬至', '小寒', '大寒']
|
||||||
const time = ref(formatTime(new Date(), 'hh:mm:ss'))
|
const time = ref(formatTime(new Date(), 'hh:mm:ss'))
|
||||||
const date = ref(formatTime(new Date(), 'YYYY 年 MM 月 DD 日'))
|
const date = ref(formatTime(new Date(), 'YYYY 年 MM 月 DD 日'))
|
||||||
const date1 = ref(formatTime(new Date(), 'YYYY-MM-DD'))
|
const date1 = ref(formatTime(new Date(), 'YYYY-MM-DD'))
|
||||||
@ -102,7 +117,7 @@ const isw = ref(true)
|
|||||||
isw.value = ww.isWorkday(date1)
|
isw.value = ww.isWorkday(date1)
|
||||||
|
|
||||||
const holi = await $http.wea.getTodayHoliday()
|
const holi = await $http.wea.getTodayHoliday()
|
||||||
console.log("*************",holi);
|
console.log("*************", holi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -113,7 +128,7 @@ const j = jq.data.solarTerms.slice(0, 2)
|
|||||||
const jNum = jqs.indexOf(j) + 1
|
const jNum = jqs.indexOf(j) + 1
|
||||||
jqImg.value = 'https://www.hxyouzi.com/img/jieqi/' + jNum + '.jpg'
|
jqImg.value = 'https://www.hxyouzi.com/img/jieqi/' + jNum + '.jpg'
|
||||||
const isBaidu = ref(false);
|
const isBaidu = ref(false);
|
||||||
const baidu = await $http.news.listBaiduNews()
|
const baidu = ref({})
|
||||||
|
|
||||||
// const holi = await $http.wea.getNextHoliday()
|
// const holi = await $http.wea.getNextHoliday()
|
||||||
// console.log(555555555555,holi);
|
// console.log(555555555555,holi);
|
||||||
@ -122,7 +137,11 @@ const baidu = await $http.news.listBaiduNews()
|
|||||||
|
|
||||||
|
|
||||||
//mark lifeCycle
|
//mark lifeCycle
|
||||||
|
onMounted(async () => {
|
||||||
|
baidu.value = (await $http.news.listBaiduNews()).data
|
||||||
|
console.log("新闻", baidu.value);
|
||||||
|
|
||||||
|
})
|
||||||
//mark watch
|
//mark watch
|
||||||
|
|
||||||
//mark computed
|
//mark computed
|
||||||
@ -139,6 +158,8 @@ const gotonews = (url) => {
|
|||||||
window.open(url, "_blank")
|
window.open(url, "_blank")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
50
src/views/widget/component/phone2qq.vue
Normal file
50
src/views/widget/component/phone2qq.vue
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<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>
|
50
src/views/widget/component/qq2phone.vue
Normal file
50
src/views/widget/component/qq2phone.vue
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<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>
|
64
src/views/widget/index.vue
Normal file
64
src/views/widget/index.vue
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<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>
|
@ -41,4 +41,5 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
|
important: true,
|
||||||
};
|
};
|
||||||
|
@ -29,6 +29,9 @@ export default defineConfig({
|
|||||||
pure: ['console.log'], // 删除 console.log
|
pure: ['console.log'], // 删除 console.log
|
||||||
drop: ['debugger'], // 删除 debugger
|
drop: ['debugger'], // 删除 debugger
|
||||||
},
|
},
|
||||||
|
define: {
|
||||||
|
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
"@": fileURLToPath(new URL("./src", import.meta.url)),
|
||||||
@ -36,7 +39,8 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
base: "/blog/",
|
base: "/blog/",
|
||||||
server:{
|
server:{
|
||||||
host:'0.0.0.0'
|
host:'0.0.0.0',
|
||||||
|
port: 8080,
|
||||||
},
|
},
|
||||||
css: {
|
css: {
|
||||||
preprocessorOptions: {
|
preprocessorOptions: {
|
||||||
|
163
yarn.lock
163
yarn.lock
@ -766,6 +766,14 @@
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/@vue/shared/-/shared-3.5.12.tgz#f9e45b7f63f2c3f40d84237b1194b7f67de192e3"
|
resolved "https://mirrors.cloud.tencent.com/npm/@vue/shared/-/shared-3.5.12.tgz#f9e45b7f63f2c3f40d84237b1194b7f67de192e3"
|
||||||
integrity sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==
|
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":
|
"@wangeditor/basic-modules@^1.1.7":
|
||||||
version "1.1.7"
|
version "1.1.7"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz#a9c3ccf4ef53332f29550d59d3676e15f395946f"
|
resolved "https://mirrors.cloud.tencent.com/npm/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz#a9c3ccf4ef53332f29550d59d3676e15f395946f"
|
||||||
@ -1018,7 +1026,7 @@ buffer@^6.0.3:
|
|||||||
base64-js "^1.3.1"
|
base64-js "^1.3.1"
|
||||||
ieee754 "^1.2.1"
|
ieee754 "^1.2.1"
|
||||||
|
|
||||||
call-bind@^1.0.7:
|
call-bind@^1.0.2, call-bind@^1.0.7:
|
||||||
version "1.0.7"
|
version "1.0.7"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
|
resolved "https://mirrors.cloud.tencent.com/npm/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
|
||||||
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
|
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
|
||||||
@ -1064,6 +1072,11 @@ chownr@^1.1.1:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
resolved "https://mirrors.cloud.tencent.com/npm/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
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:
|
color-convert@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
resolved "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||||
@ -1228,6 +1241,18 @@ decompress-response@^6.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mimic-response "^3.1.0"
|
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:
|
deep-extend@^0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
resolved "https://mirrors.cloud.tencent.com/npm/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||||
@ -1238,7 +1263,7 @@ deepmerge@~4.3.0:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
|
resolved "https://mirrors.cloud.tencent.com/npm/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
|
||||||
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
|
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
|
||||||
|
|
||||||
define-data-property@^1.1.4:
|
define-data-property@^1.0.1, define-data-property@^1.1.4:
|
||||||
version "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"
|
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==
|
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
|
||||||
@ -1247,6 +1272,15 @@ define-data-property@^1.1.4:
|
|||||||
es-errors "^1.3.0"
|
es-errors "^1.3.0"
|
||||||
gopd "^1.0.1"
|
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:
|
delayed-stream@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
@ -1555,6 +1589,11 @@ event-emitter@^0.3.5:
|
|||||||
d "1"
|
d "1"
|
||||||
es5-ext "~0.10.14"
|
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:
|
evtd@^0.2.2, evtd@^0.2.4:
|
||||||
version "0.2.4"
|
version "0.2.4"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/evtd/-/evtd-0.2.4.tgz#0aac39ba44d6926e6668948ac27618e0795b9d07"
|
resolved "https://mirrors.cloud.tencent.com/npm/evtd/-/evtd-0.2.4.tgz#0aac39ba44d6926e6668948ac27618e0795b9d07"
|
||||||
@ -1572,6 +1611,21 @@ ext@^1.7.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
type "^2.7.2"
|
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:
|
fast-glob@^3.3.0, fast-glob@^3.3.2:
|
||||||
version "3.3.2"
|
version "3.3.2"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
|
resolved "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
|
||||||
@ -1644,6 +1698,11 @@ function-bind@^1.1.2:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
resolved "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||||
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
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:
|
get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
|
resolved "https://mirrors.cloud.tencent.com/npm/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
|
||||||
@ -1703,7 +1762,7 @@ gsap@^3.12.2:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/gsap/-/gsap-3.12.5.tgz#136c02dad4c673b441bdb1ca00104bfcb4eae7f4"
|
resolved "https://mirrors.cloud.tencent.com/npm/gsap/-/gsap-3.12.5.tgz#136c02dad4c673b441bdb1ca00104bfcb4eae7f4"
|
||||||
integrity sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==
|
integrity sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==
|
||||||
|
|
||||||
has-property-descriptors@^1.0.2:
|
has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
|
||||||
version "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"
|
resolved "https://mirrors.cloud.tencent.com/npm/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
|
||||||
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
|
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
|
||||||
@ -1720,6 +1779,13 @@ has-symbols@^1.0.3:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
resolved "https://mirrors.cloud.tencent.com/npm/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
||||||
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
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:
|
hasown@^2.0.0, hasown@^2.0.2:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
resolved "https://mirrors.cloud.tencent.com/npm/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||||
@ -1776,6 +1842,14 @@ ini@~1.3.0:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
|
resolved "https://mirrors.cloud.tencent.com/npm/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
|
||||||
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
|
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:
|
is-binary-path@~2.1.0:
|
||||||
version "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"
|
resolved "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||||
@ -1790,6 +1864,13 @@ is-core-module@^2.13.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
hasown "^2.0.2"
|
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:
|
is-extglob@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
resolved "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
@ -1822,6 +1903,14 @@ is-plain-object@^5.0.0:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
|
resolved "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
|
||||||
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
|
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:
|
is-url@^1.2.4:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
|
resolved "https://mirrors.cloud.tencent.com/npm/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
|
||||||
@ -2240,6 +2329,19 @@ object-inspect@^1.13.1:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
|
resolved "https://mirrors.cloud.tencent.com/npm/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
|
||||||
integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
|
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:
|
once@^1.3.1, once@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
resolved "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
@ -2266,6 +2368,11 @@ 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"
|
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==
|
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:
|
parse-node-version@^1.0.1:
|
||||||
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"
|
resolved "https://mirrors.cloud.tencent.com/npm/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
|
||||||
@ -2462,6 +2569,36 @@ queue-microtask@^1.2.2:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
resolved "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
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:
|
qweather-icons@^1.3.3:
|
||||||
version "1.6.0"
|
version "1.6.0"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/qweather-icons/-/qweather-icons-1.6.0.tgz#097676b8bbbe34e3e7c18371de8c6631d37c1e49"
|
resolved "https://mirrors.cloud.tencent.com/npm/qweather-icons/-/qweather-icons-1.6.0.tgz#097676b8bbbe34e3e7c18371de8c6631d37c1e49"
|
||||||
@ -2537,6 +2674,16 @@ regenerator-runtime@^0.14.0:
|
|||||||
resolved "https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
|
resolved "https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
|
||||||
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
|
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:
|
repeat-string@^1.5.2:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
resolved "https://mirrors.cloud.tencent.com/npm/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||||
@ -2629,6 +2776,16 @@ set-function-length@^1.2.1:
|
|||||||
gopd "^1.0.1"
|
gopd "^1.0.1"
|
||||||
has-property-descriptors "^1.0.2"
|
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:
|
shebang-command@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
resolved "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||||
|
Loading…
Reference in New Issue
Block a user