From 5cd9c06c7133e870dfb171d28de95e97e71f2ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B3=E5=90=9B=E5=81=A5?= <40288193@qq.com> Date: Sun, 3 Dec 2023 10:48:24 +0800 Subject: [PATCH] fix(row): [layout] restore the gutter value, and add gutter demo (#1006) * fix(row): restore the gutter value, and add gutter demo * fix(row): fix e2e test --- .../pc/app/layout/gutter-composition-api.vue | 11 +++++++++++ examples/sites/demos/pc/app/layout/gutter.spec.ts | 3 +++ examples/sites/demos/pc/app/layout/gutter.vue | 11 +++++++++++ .../sites/demos/pc/app/layout/webdoc/layout.js | 15 +++++++++++++-- packages/renderless/src/col/index.ts | 9 +++++++-- packages/renderless/src/col/vue.ts | 5 ++--- packages/vue/src/row/src/index.ts | 6 +++++- packages/vue/src/row/src/pc.vue | 2 +- 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/examples/sites/demos/pc/app/layout/gutter-composition-api.vue b/examples/sites/demos/pc/app/layout/gutter-composition-api.vue index e811129c6..a80682a40 100644 --- a/examples/sites/demos/pc/app/layout/gutter-composition-api.vue +++ b/examples/sites/demos/pc/app/layout/gutter-composition-api.vue @@ -12,6 +12,17 @@
Row
组件的 gutter
属性实现栅格间隔。
- 不设置 gutter
时,组件会默认为 Col
设置 左右10px
的padding值。
+ 通过使用 Row
组件的 gutter
属性实现栅格间隔。gutter
时,组件会默认为 Col
设置 左右10px
的padding值noSpace
属性,让子项间没有间距。
`,
'en-US': `
This is done by using the gutter
property of the Row
component.
@@ -160,6 +161,16 @@ export default {
'desc': { 'zh-CN': '子项的间隔的像素', 'en-US': 'The spacing of the child items in pixels' },
'demoId': 'gutter'
},
+ {
+ 'name': 'noSpace',
+ 'type': 'boolean',
+ 'defaultValue': 'false',
+ 'desc': {
+ 'zh-CN': '子项没有间隔,相当于强制gutter=0的情况',
+ 'en-US': 'Child entries have no spacing, equivalent to forcing gutter=0'
+ },
+ 'demoId': 'gutter'
+ },
{
'name': 'justify',
'type': 'string',
diff --git a/packages/renderless/src/col/index.ts b/packages/renderless/src/col/index.ts
index 0318e7640..5e3074d13 100644
--- a/packages/renderless/src/col/index.ts
+++ b/packages/renderless/src/col/index.ts
@@ -120,10 +120,15 @@ export const getStyle =
const no = props.no
const styles = []
let gutter = parent ? parent.gutter : null
+ let noSpace = parent ? parent.noSpace : null
let order = ''
- gutter = gutter / 2
- styles.push(`padding-left:${gutter}px;padding-right:${gutter}px;`)
+ if (gutter) {
+ gutter = gutter / 2
+ styles.push(`padding-left:${gutter}px;padding-right:${gutter}px;`)
+ } else if (noSpace) {
+ styles.push('padding-left:0;padding-right:0;')
+ }
if (parent && parent.flex && parent.order) {
/* istanbul ignore next */
diff --git a/packages/renderless/src/col/vue.ts b/packages/renderless/src/col/vue.ts
index 1e3005d92..181e22f08 100644
--- a/packages/renderless/src/col/vue.ts
+++ b/packages/renderless/src/col/vue.ts
@@ -14,13 +14,12 @@ import { setSubitemAttrValue, setGlobalAttrValue, getClassName, getStyle, row }
export const api = ['state']
-export const renderless = (props, { computed, reactive, inject }, { parent }) => {
+export const renderless = (props, { computed, reactive }, { parent }) => {
const api = {}
const state = reactive({
row: computed(() => api.row()),
style: computed(() => api.getStyle()),
- className: computed(() => api.getClassName()),
- layout: inject('layout')
+ className: computed(() => api.getClassName())
})
Object.assign(api, {
diff --git a/packages/vue/src/row/src/index.ts b/packages/vue/src/row/src/index.ts
index 55c187c8f..6eec62c61 100644
--- a/packages/vue/src/row/src/index.ts
+++ b/packages/vue/src/row/src/index.ts
@@ -20,7 +20,7 @@ export default defineComponent({
flex: Boolean,
gutter: {
type: Number,
- default: 20,
+ default: 0,
validator(value: number) {
return value >= 0
}
@@ -42,6 +42,10 @@ export default defineComponent({
tag: {
type: String,
default: 'div'
+ },
+ noSpace: {
+ type: Boolean,
+ default: false
}
},
setup(props, context) {
diff --git a/packages/vue/src/row/src/pc.vue b/packages/vue/src/row/src/pc.vue
index 83a12778d..a87a54d3a 100644
--- a/packages/vue/src/row/src/pc.vue
+++ b/packages/vue/src/row/src/pc.vue
@@ -20,7 +20,7 @@ import { renderless, api } from '@opentiny/vue-renderless/row/vue'
import { props, setup, defineComponent } from '@opentiny/vue-common'
export default defineComponent({
- props: [...props, 'flex', 'gutter', 'justify', 'align', 'order', 'tag'],
+ props: [...props, 'flex', 'gutter', 'justify', 'align', 'order', 'tag', 'noSpace'],
setup(props, context) {
return setup({ props, context, renderless, api })
}