vue2-client 1.16.62 → 1.16.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.
@@ -7,10 +7,15 @@
7
7
  "mcp__context7__resolve-library-id",
8
8
  "mcp__context7__get-library-docs",
9
9
  "WebFetch(domain:github.com)",
10
- "Bash(npm run serve:*)"
10
+ "Bash(npm run serve:*)",
11
+ "mcp__serena__get_current_config",
12
+ "mcp__serena__activate_project",
13
+ "mcp__serena__get_symbols_overview",
14
+ "mcp__serena__list_dir",
15
+ "mcp__serena__find_file"
11
16
  ],
12
17
  "deny": [],
13
18
  "ask": [],
14
19
  "defaultMode": "acceptEdits"
15
20
  }
16
- }
21
+ }
@@ -0,0 +1,67 @@
1
+ # language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby)
2
+ # * For C, use cpp
3
+ # * For JavaScript, use typescript
4
+ # Special requirements:
5
+ # * csharp: Requires the presence of a .sln file in the project folder.
6
+ language: typescript
7
+
8
+ # whether to use the project's gitignore file to ignore files
9
+ # Added on 2025-04-07
10
+ ignore_all_files_in_gitignore: true
11
+ # list of additional paths to ignore
12
+ # same syntax as gitignore, so you can use * and **
13
+ # Was previously called `ignored_dirs`, please update your config if you are using that.
14
+ # Added (renamed) on 2025-04-07
15
+ ignored_paths: []
16
+
17
+ # whether the project is in read-only mode
18
+ # If set to true, all editing tools will be disabled and attempts to use them will result in an error
19
+ # Added on 2025-04-18
20
+ read_only: false
21
+
22
+ # list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
23
+ # Below is the complete list of tools for convenience.
24
+ # To make sure you have the latest list of tools, and to view their descriptions,
25
+ # execute `uv run scripts/print_tool_overview.py`.
26
+ #
27
+ # * `activate_project`: Activates a project by name.
28
+ # * `check_onboarding_performed`: Checks whether project onboarding was already performed.
29
+ # * `create_text_file`: Creates/overwrites a file in the project directory.
30
+ # * `delete_lines`: Deletes a range of lines within a file.
31
+ # * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
32
+ # * `execute_shell_command`: Executes a shell command.
33
+ # * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
34
+ # * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
35
+ # * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
36
+ # * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
37
+ # * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
38
+ # * `initial_instructions`: Gets the initial instructions for the current project.
39
+ # Should only be used in settings where the system prompt cannot be set,
40
+ # e.g. in clients you have no control over, like Claude Desktop.
41
+ # * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
42
+ # * `insert_at_line`: Inserts content at a given line in a file.
43
+ # * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
44
+ # * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
45
+ # * `list_memories`: Lists memories in Serena's project-specific memory store.
46
+ # * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
47
+ # * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
48
+ # * `read_file`: Reads a file within the project directory.
49
+ # * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
50
+ # * `remove_project`: Removes a project from the Serena configuration.
51
+ # * `replace_lines`: Replaces a range of lines within a file with new content.
52
+ # * `replace_symbol_body`: Replaces the full definition of a symbol.
53
+ # * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
54
+ # * `search_for_pattern`: Performs a search for a pattern in the project.
55
+ # * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
56
+ # * `switch_modes`: Activates modes by providing a list of their names
57
+ # * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
58
+ # * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
59
+ # * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
60
+ # * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
61
+ excluded_tools: []
62
+
63
+ # initial prompt for the project. It will always be given to the LLM upon activating the project
64
+ # (contrary to the memories, which are loaded on demand).
65
+ initial_prompt: ""
66
+
67
+ project_name: "vue2-client"
package/CLAUDE.md CHANGED
@@ -83,8 +83,16 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
83
83
  - 环境变量控制API端点和功能标志
84
84
 
85
85
  ### 代码风格指南(来自.cursorrules)
86
- - 尽可能使用Vue 2.7组合API和setup语法糖
87
- - 组件名使用PascalCase
88
- - 可组合函数和工具使用camelCase
86
+ - 使用Vue 2.7组合API和setup语法糖,避免选项API(除非修改现有代码)
87
+ - 目录名使用kebab-case(如components/auth-wizard)
88
+ - 组件名使用PascalCase(如AuthWizard.vue)
89
+ - 可组合函数使用camelCase(如useAuthState.js)
89
90
  - 方法和计算属性使用箭头函数
90
- - 模块化和迭代式代码,避免重复
91
+ - 避免条件语句中不必要的花括号,使用简洁语法
92
+ - 模块化和迭代式代码,避免重复
93
+
94
+ ### 重要配置说明
95
+ - **NODE_OPTIONS**: Windows环境需要设置`--openssl-legacy-provider`解决OpenSSL兼容性问题
96
+ - **Webpack别名**: 引入项目需添加别名配置:`@vue2-client` → `node_modules/vue2-client/src`
97
+ - **端口**: 开发服务器默认运行在8020端口
98
+ - **ESLint**: 开发模式默认禁用ESLint(--no-eslint),使用`npm run lint`单独执行检查
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.16.62",
3
+ "version": "1.16.64",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -1,12 +1,12 @@
1
1
  <template>
2
2
  <div class="h-tab-demo">
3
- <!-- &lt;!&ndash; XTab &ndash;&gt;-->
4
- <!-- <a-card title="XTab">-->
5
- <!-- <h-tab-->
6
- <!-- configName="openPrescriptionTab"-->
7
- <!-- serverName="af-his"-->
8
- <!-- />-->
9
- <!-- </a-card>-->
3
+ <!-- &lt;!&ndash; XTab &ndash;&gt;-->
4
+ <!-- <a-card title="XTab">-->
5
+ <!-- <h-tab-->
6
+ <!-- configName="openPrescriptionTab"-->
7
+ <!-- serverName="af-his"-->
8
+ <!-- />-->
9
+ <!-- </a-card>-->
10
10
 
11
11
  <!-- HFormTable -->
12
12
  <a-card title="HFormTable" style="margin-top: 20px;">
@@ -30,13 +30,13 @@
30
30
  <!-- :left-hide="true"-->
31
31
  <!-- />-->
32
32
  <!-- </a-card>-->
33
- <!-- &lt;!&ndash; HButtons &ndash;&gt;-->
34
- <!-- <a-card title="HButtons" style="margin-top: 20px;">-->
35
- <!-- <h-buttons-->
36
- <!-- queryParamsName="outpatientAdviceGroup"-->
37
- <!-- serviceName="af-his"-->
38
- <!-- />-->
39
- <!-- </a-card>-->
33
+ <!-- &lt;!&ndash; HButtons &ndash;&gt;-->
34
+ <!-- <a-card title="HButtons" style="margin-top: 20px;">-->
35
+ <!-- <h-buttons-->
36
+ <!-- queryParamsName="outpatientAdviceGroup"-->
37
+ <!-- serviceName="af-his"-->
38
+ <!-- />-->
39
+ <!-- </a-card>-->
40
40
  </div>
41
41
  </template>
42
42
 
@@ -48,10 +48,10 @@
48
48
  :file-list="uploadedFileList"
49
49
  :remove="deleteFileItem"
50
50
  :show-upload-list="{
51
- showRemoveIcon: !readOnly,
52
- showPreviewIcon: true,
53
- showDownloadIcon: false
54
- }"
51
+ showRemoveIcon: !readOnly,
52
+ showPreviewIcon: true,
53
+ showDownloadIcon: false
54
+ }"
55
55
  list-type="picture-card">
56
56
  <a-icon v-if="!readOnly" type="plus"/>
57
57
  <div v-if="!readOnly" class="ant-upload-text">
@@ -330,14 +330,14 @@ export default {
330
330
  })
331
331
  this.$forceUpdate()
332
332
  }
333
- // 默认展开当前页的所有面板
334
- this.activeKey = (this.config.showData || []).map((_, i) => i.toString())
335
- // 初始化关闭所有折叠面板
333
+ // 根据配置决定是否展开面板
336
334
  const shouldCollapseAll = this.config.collapseAllByDefault || false
337
335
  if (shouldCollapseAll) {
338
- setTimeout(() => {
339
- this.activeKey = [] // 关闭所有面板
340
- }, 0.00001)
336
+ // 如果配置为默认关闭,直接设置为空数组,避免展开动画
337
+ this.activeKey = []
338
+ } else {
339
+ // 默认展开当前页的所有面板
340
+ this.activeKey = (this.config.showData || []).map((_, i) => i.toString())
341
341
  }
342
342
  })
343
343
  })
@@ -429,11 +429,10 @@ export default {
429
429
  :deep(.ant-collapse-header) {
430
430
  display: flex;
431
431
  position: relative;
432
- border-bottom: v-bind('config.showLine ? "1px solid #000000" : "none"');
432
+ // border-bottom: v-bind('config.showLine ? "1px solid #000000" : "none"');
433
433
  align-items: center !important;
434
434
  background-color: #ffffff;
435
435
  padding: 12px 16px !important; /* 确保头部有足够的内边距 */
436
- min-height: 50px; /* 设置头部最小高度 */
437
436
  }
438
437
 
439
438
  :deep(.ant-collapse-header-text) {
@@ -466,7 +465,9 @@ export default {
466
465
  height: 12px;
467
466
  border-radius: 6px;
468
467
  background: #3362DA;
469
- margin: 6px;
468
+ margin-top: 15px;
469
+ margin-left: 11px;
470
+ margin-bottom: 12px;
470
471
  flex-shrink: 0;
471
472
  }
472
473
 
@@ -620,9 +621,14 @@ export default {
620
621
 
621
622
  /* 当前页码样式 */
622
623
  :deep(.ant-pagination .ant-pagination-item-active) {
623
- background: #FFFFFF;
624
+ background: #0057FE !important;
624
625
  border: 1px solid #1890ff;
625
- color: #1890ff;
626
+ color: #FFFFFF !important;
627
+ }
628
+
629
+ /* 确保选中页码文字颜色生效 */
630
+ :deep(.ant-pagination .ant-pagination-item-active a) {
631
+ color: #FFFFFF !important;
626
632
  }
627
633
 
628
634
  /* 禁用状态样式 */
@@ -642,14 +648,15 @@ export default {
642
648
  &.xcollapse-style1 {
643
649
  height: auto; /* 允许根据内容自适应高度,避免滚动被限制 */
644
650
  min-height: 600px;
645
- .blue-circle-icon { margin: 0 !important; }
646
651
  .header-text {
647
652
  font-family: "Source Han Sans";
648
653
  font-size: 16px;
649
654
  font-weight: 700;
650
- line-height: normal;
655
+ line-height: 23px;
651
656
  letter-spacing: 0em;
652
657
  color: #313131;
658
+ margin-top: 8px;
659
+ margin-bottom: 8px;
653
660
  margin-right: 0 !important;
654
661
  }
655
662
 
@@ -657,9 +664,11 @@ export default {
657
664
  font-family: "Source Han Sans";
658
665
  font-size: 16px;
659
666
  font-weight: 700;
660
- line-height: normal;
667
+ line-height: 23px;
661
668
  text-align: right;
662
669
  color: #313131;
670
+ margin-top: 9px;
671
+ margin-bottom: 7px;
663
672
  margin-left: 28.14px;
664
673
  letter-spacing: 0em
665
674
  }
@@ -668,8 +677,10 @@ export default {
668
677
  font-family: "Source Han Sans";
669
678
  font-size: 16px;
670
679
  font-weight: 400;
671
- line-height: normal;
680
+ line-height: 23px;
672
681
  text-align: right;
682
+ margin-top: 9px;
683
+ margin-bottom: 7px;
673
684
  color: #313131;
674
685
  letter-spacing: 0em;
675
686
  }
@@ -684,7 +695,7 @@ export default {
684
695
  width: 564px;
685
696
  min-height: auto;
686
697
  height: auto;
687
- margin: 3px 10px 26px 12px; // 面板之间留白
698
+ margin-bottom:10px;
688
699
  background: #FFFFFF; // 独立白底
689
700
  box-sizing: border-box;
690
701
  border: 1px solid #E5E9F0; // 每个面板自身边框
@@ -693,15 +704,18 @@ export default {
693
704
  :deep(.ant-collapse > .ant-collapse-item:first-child) { margin-top: 0; }
694
705
  :deep(.ant-collapse > .ant-collapse-item:last-child) { margin-bottom: 0; }
695
706
 
696
- :deep(.ant-collapse-content > .ant-collapse-content-box) { background: #FFFFFF; }
707
+ :deep(.ant-collapse-content > .ant-collapse-content-box) {
708
+ background: #FFFFFF;
709
+ padding: 0px !important; /* 自定义边距:上9px 右12px 下10px 左11px */
710
+ }
697
711
 
698
712
  // 表头:恢复合适的上下内边距,去掉顶部额外空白
699
713
  :deep(.ant-collapse-header) {
700
714
  background: #FFFFFF;
701
- padding: 0px 0px;
702
- align-items: center;
703
- height: 39px;
715
+ padding: 0px 0px !important;
716
+ height: 41px !important;
704
717
  border-bottom: none !important; // 移除标题处下边线,避免与外边框连为一体
718
+ border: 1px solid #E5E9F0; // 每个面板自身边框
705
719
  }
706
720
  }
707
721
  }
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <div id="xreport-hosp-demo">
3
+ <a-space style="margin-bottom: 12px;">
4
+ <a-button type="primary" @click="doInit">手动初始化</a-button>
5
+ </a-space>
6
+ <XReport
7
+ ref="reportRef"
8
+ :edit-mode="true"
9
+ :show-save-button="true"
10
+ :show-img-in-cell="false"
11
+ :use-oss-for-img="false"
12
+ server-name="af-his"
13
+ @updateImg="onUpdateImg"/>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup>
18
+ import { ref } from 'vue'
19
+ import XReport from '@vue2-client/base-client/components/common/XReport'
20
+
21
+ const reportRef = ref(null)
22
+
23
+ const payload = {
24
+ arr: [
25
+ { BQ: '病房区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
26
+ { BQ: '感染科', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
27
+ { BQ: '骨科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
28
+ { BQ: '呼吸科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
29
+ { BQ: '急症科病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 },
30
+ { BQ: '内科二病区', RY: 0, CY: 0, CW: 0, SW: 0, SS: 0, ZC: 0, ZR: 0, ZY: 0 }
31
+ ]
32
+ }
33
+
34
+ const doInit = async () => {
35
+ if (!reportRef.value || !reportRef.value.init) return
36
+ await reportRef.value.init({
37
+ configName: 'hospitalizationStatsReport',
38
+ configData: payload
39
+ })
40
+ }
41
+
42
+ const onUpdateImg = data => {
43
+ console.warn('updateImg:', data)
44
+ }
45
+ </script>
@@ -4,7 +4,7 @@
4
4
  <XReport
5
5
  ref="main"
6
6
  :use-oss-for-img="false"
7
- config-name="openPrescriptionCover"
7
+ config-name="ceshishange"
8
8
  server-name="af-his"
9
9
  :show-img-in-cell="true"
10
10
  :display-only="true"
@@ -7,7 +7,7 @@
7
7
  :key="cellIndex"
8
8
  :ref="`trGroup_${ cell.slotRef || cellIndex}`"
9
9
  @hook:mounted="(h)=>applyAllStyles(cell,cellIndex)"
10
- :span="calculateColSpan(cell)">
10
+ :span="calculateColSpan(cell, columns)">
11
11
  <div id="report_widget" v-if="isWidget">
12
12
  <!-- 插槽渲染 -->
13
13
  <template v-if="Array.isArray(cell)">
@@ -337,10 +337,24 @@ export default {
337
337
  listClick (data) {
338
338
  this.$emit('listClick', data)
339
339
  },
340
- calculateColSpan (cell) {
341
- return Array.isArray(cell)
342
- ? cell[0][0]?.colSpan * 2
343
- : (cell?.colSpan ?? cell?.def?.colSpan ?? 1) * 2
340
+ calculateColSpan (cell, columns) {
341
+ // 1. 获取当前 cell 的原始 colSpan 值
342
+ const currentColSpan = Array.isArray(cell)
343
+ ? cell[0][0]?.colSpan || 1
344
+ : (cell?.colSpan ?? cell?.def?.colSpan ?? 1)
345
+
346
+ // 2. 计算整行所有 cell 的 colSpan 总和
347
+ const totalColSpan = columns.reduce((sum, c) => {
348
+ const span = Array.isArray(c)
349
+ ? c[0][0]?.colSpan || 1
350
+ : (c?.colSpan ?? c?.def?.colSpan ?? 1)
351
+ return sum + span
352
+ }, 0)
353
+
354
+ // 3. 智能判断:总和 > 12 为新配置(24份),≤ 12 为旧配置(12份需要×2)
355
+ const multiplier = totalColSpan > 12 ? 1 : 2
356
+
357
+ return currentColSpan * multiplier
344
358
  },
345
359
  applyAllStyles (cell, cellIndex) {
346
360
  // 应用组件样式
@@ -143,4 +143,3 @@ export default {
143
143
  .info { margin-top: 16px; color: #333; }
144
144
  .info p { margin: 6px 0; }
145
145
  </style>
146
-