From 18331d8aa791cab49ceb6acdf0c156eb7bd74f2c Mon Sep 17 00:00:00 2001 From: huyuyang Date: Mon, 23 Dec 2024 11:18:16 +0800 Subject: [PATCH 01/62] =?UTF-8?q?fix:=20=E9=AA=8C=E8=AF=81farris=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E7=BB=84=E4=BB=B6=E6=8B=86=E5=88=86=E6=89=93?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ui-vue/components/designer-index.ts | 10 ++ .../components/input-group/designer-index.ts | 24 ++++ .../ui-vue/components/input-group/index.ts | 16 +-- .../input-group/src/input-group.props.ts | 9 +- .../ui-vue/scripts/commands/build-designer.js | 131 ++++++++++++++++++ packages/ui-vue/scripts/index.js | 5 +- 6 files changed, 173 insertions(+), 22 deletions(-) create mode 100644 packages/ui-vue/components/designer-index.ts create mode 100644 packages/ui-vue/components/input-group/designer-index.ts create mode 100644 packages/ui-vue/scripts/commands/build-designer.js diff --git a/packages/ui-vue/components/designer-index.ts b/packages/ui-vue/components/designer-index.ts new file mode 100644 index 00000000000..6abb205835b --- /dev/null +++ b/packages/ui-vue/components/designer-index.ts @@ -0,0 +1,10 @@ +import { App } from 'vue'; +import FInputDesignerRegister from './input-group/designer-index'; + + +export default { + install(app: App) { + app.use(FInputDesignerRegister); + } +} + diff --git a/packages/ui-vue/components/input-group/designer-index.ts b/packages/ui-vue/components/input-group/designer-index.ts new file mode 100644 index 00000000000..af6db91a3c6 --- /dev/null +++ b/packages/ui-vue/components/input-group/designer-index.ts @@ -0,0 +1,24 @@ +import { createPropsResolver } from '@farris/ui-vue/components/dynamic-resolver'; +import FInputGroup from './src/input-group.component'; +import FInputGroupDesgin from './src/designer/input-group.design.component'; +import { schemaMapper } from './src/schema/schema-mapper'; +import { schemaResolver } from './src/schema/schema-resolver'; +import inputGroupSchema from './src/schema/input-group.schema.json'; +import { inputGroupProps, type InputGroupProps } from './src/input-group.props'; +import { App } from 'vue'; + +export const propsResolver = createPropsResolver(inputGroupProps, inputGroupSchema, schemaMapper, schemaResolver); + +export default { + install(app: App) { + app.component(FInputGroupDesgin.name as string, FInputGroupDesgin); + }, + register(componentMap: Record, propsResolverMap: Record, configResolverMap: Record, resolverMap: Record) { + componentMap['input-group'] = FInputGroup; + propsResolverMap['input-group'] = propsResolver; + }, + registerDesigner(componentMap: Record, propsResolverMap: Record, configResolverMap: Record) { + componentMap['input-group'] = FInputGroupDesgin; + propsResolverMap['input-group'] = propsResolver; + } +}; diff --git a/packages/ui-vue/components/input-group/index.ts b/packages/ui-vue/components/input-group/index.ts index caedd62aef3..299abcee552 100644 --- a/packages/ui-vue/components/input-group/index.ts +++ b/packages/ui-vue/components/input-group/index.ts @@ -1,4 +1,4 @@ - + /** * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. * @@ -14,22 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type { App } from 'vue'; import FInputGroup from './src/input-group.component'; -import FInputGroupDesgin from './src/designer/input-group.design.component'; -import { propsResolver } from './src/input-group.props'; import { withInstall } from '@farris/ui-vue/components/common'; -export * from './src/input-group.props'; - -FInputGroup.register = (componentMap: Record, propsResolverMap: Record, configResolverMap: Record, resolverMap: Record) => { - componentMap['input-group'] = FInputGroup; - propsResolverMap['input-group'] = propsResolver; -}; -FInputGroup.registerDesigner = (componentMap: Record, propsResolverMap: Record, configResolverMap: Record) => { - componentMap['input-group'] = FInputGroupDesgin; - propsResolverMap['input-group'] = propsResolver; -}; +export type { InputGroupProps } from './src/input-group.props'; export { FInputGroup }; export default withInstall(FInputGroup); diff --git a/packages/ui-vue/components/input-group/src/input-group.props.ts b/packages/ui-vue/components/input-group/src/input-group.props.ts index df0b0b97871..d2e4f90f328 100644 --- a/packages/ui-vue/components/input-group/src/input-group.props.ts +++ b/packages/ui-vue/components/input-group/src/input-group.props.ts @@ -14,13 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ExtractPropTypes, PropType } from 'vue'; -import { createPropsResolver } from '../../dynamic-resolver'; -import { schemaMapper } from './schema/schema-mapper'; -import { schemaResolver } from './schema/schema-resolver'; -import inputGroupSchema from './schema/input-group.schema.json'; +import { ExtractPropTypes } from 'vue'; -type TextAlignType = 'left' | 'right' | 'center' | 'start' | 'end' | 'justify'; export const inputGroupProps = { id: { Type: String, default: '' }, /** 是否自动完成 */ @@ -92,4 +87,4 @@ export const inputGroupProps = { export type InputGroupProps = ExtractPropTypes; -export const propsResolver = createPropsResolver(inputGroupProps, inputGroupSchema, schemaMapper, schemaResolver); + diff --git a/packages/ui-vue/scripts/commands/build-designer.js b/packages/ui-vue/scripts/commands/build-designer.js new file mode 100644 index 00000000000..6de9d5a0a98 --- /dev/null +++ b/packages/ui-vue/scripts/commands/build-designer.js @@ -0,0 +1,131 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { defineConfig, build } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; +import { replace } from './replace-path.js'; +const currentFileName = fileURLToPath(import.meta.url); +const currentDirectoryName = path.dirname(currentFileName); +const rootPath = path.resolve(currentDirectoryName, '../../'); + +const externals = ['vue', '@vueuse/core', '@vue/shared', 'bignumber.js', + 'lodash', 'lodash-es', 'echarts', '@farris/ui-vue/components']; +// 编译单个文件 +async function buildSeperately(componentName) { + const tsEntry = `./components/${componentName}/designer-index.ts`; + if (fs.existsSync(tsEntry)) { + await build( + defineConfig({ + configFile: false, + publicDir: false, + plugins: [vue(), vueJsx(), replace((format, args) => `..${args[1]}/index.${format}.js`)], + build: { + lib: { + entry: tsEntry, + name: componentName, + fileName: 'designer-index', + formats: ['esm','umd'] + }, + outDir: `./package/designer/components/${componentName}`, + rollupOptions: { + logLevel: 'silent', + external: + // ['vue', '@vueuse/core', '@vue/shared', 'bignumber.js', + // 'lodash', 'lodash-es', 'echarts'] + (id) => { + return externals.find((item) => id.indexOf(item) === 0); + }, + output: { + globals: { + vue: 'Vue', + '@vueuse/core': 'VueUseCore', + '@vue/shared': 'VueShared', + 'bignumber.js': 'BigNumber', + 'lodash-es': 'LodashES' + }, + assetFileNames: ({ name, names, type }) => { + if (type === 'asset' && /\.(css)$/i.test(name)) { + return 'index.[ext]'; + } + if (type === 'asset' && /\.(css)$/i.test(names)) { + return 'index.[ext]'; + } + return '[name].[ext]'; + } + } + } + }, + resolve: { + alias: { + '@farris/ui-vue/components': path.resolve(rootPath, './components') + } + } + }) + ); + } +} +const buildDesignerLibs = async () => { + await build( + defineConfig({ + configFile: false, + publicDir: false, + plugins: [ + vue(), + vueJsx(), + ], + build: { + lib: { + entry: './components/designer-index.ts', + name: 'FarrisVue', + fileName: 'farris-designer.all', + formats: ['esm', 'umd'] + }, + outDir: './package/designer', + rollupOptions: { + logLevel: 'silent', + external: ['vue', '@vueuse/core', '@vue/shared', 'bignumber.js', 'lodash', 'lodash-es', 'echarts'], + output: { + exports: "named", + globals: { + globals: { + vue: 'Vue', + '@vueuse/core': 'VueUseCore', + '@vue/shared': 'VueShared', + 'bignumber.js': 'BigNumber', + 'lodash-es': 'LodashES' + } + }, + assetFileNames: ({ names, type, name }) => { + if (type === 'asset' && /\.(css)$/i.test(name)) { + return 'index.[ext]'; + } + if (type === 'asset' && /\.(css)$/i.test(names)) { + return 'index.[ext]'; + } + return '[name].[ext]'; + } + } + } + }, + resolve: { + alias: { + '@farris/ui-vue/components': path.resolve(rootPath, './components') + } + } + }) + ); + + const components = fs.readdirSync('./components').filter((name) => { + const componentDir = path.resolve('./components', name); + const isDir = fs.lstatSync(componentDir).isDirectory(); + const ignore = false; + return isDir && !ignore && (fs.readdirSync(componentDir).includes('designer-index.ts')); + }); + + components.forEach((componentName) => { + buildSeperately(componentName); + }); +}; + +export { buildDesignerLibs }; diff --git a/packages/ui-vue/scripts/index.js b/packages/ui-vue/scripts/index.js index f0aa2b11f2e..9625dc3f9af 100644 --- a/packages/ui-vue/scripts/index.js +++ b/packages/ui-vue/scripts/index.js @@ -1,9 +1,12 @@ #!/usr/bin/env node import { Command, Option } from 'commander'; import { buildLibs } from './commands/build.js'; +import { buildDesignerLibs} from './commands/build-designer.js'; const program = new Command(); +const designerProgram = new Command(); program.command('build').description('构建 Farris UI Vue 组件库').action(buildLibs); - program.parse(); +designerProgram.command('build').description('构建 Farris UI Designer Vue 设计器组件库').action(buildDesignerLibs); +designerProgram.parse(); -- Gitee From d2be37e7a9f906ebc88a4f38713e734044c7ebbb Mon Sep 17 00:00:00 2001 From: huyuyang Date: Tue, 31 Dec 2024 11:21:46 +0800 Subject: [PATCH 02/62] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E4=B8=8D?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=97=B6,=E8=A1=A8=E6=A0=BC=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/data-view/composition/data/use-data-view.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/ui-vue/components/data-view/composition/data/use-data-view.ts b/packages/ui-vue/components/data-view/composition/data/use-data-view.ts index 5d5c3bcd1e6..6b82cffe391 100644 --- a/packages/ui-vue/components/data-view/composition/data/use-data-view.ts +++ b/packages/ui-vue/components/data-view/composition/data/use-data-view.ts @@ -74,7 +74,7 @@ export function useDataView( let summaries = new Map(); - const totalItems = computed(() => totalData.value?.length || 0); + const totalItems = ref(totalData.value?.length || 0); const pagination = ref(props.pagination); // const pageSize = computed(() => { @@ -108,10 +108,11 @@ export function useDataView( // deep:true // }); function resetDataView() { - totalData.value = cloneDeep(originalData.value); + totalData.value = originalData.value; if (shouldGroupingData.value) { totalData.value = generateGroupData(groupFields.value, originalData.value, columnMaps); } + totalItems.value = totalData.value.length; summaries = groupSummaryFields.value.reduce((sumaries: Map, summaryField: string) => { sumaries.set(summaryField, 0); return sumaries; @@ -298,7 +299,7 @@ export function useDataView( totalData.value = newData; rawView.value = newData; } - + totalItems.value = totalData.value.length; updateDataView(); } -- Gitee From 2255a8c2c3f0a89095039cb01abc0510c539c458 Mon Sep 17 00:00:00 2001 From: huyuyang Date: Tue, 31 Dec 2024 17:20:32 +0800 Subject: [PATCH 03/62] =?UTF-8?q?fix:=20=E5=AE=9E=E7=8E=B0inputgroup?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=AE=BE=E8=AE=A1=E6=97=B6=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E9=80=9A=E7=94=A8=E7=BB=84=E4=BB=B6=E5=88=86=E7=A6=BB?= =?UTF-8?q?=E6=89=93=E5=8C=85=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer-canvas/src/components/maps.ts | 2 +- .../{designer-index.ts => designer.ts} | 4 ++-- .../dynamic-view/src/components/maps.ts | 2 +- .../enum-editor-table.component.tsx | 6 ++--- .../view-model/view-model.component.tsx | 6 ++--- packages/ui-vue/components/index.ts | 4 ++-- .../{designer-index.ts => designer.ts} | 0 .../src/property-editor.component.tsx | 2 +- .../ui-vue/scripts/commands/build-designer.js | 23 +++++++++++++------ packages/ui-vue/scripts/commands/build.js | 17 +++++++++++--- .../scripts/commands/replace-designer-path.js | 17 ++++++++++++++ packages/ui-vue/scripts/index.js | 9 ++++---- 12 files changed, 65 insertions(+), 27 deletions(-) rename packages/ui-vue/components/{designer-index.ts => designer.ts} (64%) rename packages/ui-vue/components/input-group/{designer-index.ts => designer.ts} (100%) create mode 100644 packages/ui-vue/scripts/commands/replace-designer-path.js diff --git a/packages/ui-vue/components/designer-canvas/src/components/maps.ts b/packages/ui-vue/components/designer-canvas/src/components/maps.ts index 4981de5499e..8cf6d8c52d1 100644 --- a/packages/ui-vue/components/designer-canvas/src/components/maps.ts +++ b/packages/ui-vue/components/designer-canvas/src/components/maps.ts @@ -16,7 +16,7 @@ import FExteranlContainer from '@farris/ui-vue/components/external-container'; import FEventsEditor from '@farris/ui-vue/components/events-editor'; import FFilterBar from '@farris/ui-vue/components/filter-bar'; import FImageCropper from '@farris/ui-vue/components/image-cropper'; -import FInputGroup from '@farris/ui-vue/components/input-group'; +import FInputGroup from '@farris/ui-vue/components/input-group/designer'; import FLayout from '@farris/ui-vue/components/layout'; import FListNav from '@farris/ui-vue/components/list-nav'; import FListView from '@farris/ui-vue/components/list-view'; diff --git a/packages/ui-vue/components/designer-index.ts b/packages/ui-vue/components/designer.ts similarity index 64% rename from packages/ui-vue/components/designer-index.ts rename to packages/ui-vue/components/designer.ts index 6abb205835b..e8a7c576df8 100644 --- a/packages/ui-vue/components/designer-index.ts +++ b/packages/ui-vue/components/designer.ts @@ -1,6 +1,5 @@ import { App } from 'vue'; -import FInputDesignerRegister from './input-group/designer-index'; - +import FInputDesignerRegister from './input-group/designer'; export default { install(app: App) { @@ -8,3 +7,4 @@ export default { } } + diff --git a/packages/ui-vue/components/dynamic-view/src/components/maps.ts b/packages/ui-vue/components/dynamic-view/src/components/maps.ts index 2787adf3c49..c8f3112933a 100644 --- a/packages/ui-vue/components/dynamic-view/src/components/maps.ts +++ b/packages/ui-vue/components/dynamic-view/src/components/maps.ts @@ -19,7 +19,7 @@ import FFilterBar from '@farris/ui-vue/components/filter-bar'; import FFieldSelector from '@farris/ui-vue/components/field-selector'; import FBindingSelector from '@farris/ui-vue/components/binding-selector'; import FImageCropper from '@farris/ui-vue/components/image-cropper'; -import FInputGroup from '@farris/ui-vue/components/input-group'; +import FInputGroup from '@farris/ui-vue/components/input-group/designer'; import FLayout from '@farris/ui-vue/components/layout'; import FListNav from '@farris/ui-vue/components/list-nav'; import FListView from '@farris/ui-vue/components/list-view'; diff --git a/packages/ui-vue/components/enum-editor/src/components/enum-editor-table.component.tsx b/packages/ui-vue/components/enum-editor/src/components/enum-editor-table.component.tsx index 16cd2c92ca5..9dc7eb71e25 100644 --- a/packages/ui-vue/components/enum-editor/src/components/enum-editor-table.component.tsx +++ b/packages/ui-vue/components/enum-editor/src/components/enum-editor-table.component.tsx @@ -1,5 +1,5 @@ import { SetupContext, computed, defineComponent, reactive, ref, watch } from "vue"; -import InputGroupComponent from '@farris/ui-vue/components/input-group'; +import FInputGroup from '@farris/ui-vue/components/input-group'; import { EnumEditorTableProps, enumEditorTableProps } from "./enum-editor-table.props"; import { SelectedEnumItem } from "../composition/types"; @@ -102,10 +102,10 @@ export default defineComponent({ key={enumItem.id} data-index={itemIndex} class={selectedRowInfo.value?.index === itemIndex ? 'selected': ''}> - + - +