vue2-client 1.15.13 → 1.15.15

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 (34) hide show
  1. package/jest.config.js +22 -22
  2. package/package.json +2 -2
  3. package/src/ReportView.js +0 -6
  4. package/src/base-client/components/common/XForm/XForm.vue +419 -419
  5. package/src/base-client/components/common/XForm/demo.vue +105 -105
  6. package/src/base-client/components/common/XFormTable/demo.vue +0 -1
  7. package/src/base-client/components/common/XPrint/PrintBill.vue +3 -1
  8. package/src/base-client/components/common/XRate/demo.vue +102 -102
  9. package/src/base-client/components/common/XTable/XTableWrapper.vue +166 -1
  10. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  11. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  12. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  13. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  14. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  15. package/src/main.js +3 -4
  16. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +2 -1
  17. package/src/pages/WorkflowDetail/WorkflowDetail.vue +20 -4
  18. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  19. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +475 -148
  20. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +677 -188
  21. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +1 -1
  22. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +25 -23
  23. package/src/pages/XPageViewExample/index.vue +149 -149
  24. package/src/router/async/router.map.js +3 -5
  25. package/src/router/index.js +27 -27
  26. package/src/router.js +0 -2
  27. package/src/services/api/workFlow.js +0 -4
  28. package/test/request.test.js +17 -17
  29. package/vue.config.js +2 -5
  30. package/src/base-client/components/common/AMisRender/index.js +0 -3
  31. package/src/base-client/components/common/AMisRender/index.vue +0 -263
  32. package/src/pages/AMisDemo/AMisDemo.vue +0 -325
  33. package/src/pages/AMisDemo/AMisDemo2.vue +0 -74
  34. package/test/Amis.spec.js +0 -164
@@ -1,105 +1,105 @@
1
- <template>
2
- <div class="demo-container">
3
- <h2>XFormItem Demo</h2>
4
-
5
- <!-- 查询模式演示 -->
6
- <div class="demo-section">
7
- <h3>查询模式</h3>
8
- <x-form-item
9
- :attr="queryAttr"
10
- :form="queryForm"
11
- mode="查询"
12
- :showLabel="true"
13
- />
14
- <div class="value-display">
15
- 当前值: {{ queryForm.rate || '未选择' }}
16
- </div>
17
- </div>
18
-
19
- <!-- 新增模式演示 -->
20
- <div class="demo-section">
21
- <h3>新增模式</h3>
22
- <x-form-item
23
- :attr="addAttr"
24
- :form="addForm"
25
- mode="新增/修改"
26
- :showLabel="true"
27
- />
28
- <div class="value-display">
29
- 当前值: {{ addForm.rate || '未评分' }}
30
- </div>
31
- </div>
32
- </div>
33
- </template>
34
-
35
- <script>
36
- import XFormItem from './XFormItem.vue'
37
-
38
- export default {
39
- name: 'XFormItemDemo',
40
- components: {
41
- XFormItem
42
- },
43
- data () {
44
- return {
45
- // 查询表单配置
46
- queryAttr: {
47
- type: 'rate',
48
- name: '评分查询',
49
- queryType: 'IN',
50
- model: 'rate',
51
- placeholder: '请选择评分',
52
- allowHalf: true,
53
- maxCount: 5
54
- },
55
- queryForm: {
56
- },
57
-
58
- // 新增表单配置
59
- addAttr: {
60
- type: 'rate',
61
- name: '评分',
62
- model: 'rate',
63
- allowHalf: true,
64
- maxCount: 10
65
- },
66
- addForm: {
67
- rate: 3
68
- }
69
- }
70
- }
71
- }
72
- </script>
73
-
74
- <style lang="less" scoped>
75
- .demo-container {
76
- padding: 20px;
77
- max-width: 800px;
78
- margin: 0 auto;
79
- background-color: #f5f5f5;
80
-
81
- h2 {
82
- margin-bottom: 20px;
83
- color: #1890ff;
84
- }
85
-
86
- .demo-section {
87
- margin-bottom: 30px;
88
- padding: 20px;
89
- border: 1px solid #e8e8e8;
90
- border-radius: 4px;
91
-
92
- h3 {
93
- margin-bottom: 16px;
94
- color: #333;
95
- }
96
-
97
- .value-display {
98
- margin-top: 16px;
99
- padding: 8px;
100
- background-color: #f5f5f5;
101
- border-radius: 4px;
102
- }
103
- }
104
- }
105
- </style>
1
+ <template>
2
+ <div class="demo-container">
3
+ <h2>XFormItem Demo</h2>
4
+
5
+ <!-- 查询模式演示 -->
6
+ <div class="demo-section">
7
+ <h3>查询模式</h3>
8
+ <x-form-item
9
+ :attr="queryAttr"
10
+ :form="queryForm"
11
+ mode="查询"
12
+ :showLabel="true"
13
+ />
14
+ <div class="value-display">
15
+ 当前值: {{ queryForm.rate || '未选择' }}
16
+ </div>
17
+ </div>
18
+
19
+ <!-- 新增模式演示 -->
20
+ <div class="demo-section">
21
+ <h3>新增模式</h3>
22
+ <x-form-item
23
+ :attr="addAttr"
24
+ :form="addForm"
25
+ mode="新增/修改"
26
+ :showLabel="true"
27
+ />
28
+ <div class="value-display">
29
+ 当前值: {{ addForm.rate || '未评分' }}
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </template>
34
+
35
+ <script>
36
+ import XFormItem from './XFormItem.vue'
37
+
38
+ export default {
39
+ name: 'XFormItemDemo',
40
+ components: {
41
+ XFormItem
42
+ },
43
+ data () {
44
+ return {
45
+ // 查询表单配置
46
+ queryAttr: {
47
+ type: 'rate',
48
+ name: '评分查询',
49
+ queryType: 'IN',
50
+ model: 'rate',
51
+ placeholder: '请选择评分',
52
+ allowHalf: true,
53
+ maxCount: 5
54
+ },
55
+ queryForm: {
56
+ },
57
+
58
+ // 新增表单配置
59
+ addAttr: {
60
+ type: 'rate',
61
+ name: '评分',
62
+ model: 'rate',
63
+ allowHalf: true,
64
+ maxCount: 10
65
+ },
66
+ addForm: {
67
+ rate: 3
68
+ }
69
+ }
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <style lang="less" scoped>
75
+ .demo-container {
76
+ padding: 20px;
77
+ max-width: 800px;
78
+ margin: 0 auto;
79
+ background-color: #f5f5f5;
80
+
81
+ h2 {
82
+ margin-bottom: 20px;
83
+ color: #1890ff;
84
+ }
85
+
86
+ .demo-section {
87
+ margin-bottom: 30px;
88
+ padding: 20px;
89
+ border: 1px solid #e8e8e8;
90
+ border-radius: 4px;
91
+
92
+ h3 {
93
+ margin-bottom: 16px;
94
+ color: #333;
95
+ }
96
+
97
+ .value-display {
98
+ margin-top: 16px;
99
+ padding: 8px;
100
+ background-color: #f5f5f5;
101
+ border-radius: 4px;
102
+ }
103
+ }
104
+ }
105
+ </style>
@@ -4,7 +4,6 @@
4
4
  title="示例表单"
5
5
  :queryParamsName="queryParamsName"
6
6
  :fixedAddForm="fixedAddForm"
7
- service-name="af-revenue"
8
7
  :externalSelectedRowKeys="selectedKeys"
9
8
  @action="action"
10
9
  @selectRow="selectRow"
@@ -6,7 +6,9 @@
6
6
  width="60vw"
7
7
  @ok="printGen"
8
8
  @cancel="cancel"
9
- style="min-width: 800px">
9
+ style="min-width: 800px"
10
+ z-index="1009"
11
+ >
10
12
  <a-skeleton v-if="!loaded" active/>
11
13
  <div
12
14
  style="display: flex;justify-content: center;"
@@ -1,102 +1,102 @@
1
- <template>
2
- <div class="demo-container">
3
- <h2>XRate 评分组件示例</h2>
4
-
5
- <div class="demo-section">
6
- <h3>基础用法</h3>
7
- <x-rate v-model="basicRate" />
8
- <div>当前值: {{ basicRate }}</div>
9
- <a-button @click="resetBasicRate">重置</a-button>
10
- </div>
11
-
12
- <div class="demo-section">
13
- <h3>允许半星</h3>
14
- <x-rate v-model="halfRate" :allow-half="true" />
15
- <div>当前值: {{ halfRate }}</div>
16
- </div>
17
-
18
- <div class="demo-section">
19
- <h3>自定义最大分值</h3>
20
- <x-rate v-model="customRate" :max-count="10" />
21
- <div>当前值: {{ customRate }}</div>
22
- </div>
23
-
24
- <div class="demo-section">
25
- <h3>查询模式</h3>
26
- <x-rate v-model="queryRate" mode="查询" />
27
- <div>当前值: {{ queryRate }}</div>
28
- </div>
29
-
30
- <div class="demo-section">
31
- <h3>查询模式(多选)</h3>
32
- <x-rate v-model="queryMultiRate" mode="查询" query-type="IN" />
33
- <div>当前值: {{ queryMultiRate }}</div>
34
- </div>
35
-
36
- <div class="demo-section">
37
- <h3>禁用状态</h3>
38
- <x-rate v-model="disabledRate" :disabled="true" />
39
- <div>当前值: {{ disabledRate }}</div>
40
- </div>
41
-
42
- <div class="demo-section">
43
- <h3>空值处理</h3>
44
- <x-rate v-model="emptyRate" />
45
- <div>当前值: {{ emptyRate }}</div>
46
- <a-button @click="clearRate">清除</a-button>
47
- </div>
48
- </div>
49
- </template>
50
-
51
- <script>
52
- import XRate from './index.vue'
53
-
54
- export default {
55
- name: 'XRateDemo',
56
- components: {
57
- XRate
58
- },
59
- data () {
60
- return {
61
- basicRate: 3,
62
- halfRate: 3.5,
63
- customRate: 7,
64
- queryRate: 4,
65
- queryMultiRate: [3, 4],
66
- disabledRate: 2,
67
- emptyRate: undefined
68
- }
69
- },
70
- methods: {
71
- resetBasicRate () {
72
- this.basicRate = 3
73
- },
74
- clearRate () {
75
- this.emptyRate = undefined
76
- }
77
- }
78
- }
79
- </script>
80
-
81
- <style lang="less" scoped>
82
- .demo-container {
83
- padding: 20px;
84
-
85
- .demo-section {
86
- margin-bottom: 30px;
87
- padding: 20px;
88
- border: 1px solid #eee;
89
- border-radius: 4px;
90
-
91
- h3 {
92
- margin-top: 0;
93
- margin-bottom: 16px;
94
- color: #333;
95
- }
96
-
97
- .ant-btn {
98
- margin-top: 8px;
99
- }
100
- }
101
- }
102
- </style>
1
+ <template>
2
+ <div class="demo-container">
3
+ <h2>XRate 评分组件示例</h2>
4
+
5
+ <div class="demo-section">
6
+ <h3>基础用法</h3>
7
+ <x-rate v-model="basicRate" />
8
+ <div>当前值: {{ basicRate }}</div>
9
+ <a-button @click="resetBasicRate">重置</a-button>
10
+ </div>
11
+
12
+ <div class="demo-section">
13
+ <h3>允许半星</h3>
14
+ <x-rate v-model="halfRate" :allow-half="true" />
15
+ <div>当前值: {{ halfRate }}</div>
16
+ </div>
17
+
18
+ <div class="demo-section">
19
+ <h3>自定义最大分值</h3>
20
+ <x-rate v-model="customRate" :max-count="10" />
21
+ <div>当前值: {{ customRate }}</div>
22
+ </div>
23
+
24
+ <div class="demo-section">
25
+ <h3>查询模式</h3>
26
+ <x-rate v-model="queryRate" mode="查询" />
27
+ <div>当前值: {{ queryRate }}</div>
28
+ </div>
29
+
30
+ <div class="demo-section">
31
+ <h3>查询模式(多选)</h3>
32
+ <x-rate v-model="queryMultiRate" mode="查询" query-type="IN" />
33
+ <div>当前值: {{ queryMultiRate }}</div>
34
+ </div>
35
+
36
+ <div class="demo-section">
37
+ <h3>禁用状态</h3>
38
+ <x-rate v-model="disabledRate" :disabled="true" />
39
+ <div>当前值: {{ disabledRate }}</div>
40
+ </div>
41
+
42
+ <div class="demo-section">
43
+ <h3>空值处理</h3>
44
+ <x-rate v-model="emptyRate" />
45
+ <div>当前值: {{ emptyRate }}</div>
46
+ <a-button @click="clearRate">清除</a-button>
47
+ </div>
48
+ </div>
49
+ </template>
50
+
51
+ <script>
52
+ import XRate from './index.vue'
53
+
54
+ export default {
55
+ name: 'XRateDemo',
56
+ components: {
57
+ XRate
58
+ },
59
+ data () {
60
+ return {
61
+ basicRate: 3,
62
+ halfRate: 3.5,
63
+ customRate: 7,
64
+ queryRate: 4,
65
+ queryMultiRate: [3, 4],
66
+ disabledRate: 2,
67
+ emptyRate: undefined
68
+ }
69
+ },
70
+ methods: {
71
+ resetBasicRate () {
72
+ this.basicRate = 3
73
+ },
74
+ clearRate () {
75
+ this.emptyRate = undefined
76
+ }
77
+ }
78
+ }
79
+ </script>
80
+
81
+ <style lang="less" scoped>
82
+ .demo-container {
83
+ padding: 20px;
84
+
85
+ .demo-section {
86
+ margin-bottom: 30px;
87
+ padding: 20px;
88
+ border: 1px solid #eee;
89
+ border-radius: 4px;
90
+
91
+ h3 {
92
+ margin-top: 0;
93
+ margin-bottom: 16px;
94
+ color: #333;
95
+ }
96
+
97
+ .ant-btn {
98
+ margin-top: 8px;
99
+ }
100
+ }
101
+ }
102
+ </style>
@@ -19,6 +19,7 @@
19
19
  :setScrollYHeight="tableContext.setScrollYHeight"
20
20
  :selectRowMode="tableContext.selectRowMode"
21
21
  :size="tableContext.tableSize"
22
+ :components="components"
22
23
  @beforeDataChange="beforeDataChange"
23
24
  @expand="onExpand"
24
25
  @rowClick="handleRowClick"
@@ -154,6 +155,7 @@
154
155
  :setScrollYHeight="tableContext.setScrollYHeight"
155
156
  :selectRowMode="tableContext.selectRowMode"
156
157
  :size="tableContext.tableSize"
158
+ :components="components"
157
159
  @rowClick="handleRowClick"
158
160
  @beforeDataChange="beforeDataChange"
159
161
  >
@@ -269,6 +271,7 @@ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormIte
269
271
  import CustomFuncCel from '@vue2-client/base-client/components/common/XTable/CustomFuncCel.vue'
270
272
  import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
271
273
  import XRate from '@vue2-client/base-client/components/common/XRate/index.vue'
274
+ import VueDraggableResizable from 'vue-draggable-resizable'
272
275
 
273
276
  export default {
274
277
  name: 'XTableWrapper',
@@ -278,7 +281,15 @@ export default {
278
281
  XBadge,
279
282
  XFormItem,
280
283
  XRate,
281
- CustomFuncCel
284
+ CustomFuncCel,
285
+ VueDraggableResizable
286
+ },
287
+ data () {
288
+ return {
289
+ isDragging: false, // 添加拖拽状态标记
290
+ // eslint-disable-next-line vue/no-reserved-keys
291
+ _rafId: null // 添加requestAnimationFrame ID标记
292
+ }
282
293
  },
283
294
  computed: {
284
295
  localDataSource () {
@@ -290,6 +301,114 @@ export default {
290
301
  },
291
302
  realTableColumns () {
292
303
  return this.tableContext.tableColumns.filter(item => item.slotType !== 'action' || !this.disableAction)
304
+ },
305
+ components () {
306
+ return {
307
+ header: {
308
+ cell: (h, props, children) => {
309
+ const { key, ...restProps } = props
310
+ // 此处的this.realTableColumns 是定义的table的表头属性变量
311
+ const col = this.realTableColumns.find((col) => {
312
+ const k = col.dataIndex || col.key
313
+ return k === key
314
+ })
315
+ if (!col || !col.width) {
316
+ return h('th', { ...restProps }, [...children])
317
+ }
318
+
319
+ // 创建一个防止点击排序的容器
320
+ const preventSortProps = {
321
+ style: {
322
+ position: 'absolute',
323
+ right: 0,
324
+ top: 0,
325
+ width: '20px',
326
+ height: '100%',
327
+ zIndex: 10
328
+ },
329
+ on: {
330
+ mousedown: (e) => {
331
+ e.stopPropagation()
332
+ e.preventDefault()
333
+ this.isDragging = true
334
+ }
335
+ }
336
+ }
337
+
338
+ const dragProps = {
339
+ key: col.dataIndex || col.key,
340
+ class: 'table-draggable-handle',
341
+ attrs: {
342
+ w: 10,
343
+ x: col.width,
344
+ z: 1,
345
+ axis: 'x',
346
+ draggable: true,
347
+ resizable: false,
348
+ },
349
+ on: {
350
+ dragging: (x, y) => {
351
+ // 使用requestAnimationFrame优化性能,减少卡顿
352
+ if (!this._rafId) {
353
+ this._rafId = requestAnimationFrame(() => {
354
+ col.width = Math.max(x, 50) // 设置最小列宽为50px
355
+ this.isDragging = true // 设置拖拽状态
356
+ this._rafId = null
357
+ })
358
+ }
359
+ },
360
+ mousedown: (e) => {
361
+ // 阻止事件冒泡,防止触发排序
362
+ e.stopPropagation()
363
+ e.preventDefault()
364
+ this.isDragging = true // 设置拖拽状态
365
+ },
366
+ dragstop: () => {
367
+ // 清除可能存在的动画帧请求
368
+ if (this._rafId) {
369
+ cancelAnimationFrame(this._rafId)
370
+ this._rafId = null
371
+ }
372
+
373
+ // 拖拽结束时,延迟重置拖拽状态,以防止排序被触发
374
+ setTimeout(() => {
375
+ this.isDragging = false
376
+ }, 100)
377
+ }
378
+ },
379
+ nativeOn: {
380
+ mousedown: (e) => {
381
+ e.stopPropagation()
382
+ e.preventDefault()
383
+ this.isDragging = true // 设置拖拽状态
384
+ }
385
+ }
386
+ }
387
+
388
+ const preventSort = h('div', preventSortProps)
389
+ const drag = h('vue-draggable-resizable', { ...dragProps })
390
+
391
+ // 修改th的点击事件,在拖拽状态下阻止排序
392
+ const newRestProps = { ...restProps }
393
+ const originalClick = newRestProps.on && newRestProps.on.click
394
+ if (originalClick) {
395
+ newRestProps.on = {
396
+ ...newRestProps.on,
397
+ click: (e) => {
398
+ if (this.isDragging) {
399
+ e.stopPropagation()
400
+ e.preventDefault()
401
+ return
402
+ }
403
+ originalClick(e)
404
+ }
405
+ }
406
+ }
407
+
408
+ return h('th', { ...newRestProps, class: 'resize-table-th' }, [...children, preventSort, drag])
409
+ },
410
+ }
411
+ }
293
412
  }
294
413
  },
295
414
  props: {
@@ -412,6 +531,52 @@ export default {
412
531
  }
413
532
  return false
414
533
  },
534
+ handleResizeColumn (w, col) {
535
+ col.width = w
536
+ }
415
537
  }
416
538
  }
417
539
  </script>
540
+
541
+ <style>
542
+ .table-draggable-handle {
543
+ height: 100% !important;
544
+ left: auto !important;
545
+ right: -10px;
546
+ cursor: col-resize;
547
+ touch-action: none;
548
+ border: none;
549
+ position: absolute;
550
+ transform: none !important;
551
+ bottom: 0;
552
+ width: 20px !important;
553
+ }
554
+
555
+ .table-draggable-handle::after {
556
+ content: "";
557
+ position: absolute;
558
+ top: 50%;
559
+ height: 20px;
560
+ width: 1px;
561
+ background-color: #d9d9d9;
562
+ transition: background-color 0.2s;
563
+ transform: translateY(-50%);
564
+ right: 9px;
565
+ }
566
+
567
+ .table-draggable-handle:hover::after {
568
+ background-color: #1890ff;
569
+ }
570
+
571
+ .table-draggable-handle:active::after {
572
+ background-color: #096dd9;
573
+ }
574
+
575
+ .resize-table-th {
576
+ position: relative;
577
+ }
578
+
579
+ .resize-table-th:hover .table-draggable-handle::after {
580
+ background-color: rgba(24, 144, 255, 0.5);
581
+ }
582
+ </style>