@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,89 @@
1
+ <template>
2
+ <el-date-picker
3
+ ref="date"
4
+ class="date"
5
+ :value="value"
6
+ :type="type"
7
+ :placeholder="placeholderComp"
8
+ :disabled="disabled"
9
+ :format="timeFormmat"
10
+ value-format="yyyy-MM-dd HH:mm:ss"
11
+ style="width:100%"
12
+ @input="handleInput"
13
+ />
14
+ </template>
15
+ <script>
16
+ export default {
17
+ components: {
18
+
19
+ },
20
+ props: {
21
+ value: {
22
+ type: String,
23
+ default: null
24
+ },
25
+ disabled: {
26
+ type: Boolean,
27
+ default: false
28
+ }
29
+ },
30
+ inject: ['placeholder', 'datetime', 'entity'],
31
+ data () {
32
+ return {
33
+
34
+ }
35
+ },
36
+ computed: {
37
+ type () {
38
+ if (this.datetime) {
39
+ return 'datetime'
40
+ }
41
+ return 'date'
42
+ },
43
+ timeFormmat () {
44
+ if (this.datetime) {
45
+ return 'yyyy-MM-dd HH:mm:ss'
46
+ }
47
+ return 'yyyy-MM-dd'
48
+ },
49
+ placeholderComp () {
50
+ if (!this.placeholder) {
51
+ if (this.datetime) {
52
+ return '请输入日期时间'
53
+ }
54
+ return '请输入日期'
55
+ }
56
+ return this.placeholder
57
+ }
58
+ },
59
+ mounted () {
60
+ if (this.entity) {
61
+ this.$refs.date.focus()
62
+ }
63
+ },
64
+ created () {
65
+ if (!this.value) {
66
+ this.handleInput(null)
67
+ }
68
+ },
69
+ methods: {
70
+ handleInput (value) {
71
+ this.$emit('input', value)
72
+ }
73
+ }
74
+ }
75
+ </script>
76
+
77
+ <style scoped lang='less'>
78
+ .date {
79
+ ::v-deep .el-icon-date:before {
80
+ content: "\e78e";
81
+ font-size: 16px;
82
+ position: absolute;
83
+ right: 0% !important;
84
+ }
85
+ ::v-deep .el-icon-date{
86
+ width: 20px;
87
+ }
88
+ }
89
+ </style>
@@ -0,0 +1,350 @@
1
+ <template>
2
+ <div class="main">
3
+ <!-- 分组选择主弹窗 -->
4
+ <el-dialog
5
+ :visible="visible"
6
+ class="group-display"
7
+ width="30%"
8
+ title="分组选择"
9
+ @update:visible="handleUpdateVisible"
10
+ @open="handleOpen"
11
+ >
12
+ <div class="dataDialog">
13
+ <div class="dialog-header">
14
+ <el-input v-model="searchText" placeholder="搜索关键字" />
15
+ </div>
16
+ <div class="dialog-body">
17
+ <el-scrollbar class="scrollbar">
18
+ <el-tree
19
+ ref="groupTree"
20
+ :data="groupList"
21
+ :show-checkbox="false"
22
+ node-key="id"
23
+ highlight-current
24
+ :expand-on-click-node="false"
25
+ check-on-click-node
26
+ accordion
27
+ :props="defaultProps"
28
+ :filter-node-method="filterNode"
29
+ :check-strictly="true"
30
+ @check="handleNodeChange"
31
+ />
32
+ </el-scrollbar>
33
+ </div>
34
+ </div>
35
+ <span slot="footer" class="dialog-footer">
36
+ <el-button type="primary" size="mini" @click="openOperateDialog('insert')">新建分组</el-button>
37
+ <el-button type="primary" size="mini" @click="openOperateDialog('update')">编辑分组</el-button>
38
+ <el-button type="primary" size="mini" @click="handleCloseDialog">取 消</el-button>
39
+ <el-button type="primary" size="mini" @click="handleDialogConfirm">确 定</el-button>
40
+ </span>
41
+ </el-dialog>
42
+ <!-- 新建/编辑页面 -->
43
+ <el-dialog
44
+ title=""
45
+ :visible.sync="operatingVisible"
46
+ width="30%"
47
+ @open="handleOpenOperate"
48
+ @close="handleCloseOperate"
49
+ >
50
+ <div>
51
+ <el-form ref="form" :rules="rules" :model="operatingData" label-width="80px">
52
+ <el-form-item label="父级名称" prop="pid">
53
+ <el-select v-model="operatingData.pid" placeholder="" @change="handleParentSelect">
54
+ <el-option
55
+ v-for="item in selectList"
56
+ :key="item.id"
57
+ :label="item.name"
58
+ :value="item.id"
59
+ />
60
+ </el-select>
61
+ </el-form-item>
62
+ <el-form-item label="父级编码" prop="code">
63
+ <el-input v-model="operatingData.groupCode" placeholder="" disabled />
64
+ </el-form-item>
65
+ <el-form-item label="编码" prop="code">
66
+ <el-input v-model="operatingData.code" placeholder="" />
67
+ </el-form-item>
68
+ <el-form-item label="分组名称" prop="name">
69
+ <el-input v-model="operatingData.name" placeholder="" />
70
+ </el-form-item>
71
+ </el-form>
72
+ </div>
73
+ <div slot="footer">
74
+ <el-button @click="operatingVisible = false">取 消</el-button>
75
+ <el-button type="primary" @click="handleSubmitOperate">确 定</el-button>
76
+ </div>
77
+ </el-dialog>
78
+ </div>
79
+ </template>
80
+ <script>
81
+ import { addGroupNode, updateGroupNode } from '@/api/tableV3'
82
+ export default {
83
+ name: 'GroupDialog',
84
+ props: {
85
+ data: {
86
+ type: Array,
87
+ default: () => {
88
+ return []
89
+ }
90
+ },
91
+ visible: {
92
+ type: Boolean,
93
+ default: true
94
+ },
95
+ value: {
96
+ type: Object,
97
+ default: () => {
98
+ return {}
99
+ }
100
+ }
101
+ },
102
+ inject: ['target'],
103
+ data () {
104
+ var checkBlank = (rule, value, callback) => {
105
+ const reg = /\s+/g
106
+ if (reg.test(value)) {
107
+ return callback(new Error('不能含有空格'))
108
+ }
109
+ callback()
110
+ }
111
+ return {
112
+ searchText: '',
113
+ selectNode: {},
114
+ defaultProps: {
115
+ children: 'children',
116
+ label: 'name'
117
+ },
118
+ rules: {
119
+ name: [
120
+ { required: true, message: '不能为空', trigger: 'blur' },
121
+ { validator: checkBlank, trigger: 'blur' }
122
+ ],
123
+ code: [
124
+ { required: true, message: '不能为空', trigger: 'blur' }
125
+ ],
126
+ pid: [
127
+ { required: true, message: '不能为空', trigger: 'blur' }
128
+ ]
129
+ },
130
+ // selectList: [],
131
+ operatingVisible: false,
132
+ operatingStatus: 'insert', // 新增编辑弹窗的状态标识
133
+ operatingData: {
134
+ groupCode: '', // 分组编码
135
+ code: '', // 节点编码
136
+ id: '', // 节点id(编辑的时候存在)
137
+ name: '', // 节点名称
138
+ pid: ''// 父级id
139
+ }
140
+
141
+ }
142
+ },
143
+ computed: {
144
+ groupList () {
145
+ let list = []
146
+ if (this.data && this.data[0]) {
147
+ list = this.data[0]
148
+ }
149
+ // todo: 下面的方式eslint报错,而且下面的是啥逻辑啊,需要追踪数据后确定
150
+ // return this.data[0] && this.data || []
151
+ return list
152
+ },
153
+ selectMap () {
154
+ return this.createSelectMap(this.data)
155
+ },
156
+ selectList () {
157
+ return Object.values(this.selectMap)
158
+ }
159
+ },
160
+ watch: {
161
+ searchText (val) {
162
+ this.$refs.groupTree.filter(val)
163
+ },
164
+ selectMap () {
165
+ this.operatingVisible && this.updateGroupStatus()
166
+ }
167
+ },
168
+ methods: {
169
+ // 打开编辑弹窗前进行必要的校验
170
+ openOperateDialog (mod) {
171
+ if (!this.selectNode.id) {
172
+ return this.$message.error('请先选择节点')
173
+ }
174
+ this.operatingStatus = mod
175
+ if (this.operatingStatus === 'update' && this.selectNode.id === '0') {
176
+ return this.$message.error('根节点不可编辑')
177
+ }
178
+ this.operatingVisible = true
179
+ },
180
+ // 打开弹窗进行的操作
181
+ handleOpen () {
182
+ this.$nextTick(() => {
183
+ if (this.value && this.value.id) {
184
+ this.$refs.groupTree.setCheckedKeys([this.value.id])
185
+ this.$refs.groupTree.setCurrentKey(this.value.id)
186
+ this.updateGroupStatus()
187
+ this.handleNodeChange(this.selectMap[this.value.id])
188
+ }
189
+ })
190
+ },
191
+ // 更新展开状态
192
+ updateGroupStatus () {
193
+ this.$nextTick(() => {
194
+ const id = this.selectNode.id || this.value.id
195
+ if (id) {
196
+ this.$refs.groupTree.setCurrentKey(id)
197
+ this.expandedNode(id)
198
+ }
199
+ })
200
+ },
201
+ expandedNode (id, temp = false) {
202
+ if (temp && this.$refs.groupTree.store.nodesMap[id]) {
203
+ this.$refs.groupTree.store.nodesMap[id].expanded = true
204
+ }
205
+
206
+ if (this.selectMap[id].pid) {
207
+ this.expandedNode(this.selectMap[id].pid, true)
208
+ }
209
+ },
210
+ // 创建数据的map集合(id:{})
211
+ createSelectMap (data, map, parentData = {}) {
212
+ const dataCache = data || this.data
213
+ const result = map || {}
214
+ dataCache.forEach(e => {
215
+ if (e.id) {
216
+ result[e.id] = { id: e.id, name: e.name, groupCode: e.groupCode, pid: parentData.id || '' }
217
+ }
218
+ e.children && this.createSelectMap(e.children, result, e)
219
+ })
220
+ if (!map) return result
221
+ },
222
+ // 节点过滤
223
+ filterNode (value, data) {
224
+ if (!value) return true
225
+ return data.name.indexOf(value) !== -1
226
+ },
227
+ // 节点选中
228
+ handleNodeChange (data) {
229
+ // console.log(this.$refs.groupTree)
230
+ this.$refs.groupTree.setCheckedKeys([data.id])
231
+ this.selectNode = data
232
+ },
233
+ // dialog确认
234
+ handleDialogConfirm () {
235
+ this.$emit('confirm', { id: this.selectNode.id, name: this.selectNode.name })
236
+ this.handleCloseDialog()
237
+ },
238
+ // 关闭主dialog
239
+ handleCloseDialog () {
240
+ this.$emit('update:visible', false)
241
+ },
242
+ // 更新dialog
243
+ handleUpdateVisible (val) {
244
+ this.$emit('update:visible', val)
245
+ },
246
+ // 赋值
247
+ handleParentSelect (id, field = 'groupCode') {
248
+ this.operatingData[field] = this.selectMap[id][field]
249
+ },
250
+ // 打开操作界面
251
+ handleOpenOperate () { // 打开操作界面
252
+ if (this.operatingStatus === 'insert') {
253
+ this.operatingData.pid = this.selectNode.id
254
+ this.handleParentSelect(this.selectNode.id)
255
+ }
256
+ if (this.operatingStatus === 'update') {
257
+ const id = this.selectMap[this.selectNode.id].pid
258
+ this.operatingData.pid = id
259
+ const groupCodeList = this.selectNode.groupCode.split('.')
260
+ this.operatingData.code = groupCodeList[groupCodeList.length - 1]
261
+ this.handleParentSelect(id)
262
+ this.handleParentSelect(this.selectNode.id, 'name')
263
+ }
264
+ },
265
+ // 关闭弹窗
266
+ handleCloseOperate () {
267
+ this.$refs.form.clearValidate()
268
+ Object.keys(this.operatingData).forEach(e => {
269
+ this.operatingData[e] = ''
270
+ })
271
+ },
272
+ // 提交操作信息
273
+ handleSubmitOperate () {
274
+ this.$refs.form.validate(success => {
275
+ if (success) {
276
+ this.operatingStatus === 'insert'
277
+ ? this.updateGroup(addGroupNode, '添加成功')
278
+ : this.updateGroup(updateGroupNode, '修改成功')
279
+ }
280
+ })
281
+ },
282
+ async updateGroup (fun, msg) {
283
+ const groupCode = this.operatingData.groupCode
284
+ ? this.operatingData.groupCode + '.' + this.operatingData.code
285
+ : this.operatingData.code
286
+ const res = await fun(
287
+ this.target,
288
+ this.operatingData.name,
289
+ this.operatingStatus === 'insert' ? '' : this.selectNode.id,
290
+ this.operatingData.pid,
291
+ groupCode)
292
+
293
+ if (res.code !== 0) {
294
+ return this.$message.error(res.msg)
295
+ }
296
+ this.$emit('success')
297
+ // 如果修改到当前节点的更新操作
298
+ if (this.selectNode.id === this.value.id) {
299
+ this.selectNode.name = this.operatingData.name
300
+ this.$emit('confirm', { id: this.value.id, name: this.operatingData.name })
301
+ }
302
+ this.$message.success(msg)
303
+ this.operatingVisible = false
304
+ }
305
+ }
306
+ }
307
+ </script>
308
+ <style lang="less" scoped>
309
+ /**
310
+ 列表弹窗
311
+ */
312
+ .group-display{
313
+ ::v-deep .el-dialog__body {
314
+ padding-top:0 !important;
315
+ }
316
+ ::v-deep .el-dialog__footer {
317
+ .el-button {
318
+ background-color: #07599C;
319
+ border:none;
320
+ }
321
+ }
322
+ }
323
+
324
+ .dataDialog{
325
+ height: 50vh;
326
+ .dialog-header{
327
+ width: 100%;
328
+ height: 40px;
329
+ box-sizing: border-box;
330
+ padding: 5px;
331
+ padding-top:0px;
332
+ ::v-deep .el-input__inner {
333
+ height:30px;
334
+ width: 100% !important;
335
+ }
336
+ }
337
+ .dialog-body{
338
+ height: 100%;
339
+ .scrollbar{
340
+ height: 100%;
341
+ /deep/.el-scrollbar__wrap{
342
+ overflow-x: hidden;
343
+ }
344
+ }
345
+ }
346
+ }
347
+ .el-form-item{
348
+ margin-top: 20px;
349
+ }
350
+ </style>
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <div>
3
+ <!-- 输入控件 -->
4
+ <el-autocomplete
5
+ ref="group"
6
+ v-model="showValue"
7
+ placeholder=""
8
+ :fetch-suggestions="getAdvice"
9
+ :disabled="disabled"
10
+ :trigger-on-focus="false"
11
+ @select="handleSelect"
12
+ @blur="handleBlur"
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>{{ item.name }}</div>
18
+ </template>
19
+ </el-autocomplete>
20
+
21
+ <!-- 弹窗数据选择器 -->
22
+ <GroupDialog
23
+ ref="groupDialog"
24
+ :value="value"
25
+ :data="options"
26
+ :visible.sync="dialogVisible"
27
+ @confirm="handleConfig"
28
+ @success="handleSuccess"
29
+ />
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import { getGroupTree } from '@/api/tableV3.js'
35
+ import GroupDialog from '../children/group-components/group-dialog.vue'
36
+ // 使用该组件必穿一个target
37
+
38
+ export default {
39
+ name: 'Group',
40
+ components: {
41
+ GroupDialog
42
+ },
43
+ props: {
44
+ value: {
45
+ type: Object,
46
+ default: null
47
+ },
48
+ disabled: {
49
+ type: Boolean,
50
+ default: false
51
+ }
52
+ },
53
+ inject: ['target'],
54
+ data () {
55
+ return {
56
+ options: [],
57
+ dialogVisible: false,
58
+ groupList: []
59
+ }
60
+ },
61
+ computed: {
62
+ showValue: {
63
+ get: function () {
64
+ return this.value ? this.value.name : ''
65
+ },
66
+ set: function (newVal) {
67
+ this.$emit('input', { id: '', name: newVal })
68
+ }
69
+ }
70
+ },
71
+ mounted () {
72
+ this.getGroupTree()
73
+ },
74
+ methods: {
75
+ // 获取分组数据
76
+ async getGroupTree () {
77
+ const res = await getGroupTree(this.target)
78
+ if (res.code !== 0) {
79
+ return this.$message.error(res.msg)
80
+ }
81
+ this.groupList = []
82
+ this.options = [res.data]
83
+ this.groupList = Object.values(this.$refs.groupDialog.createSelectMap(this.options))
84
+ if (this.dialogVisible) {
85
+ this.$refs.groupDialog.updateGroupStatus()
86
+ }
87
+ },
88
+ handleSelect (val) {
89
+ this.$emit('input', { id: val.id, name: val.name })
90
+ // this.$emit('input', val[val.length - 1])
91
+ },
92
+ // 点击删除时进行的操作
93
+ handleDeleteKeyDown () {
94
+ this.$emit('input', { id: '', name: '' })
95
+ },
96
+ // 获取搜索建议
97
+ getAdvice (str, cb) {
98
+ if (str) {
99
+ cb(this.groupList.filter(e => e.name.includes(str)))
100
+ }
101
+ },
102
+ // 展示dialog
103
+ showDialog () {
104
+ this.dialogVisible = true
105
+ },
106
+ handleBlur () {
107
+ if (!this.value.id) {
108
+ this.$emit('input', { id: '', name: '' })
109
+ }
110
+ },
111
+ handleConfig (val) {
112
+ this.$emit('input', val)
113
+ },
114
+ handleSuccess () {
115
+ this.getGroupTree()
116
+ }
117
+
118
+ }
119
+ }
120
+ </script>
121
+ <style lang="less" scoped>
122
+ /deep/.el-scrollbar__wrap{
123
+ overflow-x: hidden!important;
124
+ }
125
+
126
+ </style>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <el-input
3
+ ref="input"
4
+ :value="value"
5
+ :type="inputType"
6
+ :disabled="disabled"
7
+ :rows="rows"
8
+ :placeholder="placeholder"
9
+ @input="handleInput"
10
+ />
11
+ </template>
12
+ <script>
13
+ export default {
14
+ components: {
15
+
16
+ },
17
+ props: {
18
+ value: {
19
+ type: String,
20
+ default: ''
21
+ },
22
+ disabled: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ defaultValue: {
27
+ type: String,
28
+ default: ''
29
+ }
30
+ },
31
+ inject: ['rows', 'placeholder', 'text', 'entity'],
32
+ data () {
33
+ return {
34
+
35
+ }
36
+ },
37
+ computed: {
38
+ inputType () {
39
+ if (this.text) {
40
+ return 'textarea'
41
+ }
42
+ return 'text'
43
+ }
44
+ },
45
+ created () {
46
+ // 对象还不存在这个属性,创建属性,如果有属性,但是值是null不进行任何操作
47
+ if (!this.value) {
48
+ this.handleInput(null)
49
+ }
50
+ },
51
+ mounted () {
52
+ if (this.entity) {
53
+ this.$refs.input.focus()
54
+ }
55
+ },
56
+ methods: {
57
+ handleInput (value) {
58
+ this.$emit('input', value)
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+
64
+ <style lang="less" scoped>
65
+ .el-textarea{
66
+ ::v-deep .el-textarea__inner{
67
+ border:0;
68
+ border-bottom: 1px solid #dcdcdc;
69
+ border-radius: 0;
70
+ }
71
+ }
72
+ </style>
@@ -0,0 +1,74 @@
1
+ <template>
2
+ <el-input-number
3
+ ref="number"
4
+ :disabled="disabled"
5
+ :controls="false"
6
+ :placeholder="placeholder"
7
+ :precision="percision"
8
+ :min="0"
9
+ :value="value"
10
+ @input="handleInput"
11
+ />
12
+ </template>
13
+ <script>
14
+ export default {
15
+ components: {
16
+
17
+ },
18
+ props: {
19
+ value: {
20
+ type: Number,
21
+ default: undefined
22
+ },
23
+ disabled: {
24
+ type: Boolean,
25
+ default: false
26
+ },
27
+ defaultValue: {
28
+ type: Number,
29
+ default: null
30
+ }
31
+ },
32
+ inject: ['percision', 'placeholder', 'entity'],
33
+ data () {
34
+ return {
35
+
36
+ }
37
+ },
38
+ mounted () {
39
+ this.entity && this.$refs.number.focus()
40
+ },
41
+ created () {
42
+ if (!this.value) {
43
+ const initValue = this.defaultValue || null
44
+ this.handleInput(initValue)
45
+ }
46
+ },
47
+ methods: {
48
+ handleInput (value) {
49
+ this.$emit('input', value)
50
+ }
51
+ }
52
+ }
53
+ </script>
54
+
55
+ <style scoped lang='less'>
56
+ .el-input-number {
57
+ width:100%;
58
+
59
+ ::v-deep .el-input{
60
+ height: 100%;
61
+ //margin-top: -0.55vh;
62
+ }
63
+ ::v-deep .el-input-number{
64
+ width: 100%;
65
+ }
66
+ ::v-deep .el-input__inner{
67
+ width: 100%;
68
+ border: none;
69
+ border-bottom: 1px solid #DCDCDC;
70
+ border-radius: 0;
71
+ text-align: left;
72
+ }
73
+ }
74
+ </style>