Compare commits

...

17 Commits

Author SHA1 Message Date
tangjinzhou 2cda7bde09 docs: add Sponsor 2025-11-18 00:45:12 +08:00
tangjinzhou 6255f1632c docs: update readme 2025-11-18 00:29:08 +08:00
tangjinzhou ef51f7f1cc docs: update GlobalConfig type import paths across multiple components 2025-11-17 23:57:03 +08:00
tangjinzhou 252a0e2563 docs: clean up GlobalConfig type definition by moving it to a separate type file 2025-11-17 23:50:44 +08:00
tangjinzhou bbb7670df1 refactor: remove Google Ads component from top_rice.vue and update favicon.ico 2025-09-20 14:30:15 +08:00
tangjinzhou fcdda4a0be docs: update links 2025-09-19 11:28:25 +08:00
tangjinzhou 79b63b41c6 feat: add routing configuration for antdv.com in wrangler.jsonc 2025-09-19 00:16:11 +08:00
tangjinzhou 56d9b358f2 refactor: remove Surely Form links and related alert banners from Menu and Header components 2025-09-18 23:08:14 +08:00
tangjinzhou b58e73d51a refactor: update URLs from surely.cool to surelyvue.com across multiple components and documentation 2025-09-18 22:54:57 +08:00
tangjinzhou e8ec520d9a docs: update npm scripts for build process and remove cheerio dependency 2025-09-18 22:53:48 +08:00
tangjinzhou ce56f0c8f6 docs: remove aliyun 2025-09-18 22:39:56 +08:00
Sid Roberts 723bb47a42
Updated to actions/cache@v4 for GitHub workflows. (#8317)
https://github.com/actions/cache/discussions/1510
2025-08-27 15:30:19 +08:00
Junyang 57ea8a65d4
fix: fixed the Select component not taking keys according to the corresponding value when passing fieldNames. (#8247)
Co-authored-by: fanjunyang <fanjunyang@daojia-inc.com>
2025-08-27 15:27:56 +08:00
Chris Yang 7e5008080d
fix: Select tagRender click cannot open list #8132 (#8236) 2025-08-27 15:24:42 +08:00
MonsterXue 74b3018945
fix(slider): fix slider last dot can’t click (#8246) 2025-08-27 15:12:36 +08:00
Jason Ren 28b1c4f62d
docs: typo in button (#8024) 2025-08-27 15:09:00 +08:00
pengpeng 04f6ba33c7
fix(vcSelect):Maintain keyboard events when using a custom element. (#8321) 2025-08-27 15:07:36 +08:00
52 changed files with 7850 additions and 395 deletions

View File

@ -12,6 +12,3 @@ contact_links:
- name: Paypal
url: https://www.paypal.me/tangjinzhou
about: Love Ant Design Vue? Please consider supporting us via Paypal.
- name: 支付宝/微信 赞助
url: https://aliyuncdn.antdv.com/alipay-and-wechat.png
about: Ant Design Vue 的健康持续发展需要您的支持,🙏

63
.github/workflows/cloudflare.yml vendored Normal file
View File

@ -0,0 +1,63 @@
name: Build and Deploy to Cloudflare
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
name: Build Application
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm install --force
- name: Build application
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-files
path: site/dist/
retention-days: 1
deploy:
runs-on: ubuntu-latest
name: Deploy to Cloudflare
needs: build
permissions:
contents: read
deployments: write
steps:
- name: Checkout (for config files)
uses: actions/checkout@v5
with:
sparse-checkout: |
wrangler.jsonc
sparse-checkout-cone-mode: false
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-files
path: site/dist/
- name: Deploy (Workers + Static Assets)
uses: cloudflare/wrangler-action@v3.14.1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: deploy --config wrangler.jsonc
gitHubToken: ${{ secrets.GITHUB_TOKEN }}

View File

@ -10,7 +10,7 @@ jobs:
uses: actions/checkout@v2
- name: cache package-lock.json
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
@ -27,7 +27,7 @@ jobs:
- name: cache node_modules
id: node_modules_cache_id
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -52,13 +52,13 @@ jobs:
# submodules: true
- name: restore cache from package-lock.json
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v1
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

View File

@ -10,7 +10,7 @@ jobs:
uses: actions/checkout@v2
- name: cache package-lock.json
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
@ -27,7 +27,7 @@ jobs:
- name: cache node_modules
id: node_modules_cache_id
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -43,25 +43,25 @@ jobs:
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: cache lib
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: lib
key: lib-${{ github.sha }}
- name: cache es
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: es
key: es-${{ github.sha }}
@ -77,13 +77,13 @@ jobs:
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -99,13 +99,13 @@ jobs:
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

View File

@ -1,9 +1,3 @@
<p align="center">
<a href="https://www.antdv.com/">
<img width="200" src="https://aliyuncdn.antdv.com/logo.png">
</a>
</p>
<h1 align="center">
<a href="https://www.antdv.com/" target="_blank">Ant Design Vue</a>
</h1>
@ -18,6 +12,14 @@
[![](https://cdn-images-1.medium.com/max/2000/1*NIlj0-TdLMbo_hzSBP8tmg.png)](https://www.antdv.com/)
<div align="center">
<sup><strong>赞助商</strong></sup>
<br>
<a href="https://mentorbook.ai/" target="_blank">
<img src="/site/public/mentorbook_banner_zh.svg" alt="Mentorbook.AI - 你的 AI 导师,你的学习之旅" />
</a>
</div>
[English](./README.md) | 简体中文
## 特性
@ -88,14 +90,13 @@ ant-design-vue 是 MIT 协议的开源项目。为了项目能够更好的持续
- [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou)
- [支付宝或微信](https://aliyuncdn.antdv.com/alipay-and-wechat.png)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## 赞助商
成为赞助商,并在 Github 上的自述文件上获得您的徽标,并链接到您的网站。 [[成为赞助商](https://opencollective.com/ant-design-vue#sponsor)]
<a href="http://www.jeecg.com/" target="_blank"><img src="https://aliyuncdn.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
## 支持者

View File

@ -1,6 +1,6 @@
<p align="center">
<a href="https://www.antdv.com/">
<img width="200" src="https://aliyuncdn.antdv.com/logo.png">
<img width="200" src="https://www.antdv.com/logo.png">
</a>
</p>
@ -18,6 +18,14 @@ An enterprise-class UI components based on Ant Design and Vue.
[![](https://cdn-images-1.medium.com/max/2000/1*NIlj0-TdLMbo_hzSBP8tmg.png)](https://www.antdv.com/)
<div align="center">
<sup><strong>Sponsored by</strong></sup>
<br>
<a href="https://mentorbook.ai/" target="_blank">
<img src="/site/public/mentorbook_banner_en.svg" alt="Mentorbook.AI - Your AI Mentor, Your Learning Journey" />
</a>
</div>
English | [简体中文](./README-zh_CN.md)
## Features
@ -82,14 +90,13 @@ ant-design-vue is an MIT-licensed open source project. In order to achieve bette
- [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou)
- [支付宝或微信](https://aliyuncdn.antdv.com/alipay-and-wechat.png)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/ant-design-vue#sponsor)]
<a href="http://www.jeecg.com/" target="_blank"><img src="https://aliyuncdn.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
## [More Sponsor (From Patreon、alipay、wechat、paypal...)](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md)

View File

@ -21,7 +21,7 @@ If you want specific control over the positioning and placement of the `Icon`, t
<template>
<a-space direction="vertical">
<a-space warp>
<a-space wrap>
<a-tooltip title="search">
<a-button type="primary" shape="circle" :icon="h(SearchOutlined)" />
</a-tooltip>
@ -32,7 +32,7 @@ If you want specific control over the positioning and placement of the `Icon`, t
</a-tooltip>
<a-button :icon="h(SearchOutlined)">Search</a-button>
</a-space>
<a-space warp>
<a-space wrap>
<a-tooltip title="search">
<a-button shape="circle" :icon="h(SearchOutlined)" />
</a-tooltip>

View File

@ -58,13 +58,13 @@ exports[`renders ./components/image/demo/placeholder.vue correctly 1`] = `
`;
exports[`renders ./components/image/demo/preview-group.vue correctly 1`] = `
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://aliyuncdn.antdv.com/vue.png">
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://www.antdv.com/vue.png">
<!---->
<div class="ant-image-mask">
<div class="ant-image-mask-info"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span>Preview</div>
</div>
</div>
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://aliyuncdn.antdv.com/logo.png">
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://www.antdv.com/logo.png">
<!---->
<div class="ant-image-mask">
<div class="ant-image-mask-info"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span>Preview</div>
@ -106,7 +106,7 @@ exports[`renders ./components/image/demo/preview-group-visible.vue correctly 1`]
`;
exports[`renders ./components/image/demo/preview-src.vue correctly 1`] = `
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://aliyuncdn.antdv.com/logo.png">
<div class="ant-image" style="width: 200px;"><img width="200" class="ant-image-img" src="https://www.antdv.com/logo.png">
<!---->
<div class="ant-image-mask">
<div class="ant-image-mask-info"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span>Preview</div>

View File

@ -18,7 +18,7 @@ Click the left and right switch buttons to preview multiple images.
<template>
<a-image-preview-group>
<a-image :width="200" src="https://aliyuncdn.antdv.com/vue.png" />
<a-image :width="200" src="https://aliyuncdn.antdv.com/logo.png" />
<a-image :width="200" src="https://www.antdv.com/vue.png" />
<a-image :width="200" src="https://www.antdv.com/logo.png" />
</a-image-preview-group>
</template>

View File

@ -19,7 +19,7 @@ You can set different preview image.
<template>
<a-image
:width="200"
src="https://aliyuncdn.antdv.com/logo.png"
src="https://www.antdv.com/logo.png"
:preview="{
src: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
}"

View File

@ -179,7 +179,7 @@ const value15 = ref<string>('Sign Up');
const value16 = ref<string>('');
const value17 = ref<string>('Home');
const value18 = ref<string[]>([]);
const value19 = ref<string>('https://surely.cool');
const value19 = ref<string>('https://surelyvue.com');
const value20 = ref<string>('https://antdv.com');
</script>
<style scoped>

View File

@ -105,7 +105,7 @@ exports[`renders ./components/qrcode/demo/icon.vue correctly 1`] = `
</div>
`;
exports[`renders ./components/qrcode/demo/popover.vue correctly 1`] = `<img width="100" height="100" src="https://aliyuncdn.antdv.com/logo.png">`;
exports[`renders ./components/qrcode/demo/popover.vue correctly 1`] = `<img width="100" height="100" src="https://www.antdv.com/logo.png">`;
exports[`renders ./components/qrcode/demo/status.vue correctly 1`] = `
<div class="ant-space ant-space-horizontal ant-space-align-center">

View File

@ -19,6 +19,6 @@ With Popover.
<template #content>
<a-qrcode value="http://www.antdv.com" :bordered="false" />
</template>
<img width="100" height="100" src="https://aliyuncdn.antdv.com/logo.png" />
<img width="100" height="100" src="https://www.antdv.com/logo.png" />
</a-popover>
</template>

View File

@ -182,6 +182,7 @@ const genBaseStyle: GenerateStyle<SliderToken> = token => {
borderRadius: '50%',
cursor: 'pointer',
transition: `border-color ${token.motionDurationSlow}`,
pointerEvents: 'auto',
'&-active': {
borderColor: token.colorPrimaryBorder,

View File

@ -127,7 +127,7 @@ exports[`renders ./components/table/demo/basic.vue correctly 1`] = `
`;
exports[`renders ./components/table/demo/big-data.vue correctly 1`] = `
<iframe src="https://www.surely.cool/for-ant-demo" height="400"></iframe>
<iframe src="https://www.surelyvue.com/for-ant-demo" height="400"></iframe>
<!--v-if-->
`;

View File

@ -8,21 +8,21 @@ title:
## zh-CN
该示例使用高级组件 [Surely Vue](https://www.surely.cool) Surely Vue Ant Design Vue
该示例使用高级组件 [Surely Vue](https://www.surelyvue.com) Surely Vue Ant Design Vue
该组件致力于解决大数据渲染图表集成等复杂高频问题 使用该组件可以流畅滚动 10 万行10 万列的数据你不必担心页面卡顿造成用户投诉进而影响业务进展
## en-US
This example uses advanced components [Surely Vue](https://www.surely.cool) for development.
This example uses advanced components [Surely Vue](https://www.surelyvue.com) for development.
This component is dedicated to solving complex high-frequency issues such as big data rendering and chart integration.
Using this component, you can smoothly scroll through 100,000 rows and 100,000 columns of data.
</docs>
<template>
<iframe src="https://www.surely.cool/for-ant-demo" height="400"></iframe>
<iframe src="https://www.surelyvue.com/for-ant-demo" height="400"></iframe>
<div v-if="false">
you can visit
<a href="https://www.surely.cool"></a>
<a href="https://www.surelyvue.com"></a>
get more info
</div>
</template>

View File

@ -840,6 +840,7 @@ export default defineComponent({
customizeRawInputElement,
{
ref: selectorDomRef,
tabindex: 0,
},
false,
true,
@ -877,7 +878,11 @@ export default defineComponent({
// Render raw
if (customizeRawInputElement) {
renderNode = selectorNode;
renderNode = (
<div onKeydown={onInternalKeyDown} onKeyup={onInternalKeyUp}>
{selectorNode}
</div>
);
} else {
renderNode = (
<div

View File

@ -151,7 +151,7 @@ const SelectSelector = defineComponent<SelectorProps>({
) {
const onMouseDown = (e: MouseEvent) => {
onPreventMouseDown(e);
props.onToggleOpen(!open);
props.onToggleOpen(!props.open);
};
let originData = option;
// For TreeSelect

View File

@ -2,11 +2,13 @@ import type { BaseOptionType, DefaultOptionType, RawValueType, FieldNames } from
import { warning } from '../../vc-util/warning';
import type { FlattenOptionData } from '../interface';
function getKey(data: BaseOptionType, index: number) {
function getKey(data: BaseOptionType, index: number, fieldNames?: FieldNames) {
const { key } = data;
let value: RawValueType;
if ('value' in data) {
if (fieldNames && fieldNames.value && data[fieldNames.value] !== undefined) {
({ [fieldNames.value]: value } = data);
} else if ('value' in data) {
({ value } = data);
}
@ -54,7 +56,7 @@ export function flattenOptions<OptionType extends BaseOptionType = DefaultOption
const value = data[fieldValue];
// Option
flattenList.push({
key: getKey(data, flattenList.length),
key: getKey(data, flattenList.length, fieldNames),
groupOption: isGroupOption,
data,
label,
@ -67,7 +69,7 @@ export function flattenOptions<OptionType extends BaseOptionType = DefaultOption
}
// Option Group
flattenList.push({
key: getKey(data, flattenList.length),
key: getKey(data, flattenList.length, fieldNames),
group: true,
data,
label: grpLabel,

View File

@ -36,7 +36,7 @@
"precompile": "npm run version & npm run collect-token-statistic & npm run token-meta",
"pretest": "npm run version",
"predist": "npm run version",
"presite": "npm run version & npm run routes & npm run collect-token-statistic & npm run token-meta",
"prebuild": "npm run version & npm run routes & npm run collect-token-statistic & npm run token-meta",
"dev": "npm run routes && vite serve site",
"fast-dev": "npm run routes && vite serve site",
"test": "cross-env NODE_ENV=test jest --config .jest.js",
@ -60,7 +60,7 @@
"routes": "node site/scripts/genrateRoutes.js",
"tsc": "tsc --noEmit",
"vue-tsc": "vue-tsc --noEmit",
"site": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build site --base=https://next.antdv.com/",
"build": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build site --base=/",
"pub:site": "npm run site && node site/scripts/pushToOSS.js",
"prepare": "husky install",
"version": "node ./scripts/generate-version",
@ -148,7 +148,6 @@
"babel-plugin-transform-require-context": "^0.1.1",
"case-sensitive-paths-webpack-plugin": "^2.1.2",
"chalk": "^4.1.1",
"cheerio": "^1.0.0-rc.2",
"codecov": "^3.0.0",
"codesandbox": "^2.2.3",
"colorful": "^2.1.0",

View File

@ -12,7 +12,7 @@
content="An enterprise-class UI components based on Ant Design and Vue"
/>
<title>Ant Design Vue</title>
<link rel="icon" type="image/x-icon" href="//aliyuncdn.antdv.com/favicon.ico" />
<link rel="icon" type="image/x-icon" href="//www.antdv.com/favicon.ico" />
<style id="nprogress-style">
#page-404 {
background-image: url('https://os.alipayobjects.com/rmsportal/NOAjOBbnYCrNzrW.jpg');

View File

@ -16,7 +16,7 @@
name="keywords"
content="ant design vue,ant-design-vue,ant-design-vue admin,ant design pro,vue ant design,vue ant design pro,vue ant design admin,ant design vue官网,ant design vue中文文档,ant design vue文档"
/>
<link rel="shortcut icon" type="image/x-icon" href="//aliyuncdn.antdv.com/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="//www.antdv.com/favicon.ico" />
<style id="nprogress-style">
#nprogress {
display: none;
@ -45,7 +45,7 @@
<body>
<div id="app"></div>
<script src="https://aliyuncdn.antdv.com/common/docsearch.min_2.6.3.js"></script>
<script src="https://www.antdv.com/docsearch.min_2.6.3.js"></script>
<script type="module" src="/src/main.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-151755889-1"></script>
@ -59,23 +59,5 @@
gtag('config', 'UA-151755889-1');
</script>
<script type="text/javascript" src="https://cdn.wwads.cn/js/makemoney.js" async></script>
<!-- <div
class="surveybyantdv"
data-sf-id="63ad5912f3e10066"
data-sf-mode="popover"
data-sf-button-color="#3a3939"
data-sf-text-color="#ffffff"
data-sf-button-radius="50"
data-sf-button-icon="form-outlined"
data-sf-default-open="false"
data-sf-allow-repeat-submit="true"
data-sf-close-after-submit="false"
data-sf-hide-after-submit="false"
data-sf-delay-visible="false"
data-sf-preload="true"
data-sf-width="368px"
data-sf-height="407px"
></div>
<script async src="https://aliyuncdn.antdv.com/form/static/embed/runtime.js"></script> -->
</body>
</html>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 172 KiB

BIN
site/public/jeecg-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
site/public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

View File

@ -0,0 +1,31 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="280" viewBox="0 0 1200 280">
<defs>
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#0B1021" />
<stop offset="100%" stop-color="#182A4A" />
</linearGradient>
<pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
<circle cx="2" cy="2" r="2" fill="#7FB3FF" opacity="0.12"/>
</pattern>
</defs>
<!-- background -->
<rect width="1200" height="280" fill="url(#g)"/>
<rect width="1200" height="280" fill="url(#dots)"/>
<!-- decorative braces -->
<text x="80" y="140.0" text-anchor="start" font-size="140" font-family="monospace" fill="#5DF2A3" opacity="0.08">{</text>
<text x="1120" y="140.0" text-anchor="end" font-size="140" font-family="monospace" fill="#5DF2A3" opacity="0.08">}</text>
<!-- brand name -->
<text x="600.0" y="120.0" text-anchor="middle"
font-family="Inter, system-ui" font-weight="800" font-size="72" fill="#5DF2A3">Mentorbook.AI</text>
<!-- main slogan -->
<text x="600.0" y="175.0" text-anchor="middle"
font-family="Inter, system-ui" font-weight="700" font-size="42" fill="#EAF2FF">Your AI Mentor, Your Learning Journey</text>
<!-- value props -->
<text x="600.0" y="225.0" text-anchor="middle"
font-family="Inter, system-ui" font-weight="500" font-size="24" fill="#7FB3FF">✨ Personalized Courses · Instant Feedback · 100+ Subjects</text>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="280" viewBox="0 0 1200 280">
<defs>
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#0B1021" />
<stop offset="100%" stop-color="#182A4A" />
</linearGradient>
<pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
<circle cx="2" cy="2" r="2" fill="#7FB3FF" opacity="0.12" />
</pattern>
</defs>
<!-- background -->
<rect width="1200" height="280" fill="url(#g)" />
<rect width="1200" height="280" fill="url(#dots)" />
<!-- decorative braces -->
<text x="80" y="140.0" text-anchor="start" font-size="140" font-family="monospace" fill="#5DF2A3"
opacity="0.08">{</text>
<text x="1120" y="140.0" text-anchor="end" font-size="140" font-family="monospace" fill="#5DF2A3"
opacity="0.08">}</text>
<!-- brand name -->
<text x="600.0" y="120.0" text-anchor="middle" font-family="Inter, system-ui" font-weight="800" font-size="72"
fill="#5DF2A3">Mentorbook.AI</text>
<!-- main slogan -->
<text x="600.0" y="175.0" text-anchor="middle" font-family="Inter, system-ui" font-weight="700" font-size="42"
fill="#EAF2FF">你的 AI 导师,你的学习助手</text>
<!-- value props -->
<text x="600.0" y="225.0" text-anchor="middle" font-family="Inter, system-ui" font-weight="500" font-size="24"
fill="#7FB3FF">✨ 个性化课程 · 即时反馈 · 100+ 学科领域</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
site/public/vue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -10,7 +10,6 @@
<script lang="ts">
import { computed, defineComponent, provide, watch, ref } from 'vue';
import type { Ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import useMediaQuery from './hooks/useMediaQuery';
@ -21,16 +20,11 @@ import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import { theme as antdTheme } from 'ant-design-vue';
import SiteToken from './SiteToken.vue';
import type { GlobalConfig } from './type';
function isZhCN(name: string) {
return /-cn\/?$/.test(name);
}
export interface GlobalConfig {
isMobile: Ref<boolean>;
lang: Ref<'zh-CN' | 'en-US'>;
isZhCN: Ref<boolean>;
responsive: Ref<null | 'narrow' | 'crowded'>;
blocked: Ref<boolean>;
}
export type ThemeName = '' | 'light' | 'dark' | 'compact';
const getAlgorithm = (themes: ThemeName[] = []) =>
themes

View File

@ -103,7 +103,7 @@
</template>
<script lang="ts">
import type { GlobalConfig } from '../App.vue';
import type { GlobalConfig } from '../type';
import { GLOBAL_CONFIG } from '../SymbolKey';
import { computed, defineComponent, inject, onMounted, ref } from 'vue';
import { CheckOutlined, SnippetsOutlined, CodeSandboxOutlined } from '@ant-design/icons-vue';

View File

@ -1,45 +0,0 @@
<template>
<div v-show="visible" id="geektime">
<a
href="https://time.geekbang.org/course/intro/100024601?code=KHKYcoBU6vZa8nMglg7AWfDxxi3BWrz9INAzAY3umPk%3D"
target="_blank"
>
<img width="150" alt="Vue 实战教程" src="https://aliyuncdn.antdv.com/geektime-vue.jpeg" />
</a>
<div class="close" @click="visible = false">
<close-outlined />
</div>
</div>
</template>
<script>
import { CloseOutlined } from '@ant-design/icons-vue';
export default {
components: {
CloseOutlined,
},
props: ['isMobile'],
data() {
return {
visible: true,
};
},
};
</script>
<style lang="less" scoped>
#geektime {
position: fixed;
bottom: 10px;
right: 10px;
.close {
position: absolute;
text-align: center;
top: -8px;
right: -8px;
font-size: 16px;
padding: 15px;
color: #6e3041;
}
}
</style>

View File

@ -1,64 +0,0 @@
<template>
<div
v-if="isEffective(effectiveTime)"
id="geektime-ads"
:class="isMobile ? 'geektime-ads-mobile' : ''"
>
<a
href="https://time.geekbang.org/column/intro/154?utm_term=zeusGZFFE&utm_source=app&utm_medium=tangjinzhou"
target="_blank"
>
<img height="100" alt="重学前端" src="https://aliyuncdn.antdv.com/chongxueqianduan.jpg" />
</a>
</div>
</template>
<script lang="ts">
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
import { defineComponent } from 'vue';
dayjs.extend(isBetween);
export default defineComponent({
props: {
isMobile: Boolean,
},
setup() {
return {
visible: true,
effectiveTime: {
start: '2019-08-05 17:00:00',
end: '2019-09-05 17:00:00',
},
isEffective({ start, end }) {
return dayjs().isBetween(start, end);
},
};
},
});
</script>
<style lang="less" scoped>
#geektime-ads {
width: 266px;
position: fixed;
left: 0;
bottom: 0px;
padding: 0;
overflow: hidden;
z-index: 9;
background-color: #fff;
border-radius: 3px;
font-size: 13px;
background: #f5f5f5;
font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
}
#geektime-ads.geektime-ads-mobile {
width: 100%;
position: relative;
right: 0;
bottom: 0;
padding: 0;
margin-bottom: 15px;
}
</style>

View File

@ -26,20 +26,7 @@ export default {
isEffective,
visible: true,
v: dayjs().date(),
ads: [
{
alt: 'geektime',
img: 'https://aliyuncdn.antdv.com/geektime-web-small.jpg',
href: 'http://gk.link/a/10l8O',
visible: isEffective('2020-09-03 10:00:00', '2020-10-04 10:00:00'),
},
{
alt: 'powerproject',
img: 'https://aliyuncdn.antdv.com/powerproject.jpeg?v=20200327',
href: 'http://www.powerproject.com.cn',
visible: isEffective('2020-03-27 17:00:00', '2020-09-28 17:00:00'),
},
],
ads: [],
};
},
};

View File

@ -10,11 +10,6 @@
<img height="51" src="https://cdn.tipe.io/tipe/tipe-cat-no-text.svg" alt="tipe" />
</a>
</li> -->
<li v-if="isCN && isEffective(effectiveTime.kkb)" class="sponsorsItem">
<a href="https://datayi.cn/w/Y9J3M2vR" target="_blank">
<img height="66" src="https://aliyuncdn.antdv.com/kaikeba_ssr.jpeg" alt="kaikeba" />
</a>
</li>
<li class="sponsorsItem" style="padding: 10px 0">
<a-button type="primary" ghost style="font-size: 12px" @click="handleClick">
{{ isCN ? '成为赞助商' : 'Become a Sponsor' }}

View File

@ -1,64 +1,241 @@
<template>
<div v-if="show">
<template v-if="ads.length">
<a-carousel autoplay>
<template v-for="ad in ads" :key="ad.href">
<a :href="ad.href" target="_blank">
<img style="width: 100%; max-width: 1200px" :alt="ad.alt || ''" :src="ad.img" />
<div class="top-rice">
<!-- Mentorbook banner -->
<div v-if="showMentorbook" class="mentorbook-banner">
<a href="https://mentorbook.ai/" target="_blank" class="banner-content">
<div class="brand-name">Mentorbook.AI</div>
<div class="main-slogan">
{{ isCN ? '你的 AI 导师,你的学习助手' : 'Your AI Mentor, Your Learning Journey' }}
</div>
<div class="value-props">
{{
isCN
? '✨ 个性化课程 · 即时反馈 · 100+ 学科领域'
: '✨ Personalized Courses · Instant Feedback · 100+ Subjects'
}}
</div>
</a>
</template>
</a-carousel>
</template>
<template v-else-if="showGoogleAd">
<!-- <template v-if="isCN">
<WWAds :key="`WWAds_${$route.path}`" />
</template> -->
<google-ads-top :key="`GoogleAdsTop_${$route.path}`" />
</template>
<a href="https://mentorbook.ai/" target="_blank" class="start-button">
{{ isCN ? '免费开始' : 'Get Started Free' }}
</a>
</div>
</div>
</template>
<script>
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
dayjs.extend(isBetween);
import GoogleAdsTop from './GoogleAdsTop.vue';
// import WWAds from './WWAds.vue';
const isEffective = (start, end) => {
return dayjs().isBetween(start, end);
};
export default {
components: {
GoogleAdsTop,
// WWAds,
},
props: ['isCN', 'isMobile'],
data() {
return {
show: true,
showGoogleAd: location.host.indexOf('antdv.com') > -1,
showMentorbook: true,
cnAds: [
{
img: `https://yidengfe.com/launches/01/yd.png?v=${Date.now()}`,
href: 'https://yidengfe.com/launches/01/yd.html',
visible: isEffective('2020-09-11 17:00:00', '2021-03-11 17:00:00'),
visible: true,
},
].filter(ad => ad.visible),
enAds: [
{
img: 'https://aliyuncdn.antdv.com/TheBigRichGroup.png',
href: 'https://thebigrichgroup.com/',
visible: isEffective('2020-09-18 17:00:00', '2021-07-09 17:00:00'),
img: `https://yidengfe.com/launches/01/yd.png?v=${Date.now()}`,
href: 'https://yidengfe.com/launches/01/yd.html',
visible: true,
},
].filter(ad => ad.visible),
};
},
computed: {
ads() {
otherAds() {
return this.isCN ? this.cnAds : this.enAds;
},
},
};
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
.top-rice {
width: 100%;
margin-bottom: 16px;
.mentorbook-banner {
display: flex;
width: 100%;
background: linear-gradient(135deg, #0b1021 0%, #182a4a 100%);
position: relative;
overflow: hidden;
padding: 0 16px;
height: 48px;
box-sizing: border-box;
align-items: center;
justify-content: space-between;
// Dots pattern background
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: radial-gradient(circle, rgba(127, 179, 255, 0.12) 2px, transparent 2px);
background-size: 28px 28px;
background-position: 0 0;
pointer-events: none;
z-index: 0;
}
// Left brace
&::after {
content: '{';
position: absolute;
left: 20px;
top: 50%;
transform: translateY(-50%);
font-size: 32px;
font-family: monospace;
color: #5df2a3;
opacity: 0.08;
pointer-events: none;
z-index: 0;
}
.banner-content {
position: relative;
z-index: 1;
flex: 1;
height: 48px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 12px;
text-decoration: none;
transition: opacity 0.3s;
&:hover {
opacity: 0.9;
}
}
.start-button {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
height: 32px;
padding: 0 16px;
background: #5df2a3;
color: #0b1021;
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-weight: 600;
font-size: 14px;
text-decoration: none;
border-radius: 6px;
white-space: nowrap;
transition: all 0.3s;
margin-left: 16px;
&:hover {
background: #4dd893;
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(93, 242, 163, 0.3);
}
&:active {
transform: translateY(0);
}
@media (max-width: 768px) {
font-size: 12px;
padding: 0 12px;
height: 28px;
}
@media (max-width: 480px) {
font-size: 11px;
padding: 0 10px;
height: 26px;
margin-left: 8px;
}
}
.brand-name {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-weight: 800;
font-size: 20px;
color: #5df2a3;
line-height: 48px;
white-space: nowrap;
@media (max-width: 768px) {
font-size: 18px;
}
@media (max-width: 480px) {
font-size: 16px;
}
}
.main-slogan {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-weight: 600;
font-size: 16px;
color: #eaf2ff;
line-height: 48px;
white-space: nowrap;
@media (max-width: 768px) {
font-size: 14px;
}
@media (max-width: 480px) {
display: none;
}
}
.value-props {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
font-weight: 500;
font-size: 14px;
color: #7fb3ff;
line-height: 48px;
white-space: nowrap;
@media (max-width: 1024px) {
display: none;
}
}
}
.ad-link {
display: block;
width: 100%;
text-decoration: none;
transition: opacity 0.3s;
margin-top: 16px;
&:hover {
opacity: 0.9;
}
}
.ad-image {
width: 100%;
max-width: 1200px;
height: auto;
display: block;
margin: 0 auto;
}
}
</style>

View File

@ -1,25 +1,10 @@
<template>
<div class="container">
<a-carousel autoplay>
<a style="display: inline-block" href="https://form.antdv.com/" target="_blank">
<a style="display: inline-block" href="https://www.surelyvue.com/" target="_blank">
<div :class="cls">
<div class="logo">
<img height="80" src="https://aliyuncdn.antdv.com/form/static/logo-blue.png" alt="" />
</div>
<div class="desc">
<!-- <div class="title">Surely Form</div> -->
<div class="sub-title">
<strong>雪梨表单为您定制</strong>
<br />
专属的调研投票NPS报名等系统
</div>
</div>
</div>
</a>
<a style="display: inline-block" href="https://www.surely.cool/" target="_blank">
<div :class="cls">
<div class="logo">
<img height="80" src="https://www.surely.cool/surely-vue-logo.png" alt="" />
<img height="80" src="https://www.surelyvue.com/surely-vue-logo.png" alt="" />
</div>
<div class="desc">
<div class="title">Surely Table</div>

View File

@ -60,12 +60,9 @@
</div>
</div>
</a-col>
<a-col :md="6" :sm="24" :xs="24">
<!-- <a-col :md="6" :sm="24" :xs="24">
<div class="footer-center">
<h2>{{ isCN ? '友情链接' : 'Links' }}</h2>
<div v-if="showJeecg">
<a href="http://www.jeecg.com/" target="_blank">Jeecg</a>
</div>
<div>
<a href="https://cn.vuejs.org/" target="_blank">Vue</a>
</div>
@ -79,8 +76,8 @@
<a href="https://antdv.formilyjs.org/" target="_blank">@formily/antdv</a>
</div>
</div>
</a-col>
<a-col :md="6" :sm="24" :xs="24">
</a-col> -->
<a-col :md="12" :sm="24" :xs="24">
<div class="footer-center">
<h2>
<img
@ -88,28 +85,17 @@
class="title-icon"
src="https://gw.alipayobjects.com/zos/rmsportal/nBVXkrFdWHxbZlmMbsaH.svg"
/>
<span>{{ isCN ? '更多产品' : 'More Products' }}</span>
<span>{{ isCN ? '友情链接' : 'Links' }}</span>
</h2>
<div>
<a href="https://antv.alipay.com/" rel="noopener noreferrer" target="_blank">AntV</a>
<a href="https://www.demoget.com?atp=tangjinzhou" target="_blank">DemoGet</a>
<span>-</span>
<span>{{ isCN ? '数据可视化' : 'Data Visualization' }}</span>
</div>
<div>
<a href="https://eggjs.org/" rel="noopener noreferrer" target="_blank">Egg</a>
<span>-</span>
<span>{{ isCN ? '企业级 Node 开发框架' : 'Enterprise Node Framework' }}</span>
<span>{{ isCN ? '好看好用的录屏工具' : 'Beautiful Screen Recordings' }}</span>
</div>
</div>
</a-col>
</a-row>
</div>
<div style="padding: 10px 144px">
备案号
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">浙ICP备19034671号</a>
&nbsp;&nbsp;&nbsp; 增值电信业务经营许可证
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">浙B2-20220161</a>
</div>
</footer>
</template>
<script>

View File

@ -15,7 +15,7 @@
<a-menu-item-group v-if="isZhCN" key="advanced" title="高级组件">
<a-menu-item key="surely-table">
<a
href="https://www.surely.cool"
href="https://www.surelyvue.com"
target="_blank"
rel="noopener noreferrer"
style="position: relative"
@ -23,17 +23,6 @@
Surely Table
</a>
</a-menu-item>
<a-menu-item key="surely-form">
<a
href="https://form.antdv.com"
target="_blank"
rel="noopener noreferrer"
style="position: relative"
>
Surely Form
<a-badge color="red" style="position: absolute; top: -18px; right: -15px" />
</a>
</a-menu-item>
</a-menu-item-group>
<template v-for="m in menus">
<template v-if="m.children">

View File

@ -23,19 +23,6 @@
<a-menu-item key="awesome">
<a target="_blank" href="https://github.com/vueComponent/ant-design-vue-awesome">Awesome</a>
</a-menu-item>
<a-menu-item key="wechat">
<a-popover placement="right">
<a>{{ isZhCN ? '微信' : 'WeChat' }}</a>
<template #content>
<img
width="160"
height="160"
alt="wechat"
src="https://aliyuncdn.antdv.com/wechat.jpeg"
/>
</template>
</a-popover>
</a-menu-item>
<a-menu-item key="qq1">
<a>QQ 1(217490093) 已满</a>
</a-menu-item>
@ -50,7 +37,7 @@
</template>
<script lang="ts">
import { computed, defineComponent, inject } from 'vue';
import type { GlobalConfig } from '../../App.vue';
import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util';

View File

@ -8,7 +8,7 @@
</template>
<script lang="ts">
import type { GlobalConfig } from '../../App.vue';
import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey';
import { defineComponent, inject } from 'vue';
import logo from '../../assets/logo.svg';

View File

@ -18,7 +18,7 @@
<script lang="ts">
import { computed, defineComponent, inject } from 'vue';
import { DownOutlined } from '@ant-design/icons-vue';
import type { GlobalConfig } from '../../App.vue';
import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util';
import Ecosystem from './Ecosystem.vue';

View File

@ -25,7 +25,7 @@
</template>
<a-menu-item key="surely-table">
<a
href="https://www.surely.cool"
href="https://www.surelyvue.com"
target="_blank"
rel="noopener noreferrer"
style="position: relative"
@ -33,17 +33,6 @@
Surely Table
</a>
</a-menu-item>
<a-menu-item key="surely-form">
<a
href="https://form.antdv.com"
target="_blank"
rel="noopener noreferrer"
style="position: relative"
>
Surely Form
<a-badge color="red" style="position: absolute; top: -18px; right: -15px" />
</a>
</a-menu-item>
</a-sub-menu>
<a-menu-item key="store">
<a
@ -84,7 +73,7 @@
</a-menu>
</template>
<script lang="ts">
import type { GlobalConfig } from '../../App.vue';
import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util';
import { computed, defineComponent, inject, ref, watch } from 'vue';

View File

@ -1,25 +1,5 @@
<template>
<header id="header" :class="headerClassName">
<!-- <div v-if="visibleAdblockBanner" class="adblock-banner">
<template v-if="isZhCN">
我们检测到你可能使用了 AdBlock Adblock
Plus它会影响到正常功能的使用如复制展开代码等
<br />
你可以将 Ant Design Vue 加入白名单以便我们更好地提供服务
</template>
<template v-else>
We have detected that you may use AdBlock or Adblock Plus, which will affect the use of
normal functions (such as copying, expanding code, etc.)
<br />
You can add Ant Design Vue to the whitelist so that we can provide better services.
</template>
<CloseOutlined class="close-icon" @click="visibleAdblockBanner = false" />
</div> -->
<div class="alert-banner">
Surely Form AI 助手内测开放申请 &nbsp;&nbsp;
<a target="_blank" href="https://form.antdv.com">立即申请</a>
</div>
<a-row :style="{ flexFlow: 'nowrap', height: 64, position: 'relative' }">
<a-col v-bind="colProps[0]">
<Logo />
@ -57,15 +37,10 @@
<strong>Ant Design Vue 4</strong>
五大新组件全新 Design Token
</li>
<li class="alert-list-item">
<strong>Surely Form</strong>
全新主题编辑 AI 问卷开放内测申请
<a target="_blank" href="https://form.antdv.com">立即体验</a>
</li>
<li class="alert-list-item">
<strong>Surely Table</strong>
支持高性能编辑模式了
<a target="_blank" href="https://www.surely.cool/">立即体验</a>
<a target="_blank" href="https://www.surelyvue.com/">立即体验</a>
</li>
<li class="alert-list-item">
<strong>Admin Pro</strong>
@ -77,7 +52,7 @@
</header>
</template>
<script lang="ts">
import type { GlobalConfig } from '../../App.vue';
import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util';
import { computed, defineComponent, inject, onMounted, ref, watch } from 'vue';
@ -86,7 +61,6 @@ import Logo from './Logo.vue';
import Menu from './Menu.vue';
import { UnorderedListOutlined } from '@ant-design/icons-vue';
import SearchBox from './SearchBox.vue';
import { version } from 'ant-design-vue';
export default defineComponent({
components: {
Logo,
@ -157,13 +131,13 @@ export default defineComponent({
watch(globalConfig?.blocked, val => {
visibleAdblockBanner.value = val;
});
const alertKey = 'ant-design-vue-4-alert';
const visibleAlertBanner = ref(!localStorage.getItem(alertKey));
watch(visibleAlertBanner, () => {
if (!visibleAlertBanner.value) {
localStorage.setItem(alertKey, version);
}
});
// const alertKey = 'ant-design-vue-4-alert';
const visibleAlertBanner = ref(false);
// watch(visibleAlertBanner, () => {
// if (!visibleAlertBanner.value) {
// localStorage.setItem(alertKey, version);
// }
// });
return {
isZhCN: globalConfig.isZhCN,
isMobile: globalConfig.isMobile,

View File

@ -1,4 +1,5 @@
<template>
<TopAd :is-c-n="isZhCN" />
<Header />
<div v-if="headers.length" class="toc-affix" :style="y > 102 ? 'position:fixed; top: 16px;' : ''">
<a-anchor style="width: 160px" :items="headers">
@ -43,8 +44,6 @@
</template>
<a-col :xxxl="20" :xxl="20" :xl="19" :lg="18" :md="18" :sm="24" :xs="24">
<section :class="mainContainerClass">
<WWAdsVue v-if="isZhCN" />
<TopAd v-else />
<Demo v-if="isDemo" :page-data="pageData" :is-zh-c-n="isZhCN">
<component :is="matchCom" />
</Demo>
@ -85,22 +84,6 @@
</template>
</a-float-button>
</a-float-button-group>
<!-- <div class="fixed-widgets" :style="isZhCN ? { bottom: '175px' } : {}">
<a-dropdown placement="top">
<template #overlay>
<a-menu
:selected-keys="[themeMode.theme.value]"
@click="({ key }) => themeMode.changeTheme(key)"
>
<a-menu-item key="default">{{ $t('app.theme.switch.default') }}</a-menu-item>
<a-menu-item key="dark">{{ $t('app.theme.switch.dark') }}</a-menu-item>
</a-menu>
</template>
<a-avatar class="fixed-widgets-avatar" :size="44">
<template #icon><ThemeIcon /></template>
</a-avatar>
</a-dropdown>
</div> -->
<PrevAndNext :menus="menus" :current-menu-index="currentMenuIndex" :is-zh-c-n="isZhCN" />
<Footer />
</a-col>
@ -108,7 +91,6 @@
</div>
</template>
<script lang="ts">
import type { GlobalConfig } from '../App.vue';
import { GLOBAL_CONFIG } from '../SymbolKey';
import { defineComponent, inject, computed, ref, provide, watch } from 'vue';
import { useRoute } from 'vue-router';
@ -129,6 +111,7 @@ import CompactIcon from './icons/Compact';
import surelyVueVue from '../components/surelyVue.vue';
import WWAdsVue from '../components/rice/WWAds.vue';
import { useWindowScroll } from '@vueuse/core';
import type { GlobalConfig } from '../type';
const rControl = /[\u0000-\u001f]/g;
const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g;
@ -227,25 +210,25 @@ export default defineComponent({
{
title: '大数据渲染',
enTitle: 'Virtualized Table',
href: 'https://surely.cool/doc/performance',
href: 'https://surelyvue.com/doc/performance',
target: '_blank',
},
{
title: '行拖拽排序',
enTitle: 'Row Drag Sort',
href: 'https://surely.cool/doc/dragable#drag-row',
href: 'https://surelyvue.com/doc/dragable#drag-row',
target: '_blank',
},
{
title: '列拖拽排序',
enTitle: 'Column Drag Sort',
href: 'https://surely.cool/doc/dragable#drag-column',
href: 'https://surelyvue.com/doc/dragable#drag-column',
target: '_blank',
},
{
title: '更多高性能示例',
enTitle: 'More high-performance examples ',
href: 'https://surely.cool',
href: 'https://surelyvue.com',
target: '_blank',
},
],

8
site/src/type.ts Normal file
View File

@ -0,0 +1,8 @@
import type { Ref } from 'vue';
export interface GlobalConfig {
isMobile: Ref<boolean>;
lang: Ref<'zh-CN' | 'en-US'>;
isZhCN: Ref<boolean>;
responsive: Ref<null | 'narrow' | 'crowded'>;
blocked: Ref<boolean>;
}

View File

@ -74,7 +74,7 @@
</section>
</template>
<script lang="ts">
import type { GlobalConfig } from '../App.vue';
import type { GlobalConfig } from '../type';
import { computed, defineComponent, inject, onMounted, ref } from 'vue';
import { SearchOutlined } from '@ant-design/icons-vue';
import { GLOBAL_CONFIG } from '../SymbolKey';
@ -107,24 +107,12 @@ export default defineComponent({
cols: 1,
cover: 'https://gw.alipayobjects.com/zos/alicdn/f-SbcX2Lx/Table.svg',
coverDark: 'https://gw.alipayobjects.com/zos/alicdn/f-SbcX2Lx/Table.svg',
path: 'https://surely.cool/',
path: 'https://surelyvue.com/',
subtitle: '更强大的表格',
title: 'Surely Table',
type: 'Advanced And Powerful',
target: '_blank',
},
{
category: 'Components',
cols: 1,
cover: 'https://aliyuncdn.antdv.com/form/static/assets/landing-config.4f9d5425.png',
coverDark:
'https://aliyuncdn.antdv.com/form/static/assets/landing-config.4f9d5425.png',
path: 'https://form.antdv.com/',
subtitle: '在线表单',
title: 'Surely Form',
type: 'Advanced And Powerful',
target: '_blank',
},
],
enTitle: 'Advanced And Powerful',
title: '更强大',

View File

@ -5,7 +5,7 @@ Following the Ant Design specification, we developed a Vue UI library `antd` tha
<div class="pic-plus">
<img width="150" src="https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg" />
<span>+</span>
<img width="160" src="https://aliyuncdn.antdv.com/vue.png" />
<img width="160" src="https://www.antdv.com/vue.png" />
</div>
<style>

View File

@ -5,7 +5,7 @@
<div class="pic-plus">
<img width="150" src="https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg" />
<span>+</span>
<img width="160" src="https://aliyuncdn.antdv.com/vue.png" />
<img width="160" src="https://www.antdv.com/vue.png" />
</div>
<style>

View File

@ -8,8 +8,6 @@ We accept donations through these channels:
<div>
<a href="https://www.paypal.me/tangjinzhou" target="_blank">PayPal</a>
<br/>
<a href="https://aliyuncdn.antdv.com/alipay-and-wechat.png" target="_blank">Alipay or WeChat</a>
</div>
## Recurring Pledges
@ -33,7 +31,7 @@ You can consult me by email [antdv@foxmail.com](antdv@foxmail.com).
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/ant-design-vue#sponsor)]
<div>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://aliyuncdn.antdv.com/jeecg-logo.png" height="64"></a>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a>

View File

@ -8,8 +8,6 @@ ant-design-vue 是采用 MIT 许可的开源项目,使用完全免费。 但
<div>
<a href="https://www.paypal.me/tangjinzhou" target="_blank">PayPal</a>
<br/>
<a href="https://aliyuncdn.antdv.com/alipay-and-wechat.png" target="_blank">支付宝或微信</a>
</div>
## 购买贴纸
@ -37,7 +35,7 @@ ant-design-vue 是采用 MIT 许可的开源项目,使用完全免费。 但
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/ant-design-vue#sponsor)]
<div>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://aliyuncdn.antdv.com/jeecg-logo.png" height="64"></a>
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a>

18
wrangler.jsonc Normal file
View File

@ -0,0 +1,18 @@
{
"name": "antdv-v4",
"compatibility_date": "2025-09-18",
"assets": {
"directory": "./site/dist",
"not_found_handling": "single-page-application"
},
"routes": [
{
"pattern": "antdv.com/*",
"zone_name": "antdv.com"
},
{
"pattern": "www.antdv.com/*",
"zone_name": "antdv.com"
}
]
}