@idooel/components 0.0.1 → 0.0.2

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 (107) hide show
  1. package/README.md +99 -0
  2. package/dist/@idooel/components.esm.js +13956 -1882
  3. package/dist/@idooel/components.umd.js +14000 -1891
  4. package/jsconfig.json +8 -0
  5. package/package.json +12 -6
  6. package/packages/alert/index.js +5 -0
  7. package/packages/alert/src/index.vue +46 -0
  8. package/packages/batch-export/index.js +5 -0
  9. package/packages/batch-export/src/index.vue +105 -0
  10. package/packages/business-components/modal-fsm/index.js +5 -0
  11. package/packages/business-components/modal-fsm/src/index.vue +164 -0
  12. package/packages/business-components/modal-import/index.js +5 -0
  13. package/packages/business-components/modal-import/src/index.vue +140 -0
  14. package/packages/business-components/modal-timeline/index.js +5 -0
  15. package/packages/business-components/modal-timeline/src/index.vue +78 -0
  16. package/packages/business-components/tabs-sub-center/index.js +5 -0
  17. package/packages/business-components/tabs-sub-center/src/index.vue +117 -0
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -24
  20. package/packages/checkbox/index.js +5 -0
  21. package/packages/checkbox/src/index.vue +53 -0
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -46
  24. package/packages/composite-components/form-attachment/src/index.vue +15 -0
  25. package/packages/composite-components/form-img-crop/index.js +5 -0
  26. package/packages/composite-components/form-img-crop/src/index.vue +121 -0
  27. package/packages/composite-components/modal-confirm/index.js +5 -0
  28. package/packages/composite-components/modal-confirm/src/index.vue +104 -0
  29. package/packages/composite-components/modal-form/index.js +5 -0
  30. package/packages/composite-components/modal-form/src/index.vue +231 -0
  31. package/packages/composite-components/modal-img-crop/index.js +5 -0
  32. package/packages/composite-components/modal-img-crop/src/index.vue +299 -0
  33. package/packages/composite-components/modal-table/index.js +5 -0
  34. package/packages/composite-components/modal-table/src/index.vue +156 -0
  35. package/packages/composite-components/modal-table-transfer/index.js +0 -0
  36. package/packages/composite-components/modal-tree/index.js +5 -0
  37. package/packages/composite-components/modal-tree/src/index.vue +76 -0
  38. package/packages/composite-components/search-area/index.js +4 -4
  39. package/packages/composite-components/search-area/src/index.vue +237 -128
  40. package/packages/composite-components/search-area/src/label.vue +35 -35
  41. package/packages/composite-components/select-entity-modal-table/index.js +5 -0
  42. package/packages/composite-components/select-entity-modal-table/src/index.vue +172 -0
  43. package/packages/composite-components/table-transfer/index.js +0 -0
  44. package/packages/date/index.js +4 -4
  45. package/packages/date/src/index.vue +113 -40
  46. package/packages/date-range/index.js +5 -0
  47. package/packages/date-range/src/index.vue +47 -0
  48. package/packages/form/index.js +5 -0
  49. package/packages/form/src/index.vue +319 -0
  50. package/packages/icon/index.js +5 -0
  51. package/packages/icon/src/index.vue +32 -0
  52. package/packages/index.js +153 -50
  53. package/packages/input/index.js +4 -4
  54. package/packages/input/src/index.vue +35 -23
  55. package/packages/input-number/index.js +5 -0
  56. package/packages/input-number/src/index.vue +24 -0
  57. package/packages/loading/index.js +5 -0
  58. package/packages/loading/src/index.vue +37 -0
  59. package/packages/modal/index.js +5 -0
  60. package/packages/modal/src/index.vue +185 -0
  61. package/packages/models/form-group-model/index.js +5 -0
  62. package/packages/models/form-group-model/src/index.vue +274 -0
  63. package/packages/models/form-model/index.js +5 -0
  64. package/packages/models/form-model/src/index.vue +233 -0
  65. package/packages/models/step-model/index.js +5 -0
  66. package/packages/models/step-model/src/index.vue +224 -0
  67. package/packages/{tree-table-model → models/tree-table-model}/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +689 -0
  69. package/packages/radio/index.js +5 -0
  70. package/packages/radio/src/index.vue +57 -0
  71. package/packages/select/index.js +4 -4
  72. package/packages/select/src/index.vue +105 -34
  73. package/packages/select-entity/index.js +5 -0
  74. package/packages/select-entity/src/index.vue +120 -0
  75. package/packages/table/index.js +4 -4
  76. package/packages/table/src/action.vue +172 -103
  77. package/packages/table/src/index.vue +289 -88
  78. package/packages/tabs/index.js +5 -0
  79. package/packages/tabs/src/index.vue +56 -0
  80. package/packages/text/index.js +5 -0
  81. package/packages/text/src/index.vue +48 -0
  82. package/packages/text-editor/index.js +5 -0
  83. package/packages/text-editor/src/index.vue +73 -0
  84. package/packages/textarea/index.js +5 -0
  85. package/packages/textarea/src/index.vue +58 -0
  86. package/packages/theme/form.scss +22 -0
  87. package/packages/theme/index.scss +43 -0
  88. package/packages/theme/overrid.scss +8 -0
  89. package/packages/theme/styleClass.scss +3 -0
  90. package/packages/theme/variables.scss +56 -0
  91. package/packages/timeline/index.js +5 -0
  92. package/packages/timeline/src/index.vue +258 -0
  93. package/packages/tpl/index.js +4 -4
  94. package/packages/tpl/src/index.vue +56 -47
  95. package/packages/tree/index.js +4 -4
  96. package/packages/tree/src/TreeNode.vue +29 -29
  97. package/packages/tree/src/index.vue +101 -96
  98. package/packages/tree-select/index.js +5 -0
  99. package/packages/tree-select/src/index.vue +143 -0
  100. package/packages/upload/index.js +5 -0
  101. package/packages/upload/src/index.vue +445 -0
  102. package/packages/utils/index.js +63 -0
  103. package/scripts/rollup.config.js +42 -35
  104. package/scripts/rollup.esm.config.js +11 -11
  105. package/scripts/rollup.umd.config.js +14 -14
  106. package/packages/tree-table-model/src/index.vue +0 -290
  107. /package/packages/{tree-table-model/README.md → composite-components/form-attachment/index.js} +0 -0
@@ -0,0 +1,57 @@
1
+ <template>
2
+ <a-radio-group :value="value" @change="onChange" :disabled="disabled">
3
+ <a-radio v-for="item in dataSource" :key="item.value" :value="item.value">
4
+ {{ item.label }}
5
+ </a-radio>
6
+ </a-radio-group>
7
+ </template>
8
+
9
+ <script>
10
+ export default {
11
+ name: 'ele-radio',
12
+ model: {
13
+ prop: 'value',
14
+ event: 'change'
15
+ },
16
+ props: {
17
+ value: {
18
+ type: [String, Array, Number]
19
+ },
20
+ dataSource: {
21
+ type: Array,
22
+ default: () => []
23
+ },
24
+ disabled: {
25
+ type: Boolean,
26
+ default: false
27
+ }
28
+ },
29
+ watch: {
30
+ value (val) {
31
+ console.log('valvalval', val)
32
+ }
33
+ },
34
+ methods: {
35
+ onChange (e) {
36
+ this.$emit('change', e.target.value)
37
+ this.$emit('input', e.target.value)
38
+ }
39
+ }
40
+ }
41
+ </script>
42
+ <style lang="scss" scoped>
43
+ .ant-radio-group {
44
+ text-align: left;
45
+ line-height: 32px;
46
+ }
47
+ .has-error {
48
+ .ant-radio-group {
49
+ ::v-deep .ant-radio-wrapper {
50
+ color: var(--idooel-form-border-err-color);
51
+ }
52
+ ::v-deep .ant-radio-inner {
53
+ border-color: var(--idooel-form-border-err-color);
54
+ }
55
+ }
56
+ }
57
+ </style>
@@ -1,5 +1,5 @@
1
- import EleSelect from './src/index.vue'
2
-
3
- EleSelect.install = Vue => Vue.component(EleSelect.name, EleSelect)
4
-
1
+ import EleSelect from './src/index.vue'
2
+
3
+ EleSelect.install = Vue => Vue.component(EleSelect.name, EleSelect)
4
+
5
5
  export default EleSelect
@@ -1,35 +1,106 @@
1
- <template>
2
- <a-select :value="value" style="width: 100%" @change="onChange">
3
- <a-select-option v-for="item in dataSource" :key="item.value" :value="item.value">
4
- {{ item.label }}
5
- </a-select-option>
6
- </a-select>
7
- </template>
8
-
9
- <script>
10
- export default {
11
- name: 'ele-select',
12
- props: {
13
- value: {
14
- type: [String, Array, Number]
15
- },
16
- defaultValue: {
17
- type: [String, Array, Number]
18
- },
19
- dataSource: {
20
- type: Array,
21
- default: () => []
22
- }
23
- },
24
- methods: {
25
- onChange (value) {
26
- this.$emit('change', value)
27
- this.$emit('input', value)
28
- }
29
- }
30
- }
31
- </script>
32
-
33
- <style lang="scss" scoped>
34
-
1
+ <template>
2
+ <a-select :disabled="disabled" :mode="getMode" :value="value" style="width: 100%" @change="onChange">
3
+ <a-select-option v-for="item in innerDataSource" :key="item.value" :value="item.value">
4
+ {{ item.label }}
5
+ </a-select-option>
6
+ </a-select>
7
+ </template>
8
+
9
+ <script>
10
+ import { net, type } from '@idooel/shared'
11
+ export default {
12
+ name: 'ele-select',
13
+ props: {
14
+ init: {
15
+ type: Boolean,
16
+ default: false
17
+ },
18
+ disabled: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ value: {
23
+ type: [String, Array, Number]
24
+ },
25
+ defaultValue: {
26
+ type: [String, Array, Number]
27
+ },
28
+ dataSource: {
29
+ type: Array,
30
+ default: () => []
31
+ },
32
+ url: {
33
+ type: String,
34
+ default: 'api-basic/workbench/dicttype/enum/selectList'
35
+ },
36
+ code: {
37
+ type: String,
38
+ },
39
+ params: {
40
+ type: Object,
41
+ default: () => ({})
42
+ },
43
+ mode: {
44
+ type: String
45
+ },
46
+ multiple: {
47
+ type: Boolean,
48
+ default: false
49
+ }
50
+ },
51
+ data () {
52
+ return {
53
+ innerDataSource: []
54
+ }
55
+ },
56
+ computed: {
57
+ isInitRequest () {
58
+ if (this.init) {
59
+ return true
60
+ }
61
+ if (this.code || !type.isEmpty(this.params)) {
62
+ return true
63
+ }
64
+ return false
65
+ },
66
+ getMode () {
67
+ if (this.multiple) {
68
+ return 'multiple'
69
+ }
70
+ return this.mode
71
+ }
72
+ },
73
+ watch: {
74
+ dataSource: {
75
+ handler (dataSource) {
76
+ this.innerDataSource = dataSource
77
+ },
78
+ immediate: true
79
+ }
80
+ },
81
+ created () {
82
+ this.isInitRequest && this.fetchDataSourceByUrl()
83
+ },
84
+ methods: {
85
+ fetchDataSourceByUrl () {
86
+ net.get(this.url, { code: this.code, ...this.params }).then(resp => {
87
+ const { data } = resp
88
+ this.innerDataSource = data.map(item => {
89
+ return {
90
+ label: item.name,
91
+ value: item.code
92
+ }
93
+ })
94
+ })
95
+ },
96
+ onChange (value) {
97
+ this.$emit('change', value)
98
+ this.$emit('input', value)
99
+ }
100
+ }
101
+ }
102
+ </script>
103
+
104
+ <style lang="scss" scoped>
105
+
35
106
  </style>
@@ -0,0 +1,5 @@
1
+ import EleSelectEntity from './src/index.vue'
2
+
3
+ EleSelectEntity.install = Vue => Vue.component(EleSelectEntity.name, EleSelectEntity)
4
+
5
+ export default EleSelectEntity
@@ -0,0 +1,120 @@
1
+ <template>
2
+ <div class="g-select-entity__wrapper" :class="disabled ? 'g-select-entity__disabled' : ''">
3
+ <span class="select-entity__input">
4
+ <a-tag
5
+ v-for="(item, inx) in getValueList"
6
+ :key="item.value"
7
+ :closable="!disabled && !getIsMaxCount"
8
+ @close="onClose(...arguments, inx, item)"
9
+ >
10
+ {{ item.label }}
11
+ </a-tag>
12
+ <a-tag v-if="getIsMaxCount">......</a-tag>
13
+ </span>
14
+ <span class="select-entity__addon" @click="onChange">{{ addonAfter }}</span>
15
+ <slot></slot>
16
+ </div>
17
+ </template>
18
+
19
+ <script>
20
+ import { type } from '@idooel/shared'
21
+ export default {
22
+ name: 'ele-select-entity',
23
+ props: {
24
+ value: {
25
+ type: [Array, Object]
26
+ },
27
+ multiple: {
28
+ type: Boolean,
29
+ default: true
30
+ },
31
+ maxCount: {
32
+ type: Number,
33
+ default: 7
34
+ },
35
+ disabled: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ addonAfter: {
40
+ type: String,
41
+ default: '选择'
42
+ }
43
+ },
44
+ computed: {
45
+ getValueList () {
46
+ if (this.value) {
47
+ if (this.multiple) {
48
+ return this.getIsMaxCount ? this.value.slice(0, this.maxCount) : this.value
49
+ }
50
+ return type.isArray(this.value) ? this.value : [this.value]
51
+ }
52
+ return []
53
+ },
54
+ getIsMaxCount () {
55
+ if (this.value && this.multiple) {
56
+ return this.value.length >= this.maxCount
57
+ }
58
+ return false
59
+ }
60
+ },
61
+ methods: {
62
+ onChange () {
63
+ if (this.disabled) return
64
+ this.$emit('change', this.value)
65
+ this.$emit('evoke')
66
+ },
67
+ onClose (e, inx, props) {
68
+ e = window.event || e
69
+ e.preventDefault()
70
+ if (!this.multiple) {
71
+ this.$emit('close', props)
72
+ this.$emit('change', null)
73
+ return
74
+ }
75
+ this.value.splice(inx, 1)
76
+ this.$emit('close', props)
77
+ this.$emit('change', this.value)
78
+ }
79
+ }
80
+ }
81
+ </script>
82
+
83
+ <style lang="scss" scoped>
84
+ .g-select-entity__wrapper {
85
+ font-size: 14px;
86
+ line-height: 30px;
87
+ position: relative;
88
+ width: 100%;
89
+ display: flex;
90
+ color: var(--idoole-black-07);
91
+ border-radius: 4px;
92
+ border: 1px solid var(--idooel-form-title-border-color);
93
+ &:hover {
94
+ border-color: var(--idooel-primary-color);
95
+ }
96
+ .select-entity__input {
97
+ padding: 0 11px;
98
+ background-color: #fff;
99
+ border-radius: 4px;
100
+ flex-grow: 1;
101
+ min-height: 30px;
102
+ text-align: left;
103
+ }
104
+ .select-entity__addon {
105
+ padding: 0 11px;
106
+ color: var(--idoole-black-07);
107
+ background-color: var(--idoole-black-02);
108
+ border-left: 1px solid var(--idooel-form-title-border-color);
109
+ cursor: pointer;
110
+ min-height: 30px;
111
+ white-space: nowrap;
112
+ }
113
+ }
114
+ .has-error .g-select-entity__wrapper {
115
+ border-color: var(--idooel-form-border-err-color);
116
+ }
117
+ .g-select-entity__disabled .select-entity__input {
118
+ background-color: var(--idoole-black-02);
119
+ }
120
+ </style>
@@ -1,5 +1,5 @@
1
- import EleTable from './src/index.vue'
2
-
3
- EleTable.install = Vue => Vue.component(EleTable.name, EleTable)
4
-
1
+ import EleTable from './src/index.vue'
2
+
3
+ EleTable.install = Vue => Vue.component(EleTable.name, EleTable)
4
+
5
5
  export default EleTable
@@ -1,104 +1,173 @@
1
- <template>
2
- <div class="g-table__action">
3
- <div class="table-action__item" v-for="(item, idx) in dataSource" :key="idx">
4
- <template v-if="item.type == 'text'">
5
- <span>{{ item.label }}</span>
6
- </template>
7
- <template v-else-if="item.type == 'dropdown'">
8
- <a-dropdown>
9
- <a-menu slot="overlay" @click="handleDropdownClick">
10
- <a-menu-item :key="`${item.key || ''}${menuKeyDelimiter}${opt.value || ''}`" v-for="opt in execDropdownOptExpression(item.optionList)">
11
- <template v-if="opt.type == 'confirm'">
12
- <a-popconfirm :title="opt.message" @confirm="handleClickConfirm(opt)">
13
- {{ opt.label }}
14
- </a-popconfirm>
15
- </template>
16
- <template v-else>
17
- {{ opt.label }}
18
- </template>
19
- </a-menu-item>
20
- </a-menu>
21
- <span>{{ item.label }}</span>
22
- </a-dropdown>
23
- </template>
24
- </div>
25
- </div>
26
- </template>
27
-
28
- <script>
29
- import { v5 as uuidv5 } from 'uuid'
30
- import { type, route } from '@idooel/shared'
31
- import { parse } from '@idooel/expression'
32
- const MENU_KEY_NAMESPACE = 'f7b3b8b0-1b7b-11ec-9621-0242ac130002'
33
- export default {
34
- props: {
35
- record: {
36
- type: Object
37
- },
38
- dataSource: {
39
- type: Array,
40
- default: () => []
41
- }
42
- },
43
- computed: {
44
- menuKeyDelimiter () {
45
- return uuidv5('_', MENU_KEY_NAMESPACE)
46
- }
47
- },
48
- methods: {
49
- execDropdownOptExpression (dataSource = []) {
50
- const ret = dataSource.map(item => {
51
- const { show } = item
52
- if (type.isUndefined(show)) {
53
- return item
54
- } else if (type.isBool(show)) {
55
- if (show) return item
56
- } else if (type.isStr(show)) {
57
- const parseRet = parse(show, { ...this.record, _route: route.searchToQueryParams(window.location.search) })
58
- if (parseRet) return item
59
- }
60
- }).filter(item => item)
61
- console.log('ret', ret)
62
- return ret
63
- },
64
- handleClickConfirm (props) {
65
- //TODO generate event by special rule
66
- const { eventName, value } = props
67
- this.$emit(eventName, { key: value, record: this.record })
68
- },
69
- handleDropdownClick (props) {
70
- const { key } = props
71
- const [parent, child] = key.split(this.menuKeyDelimiter)
72
- if (!parent || !child) {
73
- throw new Error('key is required')
74
- }
75
- const currentDropdown = this.dataSource.find(item => item.key === parent)
76
- const currentClickTarget = currentDropdown.optionList.find(item => item.value === child)
77
- const { eventName, type } = currentClickTarget
78
- //TODO generate event by special rule
79
- if (type === 'confirm') return
80
- this.$emit(eventName, { key: child, record: this.record })
81
- },
82
- handleClickText (props) {
83
- const { eventName, key } = props
84
- this.$emit(eventName, { key, record: this.record })
85
- }
86
- }
87
- }
88
- </script>
89
-
90
- <style lang="scss" scoped>
91
- .g-table__action {
92
- display: flex;
93
- flex-direction: row;
94
- .table-action__item {
95
- font-size: 14px;
96
- color: #409EFF;
97
- margin-left: 16px;
98
- cursor: pointer;
99
- &:first-child {
100
- margin-left: 0;
101
- }
102
- }
103
- }
1
+ <template>
2
+ <div class="g-table__action">
3
+ <div class="table-action__item" v-for="(item, idx) in execOperationExpression(dataSource)" :key="idx">
4
+ <template v-if="item.type == 'text'">
5
+ <span @click="handleClickText(item)">{{ item.label }}</span>
6
+ </template>
7
+ <template v-else-if="item.type == 'confirm'">
8
+ <div>
9
+ <a-popconfirm :title="item.message" @confirm="handleClickConfirm(item)">
10
+ {{ item.label }}
11
+ </a-popconfirm>
12
+ </div>
13
+ </template>
14
+ <template v-else-if="item.type == 'dropdown'">
15
+ <a-dropdown>
16
+ <a-menu slot="overlay" @click="handleDropdownClick">
17
+ <a-menu-item :key="`${item.key || ''}${menuKeyDelimiter}${opt.value || ''}`" v-for="opt in execOperationExpression(item.optionList)">
18
+ <template v-if="opt.type == 'confirm'">
19
+ <a-popconfirm :title="opt.message" @confirm="handleClickConfirm(opt)">
20
+ {{ opt.label }}
21
+ </a-popconfirm>
22
+ </template>
23
+ <template v-else-if="opt.type == 'modal-confirm'">
24
+ <div style="width: 100%" @click="handleClickModalConfirm(opt)">{{ opt.label }}</div>
25
+ <ele-modal-confirm v-bind="opt.modalConfirm" v-on="$listeners" v-model="showModalConfirm"></ele-modal-confirm>
26
+ </template>
27
+ <template v-else>
28
+ {{ opt.label }}
29
+ </template>
30
+ </a-menu-item>
31
+ </a-menu>
32
+ <span>{{ item.label }}</span>
33
+ </a-dropdown>
34
+ </template>
35
+ </div>
36
+ </div>
37
+ </template>
38
+
39
+ <script>
40
+ import { v5 as uuidv5 } from 'uuid'
41
+ import { type, route } from '@idooel/shared'
42
+ import { parse } from '@idooel/expression'
43
+ import { CONTEXT } from '../../utils'
44
+ const MENU_KEY_NAMESPACE = 'f7b3b8b0-1b7b-11ec-9621-0242ac130002'
45
+ export default {
46
+ props: {
47
+ record: {
48
+ type: Object
49
+ },
50
+ dataSource: {
51
+ type: Array,
52
+ default: () => []
53
+ }
54
+ },
55
+ inject: {
56
+ requestTreeData: {
57
+ default: void 0
58
+ },
59
+ requestTableData: {
60
+ default: void 0
61
+ }
62
+ },
63
+ data() {
64
+ return {
65
+ showModalConfirm: false
66
+ }
67
+ },
68
+ provide () {
69
+ return {
70
+ [CONTEXT]: () => {
71
+ return {
72
+ _route: this.$route.query,
73
+ _routeMeta: this.$route.meta,
74
+ exposed: this.builtInMethods,
75
+ ...this.record
76
+ }
77
+ }
78
+ }
79
+ },
80
+ computed: {
81
+ menuKeyDelimiter () {
82
+ return uuidv5('_', MENU_KEY_NAMESPACE)
83
+ },
84
+ builtInMethods () {
85
+ return {
86
+ requestTreeData: this.requestTreeData,
87
+ requestTableData: this.requestTableData,
88
+ closeModalConfirm: this.closeModalConfirm,
89
+ showModalConfirm: this.handleClickModalConfirm,
90
+ currentRowData: this.record
91
+ }
92
+ }
93
+ },
94
+ methods: {
95
+ closeModalConfirm () {
96
+ this.showModalConfirm = false
97
+ },
98
+ handleClickModalConfirm () {
99
+ this.showModalConfirm = true
100
+ },
101
+ execOperationExpression (dataSource = []) {
102
+ const ret = dataSource.map(item => {
103
+ const { show } = item
104
+ if (type.isUndefined(show)) {
105
+ return item
106
+ } else if (type.isBool(show)) {
107
+ if (show) return item
108
+ } else if (type.isStr(show)) {
109
+ const parseRet = parse(show, {
110
+ ...this.record,
111
+ _route: route.searchToQueryParams(window.location.search)
112
+ })
113
+ if (parseRet) return item
114
+ }
115
+ }).filter(item => item)
116
+ return ret
117
+ },
118
+ handleClickConfirm (props) {
119
+ //TODO generate event by special rule
120
+ const { eventName, value, key } = props
121
+ this.$emit(eventName || key, {
122
+ key: value || key,
123
+ record: this.record,
124
+ builtInMethods: this.builtInMethods,
125
+ exposed: this.builtInMethods
126
+ })
127
+ },
128
+ handleDropdownClick (props) {
129
+ const { key } = props
130
+ const [parent, child] = key.split(this.menuKeyDelimiter)
131
+ if (!parent || !child) {
132
+ throw new Error('key is required')
133
+ }
134
+ const currentDropdown = this.dataSource.find(item => item.key === parent)
135
+ const currentClickTarget = currentDropdown.optionList.find(item => item.value === child)
136
+ const { eventName, type, key: currentKey } = currentClickTarget
137
+ //TODO generate event by special rule
138
+ if (type === 'confirm' || type === 'modal-confirm') return
139
+ this.$emit(eventName || currentKey, {
140
+ key: child,
141
+ record: this.record,
142
+ builtInMethods: this.builtInMethods,
143
+ exposed: this.builtInMethods
144
+ })
145
+ },
146
+ handleClickText (props) {
147
+ const { eventName, key } = props
148
+ this.$emit(eventName || key, {
149
+ key,
150
+ record: this.record,
151
+ builtInMethods: this.builtInMethods,
152
+ exposed: this.builtInMethods
153
+ })
154
+ }
155
+ }
156
+ }
157
+ </script>
158
+
159
+ <style lang="scss" scoped>
160
+ .g-table__action {
161
+ display: flex;
162
+ flex-direction: row;
163
+ .table-action__item {
164
+ font-size: 14px;
165
+ color: #409EFF;
166
+ margin-left: 16px;
167
+ cursor: pointer;
168
+ &:first-child {
169
+ margin-left: 0;
170
+ }
171
+ }
172
+ }
104
173
  </style>