mali-applet-ui 0.0.46 → 0.0.47

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.
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <view v-if="isFromReadonly" class="ml-amount-input is-readonly">
3
- <view class="ml-amount-input-readonly-content">{{ amountLabel }}</view>
3
+ <view class="ml-amount-input-readonly-content">¥{{ amountLabel }}</view>
4
4
  </view>
5
5
  <input
6
6
  v-else
@@ -146,6 +146,6 @@ export default {
146
146
  }
147
147
  }
148
148
  .ml-amount-input-readonly-content {
149
- padding: 20rpx;
149
+ padding: 20rpx 4rpx;
150
150
  }
151
151
  </style>
@@ -55,6 +55,6 @@ export default {
55
55
 
56
56
  <style lang="scss">
57
57
  .ml-date-picker-readonly-content {
58
- padding: 20rpx;
58
+ padding: 20rpx 4rpx;
59
59
  }
60
60
  </style>
@@ -1,21 +1,17 @@
1
1
  <template>
2
- <view class="ml-form" :class="[className || '']">
3
- <uni-forms :key="fKey" ref="uniForm" :modelValue="data" :rules="formRules" :label-position="vertical ? 'top' : 'left'">
4
- <slot>
5
- <view v-for="(item, index) in items" :key="index">
6
- <ml-form-group v-if="item.children && item.children.length">
7
- <ml-form-item v-for="(cItem, cIndex) in item.children" :key="cIndex" :title="cItem.title" :field="cItem.field" :itemRender="cItem.itemRender" @modelvalue="updateModel"></ml-form-item>
8
- </ml-form-group>
9
- <ml-form-item v-else :title="item.title" :field="item.field" :itemRender="item.itemRender" @modelvalue="updateModel"></ml-form-item>
10
- </view>
11
- </slot>
12
- </uni-forms>
2
+ <view class="ml-form" :class="[className || '', {'is-border': border}]">
3
+ <slot>
4
+ <view v-for="(item, index) in items" :key="index">
5
+ <ml-form-group v-if="item.children && item.children.length" :title="item.title">
6
+ <ml-form-item v-for="(cItem, cIndex) in item.children" :key="cIndex" :title="cItem.title" :field="cItem.field" :itemRender="cItem.itemRender" @modelvalue="updateModel"></ml-form-item>
7
+ </ml-form-group>
8
+ <ml-form-item v-else :title="item.title" :field="item.field" :itemRender="item.itemRender" @modelvalue="updateModel"></ml-form-item>
9
+ </view>
10
+ </slot>
13
11
  </view>
14
12
  </template>
15
13
 
16
14
  <script>
17
- import XEUtils from 'xe-utils'
18
-
19
15
  export default {
20
16
  name: 'MlForm',
21
17
  options: {
@@ -26,6 +22,9 @@ export default {
26
22
  data: Object,
27
23
  items: Array,
28
24
  rules: Object,
25
+ align: String,
26
+ titleAlign: String,
27
+ border: Boolean,
29
28
  readonly: Boolean,
30
29
  vertical: Boolean,
31
30
  labelWidth: String,
@@ -38,43 +37,17 @@ export default {
38
37
  },
39
38
  data () {
40
39
  return {
41
- fKey: 1
42
- }
43
- },
44
- computed: {
45
- formRules () {
46
- const rest = {}
47
- XEUtils.each(this.rules, (rules, field) => {
48
- rest[field] = {
49
- rules: rules.map(item => {
50
- return { ...item, errorMessage: item.message }
51
- })
52
- }
53
- })
54
- return rest
55
40
  }
56
41
  },
57
- created () {
58
- this.$nextTick(() => {
59
- this.fKey++
60
- })
61
- },
62
42
  methods: {
63
- getProp (item, prop, defultValue) {
64
- return (item.itemRender.props ? item.itemRender.props[prop] : null) || defultValue
65
- },
66
43
  validate () {
67
- return this.$refs.uniForm.validate().then(() => {
68
- return null
69
- }).catch(() => {
70
- return {}
44
+ return new Promise(resolve => {
45
+ resolve()
71
46
  })
72
47
  },
73
48
  validateField (fields) {
74
- return this.$refs.uniForm.validateField(fields).then(() => {
75
- return null
76
- }).catch(() => {
77
- return {}
49
+ return new Promise(resolve => {
50
+ resolve()
78
51
  })
79
52
  },
80
53
  updateModel ({ field, value }) {
@@ -1,6 +1,13 @@
1
1
  <template>
2
2
  <view class="ml-form-group" :class="className">
3
- <slot></slot>
3
+ <view v-if="title || $slots.title" class="ml-form-group-title">
4
+ <slot name="title">
5
+ <text>{{ title }}</text>
6
+ </slot>
7
+ </view>
8
+ <view class="ml-form-group-content">
9
+ <slot></slot>
10
+ </view>
4
11
  </view>
5
12
  </template>
6
13
 
@@ -11,6 +18,7 @@ export default {
11
18
  virtualHost: true
12
19
  },
13
20
  props: {
21
+ title: String,
14
22
  className: String
15
23
  }
16
24
  }
@@ -18,9 +26,15 @@ export default {
18
26
 
19
27
  <style lang="scss">
20
28
  .ml-form-group {
21
- margin: 10rpx 0;
22
- padding: 20rpx;
29
+ margin: 20rpx 0;
23
30
  border-radius: 10rpx;
24
31
  background: #ffffff;
32
+ .ml-form-group-title {
33
+ display: flex;
34
+ align-items: center;
35
+ min-height: 80rpx;
36
+ padding: 0 20rpx;
37
+ border-bottom: 1px solid #e5e5e5;
38
+ }
25
39
  }
26
40
  </style>
@@ -1,23 +1,24 @@
1
1
  <template>
2
- <view class="ml-form-item">
3
- <uni-forms-item
4
- ref="uniFormItem"
5
- :class="className"
6
- :label="title"
7
- :name="field"
8
- :label-width="itemLabelWidth"
9
- :label-position="itemVertical">
10
- <slot>
11
- <ml-input v-if="matchComponent('MlInput')" :value="itemValue" border @change="modelEvent"></ml-input>
12
- <ml-date-picker v-else-if="matchComponent('MlDatePicker')" :value="itemValue" border @change="modelEvent"></ml-date-picker>
13
- <ml-select-picker v-else-if="matchComponent('MlSelectPicker')" :value="itemValue" :options="renderOpts.options" border @change="modelEvent"></ml-select-picker>
14
- <ml-textarea v-else-if="matchComponent('MlTextarea')" :value="itemValue" :rows="renderOpts.rows || 3" border @change="modelEvent"></ml-textarea>
15
- <ml-upload v-else-if="matchComponent('MlUpload')" :value="itemValue" :mediatype="renderOpts.mediatype || 'image'" @change="modelEvent"></ml-upload>
16
- <ml-amount-input v-else-if="matchComponent('MlAmountInput')" :value="itemValue" @change="modelEvent"></ml-amount-input>
17
- <ml-amount-text v-else-if="matchComponent('MlAmountText')" :value="itemValue" @change="modelEvent"></ml-amount-text>
18
- <view v-else>{{ itemValue }}</view>
2
+ <view class="ml-form-item" :class="[className, '', itemTitleAlign ? `title-align-${itemTitleAlign}` : '', itemAlign ? `align-${itemAlign}` : '', {'is-border': isFormBorder, 'is-vertical': itemVertical}]">
3
+ <view class="ml-form-item-title" :style="titleStyle">
4
+ <slot name="title">
5
+ <text>{{ title }}</text>
19
6
  </slot>
20
- </uni-forms-item>
7
+ </view>
8
+ <view class="ml-form-item-content">
9
+ <view class="ml-form-item-content-warpper">
10
+ <slot>
11
+ <ml-input v-if="matchComponent('MlInput')" :value="itemValue" border @change="modelEvent"></ml-input>
12
+ <ml-date-picker v-else-if="matchComponent('MlDatePicker')" :value="itemValue" border @change="modelEvent"></ml-date-picker>
13
+ <ml-select-picker v-else-if="matchComponent('MlSelectPicker')" :value="itemValue" :options="renderOpts.options" border @change="modelEvent"></ml-select-picker>
14
+ <ml-textarea v-else-if="matchComponent('MlTextarea')" :value="itemValue" :rows="renderOpts.rows || 3" border @change="modelEvent"></ml-textarea>
15
+ <ml-upload v-else-if="matchComponent('MlUpload')" :value="itemValue" :mediatype="renderOpts.mediatype || 'image'" @change="modelEvent"></ml-upload>
16
+ <ml-amount-input v-else-if="matchComponent('MlAmountInput')" :value="itemValue" @change="modelEvent"></ml-amount-input>
17
+ <ml-amount-text v-else-if="matchComponent('MlAmountText')" :value="itemValue" @change="modelEvent"></ml-amount-text>
18
+ <text v-else style="color:red">{{ itemValue }}</text>
19
+ </slot>
20
+ </view>
21
+ </view>
21
22
  </view>
22
23
  </template>
23
24
 
@@ -30,10 +31,9 @@ export default {
30
31
  props: {
31
32
  title: String,
32
33
  field: String,
33
- vertical: {
34
- type: Boolean,
35
- default: null
36
- },
34
+ align: String,
35
+ titleAlign: String,
36
+ vertical: Boolean,
37
37
  labelWidth: String,
38
38
  itemRender: Object,
39
39
  className: String
@@ -45,10 +45,16 @@ export default {
45
45
  }
46
46
  },
47
47
  computed: {
48
+ titleStyle () {
49
+ return this.itemLabelWidth ? `width:${this.itemLabelWidth};` : ''
50
+ },
51
+ isFormBorder () {
52
+ return this.form ? this.form.border : false
53
+ },
48
54
  isRequired () {
49
- if (this.form && this.form.formRules) {
50
- const rules = this.form.formRules[this.field]
51
- if (rules && rules.some(item => item.required)) {
55
+ if (this.form && this.form.rules) {
56
+ const currRules = this.form.rules[this.field]
57
+ if (currRules && currRules.some(item => item.required)) {
52
58
  return true
53
59
  }
54
60
  }
@@ -63,12 +69,23 @@ export default {
63
69
  renderOpts () {
64
70
  return this.itemRender || {}
65
71
  },
72
+ itemAlign () {
73
+ if (this.align) {
74
+ return this.align
75
+ }
76
+ return this.form ? this.form.align : ''
77
+ },
78
+ itemTitleAlign () {
79
+ if (this.titleAlign) {
80
+ return this.titleAlign
81
+ }
82
+ return this.form ? this.form.titleAlign : ''
83
+ },
66
84
  itemVertical () {
67
- let vertical = this.vertical
68
- if (!vertical) {
69
- vertical = this.form ? this.form.vertical : ''
85
+ if (this.vertical) {
86
+ return true
70
87
  }
71
- return vertical ? 'top' : 'left'
88
+ return this.form ? this.form.vertical : false
72
89
  },
73
90
  itemLabelWidth () {
74
91
  let labelWidth = this.labelWidth
@@ -84,18 +101,8 @@ export default {
84
101
  created () {
85
102
  this.init()
86
103
  },
87
- watch: {
88
- itemVertical () {
89
- this.init()
90
- }
91
- },
92
104
  methods: {
93
105
  init () {
94
- this.$nextTick(() => {
95
- if (this.$refs.uniFormItem) {
96
- this.$refs.uniFormItem.localLabelPos = this.itemVertical
97
- }
98
- })
99
106
  },
100
107
  matchComponent (name) {
101
108
  return this.renderOpts.name === name
@@ -106,3 +113,75 @@ export default {
106
113
  }
107
114
  }
108
115
  </script>
116
+
117
+ <style lang="scss">
118
+ .ml-form-item {
119
+ position: relative;
120
+ display: flex;
121
+ flex-direction: row;
122
+ font-size: $uni-font-size-base;
123
+ padding: 10rpx 20rpx;
124
+ &.is-border {
125
+ border-bottom: 1px solid #e5e5e5;
126
+ &:last-child {
127
+ border: 0;
128
+ }
129
+ }
130
+ .ml-form-item-title {
131
+ min-height: 70rpx;
132
+ color: rgba(0, 0, 0, 0.65);
133
+ }
134
+ &.is-vertical {
135
+ flex-direction: column;
136
+ }
137
+ &:not(.is-vertical) {
138
+ .ml-form-item-title {
139
+ flex-shrink: 0;
140
+ }
141
+ }
142
+ &.title-align-left {
143
+ .ml-form-item-title {
144
+ text-align: left;
145
+ }
146
+ }
147
+ &.title-align-center {
148
+ .ml-form-item-title {
149
+ text-align: center;
150
+ }
151
+ }
152
+ &.title-align-right {
153
+ .ml-form-item-title {
154
+ text-align: right;
155
+ }
156
+ }
157
+ &.align-left {
158
+ .ml-form-item-content {
159
+ text-align: left;
160
+ }
161
+ }
162
+ &.align-center {
163
+ .ml-form-item-content {
164
+ text-align: center;
165
+ }
166
+ }
167
+ &.align-right {
168
+ .ml-form-item-content {
169
+ text-align: right;
170
+ }
171
+ }
172
+ .ml-form-item-title {
173
+ display: flex;
174
+ align-items: center;
175
+ padding-right: 20rpx;
176
+ }
177
+ }
178
+ .ml-form-item-content {
179
+ display: flex;
180
+ align-items: center;
181
+ flex-grow: 1;
182
+ }
183
+ .ml-form-item-content-warpper {
184
+ flex-grow: 1;
185
+ width: 100%;
186
+ }
187
+ </style>
@@ -81,10 +81,11 @@ export default {
81
81
 
82
82
  <style lang="scss">
83
83
  .ml-input {
84
+ flex-grow: 1;
84
85
  display: flex;
85
86
  flex-direction: row;
86
87
  .ml-input-readonly-content {
87
- padding: 20rpx;
88
+ padding: 20rpx 4rpx;
88
89
  }
89
90
  .ml-input-inp {
90
91
  padding: 0 20rpx;
@@ -94,6 +94,8 @@ export default {
94
94
 
95
95
  <style lang="scss">
96
96
  .ml-textarea {
97
+ display: block;
98
+ width: 100%;
97
99
  font-size: $uni-font-size-base;
98
100
  padding: 20rpx 10rpx 10rpx 20rpx;
99
101
  &.is-border {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mali-applet-ui",
3
- "version": "0.0.46",
3
+ "version": "0.0.47",
4
4
  "description": "码里云小程序组件库",
5
5
  "files": [
6
6
  "components",