Compare commits

...

10 Commits

Author SHA1 Message Date
zjl
a38b804c4b 删除废弃文件 2024-10-17 18:16:11 +08:00
e96ee52952 搜索页面 2024-10-17 16:48:11 +08:00
zjl
3dd1510d12 更新 2024-10-16 20:33:44 +08:00
0bc7983239 去黑框 2024-10-16 13:17:56 +08:00
zjl
c665a07be5 修复发现的BUG 2024-10-16 12:18:41 +08:00
26b37e23d7 图片上传 2024-10-12 17:16:19 +08:00
zjl
8553381768 格式化代码 2024-10-12 16:44:19 +08:00
a49ee2d4b2 添加水印开关 2024-10-12 16:19:25 +08:00
zjl
e098f67b13 设置水印宽高 2024-10-11 21:31:31 +08:00
3290717984 css 2024-10-11 15:49:16 +08:00
26 changed files with 94 additions and 37 deletions

View File

@ -17,6 +17,7 @@
import { useLockscreenStore } from '@/store/modules/lockscreen'; import { useLockscreenStore } from '@/store/modules/lockscreen';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
import Watermark from '@/utils/wartermark'; import Watermark from '@/utils/wartermark';
const route = useRoute(); const route = useRoute();
@ -26,7 +27,7 @@
const lockTime = computed(() => useLockscreen.lockTime); const lockTime = computed(() => useLockscreen.lockTime);
const zIndex = ref(3000); const zIndex = ref(3000);
const { getIsWaterMark } = useProjectSetting();
const LoginName = PageEnum.BASE_LOGIN_NAME; const LoginName = PageEnum.BASE_LOGIN_NAME;
let timer; let timer;
@ -48,10 +49,14 @@
} }
}, 1000); }, 1000);
}; };
onMounted(() => { onMounted(() => {
const waterText = import.meta.env.VITE_GLOB_APP_TITLE; if (getIsWaterMark.value) {
Watermark.set(waterText) const waterText = import.meta.env.VITE_GLOB_APP_TITLE;
Watermark.set(waterText);
} else {
Watermark.del();
}
}); });
onUnmounted(() => { onUnmounted(() => {
// document.removeEventListener('mousedown', timekeeping); // document.removeEventListener('mousedown', timekeeping);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -168,7 +168,8 @@
if (!meta?.hidden && reg.test(title) && !children?.length) { if (!meta?.hidden && reg.test(title) && !children?.length) {
ret.push({ ret.push({
name: parent?.title ? `${parent.title} > ${title}` : title, name: parent?.title ? `${parent.title} > ${title}` : title,
path: parent?.path ? replacePath(parent.path) : replacePath(path), // path: parent?.path ? replacePath(parent.path) : replacePath(path),
path: path?path:parent?.path,
icon, icon,
key, key,
}); });

View File

@ -41,6 +41,7 @@
:title="title" :title="title"
confirmButText="确认上传" confirmButText="确认上传"
:uploadApi="uploadApi" :uploadApi="uploadApi"
:name="name"
:circled="circled" :circled="circled"
@uploadSuccess="handleSuccess" @uploadSuccess="handleSuccess"
/> />
@ -62,6 +63,7 @@
uploadApi: { uploadApi: {
type: Function as PropType<(params) => Promise<any>>, type: Function as PropType<(params) => Promise<any>>,
}, },
name: { type: String, default: 'name' },
}); });
const getWidth = cssUnit(props.width); const getWidth = cssUnit(props.width);

View File

@ -179,6 +179,7 @@
uploadApi: { uploadApi: {
type: Function as PropType<(params) => Promise<any>>, type: Function as PropType<(params) => Promise<any>>,
}, },
name: { type: String, default: 'name' },
}; };
export default defineComponent({ export default defineComponent({
@ -251,13 +252,14 @@
return ElMessage.error('请先上传图片'); return ElMessage.error('请先上传图片');
} }
const uploadApi = props.uploadApi; const uploadApi = props.uploadApi;
const name = props.name
if (uploadApi && isFunction(uploadApi)) { if (uploadApi && isFunction(uploadApi)) {
const file = base64ToFile(previewSource.value,filename); const file = base64ToFile(previewSource.value,filename);
try { try {
setSubLoading(true); setSubLoading(true);
const formData = new FormData() const formData = new FormData()
formData.append('file',file) formData.append('file',file)
formData.append('name',filename) formData.append('name',name)
const result = await uploadApi(formData); const result = await uploadApi(formData);
emit('uploadSuccess', result); emit('uploadSuccess', result);
closeModal(); closeModal();

View File

@ -18,6 +18,8 @@ export function useProjectSetting() {
const getCrumbsSetting = computed(() => projectStore.crumbsSetting); const getCrumbsSetting = computed(() => projectStore.crumbsSetting);
const getIsWaterMark = computed(() => projectStore.isWaterMark);
const getPermissionMode = computed(() => projectStore.permissionMode); const getPermissionMode = computed(() => projectStore.permissionMode);
const getShowFooter = computed(() => projectStore.showFooter); const getShowFooter = computed(() => projectStore.showFooter);
@ -46,6 +48,7 @@ export function useProjectSetting() {
getPageAnimateType, getPageAnimateType,
getMenuWidth, getMenuWidth,
getMenuMinWidth, getMenuMinWidth,
getIsWaterMark,
getIsProjectSetting, getIsProjectSetting,
}; };
} }

View File

@ -246,6 +246,12 @@
<el-switch v-model="settingStore.multiTabsSetting.show" /> <el-switch v-model="settingStore.multiTabsSetting.show" />
</div> </div>
</div> </div>
<div class="drawer-setting-item">
<div class="drawer-setting-item-title"> 水印</div>
<div class="drawer-setting-item-action">
<el-switch v-model="settingStore.isWaterMark" @change="handleWaterChange" />
</div>
</div>
<!--1.15废弃没啥用占用操作空间--> <!--1.15废弃没啥用占用操作空间-->
<!-- <div class="drawer-setting-item">--> <!-- <div class="drawer-setting-item">-->
<!-- <div class="drawer-setting-item-title"> 显示页脚 </div>--> <!-- <div class="drawer-setting-item-title"> 显示页脚 </div>-->
@ -294,7 +300,7 @@
import { animates as animateOptions } from '@/settings/animateSetting'; import { animates as animateOptions } from '@/settings/animateSetting';
import { useDesignSetting } from '@/hooks/setting/useDesignSetting'; import { useDesignSetting } from '@/hooks/setting/useDesignSetting';
import colorTool from '@/utils/color'; import colorTool from '@/utils/color';
import Watermark from '@/utils/wartermark';
defineProps({ defineProps({
title: { title: {
type: String, type: String,
@ -348,6 +354,15 @@
settingStore.menuSetting.mixMenu = false; settingStore.menuSetting.mixMenu = false;
} }
function handleWaterChange(val) {
if (val) {
const waterText = import.meta.env.VITE_GLOB_APP_TITLE;
Watermark.set(waterText);
} else {
Watermark.del();
}
}
// //
function themeColorChange(color) { function themeColorChange(color) {
document.documentElement.style.setProperty('--el-color-primary', color); document.documentElement.style.setProperty('--el-color-primary', color);

View File

@ -58,5 +58,7 @@ const setting = {
pageAnimateType: 'fade', pageAnimateType: 'fade',
//显示项目配置 //显示项目配置
isProjectSetting: true, isProjectSetting: true,
//显示水印
isWaterMark: true,
}; };
export default setting; export default setting;

View File

@ -22,6 +22,7 @@ const {
isPageAnimate, isPageAnimate,
pageAnimateType, pageAnimateType,
isProjectSetting, isProjectSetting,
isWaterMark,
} = projectSetting; } = projectSetting;
interface ProjectSettingState { interface ProjectSettingState {
@ -37,6 +38,7 @@ interface ProjectSettingState {
isPageAnimate: boolean; //是否开启路由动画 isPageAnimate: boolean; //是否开启路由动画
pageAnimateType: string; //路由动画类型 pageAnimateType: string; //路由动画类型
isProjectSetting: boolean; //显示项目配置 isProjectSetting: boolean; //显示项目配置
isWaterMark: boolean; //显示水印
} }
export const useProjectSettingStore = defineStore({ export const useProjectSettingStore = defineStore({
@ -54,6 +56,7 @@ export const useProjectSettingStore = defineStore({
isPageAnimate, isPageAnimate,
pageAnimateType, pageAnimateType,
isProjectSetting, isProjectSetting,
isWaterMark,
}), }),
getters: { getters: {
getNavMode(): string { getNavMode(): string {
@ -92,6 +95,9 @@ export const useProjectSettingStore = defineStore({
getIsProjectSetting(): boolean { getIsProjectSetting(): boolean {
return this.isProjectSetting; return this.isProjectSetting;
}, },
getIsWaterMark(): boolean {
return this.isWaterMark;
},
}, },
actions: { actions: {
setNavTheme(value: string): void { setNavTheme(value: string): void {

View File

@ -173,3 +173,7 @@ body .n-modal {
.el-drawer__header { .el-drawer__header {
margin-bottom: 15px; margin-bottom: 15px;
} }
.el-tooltip__trigger:focus,
.el-tooltip__trigger:focus-visible {
outline: none;
}

View File

@ -4,8 +4,8 @@ const setWatermark = (str: string) => {
if (document.getElementById(id) !== null) if (document.getElementById(id) !== null)
document.body.removeChild(<HTMLElement>document.getElementById(id)); document.body.removeChild(<HTMLElement>document.getElementById(id));
const can = document.createElement('canvas'); const can = document.createElement('canvas');
can.width = 200; can.width = 250;
can.height = 130; can.height = 180;
const cans = <CanvasRenderingContext2D>can.getContext('2d'); const cans = <CanvasRenderingContext2D>can.getContext('2d');
cans.rotate((-20 * Math.PI) / 180); cans.rotate((-20 * Math.PI) / 180);
cans.font = '18px Vedana'; cans.font = '18px Vedana';

View File

@ -10,7 +10,7 @@
<el-form style="display: flex" ref="formRef" :model="formData" label-width="80px"> <el-form style="display: flex" ref="formRef" :model="formData" label-width="80px">
<div style="width: 880px; flex: none" :style="{ height: fwbHeight + 'px' }"> <div style="width: 880px; flex: none" :style="{ height: fwbHeight + 'px' }">
<el-form-item label-width="0px" prop="content"> <el-form-item label-width="0px" prop="content">
<Editor ref="editorRef" :height="fwbHeight" name="content" /> <Editor ref="editorRef" :height="fwbHeight" name="ad" />
</el-form-item> </el-form-item>
</div> </div>
<div style="flex: 1; margin-left: 10px"> <div style="flex: 1; margin-left: 10px">

View File

@ -10,7 +10,7 @@
<el-form style="display: flex" ref="formRef" :model="formData" label-width="80px"> <el-form style="display: flex" ref="formRef" :model="formData" label-width="80px">
<div style="width: 880px; flex: none" :style="{ height: fwbHeight + 'px' }"> <div style="width: 880px; flex: none" :style="{ height: fwbHeight + 'px' }">
<el-form-item label-width="0px" prop="content"> <el-form-item label-width="0px" prop="content">
<Editor ref="editorRef" :height="fwbHeight" name="content" /> <Editor ref="editorRef" :height="fwbHeight" name="article" />
</el-form-item> </el-form-item>
</div> </div>
<div style="flex: 1; margin-left: 10px"> <div style="flex: 1; margin-left: 10px">

View File

@ -26,19 +26,19 @@ export const columns = [
label: '推荐ID', label: '推荐ID',
prop: 'typeId', prop: 'typeId',
}, },
{ // {
label: '推荐图片', // label: '推荐图片',
prop: 'image', // prop: 'image',
render(record) { // render(record) {
return h(ElAvatar, { // return h(ElAvatar, {
size: 48, // size: 48,
src: record.row.image, // src: record.row.image,
shape: 'square', // shape: 'square',
fit: 'fill', // fit: 'fill',
}); // });
}, // },
width: 120, // width: 120,
}, // },
{ {
label: '推荐标题', label: '推荐标题',
prop: 'typeTitle', prop: 'typeTitle',

View File

@ -166,4 +166,8 @@
:deep(.proCard.tabsCard .el-card__body) { :deep(.proCard.tabsCard .el-card__body) {
padding-bottom: 15px; padding-bottom: 15px;
} }
:deep(.el-badge__content.is-fixed) {
top: 6px;
right: calc(-10px + var(--el-badge-size) / 2);
}
</style> </style>

View File

@ -49,7 +49,7 @@
prop="content" prop="content"
:rules="{ required: true, message: '请输入通知内容', trigger: 'blur' }" :rules="{ required: true, message: '请输入通知内容', trigger: 'blur' }"
> >
<Editor ref="editorRef" :height="fwbHeight" class="flex-1" name="data" /> <Editor ref="editorRef" :height="fwbHeight" class="flex-1" name="notice" />
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>

View File

@ -18,7 +18,7 @@
<el-descriptions-item label="接收人类型:">{{ <el-descriptions-item label="接收人类型:">{{
getReviceType(formData.receiveType) getReviceType(formData.receiveType)
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}s</el-descriptions-item> <el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}ms</el-descriptions-item>
<el-descriptions-item label="业务类型:">{{ <el-descriptions-item label="业务类型:">{{
formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : '' formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : ''
}}</el-descriptions-item> }}</el-descriptions-item>

View File

@ -16,7 +16,7 @@
formData.fileType formData.fileType
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="文件大小:">{{ formData.fileSize }}B</el-descriptions-item> <el-descriptions-item label="文件大小:">{{ formData.fileSize }}B</el-descriptions-item>
<el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}s</el-descriptions-item> <el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}ms</el-descriptions-item>
<el-descriptions-item label="业务类型:">{{ <el-descriptions-item label="业务类型:">{{
formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : '' formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : ''
}}</el-descriptions-item> }}</el-descriptions-item>

View File

@ -21,7 +21,7 @@
<el-descriptions-item label="接收人类型:">{{ <el-descriptions-item label="接收人类型:">{{
getReviceType(formData.receiveType) getReviceType(formData.receiveType)
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}s</el-descriptions-item> <el-descriptions-item label="请求耗时:">{{ formData.consumeTime }}ms</el-descriptions-item>
<el-descriptions-item label="业务类型:">{{ <el-descriptions-item label="业务类型:">{{
formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : '' formData.bizType ? (formData.bizType == 1 ? '订单' : '其他') : ''
}}</el-descriptions-item> }}</el-descriptions-item>

View File

@ -36,7 +36,7 @@
<el-descriptions-item label="执行时间"> <el-descriptions-item label="执行时间">
{{ formData.createTime }} {{ formData.createTime }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="执行耗时"> {{ formData.consumeTime }}s </el-descriptions-item> <el-descriptions-item label="执行耗时"> {{ formData.consumeTime }}ms </el-descriptions-item>
<el-descriptions-item label="执行异常信息" :span="3"> <el-descriptions-item label="执行异常信息" :span="3">
{{ formData.exceptionInfo }} {{ formData.exceptionInfo }}
</el-descriptions-item> </el-descriptions-item>

View File

@ -15,7 +15,7 @@ export const columns = [
prop: 'username', prop: 'username',
}, },
{ {
label: '请求ip', label: '请求IP',
prop: 'ip', prop: 'ip',
}, },
{ {

View File

@ -16,10 +16,10 @@
<el-descriptions-item label="操作系统"> <el-descriptions-item label="操作系统">
{{ formData.os }} {{ formData.os }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="操作浏览器"> <el-descriptions-item label="浏览器">
{{ formData.browser }} {{ formData.browser }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="请求耗时"> {{ formData.consumeTime }}s </el-descriptions-item> <el-descriptions-item label="请求耗时"> {{ formData.consumeTime }}ms </el-descriptions-item>
<el-descriptions-item label="请求地区"> <el-descriptions-item label="请求地区">
{{ formData.location }} {{ formData.location }}
</el-descriptions-item> </el-descriptions-item>

View File

@ -19,7 +19,7 @@ export const columns = [
prop: 'createUser', prop: 'createUser',
}, },
{ {
label: '请求ip', label: '请求IP',
prop: 'ip', prop: 'ip',
}, },
{ {

View File

@ -13,19 +13,31 @@
<el-descriptions-item label="操作用户" label-class-name="des-width"> <el-descriptions-item label="操作用户" label-class-name="des-width">
{{ formData.createUser }} {{ formData.createUser }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="IP地址"> <el-descriptions-item label="请求IP">
{{ formData.ip }} {{ formData.ip }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="操作系统"> <el-descriptions-item label="操作系统">
{{ formData.os }} {{ formData.os }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="操作浏览器"> <el-descriptions-item label="浏览器">
{{ formData.browser }} {{ formData.browser }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="请求耗时"> {{ formData.consumeTime }}s </el-descriptions-item> <el-descriptions-item label="操作类型">
{{ formData.typeText }}
</el-descriptions-item>
<el-descriptions-item label="操作来源">
{{ formData.sourceText }}
</el-descriptions-item>
<el-descriptions-item label="请求方式"> <el-descriptions-item label="请求方式">
{{ formData.requestMethod }} {{ formData.requestMethod }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="请求URL">
{{ formData.url }}
</el-descriptions-item>
<el-descriptions-item label="请求耗时"> {{ formData.consumeTime }}ms </el-descriptions-item>
<el-descriptions-item label="请求地区">
{{ formData.location }}
</el-descriptions-item>
<el-descriptions-item label="请求状态"> <el-descriptions-item label="请求状态">
<el-tag :type="formData.status ? 'danger' : 'success'">{{ <el-tag :type="formData.status ? 'danger' : 'success'">{{
formData.status ? '异常' : '正常' formData.status ? '异常' : '正常'

View File

@ -35,7 +35,7 @@ export const columns = [
{ {
label: '统一社会信用代码', label: '统一社会信用代码',
prop: 'license', prop: 'license',
width: 160, width: 200,
}, },
{ {
label: '租户限额', label: '租户限额',

View File

@ -24,6 +24,7 @@
ref="cropperCircled" ref="cropperCircled"
:src="formData.avatar" :src="formData.avatar"
:uploadApi="upload" :uploadApi="upload"
name="user"
title="头像上传" title="头像上传"
@uploadSuccess="uploadSuccess" @uploadSuccess="uploadSuccess"
> >