From d5cec3467bc127fff1252945147a6a6635bf9131 Mon Sep 17 00:00:00 2001 From: chenxi-20 <2465950588@qq.com> Date: Tue, 8 Apr 2025 10:21:55 +0800 Subject: [PATCH 001/120] =?UTF-8?q?fix:=20[file-upload]=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=96=87=E4=BB=B6=E5=88=97=E8=A1=A8=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=97=AE=E9=A2=98=20(#3266)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/vue/src/upload-list/src/mobile-first.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/vue/src/upload-list/src/mobile-first.vue b/packages/vue/src/upload-list/src/mobile-first.vue index 75f74a6c00..e619fcf4e6 100644 --- a/packages/vue/src/upload-list/src/mobile-first.vue +++ b/packages/vue/src/upload-list/src/mobile-first.vue @@ -66,7 +66,7 @@ >
{{ file.name @@ -115,10 +115,10 @@ t('ui.uploadList.uploadFailedAndReupload') }} - {{ + {{ formatFileSize((file.size * file.percentage) / 100) + '/' + formatFileSize(file.size) }} - {{ formatFileSize(file.size) }} + {{ formatFileSize(file.size) }} From 682cf7aa94f1079028ccde09782fd566056cde41 Mon Sep 17 00:00:00 2001 From: wuyiping <42107997+wuyiping0628@users.noreply.github.com> Date: Tue, 8 Apr 2025 04:21:46 -0700 Subject: [PATCH 002/120] fix(grid): [grid] resolve the issue of empty icon (#3269) --- packages/vue/src/grid/src/table/src/table.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue/src/grid/src/table/src/table.ts b/packages/vue/src/grid/src/table/src/table.ts index f865264e59..9d237d408b 100644 --- a/packages/vue/src/grid/src/table/src/table.ts +++ b/packages/vue/src/grid/src/table/src/table.ts @@ -111,7 +111,7 @@ const renderEmptyPartFn = (opt) => { return () => { let emptyPartVnode = null - if (_vm.viewType === V_DEFAULT && _vm.isCenterEmpty && !opt.tableData.length) { + if ([V_DEFAULT, V_MF].includes(_vm.viewType) && _vm.isCenterEmpty && !opt.tableData.length) { const { $grid = {}, renderEmpty } = _vm const { slots } = $grid let { computerTableBodyHeight } = _vm From 5fb18f80e221f8a20366fabd7f4f0e6dbbff6c8f Mon Sep 17 00:00:00 2001 From: liukun <953831480@qq.com> Date: Tue, 8 Apr 2025 19:30:32 +0800 Subject: [PATCH 003/120] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=20(#3272)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/sites/demos/pc/app/time-picker/clearable.spec.ts | 4 ++-- examples/sites/demos/pc/app/time-picker/format.spec.ts | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/examples/sites/demos/pc/app/time-picker/clearable.spec.ts b/examples/sites/demos/pc/app/time-picker/clearable.spec.ts index 8fe0e5085a..922f9fcefa 100644 --- a/examples/sites/demos/pc/app/time-picker/clearable.spec.ts +++ b/examples/sites/demos/pc/app/time-picker/clearable.spec.ts @@ -7,7 +7,7 @@ test('清除按钮', async ({ page }) => { const timePickerDefaultClearIcon = page.getByRole('textbox', { name: '18:40:00' }).first() const timePickerHideClearIcon = page.getByRole('textbox', { name: '18:40:00' }).nth(1) const timePickerCustomClearIcon = page.getByRole('textbox', { name: '18:40:00' }).nth(2) - const closeIcon = page.locator('.tiny-date-editor--time svg.baseClearicon') + const closeIcon = page.locator('.tiny-date-editor--time svg.baseClearicon').first() // 默认显示清除按钮 await timePickerDefaultClearIcon.hover() @@ -23,6 +23,6 @@ test('清除按钮', async ({ page }) => { // 测试清除功能 await timePickerDefaultClearIcon.hover() - await closeIcon.first().click() + await closeIcon.click() await expect(page.getByRole('textbox').nth(1)).toHaveValue('') }) diff --git a/examples/sites/demos/pc/app/time-picker/format.spec.ts b/examples/sites/demos/pc/app/time-picker/format.spec.ts index b850173306..795b4b2635 100644 --- a/examples/sites/demos/pc/app/time-picker/format.spec.ts +++ b/examples/sites/demos/pc/app/time-picker/format.spec.ts @@ -34,12 +34,7 @@ test('时间格式化', async ({ page }) => { // value-format: 选中值的格式 await page.getByRole('textbox', { name: '18:30:00' }).click() await page.waitForTimeout(100) - await page - .locator( - 'div:nth-child(13) > .tiny-time-panel__content > .tiny-time-spinner > div > .tiny-scrollbar__wrap > .tiny-scrollbar__view > li:nth-child(20)' - ) - .first() - .click() + await page.getByText('19').nth(11).click() await page.getByRole('button', { name: '确定' }).click() await page.waitForTimeout(100) await expect(page.getByRole('textbox', { name: '19:30:00' })).toBeVisible() From 69d08cca8fd05471f8e9abd98958e124c834d026 Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Tue, 8 Apr 2025 20:20:00 +0800 Subject: [PATCH 004/120] fix(collapse): adjust the padding style within the mobile-first component to optimize the visual effect (#3267) --- packages/vue/src/collapse-item/src/mobile-first.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue/src/collapse-item/src/mobile-first.vue b/packages/vue/src/collapse-item/src/mobile-first.vue index 211434a9b5..db88e05520 100644 --- a/packages/vue/src/collapse-item/src/mobile-first.vue +++ b/packages/vue/src/collapse-item/src/mobile-first.vue @@ -65,7 +65,7 @@ :aria-labelledby="`tiny-collapse-head-${state.id}`" :id="`tiny-collapse-content-${state.id}`" > -
+
From 28016cbd963967ab544608f0c8f0b0e09a596691 Mon Sep 17 00:00:00 2001 From: gimmyhehe <975402925@qq.com> Date: Wed, 9 Apr 2025 14:06:52 +0800 Subject: [PATCH 005/120] fix(grid): [grid] fix viewType change table column width error (#3273) --- packages/vue/src/grid/src/grid/grid.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue/src/grid/src/grid/grid.ts b/packages/vue/src/grid/src/grid/grid.ts index 039e28f38a..f6047336c4 100644 --- a/packages/vue/src/grid/src/grid/grid.ts +++ b/packages/vue/src/grid/src/grid/grid.ts @@ -215,8 +215,8 @@ export default defineComponent({ setTimeout(() => this.emitter.emit('active-anchor'), this.columnAnchorParams.activeAnchor.delay) }, viewType(value) { - // 在全屏状态下切换到表格视图时额外刷新一次表格布局,解决此场景下列宽未自动撑开问题 - if (value === V_MF && this.fullScreenClass) { + // 解决从卡片、列表视图切换至表格视图后,列宽未自动撑开问题 + if (value === V_MF) { this.$nextTick(() => this.recalculate(true)) } } From 24baa79371abcfd391edc1190c6afd702807e70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B3=E5=90=9B=E5=81=A5?= <40288193@qq.com> Date: Thu, 10 Apr 2025 00:28:50 -0700 Subject: [PATCH 006/120] fix(transfer): [transfer] fixed a bug in the tree mode of transfer (#3277) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(transfer): 修复transfer的Tree模式的bug: 选中后,左侧禁用。 从右边退回左边后,左边不选中。 * fix(transfer): rewrite the e2e test of nest-tree demo * fix(transfer): fix text --- .../demos/pc/app/transfer/nested-tree.spec.ts | 15 ++++-- .../renderless/src/transfer-panel/index.ts | 6 +++ packages/renderless/src/transfer/index.ts | 42 ++++++++++++++- packages/renderless/src/transfer/vue.ts | 53 ++++++++++++++++--- .../src/transfer/__tests__/transfer.test.tsx | 18 +------ packages/vue/src/transfer/src/pc.vue | 4 +- 6 files changed, 109 insertions(+), 29 deletions(-) diff --git a/examples/sites/demos/pc/app/transfer/nested-tree.spec.ts b/examples/sites/demos/pc/app/transfer/nested-tree.spec.ts index 87c2e033ff..5f416ab7fc 100644 --- a/examples/sites/demos/pc/app/transfer/nested-tree.spec.ts +++ b/examples/sites/demos/pc/app/transfer/nested-tree.spec.ts @@ -3,10 +3,17 @@ import { test, expect } from '@playwright/test' test('测试嵌套树', async ({ page }) => { page.on('pageerror', (exception) => expect(exception).toBeNull()) await page.goto('transfer#nested-tree') + const preview = page.locator('.pc-demo-container') - await preview.getByRole('treeitem', { name: '一级 1' }).locator('svg').first().click() - await preview.getByRole('treeitem', { name: '一级 1' }).getByText('二级 1-1').click() - await preview.getByRole('treeitem', { name: '三级 1-1-1' }).locator('span').nth(2).click() - await expect(preview.getByText('三级 1-1-1')).toHaveCount(1) + const level1 = preview.getByRole('treeitem', { name: '一级 1' }) + + // 可展开 + await level1.locator('svg').first().click() + await expect(level1.getByRole('treeitem', { name: '二级 1-1' })).toBeVisible() + + // 可穿梭 + await level1.locator('svg').nth(1).click() + await preview.locator('.tiny-transfer__button').nth(0).click() + await expect(preview.getByRole('treeitem', { name: '一级 1' })).toHaveCount(2) }) diff --git a/packages/renderless/src/transfer-panel/index.ts b/packages/renderless/src/transfer-panel/index.ts index 5aabf31139..5e258223d0 100644 --- a/packages/renderless/src/transfer-panel/index.ts +++ b/packages/renderless/src/transfer-panel/index.ts @@ -276,6 +276,12 @@ export const getFilterTreeData = (data) => { const getChild = (data, query) => { data.forEach((node) => { + // 由于左右的数据一样,左边增加了选中后禁用的功能 , 但右侧不能显示为禁用。 + if (node.__disabled) { + node.disabled = true + } else if (!props.showLeft) { + node.disabled = false + } const label = node[state.labelProp] if (typeof props.treeOp.filterNodeMethod === 'function') { diff --git a/packages/renderless/src/transfer/index.ts b/packages/renderless/src/transfer/index.ts index e36b08fa52..71998f765d 100644 --- a/packages/renderless/src/transfer/index.ts +++ b/packages/renderless/src/transfer/index.ts @@ -106,7 +106,6 @@ export const onSourceCheckedChange = if (movedKeys === undefined) { return } - emit('left-check-change', val, movedKeys) } @@ -312,3 +311,44 @@ export const getRightCheckedData = ({ props, state }: Pick) => () => state.targetData.filter((item) => !item[props.props.disabled]) + +// 递归处理tree数据 +export const recurseTreeDataToDisabled = (treeData, childrenProp, idProp, currentValue = []) => { + treeData.forEach((item) => { + if (item[childrenProp]) { + recurseTreeDataToDisabled(item[childrenProp], childrenProp, idProp, currentValue) + } + if (currentValue.includes(item[idProp])) { + item.disabled = true + } else if (item.__disabled) { + item.disabled = true + } else { + item.disabled = false + } + }) +} +// 递归处理tree数据,初始化哪些数据项的默认是disabled, 哪些数据是默认已经选中的 +export const recurseTreeDataToFlagInitDisabled = (treeData, childrenProp, idProp, modelValue) => { + if (treeData.__inited) return + treeData.__inited = true + + treeData.forEach((item) => { + if (item[childrenProp]) { + recurseTreeDataToFlagInitDisabled(item[childrenProp], childrenProp, idProp, modelValue) + } + if (item.disabled) { + item.__disabled = true + } + if (modelValue.includes(item[idProp])) { + item.disabled = true + } + }) +} + +export const setCheckedOnMounted = + ({ props, vm, Tree }) => + () => { + if (props.render && props.render.plugin.name === Tree) { + vm.$refs.leftPanel?.$refs?.plugin?.setCheckedKeys(props.modelValue) + } + } diff --git a/packages/renderless/src/transfer/vue.ts b/packages/renderless/src/transfer/vue.ts index 6668c8ae0c..55a4492f09 100644 --- a/packages/renderless/src/transfer/vue.ts +++ b/packages/renderless/src/transfer/vue.ts @@ -29,13 +29,16 @@ import { addToLeft, addToRight, clearQuery, - sortableEvent + sortableEvent, + recurseTreeDataToFlagInitDisabled, + recurseTreeDataToDisabled, + setCheckedOnMounted } from './index' export const api = ['state', 'onSourceCheckedChange', 'onTargetCheckedChange', 'addToLeft', 'addToRight', 'clearQuery'] -const initState = ({ reactive, computed, api, props, h, slots }): ITransferState => - reactive({ +const initState = ({ reactive, computed, api, props, h, slots, Tree }): ITransferState => { + const state = reactive({ leftChecked: [], rightChecked: [], rightData: computed(() => api.getRightCheckedData()), @@ -55,18 +58,28 @@ const initState = ({ reactive, computed, api, props, h, slots }): ITransferState } return h('span', option[props.props.label] || option[props.props.key]) + }), + isToLeftBtnDisabled: computed(() => { + if (props.render?.plugin?.name === Tree) { + // 树模式下,已经选中的节点会勾选,所以要判断勾选的数量是否大于modelValue的数量 + return props.toLeftDisable && state.leftChecked.length <= props.modelValue.length + } + return props.toLeftDisable && state.leftChecked.length === 0 }) }) + return state +} + export const renderless = ( props: ITransferProps, - { computed, onMounted, reactive, h }: ISharedRenderlessParamHooks, + { computed, onMounted, reactive, h, watch }: ISharedRenderlessParamHooks, { $prefix, emit, refs, parent, slots, vm }: ITransferRenderlessParamUtils ) => { const api = {} as ITransferApi const Tree = $prefix + 'Tree' const Table = $prefix + 'Table' - const state = initState({ reactive, computed, api, props, h, slots }) + const state = initState({ reactive, computed, api, props, h, slots, Tree }) const { DROPPANEL, TRANSFERPANEL } = parent.$constants Object.assign(api, { @@ -82,9 +95,37 @@ export const renderless = ( onSourceCheckedChange: onSourceCheckedChange({ emit, state }), logicFun: logicFun({ props, emit, state, vm }), getTargetData: getTargetData({ props, state, Tree, Table }), - sortableEvent: sortableEvent({ api, droppanel: DROPPANEL, props, queryDom: TRANSFERPANEL, refs }) + sortableEvent: sortableEvent({ api, droppanel: DROPPANEL, props, queryDom: TRANSFERPANEL, refs }), + setCheckedOnMounted: setCheckedOnMounted({ props, vm, Tree }) }) + + // 树模式禁用已经选中的节点 + if (props.render?.plugin?.name === Tree) { + watch( + props.data, + (value) => { + recurseTreeDataToFlagInitDisabled( + value, + props.props.children || 'children', + props.props.key || 'key', + props.modelValue + ) + }, + { immediate: true } + ) + + watch( + () => props.modelValue, + (value) => { + if (props.render?.plugin?.name === Tree) { + recurseTreeDataToDisabled(props.data, props.props.children || 'children', props.props.key || 'key', value) + api.setCheckedOnMounted() + } + } + ) + } onMounted(api.sortableEvent) + onMounted(api.setCheckedOnMounted) return api } diff --git a/packages/vue/src/transfer/__tests__/transfer.test.tsx b/packages/vue/src/transfer/__tests__/transfer.test.tsx index 8849bbae5a..b2da3ba52e 100644 --- a/packages/vue/src/transfer/__tests__/transfer.test.tsx +++ b/packages/vue/src/transfer/__tests__/transfer.test.tsx @@ -1,6 +1,6 @@ import { ref } from 'vue' import Transfer from '@opentiny/vue-transfer' -import { describe, expect, test, vi } from 'vitest' +import { describe, expect, test } from 'vitest' import { mountPcMode } from '@opentiny-internal/vue-test-utils' describe('PC Mode', () => { @@ -106,22 +106,6 @@ describe('PC Mode', () => { */ test.todo('clearQuery 清空某个面板的搜索关键词') - /** - * events - */ - test('left change event', async () => { - const leftChangeEvent = vi.fn() - const wrapper = mount(Transfer, { - props: { - data: transferMockData(), - onLeftCheckChange: leftChangeEvent - } - }) - const tinyTransfer = wrapper.findComponent({ name: 'TinyTransfer' }) - await tinyTransfer.find('.tiny-transfer-panel__body .tiny-transfer-panel__list label').trigger('click') - expect(leftChangeEvent).toBeCalled() - }) - test.todo('change 右侧列表元素变化时触发') test.todo('right-check-change 右侧列表元素被用户选中/取消选中时触发') diff --git a/packages/vue/src/transfer/src/pc.vue b/packages/vue/src/transfer/src/pc.vue index 7330ca2a0a..469fc6cfaf 100644 --- a/packages/vue/src/transfer/src/pc.vue +++ b/packages/vue/src/transfer/src/pc.vue @@ -30,6 +30,7 @@ :default-checked="leftDefaultChecked" :placeholder="filterPlaceholder || t('ui.transfer.filterPlaceholder')" @checked-change="onSourceCheckedChange" + :show-left="true" > @@ -53,7 +54,7 @@ type="primary" :class="['tiny-transfer__button', state.hasButtonTexts ? 'is-with-texts' : '']" @click="addToRight" - :disabled="toLeftDisable && state.leftChecked.length === 0" + :disabled="state.isToLeftBtnDisabled" > {{ buttonTexts[1] }} @@ -98,6 +99,7 @@ :default-checked="rightDefaultChecked" :placeholder="filterPlaceholder || t('ui.transfer.filterPlaceholder')" @checked-change="onTargetCheckedChange" + :show-left="false" > From fc2b2f87435242496db663d15715a41d429aa1d8 Mon Sep 17 00:00:00 2001 From: gimmyhehe <975402925@qq.com> Date: Fri, 11 Apr 2025 10:31:54 +0800 Subject: [PATCH 007/120] fix(input): [input] fix input text word no break after warp span (#3281) --- packages/vue/src/input/src/mobile-first.vue | 3 +-- packages/vue/src/input/src/pc.vue | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/vue/src/input/src/mobile-first.vue b/packages/vue/src/input/src/mobile-first.vue index 14aa81b5a5..d076a3b4a2 100644 --- a/packages/vue/src/input/src/mobile-first.vue +++ b/packages/vue/src/input/src/mobile-first.vue @@ -301,8 +301,7 @@ v-if="state.showMoreBtn" class="float-right relative top-px clear-both text-color-brand text-sm leading-3 cursor-pointer" >{{ t('ui.input.more') }}>
- {{ state.displayOnlyText }} + >{{ state.displayOnlyText }}
diff --git a/packages/vue/src/input/src/pc.vue b/packages/vue/src/input/src/pc.vue index f7c4ebf4c8..4d74430948 100644 --- a/packages/vue/src/input/src/pc.vue +++ b/packages/vue/src/input/src/pc.vue @@ -181,8 +181,7 @@ {{ t('ui.input.more') }}> - {{ state.displayOnlyText }} + >{{ state.displayOnlyText }}
From 9148902d4aeca611e12f9cb007da58713ecefbcc Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Fri, 11 Apr 2025 11:10:00 +0800 Subject: [PATCH 008/120] feat(release): add vue3 version option to release:aurora command and update related logic; modify the names of multiple packages to adapt to the new naming convention (#3280) --- .../cli/src/commands/release/releaseAurora.ts | 17 +++++++++++---- internals/cli/src/index.ts | 21 ++++++------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/internals/cli/src/commands/release/releaseAurora.ts b/internals/cli/src/commands/release/releaseAurora.ts index 649fe0dbbb..8bfaa14a68 100644 --- a/internals/cli/src/commands/release/releaseAurora.ts +++ b/internals/cli/src/commands/release/releaseAurora.ts @@ -5,7 +5,7 @@ import fs from 'fs-extra' const onlyMobileFirstTemplateLists = ['popconfirm', 'card', 'card-group'] // 递归遍历所有的组件,然后依次修改文件内容 -const findAllpage = (packagesPath) => { +const findAllpage = (packagesPath, vue3version) => { if ( packagesPath.includes('.png') || packagesPath.includes('.gif') || @@ -21,7 +21,7 @@ const findAllpage = (packagesPath) => { if (fs.statSync(packagesPath).isDirectory()) { // 循环递归查找子文件夹 fs.readdirSync(packagesPath).forEach((childPatch) => { - findAllpage(path.join(packagesPath, childPatch)) + findAllpage(path.join(packagesPath, childPatch), vue3version) }) } else { const content = fs.readFileSync(packagesPath).toString('UTF-8' as BufferEncoding) @@ -42,6 +42,10 @@ const findAllpage = (packagesPath) => { .replace(/@aurora\/fluent-editor/g, '@opentiny/fluent-editor') .replace(/@aurora\/huicharts/g, '@opentiny/huicharts') + if (vue3version) { + result = result.replace(/@aurora\/vue/g, '@aurora/vue3') + } + // 解决当AUI只有一个mobile-first模板而TinyVue有多个模板,导致Linkjs加载不到多端模板的问题 if ( packagesPath.endsWith('index.js') && @@ -54,7 +58,7 @@ const findAllpage = (packagesPath) => { } } -export const releaseAurora = () => { +export const releaseAurora = ({ vue3version }) => { const distLists = [ 'dist2/@aurora', 'renderless/dist', @@ -65,7 +69,12 @@ export const releaseAurora = () => { 'vue-hooks/dist', 'vue-hooks/package.json' ] + + if (vue3version) { + distLists.push('dist3/@aurora') + } + distLists.forEach((item) => { - findAllpage(pathFromPackages(item)) + findAllpage(pathFromPackages(item), vue3version) }) } diff --git a/internals/cli/src/index.ts b/internals/cli/src/index.ts index aa318d0c38..938939e040 100644 --- a/internals/cli/src/index.ts +++ b/internals/cli/src/index.ts @@ -1,14 +1,18 @@ #!/usr/bin/env node import { Command, Option } from 'commander' import { createIconSaas } from './commands/create/index.js' -import { buildUi, buildEntry, buildRuntime, buildReact, buildEntryReact, chartTheme } from './commands/build' +import { buildUi, buildEntry, buildRuntime, chartTheme } from './commands/build' import { releaseAurora } from './commands/release/releaseAurora' import { releaseAlpha } from './commands/release/releaseAlpha' import { releaseE2EConfig } from './commands/release/releaseE2EConfig' const program = new Command() -program.command('release:aurora').description('转换为aurora的包').action(releaseAurora) +program + .command('release:aurora') + .description('转换为aurora的包') + .option('-v3, --vue3version', '是否使用vue3版本', false) + .action(releaseAurora) program .command('release:alpha') @@ -24,8 +28,6 @@ program program.command('create:icon-saas').description('同步生成 icon-saas').action(createIconSaas) -program.command('build:entry-react').description('生成 react 组件库入口').action(buildEntryReact) - program.command('build:entry').description('生成组件库入口').action(buildEntry) program.command('build:chartTheme').description('切换chart主题').action(chartTheme) @@ -52,15 +54,4 @@ program .option('--tiny_mode', '输出的模板类型', 'pc') .action(buildRuntime) -program - .command('build:react') - .description('打包 react 组件库') - .argument('[names...]', '构建指定组件,如 button alert;不指定则构建全量组件') - .addOption(new Option('-f --formats ', '目标格式,默认 ["es"]').choices(['es', 'cjs'])) - .addOption(new Option('-t --build-target ', '组件的目标版本')) - .option('-s, --scope ', 'npm scope,默认是 opentiny,会以 @opentiny 发布到 npm') - .option('-c, --clean', '清空构建目录') - .option('--no-dts', '不生成 dts') - .action(buildReact) - program.parse() From fc1ab1fcbe9158172f9c0676352bd145e74de0d4 Mon Sep 17 00:00:00 2001 From: chenxi-20 <2465950588@qq.com> Date: Fri, 11 Apr 2025 11:10:19 +0800 Subject: [PATCH 009/120] =?UTF-8?q?fix:=20[file-upload]=20=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEmetaerp=E9=9C=80=E6=B1=82=E8=B0=83=E6=95=B4=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BD=8D=E7=BD=AE=20(#3278)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/vue/src/file-upload/src/mobile-first.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue/src/file-upload/src/mobile-first.vue b/packages/vue/src/file-upload/src/mobile-first.vue index 29c2e8f5df..a8bffa1c5f 100644 --- a/packages/vue/src/file-upload/src/mobile-first.vue +++ b/packages/vue/src/file-upload/src/mobile-first.vue @@ -348,7 +348,7 @@ export default defineComponent({ {t('ui.fileUpload.uploadFile')} - + ) } else if (listType === 'drag-single') { From bec9bbdf77c29d2350e8dd50574df284b01b133d Mon Sep 17 00:00:00 2001 From: liukun <953831480@qq.com> Date: Fri, 11 Apr 2025 11:17:36 +0800 Subject: [PATCH 010/120] =?UTF-8?q?feat:=E6=97=A5=E5=8E=86=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E8=AF=A6=E7=BB=86=E6=97=B6=E9=97=B4=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=9A=90=E8=97=8F=20(#3274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/sites/demos/apis/calendar-view.js | 14 ++++++++++++++ packages/vue/src/calendar-view/src/index.ts | 4 ++++ .../vue/src/calendar-view/src/mobile-first.vue | 5 +++-- packages/vue/src/calendar-view/src/pc.vue | 5 +++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/examples/sites/demos/apis/calendar-view.js b/examples/sites/demos/apis/calendar-view.js index 73a3c3f6aa..5a76aa28c3 100644 --- a/examples/sites/demos/apis/calendar-view.js +++ b/examples/sites/demos/apis/calendar-view.js @@ -149,6 +149,20 @@ export default { pcDemo: 'basic-usage', mfDemo: 'basic-usage' }, + { + name: 'show-tip-time', + type: 'Boolean', + defaultValue: 'true', + desc: { + 'zh-CN': '显示日程tips时间', + 'en-US': 'Show schedule tips time' + }, + meta: { + stable: '3.23.0' + }, + mode: ['pc', 'mobile-first'], + mfDemo: '' + }, { name: 'v-model', type: 'String', diff --git a/packages/vue/src/calendar-view/src/index.ts b/packages/vue/src/calendar-view/src/index.ts index 5e8122f0b5..0520d2dc42 100644 --- a/packages/vue/src/calendar-view/src/index.ts +++ b/packages/vue/src/calendar-view/src/index.ts @@ -80,6 +80,10 @@ export const calendarViewProps = { showBackToday: { type: Boolean, default: true + }, + showTipTime: { + type: Boolean, + default: true } } diff --git a/packages/vue/src/calendar-view/src/mobile-first.vue b/packages/vue/src/calendar-view/src/mobile-first.vue index c7760b913c..bf4ccac9b2 100644 --- a/packages/vue/src/calendar-view/src/mobile-first.vue +++ b/packages/vue/src/calendar-view/src/mobile-first.vue @@ -4,7 +4,7 @@