@jx3box/jx3box-common-ui 5.3.7 → 5.4.1
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/css/box.less +29 -2
- package/assets/css/post_list.less +354 -0
- package/assets/css/post_single.less +45 -0
- package/assets/data/box.json +1 -1
- package/assets/data/clients.json +5 -0
- package/assets/data/nav.json +1 -1
- package/assets/data/panel.json +3 -3
- package/assets/data/zlp.json +4 -4
- package/assets/img/list/post.svg +1 -0
- package/assets/img/single/author.svg +1 -0
- package/assets/img/single/lock.svg +1 -0
- package/assets/img/single/modate.svg +24 -0
- package/assets/img/single/podate.svg +23 -0
- package/package.json +1 -1
- package/src/App.vue +20 -6
- package/src/Author.vue +6 -3
- package/src/header/nav.vue +1 -1
- package/src/header/user.vue +35 -14
- package/src/single/Collection.vue +1 -1
- package/src/single/PostCollection.vue +86 -0
- package/src/single/PostContents.vue +24 -0
- package/src/single/PostHeader.vue +328 -0
package/assets/css/box.less
CHANGED
|
@@ -122,10 +122,37 @@
|
|
|
122
122
|
height: calc(100vh - @header-height);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
|
|
125
|
+
|
|
126
|
+
@media screen and (max-width:@phone){
|
|
127
|
+
.c-jx3box{
|
|
128
|
+
.u-list{
|
|
129
|
+
display: flex;
|
|
130
|
+
flex-wrap: wrap;
|
|
131
|
+
padding-right:10px;
|
|
132
|
+
li{
|
|
133
|
+
.w(25%);
|
|
134
|
+
.mr(0);
|
|
135
|
+
// flex:1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
.u-item{
|
|
139
|
+
.mr(20px);
|
|
140
|
+
.u-txt{
|
|
141
|
+
.fz(10px);
|
|
142
|
+
}
|
|
143
|
+
.u-pic{
|
|
144
|
+
.size(28px);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
li:nth-child(4n) .u-item{
|
|
148
|
+
.mr(0) !important;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
@media screen and (max-width:320px){
|
|
126
153
|
.c-jx3box{
|
|
127
154
|
.u-item{
|
|
128
|
-
.size(
|
|
155
|
+
.size(60px);
|
|
129
156
|
.u-txt{
|
|
130
157
|
.fz(10px);
|
|
131
158
|
}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
// 列表搜索
|
|
2
|
+
.m-archive-search{
|
|
3
|
+
.mb(10px);
|
|
4
|
+
.el-select .el-input {
|
|
5
|
+
width: 80px;
|
|
6
|
+
}
|
|
7
|
+
.u-switch{
|
|
8
|
+
.el-switch__label{
|
|
9
|
+
.bold;
|
|
10
|
+
color:#666;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
.pl(122px);
|
|
14
|
+
.pr;
|
|
15
|
+
.u-publish{
|
|
16
|
+
.pa;.lt(0);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
@media screen and (max-width:@phone){
|
|
20
|
+
.m-archive-search{
|
|
21
|
+
.pl(0);
|
|
22
|
+
.u-publish{
|
|
23
|
+
.none;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 排序
|
|
28
|
+
.m-archive-filter {
|
|
29
|
+
.fz(12px);
|
|
30
|
+
margin-bottom: 10px;
|
|
31
|
+
padding-bottom: 5px;
|
|
32
|
+
.clearfix;
|
|
33
|
+
border-bottom: 1px solid #eee;
|
|
34
|
+
.u-publish {
|
|
35
|
+
.fl;
|
|
36
|
+
.h(32px);
|
|
37
|
+
.mr(10px);
|
|
38
|
+
.ml(0);
|
|
39
|
+
}
|
|
40
|
+
.w-filter-mark,.w-filter-tag,.w-filter-client{
|
|
41
|
+
.fl;
|
|
42
|
+
}
|
|
43
|
+
.w-filter-client{
|
|
44
|
+
margin-top:(32px - 28px )/2;
|
|
45
|
+
.mr(10px);
|
|
46
|
+
}
|
|
47
|
+
.w-filter-mark,.w-filter-tag{
|
|
48
|
+
margin-top:8px;
|
|
49
|
+
}
|
|
50
|
+
.w-filter-menu{
|
|
51
|
+
.fl;
|
|
52
|
+
.mt(6px);
|
|
53
|
+
.mr(15px);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.w-filter-order{
|
|
57
|
+
.fr;
|
|
58
|
+
margin-top:8px;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
@media screen and (max-width: @ipad) {
|
|
62
|
+
.m-archive-filter {
|
|
63
|
+
.u-publish {
|
|
64
|
+
.mr(10px);
|
|
65
|
+
}
|
|
66
|
+
.w-filter-mark,.w-filter-tag,.w-filter-order{
|
|
67
|
+
margin-top:0;
|
|
68
|
+
}
|
|
69
|
+
.w-filter-mark,.w-filter-tag{
|
|
70
|
+
.mr(10px);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
@media screen and (max-width: @phone) {
|
|
75
|
+
.m-archive-filter {
|
|
76
|
+
.none;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 为空
|
|
80
|
+
.m-archive-null {
|
|
81
|
+
margin-top: 10px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// 加载更多
|
|
85
|
+
.m-archive-more {
|
|
86
|
+
.mb(10px);
|
|
87
|
+
.w(100%);
|
|
88
|
+
.none;
|
|
89
|
+
}
|
|
90
|
+
.m-archive-more.show {
|
|
91
|
+
.db;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 分页
|
|
95
|
+
.m-archive-pages {
|
|
96
|
+
overflow-x: auto;
|
|
97
|
+
}
|
|
98
|
+
@media screen and (max-width:@phone){
|
|
99
|
+
.m-archive-pages{
|
|
100
|
+
.el-pagination__jump{
|
|
101
|
+
.none !important;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// 普通列表
|
|
107
|
+
.m-archive-list {
|
|
108
|
+
.u-list {
|
|
109
|
+
padding: 0;
|
|
110
|
+
margin: 0;
|
|
111
|
+
list-style: none;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.u-item {
|
|
115
|
+
border-bottom: 1px solid @border-hr;
|
|
116
|
+
padding-bottom: 20px;
|
|
117
|
+
.mb(20px);
|
|
118
|
+
.clearfix;
|
|
119
|
+
.pr;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 海报
|
|
123
|
+
.u-banner {
|
|
124
|
+
.fl;
|
|
125
|
+
.mr(10px);
|
|
126
|
+
.w(180px);
|
|
127
|
+
.h(100px);
|
|
128
|
+
overflow: hidden;
|
|
129
|
+
.db;
|
|
130
|
+
.pr;
|
|
131
|
+
.z(1);
|
|
132
|
+
border: 1px solid #eee;
|
|
133
|
+
padding: 5px;
|
|
134
|
+
box-sizing: border-box;
|
|
135
|
+
img {
|
|
136
|
+
.size(100%);
|
|
137
|
+
filter: saturate(120%);
|
|
138
|
+
transition: 0.06s all ease-in-out;
|
|
139
|
+
}
|
|
140
|
+
transition: 0.06s border ease-in-out;
|
|
141
|
+
&:hover {
|
|
142
|
+
img {
|
|
143
|
+
filter: saturate(140%) brightness(120%);
|
|
144
|
+
}
|
|
145
|
+
border-color: @border;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// 标题
|
|
150
|
+
.u-post {
|
|
151
|
+
margin: 0;
|
|
152
|
+
padding: 0;
|
|
153
|
+
.nobreak;
|
|
154
|
+
.mb(5px);
|
|
155
|
+
.u-icon {
|
|
156
|
+
.size(16px);
|
|
157
|
+
.y(-3px);
|
|
158
|
+
.mr(5px);
|
|
159
|
+
}
|
|
160
|
+
&.isSticky {
|
|
161
|
+
.u-title::before {
|
|
162
|
+
content: "🎯";
|
|
163
|
+
.mr(5px);
|
|
164
|
+
}
|
|
165
|
+
// .u-title:hover{
|
|
166
|
+
// box-shadow: 0 1px 0 #f00;
|
|
167
|
+
// }
|
|
168
|
+
}
|
|
169
|
+
.u-title {
|
|
170
|
+
// color:@darkblue;
|
|
171
|
+
font-weight:400;
|
|
172
|
+
&:hover {
|
|
173
|
+
box-shadow: 0 1px 0 @primary;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
.fz(15px, 2);
|
|
177
|
+
font-weight: normal;
|
|
178
|
+
.lh(2);
|
|
179
|
+
font-weight: 400;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// 角标
|
|
183
|
+
.u-marks {
|
|
184
|
+
}
|
|
185
|
+
.u-mark {
|
|
186
|
+
font-style: normal;
|
|
187
|
+
font-size: 12px;
|
|
188
|
+
padding: 1px 5px 2px 5px;
|
|
189
|
+
margin-left: 5px;
|
|
190
|
+
border-radius: 2px;
|
|
191
|
+
background-color: #6f42c1;
|
|
192
|
+
color: #fff;
|
|
193
|
+
.ml(5px);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// 内容
|
|
197
|
+
.u-content {
|
|
198
|
+
.db;
|
|
199
|
+
padding-left: 20px;
|
|
200
|
+
.pr;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// 内容·描述类
|
|
204
|
+
.u-desc {
|
|
205
|
+
.db;
|
|
206
|
+
.fz(12px, 1.8);
|
|
207
|
+
color: #555;
|
|
208
|
+
.break(2);
|
|
209
|
+
.mb(6px);
|
|
210
|
+
padding: 0 2px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// 内容·meta列表
|
|
214
|
+
.u-metalist {
|
|
215
|
+
.nobreak;
|
|
216
|
+
.db;
|
|
217
|
+
.fz(12px, 25px);
|
|
218
|
+
.mb(4px);
|
|
219
|
+
strong {
|
|
220
|
+
.dbi;
|
|
221
|
+
.y(top);
|
|
222
|
+
padding: 0 10px;
|
|
223
|
+
.mr(10px);
|
|
224
|
+
.r(4px);
|
|
225
|
+
background-color: #f1f8ff;
|
|
226
|
+
color: @color-link;
|
|
227
|
+
font-weight: normal;
|
|
228
|
+
}
|
|
229
|
+
em {
|
|
230
|
+
font-style: normal;
|
|
231
|
+
}
|
|
232
|
+
b {
|
|
233
|
+
font-weight: normal;
|
|
234
|
+
}
|
|
235
|
+
a {
|
|
236
|
+
color: #333;
|
|
237
|
+
&:hover {
|
|
238
|
+
color: @color-link;
|
|
239
|
+
box-shadow: 0 1px 0 @color-link;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
.u-tag {
|
|
244
|
+
.db;
|
|
245
|
+
.nobreak;
|
|
246
|
+
a,
|
|
247
|
+
b {
|
|
248
|
+
padding: 0.2em 0.8em;
|
|
249
|
+
margin: 0 0.5em 0 0;
|
|
250
|
+
background-color: #f1f8ff;
|
|
251
|
+
border-radius: 3px;
|
|
252
|
+
.fz(12px);
|
|
253
|
+
color: #4989d2;
|
|
254
|
+
}
|
|
255
|
+
a:hover {
|
|
256
|
+
background-color: #def;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
.u-types {
|
|
260
|
+
.db;
|
|
261
|
+
.nobreak;
|
|
262
|
+
b {
|
|
263
|
+
padding: 0.1em 0.8em;
|
|
264
|
+
margin: 0 0.5em 0.5em 0;
|
|
265
|
+
border-radius: 3px;
|
|
266
|
+
.fz(12px);
|
|
267
|
+
.dbi;
|
|
268
|
+
.y(top);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// 底部
|
|
273
|
+
.u-misc {
|
|
274
|
+
.db;
|
|
275
|
+
.pa;
|
|
276
|
+
.rb(10px, 24px);
|
|
277
|
+
.x(right);
|
|
278
|
+
.fz(12px, 20px);
|
|
279
|
+
color: #777;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.u-author{
|
|
283
|
+
// .pa;.rt(0);
|
|
284
|
+
}
|
|
285
|
+
.u-author-avatar {
|
|
286
|
+
.size(24px);
|
|
287
|
+
.y;
|
|
288
|
+
.r(2px);
|
|
289
|
+
.mr(5px);
|
|
290
|
+
// .fr;
|
|
291
|
+
// .ml(5px);
|
|
292
|
+
}
|
|
293
|
+
.u-author-name {
|
|
294
|
+
.fz(12px,24px);
|
|
295
|
+
// .fl;
|
|
296
|
+
color:#666;
|
|
297
|
+
&:hover {
|
|
298
|
+
color:@pink;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
.u-date {
|
|
302
|
+
.db;
|
|
303
|
+
.mt(3px);
|
|
304
|
+
.clear;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.u-down {
|
|
308
|
+
// .u-btn-white;
|
|
309
|
+
i {
|
|
310
|
+
.size(12px);
|
|
311
|
+
.y(-1px);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
.u-pipe {
|
|
315
|
+
margin: 0 5px;
|
|
316
|
+
color: #999;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
@media screen and (max-width: @ipad) {
|
|
320
|
+
.m-archive-list {
|
|
321
|
+
.u-banner {
|
|
322
|
+
.w(100px);
|
|
323
|
+
.h(55px);
|
|
324
|
+
padding: 3px;
|
|
325
|
+
.fr;
|
|
326
|
+
margin-left: 10px;
|
|
327
|
+
margin-right: 0;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.u-post {
|
|
331
|
+
white-space: normal;
|
|
332
|
+
word-break: break-all;
|
|
333
|
+
.break(2);
|
|
334
|
+
.fz(14px, 22px);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
.u-metalist,
|
|
338
|
+
.u-down,
|
|
339
|
+
.u-view {
|
|
340
|
+
.none;
|
|
341
|
+
}
|
|
342
|
+
.u-tag {
|
|
343
|
+
.mb(8px);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.u-misc {
|
|
347
|
+
.ps;
|
|
348
|
+
.x(left);
|
|
349
|
+
}
|
|
350
|
+
.u-author-name {
|
|
351
|
+
color: #555;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.m-single-box {
|
|
2
|
+
padding:0 30px;
|
|
3
|
+
.el-divider__text {
|
|
4
|
+
color: #888;
|
|
5
|
+
font-weight:300;
|
|
6
|
+
}
|
|
7
|
+
.pr;
|
|
8
|
+
}
|
|
9
|
+
@media screen and (max-width:@phone){
|
|
10
|
+
.m-single-box{
|
|
11
|
+
padding:0 15px;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.m-single-prepend {
|
|
16
|
+
.pr;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.m-single-post {
|
|
20
|
+
.mb(10px);
|
|
21
|
+
.pr;
|
|
22
|
+
.el-divider{
|
|
23
|
+
margin:10px auto 20px auto;
|
|
24
|
+
}
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
.m-single-content{
|
|
30
|
+
height: auto !important;
|
|
31
|
+
}
|
|
32
|
+
@media print{
|
|
33
|
+
.m-single-content{
|
|
34
|
+
table{
|
|
35
|
+
width: 100% !important;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
@media print{
|
|
40
|
+
.m-single-comment{.none;}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.m-single-null{
|
|
44
|
+
padding:20px 0;
|
|
45
|
+
}
|
package/assets/data/box.json
CHANGED
package/assets/data/nav.json
CHANGED
package/assets/data/panel.json
CHANGED
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
"onlyAdmin":false
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"label": "
|
|
24
|
-
"link": "/
|
|
23
|
+
"label": "全局设置",
|
|
24
|
+
"link": "/config",
|
|
25
25
|
"onlyAdmin":true
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
|
-
"label": "
|
|
28
|
+
"label": "后台管理",
|
|
29
29
|
"link": "https://os.jx3box.com/admin",
|
|
30
30
|
"onlyAdmin":true
|
|
31
31
|
}
|
package/assets/data/zlp.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"std":["北天药宗","奉天证道"],
|
|
3
|
-
"origin":["藏剑山庄","物华天宝"],
|
|
4
|
-
"all":["北天药宗","奉天证道","藏剑山庄","物华天宝"]
|
|
5
|
-
}
|
|
2
|
+
"std": ["北天药宗", "奉天证道"],
|
|
3
|
+
"origin": ["藏剑山庄", "物华天宝"],
|
|
4
|
+
"all": ["北天药宗", "奉天证道", "藏剑山庄", "物华天宝"]
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 12 16" width="12" height="16" aria-hidden="true" fill="#555555"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true" fill="#444444"><path fill-rule="evenodd" d="M12 14.002a.998.998 0 0 1-.998.998H1.001A1 1 0 0 1 0 13.999V13c0-2.633 4-4 4-4s.229-.409 0-1c-.841-.62-.944-1.59-1-4 .173-2.413 1.867-3 3-3s2.827.586 3 3c-.056 2.41-.159 3.38-1 4-.229.59 0 1 0 1s4 1.367 4 4v1.002z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 12 16" version="1.1" width="12" height="16" fill="#dbab09"><path fill-rule="evenodd" d="M4 13H3v-1h1v1zm8-6v7c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h1V4c0-2.2 1.8-4 4-4s4 1.8 4 4v2h1c.55 0 1 .45 1 1zM3.8 6h4.41V4c0-1.22-.98-2.2-2.2-2.2-1.22 0-2.2.98-2.2 2.2v2H3.8zM11 7H2v7h9V7zM4 8H3v1h1V8zm0 2H3v1h1v-1z"></path></svg>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
5
|
+
width="485.213px" height="485.212px" viewBox="0 0 485.213 485.212" style="enable-background:new 0 0 485.213 485.212;" fill="#555555"
|
|
6
|
+
xml:space="preserve">
|
|
7
|
+
<g>
|
|
8
|
+
<path d="M60.652,75.816V15.163C60.652,6.781,67.433,0,75.817,0c8.38,0,15.161,6.781,15.161,15.163v60.653
|
|
9
|
+
c0,8.38-6.781,15.161-15.161,15.161C67.433,90.978,60.652,84.196,60.652,75.816z M318.424,90.978
|
|
10
|
+
c8.378,0,15.163-6.781,15.163-15.161V15.163C333.587,6.781,326.802,0,318.424,0c-8.382,0-15.168,6.781-15.168,15.163v60.653
|
|
11
|
+
C303.256,84.196,310.042,90.978,318.424,90.978z M485.212,363.906c0,66.996-54.312,121.307-121.303,121.307
|
|
12
|
+
c-66.986,0-121.302-54.311-121.302-121.307c0-66.986,54.315-121.3,121.302-121.3C430.9,242.606,485.212,296.919,485.212,363.906z
|
|
13
|
+
M454.89,363.906c0-50.161-40.81-90.976-90.98-90.976c-50.166,0-90.976,40.814-90.976,90.976c0,50.171,40.81,90.98,90.976,90.98
|
|
14
|
+
C414.08,454.886,454.89,414.077,454.89,363.906z M121.305,181.955H60.652v60.651h60.653V181.955z M60.652,333.584h60.653V272.93
|
|
15
|
+
H60.652V333.584z M151.629,242.606h60.654v-60.651h-60.654V242.606z M151.629,333.584h60.654V272.93h-60.654V333.584z
|
|
16
|
+
M30.328,360.891V151.628h333.582v60.653h30.327V94c0-18.421-14.692-33.349-32.843-33.349h-12.647v15.166
|
|
17
|
+
c0,16.701-13.596,30.325-30.322,30.325c-16.731,0-30.326-13.624-30.326-30.325V60.651H106.14v15.166
|
|
18
|
+
c0,16.701-13.593,30.325-30.322,30.325c-16.733,0-30.327-13.624-30.327-30.325V60.651H32.859C14.707,60.651,0.001,75.579,0.001,94
|
|
19
|
+
v266.892c0,18.36,14.706,33.346,32.858,33.346h179.424v-30.331H32.859C31.485,363.906,30.328,362.487,30.328,360.891z
|
|
20
|
+
M303.256,242.606v-60.651h-60.648v60.651H303.256z M409.399,363.906h-45.49v-45.49c0-8.377-6.781-15.158-15.163-15.158
|
|
21
|
+
s-15.159,6.781-15.159,15.158v60.658c0,8.378,6.777,15.163,15.159,15.163h60.653c8.382,0,15.163-6.785,15.163-15.163
|
|
22
|
+
C424.562,370.692,417.781,363.906,409.399,363.906z"/>
|
|
23
|
+
</g>
|
|
24
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" fill="#6a737d"
|
|
4
|
+
viewBox="0 0 485.2 485.2" style="enable-background:new 0 0 485.2 485.2;" xml:space="preserve">
|
|
5
|
+
<g>
|
|
6
|
+
<path d="M60.7,75.8V15.2C60.7,6.8,67.4,0,75.8,0C84.2,0,91,6.8,91,15.2v60.7C91,84.2,84.2,91,75.8,91C67.4,91,60.7,84.2,60.7,75.8z
|
|
7
|
+
"/>
|
|
8
|
+
<path d="M318.4,91c8.4,0,15.2-6.8,15.2-15.2V15.2c0-8.4-6.8-15.2-15.2-15.2c-8.4,0-15.2,6.8-15.2,15.2v60.7
|
|
9
|
+
C303.3,84.2,310,91,318.4,91z"/>
|
|
10
|
+
<rect x="60.7" y="182" width="60.7" height="60.7"/>
|
|
11
|
+
<rect x="60.7" y="272.9" width="60.7" height="60.7"/>
|
|
12
|
+
<rect x="151.6" y="182" width="60.7" height="60.7"/>
|
|
13
|
+
<rect x="151.6" y="272.9" width="60.7" height="60.7"/>
|
|
14
|
+
<path d="M30,361.2v-210h334c0.2,70.7,0.4,141.4,0.7,212.1c9.8,0,19.6-0.1,29.3-0.1c0-89.9,0-179.7,0-269.6
|
|
15
|
+
c0-18.5-14.5-33.4-32.5-33.4H349v15.2c0,16.7-13.7,30.3-30.5,30.3c-16.8,0-30.5-13.6-30.5-30.3V60.2H106v15.2
|
|
16
|
+
c0,16.7-13.7,30.3-30.5,30.3C58.7,105.7,45,92.1,45,75.4V60.2H32.5C14.5,60.2,0,75.2,0,93.6v267.2c0,9.2,3.6,17.5,9.5,23.6
|
|
17
|
+
c7.8,8.1,18.5,9.3,23,9.8c22.1,2.4,165.3,2.9,361.5,1c0-10.7,0-21.3,0-32c-120.5,0.3-241,0.7-361.5,1
|
|
18
|
+
C31.7,363.2,30.8,362.2,30,361.2z"/>
|
|
19
|
+
<path d="M420.3,387.9"/>
|
|
20
|
+
<rect x="242.6" y="182" width="60.6" height="60.7"/>
|
|
21
|
+
<rect x="242.6" y="272.9" width="60.7" height="60.7"/>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</LeftSidebar>
|
|
21
21
|
|
|
22
22
|
<Main :withoutLeft="false" :withoutRight="false">
|
|
23
|
-
|
|
23
|
+
<PostHeader :post="post"/>
|
|
24
24
|
|
|
25
25
|
<Creators :postId="30432" style="margin-bottom:10px"/>
|
|
26
26
|
<Collection :id="59" :defaultVisible="true"/>
|
|
@@ -76,11 +76,8 @@
|
|
|
76
76
|
<hr>
|
|
77
77
|
|
|
78
78
|
<RightSidebar>
|
|
79
|
-
<
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
<Author :author="author" uid="5" />
|
|
83
|
-
</div>
|
|
79
|
+
<RightSideMsg>Hello</RightSideMsg >
|
|
80
|
+
<PostCollection :id="59"/>
|
|
84
81
|
</RightSidebar>
|
|
85
82
|
|
|
86
83
|
<Footer></Footer>
|
|
@@ -105,6 +102,9 @@ import RightSideMsg from "./RightSideMsg.vue";
|
|
|
105
102
|
import Footer from "./Footer.vue";
|
|
106
103
|
import Bottom from "./Bottom.vue";
|
|
107
104
|
|
|
105
|
+
import PostHeader from "./single/PostHeader.vue";
|
|
106
|
+
import PostCollection from "./single/PostCollection.vue";
|
|
107
|
+
|
|
108
108
|
import Thx from "./single/Thx.vue";
|
|
109
109
|
import Collection from "./single/Collection.vue";
|
|
110
110
|
import Creators from "./single/Creators.vue";
|
|
@@ -145,6 +145,9 @@ export default {
|
|
|
145
145
|
Bottom,
|
|
146
146
|
RightSidebar,
|
|
147
147
|
|
|
148
|
+
PostHeader,
|
|
149
|
+
PostCollection,
|
|
150
|
+
|
|
148
151
|
Thx,
|
|
149
152
|
Collection,
|
|
150
153
|
Creators,
|
|
@@ -182,6 +185,8 @@ export default {
|
|
|
182
185
|
wikiPost: null,
|
|
183
186
|
tag : '',
|
|
184
187
|
visible : false,
|
|
188
|
+
|
|
189
|
+
post : ''
|
|
185
190
|
};
|
|
186
191
|
},
|
|
187
192
|
created: function() {
|
|
@@ -191,6 +196,9 @@ export default {
|
|
|
191
196
|
if (res.code === 200) this.wikiPost = res.data;
|
|
192
197
|
}
|
|
193
198
|
);
|
|
199
|
+
axios.get('/api/cms/post/32035').then((res) => {
|
|
200
|
+
this.post = res.data.data
|
|
201
|
+
})
|
|
194
202
|
},
|
|
195
203
|
methods: {
|
|
196
204
|
addUser : function (val){
|
|
@@ -199,3 +207,9 @@ export default {
|
|
|
199
207
|
},
|
|
200
208
|
};
|
|
201
209
|
</script>
|
|
210
|
+
|
|
211
|
+
<style lang="less">
|
|
212
|
+
body{
|
|
213
|
+
padding-top:0;
|
|
214
|
+
}
|
|
215
|
+
</style>
|
package/src/Author.vue
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
</div>
|
|
79
79
|
<div class="u-medals" v-if="medals && medals.length">
|
|
80
80
|
<span class="u-medal" v-for="(item, i) in medals" :key="i">
|
|
81
|
-
<img :src="item.medal |
|
|
81
|
+
<img :src="item.medal | showMedalIcon" :title="item | showMedalDesc" />
|
|
82
82
|
</span>
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
@@ -179,8 +179,11 @@ export default {
|
|
|
179
179
|
},
|
|
180
180
|
},
|
|
181
181
|
filters: {
|
|
182
|
-
|
|
183
|
-
return __imgPath + "image/medals/
|
|
182
|
+
showMedalIcon: function (val) {
|
|
183
|
+
return __imgPath + "image/medals/user/" + val + ".gif";
|
|
184
|
+
},
|
|
185
|
+
showMedalDesc : function (item){
|
|
186
|
+
return item.medal_desc || medal_map[item.medal]
|
|
184
187
|
},
|
|
185
188
|
authorLink,
|
|
186
189
|
weiboLink: function (val) {
|
package/src/header/nav.vue
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<nav class="c-header-nav" v-if="finalNav">
|
|
3
|
-
<div class="u-item-box" v-for="item in finalNav" :key="item.key">
|
|
3
|
+
<div class="u-item-box" v-for="item in finalNav" :key="'header-nav-' + item.key">
|
|
4
4
|
<template
|
|
5
5
|
v-if="item.status && item.children && item.children.length"
|
|
6
6
|
>
|
package/src/header/user.vue
CHANGED
|
@@ -6,8 +6,15 @@
|
|
|
6
6
|
<el-tooltip effect="dark" content="我的消息" placement="bottom">
|
|
7
7
|
<a class="u-msg" :href="url.msg">
|
|
8
8
|
<i class="u-icon u-icon-msg">
|
|
9
|
-
<i
|
|
10
|
-
|
|
9
|
+
<i
|
|
10
|
+
class="u-pop"
|
|
11
|
+
style="display: none"
|
|
12
|
+
v-show="pop"
|
|
13
|
+
></i>
|
|
14
|
+
<img
|
|
15
|
+
svg-inline
|
|
16
|
+
src="../../assets/img/header/msg.svg"
|
|
17
|
+
/>
|
|
11
18
|
</i>
|
|
12
19
|
</a>
|
|
13
20
|
</el-tooltip>
|
|
@@ -17,14 +24,22 @@
|
|
|
17
24
|
<div class="c-header-panel" id="c-header-panel">
|
|
18
25
|
<el-tooltip effect="dark" content="发布中心" placement="bottom">
|
|
19
26
|
<a class="u-post" :href="url.publish">
|
|
20
|
-
<img
|
|
27
|
+
<img
|
|
28
|
+
class="u-add"
|
|
29
|
+
svg-inline
|
|
30
|
+
src="../../assets/img/header/add.svg"
|
|
31
|
+
/>
|
|
21
32
|
</a>
|
|
22
33
|
</el-tooltip>
|
|
23
34
|
</div>
|
|
24
35
|
|
|
25
36
|
<!-- user info -->
|
|
26
37
|
<div class="c-header-info">
|
|
27
|
-
<div
|
|
38
|
+
<div
|
|
39
|
+
class="c-header-profile"
|
|
40
|
+
id="c-header-profile"
|
|
41
|
+
@click="showmenu"
|
|
42
|
+
>
|
|
28
43
|
<img class="u-avatar" :src="user.avatar" />
|
|
29
44
|
<span class="u-dropdown"></span>
|
|
30
45
|
<ul class="u-menu" v-show="!fold">
|
|
@@ -47,14 +62,17 @@
|
|
|
47
62
|
href="/vip/premium?from=header_usermenu"
|
|
48
63
|
target="_blank"
|
|
49
64
|
>
|
|
50
|
-
<i
|
|
65
|
+
<i
|
|
66
|
+
class="i-icon-vip"
|
|
67
|
+
:class="{ on: isVIP || isPRO }"
|
|
68
|
+
>{{ vipType }}</i
|
|
69
|
+
>
|
|
51
70
|
<span class="u-vip-type">
|
|
52
71
|
<template v-if="isVIP || isPRO">
|
|
53
|
-
{{ vipTypeTxt
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
>({{ vipLeftDays }}天)</span>
|
|
72
|
+
{{ vipTypeTxt }}
|
|
73
|
+
<span class="u-vip-left"
|
|
74
|
+
>({{ vipLeftDays }}天)</span
|
|
75
|
+
>
|
|
58
76
|
</template>
|
|
59
77
|
<template v-else>升级账号类型</template>
|
|
60
78
|
</span>
|
|
@@ -63,7 +81,10 @@
|
|
|
63
81
|
</li>
|
|
64
82
|
<hr />
|
|
65
83
|
<template v-for="(item, i) in panel">
|
|
66
|
-
<li
|
|
84
|
+
<li
|
|
85
|
+
:key="'panel-' + i"
|
|
86
|
+
v-if="isEditor || !item.onlyAdmin"
|
|
87
|
+
>
|
|
67
88
|
<a :href="item.link">{{ item.label }}</a>
|
|
68
89
|
</li>
|
|
69
90
|
</template>
|
|
@@ -104,7 +125,7 @@ export default {
|
|
|
104
125
|
data: function () {
|
|
105
126
|
return {
|
|
106
127
|
panel,
|
|
107
|
-
isEditor
|
|
128
|
+
isEditor: false,
|
|
108
129
|
|
|
109
130
|
// 是否有消息
|
|
110
131
|
pop: false,
|
|
@@ -200,7 +221,7 @@ export default {
|
|
|
200
221
|
});
|
|
201
222
|
},
|
|
202
223
|
loadPanel: function () {
|
|
203
|
-
getMenu(
|
|
224
|
+
getMenu("panel").then((res) => {
|
|
204
225
|
this.panel = res.data?.data?.val || panel;
|
|
205
226
|
});
|
|
206
227
|
},
|
|
@@ -237,7 +258,7 @@ export default {
|
|
|
237
258
|
// 初始化
|
|
238
259
|
init: function () {
|
|
239
260
|
if (this.isLogin) {
|
|
240
|
-
this.isEditor = User.isEditor()
|
|
261
|
+
this.isEditor = User.isEditor();
|
|
241
262
|
this.checkMSG();
|
|
242
263
|
this.loadPanel();
|
|
243
264
|
this.loadAsset();
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<span>
|
|
5
5
|
<i class="el-icon-notebook-1"></i> 该作品已被收录至作者的剑三小册
|
|
6
6
|
</span>
|
|
7
|
-
<a @click.stop :href="id | collectionLink">《{{ title }}》</a>
|
|
7
|
+
<a @click.stop :href="id | collectionLink" target="_blank">《{{ title }}》</a>
|
|
8
8
|
</div>
|
|
9
9
|
<transition name="fade">
|
|
10
10
|
<div class="w-collection-list" v-if="visible">
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="m-single-collection" v-if="list && list.length">
|
|
3
|
+
<div class="u-title"><i class="el-icon-connection"></i> 关联</div>
|
|
4
|
+
<ul class="u-list">
|
|
5
|
+
<li v-for="(item, i) in list" :key="i">
|
|
6
|
+
<el-tooltip class="item" effect="dark" :content="item.title" placement="left">
|
|
7
|
+
<a :href="item | showLink" target="_blank">
|
|
8
|
+
<i class="el-icon-link"></i>
|
|
9
|
+
{{ item.title }}
|
|
10
|
+
</a>
|
|
11
|
+
</el-tooltip>
|
|
12
|
+
</li>
|
|
13
|
+
</ul>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
import { getLink } from "@jx3box/jx3box-common/js/utils";
|
|
19
|
+
import { getCollection } from "../../service/helper";
|
|
20
|
+
export default {
|
|
21
|
+
name: "PostCollection",
|
|
22
|
+
props: ["id", "store"],
|
|
23
|
+
components: {},
|
|
24
|
+
data: function() {
|
|
25
|
+
return {
|
|
26
|
+
data: {
|
|
27
|
+
title: "",
|
|
28
|
+
posts: [],
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
computed: {
|
|
33
|
+
list: function() {
|
|
34
|
+
return this.data?.posts || this.store?.posts;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
watch: {
|
|
38
|
+
id: {
|
|
39
|
+
immediate: true,
|
|
40
|
+
handler: function(val) {
|
|
41
|
+
!!~~val && this.loadData();
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
methods: {
|
|
46
|
+
loadData: function() {
|
|
47
|
+
getCollection(this.id).then((res) => {
|
|
48
|
+
this.data = res.data?.data?.collection;
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
filters: {
|
|
53
|
+
showLink: function(item) {
|
|
54
|
+
if (item.type == "custom") {
|
|
55
|
+
return item.url;
|
|
56
|
+
} else {
|
|
57
|
+
return getLink(item.type, item.id);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
</script>
|
|
63
|
+
<style scoped lang="less">
|
|
64
|
+
.m-single-collection {
|
|
65
|
+
.u-title {
|
|
66
|
+
font-weight: 300;
|
|
67
|
+
font-size: 20px;
|
|
68
|
+
}
|
|
69
|
+
.u-list {
|
|
70
|
+
list-style: none;
|
|
71
|
+
padding: 10px 20px;
|
|
72
|
+
margin: 0;
|
|
73
|
+
li {
|
|
74
|
+
.fz(13px, 36px);
|
|
75
|
+
}
|
|
76
|
+
a {
|
|
77
|
+
.db;
|
|
78
|
+
transition: 0.15s ease-in-out;
|
|
79
|
+
.nobreak;
|
|
80
|
+
&:hover {
|
|
81
|
+
background-color: #e6f0fb;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="m-single-contents">
|
|
3
|
+
<!-- TODO: -->
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script>
|
|
8
|
+
export default {
|
|
9
|
+
name : 'PostContents',
|
|
10
|
+
props:[],
|
|
11
|
+
components : {},
|
|
12
|
+
data : function(){
|
|
13
|
+
return {
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
computed:{},
|
|
18
|
+
watch:{},
|
|
19
|
+
methods:{},
|
|
20
|
+
filters:{},
|
|
21
|
+
created:function(){},
|
|
22
|
+
mounted:function(){},
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<header class="m-single-header" v-if="post">
|
|
3
|
+
<!-- 标题 -->
|
|
4
|
+
<div class="m-single-title">
|
|
5
|
+
<span class="u-title u-sub-block" :href="url" :title="title">
|
|
6
|
+
<i class="u-original" v-if="isOriginal">原创</i>
|
|
7
|
+
<i class="u-private" v-if="post.post_status != 'publish'">
|
|
8
|
+
<i class="el-icon-lock" v-if="post.post_status == 'draft' || post.post_status == 'pending' || ~~post.visible" style="color:#fb9b24"></i>
|
|
9
|
+
<i class="el-icon-delete" v-if="post.post_status == 'dustbin'" style="color:#c00"></i>
|
|
10
|
+
</i>
|
|
11
|
+
<span class="u-title-text">{{ title }}</span>
|
|
12
|
+
</span>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<!-- 信息 -->
|
|
16
|
+
<div class="m-single-info">
|
|
17
|
+
<!-- 用户名 -->
|
|
18
|
+
<div class="u-author u-sub-block">
|
|
19
|
+
<i class="u-author-icon">
|
|
20
|
+
<img svg-inline src="../../assets/img/single/author.svg" />
|
|
21
|
+
</i>
|
|
22
|
+
<a class="u-name" :href="author_link">{{ author_name }}</a>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- 自定义字段 -->
|
|
26
|
+
<!-- <template v-if="metas && metas.length">
|
|
27
|
+
<div class="u-meta u-sub-block" v-for="(meta_value,meta_key) in metas" :key="meta_key">
|
|
28
|
+
<em class="u-label">{{meta_key}}</em>
|
|
29
|
+
<span class="u-value">{{meta_value}}</span>
|
|
30
|
+
</div>
|
|
31
|
+
</template> -->
|
|
32
|
+
<slot></slot>
|
|
33
|
+
|
|
34
|
+
<!-- 客户端 -->
|
|
35
|
+
<div class="u-meta u-sub-block">
|
|
36
|
+
<em class="u-label">适用客户端</em>
|
|
37
|
+
<span class="u-value u-client" :class="client">{{ client | showClientLabel }}</span>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<!-- 发布日期 -->
|
|
41
|
+
<span class="u-podate u-sub-block" :title="'发布日期:' + post_time">
|
|
42
|
+
<i class="u-icon-podate">
|
|
43
|
+
<img svg-inline src="../../assets/img/single/podate.svg" />
|
|
44
|
+
</i>
|
|
45
|
+
<time>{{ post_date }}</time>
|
|
46
|
+
</span>
|
|
47
|
+
|
|
48
|
+
<!-- 最后更新 -->
|
|
49
|
+
<span class="u-modate u-sub-block" :title="'最后更新:' + update_time">
|
|
50
|
+
<i class="u-icon-modate">
|
|
51
|
+
<img svg-inline src="../../assets/img/single/modate.svg" />
|
|
52
|
+
</i>
|
|
53
|
+
<time>{{ update_date }}</time>
|
|
54
|
+
</span>
|
|
55
|
+
|
|
56
|
+
<!-- 查看次数 -->
|
|
57
|
+
<span class="u-views u-sub-block">
|
|
58
|
+
<i class="el-icon-view"></i>
|
|
59
|
+
{{ views }}
|
|
60
|
+
</span>
|
|
61
|
+
|
|
62
|
+
<!-- 编辑 -->
|
|
63
|
+
<a class="u-edit u-sub-block" :href="edit_link" v-if="canEdit">
|
|
64
|
+
<i class="u-icon-edit el-icon-edit-outline"></i>
|
|
65
|
+
<span>编辑</span>
|
|
66
|
+
</a>
|
|
67
|
+
</div>
|
|
68
|
+
</header>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script>
|
|
72
|
+
import { __Root } from "@jx3box/jx3box-common/data/jx3box.json";
|
|
73
|
+
import { showDate, showTime } from "@jx3box/jx3box-common/js/moment";
|
|
74
|
+
import { editLink, authorLink } from "@jx3box/jx3box-common/js/utils.js";
|
|
75
|
+
import User from "@jx3box/jx3box-common/js/user.js";
|
|
76
|
+
import client_map from "../../assets/data/clients.json";
|
|
77
|
+
export default {
|
|
78
|
+
name: "single-header",
|
|
79
|
+
props: ["post", "stat"],
|
|
80
|
+
data: function() {
|
|
81
|
+
return {};
|
|
82
|
+
},
|
|
83
|
+
computed: {
|
|
84
|
+
url: function() {
|
|
85
|
+
return location.href;
|
|
86
|
+
},
|
|
87
|
+
isOriginal: function() {
|
|
88
|
+
return !!~~this.post?.original;
|
|
89
|
+
},
|
|
90
|
+
title: function() {
|
|
91
|
+
return this.post?.post_title || "无标题";
|
|
92
|
+
},
|
|
93
|
+
author_link: function() {
|
|
94
|
+
return authorLink(this.post?.post_author);
|
|
95
|
+
},
|
|
96
|
+
author_name: function() {
|
|
97
|
+
return this.post?.author || "匿名";
|
|
98
|
+
},
|
|
99
|
+
post_date: function() {
|
|
100
|
+
return showDate(new Date(this.post?.post_date));
|
|
101
|
+
},
|
|
102
|
+
update_date: function() {
|
|
103
|
+
return showDate(new Date(this.post?.post_modified));
|
|
104
|
+
},
|
|
105
|
+
post_time: function() {
|
|
106
|
+
return showTime(new Date(this.post?.post_date));
|
|
107
|
+
},
|
|
108
|
+
update_time: function() {
|
|
109
|
+
return showTime(new Date(this.post?.post_modified));
|
|
110
|
+
},
|
|
111
|
+
views: function() {
|
|
112
|
+
return this.stat?.views || "-";
|
|
113
|
+
},
|
|
114
|
+
edit_link: function() {
|
|
115
|
+
return editLink(this.post?.post_type, this.post?.ID);
|
|
116
|
+
},
|
|
117
|
+
canEdit: function() {
|
|
118
|
+
return this.post?.post_author == User.getInfo().uid || User.isEditor();
|
|
119
|
+
},
|
|
120
|
+
client: function() {
|
|
121
|
+
return this.post?.client || "std";
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
methods: {},
|
|
125
|
+
mounted: function() {},
|
|
126
|
+
filters: {
|
|
127
|
+
showClientLabel: function(val) {
|
|
128
|
+
return client_map[val];
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
</script>
|
|
133
|
+
|
|
134
|
+
<style lang="less">
|
|
135
|
+
.m-single-header {
|
|
136
|
+
padding-top: 20px;
|
|
137
|
+
padding-bottom: 20px;
|
|
138
|
+
padding-right: 280px;
|
|
139
|
+
.pr;
|
|
140
|
+
.u-sub-block {
|
|
141
|
+
.dbi;
|
|
142
|
+
.y(top);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
@media screen and (max-width: @phone) {
|
|
146
|
+
.m-single-header {
|
|
147
|
+
padding-right: 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
@media print {
|
|
151
|
+
.m-single-header {
|
|
152
|
+
padding-right: 0;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.m-single-title {
|
|
157
|
+
.fz(32px);
|
|
158
|
+
padding: 1px 0;
|
|
159
|
+
|
|
160
|
+
.u-title {
|
|
161
|
+
color: @color;
|
|
162
|
+
// &:hover {
|
|
163
|
+
// color: @primary;
|
|
164
|
+
// }
|
|
165
|
+
letter-spacing: 0.5px;
|
|
166
|
+
font-weight: 300;
|
|
167
|
+
.db;
|
|
168
|
+
.nobreak;
|
|
169
|
+
}
|
|
170
|
+
.u-author {
|
|
171
|
+
.pr;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.u-original {
|
|
175
|
+
background-color: #6f42c1;
|
|
176
|
+
color: #fff;
|
|
177
|
+
.fz(14px, 20px);
|
|
178
|
+
font-style: normal;
|
|
179
|
+
font-weight: normal;
|
|
180
|
+
padding: 2px 5px;
|
|
181
|
+
.mr(5px);
|
|
182
|
+
// .fl;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.u-private {
|
|
186
|
+
.y(-2px);
|
|
187
|
+
margin-right: 5px;
|
|
188
|
+
color: #111;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
@media screen and (max-width: @phone) {
|
|
192
|
+
.m-single-title {
|
|
193
|
+
.fz(1rem, 1.8);
|
|
194
|
+
.u-title {
|
|
195
|
+
word-break: break-all;
|
|
196
|
+
white-space: normal;
|
|
197
|
+
font-weight: normal;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
@media print {
|
|
202
|
+
.m-single-title {
|
|
203
|
+
.x;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.m-single-info {
|
|
208
|
+
margin-top: 10px;
|
|
209
|
+
.clearfix;
|
|
210
|
+
.fz(12px, 20px);
|
|
211
|
+
color: #666;
|
|
212
|
+
|
|
213
|
+
@origin: #0eb7ce;
|
|
214
|
+
@std: #f0b400;
|
|
215
|
+
@all: #a26ef7;
|
|
216
|
+
|
|
217
|
+
.u-client {
|
|
218
|
+
// .fl;
|
|
219
|
+
font-style: normal;
|
|
220
|
+
.fz(12px);
|
|
221
|
+
padding: 0px 5px;
|
|
222
|
+
.r(3px);
|
|
223
|
+
// .mr(10px);
|
|
224
|
+
|
|
225
|
+
&.std {
|
|
226
|
+
border: 1px solid @std;
|
|
227
|
+
color: @std;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
&.origin {
|
|
231
|
+
border: 1px solid @origin;
|
|
232
|
+
color: @origin;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
&.all {
|
|
236
|
+
border: 1px solid @all;
|
|
237
|
+
color: @all;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
* {
|
|
242
|
+
.dbi;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
svg {
|
|
246
|
+
fill: #666;
|
|
247
|
+
.size(16px);
|
|
248
|
+
.y;
|
|
249
|
+
.mr(3px);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.u-sub-block {
|
|
253
|
+
.mr(15px);
|
|
254
|
+
.fl;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.u-author {
|
|
258
|
+
a:hover {
|
|
259
|
+
box-shadow: 0 1px 0 @color-link;
|
|
260
|
+
}
|
|
261
|
+
i {
|
|
262
|
+
.pr;
|
|
263
|
+
top: -2px;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.u-label {
|
|
268
|
+
.mr(5px);
|
|
269
|
+
background-color: #eee;
|
|
270
|
+
padding: 0 5px;
|
|
271
|
+
.r(2px);
|
|
272
|
+
font-style: normal;
|
|
273
|
+
}
|
|
274
|
+
.u-value {
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.u-views {
|
|
278
|
+
i {
|
|
279
|
+
.fz(15px);
|
|
280
|
+
.y;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.u-edit {
|
|
285
|
+
i {
|
|
286
|
+
&:before {
|
|
287
|
+
font-size: 16px;
|
|
288
|
+
}
|
|
289
|
+
.pr;
|
|
290
|
+
top: 2px;
|
|
291
|
+
.mr(3px);
|
|
292
|
+
}
|
|
293
|
+
&:hover {
|
|
294
|
+
box-shadow: 0 1px 0 @color-link;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
@media screen and (max-width: @ipad) {
|
|
299
|
+
.m-single-info {
|
|
300
|
+
.u-meta {
|
|
301
|
+
.none;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
@media screen and (max-width: @phone) {
|
|
306
|
+
.m-single-info {
|
|
307
|
+
.u-podate {
|
|
308
|
+
.none;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
@media print {
|
|
313
|
+
.m-single-info {
|
|
314
|
+
.u-meta,
|
|
315
|
+
.u-views,
|
|
316
|
+
.u-edit {
|
|
317
|
+
.none;
|
|
318
|
+
}
|
|
319
|
+
.x;
|
|
320
|
+
.u-sub-block {
|
|
321
|
+
float: none;
|
|
322
|
+
}
|
|
323
|
+
.u-name {
|
|
324
|
+
color: @color;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
</style>
|