diff --git a/components/_style/mixin/theme.components.styl b/components/_style/mixin/theme.components.styl index b609b572..91a2aee1 100644 --- a/components/_style/mixin/theme.components.styl +++ b/components/_style/mixin/theme.components.styl @@ -162,35 +162,24 @@ drop-menu-disabled-opacity = opacity-disabled field-padding-h = h-gap-sl field-padding-v = v-gap-sl field-bg-color = color-bg-inverse +field-header-gap = v-gap-lg +field-footer-gap = v-gap-md field-title-color = color-text-base field-title-font-size = font-caption-large field-title-font-weight = font-weight-normal -field-title-operator-color = color-text-minor -field-title-operator-font-size = font-body-large -field-title-margin = 36px -field-item-padding-v = v-gap-lg -field-item-bg-tap-color = color-bg-tap -field-item-label-color = color-text-base -field-item-label-font-size = font-caption-normal -field-item-label-font-weight = font-weight-normal -field-item-content-color = color-text-base -field-item-content-font-size = font-caption-normal -field-item-content-font-weight = font-weight-medium -field-item-icon-color = #ccc +field-describe-color = color-text-caption +field-describe-font-size = font-body-large +field-action-color = color-text-minor +field-action-font-size = font-body-large + +// field-item +field-item-min-height = 108px +field-item-padding-v = 30px +field-item-color = color-text-base +field-item-font-size = font-caption-normal +field-item-after-color = color-text-caption +field-item-after-font-size = font-body-large field-item-border-color = color-border-base -field-item-color-disabled = opacity-disabled -field-item-brief-font-size = font-body-normal -field-item-brief-color = color-text-caption -field-title-plain-color = color-text-body -field-title-plain-font-size = font-body-large -field-padding-plain-h = h-gap-lg -field-padding-plain-v = v-gap-lg -field-bg-plain-color = color-bg-base -field-item-padding-plain-v = h-gap-md -field-item-label-plain-color = color-text-caption -field-item-label-plain-font-size = font-body-large -field-item-content-plain-color = color-text-body -field-item-content-plain-font-size = font-body-large // icon icon-size-xs = 20px @@ -205,6 +194,7 @@ image-viewer-index-bottom = 100px // input-item input-item-height = 100px +input-item-border-color = color-border-base input-item-title-width = 170px input-item-title-gap = 22px input-item-font-size = font-caption-normal diff --git a/components/_style/mixin/theme.variable.styl b/components/_style/mixin/theme.variable.styl index f2253232..fbb48b57 100644 --- a/components/_style/mixin/theme.variable.styl +++ b/components/_style/mixin/theme.variable.styl @@ -105,23 +105,27 @@ tag-small-font-size = var(--tag-small-font-size) tag-tiny-font-size = var(--tag-tiny-font-size) // field -field-padding = var(--field-padding) field-padding-h = var(--field-padding-h) field-padding-v = var(--field-padding-v) -field-title-font-size = var(--field-title-font-size) +field-bg-color = var(--field-bg-color) +field-header-gap = var(--field-header-gap) +field-footer-gap = var(--field-footer-gap) field-title-color = var(--field-title-color) +field-title-font-size = var(--field-title-font-size) field-title-font-weight = var(--field-title-font-weight) -field-title-margin = var(--field-title-margin) +field-describe-color = var(--field-describe-color) +field-describe-font-size = var(--field-describe-font-size) +field-action-color = var(--field-action-color) +field-action-font-size = var(--field-action-font-size) + +// field-item +field-item-min-height = var(--field-item-min-height) field-item-padding-v = var(--field-item-padding-v) -field-item-bg-color = var(--field-item-bg-color) -field-item-bg-tap-color = var(--field-item-bg-tap-color) field-item-color = var(--field-item-color) field-item-font-size = var(--field-item-font-size) -field-item-icon-color = var(--field-item-icon-color) +field-item-after-color = var(--field-item-after-color) +field-item-after-font-size = var(--field-item-after-font-size) field-item-border-color = var(--field-item-border-color) -field-item-color-disabled = var(--field-item-color-disabled) -field-item-brief-font-size = var(--field-item-brief-font-size) -field-item-brief-color = var(--field-item-brief-color) // input-item input-item-height = var(--input-item-height) diff --git a/components/field-item/test/index.spec.js b/components/field-item/test/index.spec.js index 5582e98c..cfd8271b 100644 --- a/components/field-item/test/index.spec.js +++ b/components/field-item/test/index.spec.js @@ -19,69 +19,43 @@ describe('FieldItem', () => { expect(wrapper.vm.title).to.equal('field item title') }) - it('create a simple field-item with brief', () => { + it('create a simple field-item with describe', () => { wrapper = mount(FieldItem, { propsData: { title: 'field item title', - brief: 'field item brief', + describe: 'field item describe', }, }) - expect(wrapper.find('.md-field-item-brief').length).to.equal(1) + expect(wrapper.find('.md-field-item-describe').length).to.equal(1) }) it('create a simple field-item with arrow', () => { wrapper = mount(FieldItem, { propsData: { title: 'field item title', - brief: 'field item brief', - arrow: 'arrow-right', + describe: 'field item describe', + arrow: true, }, }) - expect(wrapper.hasClass('has-arrow')).to.be.true + expect(wrapper.contains('.md-icon-arrow-right')).to.be.true const eventStub = sinon.stub(wrapper.vm, '$emit') wrapper.trigger('click') expect(eventStub.calledWith('click')).to.be.true }) - it('create a field-item with solid title', () => { - wrapper = mount(FieldItem, { - propsData: { - title: 'field item title', - brief: 'field item brief', - arrow: 'arrow-right', - solid: true, - }, - }) - - expect(wrapper.find('.solid').length).to.equal(1) - }) - - it('create a field-item with customized value align right', () => { - wrapper = mount(FieldItem, { - propsData: { - title: 'field item title', - brief: 'field item brief', - customized: true, - align: 'right', - }, - }) - - expect(wrapper.vm.customized).to.be.true - }) - it('create a disabled field-item', () => { wrapper = mount(FieldItem, { propsData: { title: 'field item title', - brief: 'field item brief', - arrow: 'arrow-right', + describe: 'field item describe', + arrow: true, disabled: true, }, }) - expect(wrapper.hasClass('disabled')).to.be.true + expect(wrapper.hasClass('is-disabled')).to.be.true }) }) diff --git a/components/field/README.en-US.md b/components/field/README.en-US.md index 9a6f3502..7295a775 100644 --- a/components/field/README.en-US.md +++ b/components/field/README.en-US.md @@ -23,37 +23,69 @@ Vue.component(FieldItem.name, FieldItem) |Props | Description | Type | Default | Note| |----|-----|------|------|------| |title|title|String|-|-| +|describe|description|String|-|-| +|disabled|disable content operation|Boolean|false|-| +|plain|plain style|Boolean|false|-| + +When use `disabled` prop, its descendants can use [inject](https://vuejs.org/v2/api/#provide-inject)to have access of `Field` ancestor. + +```javascript +export default { + name: 'your-component', + + inject: { + rootField: { + from: 'rootField', + default: () => ({}) + } + }, + + computed: { + disabled() { + return this.rootField.disabled + } + }, +} +``` + +#### Field Slots + +##### default +default content slot + +##### header +header content slot + +##### action +header action slot + +##### footer +footer content slot + +--- #### FieldItem Props |Props | Description | Type | Default | Note| |----|-----|------|------|------| -|name|name|Number/String|-1|-| -|title|title|Number/String|-|-| -|brief|subtitle|String|-|-| -|disabled|whether to disable it or not|Boolean|true|-| -|arrow|the name of arrow|String|-|`arrow-up`, `arrow-right`, `arrow-down`, `arrow-left`| -|customized|the content is customized or not|Boolean|have `slot` or not|-| -|align|the position of customized contents|String|left|`left`, `right`, `center`| -|value|content|String|-|-| -|solid|the width of title is fixed or not|Boolean|false|-| +|title|title|String|-|-| +|describe|description|String|-|-| +|disabled|disable item operation|Boolean|false|-| +|arrow|arrow indicator|Boolean|false|-| + +#### FieldItem Events +##### @click(event) +click event when not disabled #### FieldItem Slots ##### default -Default slot of content +default content slot -##### left -Left slot of title 1.4.0+ +##### start +start content slot -##### right -Right slot of content 1.4.0+ +##### after +after content slot -#### FieldItem Events - -##### @click(name) - -Click event - -|Props | Description | Type | -|----|-----|------| -|name|the name of fieldItem|Number/String| +##### children +extra children slot diff --git a/components/field/README.md b/components/field/README.md index e0ede63f..1b5c64d4 100644 --- a/components/field/README.md +++ b/components/field/README.md @@ -3,7 +3,7 @@ title: Field 区域列表组合 preview: https://didi.github.io/mand-mobile/examples/#/field --- -区域列表垂直排列,显示当前的内容、状态和可进行的操作 +区域列表垂直排列,显示当前的内容、状态和可进行的操作。 ### 引入 @@ -23,36 +23,69 @@ Vue.component(FieldItem.name, FieldItem) |属性 | 说明 | 类型 | 默认值|备注| |----|-----|------|------|------| |title|标题|String|-|-| +|describe|描述内容|String|-|-| +|disabled|是否禁用区域|Boolean|false|-| +|plain|镂空样式|Boolean|false|-| + +当使用了`disabled`选项时,其后代内容可以通过[inject](https://vuejs.org/v2/api/#provide-inject)的方式获取祖先`Field`的实例属性。 + +```javascript +export default { + name: 'your-component', + + inject: { + rootField: { + from: 'rootField', + default: () => ({}) + } + }, + + computed: { + disabled() { + return this.rootField.disabled + } + }, +} +``` + +#### Field Slots + +##### default +内容默认插槽 + +##### header +页眉内容插槽 + +##### action +页眉操作区域插槽 + +##### footer +页脚内容插槽 + +--- #### FieldItem Props -|属性 | 说明 | 类型 | 默认值 |备注| +|属性 | 说明 | 类型 | 默认值|备注| |----|-----|------|------|------| -|name|标识|Number/String| `-1`|-| |title|标题|String|-|-| -|brief|子标题|String|-|-| -|disabled|是否禁用|Boolean|`true`|-| -|arrow|箭头名称|String|-|`arrow-up`, `arrow-right`, `arrow-down`, `arrow-left`| -|customized|内容是否自定义|Boolean|是否有`slot`|-| -|align|自定义内容时,内容位置|String|`left`|`left`, `right`, `center`| -|value|内容|String|-|-| -|solid|是否固定标题宽度,超出会自动换行|Boolean|`false`|-| +|describe|描述内容|String|-|-| +|disabled|是否禁用项目|Boolean|false|-| +|arrow|动作箭头标识|Boolean|false|-| + +#### FieldItem Events +##### @click(event) +非禁用状态下的点击事件 #### FieldItem Slots ##### default 内容默认插槽 -##### left -标题左侧插槽 1.4.0+ +##### start +头部区域插槽 -##### right -内容右侧插槽 1.4.0+ +##### after +末尾预期插槽 -#### FieldItem Events - -##### @click(name) -点击事件 - -|属性 | 说明 | 类型| -|----|-----|------| -|name|fieldItem标识|Number/String| +##### children +额外内容插槽 diff --git a/components/field/demo/cases/demo0.vue b/components/field/demo/cases/demo0.vue index 08b71923..734ba9f2 100644 --- a/components/field/demo/cases/demo0.vue +++ b/components/field/demo/cases/demo0.vue @@ -1,41 +1,13 @@ - - + + 操作 - - - - - - - - - - - + + 区域页脚区域内容插槽 + + + @@ -44,33 +16,25 @@ export default { name: 'field-demo', + components: { [Field.name]: Field, [FieldItem.name]: FieldItem, [Icon.name]: Icon, }, + + data() { + return { + open: false, + } + }, + methods: { - onClick(name) { + onClick() { Dialog.alert({ - content: `点击了 ${name}`, + content: '点击了', }) }, }, } - - \ No newline at end of file diff --git a/components/field/demo/cases/demo1.vue b/components/field/demo/cases/demo1.vue index e483da7d..fbf7a027 100644 --- a/components/field/demo/cases/demo1.vue +++ b/components/field/demo/cases/demo1.vue @@ -1,82 +1,53 @@ - - - + + + + - - - - - - - - - - + + 可用8000.34 + + + 可用8000.35 + + + + 可用8000.34 + + + + 可用8000.34 - \ No newline at end of file +.holder + display block + width 48px + height 48px + background-color #E6E6E6 + diff --git a/components/field/demo/cases/demo2.vue b/components/field/demo/cases/demo2.vue index eab088c1..fc89822d 100644 --- a/components/field/demo/cases/demo2.vue +++ b/components/field/demo/cases/demo2.vue @@ -1,77 +1,56 @@ - + + + - + + 附加文案 - + + + 附加文案 - - 内容展示 - - + + + 禁用的项目 + + + + 中国建设银行,在全球范围内为台湾、香港、美国、澳大利亚等国家或地区提供全面金融服务,主要经营公司银行业务、个人银行业务和资金业务,包括居民储蓄存款、信贷资金贷款、住房类贷款、外汇、信用卡,以及投资理财等多种业务。 + - \ No newline at end of file +.holder + display block + width 88px + height 88px + border-radius 44px + background-color #E6E6E6 + diff --git a/components/field/demo/cases/demo3.vue b/components/field/demo/cases/demo3.vue deleted file mode 100644 index b31e25cf..00000000 --- a/components/field/demo/cases/demo3.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - 招商银行(尾号xxxx) - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/field/demo/index.vue b/components/field/demo/index.vue index 7bbf7d13..9c276773 100644 --- a/components/field/demo/index.vue +++ b/components/field/demo/index.vue @@ -13,7 +13,5 @@ import Demo0 from './cases/demo0' import Demo1 from './cases/demo1' import Demo2 from './cases/demo2' -import Demo3 from './cases/demo3' - -export default {...createDemoModule('field', [Demo0, Demo1, Demo2, Demo3])} - \ No newline at end of file +export default {...createDemoModule('field', [Demo0, Demo1, Demo2])} + diff --git a/components/field/index.vue b/components/field/index.vue index a97d2c07..768470f7 100644 --- a/components/field/index.vue +++ b/components/field/index.vue @@ -1,25 +1,22 @@ - - - - - {{title}} - - - - - - {{value}} - + + + + + + - + + + + - + + diff --git a/components/field/item.vue b/components/field/item.vue index 350565fc..b3b9d4e1 100644 --- a/components/field/item.vue +++ b/components/field/item.vue @@ -1,64 +1,26 @@ - - - - - + + + + - - - - - - + + + - - {{value}} + + + - - - - - - - - + +
区域页脚区域内容插槽
+ 中国建设银行,在全球范围内为台湾、香港、美国、澳大利亚等国家或地区提供全面金融服务,主要经营公司银行业务、个人银行业务和资金业务,包括居民储蓄存款、信贷资金贷款、住房类贷款、外汇、信用卡,以及投资理财等多种业务。 +
- {{title}} -
- -
- {{value}} -