npmapps 1.0.25 → 1.0.27

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 (213) hide show
  1. package/PUBLISH.md +268 -0
  2. package/app/.codegraph/daemon.pid +6 -0
  3. package/app/.eslintrc.js +19 -0
  4. package/app/README.md +24 -0
  5. package/app/babel.config.js +5 -0
  6. package/app/devtool-windows-amd64.zip +0 -0
  7. package/app/docs/superpowers/plans/2026-05-29-quill-editor.md +836 -0
  8. package/app/docs/superpowers/specs/2026-05-29-quill-editor-design.md +210 -0
  9. package/app/docs/superpowers/specs/2026-06-06-lazy-cascader-design.md +400 -0
  10. package/app/jsconfig.json +19 -0
  11. package/app/package-lock.json +21347 -0
  12. package/app/package.json +63 -0
  13. package/app/postcss.config.js +10 -0
  14. package/app/public/favicon.ico +0 -0
  15. package/app/public/index.html +17 -0
  16. package/app/public//344/270/200/351/224/256/351/273/221/346/232/227.html +136 -0
  17. package/app/src/App.vue +110 -0
  18. package/app/src/assets/bpmn-camunda.jpg +0 -0
  19. package/app/src/assets/css/diagram.less +17 -0
  20. package/app/src/assets/icon/Icon.less +31 -0
  21. package/app/src/assets/icon/font/app-codes.css +26 -0
  22. package/app/src/assets/icon/font/app.eot +0 -0
  23. package/app/src/assets/icon/font/app.svg +60 -0
  24. package/app/src/assets/icon/font/app.ttf +0 -0
  25. package/app/src/assets/icon/font/app.woff +0 -0
  26. package/app/src/assets/icon/font/app.woff2 +0 -0
  27. package/app/src/assets/icon/font/config.json +248 -0
  28. package/app/src/assets/icon/font/source/raw/align-bottom-tool.svg +30 -0
  29. package/app/src/assets/icon/font/source/raw/align-horizontal-center-tool.svg +85 -0
  30. package/app/src/assets/icon/font/source/raw/align-left-tool.svg +84 -0
  31. package/app/src/assets/icon/font/source/raw/align-right-tool.svg +80 -0
  32. package/app/src/assets/icon/font/source/raw/align-top-tool.svg +84 -0
  33. package/app/src/assets/icon/font/source/raw/align-vertical-center-tool.svg +89 -0
  34. package/app/src/assets/icon/font/source/raw/distribute-horizontally-tool.svg +95 -0
  35. package/app/src/assets/icon/font/source/raw/distribute-vertically-tool.svg +99 -0
  36. package/app/src/assets/icon/font/source/raw/set-color-tool.svg +111 -0
  37. package/app/src/assets/icon/font/source/symbols/align-bottom-tool.svg +30 -0
  38. package/app/src/assets/icon/font/source/symbols/align-horizontal-center-tool.svg +30 -0
  39. package/app/src/assets/icon/font/source/symbols/align-left-tool.svg +30 -0
  40. package/app/src/assets/icon/font/source/symbols/align-right-tool.svg +30 -0
  41. package/app/src/assets/icon/font/source/symbols/align-top-tool.svg +30 -0
  42. package/app/src/assets/icon/font/source/symbols/align-vertical-center-tool.svg +30 -0
  43. package/app/src/assets/icon/font/source/symbols/distribute-horizontally-tool.svg +30 -0
  44. package/app/src/assets/icon/font/source/symbols/distribute-vertically-tool.svg +30 -0
  45. package/app/src/assets/icon/font/source/symbols/set-color-tool.svg +63 -0
  46. package/app/src/assets/logo.png +0 -0
  47. package/app/src/components/EllTable/README.md +70 -0
  48. package/app/src/components/EllTable/article.md +184 -0
  49. package/app/src/components/EllTable/index.js +213 -0
  50. package/app/src/components/FormulaEditor/FunctionSelector.vue +123 -0
  51. package/app/src/components/FormulaEditor/OperatorSelector.vue +184 -0
  52. package/app/src/components/FormulaEditor/ParameterSelector.vue +123 -0
  53. package/app/src/components/FormulaEditor/api.js +69 -0
  54. package/app/src/components/FormulaEditor/index.vue +435 -0
  55. package/app/src/components/HelloWorld.vue +58 -0
  56. package/app/src/components/PageHeader/index.vue +158 -0
  57. package/app/src/components/Splitter/README.md +144 -0
  58. package/app/src/components/Splitter/example.vue +88 -0
  59. package/app/src/components/Splitter/index.vue +203 -0
  60. package/app/src/components/diagram/ToolBar.vue +357 -0
  61. package/app/src/components/diagram/customTranslate/customTranslate.js +12 -0
  62. package/app/src/components/diagram/customTranslate/translationsGerman.js +241 -0
  63. package/app/src/components/diagram/index.vue +261 -0
  64. package/app/src/components/diagram/xmlData.js +29 -0
  65. package/app/src/directives/filldown.js +155 -0
  66. package/app/src/directives/filldownTable.js +291 -0
  67. package/app/src/main.js +40 -0
  68. package/app/src/router/index.js +63 -0
  69. package/app/src/store/index.js +23 -0
  70. package/app/src/utils/winBox.js +23 -0
  71. package/app/src/views/Extend/A.vue +12 -0
  72. package/app/src/views/Extend/B.vue +10 -0
  73. package/app/src/views/Extend/MagicalComponentsForELFormItem.vue +87 -0
  74. package/app/src/views/Extend/index.vue +59 -0
  75. package/app/src/views/Extend/tableMouseHorizontalWheel.vue +193 -0
  76. package/app/src/views/Home.vue +37 -0
  77. package/app/src/views/RouterJump.vue +155 -0
  78. package/app/src/views/css.vue +57 -0
  79. package/app/src/views/cssComponents/EllipsisText.vue +83 -0
  80. package/app/src/views/cssComponents/HoverCard.vue +79 -0
  81. package/app/src/views/cssComponents/TableHover.vue +140 -0
  82. package/app/src/views/cssComponents/inputSlo.vue +52 -0
  83. package/app/src/views/cssComponents/tableFixed.vue +158 -0
  84. package/app/src/views/echarts/echart-dome.vue +82 -0
  85. package/app/src/views/echarts/index.vue +118 -0
  86. package/app/src/views/echarts/pei3d.vue +667 -0
  87. package/app/src/views/element/bpmn/index.vue +18 -0
  88. package/app/src/views/element/components/attendanceCycle/index.vue +131 -0
  89. package/app/src/views/element/components/attendanceGroup/index.vue +147 -0
  90. package/app/src/views/element/components/attendancePersonnel/index.vue +158 -0
  91. package/app/src/views/element/components/companyCalendar/index.vue +147 -0
  92. package/app/src/views/element/components/shift/index.vue +147 -0
  93. package/app/src/views/element/components/shiftRotationSystem/index.vue +147 -0
  94. package/app/src/views/element/elTableJsx/columnManagement.vue +340 -0
  95. package/app/src/views/element/elTableJsx/dialogInput.vue +71 -0
  96. package/app/src/views/element/elTableJsx/elTableJsx.vue +1826 -0
  97. package/app/src/views/element/elTableJsx/formTable.vue +598 -0
  98. package/app/src/views/element/elTableJsx/index.vue +29 -0
  99. package/app/src/views/element/elTableJsx/simpleTable.vue +192 -0
  100. package/app/src/views/element/elTableJsx.zip +0 -0
  101. package/app/src/views/element/index.vue +44 -0
  102. package/app/src/views/element/lazyCascader/LazyCascader.vue +302 -0
  103. package/app/src/views/element/lazyCascader/data.js +205 -0
  104. package/app/src/views/element/lazyCascader/index.vue +315 -0
  105. package/app/src/views/element/quillEditor/README.md +163 -0
  106. package/app/src/views/element/quillEditor/example.vue +314 -0
  107. package/app/src/views/element/quillEditor/index.vue +409 -0
  108. package/app/src/views/element/quillEditor/toolbar.js +122 -0
  109. package/app/vue.config.js +15 -0
  110. package/package.json +1 -1
  111. package/app/wujie-vue3-child/.claude/settings.local.json +0 -8
  112. package/app/wujie-vue3-child/.vscode/extensions.json +0 -3
  113. package/app/wujie-vue3-child/PROJECT_MEMORY.md +0 -427
  114. package/app/wujie-vue3-child/README.md +0 -5
  115. package/app/wujie-vue3-child/index.html +0 -13
  116. package/app/wujie-vue3-child/package-lock.json +0 -5744
  117. package/app/wujie-vue3-child/package.json +0 -28
  118. package/app/wujie-vue3-child/public/vite.svg +0 -1
  119. package/app/wujie-vue3-child/src/App.vue +0 -130
  120. package/app/wujie-vue3-child/src/assets/vue.svg +0 -1
  121. package/app/wujie-vue3-child/src/components/HelloWorld.vue +0 -43
  122. package/app/wujie-vue3-child/src/components/SmartAnchorTabs/index.jsx +0 -224
  123. package/app/wujie-vue3-child/src/components/SmartAnchorTabs/style.css +0 -154
  124. package/app/wujie-vue3-child/src/components/tags-view.vue +0 -193
  125. package/app/wujie-vue3-child/src/components/tags-view1.vue +0 -131
  126. package/app/wujie-vue3-child/src/directives/aiLoading.js +0 -182
  127. package/app/wujie-vue3-child/src/hooks/useClickOutside.js +0 -11
  128. package/app/wujie-vue3-child/src/hooks/useTableDragSort.js +0 -28
  129. package/app/wujie-vue3-child/src/main.js +0 -18
  130. package/app/wujie-vue3-child/src/router/index.js +0 -104
  131. package/app/wujie-vue3-child/src/store/tagsViewStroe.js +0 -34
  132. package/app/wujie-vue3-child/src/style.css +0 -171
  133. package/app/wujie-vue3-child/src/views/aiCoach/collapseExpand/index.jsx +0 -108
  134. package/app/wujie-vue3-child/src/views/aiCoach/collapseExpand/index.module.scss +0 -97
  135. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/README.md +0 -836
  136. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/REFLEX_EXAMPLES.md +0 -728
  137. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentPersonnelSelector.jsx +0 -687
  138. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentPersonnelSelector.module.scss +0 -560
  139. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelector.jsx +0 -570
  140. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelector.module.scss +0 -330
  141. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelectorV2.jsx +0 -378
  142. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/DepartmentSelectorV2.module.scss +0 -228
  143. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/OptionsSelector.jsx +0 -399
  144. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/OptionsSelector.module.scss +0 -252
  145. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PersonnelSelector.jsx +0 -585
  146. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PersonnelSelector.module.scss +0 -331
  147. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PopoverSelector.jsx +0 -392
  148. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/PopoverSelector.module.scss +0 -39
  149. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/README.md +0 -248
  150. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/components/SelectorTrigger.jsx +0 -194
  151. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/index.jsx +0 -1459
  152. package/app/wujie-vue3-child/src/views/aiCoach/departmentPersonnel/mockData.js +0 -301
  153. package/app/wujie-vue3-child/src/views/aiCoach/dialogueSegment/index.jsx +0 -182
  154. package/app/wujie-vue3-child/src/views/aiCoach/dialogueSegment/index.module.scss +0 -28
  155. package/app/wujie-vue3-child/src/views/aiCoach/index.jsx +0 -375
  156. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ChartsPanel/index.jsx +0 -121
  157. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ChartsPanel/index.module.scss +0 -76
  158. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/DonutChart/index.jsx +0 -104
  159. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/PracticeTable/index.jsx +0 -75
  160. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/PracticeTable/index.module.scss +0 -12
  161. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankBarChart/index.jsx +0 -62
  162. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankBarChart/index.module.scss +0 -43
  163. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingGroup/index.jsx +0 -29
  164. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingGroup/index.module.scss +0 -5
  165. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingList/index.jsx +0 -58
  166. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/RankingList/index.module.scss +0 -85
  167. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ScriptStatsPanel/index.jsx +0 -92
  168. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/ScriptStatsPanel/index.module.scss +0 -56
  169. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/StatCardsRow/index.jsx +0 -40
  170. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/StatCardsRow/index.module.scss +0 -53
  171. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/echarts/EchartsDonut.jsx +0 -106
  172. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/components/echarts/EchartsRankBar.jsx +0 -132
  173. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/index.jsx +0 -176
  174. package/app/wujie-vue3-child/src/views/aiCoach/practiceStatus/index.module.scss +0 -96
  175. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/CoachReport/index.jsx +0 -162
  176. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/CoachReport/index.module.scss +0 -16
  177. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ComprehensiveEvaluation/index.jsx +0 -29
  178. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ComprehensiveEvaluation/index.module.scss +0 -25
  179. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueBubble/index.jsx +0 -106
  180. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueBubble/index.module.scss +0 -164
  181. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueRecord/index.jsx +0 -182
  182. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DialogueRecord/index.module.scss +0 -203
  183. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionDetail/index.jsx +0 -145
  184. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionDetail/index.module.scss +0 -126
  185. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionScores/index.jsx +0 -67
  186. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/DimensionScores/index.module.scss +0 -105
  187. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ReportHeader/index.jsx +0 -81
  188. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ReportHeader/index.module.scss +0 -47
  189. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/RoleInfo/index.jsx +0 -64
  190. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/RoleInfo/index.module.scss +0 -85
  191. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ScoreBadge/index.jsx +0 -39
  192. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/ScoreBadge/index.module.scss +0 -44
  193. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/SubDimensionItem/index.jsx +0 -83
  194. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/components/SubDimensionItem/index.module.scss +0 -101
  195. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/index.jsx +0 -50
  196. package/app/wujie-vue3-child/src/views/aiCoach/reportDetail/index.module.scss +0 -25
  197. package/app/wujie-vue3-child/src/views/aiCoach/scriptTable/index.jsx +0 -196
  198. package/app/wujie-vue3-child/src/views/aiCoach/scriptTable/index.module.scss +0 -41
  199. package/app/wujie-vue3-child/src/views/aiCoach/scriptTable/inputColumn/index.jsx +0 -183
  200. package/app/wujie-vue3-child/src/views/aiCoach/scriptTable/inputColumn/index.module.scss +0 -115
  201. package/app/wujie-vue3-child/src/views/child-to-parent.vue +0 -117
  202. package/app/wujie-vue3-child/src/views/home.vue +0 -53
  203. package/app/wujie-vue3-child/src/views/jsx/btnSelect/btnSelect.vue +0 -169
  204. package/app/wujie-vue3-child/src/views/jsx/btnSelect/index.vue +0 -69
  205. package/app/wujie-vue3-child/src/views/jsx/com.vue +0 -44
  206. package/app/wujie-vue3-child/src/views/jsx/dialog.jsx +0 -66
  207. package/app/wujie-vue3-child/src/views/jsx/index.vue +0 -72
  208. package/app/wujie-vue3-child/src/views/jsx/props.vue +0 -33
  209. package/app/wujie-vue3-child/src/views/parent-to-child.vue +0 -225
  210. package/app/wujie-vue3-child/src/views/phone-code.vue +0 -318
  211. package/app/wujie-vue3-child/src/views/router-jump.vue +0 -123
  212. package/app/wujie-vue3-child/src/views/test.vue +0 -192
  213. package/app/wujie-vue3-child/vite.config.js +0 -15
@@ -1,29 +0,0 @@
1
- import { defineComponent } from 'vue'
2
- import styles from './index.module.scss'
3
-
4
- /**
5
- * 综合评价组件
6
- * @description 显示AI对练习表现的综合评价文字
7
- */
8
- export default defineComponent({
9
- name: 'ComprehensiveEvaluation',
10
-
11
- props: {
12
- // 评价内容
13
- content: {
14
- type: String,
15
- required: true,
16
- },
17
- },
18
-
19
- setup(props) {
20
- return () => {
21
- return (
22
- <div class={styles.comprehensiveEvaluation}>
23
- <h3 class={styles.title}>综合评价</h3>
24
- <div class={styles.content}>{props.content}</div>
25
- </div>
26
- )
27
- }
28
- },
29
- })
@@ -1,25 +0,0 @@
1
- // 综合评价样式
2
- .comprehensiveEvaluation {
3
- background: #fff;
4
- padding: 20px 24px;
5
- border-radius: 8px;
6
- height: 300px;
7
- display: flex;
8
- flex-direction: column;
9
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
10
- }
11
-
12
- .title {
13
- font-size: 16px;
14
- font-weight: 600;
15
- color: #262626;
16
- margin: 0 0 16px 0;
17
- padding-bottom: 12px;
18
- }
19
-
20
- .content {
21
- font-size: 14px;
22
- color: #595959;
23
- line-height: 1.8;
24
- text-align: justify;
25
- }
@@ -1,106 +0,0 @@
1
- import { defineComponent } from 'vue'
2
- import styles from './index.module.scss'
3
-
4
- /**
5
- * 对话气泡组件
6
- * @description 显示客户问题和AI回答的对话气泡
7
- */
8
- export default defineComponent({
9
- name: 'DialogueBubble',
10
-
11
- props: {
12
- // 对话数据
13
- dialogue: {
14
- type: Object,
15
- required: true,
16
- // 数据格式: { question: 'AI提问', answer: '用户回答', score: 98 }
17
- },
18
- // 得分详情
19
- scoreDetails: {
20
- type: Array,
21
- default: () => [],
22
- // 数据格式: [{ name: '关键词', score: 20, total: 20, tags: ['多重保障'] }]
23
- },
24
- // 指导建议
25
- suggestion: {
26
- type: String,
27
- default: '',
28
- },
29
- },
30
-
31
- setup(props) {
32
- // 获取评分等级表情
33
- const getScoreEmoji = (score) => {
34
- if (score >= 90) return '😃'
35
- if (score >= 70) return '🙂'
36
- if (score >= 60) return '😐'
37
- return '😟'
38
- }
39
-
40
- return () => {
41
- return (
42
- <div class={styles.dialogueBubble}>
43
- {/* 对话内容 */}
44
- <div class={styles.dialogueContent}>
45
- {/* AI提问 */}
46
- <div class={styles.questionBubble}>
47
- <div class={styles.bubbleText}>
48
- <span class={styles.audioIcon}>🔊</span>
49
- <span>{props.dialogue.question}</span>
50
- </div>
51
- </div>
52
-
53
- {/* 用户回答 */}
54
- <div class={styles.answerBubble}>
55
- <div class={styles.bubbleText}>
56
- {props.dialogue.answer}
57
- </div>
58
- <div class={styles.scoreTag}>
59
- <span class={styles.scoreValue}>{props.dialogue.score}分</span>
60
- <span class={styles.scoreEmoji}>{getScoreEmoji(props.dialogue.score)}</span>
61
- </div>
62
-
63
- {/* 得分明细卡片 */}
64
- <div class={styles.scoreCard}>
65
- {/* 得分明细 */}
66
- <div class={styles.scoreDetails}>
67
- <div class={styles.detailsTitle}>得分明细</div>
68
- {props.scoreDetails.map((detail, index) => (
69
- <div key={index} class={styles.detailItem}>
70
- <div class={styles.detailHeader}>
71
- <span class={styles.detailName}>{detail.name}</span>
72
- <span class={styles.detailScore}>
73
- {detail.score}/{detail.total}分
74
- </span>
75
- </div>
76
- {detail.tags && detail.tags.length > 0 && (
77
- <div class={styles.tags}>
78
- <span class={styles.tagLabel}>
79
- 关键词共{detail.tags.length}个,命中{detail.tags.length}个
80
- </span>
81
- {detail.tags.map((tag, idx) => (
82
- <el-tag key={idx} type="success" size="small">
83
- {tag}
84
- </el-tag>
85
- ))}
86
- </div>
87
- )}
88
- </div>
89
- ))}
90
- </div>
91
-
92
- {/* 指导建议 */}
93
- {props.suggestion && (
94
- <div class={styles.suggestion}>
95
- <div class={styles.suggestionTitle}>指导建议</div>
96
- <div class={styles.suggestionContent}>{props.suggestion}</div>
97
- </div>
98
- )}
99
- </div>
100
- </div>
101
- </div>
102
- </div>
103
- )
104
- }
105
- },
106
- })
@@ -1,164 +0,0 @@
1
- // 对话气泡样式
2
- .dialogueBubble {
3
- background: #f8f8f8;
4
- padding: 16px;
5
- border-radius: 0 0 8px 8px;
6
- }
7
-
8
- // 对话内容
9
- .dialogueContent {
10
- margin-bottom: 0;
11
- display: flex;
12
- flex-direction: column;
13
- gap: 16px;
14
- }
15
-
16
- .questionBubble {
17
- display: flex;
18
- justify-content: flex-start;
19
- align-self: flex-start;
20
- max-width: 70%;
21
-
22
- .bubbleText {
23
- background: #f5f5f5;
24
- color: #262626;
25
- padding: 14px 16px;
26
- border-radius: 8px 8px 8px 2px;
27
- line-height: 1.7;
28
- font-size: 14px;
29
- display: flex;
30
- align-items: center;
31
- gap: 8px;
32
- }
33
- }
34
-
35
- .answerBubble {
36
- display: flex;
37
- flex-direction: column;
38
- align-items: flex-end;
39
- align-self: flex-end;
40
- background: #e4ebfd;
41
- padding: 16px;
42
- border-radius: 8px;
43
- max-width: 80%;
44
-
45
- .bubbleText {
46
- background: transparent;
47
- color: #262626;
48
- padding: 0;
49
- max-width: 100%;
50
- line-height: 1.7;
51
- font-size: 14px;
52
- margin-bottom: 12px;
53
- width: 100%;
54
- }
55
- }
56
-
57
- .scoreTag {
58
- display: flex;
59
- align-items: center;
60
- gap: 6px;
61
- margin-bottom: 12px;
62
- align-self: flex-end;
63
- }
64
-
65
- .scoreValue {
66
- font-size: 16px;
67
- font-weight: 600;
68
- color: #ff8c00;
69
- }
70
-
71
- .scoreEmoji {
72
- font-size: 16px;
73
- }
74
-
75
- .audioIcon {
76
- font-size: 16px;
77
- cursor: pointer;
78
- opacity: 0.6;
79
- flex-shrink: 0;
80
- }
81
-
82
- // 得分明细卡片
83
- .scoreCard {
84
- background: #ffffff;
85
- padding: 16px 20px;
86
- border-radius: 8px;
87
- align-self: stretch;
88
- }
89
-
90
- // 得分明细
91
- .scoreDetails {
92
- margin-bottom: 16px;
93
-
94
- &:last-child {
95
- margin-bottom: 0;
96
- }
97
- }
98
-
99
- .detailsTitle {
100
- font-size: 15px;
101
- font-weight: 600;
102
- color: #fa8c16;
103
- margin-bottom: 12px;
104
- }
105
-
106
- .detailItem {
107
- margin-bottom: 12px;
108
-
109
- &:last-child {
110
- margin-bottom: 0;
111
- }
112
- }
113
-
114
- .detailHeader {
115
- display: flex;
116
- justify-content: space-between;
117
- align-items: center;
118
- margin-bottom: 6px;
119
- }
120
-
121
- .detailName {
122
- font-size: 14px;
123
- color: #262626;
124
- font-weight: 500;
125
- }
126
-
127
- .detailScore {
128
- font-size: 15px;
129
- color: #52c41a;
130
- font-weight: 600;
131
- }
132
-
133
- .tags {
134
- display: flex;
135
- gap: 8px;
136
- flex-wrap: wrap;
137
- align-items: center;
138
- }
139
-
140
- .tagLabel {
141
- font-size: 13px;
142
- color: #595959;
143
- }
144
-
145
- // 指导建议
146
- .suggestion {
147
- padding-top: 16px;
148
- border-top: 1px solid rgba(0, 0, 0, 0.06);
149
- }
150
-
151
- .suggestionTitle {
152
- font-size: 15px;
153
- font-weight: 600;
154
- color: #fa8c16;
155
- margin-bottom: 8px;
156
- }
157
-
158
- .suggestionContent {
159
- font-size: 14px;
160
- color: #262626;
161
- line-height: 1.7;
162
- }
163
-
164
-
@@ -1,182 +0,0 @@
1
- import { defineComponent, ref } from 'vue'
2
- import styles from './index.module.scss'
3
-
4
- /**
5
- * 对话记录组件
6
- * @description 显示陪练过程中的完整对话记录
7
- */
8
- export default defineComponent({
9
- name: 'DialogueRecord',
10
-
11
- setup() {
12
- // 对话记录数据
13
- const dialogues = ref([
14
- {
15
- question: '您好,我是XX银行的理财经理小李,请问您现在方便接听电话吗?',
16
- answer: '方便的,你说吧。',
17
- score: 85,
18
- scoreDetails: [
19
- { name: '关键词', score: 18, total: 20, tags: ['自我介绍'] },
20
- { name: '语义准确', score: 67, total: 80, tags: [] },
21
- ],
22
- suggestion: '开场白较为规范,建议语气可以更加热情一些。',
23
- },
24
- {
25
- question: '好的,王总。我看到您最近在我行有一笔定期存款即将到期,我想向您推荐一款更适合您的理财产品,不知道您是否感兴趣?',
26
- answer: '什么产品?收益怎么样?',
27
- score: 78,
28
- scoreDetails: [
29
- { name: '关键词', score: 16, total: 20, tags: ['定期存款', '理财产品'] },
30
- { name: '语义准确', score: 62, total: 80, tags: [] },
31
- ],
32
- suggestion: '产品引入比较自然,但可以先了解客户的理财需求再推荐。',
33
- },
34
- {
35
- question: '您好,速汇盈直联后我们内部系统就和你们打通了,安全性有保障吗?',
36
- answer:
37
- '王总,系统的安全性能您可以放心,我行会提供多重保障,主要是有三方面向您汇报。首先,第一是在客户端,我们会通过前置机加UK对物理数据进行一个隔离,那就像防火墙一样,保障信息的安全。二呢,是在数据端,系统会自动对企业发出的原始指令进行数据加密和加密,就跟摩斯密码一样,确保外部无法解析,但是在银行端呢,我们采用了国际上最高的安全标准,就像中国电建、上汽集团这样的国央企呢,已经和我们进行了试点。这个模式的安全性在国资委已经获得了普及...',
38
- score: 98,
39
- scoreDetails: [
40
- { name: '关键词', score: 20, total: 20, tags: ['多重保障'] },
41
- { name: '语义准确', score: 78, total: 80, tags: [] },
42
- ],
43
- suggestion: '你在对话中表现的非常好,请继续保持!',
44
- },
45
- {
46
- question: '这个产品的收益率是多少?',
47
- answer:
48
- '关于收益率,我们这款产品是浮动收益型的,近一年的年化收益率在4.5%-5.2%之间,相比市场同类产品具有较强的竞争力。而且我们有专业的投资团队进行管理,历史业绩表现稳定。',
49
- score: 95,
50
- scoreDetails: [
51
- { name: '关键词', score: 18, total: 20, tags: ['年化收益率'] },
52
- { name: '语义准确', score: 77, total: 80, tags: [] },
53
- ],
54
- suggestion: '回答准确,继续保持!',
55
- },
56
- {
57
- question: '产品的风险等级是多少?我能承受的风险有限。',
58
- answer: '这款产品的风险等级是R2级,属于中低风险产品,比较适合稳健型投资者。',
59
- score: 88,
60
- scoreDetails: [
61
- { name: '关键词', score: 18, total: 20, tags: ['风险等级', 'R2'] },
62
- { name: '语义准确', score: 70, total: 80, tags: [] },
63
- ],
64
- suggestion: '风险等级说明清楚,建议可以进一步询问客户的风险承受能力。',
65
- },
66
- {
67
- question: '购买这个产品有什么条件吗?起购金额是多少?',
68
- answer: '这个产品的起购金额是5万元,没有其他特殊条件,只要您是我行的客户就可以购买。',
69
- score: 82,
70
- scoreDetails: [
71
- { name: '关键词', score: 17, total: 20, tags: ['起购金额', '5万'] },
72
- { name: '语义准确', score: 65, total: 80, tags: [] },
73
- ],
74
- suggestion: '起购金额说明准确,可以补充说明产品的申购渠道。',
75
- },
76
- {
77
- question: '那这个产品什么时候可以赎回?有没有封闭期?',
78
- answer: '产品有3个月的封闭期,封闭期结束后可以随时赎回,赎回资金T+1到账。',
79
- score: 90,
80
- scoreDetails: [
81
- { name: '关键词', score: 19, total: 20, tags: ['封闭期', '赎回', 'T+1'] },
82
- { name: '语义准确', score: 71, total: 80, tags: [] },
83
- ],
84
- suggestion: '赎回规则说明清晰,表现优秀!',
85
- },
86
- {
87
- question: '好的,我考虑一下,可能明天给你答复。',
88
- answer: '没问题王总,您可以先考虑一下。如果有任何问题随时可以联系我,我的工号是XX,期待您的回复。',
89
- score: 92,
90
- scoreDetails: [
91
- { name: '关键词', score: 19, total: 20, tags: ['工号'] },
92
- { name: '语义准确', score: 73, total: 80, tags: [] },
93
- ],
94
- suggestion: '收尾专业得体,客户体验良好!',
95
- },
96
- ])
97
-
98
- return () => {
99
- return (
100
- <div class={styles.dialogueRecord}>
101
- <div class={styles.header}>
102
- <h3 class={styles.title}>完整对话记录</h3>
103
- <div class={styles.stats}>
104
- <span class={styles.statItem}>总轮次:{dialogues.value.length}</span>
105
- <span class={styles.statItem}>
106
- 平均得分:
107
- {Math.round(
108
- dialogues.value.reduce((sum, d) => sum + d.score, 0) /
109
- dialogues.value.length
110
- )}
111
-
112
- </span>
113
- </div>
114
- </div>
115
-
116
- <div class={styles.dialogueContainer}>
117
- <div class={styles.chatFlow}>
118
- {dialogues.value.map((dialogue, index) => (
119
- <>
120
- {/* AI提问 */}
121
- <div key={`q-${index}`} class={styles.messageLeft}>
122
- <div class={styles.messageBubble}>
123
- <span class={styles.audioIcon}>🔊</span>
124
- <span>{dialogue.question}</span>
125
- </div>
126
- </div>
127
-
128
- {/* 用户回答 */}
129
- <div key={`a-${index}`} class={styles.messageRight}>
130
- <div class={styles.messageBubble}>
131
- <div class={styles.answerContent}>{dialogue.answer}</div>
132
- <div class={styles.scoreTag}>
133
- <span class={styles.scoreValue}>{dialogue.score}分</span>
134
- </div>
135
-
136
- {/* 得分明细 */}
137
- <div class={styles.scoreCard}>
138
- <div class={styles.scoreDetails}>
139
- <div class={styles.detailsTitle}>得分明细</div>
140
- {dialogue.scoreDetails.map((detail, idx) => (
141
- <div key={idx} class={styles.detailItem}>
142
- <div class={styles.detailHeader}>
143
- <span class={styles.detailName}>{detail.name}</span>
144
- <span class={styles.detailScore}>
145
- {detail.score}/{detail.total}分
146
- </span>
147
- </div>
148
- {detail.tags && detail.tags.length > 0 && (
149
- <div class={styles.tags}>
150
- <span class={styles.tagLabel}>
151
- 关键词共{detail.tags.length}个,命中{detail.tags.length}个
152
- </span>
153
- {detail.tags.map((tag, tagIdx) => (
154
- <el-tag key={tagIdx} type="success" size="small">
155
- {tag}
156
- </el-tag>
157
- ))}
158
- </div>
159
- )}
160
- </div>
161
- ))}
162
- </div>
163
-
164
- {/* 指导建议 */}
165
- {dialogue.suggestion && (
166
- <div class={styles.suggestion}>
167
- <div class={styles.suggestionTitle}>指导建议</div>
168
- <div class={styles.suggestionContent}>{dialogue.suggestion}</div>
169
- </div>
170
- )}
171
- </div>
172
- </div>
173
- </div>
174
- </>
175
- ))}
176
- </div>
177
- </div>
178
- </div>
179
- )
180
- }
181
- },
182
- })