@jx3box/jx3box-common-ui 9.4.0 → 9.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/data/search_map.json +3 -0
- package/assets/js/utils.js +73 -19
- package/package.json +1 -1
- package/src/SuspendCommon.vue +10 -1
- package/src/header/search.vue +8 -34
package/assets/js/utils.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import { Notification } from
|
|
1
|
+
import { Notification } from "element-ui";
|
|
2
|
+
import { __Root } from "@jx3box/jx3box-common/data/jx3box.json";
|
|
3
|
+
import searchMap from "../data/search_map.json";
|
|
4
|
+
|
|
2
5
|
// 复制
|
|
3
6
|
export function copyText(text) {
|
|
4
7
|
if (window.navigator.clipboard) {
|
|
5
|
-
window.navigator.clipboard.writeText(text).then(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
window.navigator.clipboard.writeText(text).then(
|
|
9
|
+
function () {
|
|
10
|
+
Notification.success({
|
|
11
|
+
title: "复制成功",
|
|
12
|
+
});
|
|
13
|
+
console.log("Async: Copying to clipboard was successful!");
|
|
14
|
+
},
|
|
15
|
+
function (err) {
|
|
16
|
+
console.error("Async: Could not copy text: ", err);
|
|
17
|
+
}
|
|
18
|
+
);
|
|
13
19
|
} else {
|
|
14
20
|
var textArea = document.createElement("textarea");
|
|
15
21
|
textArea.value = text;
|
|
@@ -17,11 +23,11 @@ export function copyText(text) {
|
|
|
17
23
|
textArea.focus();
|
|
18
24
|
textArea.select();
|
|
19
25
|
try {
|
|
20
|
-
var successful = document.execCommand(
|
|
21
|
-
var msg = successful ?
|
|
22
|
-
console.log(
|
|
26
|
+
var successful = document.execCommand("copy");
|
|
27
|
+
var msg = successful ? "successful" : "unsuccessful";
|
|
28
|
+
console.log("Fallback: Copying text command was " + msg);
|
|
23
29
|
} catch (err) {
|
|
24
|
-
console.error(
|
|
30
|
+
console.error("Fallback: Oops, unable to copy", err);
|
|
25
31
|
}
|
|
26
32
|
document.body.removeChild(textArea);
|
|
27
33
|
}
|
|
@@ -34,17 +40,65 @@ export function trimSlash(str) {
|
|
|
34
40
|
|
|
35
41
|
// 监听 localStorage 的改变
|
|
36
42
|
export function dispatchEventStorage() {
|
|
37
|
-
const _setItem = localStorage.setItem
|
|
43
|
+
const _setItem = localStorage.setItem;
|
|
38
44
|
|
|
39
45
|
localStorage.setItem = function (key, val) {
|
|
40
46
|
// 注册一个名称为 setItemEvent 的事件
|
|
41
|
-
let setEvent = new Event(
|
|
47
|
+
let setEvent = new Event("setItemEvent");
|
|
42
48
|
// key 为改变的 key, newVal 为改变的 value
|
|
43
|
-
setEvent.key = key
|
|
44
|
-
setEvent.newVal = val
|
|
49
|
+
setEvent.key = key;
|
|
50
|
+
setEvent.newVal = val;
|
|
51
|
+
|
|
52
|
+
window.dispatchEvent(setEvent);
|
|
53
|
+
|
|
54
|
+
_setItem.apply(this, arguments);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// search 跳转公共函数
|
|
59
|
+
export function searchJump({ searchValue, isPhone = false, client = "std", url }) {
|
|
60
|
+
searchValue = searchValue.trim()?.toLowerCase();
|
|
61
|
+
// 检查输入是否为纯数字
|
|
62
|
+
if (/^\d+$/.test(searchValue)) {
|
|
63
|
+
// 如果是纯数字,直接跳转到 /{id}
|
|
64
|
+
const target = isPhone ? "_self" : "_blank";
|
|
65
|
+
const url = __Root + `post/${searchValue}`;
|
|
66
|
+
if (target === "_blank") {
|
|
67
|
+
window.open(url, "_blank");
|
|
68
|
+
} else {
|
|
69
|
+
window.location.href = url;
|
|
70
|
+
}
|
|
71
|
+
} else if (searchMap[searchValue]) {
|
|
72
|
+
// 如果是 searchMap 中的关键词,跳转到对应的 URL
|
|
73
|
+
const target = isPhone ? "_self" : "_blank";
|
|
74
|
+
const url = searchMap[searchValue];
|
|
75
|
+
if (target === "_blank") {
|
|
76
|
+
window.open(url, "_blank");
|
|
77
|
+
} else {
|
|
78
|
+
window.location.href = url;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
} else {
|
|
82
|
+
// 如果不是纯数字,使用原有搜索功能
|
|
83
|
+
const form = document.createElement("form");
|
|
84
|
+
form.method = "GET";
|
|
85
|
+
form.action = url;
|
|
86
|
+
form.target = isPhone ? "_self" : "_blank";
|
|
87
|
+
|
|
88
|
+
const searchInput = document.createElement("input");
|
|
89
|
+
searchInput.type = "hidden";
|
|
90
|
+
searchInput.name = "q";
|
|
91
|
+
searchInput.value = searchValue;
|
|
45
92
|
|
|
46
|
-
|
|
93
|
+
const clientInput = document.createElement("input");
|
|
94
|
+
clientInput.type = "hidden";
|
|
95
|
+
clientInput.name = "client";
|
|
96
|
+
clientInput.value = client;
|
|
47
97
|
|
|
48
|
-
|
|
98
|
+
form.appendChild(searchInput);
|
|
99
|
+
form.appendChild(clientInput);
|
|
100
|
+
document.body.appendChild(form);
|
|
101
|
+
form.submit();
|
|
102
|
+
document.body.removeChild(form);
|
|
49
103
|
}
|
|
50
104
|
}
|
package/package.json
CHANGED
package/src/SuspendCommon.vue
CHANGED
|
@@ -512,11 +512,13 @@ export default {
|
|
|
512
512
|
unsubscribeAuthor(drawerConfig.author.author_id).then(res => {
|
|
513
513
|
this.isSubscribe = false;
|
|
514
514
|
this.subscribeInfo = {}
|
|
515
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
515
516
|
})
|
|
516
517
|
} else {
|
|
517
518
|
subscribeAuthor(drawerConfig.author.author_id, { title: drawerConfig.title }).then(res => {
|
|
518
519
|
this.isSubscribe = true;
|
|
519
520
|
this.subscribeInfo = res.data?.data
|
|
521
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
520
522
|
})
|
|
521
523
|
}
|
|
522
524
|
}
|
|
@@ -526,11 +528,13 @@ export default {
|
|
|
526
528
|
unsubscribePost(drawerConfig.id).then(res => {
|
|
527
529
|
this.isSubscribe = false;
|
|
528
530
|
this.subscribeInfo = {}
|
|
531
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
529
532
|
})
|
|
530
533
|
} else {
|
|
531
534
|
subscribePost(drawerConfig.id, { title: drawerConfig.title }).then(res => {
|
|
532
535
|
this.isSubscribe = true;
|
|
533
536
|
this.subscribeInfo = res.data?.data
|
|
537
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
534
538
|
})
|
|
535
539
|
}
|
|
536
540
|
}
|
|
@@ -540,11 +544,13 @@ export default {
|
|
|
540
544
|
unsubscribeArticle(drawerConfig.postType, drawerConfig.id).then(res => {
|
|
541
545
|
this.isSubscribe = false;
|
|
542
546
|
this.subscribeInfo = {}
|
|
547
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
543
548
|
})
|
|
544
549
|
} else {
|
|
545
550
|
subscribeArticle(drawerConfig.postType, drawerConfig.id, { title: drawerConfig.title }).then(res => {
|
|
546
551
|
this.isSubscribe = true;
|
|
547
552
|
this.subscribeInfo = res.data?.data
|
|
553
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
548
554
|
})
|
|
549
555
|
}
|
|
550
556
|
}
|
|
@@ -554,15 +560,17 @@ export default {
|
|
|
554
560
|
unsubscribeWiki(drawerConfig.postType, drawerConfig.id).then(res => {
|
|
555
561
|
this.isSubscribe = false;
|
|
556
562
|
this.subscribeInfo = {}
|
|
563
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
557
564
|
})
|
|
558
565
|
} else {
|
|
559
566
|
subscribeWiki(drawerConfig.postType, drawerConfig.id, { title: drawerConfig.title }).then(res => {
|
|
560
567
|
this.isSubscribe = true;
|
|
561
568
|
this.subscribeInfo = res.data?.data
|
|
569
|
+
this.$emit('subscribe', { isSubscribe: this.isSubscribe });
|
|
562
570
|
})
|
|
563
571
|
}
|
|
564
572
|
}
|
|
565
|
-
|
|
573
|
+
|
|
566
574
|
},
|
|
567
575
|
/**
|
|
568
576
|
* 订阅状态查询
|
|
@@ -615,6 +623,7 @@ export default {
|
|
|
615
623
|
}
|
|
616
624
|
later(params).then(res => {
|
|
617
625
|
console.log(res)
|
|
626
|
+
this.$message.success("已添加稍后再看");
|
|
618
627
|
this.areaKey = 'home';
|
|
619
628
|
this.$emit('laterOn');
|
|
620
629
|
})
|
package/src/header/search.vue
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<script>
|
|
16
16
|
import { __Root } from "@jx3box/jx3box-common/data/jx3box.json";
|
|
17
|
+
import {searchJump} from "../../assets/js/utils";
|
|
17
18
|
export default {
|
|
18
19
|
name: "search",
|
|
19
20
|
data: function () {
|
|
@@ -25,44 +26,17 @@ export default {
|
|
|
25
26
|
},
|
|
26
27
|
computed: {},
|
|
27
28
|
methods: {
|
|
28
|
-
handleSubmit(
|
|
29
|
+
handleSubmit() {
|
|
29
30
|
// 获取输入框的值
|
|
30
31
|
const searchValue = this.$refs.searchInput.value;
|
|
31
32
|
if (!searchValue) return;
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
window.open(url, "_blank");
|
|
40
|
-
} else {
|
|
41
|
-
window.location.href = url;
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
// 如果不是纯数字,使用原有搜索功能
|
|
45
|
-
const form = document.createElement("form");
|
|
46
|
-
form.method = "GET";
|
|
47
|
-
form.action = this.url;
|
|
48
|
-
form.target = this.isPhone ? "_self" : "_blank";
|
|
49
|
-
|
|
50
|
-
const searchInput = document.createElement("input");
|
|
51
|
-
searchInput.type = "hidden";
|
|
52
|
-
searchInput.name = "q";
|
|
53
|
-
searchInput.value = searchValue;
|
|
54
|
-
|
|
55
|
-
const clientInput = document.createElement("input");
|
|
56
|
-
clientInput.type = "hidden";
|
|
57
|
-
clientInput.name = "client";
|
|
58
|
-
clientInput.value = this.client;
|
|
59
|
-
|
|
60
|
-
form.appendChild(searchInput);
|
|
61
|
-
form.appendChild(clientInput);
|
|
62
|
-
document.body.appendChild(form);
|
|
63
|
-
form.submit();
|
|
64
|
-
document.body.removeChild(form);
|
|
65
|
-
}
|
|
34
|
+
searchJump({
|
|
35
|
+
searchValue: searchValue,
|
|
36
|
+
isPhone: this.isPhone,
|
|
37
|
+
url: this.url,
|
|
38
|
+
client: this.client,
|
|
39
|
+
});
|
|
66
40
|
},
|
|
67
41
|
},
|
|
68
42
|
created: function () {},
|