vue2-client 1.20.21 → 1.20.22
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/.eslintrc.js +6 -0
- package/assets/c__Users_QXLL_AppData_Roaming_Cursor_User_workspaceStorage_4fb3d7e3441d32bc6f2c7358b4188b48_images_e8c132e6dde513250d7f9721712df1f8-f1522a08-1aa0-4866-b4e5-b34cf2e21109.png +0 -0
- package/docs/HChart/351/205/215/347/275/256/346/226/207/346/241/243.md +960 -0
- package/package.json +1 -1
- package/src/base-client/components/common/XFormTable/demo.vue +37 -79
- package/src/base-client/components/common/XMarkdownSectionExtractor/README.md +201 -0
- package/src/base-client/components/common/XMarkdownSectionExtractor/XMarkdownSectionExtractor.vue +2 -2
- package/src/base-client/components/common/XMarkdownSectionExtractor/index.js +6 -6
- package/src/base-client/components/common/XMarkdownViewer/XMarkdownViewer.vue +19 -0
- package/src/base-client/components/common/XMarkdownViewer/bingli.md +67 -0
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +417 -417
- package/test/XList.markdownConfig.spec.js +36 -0
- package/vue.config.js +15 -2
- package/src/pages/WorkflowDetail/WorkFlowDemo4.vue +0 -127
package/package.json
CHANGED
|
@@ -2,51 +2,32 @@
|
|
|
2
2
|
<a-card :bordered="false">
|
|
3
3
|
<x-form-table
|
|
4
4
|
title="示例表单"
|
|
5
|
-
queryParamsName="
|
|
5
|
+
:queryParamsName="queryParamsName"
|
|
6
6
|
:fixedAddForm="fixedAddForm"
|
|
7
7
|
:externalSelectedRowKeys="selectedKeys"
|
|
8
|
-
:defaultPageSize="100"
|
|
9
|
-
:pageSizeArray="['100','200']"
|
|
10
8
|
@action="action"
|
|
11
9
|
@selectRow="selectRow"
|
|
12
10
|
@columnClick="columnClick"
|
|
13
11
|
@ceshi="ceshi"
|
|
14
|
-
@
|
|
15
|
-
|
|
12
|
+
@rowDblClick="rowDblClick"
|
|
13
|
+
:defaultPageSize="5"
|
|
14
|
+
serviceName="af-revenue"
|
|
16
15
|
ref="xFormTable"
|
|
17
16
|
:reserveSpaceForButtons="true"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<a-modal
|
|
21
|
-
v-model="formModalVisible"
|
|
22
|
-
title="工单回访"
|
|
23
|
-
:zIndex="1002"
|
|
24
|
-
width="50vw"
|
|
25
|
-
:destroy-on-close="true"
|
|
26
|
-
@cancel="formModalVisible = false"
|
|
27
|
-
@ok="ok"
|
|
28
|
-
>
|
|
29
|
-
<x-add-native-form
|
|
30
|
-
ref="xForm"
|
|
31
|
-
/>
|
|
32
|
-
</a-modal>
|
|
33
|
-
<button @click="backDealData">提交</button>
|
|
17
|
+
@addFormSubmit="addFormSubmit"
|
|
18
|
+
></x-form-table>
|
|
34
19
|
</a-card>
|
|
35
20
|
</template>
|
|
36
21
|
|
|
37
22
|
<script>
|
|
38
23
|
import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'
|
|
39
|
-
import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
|
|
40
24
|
import { microDispatch } from '@vue2-client/utils/microAppUtils'
|
|
41
|
-
import {getConfigByNameAsync, runLogic} from '@vue2-client/services/api/common'
|
|
42
|
-
|
|
43
25
|
export default {
|
|
44
26
|
name: 'Demo',
|
|
45
27
|
components: {
|
|
46
|
-
XFormTable
|
|
47
|
-
XAddNativeForm,
|
|
28
|
+
XFormTable
|
|
48
29
|
},
|
|
49
|
-
data
|
|
30
|
+
data() {
|
|
50
31
|
return {
|
|
51
32
|
// 查询配置文件名
|
|
52
33
|
queryParamsName: 'ceshiCRUD',
|
|
@@ -62,32 +43,26 @@ export default {
|
|
|
62
43
|
selectedKeys: [],
|
|
63
44
|
selected: {
|
|
64
45
|
keys: [],
|
|
65
|
-
rows: []
|
|
66
|
-
}
|
|
67
|
-
formModalVisible: false,
|
|
46
|
+
rows: []
|
|
47
|
+
}
|
|
68
48
|
}
|
|
69
49
|
},
|
|
50
|
+
|
|
70
51
|
methods: {
|
|
71
|
-
|
|
72
|
-
this.$refs.xFormTable
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
handleCustomQuery() {
|
|
53
|
+
this.$refs.xFormTable.queryTable({
|
|
54
|
+
uf_f_alias: 'XianFeng',
|
|
55
|
+
uf_f_card_id: '10500030'
|
|
75
56
|
})
|
|
76
57
|
},
|
|
58
|
+
rowDblClick(record) {
|
|
59
|
+
console.log('rowDblClick', record)
|
|
60
|
+
},
|
|
77
61
|
// input框 行編輯參數傳遞
|
|
78
|
-
ceshi
|
|
62
|
+
ceshi(...args) {
|
|
79
63
|
// attr, value, currentRecord, currentIndex, nextRecord, nextIndex
|
|
80
|
-
const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] =
|
|
81
|
-
|
|
82
|
-
console.log(
|
|
83
|
-
'ceshi',
|
|
84
|
-
attr,
|
|
85
|
-
value,
|
|
86
|
-
currentRecord,
|
|
87
|
-
currentIndex,
|
|
88
|
-
nextRecord,
|
|
89
|
-
nextIndex
|
|
90
|
-
)
|
|
64
|
+
const [attr, value, currentRecord, currentIndex, nextRecord, nextIndex] = args
|
|
65
|
+
console.log('ceshi', attr, value, currentRecord, currentIndex, nextRecord, nextIndex)
|
|
91
66
|
// 示例:当按下 Enter 键且有下一行时,跳转到下一行的同一列
|
|
92
67
|
// 可以在这里执行业务逻辑(例如:保存数据)
|
|
93
68
|
console.log('当前行:', currentIndex, '下一行:', nextIndex)
|
|
@@ -98,61 +73,44 @@ export default {
|
|
|
98
73
|
// 跳转到下一行的同一列
|
|
99
74
|
this.$refs.xFormTable.$refs.xTable.focusInput(nextIndex, attr.model)
|
|
100
75
|
},
|
|
101
|
-
test
|
|
76
|
+
test() {
|
|
102
77
|
this.$refs.xFormTable.setTableData([])
|
|
103
78
|
},
|
|
104
|
-
defaultF
|
|
79
|
+
defaultF() {
|
|
105
80
|
this.$refs.xFormTable.setTableSize('default')
|
|
106
81
|
},
|
|
107
|
-
middleF
|
|
82
|
+
middleF() {
|
|
108
83
|
this.$refs.xFormTable.setTableSize('middle')
|
|
109
84
|
},
|
|
110
|
-
smallF
|
|
85
|
+
smallF() {
|
|
111
86
|
this.$refs.xFormTable.setTableSize('small')
|
|
112
87
|
},
|
|
113
|
-
columnClick
|
|
88
|
+
columnClick(key, value, record) {
|
|
114
89
|
microDispatch({
|
|
115
90
|
type: 'v3route',
|
|
116
91
|
path: '/bingliguanli/dianzibingliluru',
|
|
117
|
-
props: { selected: arguments[0].his_f_admission_id }
|
|
92
|
+
props: { selected: arguments[0].his_f_admission_id }
|
|
118
93
|
})
|
|
119
94
|
},
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.$nextTick(
|
|
124
|
-
() => {
|
|
125
|
-
this.formModalVisible = true
|
|
126
|
-
this.$refs.xForm.init({
|
|
127
|
-
formItems: config.formJson,
|
|
128
|
-
title: '工单回访',
|
|
129
|
-
businessType: '新增',
|
|
130
|
-
...config,
|
|
131
|
-
modifyModelData: { data: { id: 1 } },
|
|
132
|
-
})
|
|
133
|
-
})
|
|
134
|
-
})
|
|
135
|
-
// this.detailVisible = true
|
|
136
|
-
// console.log('触发了详情操作', record, id, actionType)
|
|
137
|
-
},
|
|
138
|
-
async ok () {
|
|
139
|
-
const res = await this.$refs.xForm.asyncSubmit()
|
|
140
|
-
await runLogic('ceshwewei', res.realForm)
|
|
95
|
+
action(record, id, actionType) {
|
|
96
|
+
this.detailVisible = true
|
|
97
|
+
console.log('触发了详情操作', record, id, actionType)
|
|
141
98
|
},
|
|
142
|
-
onClose
|
|
99
|
+
onClose() {
|
|
143
100
|
this.detailVisible = false
|
|
144
101
|
// 关闭详情之后重新查询表单
|
|
145
102
|
this.$refs.xFormTable.refreshTable(true)
|
|
146
103
|
},
|
|
147
|
-
selectRow
|
|
104
|
+
selectRow(selectedRowKeys, selectedRows) {
|
|
148
105
|
this.selected = {
|
|
149
106
|
keys: selectedRowKeys,
|
|
150
|
-
rows: selectedRows
|
|
107
|
+
rows: selectedRows
|
|
151
108
|
}
|
|
152
|
-
console.log('selectedDemo', this.selected)
|
|
153
109
|
},
|
|
154
|
-
|
|
155
|
-
|
|
110
|
+
addFormSubmit(params, callback){
|
|
111
|
+
callback()
|
|
112
|
+
}
|
|
113
|
+
}
|
|
156
114
|
}
|
|
157
115
|
</script>
|
|
158
116
|
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# XMarkdownSectionExtractor 组件
|
|
2
|
+
|
|
3
|
+
从 markdown 文档中抽取指定区块的内容,并可转换为不同组件需要的格式。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- 支持多种 markdown 源(字符串、import、File/Blob、URL)
|
|
8
|
+
- 按配置的关键字/标题级别抽取区块
|
|
9
|
+
- 支持多种输出格式(默认、xlist-default、xlist-card)
|
|
10
|
+
- 可配置字段映射
|
|
11
|
+
|
|
12
|
+
## 安装引入
|
|
13
|
+
|
|
14
|
+
```javascript
|
|
15
|
+
import XMarkdownSectionExtractor from '@vue2-client/base-client/components/common/XMarkdownSectionExtractor'
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## 基本用法
|
|
19
|
+
|
|
20
|
+
### 1. 获取原始 sections 数据
|
|
21
|
+
|
|
22
|
+
```vue
|
|
23
|
+
<XMarkdownSectionExtractor
|
|
24
|
+
:source="markdownSource"
|
|
25
|
+
:sectionsConfig="[{ key: 'suggestion', label: '建议', headingLevel: 3 }]"
|
|
26
|
+
v-slot="{ sections, itemsByKey }"
|
|
27
|
+
>
|
|
28
|
+
<div v-for="sec in sections">
|
|
29
|
+
<h3>{{ sec.label }}</h3>
|
|
30
|
+
<ul>
|
|
31
|
+
<li v-for="item in sec.items">{{ item.name }}</li>
|
|
32
|
+
</ul>
|
|
33
|
+
</div>
|
|
34
|
+
</XMarkdownSectionExtractor>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. 转换为 XList 默认模式
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<XMarkdownSectionExtractor
|
|
41
|
+
:source="markdownSource"
|
|
42
|
+
:sectionsConfig="sectionsConfig"
|
|
43
|
+
outputFormat="xlist-default"
|
|
44
|
+
v-slot="{ formattedData }"
|
|
45
|
+
>
|
|
46
|
+
<XList :initialData="formattedData" />
|
|
47
|
+
</XMarkdownSectionExtractor>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3. 转换为 XList 卡片模式
|
|
51
|
+
|
|
52
|
+
```vue
|
|
53
|
+
<XMarkdownSectionExtractor
|
|
54
|
+
:source="markdownSource"
|
|
55
|
+
:sectionsConfig="sectionsConfig"
|
|
56
|
+
outputFormat="xlist-card"
|
|
57
|
+
v-slot="{ formattedData }"
|
|
58
|
+
>
|
|
59
|
+
<XList :initialData="formattedData" listMode="card" />
|
|
60
|
+
</XMarkdownSectionExtractor>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. 自定义字段映射
|
|
64
|
+
|
|
65
|
+
```vue
|
|
66
|
+
<XMarkdownSectionExtractor
|
|
67
|
+
:source="markdownSource"
|
|
68
|
+
:sectionsConfig="sectionsConfig"
|
|
69
|
+
outputFormat="xlist-default"
|
|
70
|
+
:outputOptions="{ numberField: 'id', nameField: 'title' }"
|
|
71
|
+
v-slot="{ formattedData }"
|
|
72
|
+
>
|
|
73
|
+
<XList :initialData="formattedData" />
|
|
74
|
+
</XMarkdownSectionExtractor>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 5. 手动触发抽取
|
|
78
|
+
|
|
79
|
+
```vue
|
|
80
|
+
<XMarkdownSectionExtractor
|
|
81
|
+
:source="markdownSource"
|
|
82
|
+
:sectionsConfig="sectionsConfig"
|
|
83
|
+
:autoExtract="false"
|
|
84
|
+
ref="extractor"
|
|
85
|
+
/>
|
|
86
|
+
|
|
87
|
+
// 手动调用
|
|
88
|
+
this.$refs.extractor.extract().then(sections => {
|
|
89
|
+
console.log('抽取结果:', sections)
|
|
90
|
+
})
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Props
|
|
94
|
+
|
|
95
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
96
|
+
|------|------|--------|------|
|
|
97
|
+
| source | String/Object | - | markdown 源,支持字符串、import、File/Blob、URL |
|
|
98
|
+
| sectionsConfig | Array | [] | 区块配置数组 |
|
|
99
|
+
| autoExtract | Boolean | true | 是否在 mounted 时自动抽取 |
|
|
100
|
+
| outputFormat | String | 'default' | 输出格式:default / xlist-default / xlist-card |
|
|
101
|
+
| outputOptions | Object | {} | 字段映射选项 |
|
|
102
|
+
|
|
103
|
+
### sectionsConfig 配置说明
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
key: 'nextStepSuggestion', // 唯一标识
|
|
109
|
+
label: '下一步建议', // 标题关键字
|
|
110
|
+
headingLevel: 3 // 标题级别(1-6)
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### outputOptions 配置说明
|
|
116
|
+
|
|
117
|
+
```javascript
|
|
118
|
+
// xlist-default 模式
|
|
119
|
+
{ numberField: 'number', nameField: 'name' }
|
|
120
|
+
|
|
121
|
+
// xlist-card 模式
|
|
122
|
+
{ labelField: 'label', valueField: 'name' }
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Slots
|
|
126
|
+
|
|
127
|
+
| 名称 | 说明 |
|
|
128
|
+
|---------|-------------|
|
|
129
|
+
| default | 默认插槽,暴露以下数据 |
|
|
130
|
+
|
|
131
|
+
### 插槽暴露的数据
|
|
132
|
+
|
|
133
|
+
| 变量 | 类型 | 说明 |
|
|
134
|
+
|---------------|---------|--------------------------|
|
|
135
|
+
| sections | Array | 原始抽取结果数组 |
|
|
136
|
+
| itemsArray | Array | 打平的一维条目数组 |
|
|
137
|
+
| itemsByKey | Object | 按 key 分组的条目对象 |
|
|
138
|
+
| formattedData | Array | 格式化后的数据(根据 outputFormat) |
|
|
139
|
+
| loading | Boolean | 加载状态 |
|
|
140
|
+
| error | Error | 错误信息 |
|
|
141
|
+
|
|
142
|
+
## Events
|
|
143
|
+
|
|
144
|
+
| 事件名 | 参数 | 说明 |
|
|
145
|
+
|------------------------|-----------------|------------|
|
|
146
|
+
| extracted | (sections) | 抽取完成时触发 |
|
|
147
|
+
| extracted-items | (itemsArray) | 条目数组抽取完成 |
|
|
148
|
+
| extracted-items-by-key | (itemsByKey) | 按 key 分组完成 |
|
|
149
|
+
| formatted-data | (formattedData) | 格式化数据完成 |
|
|
150
|
+
| error | (error) | 发生错误时触发 |
|
|
151
|
+
|
|
152
|
+
## 输出格式说明
|
|
153
|
+
|
|
154
|
+
### default(默认格式)
|
|
155
|
+
|
|
156
|
+
返回原始 sections 数组:
|
|
157
|
+
|
|
158
|
+
```jsons
|
|
159
|
+
[
|
|
160
|
+
{
|
|
161
|
+
"key": "nextStepSuggestion",
|
|
162
|
+
"label": "下一步建议",
|
|
163
|
+
"content": "...",
|
|
164
|
+
"items": [
|
|
165
|
+
{ "id": 1, "name": "头颅MRI + MRV" },
|
|
166
|
+
{ "id": 2, "name": "血液学检验" }
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### xlist-default 格式
|
|
173
|
+
|
|
174
|
+
适用于 XList 默认模式:
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
[
|
|
178
|
+
{ "number": 1, "name": "头颅MRI + MRV" },
|
|
179
|
+
{ "number": 2, "name": "血液学检验" }
|
|
180
|
+
]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### xlist-card 格式
|
|
184
|
+
|
|
185
|
+
适用于 XList 卡片模式(二维数组):
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
[
|
|
189
|
+
[
|
|
190
|
+
{ "label": "下一步建议", "value": "下一步建议", "type": "title", "bold": true },
|
|
191
|
+
{ "label": "", "value": "头颅MRI + MRV", "type": "text" },
|
|
192
|
+
{ "label": "", "value": "血液学检验", "type": "text" }
|
|
193
|
+
]
|
|
194
|
+
]
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## 区块抽取规则
|
|
198
|
+
|
|
199
|
+
- 按配置的 `label`(关键字)在 markdown 中查找对应标题
|
|
200
|
+
- 抽取范围:从标题下方到下一个同级或更高等级标题之前的内容
|
|
201
|
+
- 支持自定义正则匹配:`labelPattern: /^建议$/`
|
package/src/base-client/components/common/XMarkdownSectionExtractor/XMarkdownSectionExtractor.vue
CHANGED
|
@@ -75,8 +75,8 @@ export default {
|
|
|
75
75
|
* 可选值:
|
|
76
76
|
* - 'default': 返回原始 sections 数组
|
|
77
77
|
* - 'xlist-default': 返回 XList 默认模式格式 [{ number, name }, ...]
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
* - 'xlist-card': 返回 XList 卡片模式格式二维数组
|
|
79
|
+
*/
|
|
80
80
|
outputFormat: {
|
|
81
81
|
type: String,
|
|
82
82
|
default: 'default',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import XMarkdownSectionExtractor from './XMarkdownSectionExtractor'
|
|
2
|
-
|
|
3
|
-
export default XMarkdownSectionExtractor
|
|
4
|
-
|
|
5
|
-
export * from './markdownSectionExtractor'
|
|
6
|
-
|
|
1
|
+
import XMarkdownSectionExtractor from './XMarkdownSectionExtractor'
|
|
2
|
+
|
|
3
|
+
export default XMarkdownSectionExtractor
|
|
4
|
+
|
|
5
|
+
export * from './markdownSectionExtractor'
|
|
6
|
+
|
|
@@ -160,6 +160,25 @@ export default {
|
|
|
160
160
|
this.internalMarkdown = text
|
|
161
161
|
return text
|
|
162
162
|
},
|
|
163
|
+
/**
|
|
164
|
+
* 接收字符串格式的 markdown 内容进行渲染。
|
|
165
|
+
*
|
|
166
|
+
* 用法示例:
|
|
167
|
+
* - this.$refs.viewer.receiveMarkdownString('# Hello\n\n这是 markdown 内容')
|
|
168
|
+
*
|
|
169
|
+
* @param {string} markdownText - markdown 字符串内容
|
|
170
|
+
* @returns {string} 返回传入的字符串
|
|
171
|
+
*/
|
|
172
|
+
receiveMarkdownString (markdownText) {
|
|
173
|
+
if (typeof markdownText !== 'string') {
|
|
174
|
+
// eslint-disable-next-line no-console
|
|
175
|
+
console.warn('[XMarkdownViewer] receiveMarkdownString 期望接收字符串,但收到:', markdownText)
|
|
176
|
+
this.internalMarkdown = ''
|
|
177
|
+
return ''
|
|
178
|
+
}
|
|
179
|
+
this.internalMarkdown = markdownText
|
|
180
|
+
return markdownText
|
|
181
|
+
},
|
|
163
182
|
/**
|
|
164
183
|
* receiveMarkdown 的别名:语义更明确
|
|
165
184
|
*/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
根据提供的病历信息,该患者存在两个阶段的头痛表现,需分别分析。
|
|
2
|
+
|
|
3
|
+
### 一、既往头痛特点(2年余)
|
|
4
|
+
- **特征**:反复左侧额部搏动性疼痛,持续12小时至3天,每月1-2次,VAS 8分。
|
|
5
|
+
- **伴随症状**:畏光、畏声,严重时伴恶心、呕吐。
|
|
6
|
+
- **加重因素**:日常活动、吹风、受凉、压力大。
|
|
7
|
+
- **缓解因素**:休息或布洛芬。
|
|
8
|
+
- **影像学检查正常**。
|
|
9
|
+
|
|
10
|
+
此符合**无先兆偏头痛**的典型表现。根据国际头痛协会(ICHD-Ⅲ)标准,发作至少5次,持续4-72小时,具单侧、搏动性、中重度、活动加重及伴恶心/畏光畏声等特点,且排除其他病因。
|
|
11
|
+
|
|
12
|
+
### 二、本次急性加重表现(1天)
|
|
13
|
+
- **性质改变**:由偏侧搏动性转为**全头胀痛**,VAS 10分。
|
|
14
|
+
- **体位相关性**:**平躺时加重,站立时减轻**。
|
|
15
|
+
- **咳嗽时加重**。
|
|
16
|
+
- **治疗无效**:布洛芬无效。
|
|
17
|
+
- **新发症状**:恶心、呕吐、**视物模糊**。
|
|
18
|
+
- **查体发现**:**双侧视乳头水肿**、颈强3指。
|
|
19
|
+
|
|
20
|
+
这些特征强烈提示**颅内压增高**。
|
|
21
|
+
|
|
22
|
+
尤其关键点是:
|
|
23
|
+
- **体位性头痛**(平躺加重、站立减轻)是**低颅压性头痛**的典型表现,但此处与之相反。
|
|
24
|
+
- 本例为**平躺加重、站立减轻**,提示**高颅压**,且咳嗽加重也符合颅内压增高时颅内压进一步升高的表现。
|
|
25
|
+
- **双侧视乳头水肿**是颅内压增高的客观体征。
|
|
26
|
+
- 颈强但克氏征、布氏征阴性,提示非典型脑膜炎。
|
|
27
|
+
|
|
28
|
+
结合以上,**最可能的诊断是颅内压增高**,病因需进一步排查。
|
|
29
|
+
|
|
30
|
+
### 初步诊断
|
|
31
|
+
1. **颅内压增高(疑诊)**
|
|
32
|
+
2. **无先兆偏头痛**
|
|
33
|
+
|
|
34
|
+
### 需重点鉴别的诊断
|
|
35
|
+
- **特发性颅内压增高(假性脑瘤)**:多见于**肥胖育龄女性**,表现为头痛、视乳头水肿、视力障碍,脑脊液压力升高但成分正常。该患者2个月前停经,需排除妊娠。
|
|
36
|
+
- **颅内占位性病变**(如肿瘤、血肿):需影像学排除。
|
|
37
|
+
- **静脉窦血栓**:头痛为持续性、进行性,可伴视乳头水肿、癫痫、局灶体征。**87.1%的患者以头痛为首发症状**,且**多为持续性、进展性**,部分为**单侧且严重** ^[4]^。
|
|
38
|
+
- **蛛网膜下腔出血**:突发“雷击样”头痛,但本例为渐进加重,不支持。
|
|
39
|
+
|
|
40
|
+
### 下一步建议
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{"type":"x-list","configName":"markdownJsonTestConfig","data":[{"id":1,"name":"头颅MRI + MRV(磁共振静脉成像)"},{"id":2,"name":"血液学检验:凝血功能、感染指标、激素水平"},{"id":3,"name":"妇产科会诊:明确有无妊娠"},{"id":4,"name":"必要时腰椎穿刺"}]}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
1. **尽快完善头颅影像学检查**:
|
|
47
|
+
- **头颅MRI + MRV(磁共振静脉成像)**:排除静脉窦血栓、占位性病变。
|
|
48
|
+
- 若怀疑占位,增强扫描必要。
|
|
49
|
+
2. **血液学检验**:包括凝血功能、感染指标、激素水平等。
|
|
50
|
+
3. **妇产科会诊**:明确有无妊娠,因停经2个月。
|
|
51
|
+
4. **必要时腰椎穿刺**:
|
|
52
|
+
- 测量脑脊液压力,若>250 mmH₂O支持颅内压增高。
|
|
53
|
+
- 脑脊液成分正常则支持**特发性颅内压增高**。
|
|
54
|
+
- **但若怀疑占位,需先排除占位后再行腰穿,以防脑疝**。
|
|
55
|
+
|
|
56
|
+
### 治疗建议
|
|
57
|
+
- **建议住院治疗**,密切监测神经系统状态。
|
|
58
|
+
- **对症处理**:可使用脱水剂(如甘露醇)降低颅内压。
|
|
59
|
+
- **根本治疗**取决于病因:
|
|
60
|
+
- 若为**特发性颅内压增高**,治疗包括**减重、限盐、乙酰唑胺**等。
|
|
61
|
+
- 若为**静脉窦血栓**,需抗凝治疗。
|
|
62
|
+
- 若为**占位性病变**,需神经外科干预。
|
|
63
|
+
|
|
64
|
+
### 总结
|
|
65
|
+
患者既往符合**无先兆偏头痛**,但本次发作性质显著不同,结合**体位性头痛、视乳头水肿、颈强**,提示**颅内压增高**。**首要任务是排除器质性病因**,如颅内占位、静脉窦血栓等。**尽快完善头颅MRI及MRV,并评估妊娠状态**。
|
|
66
|
+
|
|
67
|
+
我建议您进一步查阅特发性颅内压增高在育龄女性中的诊断标准及颅内静脉窦血栓的影像学鉴别要点,您需要我帮您检索相关临床指南或系统综述吗?
|