w-web-api 1.0.27 → 1.0.29

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.
Files changed (42) hide show
  1. package/README.md +23 -16
  2. package/dist/css/app.d38a4241.css +1 -0
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.86198344.js +2 -0
  5. package/dist/js/app-legacy.86198344.js.map +1 -0
  6. package/dist/js/app.86198344.js +2 -0
  7. package/dist/js/app.86198344.js.map +1 -0
  8. package/dist/js/chunk-vendors-legacy.c0c4267e.js +14 -0
  9. package/dist/js/chunk-vendors-legacy.c0c4267e.js.map +1 -0
  10. package/dist/js/chunk-vendors.c0c4267e.js +14 -0
  11. package/dist/js/chunk-vendors.c0c4267e.js.map +1 -0
  12. package/dist/w-web-api.umd.js +2 -2
  13. package/dist/w-web-api.umd.js.map +1 -1
  14. package/docs/WWebApi.html +4 -4
  15. package/docs/WWebApi.mjs.html +167 -64
  16. package/docs/index.html +1 -1
  17. package/{g.mDb.mjs → g.backupDb.mjs} +1 -1
  18. package/{g.mInitialTestData.mjs → g.initialTestData.mjs} +1 -1
  19. package/package.json +5 -10
  20. package/public/index.html +1 -1
  21. package/server/WWebApi.mjs +166 -63
  22. package/server/provideApis.mjs +2 -2
  23. package/src/App.vue +1 -8
  24. package/src/components/Layout.vue +2 -2
  25. package/src/components/LayoutContent.vue +634 -25
  26. package/src/main.js +0 -2
  27. package/src/store/mutations.mjs +13 -0
  28. package/srv.mjs +21 -12
  29. package/tableTags-web-api.json +1 -1
  30. package/vue.config.js +1 -1
  31. package/dist/css/app.e645631b.css +0 -1
  32. package/dist/css/chunk-vendors.ca61ed63.css +0 -5
  33. package/dist/js/app-legacy.4bcebb66.js +0 -2
  34. package/dist/js/app-legacy.4bcebb66.js.map +0 -1
  35. package/dist/js/app.8115e31a.js +0 -2
  36. package/dist/js/app.8115e31a.js.map +0 -1
  37. package/dist/js/chunk-vendors-legacy.0b4288c4.js +0 -14
  38. package/dist/js/chunk-vendors-legacy.0b4288c4.js.map +0 -1
  39. package/dist/js/chunk-vendors.0b4288c4.js +0 -14
  40. package/dist/js/chunk-vendors.0b4288c4.js.map +0 -1
  41. package/src/components/LayoutContentList.vue +0 -589
  42. package/src/plugins/mVuetify.mjs +0 -12
@@ -1,50 +1,462 @@
1
1
  <template>
2
- <div style="height:100%;">
2
+ <div
3
+ style="height:100%; width:100%;"
4
+ :changeApis="changeApis"
5
+ v-domresize
6
+ @domresize="resize"
7
+ >
3
8
 
4
9
  <template v-if="syncState">
5
10
 
6
- <LayoutContentList></LayoutContentList>
11
+ <WDrawer
12
+ :style="`height:${panelHeight}px; width:100%;`"
13
+ v-model="drawer"
14
+ :drawerWidth.sync="drawerWidth"
15
+ :drawerWidthMin="drawerWidthMin"
16
+ :drawerWidthMax="drawerWidthMax"
17
+ :mode="'from-left'"
18
+ :dragDrawerWidth="true"
19
+ :autoSwitch="true"
20
+ :switchWidth="drawerWidth*2.3"
21
+ >
22
+
23
+ <template v-slot:drawer="props">
24
+ <div :style="`height:${props.height}px; background:#fff; position:relative;`">
25
+
26
+ <WTree
27
+ :style="`height:${props.height}px;`"
28
+ :viewHeightMax="props.height"
29
+ :data="apisTree"
30
+ :iconHeight="lineHeightTree"
31
+ :defItemHeight="lineHeightTree"
32
+ :activable="true"
33
+ :itemActive="apiActive"
34
+ :funActive="funActive"
35
+ :itemTextColorActive="'#000'"
36
+ :itemBackgroundColorActive ="'rgba(100,100,100,0.15)'"
37
+ >
38
+ <template v-slot:item="props">
39
+
40
+ <div
41
+ :style="`display:flex; align-items:center; min-height:${lineHeightTree}px;`"
42
+ v-if="props.data.type!=='node'"
43
+ >
44
+ {{props.data.key}}
45
+ </div>
46
+
47
+ <div
48
+ :style="`display:flex; align-items:center; min-height:${lineHeightTree}px; cursor:pointer;`"
49
+ @click="ckItem(getItemByKey(props.data.text))"
50
+ v-else
51
+ >
52
+
53
+ <div style="padding-right:5px;">
54
+ <div :style="`padding:0px 6px; font-size:0.7rem; border-radius:10px; border:1px solid #ddd; color:#fff; background:${getMethodColorByKey(props.data.text)};`">
55
+ {{getMethodByKey(props.data.text)}}
56
+ </div>
57
+ </div>
58
+
59
+ <div>
60
+ {{$ui.gv(getItemByKey(props.data.text),'name')}}
61
+ </div>
62
+
63
+ </div>
64
+
65
+ </template>
66
+ </WTree>
67
+
68
+ <div
69
+ :style="`position:absolute; top:1px; right:12px;`"
70
+ v-if="drawer"
71
+ >
72
+ <WButtonCircle
73
+ :paddingStyle="{v:3,h:3}"
74
+ :icon="'mdi-arrow-left'"
75
+ :iconSize="16"
76
+ :backgroundColor="'#fff'"
77
+ :backgroundColorHover="'#eee'"
78
+ :backgroundColorFocus="'#fff'"
79
+ :borderColor="'transparent'"
80
+ :borderColorHover="'#eee'"
81
+ :borderColorFocus="'#eee'"
82
+ :tooltip="$t('menuTreeHide')"
83
+ :shadow="true"
84
+ @click="drawer=false"
85
+ ></WButtonCircle>
86
+ </div>
87
+
88
+ </div>
89
+ </template>
90
+
91
+ <template v-slot:content="props">
92
+ <div :style="`height:${props.height}px; width:${props.width}px; position:relative;`">
93
+
94
+ <!-- 選擇API之顯示區 -->
95
+ <template>
96
+
97
+ <div
98
+ :style="`height:${props.height}px; overflow-y:auto;`"
99
+ v-if="apiSelect"
100
+ >
101
+ <div style="padding:20px;">
102
+
103
+ <div style="padding:5px;">
104
+
105
+ <div class="bk-title" style="">
106
+ {{$t('apiUrl')}}
107
+ </div>
108
+
109
+ <div style="padding:10px; border-radius:5px; border:1px solid #ddd; background:#fff; display:flex; align-items:center;">
110
+
111
+ <div style="padding-right:5px;">
112
+ <div :style="`padding:0px 6px; font-size:0.7rem; border-radius:10px; border:1px solid #ddd; color:#fff; background:${getMethodColor(apiSelect)};`">
113
+ {{getMethod(apiSelect)}}
114
+ </div>
115
+ </div>
116
+
117
+ <div style="font-size:0.8rem;">
118
+ {{$ui.gv(apiSelect,'url')}}
119
+ </div>
120
+
121
+ </div>
122
+
123
+ </div>
124
+
125
+ <div style="padding:10px;">
126
+
127
+ <div style="color:#485ed5;">
128
+ {{$ui.gv(apiSelect,'name')}}
129
+ </div>
130
+
131
+ <div class="bk-title" style="">
132
+ {{$ui.gv(apiSelect,'description')}}
133
+ </div>
134
+
135
+ </div>
136
+
137
+ <div style="padding:10px;">
138
+
139
+ <div class="bk" style="">
140
+
141
+ <div class="bk-title" style="">
142
+ {{$t('tokens')}}
143
+ </div>
144
+
145
+ <div class="bk-item" style="">
146
+ {{$ui.gv(apiSelect,'tokens')}}
147
+ </div>
148
+
149
+ </div>
150
+
151
+ <div class="bk" style="">
152
+
153
+ <div class="bk-title" style="">
154
+ {{$t('version')}}
155
+ </div>
156
+
157
+ <div class="bk-item" style="">
158
+ {{$ui.gv(apiSelect,'version')}}
159
+ </div>
160
+
161
+ </div>
162
+
163
+ <div class="bk" style="">
164
+
165
+ <div class="bk-title" style="">
166
+ {{$t('levels')}}
167
+ </div>
168
+
169
+ <div class="bk-item" style="">
170
+ {{$ui.gv(apiSelect,'')}}
171
+ </div>
172
+
173
+ </div>
174
+
175
+ <div class="bk" style="">
176
+
177
+ <div class="bk-title" style="">
178
+ {{$t('keywords')}}
179
+ </div>
180
+
181
+ <div class="bk-item" style="">
182
+ {{$ui.gv(apiSelect,'')}}
183
+ </div>
184
+
185
+ </div>
186
+
187
+ <div class="bk" style="">
188
+
189
+ <div class="bk-title" style="">
190
+ {{$t('state')}}
191
+ </div>
192
+
193
+ <div class="bk-item" style="">
194
+ {{$ui.gv(apiSelect,'')}}
195
+ </div>
196
+
197
+ </div>
198
+
199
+ <div class="bk" style="">
200
+
201
+ <div class="bk-title" style="">
202
+ {{$t('timeCreate')}}
203
+ </div>
204
+
205
+ <div class="bk-item" style="">
206
+ {{$ui.gv(apiSelect,'timeCreate',getDay)}}
207
+ </div>
208
+
209
+ </div>
210
+
211
+ <div class="bk" style="">
212
+
213
+ <div class="bk-title" style="">
214
+ {{$t('timeUpdate')}}
215
+ </div>
216
+
217
+ <div class="bk-item" style="">
218
+ {{$ui.gv(apiSelect,'timeUpdate',getDay)}}
219
+ </div>
220
+
221
+ </div>
222
+
223
+ <div class="bk" style="">
224
+
225
+ <div class="bk-title" style="">
226
+ {{$t('creator')}}
227
+ </div>
228
+
229
+ <div class="bk-item" style="">
230
+ {{$ui.gv(apiSelect,'creator')}}
231
+ </div>
232
+
233
+ </div>
234
+
235
+ <div class="bk" style="">
236
+
237
+ <div class="bk-title" style="">
238
+ {{$t('dataSource')}}
239
+ </div>
240
+
241
+ <div class="bk-item" style="">
242
+ {{$ui.gv(apiSelect,'dataSource')}}
243
+ </div>
244
+
245
+ </div>
246
+
247
+ <div class="bk" style="">
248
+
249
+ <div class="bk-title" style="">
250
+ {{$t('isActive')}}
251
+ </div>
252
+
253
+ <div class="bk-item" style="">
254
+ {{$ui.gv(apiSelect,'isActive')}}
255
+ </div>
256
+
257
+ </div>
258
+
259
+ </div>
260
+
261
+ <div style="padding:10px;">
262
+
263
+ <div class="bk-title" style="">
264
+ {{$t('mdInputParams')}}
265
+ </div>
266
+
267
+ <div class="bk-item" style="padding:10px;">
268
+ <MdPanel
269
+ :md="$ui.gv(apiSelect,'mdInputParams')"
270
+ ></MdPanel>
271
+ </div>
272
+
273
+ </div>
274
+
275
+ <div style="padding:10px;">
276
+
277
+ <div class="bk-title" style="">
278
+ {{$t('inputExample')}}
279
+ </div>
280
+
281
+ <div class="bk-item" style="padding:10px;">
282
+ {{$ui.gv(apiSelect,'inputExample')}}
283
+ </div>
284
+
285
+ </div>
286
+
287
+ <div style="padding:10px;">
288
+
289
+ <div class="bk-title" style="">
290
+ {{$t('mdOutputParams')}}
291
+ </div>
292
+
293
+ <div class="bk-item" style="padding:10px;">
294
+ <MdPanel
295
+ :md="$ui.gv(apiSelect,'mdOutputParams')"
296
+ ></MdPanel>
297
+ </div>
298
+
299
+ </div>
300
+
301
+ <div style="padding:10px;">
302
+
303
+ <div class="bk-title" style="">
304
+ {{$t('outputExample')}}
305
+ </div>
306
+
307
+ <div style="padding-top:3px;">
308
+
309
+ <div style="padding-left:10px; margin-bottom:-1px;">
310
+ <!-- 因上下皆有border, 故需負margin-bottom來吃掉重複border -->
311
+ <WGroupRadio
312
+ :items="optputMenuItems"
313
+ :value="optputMenuItemSelect"
314
+ @input="changeOptputMenuItemSelect"
315
+ :group="true"
316
+ :group-border-radius-style="{top:true}"
317
+ :group-shift="7"
318
+ :border-radius="20"
319
+ :border-color="'#ddd'"
320
+ :border-color-hover="'#dadada'"
321
+ :border-color-active="'orange lighten-2'"
322
+ :margin-style="{}"
323
+ ></WGroupRadio>
324
+ </div>
325
+
326
+ <div style="border:1px solid #ddd; background:#fff">
327
+
328
+ <div
329
+ style="padding:10px 15px;"
330
+ v-if="optputMenuItemSelectId==='tree'"
331
+ >
332
+ <WJsonView
333
+ style="width:100%;"
334
+ :viewHeightMax="null"
335
+ :data="getOutputJsonObj(apiSelect)"
336
+ ></WJsonView>
337
+ </div>
338
+
339
+ <div
340
+ style="padding:15px; color:#555; font-size:0.85rem;"
341
+ v-if="optputMenuItemSelectId==='raw'
342
+ ">
343
+ <pre style="margin:0px; padding:0px;">{{getOutputJson(apiSelect)}}</pre>
344
+ </div>
345
+
346
+ </div>
347
+
348
+ </div>
349
+
350
+ </div>
351
+
352
+ </div>
353
+ </div>
354
+
355
+ <div
356
+ style="padding:20px; font-size:0.9rem;"
357
+ v-else
358
+ >
359
+ {{$t('noSelectApi')}}
360
+ </div>
361
+
362
+ </template>
363
+
364
+ <div
365
+ :style="`position:absolute; top:1px; left:4px;`"
366
+ v-if="!drawer"
367
+ >
368
+ <WButtonCircle
369
+ :paddingStyle="{v:3,h:3}"
370
+ :icon="'mdi-arrow-right'"
371
+ :iconSize="16"
372
+ :backgroundColor="'#fff'"
373
+ :backgroundColorHover="'#eee'"
374
+ :backgroundColorFocus="'#fff'"
375
+ :borderColor="'transparent'"
376
+ :borderColorHover="'#eee'"
377
+ :borderColorFocus="'#eee'"
378
+ :tooltip="$t('menuTreeShow')"
379
+ :shadow="true"
380
+ @click="drawer=true"
381
+ ></WButtonCircle>
382
+ </div>
383
+
384
+ </div>
385
+ </template>
386
+
387
+ </WDrawer>
7
388
 
8
389
  </template>
9
390
 
10
- <div
11
- style="padding:20px; font-size:0.9rem;"
12
- v-else
13
- >
14
- {{$t('waitingData')}}
15
- </div>
391
+ <template v-else>
392
+ <div
393
+ style="padding:20px; font-size:0.9rem;"
394
+ >
395
+ {{$t('waitingData')}}
396
+ </div>
397
+ </template>
16
398
 
17
399
  </div>
18
400
  </template>
19
401
 
20
402
  <script>
21
403
  import get from 'lodash/get'
22
- // import map from 'lodash/map'
23
- // import each from 'lodash/each'
24
- // import size from 'lodash/size'
25
- // import cloneDeep from 'lodash/cloneDeep'
26
- // import isestr from 'wsemi/src/isestr.mjs'
27
- // import isnum from 'wsemi/src/isnum.mjs'
28
- // import cdbl from 'wsemi/src/cdbl.mjs'
29
- // import WPanelBulge from 'w-component-vue/src/components/WPanelBulge.vue'
30
- // import WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'
31
- // import WGroupCheck from 'w-component-vue/src/components/WGroupCheck.vue'
32
- // import WTree from 'w-component-vue/src/components/WTree.vue'
33
- import LayoutContentList from './LayoutContentList.vue'
404
+ import set from 'lodash/set'
405
+ import each from 'lodash/each'
406
+ import trim from 'lodash/trim'
407
+ import find from 'lodash/find'
408
+ import cloneDeep from 'lodash/cloneDeep'
409
+ import isobj from 'wsemi/src/isobj.mjs'
410
+ import iseobj from 'wsemi/src/iseobj.mjs'
411
+ import j2o from 'wsemi/src/j2o.mjs'
412
+ import timemsTZ2day from 'wsemi/src/timemsTZ2day.mjs'
413
+ import convertToTree from 'wsemi/src/convertToTree.mjs'
414
+ import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
415
+ import WGroupRadio from 'w-component-vue/src/components/WGroupRadio.vue'
416
+ import WDrawer from 'w-component-vue/src/components/WDrawer.vue'
417
+ import WTree from 'w-component-vue/src/components/WTree.vue'
418
+ import WJsonView from 'w-component-vue/src/components/WJsonView.vue'
419
+ import MdPanel from './MdPanel.vue'
34
420
 
35
421
 
36
422
  export default {
37
423
  components: {
38
- // WPanelBulge,
39
- // WButtonChip,
40
- // WGroupCheck,
41
- // WTree,
42
- LayoutContentList,
424
+ WButtonCircle,
425
+ WGroupRadio,
426
+ WDrawer,
427
+ WTree,
428
+ WJsonView,
429
+ MdPanel,
43
430
  },
44
431
  props: {
45
432
  },
46
433
  data: function() {
47
434
  return {
435
+
436
+ panelWidth: 0,
437
+ panelHeight: 0,
438
+
439
+ drawer: true,
440
+ drawerWidth: 320,
441
+ drawerWidthMin: 200,
442
+ drawerWidthMax: 700,
443
+
444
+ lineHeightTree: 38,
445
+
446
+ apisTree: [],
447
+ kpApisTree: {},
448
+ apiActive: null,
449
+ apiSelect: null,
450
+
451
+ kpColorMethod: {
452
+ GET: '#7c2',
453
+ POST: '#68f',
454
+ PUT: '#f82',
455
+ DEL: '#f26',
456
+ },
457
+
458
+ optputMenuItemSelectId: 'tree',
459
+
48
460
  }
49
461
  },
50
462
  computed: {
@@ -53,11 +465,208 @@ export default {
53
465
  return get(this, '$store.state.syncState')
54
466
  },
55
467
 
468
+ apis: function() {
469
+ return get(this, '$store.state.apis')
470
+ },
471
+
472
+ changeApis: function() {
473
+ let vo = this
474
+ //trigger
475
+ let apis = vo.apis
476
+ vo.genTree(apis)
477
+ return ''
478
+ },
479
+
480
+ optputMenuItems: function() {
481
+ let vo = this
482
+ let ms = [
483
+ {
484
+ id: 'tree',
485
+ text: vo.$t('outputMenuTree'),
486
+ icon: 'mdi-vanity-light',
487
+ },
488
+ {
489
+ id: 'raw',
490
+ text: vo.$t('outputMenuRaw'),
491
+ icon: 'mdi-lan',
492
+ },
493
+ ]
494
+ return ms
495
+ },
496
+
497
+ optputMenuItemSelect: function() {
498
+ let vo = this
499
+ let r = find(vo.optputMenuItems, { id: vo.optputMenuItemSelectId })
500
+ // console.log(r)
501
+ return r
502
+ },
503
+
56
504
  },
57
505
  methods: {
506
+
507
+ resize: function(msg) {
508
+ // console.log('methods resize', msg)
509
+
510
+ let vo = this
511
+
512
+ //save
513
+ vo.panelWidth = msg.snew.clientWidth
514
+ vo.panelHeight = msg.snew.clientHeight
515
+ // console.log('vo.panelHeight', vo.panelHeight)
516
+
517
+ },
518
+
519
+ genTree: function () {
520
+ let vo = this
521
+
522
+ //default
523
+ vo.apisTree = []
524
+ vo.kpApisTree = {}
525
+
526
+ //cloneDeep
527
+ let apis = cloneDeep(vo.apis)
528
+ // console.log('apis', cloneDeep(apis))
529
+
530
+ //tr
531
+ let tr = {}
532
+ let kpTree = {}
533
+ each(apis, (v) => {
534
+
535
+ //id, levels
536
+ let id = v.id
537
+ let levels = `${v.levels}.${v.name}`
538
+
539
+ //save
540
+ kpTree[id] = v
541
+
542
+ //check
543
+ if (!isobj(get(tr, levels))) {
544
+ set(tr, levels, id)
545
+ }
546
+
547
+ })
548
+ // console.log('tr', cloneDeep(tr))
549
+ // console.log('kpTree', cloneDeep(kpTree))
550
+
551
+ //convertToTree, 由預處理tree物件轉成tree物件
552
+ let tree = convertToTree(tr, { bindRoot: '全部' })
553
+ // console.log('tree', cloneDeep(tree))
554
+
555
+ //filepathToTree
556
+
557
+ //apiSelect, 預先選定api項目, 非tree選單active物件, 因id由convertToTree轉換提供, 故不能直接算得active選單物件id
558
+ let apiSelect = get(apis, 0, null)
559
+ // console.log('apiSelect', cloneDeep(apiSelect))
560
+
561
+ //save
562
+ vo.apiSelect = apiSelect
563
+ vo.apisTree = tree
564
+ vo.kpApisTree = kpTree
565
+
566
+ },
567
+
568
+ getItemByKey: function(key) {
569
+ let vo = this
570
+ // let k = `kpApisTree.${key}`
571
+ // console.log('getItemByKey k', k)
572
+ let r = vo.kpApisTree[key]
573
+ // console.log('getItemByKey r', r, vo.kpApisTree)
574
+ return r
575
+ },
576
+
577
+ getMethod: function(item) {
578
+ // let vo = this
579
+ let method = get(item, 'method', '').toUpperCase()
580
+ return method
581
+ },
582
+
583
+ getMethodByKey: function(key) {
584
+ let vo = this
585
+ let item = vo.getItemByKey(key)
586
+ let method = get(item, 'method', '').toUpperCase()
587
+ return method
588
+ },
589
+
590
+ getMethodColor: function(item) {
591
+ let vo = this
592
+ let method = vo.getMethod(item)
593
+ let color = get(vo.kpColorMethod, method, '#888')
594
+ return color
595
+ },
596
+
597
+ getMethodColorByKey: function(key) {
598
+ let vo = this
599
+ let method = vo.getMethodByKey(key)
600
+ let color = get(vo.kpColorMethod, method, '#888')
601
+ return color
602
+ },
603
+
604
+ getDay: function(t) {
605
+ return timemsTZ2day(t)
606
+ },
607
+
608
+ getOutputJson: function(item) {
609
+ // let vo = this
610
+ let j = get(item, 'outputExample', '')
611
+ j = trim(j)
612
+ return j
613
+ },
614
+
615
+ getOutputJsonObj: function(item) {
616
+ // let vo = this
617
+ let j = this.getOutputJson(item)
618
+ // console.log(j)
619
+ let o = j2o(j)
620
+ return o
621
+ },
622
+
623
+ funActive: function(msg) {
624
+ let vo = this
625
+ let b = !Array.isArray(msg.item.children) //children非陣列代表沒有所屬節點
626
+ if (b) {
627
+ if (!iseobj(vo.apiActive)) { //偵測若沒有apiActive才初始化預先選擇之api項目, 非api完整資訊
628
+ let id = msg.item.id
629
+ vo.apiActive = { id }
630
+ // console.log('!iseobj(vo.apiActive)', vo.apiActive)
631
+ }
632
+ }
633
+ return b
634
+ },
635
+
636
+ changeOptputMenuItemSelect: function(msg) {
637
+ // console.log('changeOptputMenuItemSelect', msg)
638
+ let vo = this
639
+ vo.optputMenuItemSelectId = msg.id
640
+ },
641
+
642
+ ckItem: function(item) {
643
+ // console.log('ckItem', item)
644
+ let vo = this
645
+ vo.apiSelect = cloneDeep(item)
646
+ },
647
+
58
648
  }
59
649
  }
60
650
  </script>
61
651
 
62
652
  <style scoped>
653
+ .bk {
654
+ display:inline-block;
655
+ width:200px;
656
+ padding:0px 10px 10px 0px;
657
+ vertical-align:top;
658
+ }
659
+ .bk-title {
660
+ padding:3px;
661
+ font-size:0.8rem;
662
+ color:#888;
663
+ }
664
+ .bk-item {
665
+ padding:3px 5px;
666
+ font-size:0.9rem;
667
+ line-height:0.9rem;
668
+ border-radius:5px;
669
+ border:1px solid #ddd;
670
+ background:#fff;
671
+ }
63
672
  </style>