@tongfun/tf-widget 0.1.7 → 0.1.11

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 (78) hide show
  1. package/.browserslistrc +3 -3
  2. package/.editorconfig +5 -5
  3. package/.eslintrc.js +17 -17
  4. package/README.md +39 -8
  5. package/dist/css/chunk-9c7a8e06.920744ef.css +1 -0
  6. package/dist/css/chunk-vendors.de967301.css +1 -0
  7. package/dist/css/index.153bd82e.css +1 -0
  8. package/dist/fonts/element-icons.535877f5.woff +0 -0
  9. package/dist/fonts/element-icons.732389de.ttf +0 -0
  10. package/dist/js/chunk-9c7a8e06.ffff58b5.js +1 -0
  11. package/dist/js/chunk-vendors.45086d09.js +39 -0
  12. package/dist/js/index.52bcef0d.js +1 -0
  13. package/lib/css/1.920744ef.css +1 -0
  14. package/lib/tf-widget.common.1.js +395 -0
  15. package/lib/tf-widget.common.js +88426 -63173
  16. package/lib/tf-widget.css +1 -1
  17. package/lib/tf-widget.umd.1.js +395 -0
  18. package/lib/tf-widget.umd.js +88425 -63172
  19. package/lib/tf-widget.umd.min.1.js +1 -0
  20. package/lib/tf-widget.umd.min.js +19 -3
  21. package/package/t-data-list/index.js +6 -0
  22. package/package/t-data-list/main.vue +192 -0
  23. package/package/t-data-list/src/condition-input/basic.vue +31 -0
  24. package/package/t-data-list/src/condition-input/date.vue +106 -0
  25. package/package/t-data-list/src/condition-input/index.vue +100 -0
  26. package/package/t-data-list/src/condition-input/input.vue +31 -0
  27. package/package/t-data-list/src/condition-input/number.vue +115 -0
  28. package/package/t-data-list/src/condition-input/select.vue +86 -0
  29. package/package/t-data-list/src/js/fieldTypeEnum.js +10 -0
  30. package/package/t-data-list/src/js/operatorEnum.js +109 -0
  31. package/package/t-data-list/src/js/qureyParamsEnum.js +4 -0
  32. package/package/t-data-list/src/js/util.js +34 -0
  33. package/package/t-data-list/src/mixins/button-controll-mixin.js +77 -0
  34. package/package/t-data-list/src/pushdown/push-down.vue +158 -0
  35. package/package/t-data-list/src/t-list-search.vue +32 -0
  36. package/package/t-data-list/src/t-plan/condition-always-item.vue +143 -0
  37. package/package/t-data-list/src/t-plan/condition-mult-item.vue +222 -0
  38. package/package/t-data-list/src/t-plan/index.vue +190 -0
  39. package/package/t-data-list/src/t-plan/plan-content.vue +396 -0
  40. package/package/t-data-list/src/t-table/index.vue +120 -0
  41. package/package/t-data-list/src/t-table/table-group-item-edit.vue +238 -0
  42. package/package/t-data-list/src/t-table/table-group-item.vue +87 -0
  43. package/package/t-data-list/src/t-table/table-group.vue +179 -0
  44. package/package/t-data-list/src/t-table/table-records-header-popover.vue +250 -0
  45. package/package/t-data-list/src/t-table/table-records-selected.vue +159 -0
  46. package/package/t-data-list/src/t-table/table-records.vue +324 -0
  47. package/package/t-input/children/address.vue +101 -0
  48. package/package/t-input/children/basic-display.vue +41 -0
  49. package/package/t-input/children/basic.vue +251 -0
  50. package/package/t-input/children/date.vue +89 -0
  51. package/package/t-input/children/group-components/group-dialog.vue +350 -0
  52. package/package/t-input/children/group.vue +126 -0
  53. package/package/t-input/children/input.vue +72 -0
  54. package/package/t-input/children/number.vue +74 -0
  55. package/package/t-input/children/select.vue +89 -0
  56. package/package/t-input/children/tfile/fiile-enclosure.vue +233 -0
  57. package/package/t-input/children/tfile/file-img/comp.png +0 -0
  58. package/package/t-input/children/tfile/file-img/excel.png +0 -0
  59. package/package/t-input/children/tfile/file-img/img.png +0 -0
  60. package/package/t-input/children/tfile/file-img/pdf.png +0 -0
  61. package/package/t-input/children/tfile/file-img/word.png +0 -0
  62. package/package/t-input/index.js +7 -0
  63. package/package/t-input/index.vue +337 -0
  64. package/package/t-input/tInputCache.js +24 -0
  65. package/package/tf-layout/README.md +115 -0
  66. package/package/tf-layout/index.js +8 -0
  67. package/package/tf-layout/src/components/tf-labelbar.vue +378 -0
  68. package/package/tf-layout/src/components/tf-menu.vue +180 -0
  69. package/package/tf-layout/src/components/tf-right-menu.vue +89 -0
  70. package/package/tf-layout/src/components/tf-rotate-box.vue +50 -0
  71. package/package/tf-layout/src/tf-layout.vue +115 -0
  72. package/package.json +4 -2
  73. package/postinstall.js +10 -10
  74. package/src/api/file-enclosure.js +26 -0
  75. package/src/api/push-down.js +19 -0
  76. package/src/api/tableV3.js +186 -0
  77. package/src/index.js +11 -3
  78. package/src/mixins/t-data-query-mixin.js +289 -0
@@ -0,0 +1,250 @@
1
+ <template>
2
+ <!-- 排序的提示插件 -->
3
+ <div>
4
+ <el-popover
5
+
6
+ :value="item.isShowFilter"
7
+ width="200"
8
+ trigger="manual"
9
+ placement="bottom"
10
+ >
11
+ <!-- 单选内容 -->
12
+ <div v-if="getFieldType !=='enum' && item.isShowFilter" v-clickoutside="handleClickOut" class="radio-context">
13
+ <div class="context-list">
14
+ <div
15
+ v-for="radioItem in getOperatorEnumList"
16
+ :key="radioItem.value"
17
+ :class="{'list-item':true, 'list-item-active':radioItem.value === tableFilterData[item.field].operator}"
18
+ @click="handleFilterRadioClick(radioItem)"
19
+ >
20
+ <div class="list-text">{{ radioItem.label }}</div>
21
+ <div class="list-icon">
22
+ <i v-show="radioItem.value === tableFilterData[item.field].operator" class="el-icon-check" />
23
+ </div>
24
+
25
+ </div>
26
+ </div>
27
+ <div class="context-list header-input">
28
+ <ConditionInput
29
+ v-show="item.selectItem && !item.selectItem.over"
30
+ v-model="tableFilterData[item.field].value"
31
+ :type="getFieldType"
32
+ :field="item.field"
33
+ :table-head="true"
34
+ :multi="item.selectItem && item.selectItem.multi"
35
+ :range="item.selectItem && item.selectItem.range"
36
+ />
37
+ </div>
38
+ <div class="context-list">
39
+ <el-button size="mini" @click="handleCancelConditionChange">取消</el-button>
40
+ <el-button size="mini" @click="handleResetConditionChange">重置</el-button>
41
+ <el-button type="primary" size="mini" @click="handleConditionChange">确定</el-button>
42
+ </div>
43
+ </div>
44
+ <!-- 多选内容 -->
45
+ <!-- 页面中添加v-if item.isShowFilter来判断防止页面卡顿 -->
46
+ <div v-else-if="item.isShowFilter" v-clickoutside="handleClickOut" class="menu-context">
47
+ <div class="context-list">
48
+ <div
49
+ v-for="option in item.options"
50
+ :key="option.enumId"
51
+ :class="{'list-item':true, 'list-item-active':tableFilterData[item.field].value.includes(option.enumId)}"
52
+ @click="handleFilterRadioClick(option.enumId)"
53
+ >
54
+ <div class="list-text">{{ option.name }}</div>
55
+ <div class="list-icon">
56
+ <i v-show="tableFilterData[item.field].value.includes(option.enumId)" class="el-icon-check" />
57
+ </div>
58
+
59
+ </div>
60
+ </div>
61
+ <div class="context-list">
62
+ <el-button size="mini" @click="handleCancelConditionChange">取消</el-button>
63
+ <el-button size="mini" @click="handleResetConditionChange">清除</el-button>
64
+ <el-button type="primary" size="mini" @click="handleConditionChange">确定</el-button>
65
+ </div>
66
+ </div>
67
+ <SvgIcon
68
+ slot="reference"
69
+ class="filter-icon"
70
+ icon-class="filter"
71
+ style=""
72
+ @mouseup.stop="handleFilterClick"
73
+ />
74
+
75
+ </el-popover>
76
+ </div>
77
+ </template>
78
+ <script>
79
+ import ConditionInput from '../condition-input'
80
+ import getOperatorOption from '../js/operatorEnum'
81
+ import fieldTypeEnum from '../js/fieldTypeEnum'
82
+ import { getEnumOptions } from '@/api/tableV3.js'
83
+ import Clickoutside from 'element-ui/src/utils/clickoutside'
84
+
85
+ export default {
86
+ components: {
87
+ ConditionInput
88
+ },
89
+ inject: ['target', 'enumOptionCache'],
90
+ directives: { Clickoutside },
91
+ props: {
92
+ item: {
93
+ type: Object,
94
+ default: () => {}
95
+ },
96
+ tableFilterData: {
97
+ type: Object,
98
+ default: () => {}
99
+ },
100
+ uploadDataMap: {
101
+ type: Object,
102
+ default: () => {}
103
+ }
104
+ },
105
+ computed: {
106
+ // 获取枚举列表
107
+ getOperatorEnumList () {
108
+ return getOperatorOption(fieldTypeEnum[this.item.componentValueType])
109
+ },
110
+ // 获取类型
111
+ getFieldType () {
112
+ return fieldTypeEnum[this.item.componentValueType]
113
+ }
114
+ },
115
+ created () {
116
+ this.getFieldType === 'enum' && this.getOptions()
117
+ },
118
+ methods: {
119
+ handleClickOut (...e) {
120
+ if (this.item.isShowFilter === true) {
121
+ this.item.isShowFilter = false
122
+ }
123
+ },
124
+ async getOptions () {
125
+ if (this.enumOptionCache[this.item.field]) {
126
+ this.item.options = this.enumOptionCache[this.item.field]
127
+ return
128
+ }
129
+ const res = await getEnumOptions(this.target, this.item.field)
130
+ if (res.code !== 0) {
131
+ return this.$message.error(res.msg)
132
+ }
133
+
134
+ this.item.options = res.data
135
+ this.enumOptionCache[this.item.field] = res.data
136
+ },
137
+
138
+ // 单击一条数据
139
+ handleFilterRadioClick (radioItem) {
140
+ if (this.getFieldType === 'enum') {
141
+ this.tableFilterData[this.item.field].operator = 'ENUM_IN'
142
+ this.tableFilterData[this.item.field].value.includes(',') && (this.tableFilterData[this.item.field].value = this.tableFilterData[this.item.field].value.split(','))
143
+ const set = new Set(this.tableFilterData[this.item.field].value)
144
+ set.has(radioItem) ? set.delete(radioItem) : set.add(radioItem)
145
+ this.tableFilterData[this.item.field].value = Array.from(set)
146
+ return
147
+ }
148
+ this.$set(this.item, 'selectItem', radioItem)
149
+ this.tableFilterData[this.item.field].operator = radioItem.value
150
+ },
151
+
152
+ // 取消过滤条件查询(数据还在,但是不参与正式的查询)
153
+ handleCancelConditionChange () {
154
+ this.item.isShowFilter = false
155
+ },
156
+
157
+ // 重置过滤条件
158
+ handleResetConditionChange () {
159
+ // 清空当前页面的内容
160
+ Object.keys(this.tableFilterData[this.item.field]).forEach(e => {
161
+ if (e === 'field') {
162
+ return
163
+ }
164
+ this.tableFilterData[this.item.field][e] = ''
165
+ })
166
+ // 删除对象中的相关属性
167
+ delete this.uploadDataMap[this.item.field]
168
+ delete this.item.selectItem
169
+ this.$set(this.item, 'isShowIcon', false)
170
+ this.sendUploadData()
171
+
172
+ this.item.isShowFilter = false
173
+ },
174
+ // 提交过滤条件进行查询
175
+ handleConditionChange () {
176
+ if (this.getFieldType === 'enum') {
177
+ if (!this.tableFilterData[this.item.field].operator) {
178
+ return this.$message.error(`请选择${this.item.title}的条件`)
179
+ }
180
+ } else {
181
+ if (!this.tableFilterData[this.item.field].operator) {
182
+ return this.$message.error(`请选择${this.item.title}的条件`)
183
+ }
184
+ if (!this.item.selectItem.over && !this.tableFilterData[this.item.field].value) {
185
+ return this.$message.error(`请输入${this.item.title}的值`)
186
+ }
187
+ }
188
+ if (this.tableFilterData[this.item.field].value instanceof Array) {
189
+ this.tableFilterData[this.item.field].value = this.tableFilterData[this.item.field].value.join(',')
190
+ }
191
+ this.$set(this.uploadDataMap, this.item.field, JSON.parse(JSON.stringify(this.tableFilterData[this.item.field])))
192
+ // this.uploadDataMap[item.field] = data
193
+ this.sendUploadData()
194
+ this.$set(this.item, 'isShowIcon', true)
195
+ this.item.isShowFilter = false
196
+ },
197
+ // 发送事件
198
+ sendUploadData () {
199
+ const uploadData = []
200
+ Object.values(this.uploadDataMap).forEach(e => {
201
+ uploadData.push(e)
202
+ })
203
+ this.$emit('condition-change', uploadData)// 向上发送数据
204
+ },
205
+ // 控制过滤条件的显示的隐藏
206
+ handleFilterClick () {
207
+ this.$emit('filter-click', this.item.isShowFilter)
208
+ this.$set(this.item, 'isShowFilter', !this.item.isShowFilter)
209
+ }
210
+ }
211
+ }
212
+ </script>
213
+ <style lang="less" scoped>
214
+ .el-popover{
215
+ .context-list{
216
+ .list-item{
217
+ display: flex;
218
+ margin: 1px 0;
219
+ padding: 2px 8px;
220
+ justify-content: space-between;
221
+ &:hover{
222
+ background-color: rgb(231, 235, 253);
223
+ }
224
+ }
225
+ .list-item-active{
226
+ color: rgb(59, 104, 252);
227
+ background-color: rgb(231, 235, 253);
228
+ }
229
+ /deep/.el-input .el-input__inner{
230
+ height: 30px;
231
+ }
232
+ &:last-child{
233
+ margin-top: 4px;
234
+ width: 100%;
235
+ display: flex;
236
+ justify-content: space-between;
237
+ }
238
+ }
239
+ .header-input{
240
+ margin-top:5px;
241
+ }
242
+ .filter-icon{
243
+ outline: none;
244
+ width: 15px;
245
+ height: 15px;
246
+ cursor: pointer;
247
+ }
248
+ }
249
+
250
+ </style>
@@ -0,0 +1,159 @@
1
+ <template>
2
+ <div class="main">
3
+ <div :class="{'tips':true,'selected':visible.context}">
4
+ <transition name="fade">
5
+ <div v-show="selectData.length>0" class="select" @click.stop="handleClick">
6
+ <div class="title">已选</div>
7
+ <div class="num">{{ selectData.length > 99 ? "99+" : selectData.length }} </div>
8
+ </div>
9
+ </transition>
10
+
11
+ <transition name="fade">
12
+ <div v-show="visible.context && selectData.length > 0" class="context">
13
+ <el-scrollbar>
14
+ <div v-for="(item, index) in selectData" :key="index" class="context-item">
15
+ <div class="title">
16
+ {{ item[showField] }}
17
+ </div>
18
+ <i class="el-icon-delete hidden" @click="handleDel(item)" />
19
+ </div>
20
+ </el-scrollbar>
21
+ <div>
22
+ <el-button type="primary" size="mini" @click="handleClear">清空</el-button>
23
+ </div>
24
+ </div>
25
+
26
+ </transition>
27
+ </div>
28
+ </div>
29
+ </template>
30
+ <script>
31
+ export default {
32
+ props: {
33
+ selectData: {
34
+ type: Array,
35
+ default: () => {
36
+ return []
37
+ }
38
+ },
39
+ showField: {
40
+ type: String,
41
+ default: 'name'
42
+ }
43
+ },
44
+ data () {
45
+ return {
46
+ visible: {
47
+ context: false// 内容盒子展示
48
+ }
49
+ }
50
+ },
51
+ methods: {
52
+ handleClick () {
53
+ this.visible.context = !this.visible.context
54
+ },
55
+ handleDel (value) {
56
+ this.$emit('del', value)
57
+ },
58
+ handleClear () {
59
+ this.$emit('clear')
60
+ }
61
+ }
62
+ }
63
+ </script>
64
+ <style lang="less" scoped>
65
+ @contextHeight:40vh;
66
+ .main{
67
+ position: relative;
68
+ .tips{
69
+ top: 40px;
70
+ left: -40px;
71
+ position: absolute;
72
+ display: flex;
73
+ transition: all .6s ease-in-out;
74
+ .select{
75
+ cursor: pointer;
76
+ padding: 5px;
77
+ display: flex;
78
+ flex-direction: column;
79
+ background-color: #fff;
80
+ border: 1px solid rgb(228, 226, 226);
81
+ border-right: 0;
82
+ height: 80px;
83
+ align-items: center;
84
+ .title{
85
+ margin: 10px 0;
86
+ writing-mode: vertical-lr;
87
+ }
88
+ .num{
89
+ width: 30px;
90
+ height: 30px;
91
+ color: #fff;
92
+ background-color: rgb(121, 156, 255);
93
+ border-radius: 15px;
94
+ display: flex;
95
+ justify-content: center;
96
+ align-items: center;
97
+ }
98
+ }
99
+ .context{
100
+ width: 20vw;
101
+ border: 2px solid rgb(228, 226, 226);
102
+ height: calc(40px+@contextHeight);
103
+ background-color: #fff;
104
+ >:nth-child(2){
105
+ height: 40px;
106
+ display: flex;
107
+ padding-right: 10px;
108
+ justify-content: flex-end;
109
+ align-items: center;
110
+ .el-button {
111
+ background-color: #085699;
112
+ border:none;
113
+ }
114
+ }
115
+ >:nth-child(1){
116
+ height: @contextHeight;
117
+ }
118
+ .context-item{
119
+ .title{
120
+ width:100%;
121
+ margin-left:20px;
122
+ box-sizing: border-box;
123
+ padding: 5px;
124
+ white-space: nowrap;
125
+ overflow: hidden;
126
+ text-overflow: ellipsis;
127
+ }
128
+ cursor: pointer;
129
+ height: 25px;
130
+ margin: 0 0 2px 0;
131
+ background-color: rgb(255, 255, 255);
132
+ display: flex;
133
+ justify-content: space-between;
134
+ align-items: center;
135
+ .hidden{
136
+ display: none;
137
+ margin-right: 10px;
138
+ }
139
+ &:hover .hidden{
140
+ display: inline-block;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ .selected{
146
+ left: calc(-40px - 20vw);
147
+ }
148
+ }
149
+
150
+ /deep/.el-scrollbar__wrap{
151
+ overflow-x: auto;
152
+ }
153
+ .fade-enter-active, .fade-leave-active {
154
+ transition: opacity .5s;
155
+ }
156
+ .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
157
+ opacity: 0;
158
+ }
159
+ </style>