0%

IDEA插件

Vuesion Theme

皮肤

Atom Material Icons

给不同文件添加 icon 图标。

File Expander

在 idea 里面直接打开 Jar包,反编译进行查看,还能查看 tar 包、gz包、zip包

GitToolBox

提示有哪些文件没有commit,远程有多少个文件没有更新,在每一行代码上提示上次提交的时间。

Maven Helper

排查Jar包的依赖问题。提供了快捷指令,右键直接打开maven的指令。

arthas idea

诊断线上Java工具。右键点击arthas的命令,选择一下即可自动生成命令。

XPath使用汇总

XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点之前的所有同级节点
8、following-sibling 选取当前节点之后的所有同级节点
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点
11、self 选取当前节点
12、attribute 选取当前节点的所有属性
13、namespace 选取当前节点的所有命名空间节点

阅读全文 »

ruoyi-ui封装 wangEditor 富文本编辑器组件

图片存储在七牛云。

依赖安装

1
npm install @wangeditor/editor:5.1.14 @wangeditor/editor-for-vue:^5.1.12

注意:@wangeditor/editor 一定要使用 5.1.14 版本,经测试发现 5.1.15 - 5.1.17 都存在bug。

组件定义

vim ruoyi-ui/src/components/WEditor/index.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<template>
<div style="border: 1px solid #ccc;">
<Toolbar
style="border-bottom: 1px solid #ccc"
:editor="editorRef"
:defaultConfig="toolbarConfig"
/>
<Editor
style="height: 500px; overflow-y: hidden;"
v-model="html"
:defaultConfig="editorConfig"
@onChange="handleChange"
@onCreated="handleCreated"
/>
</div>
</template>
<script setup>
import { getToken } from "@/utils/auth";
import {getPictureToken} from "@/api/oss";
import useUserStore from '@/store/modules/user'
import * as qiniu from "qiniu-js";
import { v4 as uuidv4 } from "uuid";

import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { reactive, onBeforeUnmount, onMounted, shallowRef, ref } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef()
const props = defineProps({
modelValue: {
type: String,
default: ""
},
imageDir: {
type: String,
default: "unknow",
}
});

const emits = defineEmits({
'update:modelValue': ""
});
const html = computed({
get() {
return props.modelValue
},
set(value) {
emits('update:modelValue', value)
}
})

const editor = ref(null);

const toolbarConfig= reactive({});
const editorConfig= reactive({
placeholder:'请输入内容...',
MENU_CONF: {
uploadImage: {
customUpload(file, insertFn) {
// 获取签名
getPictureToken().then(res => {
var keyPrefix = "news/" + useUserStore().uid + "/" + props.imageDir + "/";

// https://developer.qiniu.com/kodo/1283/javascript
const token = res.data.token,
key = keyPrefix + uuidv4() + "." + file.name.split(".")[1],
putExtra = {
fname: file.name,
// mimeType: file.type,
},
config = {
useCdnDomain: true,
region: res.data.region
};
let observer = {
next (res) {
console.log(res)
console.log('已上传大小,单位为字节:' + res.total.loaded)
console.log('本次上传的总量控制信息,单位为字节:' + res.total.size)
console.log('当前上传进度,范围:0~100:' + res.total.percent);
},
error (err) {
console.log(err)
console.log(err.code)
console.log(err.message)
console.log(err.isRequestError)
console.log(err.reqId)
},
complete (res) {
console.log(res)
insertFn(res.data.url, "图片", res.data.url);
}
};

const observable = qiniu.upload(file, key, token, putExtra, config)
const subscription = observable.subscribe(observer) // 上传开始
});
},
// 上传之前触发
onBeforeUpload(file) { // JS 语法
console.log("onBeforeUpload", file);
// file 选中的文件,格式如 { key: file }
return file

// 可以 return
// 1. return file 或者 new 一个 file ,接下来将上传
// 2. return false ,不上传这个 file
},
// 上传进度的回调函数
onProgress(progress) { // JS 语法
// progress 是 0-100 的数字
console.log('progress', progress)
},

// 单个文件上传成功之后
onSuccess(file, res) { // JS 语法
console.log(`${file.name} 上传成功`, res)
},

// 单个文件上传失败
onFailed(file, res) { // JS 语法
console.log(`${file.name} 上传失败`, res)
},

// 上传错误,或者触发 timeout 超时
onError(file, err, res) { // JS 语法
console.log(`${file.name} 上传出错`, err, res)
},
}
}
});
const mode= ref('default'); // or 'simple'

const handleCreated = (t) => {
// console.log("handleCreated", t)
editorRef.value = t // 记录 editor 实例,重要!
};
onMounted(()=>{
// console.log("onMounted")
});
onBeforeUnmount(() => {
// console.log("onBeforeUnmount")
});
function handleChange(editor) {
// console.log(editor.getHtml(), editor);
}
</script>

全局注册组件

vim ruoyi-ui/src/main.js

1
2
3
import WEditor from "@/components/WEditor"
...
app.component('WEditor', WEditor)

组件使用

1
<WEditor v-model="form.summary" imageDir="course" />

Vite 的 Proxy 主要是为了解决跨域问题,为了保证转发规则是否正确, 本文将介绍两种方法:

阅读全文 »

Java接收Axios-GET请求中的数组参数


今天前端在发起API接口请求时提示跨域问题,但同域名其他API接口请求正常,很是奇怪。

阅读全文 »