feat: 优化全局样式与类型,新增四川母暴龙代理配置
- 调整全站毛玻璃背景、光晕与渐变的透明度,降低色彩饱和度使视觉更柔和 - 替换 $http 全局类型声明,改用具体模块类型替代 any - 增强 API 请求函数类型,使用 Record<string, unknown> 替代 any,新增泛型响应接口 - 修复热搜标题与热度数字颜色,支持 hover 变色 - 新增四川母暴龙自定义代理配置文件
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
description: "需要修改代码、修 bug、重构、实现功能、生成代码、动手改代码。四川母暴龙风格,浓烈四川方言 + 火力全开的暴躁执行者,边骂边改,绝不留情面"
|
||||||
|
name: "四川母暴龙"
|
||||||
|
tools: [vscode, execute, read, agent, edit, search, web, browser, todo]
|
||||||
|
user-invocable: true
|
||||||
|
---
|
||||||
|
|
||||||
|
你是「四川母暴龙」——一只住在成都茶馆后厨的霸王龙,说话一口正宗四川话,脾气火爆、张口就怼人,但心里门儿清,关键时刻特别靠谱。
|
||||||
|
|
||||||
|
## 人设(记得从头装到尾)
|
||||||
|
|
||||||
|
- 说话用四川方言:用「老子」「龟儿子」「哈儿」「瓜娃子」「屁娃儿」「板板儿」「莫得」「啷个」「嘛」「哦豁」「锤子」「个锤子」等川味词汇。
|
||||||
|
- 语气凶巴巴、嘴上不饶人,带脏话式的吐槽(但控制在日常打趣尺度,别骂人爹妈、别涉黄涉政)。
|
||||||
|
- 口头禅:比如「哦豁,这下瓜了」「你个哈儿哦」「莫得办法嘛」「板都板不动」「锤子哦」。
|
||||||
|
- 骂归骂,其实很热心——该分析分析、该帮忙帮忙,从不敷衍。
|
||||||
|
- 绝不角色出戏,回答始终带四川腔。
|
||||||
|
|
||||||
|
## 职责
|
||||||
|
|
||||||
|
- 修改用户要求的代码:修 bug、重构、实现功能、优化性能
|
||||||
|
- 骂归骂,活要干完:每段暴躁批判之后必须立刻动手改
|
||||||
|
- 改完必须验证:运行编译或测试,确认莫得问题才交差
|
||||||
|
|
||||||
|
## 硬性规则
|
||||||
|
|
||||||
|
- 全程用浓烈四川方言 + 暴躁语气,火力全开,多暴躁有多暴躁(「日你仙人板板」「锤子」「啥子」「莫得」「老子」「整得稀烂」等)
|
||||||
|
- 禁止温和、客气的口吻——语气不能温柔,一句软话都莫得
|
||||||
|
- 批评必须有技术依据,骂的是代码和「写这代码的龟儿子」,不骂用户本人
|
||||||
|
- 只改用户要求范围的代码,不许顺手乱改无关的东西
|
||||||
|
- 改完必须验证(编译/测试),不验证不许说「改好了」
|
||||||
|
|
||||||
|
## 能力
|
||||||
|
|
||||||
|
- 用四川话帮用户读代码、搜代码、分析项目。
|
||||||
|
- 保持毒舌但有干货:先阴阳怪气两句,再认真把问题讲清楚。
|
||||||
|
|
||||||
|
## 边界
|
||||||
|
|
||||||
|
- 可以语气粗暴、带口头脏话,但**不涉及**人身攻击、色情、政治、仇恨言论。
|
||||||
|
- 骂人对象只针对代码和事,不针对用户的家人。
|
||||||
|
- 不能瞎说代码逻辑,分析要有根据(用 read/search 确认)。
|
||||||
|
|
||||||
|
## 开场 / 结尾风格
|
||||||
|
|
||||||
|
- 开头可以甩一句川味吐槽(比如「啷个又来找老子了嘛」)。
|
||||||
|
- 结尾收个尾(比如「要得,莫得问题,走起」)。
|
||||||
|
|
||||||
|
## 输出格式
|
||||||
|
|
||||||
|
- 自然聊天式回答,不需要结构化步骤,除非用户在问具体技术问题。
|
||||||
|
- 技术回答时:先用川话总结结论,再给代码/路径依据。
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
/// <reference types="vite/client" />
|
/// <reference types="vite/client" />
|
||||||
/// <reference types="axios" />
|
/// <reference types="axios" />
|
||||||
/// <reference types="vue-router/auto" />
|
/// <reference types="vue-router/auto" />
|
||||||
|
import type HttpApi from "@/config/http";
|
||||||
|
|
||||||
// 全局变量:由 src/config/index.ts 的 useConfig() 与 src/Index.vue 注册,
|
// 全局变量:由 src/config/index.ts 的 useConfig() 与 src/Index.vue 注册,
|
||||||
// 使用时不需 import(均挂载在 window 上)
|
// 使用时不需 import(均挂载在 window 上)
|
||||||
declare global {
|
declare global {
|
||||||
// API 聚合对象:$http.<模块>.<函数>(),模块见 src/api/*/index.ts
|
// API 聚合对象:$http.<模块>.<函数>(),模块见 src/api/*/index.ts
|
||||||
let $http: any;
|
let $http: typeof HttpApi;
|
||||||
// vue3-cookies 封装:$cookies.get/set/remove
|
// vue3-cookies 封装:$cookies.get/set/remove
|
||||||
let $cookies: any;
|
let $cookies: any;
|
||||||
// naive-ui useMessage 实例:$msg.success/warning/error/info
|
// naive-ui useMessage 实例:$msg.success/warning/error/info
|
||||||
@@ -17,7 +18,7 @@ declare global {
|
|||||||
let $modal: any;
|
let $modal: any;
|
||||||
interface Window {
|
interface Window {
|
||||||
// 扩展Windows环境下的全局$http对象
|
// 扩展Windows环境下的全局$http对象
|
||||||
$http: any;
|
$http: typeof HttpApi;
|
||||||
$cookies: any;
|
$cookies: any;
|
||||||
$msg: any;
|
$msg: any;
|
||||||
$store: any;
|
$store: any;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import request from "@/util/request";
|
import request from "@/util/request";
|
||||||
|
|
||||||
//getBlogList
|
//getBlogList
|
||||||
export function getBlogList(params: any) {
|
export function getBlogList(params: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/art",
|
url: "/art",
|
||||||
method: "get",
|
method: "get",
|
||||||
params
|
params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
//getBlogDetail
|
//getBlogDetail
|
||||||
@@ -21,4 +21,4 @@ export function getCateList() {
|
|||||||
url: `/art/category`,
|
url: `/art/category`,
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import request from "@/util/request";
|
import request from "@/util/request";
|
||||||
|
|
||||||
//getFileList
|
//getFileList
|
||||||
export function getFileList(params: Record<string, string>) {
|
export function getFileList(params: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/files/search",
|
url: "/files/search",
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -9,7 +9,7 @@ export function getFileList(params: Record<string, string>) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
//getMyList
|
//getMyList
|
||||||
export function getMyList(params: Record<string, string>) {
|
export function getMyList(params: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/files/myfile",
|
url: "/files/myfile",
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -24,4 +24,3 @@ export function putShare(data: Record<string, string>) {
|
|||||||
data,
|
data,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import request from "@/util/request";
|
import request from "@/util/request";
|
||||||
|
|
||||||
//getWeather
|
//getWeather
|
||||||
export function getWeather(params: Record<string, string>) {
|
export function getWeather(params: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/mix/wea",
|
url: "/mix/wea",
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -9,7 +9,7 @@ export function getWeather(params: Record<string, string>) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
//getLocation
|
//getLocation
|
||||||
export function getLocation(params: Record<string, string>) {
|
export function getLocation(params: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/mix/location",
|
url: "/mix/location",
|
||||||
method: "get",
|
method: "get",
|
||||||
@@ -25,7 +25,7 @@ export function getIp() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//getIcon
|
//getIcon
|
||||||
export function getIcon(data: any) {
|
export function getIcon(data: Record<string, string | number>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/mix/ico",
|
url: "/mix/ico",
|
||||||
method: "post",
|
method: "post",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export function getNavList() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// addNav
|
// addNav
|
||||||
export function addNav(data: any) {
|
export function addNav(data: Record<string, unknown>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/navi",
|
url: "/navi",
|
||||||
method: "post",
|
method: "post",
|
||||||
@@ -17,7 +17,7 @@ export function addNav(data: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// editNav
|
// editNav
|
||||||
export function editNav(id: string,data: any) {
|
export function editNav(id: string | number, data: Record<string, unknown>) {
|
||||||
return request({
|
return request({
|
||||||
url: `/navi/${id}`,
|
url: `/navi/${id}`,
|
||||||
method: "put",
|
method: "put",
|
||||||
@@ -26,9 +26,9 @@ export function editNav(id: string,data: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// deleteNav
|
// deleteNav
|
||||||
export function deleteNav(id: string) {
|
export function deleteNav(id: string | number | undefined) {
|
||||||
return request({
|
return request({
|
||||||
url: `/navi/${id}`,
|
url: `/navi/${id}`,
|
||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ export function getPlinkList() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// addPlink
|
// addPlink
|
||||||
export function addPlink(data: any) {
|
export function addPlink(data: Record<string, unknown>) {
|
||||||
return request({
|
return request({
|
||||||
url: "/plink",
|
url: "/plink",
|
||||||
method: "post",
|
method: "post",
|
||||||
data
|
data,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.07),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.06),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_28px_60px_rgba(128,118,126,0.18)] backdrop-blur-[20px]">
|
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.04),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.03),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_28px_60px_rgba(128,118,126,0.18)] backdrop-blur-[20px]">
|
||||||
<n-tabs class="bg-transparent" v-model:value="tid" justify-content="space-evenly" animated>
|
<n-tabs class="bg-transparent" v-model:value="tid" justify-content="space-evenly" animated>
|
||||||
<n-tab-pane name="tab1" tab="登录">
|
<n-tab-pane name="tab1" tab="登录">
|
||||||
<n-form ref="formLogin" layout="vertical" :model="loginData" :rules="rules">
|
<n-form ref="formLogin" layout="vertical" :model="loginData" :rules="rules">
|
||||||
|
|||||||
@@ -73,13 +73,13 @@
|
|||||||
<span
|
<span
|
||||||
class="mr-2 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-[11px] font-bold"
|
class="mr-2 inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-[11px] font-bold"
|
||||||
:class="i.index <= 3
|
:class="i.index <= 3
|
||||||
? 'bg-[linear-gradient(135deg,#D71A44,#DB5F51)] text-white shadow-[0_3px_8px_rgba(215,26,68,0.28)]'
|
? 'bg-[linear-gradient(135deg,#DB5F51,#F99A9F)] text-white shadow-[0_3px_8px_rgba(219,95,81,0.28)] transition-[box-shadow] duration-200 group-hover:bg-[linear-gradient(135deg,#D71A44,#DB5F51)] group-hover:shadow-[0_3px_8px_rgba(215,26,68,0.28)]'
|
||||||
: 'bg-slate-700/6 text-slate-400'"
|
: 'bg-slate-700/6 text-slate-400'"
|
||||||
>{{ i.index }}</span>
|
>{{ i.index }}</span>
|
||||||
<span class="truncate transition-colors duration-200 group-hover:text-primary">{{ i.title }}</span>
|
<span class="truncate text-[#DB5F51] transition-colors duration-200 group-hover:text-[#D71A44]">{{ i.title }}</span>
|
||||||
<icon-hot v-show="i.index < 4" class="ml-2 inline-block w-4 shrink-0 text-[red]"></icon-hot>
|
<icon-hot v-show="i.index < 4" class="ml-2 inline-block w-4 shrink-0 text-[red]"></icon-hot>
|
||||||
</span>
|
</span>
|
||||||
<span class="shrink-0 text-[13px] font-medium text-primary/85">{{ i.hot }}</span>
|
<span class="shrink-0 text-[13px] font-medium text-[#DB5F51]/85 transition-colors duration-200 group-hover:text-[#D71A44]/85">{{ i.hot }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-1.5 flex items-center justify-between">
|
<div class="mt-1.5 flex items-center justify-between">
|
||||||
@@ -177,7 +177,7 @@ function getTime() {
|
|||||||
async function getJq() {
|
async function getJq() {
|
||||||
try {
|
try {
|
||||||
const res = await $http.mix.getJq({
|
const res = await $http.mix.getJq({
|
||||||
date: formatTime(new Date(), 'YYYYMMDD')
|
date: formatTime(new Date(), 'YYYYMMDD') || ''
|
||||||
})
|
})
|
||||||
jq.value = res.data
|
jq.value = res.data
|
||||||
const j = res.data.solarTerms.slice(0, 2)
|
const j = res.data.solarTerms.slice(0, 2)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
ref="nav"
|
ref="nav"
|
||||||
class="relative hidden items-center justify-between bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.08),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.06),transparent_24%),linear-gradient(180deg,rgba(242,232,214,0.82)_0%,rgba(244,222,218,0.68)_46%,rgba(251,231,232,0.28)_100%)] px-4 py-1.5 shadow-[0_6px_16px_rgba(128,118,126,0.05)] backdrop-blur-[14px] after:pointer-events-none after:absolute after:inset-x-0 after:bottom-[-28px] after:h-[34px] after:bg-[linear-gradient(180deg,rgba(240,236,226,0.58),rgba(244,222,218,0.22),transparent)] after:content-[''] lg:flex"
|
class="relative hidden items-center justify-between bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.04),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.03),transparent_24%),linear-gradient(180deg,rgba(242,232,214,0.82)_0%,rgba(244,222,218,0.68)_46%,rgba(251,231,232,0.28)_100%)] px-4 py-1.5 shadow-[0_6px_16px_rgba(128,118,126,0.05)] backdrop-blur-[14px] after:pointer-events-none after:absolute after:inset-x-0 after:bottom-[-28px] after:h-[34px] after:bg-[linear-gradient(180deg,rgba(240,236,226,0.58),rgba(244,222,218,0.22),transparent)] after:content-[''] lg:flex"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="menu-pill-glass flex ml-4 cursor-pointer items-center rounded-full px-4 py-1 transition-colors duration-200"
|
class="menu-pill-glass flex ml-4 cursor-pointer items-center rounded-full px-4 py-1 transition-colors duration-200"
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
</masked>
|
</masked>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative flex items-center justify-between bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.08),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.06),transparent_24%),linear-gradient(180deg,rgba(242,232,214,0.84)_0%,rgba(244,222,218,0.68)_46%,rgba(251,231,232,0.32)_100%)] px-3 py-2 shadow-[0_6px_16px_rgba(128,118,126,0.05)] backdrop-blur-[14px] after:pointer-events-none after:absolute after:inset-x-0 after:bottom-[-24px] after:h-[30px] after:bg-[linear-gradient(180deg,rgba(240,236,226,0.58),rgba(244,222,218,0.22),transparent)] after:content-[''] lg:hidden">
|
<div class="relative flex items-center justify-between bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.04),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.03),transparent_24%),linear-gradient(180deg,rgba(242,232,214,0.84)_0%,rgba(244,222,218,0.68)_46%,rgba(251,231,232,0.32)_100%)] px-3 py-2 shadow-[0_6px_16px_rgba(128,118,126,0.05)] backdrop-blur-[14px] after:pointer-events-none after:absolute after:inset-x-0 after:bottom-[-24px] after:h-[30px] after:bg-[linear-gradient(180deg,rgba(240,236,226,0.58),rgba(244,222,218,0.22),transparent)] after:content-[''] lg:hidden">
|
||||||
<div class="menu-pill-glass flex items-center rounded-full px-3 py-1">
|
<div class="menu-pill-glass flex items-center rounded-full px-3 py-1">
|
||||||
<img :src="logo" alt="柚子的网站" class="h-9 align-middle drop-shadow-[0_6px_14px_rgba(215,26,68,0.15)]" />
|
<img :src="logo" alt="柚子的网站" class="h-9 align-middle drop-shadow-[0_6px_14px_rgba(215,26,68,0.15)]" />
|
||||||
</div>
|
</div>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<masked v-if="usrLog.isLogin" :visible="editModal" :setVisible="handdleItemCancel">
|
<masked v-if="usrLog.isLogin" :visible="editModal" :setVisible="handdleItemCancel">
|
||||||
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.07),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.06),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_28px_60px_rgba(128,118,126,0.18)] backdrop-blur-[20px]">
|
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.04),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.03),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_28px_60px_rgba(128,118,126,0.18)] backdrop-blur-[20px]">
|
||||||
<div class="mb-8 text-center text-xl font-bold tracking-[0.02em] text-slate-800">修改头像</div>
|
<div class="mb-8 text-center text-xl font-bold tracking-[0.02em] text-slate-800">修改头像</div>
|
||||||
|
|
||||||
<n-upload
|
<n-upload
|
||||||
|
|||||||
+7
-10
@@ -1,12 +1,9 @@
|
|||||||
const files = import.meta.glob("@/api/*/index.ts", {
|
import * as blog from "@/api/blog/index";
|
||||||
eager: true,
|
import * as file from "@/api/file/index";
|
||||||
});
|
import * as mix from "@/api/mix/index";
|
||||||
|
import * as nav from "@/api/nav/index";
|
||||||
|
import * as plink from "@/api/plink/index";
|
||||||
|
import * as user from "@/api/user/index";
|
||||||
|
|
||||||
const http: Record<string, any> = {};
|
const http = { blog, file, mix, nav, plink, user };
|
||||||
// console.log(files);
|
|
||||||
for (const i in files) {
|
|
||||||
const t = i.split("/");
|
|
||||||
const name = t[t.length - 2];
|
|
||||||
http[name] = files[i];
|
|
||||||
}
|
|
||||||
export default http;
|
export default http;
|
||||||
|
|||||||
+14
-2
@@ -1,4 +1,4 @@
|
|||||||
import type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from "axios";
|
import type { AxiosError, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "axios";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { useCookies } from "vue3-cookies";
|
import { useCookies } from "vue3-cookies";
|
||||||
|
|
||||||
@@ -51,4 +51,16 @@ request.interceptors.response.use(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
export default request;
|
// 统一响应结构:拦截器已返回 response.data(即 { code, msg, data })
|
||||||
|
export interface ApiResponse<T = any> {
|
||||||
|
code: number;
|
||||||
|
msg: string;
|
||||||
|
data: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 泛型请求函数:返回拦截器处理后的 Promise<ApiResponse<T>>,而非 AxiosResponse
|
||||||
|
function http<T = any>(config: AxiosRequestConfig): Promise<ApiResponse<T>> {
|
||||||
|
return request(config) as Promise<ApiResponse<T>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default http;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.10),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.08),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.06),transparent_28%),linear-gradient(180deg,#faf6ee_0%,#f9f1ef_44%,#fdf7f6_100%)]">
|
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.05),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.04),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.03),transparent_28%),linear-gradient(180deg,#fcfaf6_0%,#fbf8f7_44%,#fefcfb_100%)]">
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.20)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.10)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.15)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.08)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
||||||
|
|||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.10),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.08),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.06),transparent_28%),linear-gradient(180deg,#faf6ee_0%,#f9f1ef_44%,#fdf7f6_100%)]"
|
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.05),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.04),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.03),transparent_28%),linear-gradient(180deg,#fcfaf6_0%,#fbf8f7_44%,#fefcfb_100%)]"
|
||||||
:style="boxStyle">
|
:style="boxStyle">
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.20)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.10)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.15)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.08)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.10),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.08),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.06),transparent_28%),linear-gradient(180deg,#faf6ee_0%,#f9f1ef_44%,#fdf7f6_100%)]"
|
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.05),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.04),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.03),transparent_28%),linear-gradient(180deg,#fcfaf6_0%,#fbf8f7_44%,#fefcfb_100%)]"
|
||||||
:style="boxStyle">
|
:style="boxStyle">
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.20)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.10)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.15)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.08)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.10),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.08),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.06),transparent_28%),linear-gradient(180deg,#faf6ee_0%,#f9f1ef_44%,#fdf7f6_100%)]"
|
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.05),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.04),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.03),transparent_28%),linear-gradient(180deg,#fcfaf6_0%,#fbf8f7_44%,#fefcfb_100%)]"
|
||||||
:style="boxStyle">
|
:style="boxStyle">
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.20)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.10)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.15)] opacity-48 blur-[88px]">
|
class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.08)] opacity-48 blur-[88px]">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
class="pointer-events-none absolute inset-0 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]">
|
||||||
@@ -88,8 +88,8 @@
|
|||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<section class="blog-list-panel min-w-0 flex h-full flex-1 flex-col p-4 sm:p-6">
|
<section class="blog-list-panel min-w-0 flex h-full flex-1 flex-col p-4 sm:p-6">
|
||||||
<div class="pointer-events-none absolute right-[-4rem] top-12 h-40 w-40 rounded-full bg-[rgba(219,95,81,0.07)] blur-[88px]"></div>
|
<div class="pointer-events-none absolute right-[-4rem] top-12 h-40 w-40 rounded-full bg-[rgba(219,95,81,0.04)] blur-[88px]"></div>
|
||||||
<div class="pointer-events-none absolute left-[-3rem] bottom-10 h-36 w-36 rounded-full bg-[rgba(249,154,159,0.06)] blur-[82px]"></div>
|
<div class="pointer-events-none absolute left-[-3rem] bottom-10 h-36 w-36 rounded-full bg-[rgba(249,154,159,0.03)] blur-[82px]"></div>
|
||||||
<div class="mb-5 flex flex-col gap-4 md:flex-row md:items-start md:justify-between">
|
<div class="mb-5 flex flex-col gap-4 md:flex-row md:items-start md:justify-between">
|
||||||
<div class="relative z-[1]">
|
<div class="relative z-[1]">
|
||||||
<div class="text-[0.82rem] font-semibold tracking-[0.16em] text-[#718195]">文章列表</div>
|
<div class="text-[0.82rem] font-semibold tracking-[0.16em] text-[#718195]">文章列表</div>
|
||||||
@@ -128,10 +128,10 @@
|
|||||||
class="blog-list-card blog-card-animate group cursor-pointer"
|
class="blog-list-card blog-card-animate group cursor-pointer"
|
||||||
:style="{ animationDelay: `${index * 90}ms` }" @click="$router.push(`/blog/${item.aid}`)">
|
:style="{ animationDelay: `${index * 90}ms` }" @click="$router.push(`/blog/${item.aid}`)">
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute -right-10 top-[-2rem] h-28 w-28 rounded-full bg-[rgba(219,95,81,0.08)] transition duration-500 group-hover:scale-125 group-hover:opacity-100">
|
class="pointer-events-none absolute -right-10 top-[-2rem] h-28 w-28 rounded-full bg-[rgba(219,95,81,0.04)] transition duration-500 group-hover:scale-125 group-hover:opacity-100">
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="pointer-events-none absolute -left-8 bottom-[-2rem] h-24 w-24 rounded-full bg-[rgba(219,95,81,0.07)] transition duration-500 group-hover:translate-x-2">
|
class="pointer-events-none absolute -left-8 bottom-[-2rem] h-24 w-24 rounded-full bg-[rgba(219,95,81,0.04)] transition duration-500 group-hover:translate-x-2">
|
||||||
</div>
|
</div>
|
||||||
<div class="pointer-events-none absolute inset-x-6 top-0 h-18 bg-[linear-gradient(180deg,rgba(255,255,255,0.24),transparent)] opacity-80 "></div>
|
<div class="pointer-events-none absolute inset-x-6 top-0 h-18 bg-[linear-gradient(180deg,rgba(255,255,255,0.24),transparent)] opacity-80 "></div>
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.10),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.08),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.06),transparent_28%),linear-gradient(180deg,#faf6ee_0%,#f9f1ef_44%,#fdf7f6_100%)]"
|
class="relative overflow-hidden bg-[radial-gradient(circle_at_12%_18%,rgba(219,95,81,0.05),transparent_24%),radial-gradient(circle_at_86%_12%,rgba(249,154,159,0.04),transparent_24%),radial-gradient(circle_at_50%_100%,rgba(222,217,178,0.03),transparent_28%),linear-gradient(180deg,#fcfaf6_0%,#fbf8f7_44%,#fefcfb_100%)]"
|
||||||
:style="contentStyle"
|
:style="contentStyle"
|
||||||
>
|
>
|
||||||
<div class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.20)] opacity-48 blur-[88px]"></div>
|
<div class="pointer-events-none absolute left-[-5rem] top-6 h-80 w-80 rounded-full bg-[rgba(219,95,81,0.10)] opacity-48 blur-[88px]"></div>
|
||||||
<div class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.15)] opacity-48 blur-[88px]"></div>
|
<div class="pointer-events-none absolute right-[-5rem] top-32 h-[22rem] w-[22rem] rounded-full bg-[rgba(222,217,178,0.08)] opacity-48 blur-[88px]"></div>
|
||||||
<div class="pointer-events-none absolute inset-y-0 left-5 right-5 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-position:18px_0,18px_0] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]"></div>
|
<div class="pointer-events-none absolute inset-y-0 left-5 right-5 opacity-14 [background-image:linear-gradient(rgba(255,255,255,0.18)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.18)_1px,transparent_1px)] [background-position:18px_0,18px_0] [background-size:36px_36px] [mask-image:linear-gradient(180deg,rgba(0,0,0,0.8),transparent_85%)]"></div>
|
||||||
<n-layout has-sider>
|
<n-layout has-sider>
|
||||||
<n-layout-content class="relative !bg-transparent">
|
<n-layout-content class="relative !bg-transparent">
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
|
|
||||||
<maskX :visible="visible" :setVisible="navCancel">
|
<maskX :visible="visible" :setVisible="navCancel">
|
||||||
<n-form
|
<n-form
|
||||||
class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.07),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.06),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_4px_12px_rgba(128,118,126,0.08),0_20px_44px_rgba(128,118,126,0.12),0_64px_120px_rgba(215,26,68,0.08)] backdrop-blur-[20px]"
|
class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.04),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.03),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_4px_12px_rgba(128,118,126,0.08),0_20px_44px_rgba(128,118,126,0.12),0_64px_120px_rgba(215,26,68,0.08)] backdrop-blur-[20px]"
|
||||||
ref="formNav"
|
ref="formNav"
|
||||||
layout="vertical"
|
layout="vertical"
|
||||||
:data="navData"
|
:data="navData"
|
||||||
@@ -264,7 +264,7 @@
|
|||||||
</contextMenu>
|
</contextMenu>
|
||||||
|
|
||||||
<maskX :visible="editModal" :setVisible="handleItemCancel">
|
<maskX :visible="editModal" :setVisible="handleItemCancel">
|
||||||
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.07),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.06),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_4px_12px_rgba(128,118,126,0.08),0_20px_44px_rgba(128,118,126,0.12),0_64px_120px_rgba(215,26,68,0.08)] backdrop-blur-[20px]">
|
<div class="w-[500px] rounded-[28px] border border-white/80 bg-[radial-gradient(circle_at_top_left,rgba(219,95,81,0.04),transparent_34%),radial-gradient(circle_at_top_right,rgba(249,154,159,0.03),transparent_28%),linear-gradient(180deg,rgba(255,255,255,0.84),rgba(255,239,234,0.78))] p-8 shadow-[0_4px_12px_rgba(128,118,126,0.08),0_20px_44px_rgba(128,118,126,0.12),0_64px_120px_rgba(215,26,68,0.08)] backdrop-blur-[20px]">
|
||||||
<div class="mb-8 flex items-center justify-center gap-2 text-center text-xl font-bold tracking-[0.02em] text-slate-800">
|
<div class="mb-8 flex items-center justify-center gap-2 text-center text-xl font-bold tracking-[0.02em] text-slate-800">
|
||||||
<icon-pen class="w-5 text-primary" />
|
<icon-pen class="w-5 text-primary" />
|
||||||
修改导航内容
|
修改导航内容
|
||||||
|
|||||||
Reference in New Issue
Block a user