vue2-client 1.14.67 → 1.14.68

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 (59) hide show
  1. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  2. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  3. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  4. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  5. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  6. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  7. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  8. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  9. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  10. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  11. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  12. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  13. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  14. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  15. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  16. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  17. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  18. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  19. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  20. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  21. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  22. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  23. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  24. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  25. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  26. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  27. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  28. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  29. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  30. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  31. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  32. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  33. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  34. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  35. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  36. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  37. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  38. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  39. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  40. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  41. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  42. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  43. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  44. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +1 -0
  45. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +2 -1
  46. package/package.json +1 -1
  47. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  48. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  49. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  50. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  51. package/src/base-client/components/his/XList/XList.vue +155 -22
  52. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  53. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  54. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  55. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  56. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +62 -1
  57. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +1 -1
  58. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  59. package/src/router/async/router.map.js +2 -2
@@ -1,28 +1,55 @@
1
1
  <template>
2
2
  <div class="list-wrapper">
3
3
  <a-list size="large" :data-source="data" itemLayout="horizontal" class="list-container" ref="listRef">
4
- <a-list-item slot="renderItem" slot-scope="item, index" class="list-item" @click="handleClick(index)">
5
- <i
6
- v-if="icon"
7
- class="icon-menu"
8
- :style="getIconStyle(item)"
9
- ></i>
10
- <span
11
- class="item-text">
12
- {{ item.number }} {{ item.name }}
13
- </span>
14
-
15
- <div v-if="button" class="button-group">
16
- <a-button
17
- v-for="(name, idx) in buttonNames"
18
- :key="idx"
19
- type="link"
20
- :class="['confirm-btn', buttonMode ? 'hover-btn' : '']"
21
- @click.stop="click(index, idx)"
4
+ <a-list-item
5
+ slot="renderItem"
6
+ slot-scope="item, index"
7
+ class="list-item"
8
+ @click="handleClick(index)"
9
+ @mouseenter="enableHoverOptions && handleMouseEnter(index)"
10
+ @mouseleave="handleMouseLeave"
11
+ :class="{ 'hover-active': enableHoverOptions && hoveredIndex === index }"
12
+ >
13
+ <i
14
+ v-if="icon"
15
+ class="icon-menu"
16
+ :style="getIconStyle(item)"
17
+ ></i>
18
+ <span
19
+ class="item-text">
20
+ {{ item.number }} {{ item.name }}
21
+ </span>
22
+
23
+ <div v-if="button" class="button-group">
24
+ <a-button
25
+ v-for="(name, idx) in buttonNames"
26
+ :key="idx"
27
+ type="link"
28
+ :class="['confirm-btn', buttonMode ? 'hover-btn' : '']"
29
+ @click.stop="click(index, idx)"
30
+ >
31
+ <span :class="{ 'hover-active': enableHoverOptions && hoveredIndex === index }">{{ name }}</span>
32
+ </a-button>
33
+ </div>
34
+
35
+ <!-- 悬浮选项框 -->
36
+ <div
37
+ v-show="enableHoverOptions && hoveredIndex === index"
38
+ class="hover-options"
39
+ @mouseenter="handleOptionsEnter"
40
+ @mouseleave="handleOptionsLeave"
22
41
  >
23
- {{ name }}
24
- </a-button>
25
- </div>
42
+ <div class="hover-options-content">
43
+ <div
44
+ v-for="(item, idx) in select_options"
45
+ :key="idx"
46
+ class="option-item"
47
+ @click="handleOptionClick(index, item)"
48
+ >
49
+ {{ item }}
50
+ </div>
51
+ </div>
52
+ </div>
26
53
  </a-list-item>
27
54
  </a-list>
28
55
  </div>
@@ -42,6 +69,10 @@ export default {
42
69
  fixedQueryForm: {
43
70
  type: Object,
44
71
  default: { condition: '1=1' }
72
+ },
73
+ enableHoverOptions: {
74
+ type: Boolean,
75
+ default: true
45
76
  }
46
77
  },
47
78
  inject: ['getComponentByName'],
@@ -51,7 +82,12 @@ export default {
51
82
  button: false,
52
83
  icon: false,
53
84
  buttonNames: [],
54
- buttonMode: false
85
+ buttonMode: false,
86
+ hoveredIndex: -1,
87
+ isOptionsHovered: false,
88
+ hoverTimer: null,
89
+ leaveTimer: null,
90
+ select_options: []
55
91
  }
56
92
  },
57
93
  created () {
@@ -65,6 +101,10 @@ export default {
65
101
  that.icon = res.icon
66
102
  that.buttonNames = res.buttonNames || []
67
103
  that.buttonMode = res.buttonMode || false
104
+ this.enableHoverOptions = res.enableHoverOptions || false
105
+ if (this.enableHoverOptions) {
106
+ this.select_options = res.select_options
107
+ }
68
108
  runLogic(res.data, param, 'af-his').then(ress => {
69
109
  that.data = ress
70
110
  })
@@ -88,6 +128,42 @@ export default {
88
128
  runLogic(this.queryParamsName, par, 'af-his').then(res => {
89
129
  this.data = res.data
90
130
  })
131
+ },
132
+ handleMouseEnter (index) {
133
+ this.clearAllTimers()
134
+ this.hoveredIndex = index
135
+ this.isOptionsHovered = true
136
+ },
137
+ handleMouseLeave () {
138
+ this.clearAllTimers()
139
+ this.leaveTimer = setTimeout(() => {
140
+ this.isOptionsHovered = false
141
+ this.hoveredIndex = -1
142
+ }, 100)
143
+ },
144
+ handleOptionsEnter () {
145
+ this.clearAllTimers()
146
+ this.isOptionsHovered = true
147
+ },
148
+ handleOptionsLeave () {
149
+ this.clearAllTimers()
150
+ this.leaveTimer = setTimeout(() => {
151
+ this.isOptionsHovered = false
152
+ this.hoveredIndex = -1
153
+ }, 100)
154
+ },
155
+ clearAllTimers () {
156
+ if (this.hoverTimer) {
157
+ clearTimeout(this.hoverTimer)
158
+ this.hoverTimer = null
159
+ }
160
+ if (this.leaveTimer) {
161
+ clearTimeout(this.leaveTimer)
162
+ this.leaveTimer = null
163
+ }
164
+ },
165
+ handleOptionClick (index, action) {
166
+ this.$emit('optionClick', { data: this.data[index], action })
91
167
  }
92
168
  },
93
169
  watch: {
@@ -97,6 +173,9 @@ export default {
97
173
  this.refreshList(val)
98
174
  }
99
175
  }
176
+ },
177
+ beforeDestroy () {
178
+ this.clearAllTimers()
100
179
  }
101
180
  }
102
181
  </script>
@@ -124,6 +203,8 @@ export default {
124
203
  border: 1px solid #D9D9D9;
125
204
  box-sizing: border-box;
126
205
  margin-bottom: 8px !important;
206
+ position: relative;
207
+ transition: background-color 0.3s ease;
127
208
  }
128
209
 
129
210
  .icon-menu {
@@ -170,4 +251,56 @@ export default {
170
251
  .list-wrapper::-webkit-scrollbar-track {
171
252
  background-color: #f0f0f0;
172
253
  }
254
+
255
+ .hover-active {
256
+ color: white;
257
+ }
258
+
259
+ .list-item.hover-active {
260
+ background-color: rgb(0, 87, 254) !important;
261
+ color: white;
262
+ border: 1px solid black;
263
+ }
264
+
265
+ .hover-options {
266
+ position: absolute;
267
+ left: 0;
268
+ right: 0;
269
+ top: 100%;
270
+ background: white;
271
+ border: 1px solid #d9d9d9;
272
+ border-radius: 4px;
273
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
274
+ z-index: 1000;
275
+ margin-top: 4px;
276
+ width: 100%;
277
+ box-sizing: border-box;
278
+ pointer-events: auto;
279
+ }
280
+
281
+ .hover-options-content {
282
+ padding: 4px 0;
283
+ display: flex;
284
+ flex-direction: column;
285
+ width: 100%;
286
+ }
287
+
288
+ .option-item {
289
+ padding: 8px 12px;
290
+ cursor: pointer;
291
+ transition: all 0.3s ease;
292
+ color: #333;
293
+ font-size: 14px;
294
+ display: flex;
295
+ align-items: center;
296
+ }
297
+
298
+ .option-item:hover {
299
+ background-color: #f5f5f5;
300
+ color: #1890ff;
301
+ }
302
+
303
+ .option-item:active {
304
+ background-color: #e6f7ff;
305
+ }
173
306
  </style>
@@ -1,207 +1,207 @@
1
- <template>
2
- <div>
3
- <div class="text-card">
4
- <div
5
- v-for="(item, index) in displayItems"
6
- :key="index"
7
- class="text-item"
8
- @click="handleItemClick(index, item.id)"
9
- @contextmenu.prevent="handleContextMenu(index, item.id)">
10
- <div class="text-content" :class="{ 'is-empty': !item.content }">
11
- {{ item.content || '+' }}
12
- </div>
13
- </div>
14
- <!-- 编辑弹出框 -->
15
- <div
16
- v-if="showEdit"
17
- class="edit-overlay"
18
- @click.self="handleOverlayClick">
19
- <div class="edit-card">
20
- <a-textarea
21
- v-model="editingContent"
22
- :autoSize="{ minRows: 3 }"
23
- @keyup.enter="handleSave"
24
- ref="textarea"/>
25
- </div>
26
- </div>
27
- <!-- 删除确认弹框 -->
28
- <a-modal
29
- v-model="showDeleteModal"
30
- title="确认删除"
31
- okText="确认"
32
- cancelText="取消"
33
- @ok="handleDeleteConfirm">
34
- <p>确定要删除这条内容吗?</p>
35
- </a-modal>
36
- </div>
37
- </div>
38
- </template>
39
-
40
- <script>
41
- import { runLogic } from '@vue2-client/services/api/common'
42
-
43
- export default {
44
- name: 'XTextCard',
45
- props: {
46
- // logic配置名,要求返回一个数组[{ id: , content: }]
47
- queryParamsName: {
48
- type: String,
49
- default: 'memorandumLOGIC'
50
- },
51
- queryParams: {
52
- type: Object,
53
- default: () => { return {} }
54
- },
55
- // 请求参数
56
- parameter: {
57
- type: Object,
58
- default: () => { return {} }
59
- }
60
- },
61
- data () {
62
- return {
63
- localItems: [], // 本地数据
64
- showEdit: false, // 是否显示编辑框
65
- editingIndex: -1, // 当前编辑的索引
66
- editingContent: '', // 编辑框的内容
67
- showDeleteModal: false, // 是否显示删除确认框
68
- deleteIndex: -1, // 要删除的项目索引
69
- ID: 0
70
- }
71
- },
72
- computed: {
73
- // 显示的列表,始终保持一个空行
74
- displayItems () {
75
- const items = [...this.localItems]
76
- // 如果最后一项不是空的,添加一个空项
77
- if (!items.length || items[items.length - 1].content) {
78
- items.push({ content: '' })
79
- }
80
- return items
81
- }
82
- },
83
- methods: {
84
- // 点击项目
85
- handleItemClick (index, id) {
86
- this.ID = id
87
- this.editingIndex = index
88
- this.editingContent = this.displayItems[index].content
89
- this.showEdit = true
90
- this.$nextTick(() => {
91
- this.$refs.textarea?.focus()
92
- })
93
- },
94
- // 点击遮罩层保存
95
- handleOverlayClick () {
96
- this.handleSave()
97
- },
98
- // 保存内容
99
- handleSave () {
100
- if (this.editingContent.trim()) {
101
- if (this.editingIndex === this.localItems.length) {
102
- // 如果是在最后一个空行添加,push新内容
103
- this.localItems.push({ content: this.editingContent.trim() })
104
- } else {
105
- // 否则更新现有内容
106
- this.localItems[this.editingIndex].content = this.editingContent.trim()
107
- }
108
- const addData = { data: this.editingContent.trim(), ID: this.ID }
109
- // 触发更新事件
110
- this.$emit('add', addData)
111
- }
112
- this.showEdit = false
113
- this.editingIndex = -1
114
- this.editingContent = ''
115
- },
116
- // 初始化数据
117
- async initData (data, parameter) {
118
- // 从配置中获取数据
119
- const resData = await runLogic(data, parameter, 'af-his')
120
- this.localItems = resData
121
- return resData
122
- },
123
- // 处理右键菜单
124
- handleContextMenu (index, id) {
125
- // 如果是最后一个空行,不显示删除框
126
- if (index === this.localItems.length) {
127
- return
128
- }
129
- this.ID = id
130
- this.deleteIndex = index
131
- this.showDeleteModal = true
132
- },
133
- // 确认删除
134
- handleDeleteConfirm () {
135
- if (this.deleteIndex > -1) {
136
- this.localItems.splice(this.deleteIndex, 1)
137
- const deleteData = { data: [...this.localItems][this.deleteIndex], ID: this.ID }
138
- this.$emit('deleteData', deleteData)
139
- this.deleteIndex = -1
140
- }
141
- this.showDeleteModal = false
142
- }
143
- },
144
- watch: {
145
- queryParamsName: {
146
- immediate: true,
147
- handler (newVal) {
148
- this.initData(newVal, this.parameter)
149
- },
150
- deep: true
151
- }
152
- }
153
- }
154
- </script>
155
-
156
- <style scoped lang="less">
157
- .text-card {
158
- position: relative;
159
- width: 100%;
160
- .text-item {
161
- padding: 8px 12px;
162
- border-bottom: 1px solid #f0f0f0;
163
- cursor: pointer;
164
- transition: all 0.3s;
165
- user-select: none;
166
-
167
- &:hover {
168
- background-color: #f5f5f5;
169
- }
170
-
171
- .text-content {
172
- white-space: nowrap;
173
- overflow: hidden;
174
- text-overflow: ellipsis;
175
- line-height: 1.5;
176
-
177
- &.is-empty {
178
- color: #5D5C5C;
179
- font-weight: 400;
180
- }
181
- }
182
- }
183
- .edit-overlay {
184
- position: fixed;
185
- top: 0;
186
- left: 0;
187
- right: 0;
188
- bottom: 0;
189
- background-color: rgba(0, 0, 0, 0.45);
190
- z-index: 1000;
191
- display: flex;
192
- align-items: center;
193
- justify-content: center;
194
- .edit-card {
195
- background: white;
196
- padding: 16px;
197
- border-radius: 8px;
198
- width: 90%;
199
- max-width: 500px;
200
- box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12);
201
- .ant-input {
202
- width: 100%;
203
- }
204
- }
205
- }
206
- }
207
- </style>
1
+ <template>
2
+ <div>
3
+ <div class="text-card">
4
+ <div
5
+ v-for="(item, index) in displayItems"
6
+ :key="index"
7
+ class="text-item"
8
+ @click="handleItemClick(index, item.id)"
9
+ @contextmenu.prevent="handleContextMenu(index, item.id)">
10
+ <div class="text-content" :class="{ 'is-empty': !item.content }">
11
+ {{ item.content || '+' }}
12
+ </div>
13
+ </div>
14
+ <!-- 编辑弹出框 -->
15
+ <div
16
+ v-if="showEdit"
17
+ class="edit-overlay"
18
+ @click.self="handleOverlayClick">
19
+ <div class="edit-card">
20
+ <a-textarea
21
+ v-model="editingContent"
22
+ :autoSize="{ minRows: 3 }"
23
+ @keyup.enter="handleSave"
24
+ ref="textarea"/>
25
+ </div>
26
+ </div>
27
+ <!-- 删除确认弹框 -->
28
+ <a-modal
29
+ v-model="showDeleteModal"
30
+ title="确认删除"
31
+ okText="确认"
32
+ cancelText="取消"
33
+ @ok="handleDeleteConfirm">
34
+ <p>确定要删除这条内容吗?</p>
35
+ </a-modal>
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+ <script>
41
+ import { runLogic } from '@vue2-client/services/api/common'
42
+
43
+ export default {
44
+ name: 'XTextCard',
45
+ props: {
46
+ // logic配置名,要求返回一个数组[{ id: , content: }]
47
+ queryParamsName: {
48
+ type: String,
49
+ default: 'memorandumLOGIC'
50
+ },
51
+ queryParams: {
52
+ type: Object,
53
+ default: () => { return {} }
54
+ },
55
+ // 请求参数
56
+ parameter: {
57
+ type: Object,
58
+ default: () => { return {} }
59
+ }
60
+ },
61
+ data () {
62
+ return {
63
+ localItems: [], // 本地数据
64
+ showEdit: false, // 是否显示编辑框
65
+ editingIndex: -1, // 当前编辑的索引
66
+ editingContent: '', // 编辑框的内容
67
+ showDeleteModal: false, // 是否显示删除确认框
68
+ deleteIndex: -1, // 要删除的项目索引
69
+ ID: 0
70
+ }
71
+ },
72
+ computed: {
73
+ // 显示的列表,始终保持一个空行
74
+ displayItems () {
75
+ const items = [...this.localItems]
76
+ // 如果最后一项不是空的,添加一个空项
77
+ if (!items.length || items[items.length - 1].content) {
78
+ items.push({ content: '' })
79
+ }
80
+ return items
81
+ }
82
+ },
83
+ methods: {
84
+ // 点击项目
85
+ handleItemClick (index, id) {
86
+ this.ID = id
87
+ this.editingIndex = index
88
+ this.editingContent = this.displayItems[index].content
89
+ this.showEdit = true
90
+ this.$nextTick(() => {
91
+ this.$refs.textarea?.focus()
92
+ })
93
+ },
94
+ // 点击遮罩层保存
95
+ handleOverlayClick () {
96
+ this.handleSave()
97
+ },
98
+ // 保存内容
99
+ handleSave () {
100
+ if (this.editingContent.trim()) {
101
+ if (this.editingIndex === this.localItems.length) {
102
+ // 如果是在最后一个空行添加,push新内容
103
+ this.localItems.push({ content: this.editingContent.trim() })
104
+ } else {
105
+ // 否则更新现有内容
106
+ this.localItems[this.editingIndex].content = this.editingContent.trim()
107
+ }
108
+ const addData = { data: this.editingContent.trim(), ID: this.ID }
109
+ // 触发更新事件
110
+ this.$emit('add', addData)
111
+ }
112
+ this.showEdit = false
113
+ this.editingIndex = -1
114
+ this.editingContent = ''
115
+ },
116
+ // 初始化数据
117
+ async initData (data, parameter) {
118
+ // 从配置中获取数据
119
+ const resData = await runLogic(data, parameter, 'af-his')
120
+ this.localItems = resData
121
+ return resData
122
+ },
123
+ // 处理右键菜单
124
+ handleContextMenu (index, id) {
125
+ // 如果是最后一个空行,不显示删除框
126
+ if (index === this.localItems.length) {
127
+ return
128
+ }
129
+ this.ID = id
130
+ this.deleteIndex = index
131
+ this.showDeleteModal = true
132
+ },
133
+ // 确认删除
134
+ handleDeleteConfirm () {
135
+ if (this.deleteIndex > -1) {
136
+ this.localItems.splice(this.deleteIndex, 1)
137
+ const deleteData = { data: [...this.localItems][this.deleteIndex], ID: this.ID }
138
+ this.$emit('deleteData', deleteData)
139
+ this.deleteIndex = -1
140
+ }
141
+ this.showDeleteModal = false
142
+ }
143
+ },
144
+ watch: {
145
+ queryParamsName: {
146
+ immediate: true,
147
+ handler (newVal) {
148
+ this.initData(newVal, this.parameter)
149
+ },
150
+ deep: true
151
+ }
152
+ }
153
+ }
154
+ </script>
155
+
156
+ <style scoped lang="less">
157
+ .text-card {
158
+ position: relative;
159
+ width: 100%;
160
+ .text-item {
161
+ padding: 8px 12px;
162
+ border-bottom: 1px solid #f0f0f0;
163
+ cursor: pointer;
164
+ transition: all 0.3s;
165
+ user-select: none;
166
+
167
+ &:hover {
168
+ background-color: #f5f5f5;
169
+ }
170
+
171
+ .text-content {
172
+ white-space: nowrap;
173
+ overflow: hidden;
174
+ text-overflow: ellipsis;
175
+ line-height: 1.5;
176
+
177
+ &.is-empty {
178
+ color: #5D5C5C;
179
+ font-weight: 400;
180
+ }
181
+ }
182
+ }
183
+ .edit-overlay {
184
+ position: fixed;
185
+ top: 0;
186
+ left: 0;
187
+ right: 0;
188
+ bottom: 0;
189
+ background-color: rgba(0, 0, 0, 0.45);
190
+ z-index: 1000;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ .edit-card {
195
+ background: white;
196
+ padding: 16px;
197
+ border-radius: 8px;
198
+ width: 90%;
199
+ max-width: 500px;
200
+ box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12);
201
+ .ant-input {
202
+ width: 100%;
203
+ }
204
+ }
205
+ }
206
+ }
207
+ </style>