@tongfun/tf-widget 0.1.6 → 0.1.10

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 (80) 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 +387 -0
  15. package/lib/tf-widget.common.js +85007 -63712
  16. package/lib/tf-widget.css +1 -1
  17. package/lib/tf-widget.umd.1.js +387 -0
  18. package/lib/tf-widget.umd.js +85007 -63712
  19. package/lib/tf-widget.umd.min.1.js +1 -0
  20. package/lib/tf-widget.umd.min.js +10 -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 +69 -0
  66. package/package/tf-layout/index.js +8 -0
  67. package/package/tf-layout/src/components/tf-labelbar.vue +376 -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/tf-widget/src/children/decimal.vue +15 -16
  73. package/package/tf-widget/src/children/integer.vue +15 -16
  74. package/package.json +4 -2
  75. package/postinstall.js +10 -10
  76. package/src/api/file-enclosure.js +26 -0
  77. package/src/api/push-down.js +19 -0
  78. package/src/api/tableV3.js +186 -0
  79. package/src/index.js +11 -3
  80. package/src/mixins/t-data-query-mixin.js +289 -0
@@ -0,0 +1,324 @@
1
+ <template>
2
+ <div ref="tableRecords" class="table-records">
3
+ <div class="table-wrapper">
4
+ <ux-grid
5
+ ref="dataRecordsRef"
6
+ v-loading="syncData.tableLoading"
7
+ :data="data.records"
8
+ size="mini"
9
+ column-key
10
+ beautify-table
11
+ :show-summary="showSummary && !disableSum"
12
+ :summary-method="summaryMethod"
13
+ :width-resize="true"
14
+ :highlight-current-row="false"
15
+ show-overflow="tooltip"
16
+ @row-click="handleRowClick"
17
+ @select="handleSelect"
18
+ @row-dblclick="handelRowDblClick"
19
+ @select-all="selectAll"
20
+ >
21
+ <ux-table-column :width="50" type="checkbox" fixed="left" />
22
+ <template v-for="(item,index) in layout">
23
+ <ux-table-column
24
+ v-if="item.visible"
25
+ :key="item.field"
26
+ :width="layout.length<8?'': '150'"
27
+ align="center"
28
+ resizable
29
+ :title="item.title"
30
+ :field="item.field"
31
+ >
32
+ <template v-slot:header="{ column }">
33
+ <div class="filter-slot">
34
+ <span class="title">{{ column.title }}</span>
35
+ <TableRecordsHeaderPopover
36
+ :class="{'my-popover':true,'is-show-filter-icon': !!item.isShowIcon || item.isShowFilter }"
37
+ :item="item"
38
+ :upload-data-map="uploadDataMap"
39
+ :table-filter-data="tableFilterData"
40
+ @condition-change="$emit('condition-change', $event)"
41
+ @filter-click="filterClick($event,index)"
42
+ />
43
+ </div>
44
+ </template>
45
+ </ux-table-column>
46
+ </template>
47
+ </ux-grid>
48
+ <TableRecordsSelected
49
+ v-if="isSelector"
50
+ :select-data="selectedRows"
51
+ :show-field="syncData.displayField"
52
+ @del="handleDel"
53
+ @clear="handleClearSelected"
54
+ />
55
+ </div>
56
+
57
+ <!-- 分页 -->
58
+ <div class="page-wrapper">
59
+ <el-pagination
60
+ :current-page="currentPage"
61
+ :page-sizes="[200, 500, 1000, 5000]"
62
+ :page-size="pageSize"
63
+ layout="total, sizes, prev, pager, next, jumper"
64
+ :total="data.total"
65
+ @size-change="$emit('size-change', $event)"
66
+ @current-change="$emit('current-change', $event)"
67
+ />
68
+ </div>
69
+
70
+ </div>
71
+ </template>
72
+ <script>
73
+ import TableRecordsSelected from './table-records-selected'
74
+ export default {
75
+ components: {
76
+ TableRecordsHeaderPopover: () => import('./table-records-header-popover.vue'),
77
+ TableRecordsSelected
78
+ },
79
+ props: {
80
+ data: {
81
+ type: Object,
82
+ default: null
83
+ },
84
+ isSelector: {
85
+ type: Boolean,
86
+ default: false
87
+ },
88
+ layout: {
89
+ type: Array,
90
+ default: () => {
91
+ return []
92
+ }
93
+ },
94
+ sum: {
95
+ type: Array,
96
+ default: () => []
97
+ },
98
+ pageSize: {
99
+ type: Number,
100
+ default: 100
101
+ },
102
+ currentPage: {
103
+ type: Number,
104
+ default: 1
105
+ },
106
+ updateInDialog: {
107
+ type: Boolean,
108
+ default: false
109
+ },
110
+ disableSum: {
111
+ type: Boolean,
112
+ default: false
113
+ }
114
+ },
115
+ inject: ['selectedRows', 'ids', 'syncData', 'getDbRow', 'showSummary', 'queryType'],
116
+ data () {
117
+ return {
118
+ tableFilterData: {}, // 表头过滤条件的数据的存储集合
119
+ uploadDataMap: {}, // 真实向上发送的数据集合
120
+ idField: null,
121
+ filterSelectedId: '',
122
+ isSingleFilter: true,
123
+ displayField: ''
124
+ }
125
+ },
126
+ computed: {
127
+
128
+ },
129
+ watch: {
130
+ layout: {
131
+ handler (newVal) {
132
+ // 初始化绑定tableFilterData
133
+ // 如果tableFilterData有内容则抛出
134
+ if (Object.keys(this.tableFilterData).length !== 0) {
135
+ return
136
+ }
137
+ // 初始化tableFilterData的数据
138
+ newVal.length > 0 && newVal.forEach(e => {
139
+ if (e.isId) this.idField = e.field
140
+ this.$set(this.tableFilterData, e.field, { field: e.field, operator: '', value: '', fieldType: e.componentType })
141
+ })
142
+ },
143
+ immediate: true
144
+ },
145
+ 'data.records': {
146
+ handler (newValue) {
147
+ /**
148
+ * 在列表的情况下,只有提交审核等几个有限的操作,数据刷新不清空已选
149
+ */
150
+ if (this.queryType === 'LIST' && this.syncData.tableSelectionClear) {
151
+ return this.clearSelectedRows()
152
+ }
153
+ this.syncData.tableSelectionClear = true
154
+
155
+ /**
156
+ * 在弹窗的所有情况和列表特殊情况(提交/审核后重新获取数据)
157
+ * 数据刷新后,重新勾选之前已经选择的数据
158
+ */
159
+ const xidList = this.selectedRows.map(item => item.Sid)
160
+ if (!xidList[0]) {
161
+ return
162
+ }
163
+ const currentSelectRows = newValue.filter(item => {
164
+ if (xidList.indexOf(item.Sid) > -1) {
165
+ this.selectedRows[xidList.indexOf(item.Sid)] = item
166
+ return true
167
+ }
168
+ return false
169
+ })
170
+ const params = currentSelectRows.map(x => {
171
+ return { row: x, selected: true }
172
+ })
173
+ this.$refs.dataRecordsRef.toggleRowSelection(params)
174
+ }
175
+ }
176
+ },
177
+ methods: {
178
+ handleClearSelected () {
179
+ this.$refs.dataRecordsRef.clearSelection()
180
+ this.clearSelectedRows()
181
+ },
182
+ filterClick (value, index) {
183
+ if (!this.isSingleFilter) {
184
+ return
185
+ }
186
+ // 重置其他页面的表头过滤显示状态
187
+ if (!value && this.filterSelectedId) {
188
+ this.layout[this.filterSelectedId].isShowFilter = false
189
+ }
190
+ this.filterSelectedId = index
191
+ },
192
+ // 清空已选
193
+ clearSelectedRows () {
194
+ this.selectedRows.splice(0, this.selectedRows.length)
195
+ this.ids.splice(0, this.ids.length)
196
+ },
197
+ // 列表合计
198
+ summaryMethod () {
199
+ return [this.sum]
200
+ },
201
+ handleDel (item) {
202
+ this.selectedRows.splice(this.selectedRows.indexOf(item), 1)
203
+ this.ids.splice(this.ids.indexOf(item.id), 1)
204
+ this.$refs.dataRecordsRef.toggleRowSelection([{ row: item, selected: false }])
205
+ },
206
+ handleRowClick (row) {
207
+ this.$refs.dataRecordsRef.toggleRowSelection([{ row }])
208
+ if (!this.ids.includes(row[this.idField])) {
209
+ this.selectedRows.push(row)
210
+ this.ids.push(row[this.idField])
211
+ } else {
212
+ this.selectedRows.splice(this.selectedRows.indexOf(row), 1)
213
+ this.ids.splice(this.ids.indexOf(row[this.idField]), 1)
214
+ }
215
+ },
216
+ handelRowDblClick (row) {
217
+ // todo:这里判断条件太多,并且条件之间有优先级,将来条件可能冲突
218
+ if (this.isSelector) {
219
+ return this.$emit('fastConfirm', row)
220
+ }
221
+ if (this.updateInDialog) {
222
+ return this.$emit('dbClick', row[this.idField])
223
+ }
224
+ if (this.getDbRow) {
225
+ return this.$emit('dbRowClick', row)
226
+ }
227
+
228
+ const randomStr = Math.random().toString(36).slice(8)
229
+ this.$router.replace(`${this.$route.path}/update/${randomStr}/${row[this.idField]}`)
230
+ },
231
+ selectAll (selection) {
232
+ if (selection.length > 1) {
233
+ // 是全选的处理方式
234
+ const needAddData = this.data.records.filter(e => !this.selectedRows.includes(e))
235
+ needAddData.forEach(e => {
236
+ this.selectedRows.push(e)
237
+ this.ids.push(e[this.idField])
238
+ })
239
+ } else {
240
+ // 非全选的处理方式
241
+ const selectedRowsCache = this.selectedRows.filter(e => !this.data.records.includes(e))
242
+ this.selectedRows.splice(0, this.selectedRows.length)
243
+ this.ids.splice(0, this.ids.length)
244
+ this.selectedRows.push(...selectedRowsCache)
245
+ this.ids.push(...selectedRowsCache.map(v => v[this.idField]))
246
+ }
247
+ },
248
+
249
+ /**
250
+ * 复选框被勾选
251
+ */
252
+ handleSelect (selection, row) {
253
+ if (!this.ids.includes(row[this.idField])) {
254
+ if (selection.includes(row)) {
255
+ this.selectedRows.push(row)
256
+ row[this.idField] && this.ids.push(row[this.idField])
257
+ }
258
+ } else {
259
+ if (!selection.includes(row)) {
260
+ this.selectedRows.splice(this.selectedRows.indexOf(row), 1)
261
+ row[this.idField] && this.ids.splice(this.ids.indexOf(row[this.idField]), 1)
262
+ }
263
+ }
264
+ }
265
+
266
+ }
267
+ }
268
+ </script>
269
+
270
+ <style scoped lang='less'>
271
+ .table-records {
272
+ height:90vh;
273
+ .table-wrapper {
274
+ overflow: hidden;
275
+ display: flex;
276
+ ::v-deep .plTableBox{
277
+ .elx-table--body-wrapper{
278
+ height: calc(90vh - 230px );//修改以适应合计行的添加,
279
+ // margin-bottom: 10px;
280
+ }
281
+ .elx-table--footer-wrapper{
282
+ margin-top: 0px!important;
283
+ }
284
+ .elx-header--column{
285
+ color: #085497;
286
+ transition: opacity 0.5s ease-in;
287
+ .filter-slot{
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: center;
291
+ }
292
+ .my-popover{
293
+ opacity: 0;
294
+ width: 0;
295
+ cursor: pointer;
296
+ transition: all 0.5s ease-out;
297
+ }
298
+ :hover .my-popover{
299
+ width:15px;
300
+ opacity: 1;
301
+ transition: opacity 0.5s ease-in;
302
+ }
303
+ .is-show-filter-icon{
304
+ width:15px;
305
+ opacity: 1;
306
+ }
307
+
308
+ }
309
+ }
310
+ }
311
+ .page-wrapper {
312
+ margin-top:5px;
313
+ position:relative;
314
+ .el-pagination {
315
+ position:absolute;
316
+ right:0;
317
+ }
318
+ }
319
+ }
320
+ ::v-deep .elx-table:not(.is--empty).show--foot.scroll--x .elx-table--body-wrapper{
321
+ overflow-x: hidden !important;
322
+ }
323
+
324
+ </style>
@@ -0,0 +1,101 @@
1
+ <template>
2
+ <div>
3
+ <!-- 分组输入框 -->
4
+ <div class="address">
5
+ <el-cascader
6
+ :value="value"
7
+ :options="options"
8
+ placeholder="选择地址"
9
+ popper-class="t-input-cascader-box"
10
+ separator=""
11
+ :props="{
12
+ value:'name',
13
+ label:'name',
14
+ children:'districts',
15
+ leaf:'leaf',
16
+ lazy:'true',
17
+ lazyLoad:lazyLoad,
18
+ checkStrictly: true
19
+ }"
20
+ filterable
21
+ @input="handleInput"
22
+ />
23
+ </div>
24
+ </div>
25
+ </template>
26
+
27
+ <script>
28
+
29
+ import axios from 'axios'
30
+ import TInputCache from '../tInputCache'
31
+
32
+ export default {
33
+ name: 'Address',
34
+ props: {
35
+ value: {
36
+ type: [String, Object],
37
+ default: null
38
+ }
39
+ },
40
+ data () {
41
+ return {
42
+ options: []
43
+ }
44
+ },
45
+ mounted () {
46
+ this.getAddress()
47
+ },
48
+ methods: {
49
+ lazyLoad (node, resolve) {
50
+ const { data } = node
51
+ resolve(data)
52
+ },
53
+ async getAddress () {
54
+ const tInputDataCache = new TInputCache()
55
+ console.log(tInputDataCache.getCacheData('address'))
56
+ if (tInputDataCache.getCacheData('address')) {
57
+ this.options = tInputDataCache.getCacheData('address')
58
+ return
59
+ }
60
+ // 这边的接口用的自己的key,后期可能会换
61
+ const res = await axios.get('https://restapi.amap.com/v3/config/district?subdistrict=3&key=7f3a1929b7016033782ef2aace13c449')
62
+ if (!res.data) {
63
+ this.$message.error('未查询到数据')
64
+ return
65
+ }
66
+ const optionData = this.setLeaf(res.data.districts[0].districts)
67
+ this.options = optionData
68
+ tInputDataCache.setCacheData('address', optionData)
69
+ },
70
+ setLeaf (data) {
71
+ if (!data || data.length === 0) {
72
+ return
73
+ }
74
+ console.log(data)
75
+ data.forEach(e => {
76
+ e.leaf = true
77
+ if (e.districts.length > 0) {
78
+ e.leaf = false
79
+ this.setLeaf(e.districts)
80
+ }
81
+ })
82
+ return data
83
+ },
84
+ handleInput (value) {
85
+ console.log(value.join(''))
86
+ }
87
+ }
88
+ }
89
+ </script>
90
+ <style lang="less">
91
+ // 更改地址组组件的样式
92
+ .t-input-cascader-box{
93
+ .el-cascader-panel{
94
+ height: 400px;
95
+ ul{
96
+ height: 400px;
97
+ }
98
+ }
99
+ }
100
+
101
+ </style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <el-input disabled :value="displayName" suffix-icon="el-icon-search" />
3
+ </template>
4
+ <script>
5
+ export default {
6
+ components: {
7
+ },
8
+ props: {
9
+ value: {
10
+ type: Object,
11
+ default: function () {
12
+ return { name: null, id: null }
13
+ }
14
+ }
15
+ },
16
+ data () {
17
+ return {
18
+
19
+ }
20
+ },
21
+ computed: {
22
+ displayName () {
23
+ return this.value.name
24
+ }
25
+ },
26
+ created () {
27
+ if (!this.value) {
28
+ this.hanleInput({ name: null, id: null })
29
+ }
30
+ },
31
+ methods: {
32
+ hanleInput (value) {
33
+ this.$emit('input', value)
34
+ }
35
+ }
36
+ }
37
+ </script>
38
+
39
+ <style scoped>
40
+
41
+ </style>
@@ -0,0 +1,251 @@
1
+ <template>
2
+ <div class="basic-input">
3
+ <!-- 输入控件 -->
4
+ <el-autocomplete
5
+ ref="basic"
6
+ v-model="displayValue"
7
+ placeholder=""
8
+ :fetch-suggestions="getAdvice"
9
+ :disabled="disabled"
10
+ popper-class="basic-suggest-poper"
11
+ :trigger-on-focus="false"
12
+ @select="handleSelect"
13
+ @keydown.delete.native="handleDeleteKeyDown"
14
+ >
15
+ <i slot="suffix" class="el-icon-search" style="cursor: pointer" @click="showDialog" />
16
+ <template slot-scope="{item}">
17
+ <div>{{ suggestDisplay(item) }}</div>
18
+ </template>
19
+ </el-autocomplete>
20
+
21
+ <!-- 弹窗数据选择器 -->
22
+ <el-dialog
23
+ :visible.sync="dialogVisible"
24
+ width="80%"
25
+ :append-to-body="appendToBody"
26
+ :close-on-click-modal="false"
27
+ :close-on-press-escape="false"
28
+ :modal-append-to-body="modalAppendToBody"
29
+ @open="getTableData"
30
+ >
31
+ <div class="dataDialog">
32
+ <Ttable
33
+ class="t-table"
34
+ is-selector
35
+ :layout="tableLayout"
36
+ :sum="tableSum"
37
+ :data="tableData"
38
+ enable-group
39
+ :page-size="query.pageSize"
40
+ :current-page="query.pageNum"
41
+ update-in-dialog
42
+ @condition-change="handleHeadChange"
43
+ @groupChange="handleGroupChange"
44
+ @size-change="handleSizeChange"
45
+ @current-change="handleCurrentChange"
46
+ @fastConfirm="handleFastSelect"
47
+ />
48
+ </div>
49
+ <template v-slot:title>
50
+ <div class="common-title">
51
+ <TListSearch class="common-table-buttons-search" @search="handleSuggestMultiCondition($event,true)" />
52
+ </div>
53
+ </template>
54
+ <span slot="footer" class="dialog-footer basic-selector-footer">
55
+ <el-button class="common-header-button close" size="mini" type="primary" @click="dialogVisible = false">取 消</el-button>
56
+ <el-button class="common-header-button" size="mini" type="primary" @click="handleDialogConfirm">确 定</el-button>
57
+ </span>
58
+ </el-dialog>
59
+ </div>
60
+ </template>
61
+ <script>
62
+ import TListSearch from '../../t-data-list/src/t-list-search.vue'
63
+ import Ttable from '../../t-data-list/src/t-table/index'
64
+ import dataQuery from '@/mixins/t-data-query-mixin.js'
65
+ export default {
66
+ components: {
67
+ TListSearch,
68
+ Ttable
69
+ },
70
+ mixins: [dataQuery],
71
+ props: {
72
+ value: {
73
+ type: Object,
74
+ default: () => {
75
+ return { name: '', id: null }
76
+ }
77
+ },
78
+ limitation: {
79
+ type: Object,
80
+ default: () => {}
81
+ },
82
+ disabled: {
83
+ type: Boolean,
84
+ default: false
85
+ },
86
+ appendToBody: {
87
+ type: Boolean,
88
+ default: true
89
+ },
90
+ modalAppendToBody: {
91
+ type: Boolean,
92
+ default: false
93
+ }
94
+ },
95
+ inject: ['target', 'entity'],
96
+ data () {
97
+ return {
98
+ dialogVisible: false,
99
+ // 选中一个基础资料之后,基础资料控件显示的名称
100
+ displayField: null,
101
+ queryType: 'SELECTOR'
102
+ }
103
+ },
104
+ computed: {
105
+ displayValue: {
106
+ set (value) {
107
+ if (this.value.id) {
108
+ return
109
+ }
110
+ this.value.name = value
111
+ },
112
+ get () {
113
+ if (!this.value) {
114
+ return
115
+ }
116
+ return this.value.name
117
+ }
118
+ }
119
+ },
120
+ created () {
121
+ if (this.entity) {
122
+ this.$nextTick(() => {
123
+ this.$refs.basic.focus()
124
+ })
125
+ }
126
+ this.getTableLayout()
127
+ },
128
+ methods: {
129
+ /**
130
+ * 弹窗和数据选择
131
+ */
132
+ // 展开弹窗
133
+ showDialog () {
134
+ if (this.disabled) {
135
+ return
136
+ }
137
+ this.dialogVisible = true
138
+ },
139
+ // 点击弹窗确定按钮
140
+ handleDialogConfirm () {
141
+ if (!this.ids.length) {
142
+ this.dialogVisible = false
143
+ return
144
+ }
145
+
146
+ if (!this.entity && this.ids.length > 1) {
147
+ return this.$message.error('单据头中只能选择一条数据')
148
+ }
149
+
150
+ if (!this.entity) {
151
+ const name = this.selectedRows[0][this.displayField]
152
+ const id = this.ids[0]
153
+ this.$emit('input', { name, id })
154
+ this.$emit('selected', this.selectedRows)
155
+ } else {
156
+ this.$emit('selected', this.selectedRows)
157
+ }
158
+ this.dialogVisible = false
159
+ },
160
+ // 双击选择数据
161
+ handleFastSelect (row) {
162
+ this.$emit('input', { name: row[this.displayField], id: row[this.idField] })
163
+ this.$emit('selected', [row])
164
+ this.dialogVisible = false
165
+ },
166
+ /**
167
+ * 输入框相关逻辑
168
+ */
169
+ // 删除按键处理函数
170
+ handleDeleteKeyDown () {
171
+ if (this.value.id) {
172
+ this.$emit('input', { name: '', id: null })
173
+ this.$emit('delete')
174
+ }
175
+ },
176
+ // 获取搜索建议
177
+ // 此时的搜索建议也需要对限定范围条件进行拼接
178
+ async getAdvice (queryString, callback) {
179
+ let record = []
180
+ if (!/^\s*$/g.test(queryString)) {
181
+ this.handleSuggestMultiCondition(queryString, false)
182
+ record = await this.getTableData(true, false)
183
+ }
184
+ callback(record)
185
+ },
186
+ // 搜索建议的显示格式
187
+ suggestDisplay (item) {
188
+ const valueList = []
189
+ for (const fieldObj of this.suggestFieldList) {
190
+ valueList.push(item[fieldObj.field])
191
+ }
192
+ return valueList.join('/')
193
+ },
194
+ // 搜索建议被选择
195
+ handleSelect (item) {
196
+ const name = item[this.displayField]
197
+ const id = item[this.idField]
198
+ this.$emit('input', { name, id })
199
+ this.$emit('selected', [item])
200
+ }
201
+ }
202
+ }
203
+ </script>
204
+
205
+ <style>
206
+ .basic-suggest-poper {
207
+ width:unset !important;
208
+ }
209
+ </style>
210
+ <style lang="less" scoped>
211
+ .el-autocomplete {
212
+ ::v-deep .el-input__suffix {
213
+ display:flex;
214
+ align-items:center;
215
+ }
216
+ }
217
+
218
+ /deep/.t-table{
219
+ height: 59vh;
220
+ .table-records{
221
+ height: 100%;
222
+ position: relative;
223
+ .plTableBox .elx-table--body-wrapper{
224
+ height: calc(59vh - 80px);
225
+ }
226
+ .el-pagination{
227
+ right: 0;
228
+ }
229
+ }
230
+ }
231
+ /deep/.el-dialog__body{
232
+ padding-top: 0;
233
+ }
234
+
235
+ .basic-selector-footer {
236
+ .el-button {
237
+ background-color: #0A5194;
238
+ border:none;
239
+ }
240
+ }
241
+
242
+ .common-title{
243
+ // background-color: pink;
244
+ display:flex;
245
+ justify-content: right;
246
+ .common-table-buttons-search{
247
+ margin-right:50px;
248
+ }
249
+ }
250
+
251
+ </style>