From 5ed0a07c7ec3594f2e432cb323a0931522192725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Sun, 15 Jun 2025 01:24:58 +0800 Subject: [PATCH 01/34] ci: support vue26 & vue27 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: ci fix: ci fix: ci fix: ci 更新 migrateImport.mjs 更新 pull-request.yml 更新 pull-request.yml feat: migrate babel config feat: migrate ts config ci: update chore: fxi tsconfig feat: migrate vitest config feat: migrate vitest config chore: wip chore: wip chore: wip chore: wip chore: wip chore: wip chore: wip --- .github/workflows/pull-request.yml | 116 ++++++++++++++++++++++++++- script/migrate/index.mjs | 22 +++++ script/migrate/migrateConfig.mjs | 113 ++++++++++++++++++++++++++ script/migrate/migrateImport.mjs | 21 +++++ script/migrate/migrateSingleFile.mjs | 17 ++++ 5 files changed, 287 insertions(+), 2 deletions(-) create mode 100644 script/migrate/index.mjs create mode 100644 script/migrate/migrateConfig.mjs create mode 100644 script/migrate/migrateImport.mjs create mode 100644 script/migrate/migrateSingleFile.mjs diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 23bcfc6f3..44b241954 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -9,5 +9,117 @@ on: types: [opened, synchronize, reopened] jobs: - call-test-build: - uses: Tencent/tdesign/.github/workflows/test-build.yml@main + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: check_github_primary_email + run: | + log_emails=$(git log --pretty=format:"%ae %ce" -1) + if [[ ${log_emails} =~ 'tdesign@tencent.com' ]];then + echo "$log_emails 跳过验证" + exit 0 + fi + if [[ ${log_emails} =~ '@tencent.com' ]];then + echo "默认邮箱 $log_emails 校验非法,可以去 https://github.com/settings/emails 更改" + exit 2; + else + echo "邮箱 $log_emails 校验通过"; + fi + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: check_local_email + run: | + log_emails=$(git log --pretty=format:"%ae %ce" -1) + if [[ ${log_emails} =~ 'tdesign@tencent.com' ]];then + echo "$log_emails 跳过验证" + exit 0 + fi + if [[ ${log_emails} =~ '@tencent.com' ]];then + echo "本地提交邮箱 $log_emails 校验非法,需要本地更改重新提交" + exit 2; + else + echo "邮箱 $log_emails 校验通过"; + fi + + test: + # needs: check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: pnpm/action-setup@v4 + with: + version: 9 + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - run: npm install + - run: node script/migrate/index.mjs + + - run: npm run lint + - run: npm run test + + site: + runs-on: ubuntu-latest + # needs: test + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: pnpm/action-setup@v4 + with: + version: 9 + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - run: npm install + - run: node script/migrate/index.mjs + + - name: Build site + run: npm run site:preview + + - run: | + zip -r _site.zip _site + + - name: upload _site artifact + uses: actions/upload-artifact@v4 + with: + name: _site + path: _site.zip + retention-days: 5 + + - name: Save PR number + if: ${{ always() }} + run: echo ${{ github.event.number }} > ./pr-id.txt + + - name: Upload PR number + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: pr + path: ./pr-id.txt + + build: + runs-on: ubuntu-latest + # needs: build + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: pnpm/action-setup@v4 + with: + version: 9 + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - run: npm install + - run: node script/migrate/index.mjs + + - name: Build + run: npm run build diff --git a/script/migrate/index.mjs b/script/migrate/index.mjs new file mode 100644 index 000000000..7c4f4a44a --- /dev/null +++ b/script/migrate/index.mjs @@ -0,0 +1,22 @@ +import { + migratePackageJson, migrateViteConfig, migrateVitestConfig, migrateTsconfig, migrateJsxDts, migrateBabelConfig, +} from './migrateConfig.mjs'; +import migrateImport from './migrateImport.mjs'; +import migrateSingleFile from './migrateSingleFile.mjs'; + +function run() { + migratePackageJson(); + + migrateViteConfig(); + migrateVitestConfig(); + migrateTsconfig(); + + migrateJsxDts(); + + migrateBabelConfig(); + + migrateSingleFile(); + migrateImport(); +} + +run(); diff --git a/script/migrate/migrateConfig.mjs b/script/migrate/migrateConfig.mjs new file mode 100644 index 000000000..f3feda120 --- /dev/null +++ b/script/migrate/migrateConfig.mjs @@ -0,0 +1,113 @@ +import { execSync } from 'node:child_process'; +import { readFileSync, writeFileSync } from 'node:fs'; + +export function migratePackageJson() { + execSync('git restore package.json'); + const pkg = JSON.parse(readFileSync('package.json', 'utf8')); + + delete pkg.dependencies['@vue/composition-api']; + delete pkg.devDependencies['vite-plugin-vue2']; + + pkg.peerDependencies = { + ...pkg.peerDependencies, + vue: '~2.7.14', + }; + + pkg.devDependencies = { + ...pkg.devDependencies, + '@vitejs/plugin-vue2': '^2.2.0', + '@vitejs/plugin-vue2-jsx': '^1.1.0', + '@vue/babel-preset-jsx': '^1.3.0', + 'vue-server-renderer': '^2.7.14', + 'vue-template-compiler': '^2.7.14', + 'vue-demi': '^0.13.1', + 'vue-loader': '^15.10.0', + vue: '~2.7.14', + }; + writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); +} + +export function migrateViteConfig() { + execSync('git restore site/vite.config.js'); + let content = readFileSync('site/vite.config.js', 'utf8'); + content = content + .replace( + "import { createVuePlugin } from 'vite-plugin-vue2';", + `import vue from '@vitejs/plugin-vue2'; +import vueJsx from '@vitejs/plugin-vue2-jsx';`, + ) + .replace('createVuePlugin', 'vue') + .replace('jsx: true,', '') + .replace( + 'tdocPlugin(),', + `vueJsx({}), + tdocPlugin(),`, + ); + writeFileSync('site/vite.config.js', content, 'utf8'); +} + +export function migrateVitestConfig() { + execSync('git restore vitest.config.js'); + let content = readFileSync('vitest.config.js', 'utf8'); + content = content + .replace( + "import { createVuePlugin } from 'vite-plugin-vue2';", + `import vue from '@vitejs/plugin-vue2'; +import vueJsx from '@vitejs/plugin-vue2-jsx';`, + ) + .replace('createVuePlugin', 'vue') + .replace('jsx: true,', '') + .replace( + 'tdocPlugin(),', + `vueJsx({}), + tdocPlugin(),`, + ); + writeFileSync('vitest.config.js', content, 'utf8'); +} + +export function migrateJsxDts() { + const content = `import { PluginObject } from 'vue'; // eslint-disable-line +declare module 'vue' { + interface ComponentInternalInstance { + // todo + [x: string]: any; + } + + interface ComponentCustomProps { + [key: string]: any; + } +} + +declare module 'vue' { + interface VueConstructor { + _installedPlugins: PluginObject[]; + } +} +`; + writeFileSync('jsx.d.ts', content, 'utf8'); +} + +export function migrateTsconfig() { + execSync('git restore tsconfig.json'); + let content = readFileSync('tsconfig.json', 'utf8'); + content = content.replace('"compileOnSave": false', `"compileOnSave": false, + "vueCompilerOptions": { + "target": 2.7 + }`); + + writeFileSync('tsconfig.json', content, 'utf8'); +} +export function migrateBabelConfig() { + execSync('git restore babel.config.js'); + let content = readFileSync('babel.config.js', 'utf8'); + content = content.replaceAll( + "'@vue/babel-preset-jsx',", + `[ + '@vue/babel-preset-jsx', + { + compositionAPI: true, + }, + ],`, + ); + writeFileSync('babel.config.js', content, 'utf8'); +} diff --git a/script/migrate/migrateImport.mjs b/script/migrate/migrateImport.mjs new file mode 100644 index 000000000..83c02e201 --- /dev/null +++ b/script/migrate/migrateImport.mjs @@ -0,0 +1,21 @@ +import glob from 'glob'; +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateImport() { + glob.sync('src/**/*.{tsx,vue,ts}', { ignore: ['src/_common'] }).forEach((file) => { + const content = readFileSync(file, 'utf8'); + if (content.includes('@vue/composition-api')) { + const newContent = content.replaceAll('@vue/composition-api', 'vue'); + writeFileSync(file, newContent, 'utf8'); + } + console.log(`Processing file: ${file}`); + }); + glob.sync('site/**/*.vue', { ignore: ['node_modules'] }).forEach((file) => { + const content = readFileSync(file, 'utf8'); + if (content.includes('@vue/composition-api')) { + const newContent = content.replaceAll('@vue/composition-api', 'vue'); + writeFileSync(file, newContent, 'utf8'); + } + console.log(`Processing file: ${file}`); + }); +} diff --git a/script/migrate/migrateSingleFile.mjs b/script/migrate/migrateSingleFile.mjs new file mode 100644 index 000000000..33b25bc21 --- /dev/null +++ b/script/migrate/migrateSingleFile.mjs @@ -0,0 +1,17 @@ +import { execSync } from 'node:child_process'; +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateSrcIndexTs() { + execSync('git restore src/index.ts'); + let content = readFileSync('src/index.ts', 'utf8'); + content = content.replace("import VueCompositionAPI from '@vue/composition-api';", ''); + + // 替换 VueCompositionAPI 安装代码 + content = content.replace(/\s*if \(Vue\._installedPlugins\.indexOf\(VueCompositionAPI\) === -1\) \{\s*Vue\.use\(VueCompositionAPI\);\s*\}/g, ''); + + writeFileSync('src/index.ts', content, 'utf8'); +} + +export default function migrateSingleFile() { + migrateSrcIndexTs(); +} From 5fc3742a2cf0cc839e2aa3bfcfbd57dbbf0f08fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Sun, 15 Jun 2025 15:32:08 +0800 Subject: [PATCH 02/34] chore: fix ci --- .github/workflows/pull-request.yml | 12 ++++++----- script/migrate/migrateConfig.mjs | 8 ++++++- script/migrate/migrateImport.mjs | 12 ++++++++--- script/migrate/migrateSingleFile.mjs | 31 ++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 44b241954..09bce2ead 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -57,8 +57,9 @@ jobs: with: node-version: 18 - - run: npm install + - run: pnpm install - run: node script/migrate/index.mjs + - run: pnpm install --no-frozen-lockfile - run: npm run lint - run: npm run test @@ -77,8 +78,9 @@ jobs: with: node-version: 18 - - run: npm install + - run: pnpm install - run: node script/migrate/index.mjs + - run: pnpm install --no-frozen-lockfile - name: Build site run: npm run site:preview @@ -118,8 +120,8 @@ jobs: with: node-version: 18 - - run: npm install - - run: node script/migrate/index.mjs - + - run: pnpm install + - run: node script/migrate/index.mjs + - run: pnpm install --no-frozen-lockfile - name: Build run: npm run build diff --git a/script/migrate/migrateConfig.mjs b/script/migrate/migrateConfig.mjs index f3feda120..73da90c1c 100644 --- a/script/migrate/migrateConfig.mjs +++ b/script/migrate/migrateConfig.mjs @@ -7,6 +7,7 @@ export function migratePackageJson() { delete pkg.dependencies['@vue/composition-api']; delete pkg.devDependencies['vite-plugin-vue2']; + delete pkg.devDependencies['unplugin-vue2-script-setup']; pkg.peerDependencies = { ...pkg.peerDependencies, @@ -15,7 +16,7 @@ export function migratePackageJson() { pkg.devDependencies = { ...pkg.devDependencies, - '@vitejs/plugin-vue2': '^2.2.0', + '@vitejs/plugin-vue2': '^2.3.3', '@vitejs/plugin-vue2-jsx': '^1.1.0', '@vue/babel-preset-jsx': '^1.3.0', 'vue-server-renderer': '^2.7.14', @@ -23,6 +24,7 @@ export function migratePackageJson() { 'vue-demi': '^0.13.1', 'vue-loader': '^15.10.0', vue: '~2.7.14', + 'eslint-plugin-vue': '^9.3.0', }; writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); } @@ -37,6 +39,8 @@ export function migrateViteConfig() { import vueJsx from '@vitejs/plugin-vue2-jsx';`, ) .replace('createVuePlugin', 'vue') + .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') + .replace('ScriptSetup({}),', '') .replace('jsx: true,', '') .replace( 'tdocPlugin(),', @@ -57,6 +61,8 @@ import vueJsx from '@vitejs/plugin-vue2-jsx';`, ) .replace('createVuePlugin', 'vue') .replace('jsx: true,', '') + .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') + .replace('ScriptSetup({}),', '') .replace( 'tdocPlugin(),', `vueJsx({}), diff --git a/script/migrate/migrateImport.mjs b/script/migrate/migrateImport.mjs index 83c02e201..4dafe58fb 100644 --- a/script/migrate/migrateImport.mjs +++ b/script/migrate/migrateImport.mjs @@ -3,10 +3,16 @@ import { readFileSync, writeFileSync } from 'node:fs'; export default function migrateImport() { glob.sync('src/**/*.{tsx,vue,ts}', { ignore: ['src/_common'] }).forEach((file) => { - const content = readFileSync(file, 'utf8'); + let content = readFileSync(file, 'utf8'); if (content.includes('@vue/composition-api')) { - const newContent = content.replaceAll('@vue/composition-api', 'vue'); - writeFileSync(file, newContent, 'utf8'); + content = content.replaceAll('@vue/composition-api', 'vue'); + writeFileSync(file, content, 'utf8'); + } + if(content.includes("import VueCompositionAPI from 'vue';")){ + content = content.replaceAll("import VueCompositionAPI from 'vue';", '') + .replaceAll(", VueCompositionAPI", ''); + + writeFileSync(file, content, 'utf8'); } console.log(`Processing file: ${file}`); }); diff --git a/script/migrate/migrateSingleFile.mjs b/script/migrate/migrateSingleFile.mjs index 33b25bc21..e162ab734 100644 --- a/script/migrate/migrateSingleFile.mjs +++ b/script/migrate/migrateSingleFile.mjs @@ -12,6 +12,37 @@ function migrateSrcIndexTs() { writeFileSync('src/index.ts', content, 'utf8'); } +function migrateSrcTreeAdaptTs(){ + execSync('git restore src/tree/adapt.ts'); + let content = readFileSync('src/tree/adapt.ts', 'utf8'); + content = content.replace('VueCompositionAPI,','').replace(", VueCompositionAPI", ''); + writeFileSync('src/tree/adapt.ts', content, 'utf8'); + +} + +function migrateSrcAnchorAnchorTsx(){ + let content = readFileSync('src/anchor/anchor.tsx', 'utf8'); + if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { + return; // 已经存在,不需要重复添加 + } + content= "import { CSSProperties } from 'vue/types/jsx';\n"+content; + content=content.replace("{activeLineStyle}", "{activeLineStyle as CSSProperties}"); + writeFileSync('src/anchor/anchor.tsx', content, 'utf8'); +} + +function migrateSrcCalendarCalendarCellTsx(){ + let content = readFileSync('src/calendar/calendar-cell.tsx', 'utf8'); + if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { + return; // 已经存在,不需要重复添加 + } + content= "import { CSSProperties } from 'vue/types/jsx';\n"+content; + content=content.replace("{cellContentOuterDomStyle}", "{cellContentOuterDomStyle as CSSProperties}"); + writeFileSync('src/calendar/calendar-cell.tsx', content, 'utf8'); +} + export default function migrateSingleFile() { migrateSrcIndexTs(); + migrateSrcTreeAdaptTs(); + migrateSrcAnchorAnchorTsx(); + migrateSrcCalendarCalendarCellTsx(); } From 9674231d80eab5e71c2cabf254cc5b5a635cbf35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Mon, 16 Jun 2025 09:19:03 +0800 Subject: [PATCH 03/34] chore(deps): remove vue-template-compiler --- script/migrate/migrateConfig.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/migrate/migrateConfig.mjs b/script/migrate/migrateConfig.mjs index 73da90c1c..24f1e9f9e 100644 --- a/script/migrate/migrateConfig.mjs +++ b/script/migrate/migrateConfig.mjs @@ -8,6 +8,7 @@ export function migratePackageJson() { delete pkg.dependencies['@vue/composition-api']; delete pkg.devDependencies['vite-plugin-vue2']; delete pkg.devDependencies['unplugin-vue2-script-setup']; + delete pkg.devDependencies['vue-template-compiler']; pkg.peerDependencies = { ...pkg.peerDependencies, @@ -20,7 +21,6 @@ export function migratePackageJson() { '@vitejs/plugin-vue2-jsx': '^1.1.0', '@vue/babel-preset-jsx': '^1.3.0', 'vue-server-renderer': '^2.7.14', - 'vue-template-compiler': '^2.7.14', 'vue-demi': '^0.13.1', 'vue-loader': '^15.10.0', vue: '~2.7.14', From bdf038b30207820f693c9382f0f5b91f448e8113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Mon, 16 Jun 2025 11:30:55 +0800 Subject: [PATCH 04/34] chore: update script --- .github/workflows/pull-request.yml | 12 +- .../{ => components}/migrateImport.mjs | 4 +- .../{ => components}/migrateSingleFile.mjs | 17 ++- script/migrate/config/migrateConfig.mjs | 119 +++++++++++++++++ script/migrate/index.mjs | 22 ---- script/migrate/migrateComponent.mjs | 9 ++ script/migrate/migrateConfig.mjs | 124 ++---------------- 7 files changed, 155 insertions(+), 152 deletions(-) rename script/migrate/{ => components}/migrateImport.mjs (89%) rename script/migrate/{ => components}/migrateSingleFile.mjs (72%) create mode 100644 script/migrate/config/migrateConfig.mjs delete mode 100644 script/migrate/index.mjs create mode 100644 script/migrate/migrateComponent.mjs diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 09bce2ead..383dfd9c1 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -57,9 +57,9 @@ jobs: with: node-version: 18 + - run: node script/migrate/migrateConfig.mjs - run: pnpm install - - run: node script/migrate/index.mjs - - run: pnpm install --no-frozen-lockfile + - run: node script/migrate/migrateComponent.mjs - run: npm run lint - run: npm run test @@ -78,9 +78,9 @@ jobs: with: node-version: 18 + - run: node script/migrate/migrateConfig.mjs - run: pnpm install - - run: node script/migrate/index.mjs - - run: pnpm install --no-frozen-lockfile + - run: node script/migrate/migrateComponent.mjs - name: Build site run: npm run site:preview @@ -120,8 +120,8 @@ jobs: with: node-version: 18 + - run: node script/migrate/migrateConfig.mjs - run: pnpm install - - run: node script/migrate/index.mjs - - run: pnpm install --no-frozen-lockfile + - run: node script/migrate/migrateComponent.mjs - name: Build run: npm run build diff --git a/script/migrate/migrateImport.mjs b/script/migrate/components/migrateImport.mjs similarity index 89% rename from script/migrate/migrateImport.mjs rename to script/migrate/components/migrateImport.mjs index 4dafe58fb..8ae2a5c0b 100644 --- a/script/migrate/migrateImport.mjs +++ b/script/migrate/components/migrateImport.mjs @@ -8,9 +8,9 @@ export default function migrateImport() { content = content.replaceAll('@vue/composition-api', 'vue'); writeFileSync(file, content, 'utf8'); } - if(content.includes("import VueCompositionAPI from 'vue';")){ + if (content.includes("import VueCompositionAPI from 'vue';")) { content = content.replaceAll("import VueCompositionAPI from 'vue';", '') - .replaceAll(", VueCompositionAPI", ''); + .replaceAll(', VueCompositionAPI', ''); writeFileSync(file, content, 'utf8'); } diff --git a/script/migrate/migrateSingleFile.mjs b/script/migrate/components/migrateSingleFile.mjs similarity index 72% rename from script/migrate/migrateSingleFile.mjs rename to script/migrate/components/migrateSingleFile.mjs index e162ab734..323159fe7 100644 --- a/script/migrate/migrateSingleFile.mjs +++ b/script/migrate/components/migrateSingleFile.mjs @@ -12,31 +12,30 @@ function migrateSrcIndexTs() { writeFileSync('src/index.ts', content, 'utf8'); } -function migrateSrcTreeAdaptTs(){ +function migrateSrcTreeAdaptTs() { execSync('git restore src/tree/adapt.ts'); let content = readFileSync('src/tree/adapt.ts', 'utf8'); - content = content.replace('VueCompositionAPI,','').replace(", VueCompositionAPI", ''); + content = content.replace('VueCompositionAPI,', '').replace(', VueCompositionAPI', ''); writeFileSync('src/tree/adapt.ts', content, 'utf8'); - } -function migrateSrcAnchorAnchorTsx(){ +function migrateSrcAnchorAnchorTsx() { let content = readFileSync('src/anchor/anchor.tsx', 'utf8'); if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { return; // 已经存在,不需要重复添加 } - content= "import { CSSProperties } from 'vue/types/jsx';\n"+content; - content=content.replace("{activeLineStyle}", "{activeLineStyle as CSSProperties}"); + content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; + content = content.replace('{activeLineStyle}', '{activeLineStyle as CSSProperties}'); writeFileSync('src/anchor/anchor.tsx', content, 'utf8'); } -function migrateSrcCalendarCalendarCellTsx(){ +function migrateSrcCalendarCalendarCellTsx() { let content = readFileSync('src/calendar/calendar-cell.tsx', 'utf8'); if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { return; // 已经存在,不需要重复添加 } - content= "import { CSSProperties } from 'vue/types/jsx';\n"+content; - content=content.replace("{cellContentOuterDomStyle}", "{cellContentOuterDomStyle as CSSProperties}"); + content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; + content = content.replace('{cellContentOuterDomStyle}', '{cellContentOuterDomStyle as CSSProperties}'); writeFileSync('src/calendar/calendar-cell.tsx', content, 'utf8'); } diff --git a/script/migrate/config/migrateConfig.mjs b/script/migrate/config/migrateConfig.mjs new file mode 100644 index 000000000..24f1e9f9e --- /dev/null +++ b/script/migrate/config/migrateConfig.mjs @@ -0,0 +1,119 @@ +import { execSync } from 'node:child_process'; +import { readFileSync, writeFileSync } from 'node:fs'; + +export function migratePackageJson() { + execSync('git restore package.json'); + const pkg = JSON.parse(readFileSync('package.json', 'utf8')); + + delete pkg.dependencies['@vue/composition-api']; + delete pkg.devDependencies['vite-plugin-vue2']; + delete pkg.devDependencies['unplugin-vue2-script-setup']; + delete pkg.devDependencies['vue-template-compiler']; + + pkg.peerDependencies = { + ...pkg.peerDependencies, + vue: '~2.7.14', + }; + + pkg.devDependencies = { + ...pkg.devDependencies, + '@vitejs/plugin-vue2': '^2.3.3', + '@vitejs/plugin-vue2-jsx': '^1.1.0', + '@vue/babel-preset-jsx': '^1.3.0', + 'vue-server-renderer': '^2.7.14', + 'vue-demi': '^0.13.1', + 'vue-loader': '^15.10.0', + vue: '~2.7.14', + 'eslint-plugin-vue': '^9.3.0', + }; + writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); +} + +export function migrateViteConfig() { + execSync('git restore site/vite.config.js'); + let content = readFileSync('site/vite.config.js', 'utf8'); + content = content + .replace( + "import { createVuePlugin } from 'vite-plugin-vue2';", + `import vue from '@vitejs/plugin-vue2'; +import vueJsx from '@vitejs/plugin-vue2-jsx';`, + ) + .replace('createVuePlugin', 'vue') + .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') + .replace('ScriptSetup({}),', '') + .replace('jsx: true,', '') + .replace( + 'tdocPlugin(),', + `vueJsx({}), + tdocPlugin(),`, + ); + writeFileSync('site/vite.config.js', content, 'utf8'); +} + +export function migrateVitestConfig() { + execSync('git restore vitest.config.js'); + let content = readFileSync('vitest.config.js', 'utf8'); + content = content + .replace( + "import { createVuePlugin } from 'vite-plugin-vue2';", + `import vue from '@vitejs/plugin-vue2'; +import vueJsx from '@vitejs/plugin-vue2-jsx';`, + ) + .replace('createVuePlugin', 'vue') + .replace('jsx: true,', '') + .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') + .replace('ScriptSetup({}),', '') + .replace( + 'tdocPlugin(),', + `vueJsx({}), + tdocPlugin(),`, + ); + writeFileSync('vitest.config.js', content, 'utf8'); +} + +export function migrateJsxDts() { + const content = `import { PluginObject } from 'vue'; // eslint-disable-line +declare module 'vue' { + interface ComponentInternalInstance { + // todo + [x: string]: any; + } + + interface ComponentCustomProps { + [key: string]: any; + } +} + +declare module 'vue' { + interface VueConstructor { + _installedPlugins: PluginObject[]; + } +} +`; + writeFileSync('jsx.d.ts', content, 'utf8'); +} + +export function migrateTsconfig() { + execSync('git restore tsconfig.json'); + let content = readFileSync('tsconfig.json', 'utf8'); + content = content.replace('"compileOnSave": false', `"compileOnSave": false, + "vueCompilerOptions": { + "target": 2.7 + }`); + + writeFileSync('tsconfig.json', content, 'utf8'); +} +export function migrateBabelConfig() { + execSync('git restore babel.config.js'); + let content = readFileSync('babel.config.js', 'utf8'); + content = content.replaceAll( + "'@vue/babel-preset-jsx',", + `[ + '@vue/babel-preset-jsx', + { + compositionAPI: true, + }, + ],`, + ); + writeFileSync('babel.config.js', content, 'utf8'); +} diff --git a/script/migrate/index.mjs b/script/migrate/index.mjs deleted file mode 100644 index 7c4f4a44a..000000000 --- a/script/migrate/index.mjs +++ /dev/null @@ -1,22 +0,0 @@ -import { - migratePackageJson, migrateViteConfig, migrateVitestConfig, migrateTsconfig, migrateJsxDts, migrateBabelConfig, -} from './migrateConfig.mjs'; -import migrateImport from './migrateImport.mjs'; -import migrateSingleFile from './migrateSingleFile.mjs'; - -function run() { - migratePackageJson(); - - migrateViteConfig(); - migrateVitestConfig(); - migrateTsconfig(); - - migrateJsxDts(); - - migrateBabelConfig(); - - migrateSingleFile(); - migrateImport(); -} - -run(); diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs new file mode 100644 index 000000000..3d5ad6e82 --- /dev/null +++ b/script/migrate/migrateComponent.mjs @@ -0,0 +1,9 @@ +import migrateImport from './components/migrateImport.mjs'; +import migrateSingleFile from './components/migrateSingleFile.mjs'; + +function run() { + migrateSingleFile(); + migrateImport(); +} + +run(); diff --git a/script/migrate/migrateConfig.mjs b/script/migrate/migrateConfig.mjs index 24f1e9f9e..a6b96d03a 100644 --- a/script/migrate/migrateConfig.mjs +++ b/script/migrate/migrateConfig.mjs @@ -1,119 +1,17 @@ -import { execSync } from 'node:child_process'; -import { readFileSync, writeFileSync } from 'node:fs'; +import { + migratePackageJson, migrateViteConfig, migrateVitestConfig, migrateTsconfig, migrateJsxDts, migrateBabelConfig, +} from './config/migrateConfig.mjs'; -export function migratePackageJson() { - execSync('git restore package.json'); - const pkg = JSON.parse(readFileSync('package.json', 'utf8')); +function run() { + migratePackageJson(); - delete pkg.dependencies['@vue/composition-api']; - delete pkg.devDependencies['vite-plugin-vue2']; - delete pkg.devDependencies['unplugin-vue2-script-setup']; - delete pkg.devDependencies['vue-template-compiler']; + migrateViteConfig(); + migrateVitestConfig(); + migrateTsconfig(); - pkg.peerDependencies = { - ...pkg.peerDependencies, - vue: '~2.7.14', - }; + migrateJsxDts(); - pkg.devDependencies = { - ...pkg.devDependencies, - '@vitejs/plugin-vue2': '^2.3.3', - '@vitejs/plugin-vue2-jsx': '^1.1.0', - '@vue/babel-preset-jsx': '^1.3.0', - 'vue-server-renderer': '^2.7.14', - 'vue-demi': '^0.13.1', - 'vue-loader': '^15.10.0', - vue: '~2.7.14', - 'eslint-plugin-vue': '^9.3.0', - }; - writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); + migrateBabelConfig(); } -export function migrateViteConfig() { - execSync('git restore site/vite.config.js'); - let content = readFileSync('site/vite.config.js', 'utf8'); - content = content - .replace( - "import { createVuePlugin } from 'vite-plugin-vue2';", - `import vue from '@vitejs/plugin-vue2'; -import vueJsx from '@vitejs/plugin-vue2-jsx';`, - ) - .replace('createVuePlugin', 'vue') - .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') - .replace('ScriptSetup({}),', '') - .replace('jsx: true,', '') - .replace( - 'tdocPlugin(),', - `vueJsx({}), - tdocPlugin(),`, - ); - writeFileSync('site/vite.config.js', content, 'utf8'); -} - -export function migrateVitestConfig() { - execSync('git restore vitest.config.js'); - let content = readFileSync('vitest.config.js', 'utf8'); - content = content - .replace( - "import { createVuePlugin } from 'vite-plugin-vue2';", - `import vue from '@vitejs/plugin-vue2'; -import vueJsx from '@vitejs/plugin-vue2-jsx';`, - ) - .replace('createVuePlugin', 'vue') - .replace('jsx: true,', '') - .replace("import ScriptSetup from 'unplugin-vue2-script-setup/vite';", '') - .replace('ScriptSetup({}),', '') - .replace( - 'tdocPlugin(),', - `vueJsx({}), - tdocPlugin(),`, - ); - writeFileSync('vitest.config.js', content, 'utf8'); -} - -export function migrateJsxDts() { - const content = `import { PluginObject } from 'vue'; // eslint-disable-line -declare module 'vue' { - interface ComponentInternalInstance { - // todo - [x: string]: any; - } - - interface ComponentCustomProps { - [key: string]: any; - } -} - -declare module 'vue' { - interface VueConstructor { - _installedPlugins: PluginObject[]; - } -} -`; - writeFileSync('jsx.d.ts', content, 'utf8'); -} - -export function migrateTsconfig() { - execSync('git restore tsconfig.json'); - let content = readFileSync('tsconfig.json', 'utf8'); - content = content.replace('"compileOnSave": false', `"compileOnSave": false, - "vueCompilerOptions": { - "target": 2.7 - }`); - - writeFileSync('tsconfig.json', content, 'utf8'); -} -export function migrateBabelConfig() { - execSync('git restore babel.config.js'); - let content = readFileSync('babel.config.js', 'utf8'); - content = content.replaceAll( - "'@vue/babel-preset-jsx',", - `[ - '@vue/babel-preset-jsx', - { - compositionAPI: true, - }, - ],`, - ); - writeFileSync('babel.config.js', content, 'utf8'); -} +run(); From 3e5b7adcd19cdd804fd943e82dbf121abcf84597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Mon, 16 Jun 2025 23:30:28 +0800 Subject: [PATCH 05/34] fix(deps): @types/estree --- script/migrate/config/migrateConfig.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/script/migrate/config/migrateConfig.mjs b/script/migrate/config/migrateConfig.mjs index 24f1e9f9e..93c396951 100644 --- a/script/migrate/config/migrateConfig.mjs +++ b/script/migrate/config/migrateConfig.mjs @@ -25,6 +25,7 @@ export function migratePackageJson() { 'vue-loader': '^15.10.0', vue: '~2.7.14', 'eslint-plugin-vue': '^9.3.0', + '@types/estree': '1.0.0', }; writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); } From 6ff49cae3b434c4ac3b1153117ce6f4c2e22b710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 00:13:22 +0800 Subject: [PATCH 06/34] feat: migrate components --- script/migrate/components/anchor.mjs | 10 +++++++ script/migrate/components/auto-complete.mjs | 10 +++++++ script/migrate/components/calendar.mjs | 11 +++++++ script/migrate/components/card.mjs | 10 +++++++ script/migrate/components/migrateImport.mjs | 15 +++++++--- .../migrate/components/migrateSingleFile.mjs | 30 ------------------- script/migrate/components/tree.mjs | 7 +++++ script/migrate/migrateComponent.mjs | 15 ++++++++++ script/migrate/utils/helper.mjs | 13 ++++++++ script/migrate/utils/render-tnode.mjs | 12 ++++++++ src/cascader/cascader.tsx | 1 + src/checkbox/checkbox.tsx | 1 + src/checkbox/group.tsx | 1 + 13 files changed, 102 insertions(+), 34 deletions(-) create mode 100644 script/migrate/components/anchor.mjs create mode 100644 script/migrate/components/auto-complete.mjs create mode 100644 script/migrate/components/calendar.mjs create mode 100644 script/migrate/components/card.mjs create mode 100644 script/migrate/components/tree.mjs create mode 100644 script/migrate/utils/helper.mjs create mode 100644 script/migrate/utils/render-tnode.mjs diff --git a/script/migrate/components/anchor.mjs b/script/migrate/components/anchor.mjs new file mode 100644 index 000000000..1d110ad1b --- /dev/null +++ b/script/migrate/components/anchor.mjs @@ -0,0 +1,10 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateAnchor() { + let content = readFileSync('src/anchor/anchor.tsx', 'utf8'); + if (!content.includes("import { CSSProperties } from 'vue/types/jsx';")) { + content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; + content = content.replace('{activeLineStyle}', '{activeLineStyle as CSSProperties}'); + writeFileSync('src/anchor/anchor.tsx', content, 'utf8'); + } +} diff --git a/script/migrate/components/auto-complete.mjs b/script/migrate/components/auto-complete.mjs new file mode 100644 index 000000000..6707e3244 --- /dev/null +++ b/script/migrate/components/auto-complete.mjs @@ -0,0 +1,10 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateAutoComplete() { + const filePath = 'src/auto-complete/auto-complete.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('...this.popupProps,')) { + content = content.replace('...this.popupProps,', '...(this.popupProps as PopupProps),'); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/components/calendar.mjs b/script/migrate/components/calendar.mjs new file mode 100644 index 000000000..65fb9c9d7 --- /dev/null +++ b/script/migrate/components/calendar.mjs @@ -0,0 +1,11 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateCalendar() { + const filePath = 'src/calendar/calendar-cell.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (!content.includes("import { CSSProperties } from 'vue/types/jsx';")) { + content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; + content = content.replace('{cellContentOuterDomStyle}', '{cellContentOuterDomStyle as CSSProperties}'); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/components/card.mjs b/script/migrate/components/card.mjs new file mode 100644 index 000000000..7a208e0ec --- /dev/null +++ b/script/migrate/components/card.mjs @@ -0,0 +1,10 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateCard() { + const filePath = 'src/card/card.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('{this.cover}')) { + content = content.replace('{this.cover}', '{this.cover as string}'); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/components/migrateImport.mjs b/script/migrate/components/migrateImport.mjs index 8ae2a5c0b..3656b8f73 100644 --- a/script/migrate/components/migrateImport.mjs +++ b/script/migrate/components/migrateImport.mjs @@ -4,17 +4,24 @@ import { readFileSync, writeFileSync } from 'node:fs'; export default function migrateImport() { glob.sync('src/**/*.{tsx,vue,ts}', { ignore: ['src/_common'] }).forEach((file) => { let content = readFileSync(file, 'utf8'); + let isChange = false; if (content.includes('@vue/composition-api')) { content = content.replaceAll('@vue/composition-api', 'vue'); - writeFileSync(file, content, 'utf8'); + isChange = true; } if (content.includes("import VueCompositionAPI from 'vue';")) { content = content.replaceAll("import VueCompositionAPI from 'vue';", '') .replaceAll(', VueCompositionAPI', ''); - + isChange = true; + } + if (content.includes('// vue27:ts-ignore')) { + content = content.replaceAll('// vue27:ts-ignore', '// @ts-ignore'); + isChange = true; + } + if (isChange) { writeFileSync(file, content, 'utf8'); } - console.log(`Processing file: ${file}`); + // console.log(`Processing file: ${file}`); }); glob.sync('site/**/*.vue', { ignore: ['node_modules'] }).forEach((file) => { const content = readFileSync(file, 'utf8'); @@ -22,6 +29,6 @@ export default function migrateImport() { const newContent = content.replaceAll('@vue/composition-api', 'vue'); writeFileSync(file, newContent, 'utf8'); } - console.log(`Processing file: ${file}`); + // console.log(`Processing file: ${file}`); }); } diff --git a/script/migrate/components/migrateSingleFile.mjs b/script/migrate/components/migrateSingleFile.mjs index 323159fe7..33b25bc21 100644 --- a/script/migrate/components/migrateSingleFile.mjs +++ b/script/migrate/components/migrateSingleFile.mjs @@ -12,36 +12,6 @@ function migrateSrcIndexTs() { writeFileSync('src/index.ts', content, 'utf8'); } -function migrateSrcTreeAdaptTs() { - execSync('git restore src/tree/adapt.ts'); - let content = readFileSync('src/tree/adapt.ts', 'utf8'); - content = content.replace('VueCompositionAPI,', '').replace(', VueCompositionAPI', ''); - writeFileSync('src/tree/adapt.ts', content, 'utf8'); -} - -function migrateSrcAnchorAnchorTsx() { - let content = readFileSync('src/anchor/anchor.tsx', 'utf8'); - if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { - return; // 已经存在,不需要重复添加 - } - content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; - content = content.replace('{activeLineStyle}', '{activeLineStyle as CSSProperties}'); - writeFileSync('src/anchor/anchor.tsx', content, 'utf8'); -} - -function migrateSrcCalendarCalendarCellTsx() { - let content = readFileSync('src/calendar/calendar-cell.tsx', 'utf8'); - if (content.includes("import { CSSProperties } from 'vue/types/jsx';")) { - return; // 已经存在,不需要重复添加 - } - content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; - content = content.replace('{cellContentOuterDomStyle}', '{cellContentOuterDomStyle as CSSProperties}'); - writeFileSync('src/calendar/calendar-cell.tsx', content, 'utf8'); -} - export default function migrateSingleFile() { migrateSrcIndexTs(); - migrateSrcTreeAdaptTs(); - migrateSrcAnchorAnchorTsx(); - migrateSrcCalendarCalendarCellTsx(); } diff --git a/script/migrate/components/tree.mjs b/script/migrate/components/tree.mjs new file mode 100644 index 000000000..fca0f2daf --- /dev/null +++ b/script/migrate/components/tree.mjs @@ -0,0 +1,7 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateTree() { + let content = readFileSync('src/tree/adapt.ts', 'utf8'); + content = content.replace('VueCompositionAPI,', '').replace(', VueCompositionAPI', ''); + writeFileSync('src/tree/adapt.ts', content, 'utf8'); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 3d5ad6e82..575ce5526 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -1,9 +1,24 @@ import migrateImport from './components/migrateImport.mjs'; import migrateSingleFile from './components/migrateSingleFile.mjs'; +import migrateAnchor from './components/anchor.mjs'; +import migrateAutoComplete from './components/auto-complete.mjs'; +import migrateCalendar from './components/calendar.mjs'; +import migrateCard from './components/card.mjs'; +import migrateTree from './components/tree.mjs'; +import migrateHelper from './utils/helper.mjs'; +import migrateRenderTNode from './utils/render-tnode.mjs'; function run() { migrateSingleFile(); migrateImport(); + migrateAnchor(); + migrateAutoComplete(); + migrateCalendar(); + migrateCard(); + migrateTree(); + + migrateHelper(); + migrateRenderTNode(); } run(); diff --git a/script/migrate/utils/helper.mjs b/script/migrate/utils/helper.mjs new file mode 100644 index 000000000..e3d5a6bc6 --- /dev/null +++ b/script/migrate/utils/helper.mjs @@ -0,0 +1,13 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateHelper() { + let content = readFileSync('src/utils/helper.ts', 'utf8'); + if (!content.includes("import { CSSProperties } from 'vue/types/jsx';")) { + content = `import { CSSProperties } from 'vue/types/jsx';\n${content}`; + content = content.replace( + 'export function setTransform(value: string): object', + 'export function setTransform(value: string): CSSProperties', + ); + writeFileSync('src/utils/helper.ts', content, 'utf8'); + } +} diff --git a/script/migrate/utils/render-tnode.mjs b/script/migrate/utils/render-tnode.mjs new file mode 100644 index 000000000..d1598080b --- /dev/null +++ b/script/migrate/utils/render-tnode.mjs @@ -0,0 +1,12 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateRenderTNode() { + let content = readFileSync('src/utils/render-tnode.ts', 'utf8'); + if (content.includes('ComponentRenderProxy')) { + content = content.replaceAll( + 'ComponentRenderProxy', + 'CreateComponentPublicInstance', + ); + writeFileSync('src/utils/render-tnode.ts', content, 'utf8'); + } +} diff --git a/src/cascader/cascader.tsx b/src/cascader/cascader.tsx index c033efa91..ab10ed6ef 100644 --- a/src/cascader/cascader.tsx +++ b/src/cascader/cascader.tsx @@ -158,6 +158,7 @@ export default defineComponent({ label: this.label, valueDisplay: renderValueDisplay, suffix: this.suffix, + // vue27:ts-ignore tag: this.tag, readonly: this.readonly, disabled: isDisabled, diff --git a/src/checkbox/checkbox.tsx b/src/checkbox/checkbox.tsx index 9b4343330..4f65d20de 100644 --- a/src/checkbox/checkbox.tsx +++ b/src/checkbox/checkbox.tsx @@ -252,6 +252,7 @@ export default defineComponent({ name={this.tName || this.name || undefined} value={this.value ? this.value : undefined} checked={this.tChecked} + // vue27:ts-ignore on={{ change: this.handleChange }} key="input" tabindex="-1" diff --git a/src/checkbox/group.tsx b/src/checkbox/group.tsx index 00d6d2301..7eb3d02d6 100644 --- a/src/checkbox/group.tsx +++ b/src/checkbox/group.tsx @@ -220,6 +220,7 @@ export default defineComponent({ if (this.options?.length) { children = this.optionList?.map((option, index) => ( Date: Tue, 17 Jun 2025 09:49:15 +0800 Subject: [PATCH 07/34] feat: migrate hooks --- script/migrate/hooks/index.mjs | 11 +++++++++++ script/migrate/hooks/tnode.mjs | 12 ++++++++++++ script/migrate/hooks/useDefaultValue.mjs | 15 +++++++++++++++ script/migrate/hooks/useFormDisabled.mjs | 15 +++++++++++++++ script/migrate/hooks/useVModel.mjs | 15 +++++++++++++++ script/migrate/migrateComponent.mjs | 3 +++ 6 files changed, 71 insertions(+) create mode 100644 script/migrate/hooks/index.mjs create mode 100644 script/migrate/hooks/tnode.mjs create mode 100644 script/migrate/hooks/useDefaultValue.mjs create mode 100644 script/migrate/hooks/useFormDisabled.mjs create mode 100644 script/migrate/hooks/useVModel.mjs diff --git a/script/migrate/hooks/index.mjs b/script/migrate/hooks/index.mjs new file mode 100644 index 000000000..b7d822557 --- /dev/null +++ b/script/migrate/hooks/index.mjs @@ -0,0 +1,11 @@ +import migrateTNode from './tnode.mjs'; +import migrateUseDefaultValue from './useDefaultValue.mjs'; +import migrateUseFormDisabled from './useFormDisabled.mjs'; +import migrateUseVModel from './useVModel.mjs'; + +export default function migrateHooks() { + migrateTNode(); + migrateUseDefaultValue(); + migrateUseFormDisabled(); + migrateUseVModel(); +} diff --git a/script/migrate/hooks/tnode.mjs b/script/migrate/hooks/tnode.mjs new file mode 100644 index 000000000..f540dfe86 --- /dev/null +++ b/script/migrate/hooks/tnode.mjs @@ -0,0 +1,12 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateTNode() { + const filePath = 'src/hooks/tnode.ts'; + let content = readFileSync(filePath, 'utf-8'); + if (!content.includes('getCurrentInstance().proxy')) { + content = content.replace('getCurrentInstance()', 'getCurrentInstance().proxy') + .replace('const { slots } = instance.setupContext;', 'const slots = instance.$scopedSlots;') + .replaceAll('instance.props', 'instance.$props'); + writeFileSync(filePath, content, 'utf-8'); + } +} diff --git a/script/migrate/hooks/useDefaultValue.mjs b/script/migrate/hooks/useDefaultValue.mjs new file mode 100644 index 000000000..ee6b686a0 --- /dev/null +++ b/script/migrate/hooks/useDefaultValue.mjs @@ -0,0 +1,15 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateUseDefaultValue() { + const filePath = 'src/hooks/useDefaultValue.ts'; + let content = readFileSync(filePath, 'utf-8'); + if (content.includes('const { emit, vnode } = getCurrentInstance();')) { + content = content.replace( + 'const { emit, vnode } = getCurrentInstance();', + `const instance = getCurrentInstance().proxy; + const emit = instance.$emit; + const vnode = instance.$vnode;`, + ); + writeFileSync(filePath, content, 'utf-8'); + } +} diff --git a/script/migrate/hooks/useFormDisabled.mjs b/script/migrate/hooks/useFormDisabled.mjs new file mode 100644 index 000000000..4446811ed --- /dev/null +++ b/script/migrate/hooks/useFormDisabled.mjs @@ -0,0 +1,15 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateUseFormDisabled() { + const filePath = 'src/hooks/useFormDisabled.ts'; + let content = readFileSync(filePath, 'utf-8'); + if (content.includes('const currentInstance = getCurrentInstance();')) { + content = content.replace( + 'getCurrentInstance()', + 'getCurrentInstance().proxy', + ).replaceAll('parent', '$parent').replace('$parent.proxy', '$parent') + .replace('parent.props', 'parent.$props'); + content = content.replaceAll('instance.props', 'instance.$props'); + writeFileSync(filePath, content, 'utf-8'); + } +} diff --git a/script/migrate/hooks/useVModel.mjs b/script/migrate/hooks/useVModel.mjs new file mode 100644 index 000000000..7178f385d --- /dev/null +++ b/script/migrate/hooks/useVModel.mjs @@ -0,0 +1,15 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateUseVModel() { + const filePath = 'src/hooks/useVModel.ts'; + let content = readFileSync(filePath, 'utf-8'); + if (content.includes('const { emit, vnode } = getCurrentInstance();')) { + content = content.replace( + 'const { emit, vnode } = getCurrentInstance();', + `const instance = getCurrentInstance().proxy; + const emit = instance.$emit; + const vnode = instance.$vnode;`, + ); + writeFileSync(filePath, content, 'utf-8'); + } +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 575ce5526..2485c68a9 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -7,6 +7,7 @@ import migrateCard from './components/card.mjs'; import migrateTree from './components/tree.mjs'; import migrateHelper from './utils/helper.mjs'; import migrateRenderTNode from './utils/render-tnode.mjs'; +import migrateHooks from './hooks/index.mjs'; function run() { migrateSingleFile(); @@ -19,6 +20,8 @@ function run() { migrateHelper(); migrateRenderTNode(); + + migrateHooks(); } run(); From 833e5d3c7a7b1c061dca1e6802d36a85ea224fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 10:39:54 +0800 Subject: [PATCH 08/34] feat: migrate dropdown --- script/migrate/components/dropdown.mjs | 13 +++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 15 insertions(+) create mode 100644 script/migrate/components/dropdown.mjs diff --git a/script/migrate/components/dropdown.mjs b/script/migrate/components/dropdown.mjs new file mode 100644 index 000000000..e5366e5be --- /dev/null +++ b/script/migrate/components/dropdown.mjs @@ -0,0 +1,13 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateDropdown() { + const filePath = 'src/dropdown/dropdown-item.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('ref={this.itemRef}')) { + content = content.replace( + 'ref={this.itemRef}', + 'ref="itemRef"', + ); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 2485c68a9..b1f15cd78 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -4,6 +4,7 @@ import migrateAnchor from './components/anchor.mjs'; import migrateAutoComplete from './components/auto-complete.mjs'; import migrateCalendar from './components/calendar.mjs'; import migrateCard from './components/card.mjs'; +import migrateDropdown from './components/dropdown.mjs'; import migrateTree from './components/tree.mjs'; import migrateHelper from './utils/helper.mjs'; import migrateRenderTNode from './utils/render-tnode.mjs'; @@ -15,6 +16,7 @@ function run() { migrateAnchor(); migrateAutoComplete(); migrateCalendar(); + migrateDropdown(); migrateCard(); migrateTree(); From db5d5832c2ba70b8effa16a6b2f2137acaf67fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 17:25:46 +0800 Subject: [PATCH 09/34] feat: add css.d.ts --- script/migrate/config/migrateConfig.mjs | 12 ++++++++++++ script/migrate/migrateConfig.mjs | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/script/migrate/config/migrateConfig.mjs b/script/migrate/config/migrateConfig.mjs index 93c396951..08104a66f 100644 --- a/script/migrate/config/migrateConfig.mjs +++ b/script/migrate/config/migrateConfig.mjs @@ -118,3 +118,15 @@ export function migrateBabelConfig() { ); writeFileSync('babel.config.js', content, 'utf8'); } + +export function migrateCssDTs() { + const content = `import type * as CSS from 'csstype'; + +declare module 'csstype' { + interface Properties { + // Add a missing property + '-moz-transform'?: Property.Transform | undefined; + } +}`; + writeFileSync('css.d.ts', content, 'utf8'); +} diff --git a/script/migrate/migrateConfig.mjs b/script/migrate/migrateConfig.mjs index a6b96d03a..2cdcd5ce1 100644 --- a/script/migrate/migrateConfig.mjs +++ b/script/migrate/migrateConfig.mjs @@ -1,5 +1,6 @@ import { migratePackageJson, migrateViteConfig, migrateVitestConfig, migrateTsconfig, migrateJsxDts, migrateBabelConfig, + migrateCssDTs, } from './config/migrateConfig.mjs'; function run() { @@ -10,7 +11,7 @@ function run() { migrateTsconfig(); migrateJsxDts(); - + migrateCssDTs(); migrateBabelConfig(); } From 50fe9e3c4ec3c1cacb9dd060cc3642b304ca9be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 17:44:50 +0800 Subject: [PATCH 10/34] fix(deps): missing csstype --- script/migrate/config/migrateConfig.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/script/migrate/config/migrateConfig.mjs b/script/migrate/config/migrateConfig.mjs index 08104a66f..a724ef9b9 100644 --- a/script/migrate/config/migrateConfig.mjs +++ b/script/migrate/config/migrateConfig.mjs @@ -26,6 +26,7 @@ export function migratePackageJson() { vue: '~2.7.14', 'eslint-plugin-vue': '^9.3.0', '@types/estree': '1.0.0', + csstype: '^3.1.2', }; writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}`, 'utf8'); } From bc3976de353eb6b5b2e2205f59e79a87c7a5ed04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 21:54:07 +0800 Subject: [PATCH 11/34] chore: add vue27:ts-ignore --- src/upload/upload.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/upload/upload.tsx b/src/upload/upload.tsx index c86ea72d2..6ae177507 100644 --- a/src/upload/upload.tsx +++ b/src/upload/upload.tsx @@ -264,6 +264,7 @@ export default defineComponent({ multiple={this.multiple} accept={this.accept} hidden + // vue27:ts-ignore attrs={this.inputAttributes} /> {['file', 'file-input'].includes(this.theme) && !this.draggable && this.getNormalFileNode()} From 5f0de77b1e92af81a978c5484e7dd900ee8bc88a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 23:25:17 +0800 Subject: [PATCH 12/34] feat: migrateUpload --- script/migrate/components/upload.mjs | 42 ++++++++++++++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ src/upload/themes/multiple-flow-list.tsx | 3 ++ 3 files changed, 47 insertions(+) create mode 100644 script/migrate/components/upload.mjs diff --git a/script/migrate/components/upload.mjs b/script/migrate/components/upload.mjs new file mode 100644 index 000000000..dae6caba6 --- /dev/null +++ b/script/migrate/components/upload.mjs @@ -0,0 +1,42 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateDraggerFile() { + const filePath = 'src/upload/themes/dragger-file.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: DraggerProps)')) { + content = content.replace('setup(props: DraggerProps)', 'setup(props)'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateImageCard() { + const filePath = 'src/upload/themes/image-card.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: ImageCardUploadProps)')) { + content = content.replace('setup(props: ImageCardUploadProps)', 'setup(props)'); + writeFileSync(filePath, content, 'utf8'); + } +} + +function migrateMultipleFlowList() { + const filePath = 'src/upload/themes/multiple-flow-list.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: ImageFlowListProps')) { + content = content.replace('setup(props: ImageFlowListProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} + +function migrateNormalFile() { + const filePath = 'src/upload/themes/normal-file.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: NormalFileProps)')) { + content = content.replace('setup(props: NormalFileProps)', 'setup(props)'); + writeFileSync(filePath, content, 'utf8'); + } +} +export default function migrateUpload() { + migrateDraggerFile(); + migrateImageCard(); + migrateMultipleFlowList(); + migrateNormalFile(); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index b1f15cd78..75dcd7ba4 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -9,6 +9,7 @@ import migrateTree from './components/tree.mjs'; import migrateHelper from './utils/helper.mjs'; import migrateRenderTNode from './utils/render-tnode.mjs'; import migrateHooks from './hooks/index.mjs'; +import migrateUpload from './components/upload.mjs'; function run() { migrateSingleFile(); @@ -18,6 +19,7 @@ function run() { migrateCalendar(); migrateDropdown(); migrateCard(); + migrateUpload(); migrateTree(); migrateHelper(); diff --git a/src/upload/themes/multiple-flow-list.tsx b/src/upload/themes/multiple-flow-list.tsx index cbbd60610..6a6ea546a 100644 --- a/src/upload/themes/multiple-flow-list.tsx +++ b/src/upload/themes/multiple-flow-list.tsx @@ -314,6 +314,7 @@ export default defineComponent({ if (list) return list; return ( + // vue27:ts-ignore @@ -457,6 +458,7 @@ export default defineComponent({ {this.theme === 'image-flow' && ( + // vue27:ts-ignore
{this.displayFiles.length ? this.renderImageList() : this.renderEmpty()}
@@ -466,6 +468,7 @@ export default defineComponent({ && (this.displayFiles.length ? ( this.renderFileList() ) : ( + // vue27:ts-ignore
{this.renderEmpty()}
From 535cd5038e83fb7975f91cb85bdc8d618ebdf2e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 17 Jun 2025 23:42:32 +0800 Subject: [PATCH 13/34] chore: vue27:ts-ignore --- src/table/base-table.tsx | 1 + src/table/primary-table.tsx | 1 + src/table/tbody.tsx | 2 ++ src/table/tfoot.tsx | 2 ++ src/table/thead.tsx | 2 ++ src/table/tr.tsx | 3 +++ 6 files changed, 11 insertions(+) diff --git a/src/table/base-table.tsx b/src/table/base-table.tsx index b1a4c380a..2266b4736 100644 --- a/src/table/base-table.tsx +++ b/src/table/base-table.tsx @@ -626,6 +626,7 @@ export default defineComponent({ key="table-content" class={this.tableBaseClass.content} style={this.tableContentStyles} + // vue27:ts-ignore on={{ scroll: this.onInnerVirtualScroll }} > {this.virtualConfig.isVirtualScroll.value && ( diff --git a/src/table/primary-table.tsx b/src/table/primary-table.tsx index 340ee403d..99b6e853b 100644 --- a/src/table/primary-table.tsx +++ b/src/table/primary-table.tsx @@ -428,6 +428,7 @@ export default defineComponent({ render() { const isColumnController = !!(this.columnController && Object.keys(this.columnController).length); + // vue27:ts-ignore const placement = isColumnController ? this.columnController.placement || 'top-right' : ''; const isBottomController = isColumnController && placement?.indexOf('bottom') !== -1; const topContent = this.formatNode( diff --git a/src/table/tbody.tsx b/src/table/tbody.tsx index 8ea26c48f..531c6f02f 100644 --- a/src/table/tbody.tsx +++ b/src/table/tbody.tsx @@ -164,7 +164,9 @@ export default defineComponent({ {this.columns.map((col, colIndex) => { const cellSpans: RowspanColspan = {}; @@ -107,6 +108,7 @@ export default defineComponent({ style.width = `${this.thWidthList[col.colKey]}px`; } return ( + // vue27:ts-ignore @@ -360,6 +362,7 @@ export default defineComponent({ return ( Date: Tue, 17 Jun 2025 23:53:35 +0800 Subject: [PATCH 14/34] feat: migrateTable --- script/migrate/components/table.mjs | 40 +++++++++++++++++++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 42 insertions(+) create mode 100644 script/migrate/components/table.mjs diff --git a/script/migrate/components/table.mjs b/script/migrate/components/table.mjs new file mode 100644 index 000000000..7e84f2e8a --- /dev/null +++ b/script/migrate/components/table.mjs @@ -0,0 +1,40 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateThead() { + const filePath = 'src/table/thead.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TheadProps')) { + content = content.replace('setup(props: TheadProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateTbody() { + const filePath = 'src/table/tbody.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TableBodyProps')) { + content = content.replace('setup(props: TableBodyProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateTfoot() { + const filePath = 'src/table/tfoot.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TFootProps')) { + content = content.replace('setup(props: TFootProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateTr() { + const filePath = 'src/table/tr.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TrProps')) { + content = content.replace('setup(props: TrProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} +export default function migrateTable() { + migrateThead(); + migrateTbody(); + migrateTfoot(); + migrateTr(); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 75dcd7ba4..861547929 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -10,6 +10,7 @@ import migrateHelper from './utils/helper.mjs'; import migrateRenderTNode from './utils/render-tnode.mjs'; import migrateHooks from './hooks/index.mjs'; import migrateUpload from './components/upload.mjs'; +import migrateTable from './components/table.mjs'; function run() { migrateSingleFile(); @@ -20,6 +21,7 @@ function run() { migrateDropdown(); migrateCard(); migrateUpload(); + migrateTable(); migrateTree(); migrateHelper(); From aee2487abaa686add08f9de982de2f9bd7c22143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Wed, 18 Jun 2025 00:08:14 +0800 Subject: [PATCH 15/34] chore: vue27:ts-ignore --- src/radio/radio.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/radio/radio.tsx b/src/radio/radio.tsx index 6015fede0..e6507a175 100644 --- a/src/radio/radio.tsx +++ b/src/radio/radio.tsx @@ -63,6 +63,7 @@ export default mixins(Vue as VueConstructor, classPre tabindex="-1" data-value={typeof this.value === 'string' ? `'${this.value}'` : this.value} data-allow-uncheck={allowUncheck || undefined} + // vue27:ts-ignore on={{ ...omit(this.$listeners, ['change', 'click']) }} /> From 318e512a7e49a9d544270a02e264e58fa9b39a54 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:04:12 +0800 Subject: [PATCH 16/34] chore: vue27:ts-ignore --- src/table/filter-controller.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/table/filter-controller.tsx b/src/table/filter-controller.tsx index 4482d6639..1cafffdbd 100644 --- a/src/table/filter-controller.tsx +++ b/src/table/filter-controller.tsx @@ -127,7 +127,9 @@ export default defineComponent({ options: ['single', 'multiple'].includes(column.filter.type) ? this.getFilterDisplayList(column) : undefined, ...(column.filter?.props || {}), }; + // vue27:ts-ignore if (column.colKey && this.innerFilterValue && column.colKey in this.innerFilterValue) { + // vue27:ts-ignore filterComponentProps.value = this.innerFilterValue[column.colKey]; } // 这个代码必须放在这里,否则会造成顺序错误 @@ -184,6 +186,7 @@ export default defineComponent({ const inputObj = isObject(column.filter.listFilterConfig) ? column.filter.listFilterConfig : {}; return ( + // vue27:ts-ignore
{column.filter.listFilterConfig && ( ; + // vue27:ts-ignore const filterValue = this.tFilterValue?.[column.colKey]; const isObjectTrue = typeof filterValue === 'object' && !isEmpty(filterValue); // false is a valid filter value From dd4baa405ba48958efbc59e29a9ed46008ea269a Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:08:13 +0800 Subject: [PATCH 17/34] feat: migrateTable --- script/migrate/components/table.mjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/script/migrate/components/table.mjs b/script/migrate/components/table.mjs index 7e84f2e8a..cf2a7e192 100644 --- a/script/migrate/components/table.mjs +++ b/script/migrate/components/table.mjs @@ -32,9 +32,19 @@ function migrateTr() { writeFileSync(filePath, content, 'utf8'); } } +function migrateFilterController() { + const filePath = 'src/table/filter-controller'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TableFilterControllerProps')) { + content = content.replace('setup(props: TableFilterControllerProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} + export default function migrateTable() { migrateThead(); migrateTbody(); migrateTfoot(); migrateTr(); + migrateFilterController(); } From 4b308cb7fd25070b9812b4be6c35d175f2a42bd3 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:17:31 +0800 Subject: [PATCH 18/34] feat: migrateTable --- script/migrate/components/table.mjs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/script/migrate/components/table.mjs b/script/migrate/components/table.mjs index cf2a7e192..c0044cdb4 100644 --- a/script/migrate/components/table.mjs +++ b/script/migrate/components/table.mjs @@ -33,13 +33,22 @@ function migrateTr() { } } function migrateFilterController() { - const filePath = 'src/table/filter-controller'; + const filePath = 'src/table/filter-controller.tsx'; let content = readFileSync(filePath, 'utf8'); if (content.includes('setup(props: TableFilterControllerProps')) { content = content.replace('setup(props: TableFilterControllerProps', 'setup(props'); writeFileSync(filePath, content, 'utf8'); } } +function migrateEditableCell() { + const filePath = 'src/table/editable-cell.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('this.col.edit')) { + content = content.replace('render() {', 'render() {\nconst col = this.col as PrimaryTableCol;'); + content = content.replaceAll('this.col.edit', 'col.edit'); + writeFileSync(filePath, content, 'utf8'); + } +} export default function migrateTable() { migrateThead(); @@ -47,4 +56,5 @@ export default function migrateTable() { migrateTfoot(); migrateTr(); migrateFilterController(); + migrateEditableCell(); } From f2ffdfb0ea153a3dfb6fa0731d4014063ad53097 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:22:29 +0800 Subject: [PATCH 19/34] chore: vue27:ts-ignore --- src/table/filter-controller.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/table/filter-controller.tsx b/src/table/filter-controller.tsx index 1cafffdbd..2442fe2b8 100644 --- a/src/table/filter-controller.tsx +++ b/src/table/filter-controller.tsx @@ -171,6 +171,7 @@ export default defineComponent({ }); }); } + // vue27:ts-ignore const filter = this.column.filter || {}; return ( Date: Mon, 23 Jun 2025 23:30:44 +0800 Subject: [PATCH 20/34] feat: migrateSelect --- script/migrate/components/select.mjs | 11 +++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 13 insertions(+) create mode 100644 script/migrate/components/select.mjs diff --git a/script/migrate/components/select.mjs b/script/migrate/components/select.mjs new file mode 100644 index 000000000..e373d700b --- /dev/null +++ b/script/migrate/components/select.mjs @@ -0,0 +1,11 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateSelect() { + const filePath = 'src/select/select.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.emit', 'instance.$emit'); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 861547929..aed0516f6 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -11,6 +11,7 @@ import migrateRenderTNode from './utils/render-tnode.mjs'; import migrateHooks from './hooks/index.mjs'; import migrateUpload from './components/upload.mjs'; import migrateTable from './components/table.mjs'; +import migrateSelect from './components/select.mjs'; function run() { migrateSingleFile(); @@ -21,6 +22,7 @@ function run() { migrateDropdown(); migrateCard(); migrateUpload(); + migrateSelect(); migrateTable(); migrateTree(); From 335f1a0b2cb570509a02435c035f5fe0b3893bfa Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:35:19 +0800 Subject: [PATCH 21/34] feat: migrateRangeInput --- script/migrate/components/range-input.mjs | 11 +++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 13 insertions(+) create mode 100644 script/migrate/components/range-input.mjs diff --git a/script/migrate/components/range-input.mjs b/script/migrate/components/range-input.mjs new file mode 100644 index 000000000..7e68bdfd1 --- /dev/null +++ b/script/migrate/components/range-input.mjs @@ -0,0 +1,11 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateRangeInput() { + const filePath = 'src/range-input/range-input.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.emit', 'instance.$emit'); + writeFileSync(filePath, content, 'utf8'); + } +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index aed0516f6..edefd600b 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -12,6 +12,7 @@ import migrateHooks from './hooks/index.mjs'; import migrateUpload from './components/upload.mjs'; import migrateTable from './components/table.mjs'; import migrateSelect from './components/select.mjs'; +import migrateRangeInput from './components/range-input.mjs'; function run() { migrateSingleFile(); @@ -25,6 +26,7 @@ function run() { migrateSelect(); migrateTable(); migrateTree(); + migrateRangeInput(); migrateHelper(); migrateRenderTNode(); From 74ce7d1d22ae582cedea51e60bae4adfd4c86b18 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:37:57 +0800 Subject: [PATCH 22/34] chore: vue27:ts-ignore --- src/popup/plugin.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/popup/plugin.tsx b/src/popup/plugin.tsx index bd9c46ba1..6e6653b7f 100644 --- a/src/popup/plugin.tsx +++ b/src/popup/plugin.tsx @@ -122,6 +122,7 @@ const Overlay = mixins(classPrefixMixins).extend({ style: [ hidePopup && { visibility: 'hidden', pointerEvents: 'none' }, { zIndex: this.zIndex }, + // vue27:ts-ignore this.overlayStyle, ], on: { @@ -140,6 +141,7 @@ const Overlay = mixins(classPrefixMixins).extend({ { ref: 'overlay', class: this.overlayClasses, + // vue27:ts-ignore style: this.overlayInnerStyle, }, [content, this.showArrow && h('div', { class: `${this.componentName}__arrow` })], From c14a5ecbc23bb50a6e72d573135ee3710d87787a Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:48:38 +0800 Subject: [PATCH 23/34] feat: migrateSelectInput --- script/migrate/components/select-input.mjs | 34 ++++++++++++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 script/migrate/components/select-input.mjs diff --git a/script/migrate/components/select-input.mjs b/script/migrate/components/select-input.mjs new file mode 100644 index 000000000..b61bb7792 --- /dev/null +++ b/script/migrate/components/select-input.mjs @@ -0,0 +1,34 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateUseSingle() { + const filePath = 'src/select-input/useSingle.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.emit', 'instance.$emit'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateUseOverlayInnerStyle() { + const filePath = 'src/select-input/useOverlayInnerStyle.ts'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.emit', 'instance.$emit'); + writeFileSync(filePath, content, 'utf8'); + } +} +function migrateSelectInput() { + const filePath = 'src/select-input/select-input.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('setup(props: TdSelectInputProps')) { + content = content.replace('setup(props: TdSelectInputProps', 'setup(props'); + writeFileSync(filePath, content, 'utf8'); + } +} + +export default function () { + migrateSelectInput(); + migrateUseSingle(); + migrateUseOverlayInnerStyle(); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index edefd600b..8a87a8186 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -13,6 +13,7 @@ import migrateUpload from './components/upload.mjs'; import migrateTable from './components/table.mjs'; import migrateSelect from './components/select.mjs'; import migrateRangeInput from './components/range-input.mjs'; +import migrateSelectInput from './components/select-input.mjs'; function run() { migrateSingleFile(); @@ -24,6 +25,7 @@ function run() { migrateCard(); migrateUpload(); migrateSelect(); + migrateSelectInput(); migrateTable(); migrateTree(); migrateRangeInput(); From 93932468a4ad49519e75c31203d349f4e80fe699 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Mon, 23 Jun 2025 23:50:41 +0800 Subject: [PATCH 24/34] chore: vue27:ts-ignore --- src/select-input/select-input.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/select-input/select-input.tsx b/src/select-input/select-input.tsx index d43439858..bac0e155b 100644 --- a/src/select-input/select-input.tsx +++ b/src/select-input/select-input.tsx @@ -117,6 +117,7 @@ export default defineComponent({ const mainContent = ( From 7d1919ebe9d9ab4dd7b811c43e02b557a27568d1 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 24 Jun 2025 00:02:18 +0800 Subject: [PATCH 25/34] chore: vue27:ts-ignore --- src/image-viewer/base/ImageItem.tsx | 2 ++ src/image-viewer/base/ImageViewerModal.tsx | 1 + 2 files changed, 3 insertions(+) diff --git a/src/image-viewer/base/ImageItem.tsx b/src/image-viewer/base/ImageItem.tsx index 3ab392f68..cb3f3e4f5 100644 --- a/src/image-viewer/base/ImageItem.tsx +++ b/src/image-viewer/base/ImageItem.tsx @@ -89,6 +89,7 @@ export default defineComponent({ style={this.placementImgStyle} alt="image" draggable="false" + // vue27:ts-ignore referrerpolicy={this.imageReferrerpolicy} /> )} @@ -106,6 +107,7 @@ export default defineComponent({ style={this.imgStyle} alt="image" draggable="false" + // vue27:ts-ignore referrerpolicy={this.imageReferrerpolicy} /> )} diff --git a/src/image-viewer/base/ImageViewerModal.tsx b/src/image-viewer/base/ImageViewerModal.tsx index 36f803af8..c10550a87 100644 --- a/src/image-viewer/base/ImageViewerModal.tsx +++ b/src/image-viewer/base/ImageViewerModal.tsx @@ -99,6 +99,7 @@ export default defineComponent({ mirror={this.mirror} src={this.currentImage.mainImage} placementSrc={this.currentImage.thumbnail} + // vue27:ts-ignore imageReferrerpolicy={props.imageReferrerpolicy} />
From 0caf7988a356b3e63eb2eb64d77c65a264066c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 24 Jun 2025 18:04:04 +0800 Subject: [PATCH 26/34] chore: vue27:ts-ignore --- src/image/image.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/image/image.tsx b/src/image/image.tsx index c0790ab66..1444c5018 100644 --- a/src/image/image.tsx +++ b/src/image/image.tsx @@ -181,6 +181,7 @@ export default defineComponent({ onLoad={this.handleLoad} class={this.imageClasses} alt={this.alt} + // vue27:ts-ignore referrerpolicy={this.referrerpolicy} /> ); @@ -200,6 +201,7 @@ export default defineComponent({ onMouseenter={this.handleToggleOverlay} onMouseleave={this.handleToggleOverlay} {...this.rest} + // vue27:ts-ignore on={this.$listeners} > {this.renderPlaceholder()} From 00ff4f3c9c60a75db54fa159f2456009eb483d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com> Date: Tue, 24 Jun 2025 18:04:48 +0800 Subject: [PATCH 27/34] chore: vue27:ts-ignore --- src/input/input.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/input/input.tsx b/src/input/input.tsx index 8baa443d6..359a3e457 100644 --- a/src/input/input.tsx +++ b/src/input/input.tsx @@ -582,6 +582,7 @@ export default mixins( {labelContent} {/* input element must exist, or other select components can not focus by keyboard operation */} Date: Tue, 24 Jun 2025 22:53:41 +0800 Subject: [PATCH 28/34] chore: vue27:ts-ignore --- src/timeline/timeline-item.tsx | 1 + src/timeline/timeline.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/timeline/timeline-item.tsx b/src/timeline/timeline-item.tsx index f3de1c2f3..3efcc0004 100644 --- a/src/timeline/timeline-item.tsx +++ b/src/timeline/timeline-item.tsx @@ -130,6 +130,7 @@ export default defineComponent({ } return ( + // vue27:ts-ignore
  • {mode === 'alternate' && labelNode &&
    {labelNode}
    }
    diff --git a/src/timeline/timeline.tsx b/src/timeline/timeline.tsx index a100e763a..ad703a515 100644 --- a/src/timeline/timeline.tsx +++ b/src/timeline/timeline.tsx @@ -67,6 +67,7 @@ export default defineComponent({ } const { timelineClassName, style } = this; return ( + // vue27:ts-ignore
      {defaultSlot}
    From 2266b82ca34d7f88da530622ccc2316986356e1e Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 24 Jun 2025 22:57:04 +0800 Subject: [PATCH 29/34] chore: vue27:ts-ignore --- src/timeline/timeline-item.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timeline/timeline-item.tsx b/src/timeline/timeline-item.tsx index 3efcc0004..4847de66e 100644 --- a/src/timeline/timeline-item.tsx +++ b/src/timeline/timeline-item.tsx @@ -111,6 +111,7 @@ export default defineComponent({ const { dotColor, dotClassName, + // vue27:ts-ignore style = {}, labelClassName, mode, @@ -130,7 +131,6 @@ export default defineComponent({ } return ( - // vue27:ts-ignore
  • {mode === 'alternate' && labelNode &&
    {labelNode}
    }
    From 2bb6422f131388e37a36027adb376106a2acb8be Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 24 Jun 2025 23:05:04 +0800 Subject: [PATCH 30/34] feat: migrateTimeline --- script/migrate/components/timeline.mjs | 26 ++++++++++++++++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 script/migrate/components/timeline.mjs diff --git a/script/migrate/components/timeline.mjs b/script/migrate/components/timeline.mjs new file mode 100644 index 000000000..ba404dd1f --- /dev/null +++ b/script/migrate/components/timeline.mjs @@ -0,0 +1,26 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateTimeline() { + const filePath = 'src/timeline/timeline.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.slots', 'instance.$slots'); + writeFileSync(filePath, content, 'utf8'); + } +} + +function migrateTimelineItem() { + const filePath = 'src/timeline/timeline-item.tsx'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('const instance = getCurrentInstance();')) { + content = content.replace('const instance = getCurrentInstance();', 'const instance = getCurrentInstance().proxy;'); + content = content.replaceAll('instance.parent.slots', 'instance.$parent.$slots'); + writeFileSync(filePath, content, 'utf8'); + } +} + +export default function () { + migrateTimeline(); + migrateTimelineItem(); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 8a87a8186..3815aa066 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -11,6 +11,7 @@ import migrateRenderTNode from './utils/render-tnode.mjs'; import migrateHooks from './hooks/index.mjs'; import migrateUpload from './components/upload.mjs'; import migrateTable from './components/table.mjs'; +import migrateTimeline from './components/timeline.mjs'; import migrateSelect from './components/select.mjs'; import migrateRangeInput from './components/range-input.mjs'; import migrateSelectInput from './components/select-input.mjs'; @@ -27,6 +28,7 @@ function run() { migrateSelect(); migrateSelectInput(); migrateTable(); + migrateTimeline(); migrateTree(); migrateRangeInput(); From c6ca69ce36a25b701da4b2bd1266d1adcc57add5 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 24 Jun 2025 23:09:59 +0800 Subject: [PATCH 31/34] chore: vue27:ts-ignore --- src/timeline/timeline-item.tsx | 1 + src/timeline/timeline.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/timeline/timeline-item.tsx b/src/timeline/timeline-item.tsx index 4847de66e..74df41fd8 100644 --- a/src/timeline/timeline-item.tsx +++ b/src/timeline/timeline-item.tsx @@ -43,6 +43,7 @@ export default defineComponent({ const currentIndex = computed(() => { let index = 0; uidArr.value.forEach((item: number | undefined, itemIndex: number) => { + // vue27:ts-ignore if (item === instance.uid) { index = itemIndex; } diff --git a/src/timeline/timeline.tsx b/src/timeline/timeline.tsx index ad703a515..1c099290f 100644 --- a/src/timeline/timeline.tsx +++ b/src/timeline/timeline.tsx @@ -65,9 +65,9 @@ export default defineComponent({ if (reverse) { defaultSlot.reverse(); } + // vue27:ts-ignore const { timelineClassName, style } = this; return ( - // vue27:ts-ignore
      {defaultSlot}
    From 8b561e30b17c4a07d09333cf3c9a643143af5be4 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 5 Aug 2025 22:47:07 +0800 Subject: [PATCH 32/34] feat: migrateWatermark --- script/migrate/components/watermark.mjs | 17 +++++++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ 2 files changed, 19 insertions(+) create mode 100644 script/migrate/components/watermark.mjs diff --git a/script/migrate/components/watermark.mjs b/script/migrate/components/watermark.mjs new file mode 100644 index 000000000..fa468d8fb --- /dev/null +++ b/script/migrate/components/watermark.mjs @@ -0,0 +1,17 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +function migrateHooks() { + const filePath = 'src/watermark/hooks.ts'; + let content = readFileSync(filePath, 'utf8'); + if (content.includes('export type MaybeElement = HTMLElement | SVGElement')) { + content = content.replace( + 'export type MaybeElement = HTMLElement | SVGElement', + 'export type MaybeElement = Element | HTMLElement | SVGElement', + ).replace('UnRefElementReturn', 'any'); + writeFileSync(filePath, content, 'utf8'); + } +} + +export default function migrateWatermark() { + migrateHooks(); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index 3815aa066..c56e9c301 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -15,6 +15,7 @@ import migrateTimeline from './components/timeline.mjs'; import migrateSelect from './components/select.mjs'; import migrateRangeInput from './components/range-input.mjs'; import migrateSelectInput from './components/select-input.mjs'; +import migrateWatermark from './components/watermark.mjs'; function run() { migrateSingleFile(); @@ -31,6 +32,7 @@ function run() { migrateTimeline(); migrateTree(); migrateRangeInput(); + migrateWatermark(); migrateHelper(); migrateRenderTNode(); From 9145ec91b8a1de7424ce0be9eddb64038e28834e Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 19 Aug 2025 23:31:44 +0800 Subject: [PATCH 33/34] feat: migrateTreeSelect --- script/migrate/components/tree-select.mjs | 12 ++++++++++++ script/migrate/migrateComponent.mjs | 2 ++ src/tree-select/tree-select.tsx | 2 ++ src/tree/hooks/useRenderIcon.tsx | 2 ++ src/tree/hooks/useRenderOperations.tsx | 1 + 5 files changed, 19 insertions(+) create mode 100644 script/migrate/components/tree-select.mjs diff --git a/script/migrate/components/tree-select.mjs b/script/migrate/components/tree-select.mjs new file mode 100644 index 000000000..77c0df251 --- /dev/null +++ b/script/migrate/components/tree-select.mjs @@ -0,0 +1,12 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +export default function migrateTreeSelect() { + let content = readFileSync('src/tree-select/tree-select.tsx', 'utf8'); + if (content.includes('...this.treeProps')) { + content = content.replace('...this.treeProps', '...(this.treeProps as TreeProps)').replace("import Tree from '../tree';", "import Tree, { TreeProps } from '../tree';"); + } + if (content.includes('...this.selectInputProps')) { + content = content.replace('...this.selectInputProps', '...(this.selectInputProps as selectInputProps)').replace("import SelectInput from '../select-input';", "import SelectInput, { SelectInputProps } from '../select-input';"); + } + writeFileSync('src/tree-select/tree-select.tsx', content, 'utf8'); +} diff --git a/script/migrate/migrateComponent.mjs b/script/migrate/migrateComponent.mjs index c56e9c301..4484d452d 100644 --- a/script/migrate/migrateComponent.mjs +++ b/script/migrate/migrateComponent.mjs @@ -6,6 +6,7 @@ import migrateCalendar from './components/calendar.mjs'; import migrateCard from './components/card.mjs'; import migrateDropdown from './components/dropdown.mjs'; import migrateTree from './components/tree.mjs'; +import migrateTreeSelect from './components/tree-select.mjs'; import migrateHelper from './utils/helper.mjs'; import migrateRenderTNode from './utils/render-tnode.mjs'; import migrateHooks from './hooks/index.mjs'; @@ -31,6 +32,7 @@ function run() { migrateTable(); migrateTimeline(); migrateTree(); + migrateTreeSelect(); migrateRangeInput(); migrateWatermark(); diff --git a/src/tree-select/tree-select.tsx b/src/tree-select/tree-select.tsx index 65fee5765..3b2f3dc18 100644 --- a/src/tree-select/tree-select.tsx +++ b/src/tree-select/tree-select.tsx @@ -98,7 +98,9 @@ export default defineComponent({ filter: this.filterByText, icon: !this.filterByText, activeMultiple: this.multiple, + // vue27:ts-ignore onExpand: this.treeNodeExpand, + // vue27:ts-ignore onLoad: this.treeNodeLoad, onChange: this.treeNodeChange, onActive: this.treeNodeActive, diff --git a/src/tree/hooks/useRenderIcon.tsx b/src/tree/hooks/useRenderIcon.tsx index 427d32c98..7bb15cbcd 100644 --- a/src/tree/hooks/useRenderIcon.tsx +++ b/src/tree/hooks/useRenderIcon.tsx @@ -58,7 +58,9 @@ export default function useRenderIcon(state: TypeTreeItemState) { `${classPrefix}-folder-icon`, isDefaultIcon ? `${componentName}__icon--default` : '', ]} + // vue27:ts-ignore trigger="expand" + // vue27:ts-ignore ignore="active" onmousedown={handleMousedown} > diff --git a/src/tree/hooks/useRenderOperations.tsx b/src/tree/hooks/useRenderOperations.tsx index b977b4eb7..fcf64b9e5 100644 --- a/src/tree/hooks/useRenderOperations.tsx +++ b/src/tree/hooks/useRenderOperations.tsx @@ -25,6 +25,7 @@ export default function useRenderOperations(state: TypeTreeItemState) { } if (opNode) { opNode = ( + // vue27:ts-ignore {opNode} From 8a4deb16ec878c6caef54a0f7fff90ab25d0c2b8 Mon Sep 17 00:00:00 2001 From: lwj <674416404@qq.com> Date: Tue, 19 Aug 2025 23:32:14 +0800 Subject: [PATCH 34/34] feat: migrateTreeSelect --- script/migrate/components/tree-select.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/migrate/components/tree-select.mjs b/script/migrate/components/tree-select.mjs index 77c0df251..1b600acff 100644 --- a/script/migrate/components/tree-select.mjs +++ b/script/migrate/components/tree-select.mjs @@ -6,7 +6,7 @@ export default function migrateTreeSelect() { content = content.replace('...this.treeProps', '...(this.treeProps as TreeProps)').replace("import Tree from '../tree';", "import Tree, { TreeProps } from '../tree';"); } if (content.includes('...this.selectInputProps')) { - content = content.replace('...this.selectInputProps', '...(this.selectInputProps as selectInputProps)').replace("import SelectInput from '../select-input';", "import SelectInput, { SelectInputProps } from '../select-input';"); + content = content.replace('...this.selectInputProps', '...(this.selectInputProps as SelectInputProps)').replace("import SelectInput from '../select-input';", "import SelectInput, { SelectInputProps } from '../select-input';"); } writeFileSync('src/tree-select/tree-select.tsx', content, 'utf8'); }
  • {fullRowNode}
    diff --git a/src/table/tfoot.tsx b/src/table/tfoot.tsx index 80caada77..5d81610dc 100644 --- a/src/table/tfoot.tsx +++ b/src/table/tfoot.tsx @@ -85,6 +85,7 @@ export default defineComponent({ this.rowKey || 'id', ); return ( + // vue27:ts-ignore
    {this.renderTFootCell({ row, diff --git a/src/table/thead.tsx b/src/table/thead.tsx index 8acc8a67f..0217e8381 100644 --- a/src/table/thead.tsx +++ b/src/table/thead.tsx @@ -203,7 +203,9 @@ export default defineComponent({ data-colkey={col.colKey} class={thClasses} style={styles} + // vue27:ts-ignore attrs={{ ...attrs, ...rowspanAndColspan }} + // vue27:ts-ignore on={resizeColumnListener} >
    diff --git a/src/table/tr.tsx b/src/table/tr.tsx index 408571d35..26a81dc59 100644 --- a/src/table/tr.tsx +++ b/src/table/tr.tsx @@ -277,6 +277,7 @@ export default defineComponent({ return ( this.tableElm : undefined)} tooltipContent={content && (() => content)} tooltipProps={tooltipProps} @@ -321,6 +322,7 @@ export default defineComponent({ const normalAttrs = isFunction(col.attrs) ? col.attrs({ ...params, type: 'td' }) : col.attrs; const attrs: { [key: string]: any } = { ...normalAttrs, ...cellSpans }; return ( + // vue27:ts-ignore
    {col.ellipsis ? this.renderEllipsisCell(h, params, { cellNode }) : cellNode}