appsnbcbweicheng 1.2.21 → 1.2.23
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/package.json +1 -1
- package/public/EventInterpretation.vue +667 -0
- package/public/FundInterpretation.vue +0 -0
- package/public/FundManagerInterpretation.vue +0 -0
- package/public/InstitutionViewpoint.vue +0 -0
- package/public/MonthlyAssetSectorEventInterpretation.vue +0 -0
- package/public/SectorAnalysisViewpointSummary.vue +0 -0
- package/readme.md +2 -0
- package/public/2025-12-30_143533_002.jpg +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,667 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="event-interpretation">
|
|
3
|
+
<!-- 筛选区域 -->
|
|
4
|
+
<el-card class="filter-card" shadow="never">
|
|
5
|
+
<el-form
|
|
6
|
+
:inline="true"
|
|
7
|
+
:model="searchForm"
|
|
8
|
+
class="search-form"
|
|
9
|
+
label-width="100px"
|
|
10
|
+
size="small"
|
|
11
|
+
>
|
|
12
|
+
<el-form-item label="基金简称">
|
|
13
|
+
<el-input
|
|
14
|
+
v-model="searchForm.fundAbbr"
|
|
15
|
+
placeholder="请输入基金简称"
|
|
16
|
+
clearable
|
|
17
|
+
style="width: 200px"
|
|
18
|
+
/>
|
|
19
|
+
</el-form-item>
|
|
20
|
+
<el-form-item label="基金代码">
|
|
21
|
+
<el-input
|
|
22
|
+
v-model="searchForm.fundCode"
|
|
23
|
+
placeholder="请输入基金代码"
|
|
24
|
+
clearable
|
|
25
|
+
style="width: 200px"
|
|
26
|
+
/>
|
|
27
|
+
</el-form-item>
|
|
28
|
+
<el-form-item label="解读框架">
|
|
29
|
+
<el-select
|
|
30
|
+
v-model="searchForm.explainFrame"
|
|
31
|
+
multiple
|
|
32
|
+
filterable
|
|
33
|
+
placeholder="请选择解读框架"
|
|
34
|
+
clearable
|
|
35
|
+
style="width: 300px"
|
|
36
|
+
>
|
|
37
|
+
<el-option
|
|
38
|
+
v-for="item in explainFrameOptions"
|
|
39
|
+
:key="item.value"
|
|
40
|
+
:label="item.label"
|
|
41
|
+
:value="item.value"
|
|
42
|
+
/>
|
|
43
|
+
</el-select>
|
|
44
|
+
</el-form-item>
|
|
45
|
+
<el-form-item label="数据截止日期">
|
|
46
|
+
<el-date-picker
|
|
47
|
+
v-model="searchForm.date"
|
|
48
|
+
type="date"
|
|
49
|
+
placeholder="选择数据截止日期"
|
|
50
|
+
value-format="yyyy-MM-dd"
|
|
51
|
+
clearable
|
|
52
|
+
style="width: 200px"
|
|
53
|
+
/>
|
|
54
|
+
</el-form-item>
|
|
55
|
+
<el-form-item label="解读发布时间">
|
|
56
|
+
<el-date-picker
|
|
57
|
+
v-model="searchForm.startDateRange"
|
|
58
|
+
type="daterange"
|
|
59
|
+
range-separator="至"
|
|
60
|
+
start-placeholder="开始日期"
|
|
61
|
+
end-placeholder="结束日期"
|
|
62
|
+
value-format="yyyy-MM-dd"
|
|
63
|
+
:picker-options="datePickerOptions"
|
|
64
|
+
clearable
|
|
65
|
+
style="width: 280px"
|
|
66
|
+
/>
|
|
67
|
+
</el-form-item>
|
|
68
|
+
<el-form-item>
|
|
69
|
+
<el-button type="primary" @click="handleSearch">查询</el-button>
|
|
70
|
+
<el-button @click="handleReset">重置</el-button>
|
|
71
|
+
</el-form-item>
|
|
72
|
+
</el-form>
|
|
73
|
+
</el-card>
|
|
74
|
+
|
|
75
|
+
<!-- 展示区域 -->
|
|
76
|
+
<el-card class="display-card" shadow="never">
|
|
77
|
+
<!-- 描述部分 -->
|
|
78
|
+
<div class="description-section">
|
|
79
|
+
<div class="description-left">
|
|
80
|
+
<span class="fund-summary">{{ fundSummary }}</span>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="description-right">
|
|
83
|
+
<span class="text">数据覆盖度统计</span>
|
|
84
|
+
<el-button type="primary" size="small" @click="openStatisticsDialog">查看统计</el-button>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<!-- 表格 -->
|
|
89
|
+
<el-table
|
|
90
|
+
:data="tableData"
|
|
91
|
+
border
|
|
92
|
+
stripe
|
|
93
|
+
class="result-table"
|
|
94
|
+
size="small"
|
|
95
|
+
:default-sort="{ prop: 'fundCode', order: 'ascending' }"
|
|
96
|
+
@sort-change="handleSortChange"
|
|
97
|
+
>
|
|
98
|
+
<el-table-column type="index" label="序号" width="60" fixed="left" />
|
|
99
|
+
<el-table-column prop="fundAbbr" label="基金简称" min-width="150" fixed="left">
|
|
100
|
+
<!-- <template slot="header">
|
|
101
|
+
<span>基金简称</span>
|
|
102
|
+
<el-input
|
|
103
|
+
v-model="fundAbbrSearch"
|
|
104
|
+
size="mini"
|
|
105
|
+
placeholder="搜索基金简称"
|
|
106
|
+
style="width: 120px; margin-left: 10px"
|
|
107
|
+
@input="handleFundAbbrFilter"
|
|
108
|
+
/>
|
|
109
|
+
</template>
|
|
110
|
+
<template slot-scope="{ row }">
|
|
111
|
+
{{ row.fundAbbr }}
|
|
112
|
+
</template> -->
|
|
113
|
+
</el-table-column>
|
|
114
|
+
<el-table-column
|
|
115
|
+
prop="fundCode"
|
|
116
|
+
label="基金代码"
|
|
117
|
+
width="120"
|
|
118
|
+
sortable="custom"
|
|
119
|
+
fixed="left"
|
|
120
|
+
/>
|
|
121
|
+
<el-table-column prop="explainFrame" label="解读框架" min-width="150" />
|
|
122
|
+
<el-table-column prop="category" label="基金分类" min-width="120" />
|
|
123
|
+
<el-table-column prop="explainContent" label="解读内容" min-width="200">
|
|
124
|
+
<template slot-scope="{ row }">
|
|
125
|
+
<div class="expandable-content">
|
|
126
|
+
<div
|
|
127
|
+
:class="{
|
|
128
|
+
'content-collapse': !row.expandExplainContent,
|
|
129
|
+
'content-expanded': row.expandExplainContent,
|
|
130
|
+
}"
|
|
131
|
+
>
|
|
132
|
+
{{ row.explainContent }}
|
|
133
|
+
</div>
|
|
134
|
+
<el-button
|
|
135
|
+
v-if="shouldShowExpand(row.explainContent)"
|
|
136
|
+
type="text"
|
|
137
|
+
size="mini"
|
|
138
|
+
@click="toggleExpand(row, 'explainContent')"
|
|
139
|
+
>
|
|
140
|
+
{{ row.expandContent ? '收起' : '展开' }}
|
|
141
|
+
</el-button>
|
|
142
|
+
</div>
|
|
143
|
+
</template>
|
|
144
|
+
</el-table-column>
|
|
145
|
+
<el-table-column prop="explainDimensions" label="解读维度" min-width="150">
|
|
146
|
+
<template slot-scope="{ row }">
|
|
147
|
+
<div class="expandable-content">
|
|
148
|
+
<div
|
|
149
|
+
:class="{
|
|
150
|
+
'content-expanded': row.expandExplainDimensions,
|
|
151
|
+
'content-collapse': !row.expandExplainDimensions,
|
|
152
|
+
}"
|
|
153
|
+
>
|
|
154
|
+
{{ row.explainDimensions }}
|
|
155
|
+
</div>
|
|
156
|
+
<el-button
|
|
157
|
+
v-if="shouldShowExpand(row.explainDimensions)"
|
|
158
|
+
type="text"
|
|
159
|
+
size="mini"
|
|
160
|
+
@click="toggleExpand(row, 'explainDimensions')"
|
|
161
|
+
>
|
|
162
|
+
{{ row.expandDimensions ? '收起' : '展开' }}
|
|
163
|
+
</el-button>
|
|
164
|
+
</div>
|
|
165
|
+
</template>
|
|
166
|
+
</el-table-column>
|
|
167
|
+
<el-table-column prop="explainDirection" label="解读方向" min-width="120">
|
|
168
|
+
<template slot-scope="{ row }">
|
|
169
|
+
<div class="expandable-content">
|
|
170
|
+
<div
|
|
171
|
+
:class="{
|
|
172
|
+
'content-expanded': row.expandExplainDirection,
|
|
173
|
+
'content-collapse': !row.expandExplainDirection,
|
|
174
|
+
}"
|
|
175
|
+
>
|
|
176
|
+
{{ row.explainDirection }}
|
|
177
|
+
</div>
|
|
178
|
+
<el-button
|
|
179
|
+
v-if="shouldShowExpand(row.explainDirection)"
|
|
180
|
+
type="text"
|
|
181
|
+
size="mini"
|
|
182
|
+
@click="toggleExpand(row, 'explainDirection')"
|
|
183
|
+
>
|
|
184
|
+
{{ row.expandDirection ? '收起' : '展开' }}
|
|
185
|
+
</el-button>
|
|
186
|
+
</div>
|
|
187
|
+
</template>
|
|
188
|
+
</el-table-column>
|
|
189
|
+
<el-table-column prop="date" label="数据截止日期" width="120" />
|
|
190
|
+
<el-table-column prop="startDate" label="解读发布时间" width="120" sortable="custom" />
|
|
191
|
+
</el-table>
|
|
192
|
+
</el-card>
|
|
193
|
+
|
|
194
|
+
<!-- 数据统计弹窗 -->
|
|
195
|
+
<el-dialog
|
|
196
|
+
title="数据统计"
|
|
197
|
+
:visible.sync="statisticsDialogVisible"
|
|
198
|
+
width="1200px"
|
|
199
|
+
:close-on-click-modal="false"
|
|
200
|
+
>
|
|
201
|
+
<!-- 上部分:数据总量 -->
|
|
202
|
+
<div class="statistics-top">
|
|
203
|
+
<!-- 第一行 -->
|
|
204
|
+
<div class="statistics-row">
|
|
205
|
+
<div class="statistics-item-left">
|
|
206
|
+
<span class="label">基金总量:</span>
|
|
207
|
+
<span class="value">{{ statisticsData.fundTotal }}</span>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="statistics-item-right">
|
|
210
|
+
<span class="label">数据截止日期:</span>
|
|
211
|
+
<span class="value">{{ statisticsData.date }}</span>
|
|
212
|
+
<el-button type="primary" size="small" style="margin-left: 10px" @click="handleExport">
|
|
213
|
+
数据导出
|
|
214
|
+
</el-button>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
<!-- 第二行:三列展示 -->
|
|
218
|
+
<div class="statistics-row statistics-three-columns">
|
|
219
|
+
<div class="statistics-column">
|
|
220
|
+
<div class="column-label">应跑基金总量</div>
|
|
221
|
+
<div class="column-value">{{ statisticsData.shouldRunTotal }}</div>
|
|
222
|
+
</div>
|
|
223
|
+
<div class="statistics-column">
|
|
224
|
+
<div class="column-label">有论据基金总量</div>
|
|
225
|
+
<div class="column-value">{{ statisticsData.withArgumentTotal }}</div>
|
|
226
|
+
</div>
|
|
227
|
+
<div class="statistics-column">
|
|
228
|
+
<div class="column-label">兜底基金总量</div>
|
|
229
|
+
<div class="column-value">{{ statisticsData.fallbackTotal }}</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
<!-- 下部分:数据分布 -->
|
|
235
|
+
<div class="statistics-bottom">
|
|
236
|
+
<div class="section-title">数据分布</div>
|
|
237
|
+
<el-table
|
|
238
|
+
:data="distributionTableData"
|
|
239
|
+
row-key="index"
|
|
240
|
+
border
|
|
241
|
+
:default-expand-all="false"
|
|
242
|
+
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
243
|
+
>
|
|
244
|
+
style="width: 100%; margin-bottom: 20px;" >
|
|
245
|
+
<el-table-column prop="index" label="框架序号" width="120" />
|
|
246
|
+
<el-table-column prop="frameName" label="解读框架" />
|
|
247
|
+
<el-table-column prop="argument" label="有值论据" />
|
|
248
|
+
<el-table-column prop="nums" label="命中数量" />
|
|
249
|
+
<el-table-column label="占基金总量比例">
|
|
250
|
+
<template slot-scope="scope"> {{ scope.row.rate }}% </template>
|
|
251
|
+
</el-table-column>
|
|
252
|
+
</el-table>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<span slot="footer" class="dialog-footer">
|
|
256
|
+
<el-button @click="statisticsDialogVisible = false">关 闭</el-button>
|
|
257
|
+
</span>
|
|
258
|
+
</el-dialog>
|
|
259
|
+
</div>
|
|
260
|
+
</template>
|
|
261
|
+
|
|
262
|
+
<script>
|
|
263
|
+
export default {
|
|
264
|
+
name: 'EventInterpretation',
|
|
265
|
+
data() {
|
|
266
|
+
return {
|
|
267
|
+
// 筛选表单
|
|
268
|
+
searchForm: {
|
|
269
|
+
fundAbbr: '',
|
|
270
|
+
fundCode: '',
|
|
271
|
+
explainFrame: [],
|
|
272
|
+
date: '',
|
|
273
|
+
startDateRange: [],
|
|
274
|
+
},
|
|
275
|
+
// 解读框架选项
|
|
276
|
+
explainFrameOptions: [
|
|
277
|
+
{ label: '框架A', value: 'frameA' },
|
|
278
|
+
{ label: '框架B', value: 'frameB' },
|
|
279
|
+
{ label: '框架C', value: 'frameC' },
|
|
280
|
+
{ label: '框架D', value: 'frameD' },
|
|
281
|
+
],
|
|
282
|
+
// 日期选择器配置(限制一月内)
|
|
283
|
+
datePickerOptions: {
|
|
284
|
+
disabledDate(time) {
|
|
285
|
+
const now = new Date()
|
|
286
|
+
const oneMonthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000)
|
|
287
|
+
return time.getTime() > now.getTime() || time.getTime() < oneMonthAgo.getTime()
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
// 基金一句话描述
|
|
291
|
+
fundSummary: '这是一只优秀的基金产品,具有良好的市场表现和投资价值。',
|
|
292
|
+
// 基金简称搜索
|
|
293
|
+
fundAbbrSearch: '',
|
|
294
|
+
// 原始表格数据
|
|
295
|
+
originalTableData: [
|
|
296
|
+
{
|
|
297
|
+
id: 1,
|
|
298
|
+
fundAbbr: '基金A',
|
|
299
|
+
fundCode: '000001',
|
|
300
|
+
explainFrame: '框架A',
|
|
301
|
+
category: '股票型',
|
|
302
|
+
explainContent:
|
|
303
|
+
'11111111111111111111111111111111111111111这是一段很长的解读内容,需要展示在表格中,当内容超过3行时需要显示展开按钮来查看更多内容。这是一段很长的解读内容,需要展示在表格中,当内容超过3行时需要显示展开按钮来查看更多内容。这是一段很长的解读内容,需要展示在表格中,当内容超过3行时需要显示展开按钮来查看更多内容。',
|
|
304
|
+
explainDimensions:
|
|
305
|
+
'qwqw1211111111111111111111111111111111111111111111111111111222222222222222222222222维度1、维度2、维度3、维度4、维度5',
|
|
306
|
+
explainDirection:
|
|
307
|
+
'11111111111111111111111111111222222222222222222222222222222221212222222222222222222222221111向上、向下、持平、向上、向下、持平',
|
|
308
|
+
date: '2024-01-15',
|
|
309
|
+
startDate: '2024-01-20',
|
|
310
|
+
expandContent: false,
|
|
311
|
+
expandDimensions: false,
|
|
312
|
+
expandDirection: false,
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
id: 2,
|
|
316
|
+
fundAbbr: '基金B',
|
|
317
|
+
fundCode: '000002',
|
|
318
|
+
explainFrame: '框架B',
|
|
319
|
+
category: '混合型',
|
|
320
|
+
explainContent: '解读内容B',
|
|
321
|
+
explainDimensions: '维度B',
|
|
322
|
+
explainDirection: '方向B',
|
|
323
|
+
date: '2024-01-16',
|
|
324
|
+
startDate: '2024-01-21',
|
|
325
|
+
expandContent: false,
|
|
326
|
+
expandDimensions: false,
|
|
327
|
+
expandDirection: false,
|
|
328
|
+
},
|
|
329
|
+
],
|
|
330
|
+
// 排序配置
|
|
331
|
+
sortConfig: {
|
|
332
|
+
prop: 'fundCode',
|
|
333
|
+
order: 'ascending',
|
|
334
|
+
},
|
|
335
|
+
// 统计弹窗显示状态
|
|
336
|
+
statisticsDialogVisible: false,
|
|
337
|
+
// 统计数据
|
|
338
|
+
statisticsData: {
|
|
339
|
+
fundTotal: 100,
|
|
340
|
+
date: '2024-01-15',
|
|
341
|
+
shouldRunTotal: 80,
|
|
342
|
+
withArgumentTotal: 65,
|
|
343
|
+
fallbackTotal: 15,
|
|
344
|
+
},
|
|
345
|
+
// 临时修改 distributionTableData 数据(删除 hasChildren 字段)
|
|
346
|
+
distributionTableData: [
|
|
347
|
+
{
|
|
348
|
+
index: '1',
|
|
349
|
+
frameName: '框架A',
|
|
350
|
+
argument: '论据A1',
|
|
351
|
+
nums: 30,
|
|
352
|
+
rate: 30,
|
|
353
|
+
// 移除 hasChildren: true
|
|
354
|
+
children: [
|
|
355
|
+
{ index: '1-1', frameName: '框架A-子项1', argument: '论据A1-1', nums: 20, rate: 20 },
|
|
356
|
+
{ index: '1-2', frameName: '框架A-子项2', argument: '论据A1-2', nums: 10, rate: 10 },
|
|
357
|
+
],
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
index: '2',
|
|
361
|
+
frameName: '框架B',
|
|
362
|
+
argument: '论据B1',
|
|
363
|
+
nums: 25,
|
|
364
|
+
rate: 25,
|
|
365
|
+
// 移除 hasChildren: true
|
|
366
|
+
children: [
|
|
367
|
+
{ index: '2-1', frameName: '框架B-子项1', argument: '论据B1-1', nums: 15, rate: 15 },
|
|
368
|
+
{ index: '2-2', frameName: '框架B-子项2', argument: '论据B1-2', nums: 10, rate: 10 },
|
|
369
|
+
],
|
|
370
|
+
},
|
|
371
|
+
],
|
|
372
|
+
// 展开的行
|
|
373
|
+
expandedRows: {},
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
computed: {
|
|
377
|
+
// 过滤后的表格数据
|
|
378
|
+
tableData() {
|
|
379
|
+
let data = [...this.originalTableData]
|
|
380
|
+
|
|
381
|
+
// 基金简称模糊查询
|
|
382
|
+
if (this.fundAbbrSearch) {
|
|
383
|
+
data = data.filter(item => item.fundAbbr && item.fundAbbr.includes(this.fundAbbrSearch))
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// 其他筛选条件
|
|
387
|
+
if (this.searchForm.fundAbbr) {
|
|
388
|
+
data = data.filter(
|
|
389
|
+
item => item.fundAbbr && item.fundAbbr.includes(this.searchForm.fundAbbr)
|
|
390
|
+
)
|
|
391
|
+
}
|
|
392
|
+
if (this.searchForm.fundCode) {
|
|
393
|
+
data = data.filter(
|
|
394
|
+
item => item.fundCode && item.fundCode.includes(this.searchForm.fundCode)
|
|
395
|
+
)
|
|
396
|
+
}
|
|
397
|
+
if (this.searchForm.explainFrame && this.searchForm.explainFrame.length > 0) {
|
|
398
|
+
data = data.filter(item => this.searchForm.explainFrame.includes(item.explainFrame))
|
|
399
|
+
}
|
|
400
|
+
if (this.searchForm.date) {
|
|
401
|
+
data = data.filter(item => item.date === this.searchForm.date)
|
|
402
|
+
}
|
|
403
|
+
if (this.searchForm.startDateRange && this.searchForm.startDateRange.length === 2) {
|
|
404
|
+
const [startDate, endDate] = this.searchForm.startDateRange
|
|
405
|
+
data = data.filter(item => {
|
|
406
|
+
return item.startDate >= startDate && item.startDate <= endDate
|
|
407
|
+
})
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// 排序
|
|
411
|
+
if (this.sortConfig.prop) {
|
|
412
|
+
data.sort((a, b) => {
|
|
413
|
+
const aVal = a[this.sortConfig.prop]
|
|
414
|
+
const bVal = b[this.sortConfig.prop]
|
|
415
|
+
if (this.sortConfig.order === 'ascending') {
|
|
416
|
+
return aVal > bVal ? 1 : aVal < bVal ? -1 : 0
|
|
417
|
+
} else {
|
|
418
|
+
return aVal < bVal ? 1 : aVal > bVal ? -1 : 0
|
|
419
|
+
}
|
|
420
|
+
})
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
return data
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
mounted() {
|
|
427
|
+
// 初始化原始数据
|
|
428
|
+
this.originalTableData = JSON.parse(JSON.stringify(this.originalTableData))
|
|
429
|
+
},
|
|
430
|
+
methods: {
|
|
431
|
+
// 查询
|
|
432
|
+
handleSearch() {
|
|
433
|
+
console.log('查询条件:', this.searchForm)
|
|
434
|
+
// TODO: 实现查询逻辑
|
|
435
|
+
},
|
|
436
|
+
// 重置
|
|
437
|
+
handleReset() {
|
|
438
|
+
this.searchForm = {
|
|
439
|
+
fundAbbr: '',
|
|
440
|
+
fundCode: '',
|
|
441
|
+
explainFrame: [],
|
|
442
|
+
date: '',
|
|
443
|
+
startDateRange: [],
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
// 表格排序
|
|
447
|
+
handleSortChange({ prop, order }) {
|
|
448
|
+
if (prop === 'fundCode' || prop === 'startDate') {
|
|
449
|
+
this.sortConfig = { prop, order }
|
|
450
|
+
// TODO: 实现排序逻辑
|
|
451
|
+
console.log('排序:', { prop, order })
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
// // 基金简称筛选
|
|
455
|
+
// handleFundAbbrFilter() {
|
|
456
|
+
// // 通过 computed 属性自动过滤
|
|
457
|
+
// },
|
|
458
|
+
// 判断是否需要显示展开按钮(超过3行)
|
|
459
|
+
shouldShowExpand(content) {
|
|
460
|
+
if (!content) return false
|
|
461
|
+
// 简单的判断:如果内容长度超过某个阈值,认为超过3行
|
|
462
|
+
// 实际可以使用更精确的方法,比如计算实际行数
|
|
463
|
+
return content.length > 100
|
|
464
|
+
},
|
|
465
|
+
// 切换展开/收起
|
|
466
|
+
toggleExpand(row, field) {
|
|
467
|
+
const expandField = `expand${field.charAt(0).toUpperCase() + field.slice(1)}`
|
|
468
|
+
this.$set(row, expandField, !row[expandField])
|
|
469
|
+
},
|
|
470
|
+
// 打开统计弹窗
|
|
471
|
+
openStatisticsDialog() {
|
|
472
|
+
// TODO: 根据当前表格数据查询统计数据
|
|
473
|
+
this.statisticsDialogVisible = true
|
|
474
|
+
},
|
|
475
|
+
// 数据导出
|
|
476
|
+
handleExport() {
|
|
477
|
+
// TODO: 实现数据导出逻辑
|
|
478
|
+
this.$message.success('导出功能开发中...')
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
}
|
|
482
|
+
</script>
|
|
483
|
+
|
|
484
|
+
<style scoped lang="scss">
|
|
485
|
+
.event-interpretation {
|
|
486
|
+
padding: 20px;
|
|
487
|
+
background-color: #f5f7fa;
|
|
488
|
+
min-height: calc(100vh - 40px);
|
|
489
|
+
|
|
490
|
+
.filter-card {
|
|
491
|
+
margin-bottom: 20px;
|
|
492
|
+
background-color: #fff;
|
|
493
|
+
|
|
494
|
+
.search-form {
|
|
495
|
+
padding: 10px 0;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.display-card {
|
|
500
|
+
background-color: #fff;
|
|
501
|
+
|
|
502
|
+
.description-section {
|
|
503
|
+
display: flex;
|
|
504
|
+
justify-content: space-between;
|
|
505
|
+
align-items: center;
|
|
506
|
+
padding: 15px 0;
|
|
507
|
+
border-bottom: 1px solid #ebeef5;
|
|
508
|
+
margin-bottom: 15px;
|
|
509
|
+
|
|
510
|
+
.description-left {
|
|
511
|
+
flex: 1;
|
|
512
|
+
|
|
513
|
+
.fund-summary {
|
|
514
|
+
font-size: 14px;
|
|
515
|
+
color: #606266;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
.description-right {
|
|
520
|
+
display: flex;
|
|
521
|
+
align-items: center;
|
|
522
|
+
gap: 10px;
|
|
523
|
+
|
|
524
|
+
.text {
|
|
525
|
+
font-size: 14px;
|
|
526
|
+
color: #606266;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.result-table {
|
|
532
|
+
.expandable-content {
|
|
533
|
+
width: 100%;
|
|
534
|
+
|
|
535
|
+
/* 折叠状态样式(明确类名) */
|
|
536
|
+
.content-collapse {
|
|
537
|
+
display: -webkit-box;
|
|
538
|
+
-webkit-line-clamp: 3;
|
|
539
|
+
line-clamp: 3;
|
|
540
|
+
-webkit-box-orient: vertical;
|
|
541
|
+
overflow: hidden;
|
|
542
|
+
text-overflow: ellipsis;
|
|
543
|
+
white-space: normal;
|
|
544
|
+
word-wrap: break-word;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/* 展开状态样式 */
|
|
548
|
+
.content-expanded {
|
|
549
|
+
white-space: normal;
|
|
550
|
+
word-wrap: break-word;
|
|
551
|
+
overflow: visible; /* 确保展开后内容完全显示 */
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
/* 按钮样式优化 */
|
|
555
|
+
.el-button {
|
|
556
|
+
margin-top: 5px;
|
|
557
|
+
color: #409eff;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
// .expandable-content {
|
|
561
|
+
// .content-expanded {
|
|
562
|
+
// white-space: normal;
|
|
563
|
+
// word-wrap: break-word;
|
|
564
|
+
// }
|
|
565
|
+
|
|
566
|
+
// div:not(.content-expanded) {
|
|
567
|
+
// display: -webkit-box;
|
|
568
|
+
// -webkit-line-clamp: 3;
|
|
569
|
+
// line-clamp: 3;
|
|
570
|
+
// -webkit-box-orient: vertical;
|
|
571
|
+
// overflow: hidden;
|
|
572
|
+
// text-overflow: ellipsis;
|
|
573
|
+
// white-space: normal;
|
|
574
|
+
// word-wrap: break-word;
|
|
575
|
+
// }
|
|
576
|
+
// }
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// 统计弹窗样式
|
|
581
|
+
.statistics-top {
|
|
582
|
+
margin-bottom: 30px;
|
|
583
|
+
|
|
584
|
+
.statistics-row {
|
|
585
|
+
display: flex;
|
|
586
|
+
justify-content: space-between;
|
|
587
|
+
align-items: center;
|
|
588
|
+
margin-bottom: 20px;
|
|
589
|
+
|
|
590
|
+
&.statistics-three-columns {
|
|
591
|
+
display: flex;
|
|
592
|
+
gap: 20px;
|
|
593
|
+
margin-top: 20px;
|
|
594
|
+
|
|
595
|
+
.statistics-column {
|
|
596
|
+
flex: 1;
|
|
597
|
+
padding: 15px;
|
|
598
|
+
background-color: #f5f7fa;
|
|
599
|
+
border-radius: 4px;
|
|
600
|
+
text-align: center;
|
|
601
|
+
|
|
602
|
+
.column-label {
|
|
603
|
+
font-size: 14px;
|
|
604
|
+
color: #606266;
|
|
605
|
+
margin-bottom: 10px;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
.column-value {
|
|
609
|
+
font-size: 24px;
|
|
610
|
+
font-weight: bold;
|
|
611
|
+
color: #409eff;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
.statistics-item-left,
|
|
617
|
+
.statistics-item-right {
|
|
618
|
+
display: flex;
|
|
619
|
+
align-items: center;
|
|
620
|
+
|
|
621
|
+
.label {
|
|
622
|
+
font-size: 14px;
|
|
623
|
+
color: #606266;
|
|
624
|
+
margin-right: 5px;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.value {
|
|
628
|
+
font-size: 14px;
|
|
629
|
+
color: #303133;
|
|
630
|
+
font-weight: 500;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
.statistics-bottom {
|
|
637
|
+
.section-title {
|
|
638
|
+
font-size: 16px;
|
|
639
|
+
font-weight: bold;
|
|
640
|
+
color: #303133;
|
|
641
|
+
margin-bottom: 15px;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.distribution-table {
|
|
645
|
+
.expand-icon {
|
|
646
|
+
cursor: pointer;
|
|
647
|
+
display: inline-block;
|
|
648
|
+
width: 20px;
|
|
649
|
+
text-align: center;
|
|
650
|
+
color: #409eff;
|
|
651
|
+
margin-right: 5px;
|
|
652
|
+
user-select: none;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.index-text {
|
|
656
|
+
cursor: pointer;
|
|
657
|
+
user-select: none;
|
|
658
|
+
color: #409eff;
|
|
659
|
+
|
|
660
|
+
&:hover {
|
|
661
|
+
text-decoration: underline;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
</style>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/readme.md
CHANGED
|
Binary file
|