vue2-client 1.8.62 → 1.8.64
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/public/index.html +1 -1
- package/src/App.vue +3 -0
- package/src/base-client/components/common/XForm/XForm.vue +17 -13
- package/src/base-client/components/common/XForm/XFormItem.vue +1 -1
- package/src/base-client/components/common/XFormTable/XFormTable.vue +19 -5
- package/src/base-client/components/common/XTable/XTable.vue +25 -41
- package/src/base-client/components/common/XTree/XTree.vue +71 -0
- package/src/base-client/components/common/XTree/index.js +3 -0
- package/src/base-client/components/common/XTree/index.md +36 -0
- package/src/components/STable/index.js +3 -3
- package/src/font-style/PingFangSC-Regular.woff2 +0 -0
- package/src/font-style/font.css +2 -4
- package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
- package/src/theme/default/style.less +13 -14
- package/src/utils/waterMark.js +31 -31
- package/vue.config.js +0 -6
- package/src/font-style/PingFang.ttf +0 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<noscript>
|
|
16
16
|
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
|
17
17
|
</noscript>
|
|
18
|
-
<div id="popContainer" class="beauty-scroll" style="height: 100vh; overflow-y:
|
|
18
|
+
<div id="popContainer" class="beauty-scroll" style="height: 100vh; overflow-y: auto">
|
|
19
19
|
<div id="app"></div>
|
|
20
20
|
</div>
|
|
21
21
|
<!-- require cdn assets js -->
|
package/src/App.vue
CHANGED
|
@@ -137,6 +137,9 @@ export default {
|
|
|
137
137
|
</style>
|
|
138
138
|
<style lang="less">
|
|
139
139
|
@import "./font-style/font.css";
|
|
140
|
+
body {
|
|
141
|
+
font-family: 'PingFangSC-Regular-woff2', 'Microsoft YaHei UI', serif !important;
|
|
142
|
+
}
|
|
140
143
|
.water-mark-wrap {
|
|
141
144
|
position: absolute;
|
|
142
145
|
width: 100%;
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
:model="form"
|
|
7
7
|
:rules="rules"
|
|
8
8
|
layout="inline">
|
|
9
|
-
<a-row :gutter="
|
|
9
|
+
<a-row :gutter="24">
|
|
10
10
|
<x-form-item
|
|
11
|
-
v-for="(item, index) in realJsonData.slice(0,
|
|
11
|
+
v-for="(item, index) in realJsonData.slice(0,3)"
|
|
12
12
|
:key="index"
|
|
13
13
|
:attr="item"
|
|
14
14
|
:form="form"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
</div>
|
|
28
28
|
<div v-show="advanced">
|
|
29
29
|
<x-form-item
|
|
30
|
-
v-for="(item, index) in realJsonData.slice(
|
|
30
|
+
v-for="(item, index) in realJsonData.slice(3)"
|
|
31
31
|
:key="'advanced'+index"
|
|
32
32
|
:attr="item"
|
|
33
33
|
:form="form"
|
|
@@ -39,17 +39,19 @@
|
|
|
39
39
|
<span
|
|
40
40
|
:style="advanced && { float: 'right', overflow: 'hidden' } || {} "
|
|
41
41
|
class="table-page-search-submitButtons">
|
|
42
|
-
<a-
|
|
42
|
+
<a v-if="realJsonData.length > 3" @click="toggleAdvanced">
|
|
43
|
+
<span v-show="!advanced"><a-icon type="eye"/> 更多条件</span>
|
|
44
|
+
<span v-show="advanced"><a-icon type="eye-invisible"/> 收起更多</span>
|
|
45
|
+
</a>
|
|
46
|
+
<a-divider type="vertical"/>
|
|
47
|
+
<a-button
|
|
48
|
+
htmlType="submit"
|
|
49
|
+
type="primary"
|
|
50
|
+
@click="onSubmit">
|
|
43
51
|
<a-icon :style="iconStyle" type="search"/>查询
|
|
44
52
|
</a-button>
|
|
45
|
-
<a-button style="margin-left: 8px" @click="resetForm">
|
|
46
|
-
<a-icon :style="iconStyle" type="redo" />重置
|
|
47
|
-
</a-button>
|
|
53
|
+
<a-button style="margin-left: 8px" @click="resetForm">重置</a-button>
|
|
48
54
|
<slot></slot>
|
|
49
|
-
<a v-if="realJsonData.length > 6" style="margin-left: 8px" @click="toggleAdvanced">
|
|
50
|
-
<span v-show="!advanced">更多条件<a-icon type="down"/></span>
|
|
51
|
-
<span v-show="advanced">收起更多<a-icon type="up"/></span>
|
|
52
|
-
</a>
|
|
53
55
|
</span>
|
|
54
56
|
</a-col>
|
|
55
57
|
</a-row>
|
|
@@ -65,8 +67,7 @@ export default {
|
|
|
65
67
|
components: {
|
|
66
68
|
XFormItem
|
|
67
69
|
},
|
|
68
|
-
props: {
|
|
69
|
-
},
|
|
70
|
+
props: {},
|
|
70
71
|
data () {
|
|
71
72
|
return {
|
|
72
73
|
// 内容加载是否完成
|
|
@@ -184,6 +185,7 @@ export default {
|
|
|
184
185
|
},
|
|
185
186
|
toggleVisible () {
|
|
186
187
|
this.visible = !this.visible
|
|
188
|
+
return this.visible
|
|
187
189
|
},
|
|
188
190
|
resetForm () {
|
|
189
191
|
this.$refs.form.resetFields()
|
|
@@ -212,3 +214,5 @@ export default {
|
|
|
212
214
|
}
|
|
213
215
|
}
|
|
214
216
|
</script>
|
|
217
|
+
<style lang="less" scoped>
|
|
218
|
+
</style>
|
|
@@ -402,7 +402,7 @@ export default {
|
|
|
402
402
|
const isEmpty = !value || !value.toString()
|
|
403
403
|
// 查询表单点击重置按钮时清空树形选择框选中状态
|
|
404
404
|
if (this.$refs.XTreeSelect && this.attr.type === 'treeSelect' && isEmpty) {
|
|
405
|
-
|
|
405
|
+
this.$refs.xTreeSelect.setValue(undefined)
|
|
406
406
|
}
|
|
407
407
|
},
|
|
408
408
|
deep: true
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
ref="xAddForm"
|
|
8
8
|
@afterSubmit="onAddOrEditSubmitAfterSubmit"
|
|
9
9
|
/>
|
|
10
|
+
<div v-if="title" class="crud_title">
|
|
11
|
+
{{ title }}
|
|
12
|
+
</div>
|
|
10
13
|
<x-form
|
|
11
14
|
ref="xForm"
|
|
12
15
|
style="margin-bottom: 14px;"
|
|
@@ -34,9 +37,11 @@
|
|
|
34
37
|
</template>
|
|
35
38
|
<template slot="rightBtnExpand" slot-scope="{selectedRowKeys, selectedRows}">
|
|
36
39
|
<slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
|
|
37
|
-
<a-
|
|
38
|
-
<a-
|
|
39
|
-
|
|
40
|
+
<a-tooltip title="收起查询条件">
|
|
41
|
+
<a-button @click="toggleIsFormShow">
|
|
42
|
+
<a-icon :style="iconStyle" type="vertical-align-top"/>
|
|
43
|
+
</a-button>
|
|
44
|
+
</a-tooltip>
|
|
40
45
|
</template>
|
|
41
46
|
<!-- 底部插槽 -->
|
|
42
47
|
<template slot="footer" slot-scope="{selectedRowKeys, selectedRows}">
|
|
@@ -335,7 +340,9 @@ export default {
|
|
|
335
340
|
* 查询表单部分显示/隐藏切换
|
|
336
341
|
*/
|
|
337
342
|
toggleIsFormShow () {
|
|
338
|
-
this.$refs.xForm.toggleVisible()
|
|
343
|
+
const visible = this.$refs.xForm.toggleVisible()
|
|
344
|
+
const height = visible ? 'default' : 'calc(100vh - 27rem)'
|
|
345
|
+
this.$refs.xTable.setScrollYHeight(height)
|
|
339
346
|
},
|
|
340
347
|
/**
|
|
341
348
|
* 选择列事件
|
|
@@ -379,5 +386,12 @@ export default {
|
|
|
379
386
|
}
|
|
380
387
|
</script>
|
|
381
388
|
<style lang="less" scoped>
|
|
382
|
-
|
|
389
|
+
.crud_title {
|
|
390
|
+
height: 32px;
|
|
391
|
+
font-size: 16px;
|
|
392
|
+
font-weight: 500;
|
|
393
|
+
color: #000000d9;
|
|
394
|
+
line-height: 32px;
|
|
395
|
+
margin-bottom: 12px;
|
|
396
|
+
}
|
|
383
397
|
</style>
|
|
@@ -39,10 +39,14 @@
|
|
|
39
39
|
<span :style="{ float: 'right', overflow: 'hidden', marginBottom: '8px' }">
|
|
40
40
|
<a-button-group>
|
|
41
41
|
<slot name="rightBtnExpand" :selectedRowKeys="selectedRowKeys" :selectedRows="selectedRows"></slot>
|
|
42
|
-
<a-
|
|
43
|
-
<a-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
<a-tooltip title="重新查询">
|
|
43
|
+
<a-button @click="refresh(true)">
|
|
44
|
+
<a-icon :style="iconStyle" type="reload" />
|
|
45
|
+
</a-button>
|
|
46
|
+
</a-tooltip>
|
|
47
|
+
<a-tooltip title="列展示/排序">
|
|
48
|
+
<table-setting v-if="columnSelectLoaded" v-model="tableColumns" />
|
|
49
|
+
</a-tooltip>
|
|
46
50
|
</a-button-group>
|
|
47
51
|
</span>
|
|
48
52
|
</a-col>
|
|
@@ -148,7 +152,7 @@ export default {
|
|
|
148
152
|
// x滚动条宽度
|
|
149
153
|
scrollXWidth: 1600,
|
|
150
154
|
// y滚动条高度
|
|
151
|
-
scrollYHeight:
|
|
155
|
+
scrollYHeight: 'calc(100vh - 31rem)',
|
|
152
156
|
// 表格选择列Key集合
|
|
153
157
|
selectedRowKeys: [],
|
|
154
158
|
// 表格选择Row集合
|
|
@@ -256,15 +260,8 @@ export default {
|
|
|
256
260
|
totalWidth = totalWidth + 180
|
|
257
261
|
}
|
|
258
262
|
}
|
|
259
|
-
// 设置表格高度
|
|
260
|
-
// const height = document.documentElement.clientHeight
|
|
261
|
-
// if (height >= 1070) {
|
|
262
|
-
// this.scrollYHeight = 'calc(100vh - 526px)'
|
|
263
|
-
// } else {
|
|
264
|
-
// this.scrollYHeight = 'calc(100vh - 398px)'
|
|
265
|
-
// }
|
|
266
263
|
// 设置表格高度为固定值
|
|
267
|
-
this.
|
|
264
|
+
this.setScrollYHeight('default')
|
|
268
265
|
// 横向滚动长度大于所有宽度,才能实现固定表头
|
|
269
266
|
this.scrollXWidth = totalWidth
|
|
270
267
|
// 加载筛选列完成
|
|
@@ -332,6 +329,12 @@ export default {
|
|
|
332
329
|
this.$refs.table.refresh(bool)
|
|
333
330
|
})
|
|
334
331
|
},
|
|
332
|
+
setScrollYHeight (value) {
|
|
333
|
+
if (value === 'default') {
|
|
334
|
+
value = 'calc(100vh - 31rem)'
|
|
335
|
+
}
|
|
336
|
+
this.scrollYHeight = value
|
|
337
|
+
},
|
|
335
338
|
/**
|
|
336
339
|
* 格式化日期
|
|
337
340
|
* @param date 日期字符串
|
|
@@ -378,7 +381,8 @@ export default {
|
|
|
378
381
|
window.open('/res/excel/export/' + value)
|
|
379
382
|
})
|
|
380
383
|
},
|
|
381
|
-
onCancel () {
|
|
384
|
+
onCancel () {
|
|
385
|
+
}
|
|
382
386
|
})
|
|
383
387
|
},
|
|
384
388
|
// 新增业务
|
|
@@ -449,7 +453,8 @@ export default {
|
|
|
449
453
|
})
|
|
450
454
|
})
|
|
451
455
|
},
|
|
452
|
-
onCancel () {
|
|
456
|
+
onCancel () {
|
|
457
|
+
}
|
|
453
458
|
})
|
|
454
459
|
},
|
|
455
460
|
// 导入业务
|
|
@@ -500,32 +505,11 @@ export default {
|
|
|
500
505
|
}
|
|
501
506
|
</script>
|
|
502
507
|
<style lang="less" scoped>
|
|
503
|
-
.
|
|
504
|
-
|
|
505
|
-
}
|
|
506
|
-
.btn-success:enabled:hover {
|
|
507
|
-
background-color: #85CE61 !important;
|
|
508
|
-
border-color: #85CE61 !important;
|
|
509
|
-
}
|
|
510
|
-
.btn-success:enabled {
|
|
511
|
-
background-color: #67c23a;
|
|
512
|
-
border-color: #67c23a;
|
|
513
|
-
}
|
|
514
|
-
.btn-success:disabled {
|
|
515
|
-
color: rgba(0, 0, 0, 0.25);
|
|
516
|
-
}
|
|
517
|
-
.btn-warn {
|
|
518
|
-
color: #ffffff;
|
|
519
|
-
}
|
|
520
|
-
.btn-warn:enabled:hover {
|
|
521
|
-
background-color: #ffc833 !important;
|
|
522
|
-
border-color: #ffc833 !important;
|
|
523
|
-
}
|
|
524
|
-
.btn-warn:enabled {
|
|
525
|
-
background-color: #ffba00;
|
|
526
|
-
border-color: #ffba00;
|
|
508
|
+
:deep(.ant-table-thead > tr > th) {
|
|
509
|
+
font-weight: 600;
|
|
527
510
|
}
|
|
528
|
-
.
|
|
529
|
-
|
|
511
|
+
:deep(.ant-table-pagination.ant-pagination){
|
|
512
|
+
margin-bottom: 0;
|
|
530
513
|
}
|
|
514
|
+
:deep(.ant-table td) { white-space: nowrap; }
|
|
531
515
|
</style>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
const props = defineProps({
|
|
3
|
+
// 树数据
|
|
4
|
+
// example: [{ title: '标题', key: '1', children: []}]
|
|
5
|
+
treeData: {
|
|
6
|
+
type: Array,
|
|
7
|
+
required: true
|
|
8
|
+
}
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
const emit = defineEmits(['onSelect'])
|
|
12
|
+
|
|
13
|
+
function onSelect (keys, e) {
|
|
14
|
+
emit('onSelect', keys, e)
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<div class="tree_main">
|
|
20
|
+
<a-directory-tree
|
|
21
|
+
:tree-data="props.treeData"
|
|
22
|
+
@select="onSelect"
|
|
23
|
+
:default-selected-keys="props.treeData.length > 0 ? props.treeData[0].key : null"
|
|
24
|
+
:default-expand-all="true"
|
|
25
|
+
></a-directory-tree>
|
|
26
|
+
</div>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<style lang="less" scoped>
|
|
30
|
+
.tree_main {
|
|
31
|
+
:deep(.ant-tree li .ant-tree-node-content-wrapper){
|
|
32
|
+
color: #000000e0;
|
|
33
|
+
}
|
|
34
|
+
:deep(.ant-tree li span.ant-tree-switcher, .ant-tree li span.ant-tree-iconEle) {
|
|
35
|
+
color: #0000004d;
|
|
36
|
+
i {
|
|
37
|
+
font-size: 16px !important;
|
|
38
|
+
line-height: 40px;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
:deep(.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper::before, .ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper::before){
|
|
42
|
+
height: 40px;
|
|
43
|
+
border-radius: 6px;
|
|
44
|
+
}
|
|
45
|
+
:deep(.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before){
|
|
46
|
+
background: #e6f7ff;
|
|
47
|
+
}
|
|
48
|
+
:deep(.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper::before){
|
|
49
|
+
background: #e6f7ff;
|
|
50
|
+
}
|
|
51
|
+
:deep(.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-switcher){
|
|
52
|
+
color: #0000004d;
|
|
53
|
+
}
|
|
54
|
+
:deep(.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper.ant-tree-node-selected, .ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper.ant-tree-node-selected){
|
|
55
|
+
color: #000000e0;
|
|
56
|
+
}
|
|
57
|
+
:deep(.ant-tree li .ant-tree-node-content-wrapper){
|
|
58
|
+
line-height: 40px;
|
|
59
|
+
height: 40px;
|
|
60
|
+
}
|
|
61
|
+
:deep(.ant-tree li) {
|
|
62
|
+
padding-left: 4px;
|
|
63
|
+
}
|
|
64
|
+
:deep(.ant-tree ul) {
|
|
65
|
+
padding-left: 10px;
|
|
66
|
+
}
|
|
67
|
+
:deep(.ant-tree-icon__customize){
|
|
68
|
+
display: none;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# XTree
|
|
2
|
+
|
|
3
|
+
更美观的树控件
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
当需要一个美观的树控件时
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
引用方式:
|
|
12
|
+
|
|
13
|
+
```javascript
|
|
14
|
+
import XTree from '@vue2-client/base-client/components/XTree/XTree'
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
components: {
|
|
18
|
+
XTree
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## 代码演示
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<x-tree :tree-data="treeData" @onSelect="onSelect"></x-tree>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## API
|
|
32
|
+
|
|
33
|
+
| 参数 | 说明 | 类型 | 默认值 |
|
|
34
|
+
|-----------|---------|-------|-----|
|
|
35
|
+
| treeData | 数据集合 | Array | [] |
|
|
36
|
+
| @onSelect | 树节点选择事件 | event | - |
|
|
@@ -161,7 +161,7 @@ export default {
|
|
|
161
161
|
current: r.pageNo, // 返回结果中的当前分页数
|
|
162
162
|
total: r.totalCount, // 返回结果中的总记录数
|
|
163
163
|
showSizeChanger: this.showSizeChanger,
|
|
164
|
-
showTotal: (total, range) => range[0] === range[1] ?
|
|
164
|
+
showTotal: (total, range) => range[0] === range[1] ? `${range[0]} | 共 ${total} 项` : `${range[0]}-${range[1]} | 共 ${total} 项`,
|
|
165
165
|
pageSize: (pagination && pagination.pageSize) || this.localPagination.pageSize
|
|
166
166
|
}) || false
|
|
167
167
|
// 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页
|
|
@@ -258,9 +258,9 @@ export default {
|
|
|
258
258
|
|
|
259
259
|
// 绘制 alert 组件
|
|
260
260
|
return (
|
|
261
|
-
<a-alert showIcon={true} style="margin-bottom:
|
|
261
|
+
<a-alert showIcon={true} style="margin-bottom: 8px;font-size: 14px;">
|
|
262
262
|
<template slot="message">
|
|
263
|
-
<span style="margin-right: 12px">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
|
|
263
|
+
<span style="margin-right: 12px;">已选择: <a style="font-weight: 600">{this.selectedRows.length}</a></span>
|
|
264
264
|
{needTotalItems}
|
|
265
265
|
{clearItem}
|
|
266
266
|
</template>
|
|
Binary file
|
package/src/font-style/font.css
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<a-list v-show="!loading" size="small" :data-source="data">
|
|
4
|
-
<a-list-item slot="renderItem" slot-scope="item">
|
|
5
|
-
<div>
|
|
6
|
-
<p><a @click="$emit('openFavorites', item.uuid)">{{ item.question }} </a></p>
|
|
7
|
-
<p>{{ item.date }}</p>
|
|
8
|
-
</div>
|
|
9
|
-
<a class="delete_item">
|
|
10
|
-
<a-icon type="close" @click="$emit('saveToFavorites', item.uuid)"/>
|
|
11
|
-
</a>
|
|
12
|
-
</a-list-item>
|
|
13
|
-
</a-list>
|
|
14
|
-
</div>
|
|
15
|
-
</template>
|
|
16
|
-
|
|
17
|
-
<script>
|
|
18
|
-
import { indexedDB } from '@vue2-client/utils/indexedDB'
|
|
19
|
-
|
|
20
|
-
export default {
|
|
21
|
-
name: 'FavoriteList',
|
|
22
|
-
data () {
|
|
23
|
-
return {
|
|
24
|
-
data: [],
|
|
25
|
-
loading: false
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
mounted () {
|
|
29
|
-
this.loadData()
|
|
30
|
-
},
|
|
31
|
-
methods: {
|
|
32
|
-
loadData () {
|
|
33
|
-
console.warn(123)
|
|
34
|
-
indexedDB.getAll((data) => {
|
|
35
|
-
const realData = data.filter(item => item.data && item.data.uuid)
|
|
36
|
-
.map(item => item.data)
|
|
37
|
-
this.data = realData
|
|
38
|
-
})
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
</script>
|
|
43
|
-
<style lang="less" scoped>
|
|
44
|
-
.delete_item {
|
|
45
|
-
margin-left: 8px;
|
|
46
|
-
color: #333;
|
|
47
|
-
}
|
|
48
|
-
p {
|
|
49
|
-
margin: 0
|
|
50
|
-
}
|
|
51
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<a-list v-show="!loading" size="small" :data-source="data">
|
|
4
|
+
<a-list-item slot="renderItem" slot-scope="item">
|
|
5
|
+
<div>
|
|
6
|
+
<p><a @click="$emit('openFavorites', item.uuid)">{{ item.question }} </a></p>
|
|
7
|
+
<p>{{ item.date }}</p>
|
|
8
|
+
</div>
|
|
9
|
+
<a class="delete_item">
|
|
10
|
+
<a-icon type="close" @click="$emit('saveToFavorites', item.uuid)"/>
|
|
11
|
+
</a>
|
|
12
|
+
</a-list-item>
|
|
13
|
+
</a-list>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
import { indexedDB } from '@vue2-client/utils/indexedDB'
|
|
19
|
+
|
|
20
|
+
export default {
|
|
21
|
+
name: 'FavoriteList',
|
|
22
|
+
data () {
|
|
23
|
+
return {
|
|
24
|
+
data: [],
|
|
25
|
+
loading: false
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
mounted () {
|
|
29
|
+
this.loadData()
|
|
30
|
+
},
|
|
31
|
+
methods: {
|
|
32
|
+
loadData () {
|
|
33
|
+
console.warn(123)
|
|
34
|
+
indexedDB.getAll((data) => {
|
|
35
|
+
const realData = data.filter(item => item.data && item.data.uuid)
|
|
36
|
+
.map(item => item.data)
|
|
37
|
+
this.data = realData
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
</script>
|
|
43
|
+
<style lang="less" scoped>
|
|
44
|
+
.delete_item {
|
|
45
|
+
margin-left: 8px;
|
|
46
|
+
color: #333;
|
|
47
|
+
}
|
|
48
|
+
p {
|
|
49
|
+
margin: 0
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
@@ -2,14 +2,23 @@
|
|
|
2
2
|
overflow: hidden;
|
|
3
3
|
filter: invert(80%);
|
|
4
4
|
}
|
|
5
|
+
|
|
6
|
+
.split-right{
|
|
7
|
+
&:not(:last-child) {
|
|
8
|
+
border-right: 1px solid rgba(98, 98, 98, 0.2);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
.disabled{
|
|
12
|
+
cursor: not-allowed;
|
|
13
|
+
color: @disabled-color;
|
|
14
|
+
pointer-events: none;
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
.beauty-scroll{
|
|
6
|
-
//scrollbar-color: @primary-color @primary-2;
|
|
7
|
-
//scrollbar-width: thin;
|
|
8
18
|
-ms-overflow-style:none;
|
|
9
19
|
position: relative;
|
|
10
20
|
&::-webkit-scrollbar{
|
|
11
21
|
width: 3px;
|
|
12
|
-
height: 1px;
|
|
13
22
|
}
|
|
14
23
|
&::-webkit-scrollbar-thumb {
|
|
15
24
|
border-radius: 3px;
|
|
@@ -21,16 +30,6 @@
|
|
|
21
30
|
background: @primary-3;
|
|
22
31
|
}
|
|
23
32
|
}
|
|
24
|
-
.split-right{
|
|
25
|
-
&:not(:last-child) {
|
|
26
|
-
border-right: 1px solid rgba(98, 98, 98, 0.2);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
.disabled{
|
|
30
|
-
cursor: not-allowed;
|
|
31
|
-
color: @disabled-color;
|
|
32
|
-
pointer-events: none;
|
|
33
|
-
}
|
|
34
33
|
|
|
35
34
|
// 美化滚动条
|
|
36
35
|
::-webkit-scrollbar{
|
|
@@ -50,7 +49,7 @@
|
|
|
50
49
|
::-webkit-scrollbar-track {
|
|
51
50
|
-webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0);
|
|
52
51
|
border-radius: 10px;
|
|
53
|
-
background:
|
|
52
|
+
background: transparent;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
::-webkit-scrollbar-thumb:hover {
|
package/src/utils/waterMark.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description: createWaterMark.js 加水印功能
|
|
3
|
-
*/
|
|
4
|
-
let waterMarkDOM
|
|
5
|
-
|
|
6
|
-
const clearWaterMark = () => {
|
|
7
|
-
if (waterMarkDOM) waterMarkDOM.remove()
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* @description: 创建水印
|
|
11
|
-
* @param waterMarkName 水印内容
|
|
12
|
-
*/
|
|
13
|
-
export default function createWaterMark (waterMarkName) {
|
|
14
|
-
clearWaterMark()
|
|
15
|
-
if (!waterMarkName) {
|
|
16
|
-
return
|
|
17
|
-
}
|
|
18
|
-
const width = window.parseInt(document.body.clientWidth)
|
|
19
|
-
const canvasWidth = width / window.parseInt(width / 320)
|
|
20
|
-
const fontFamily = window.getComputedStyle(document.body)['font-family']
|
|
21
|
-
const fragment = document.createDocumentFragment()
|
|
22
|
-
waterMarkDOM = document.createElement('div')
|
|
23
|
-
waterMarkDOM.className = 'water-mark-wrap'
|
|
24
|
-
let spanStr = ''
|
|
25
|
-
for (let i = 0; i < 100; i++) {
|
|
26
|
-
spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:200px;font: ${fontFamily}>${waterMarkName}</span>`
|
|
27
|
-
}
|
|
28
|
-
waterMarkDOM.innerHTML = spanStr
|
|
29
|
-
fragment.appendChild(waterMarkDOM)
|
|
30
|
-
document.body.appendChild(fragment)
|
|
31
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @description: createWaterMark.js 加水印功能
|
|
3
|
+
*/
|
|
4
|
+
let waterMarkDOM
|
|
5
|
+
|
|
6
|
+
const clearWaterMark = () => {
|
|
7
|
+
if (waterMarkDOM) waterMarkDOM.remove()
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @description: 创建水印
|
|
11
|
+
* @param waterMarkName 水印内容
|
|
12
|
+
*/
|
|
13
|
+
export default function createWaterMark (waterMarkName) {
|
|
14
|
+
clearWaterMark()
|
|
15
|
+
if (!waterMarkName) {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
const width = window.parseInt(document.body.clientWidth)
|
|
19
|
+
const canvasWidth = width / window.parseInt(width / 320)
|
|
20
|
+
const fontFamily = window.getComputedStyle(document.body)['font-family']
|
|
21
|
+
const fragment = document.createDocumentFragment()
|
|
22
|
+
waterMarkDOM = document.createElement('div')
|
|
23
|
+
waterMarkDOM.className = 'water-mark-wrap'
|
|
24
|
+
let spanStr = ''
|
|
25
|
+
for (let i = 0; i < 100; i++) {
|
|
26
|
+
spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:200px;font: ${fontFamily}>${waterMarkName}</span>`
|
|
27
|
+
}
|
|
28
|
+
waterMarkDOM.innerHTML = spanStr
|
|
29
|
+
fragment.appendChild(waterMarkDOM)
|
|
30
|
+
document.body.appendChild(fragment)
|
|
31
|
+
}
|
package/vue.config.js
CHANGED
|
@@ -33,12 +33,6 @@ module.exports = {
|
|
|
33
33
|
ws: false,
|
|
34
34
|
changeOrigin: true
|
|
35
35
|
},
|
|
36
|
-
'/api/af-system': {
|
|
37
|
-
// v3用
|
|
38
|
-
// pathRewrite: { '^/api/af-system/': '/rs/', '^/api/af-iot/': '/rs/' },
|
|
39
|
-
target: 'http://192.168.50.67:31467',
|
|
40
|
-
changeOrigin: true
|
|
41
|
-
},
|
|
42
36
|
'/api': {
|
|
43
37
|
// v3用
|
|
44
38
|
// pathRewrite: { '^/api/af-system/': '/rs/', '^/api/af-iot/': '/rs/' },
|
|
Binary file
|