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 - name: Paypal
url: https://www.paypal.me/tangjinzhou url: https://www.paypal.me/tangjinzhou
about: Love Ant Design Vue? Please consider supporting us via Paypal. 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 uses: actions/checkout@v2
- name: cache package-lock.json - name: cache package-lock.json
uses: actions/cache@v1 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
@ -27,7 +27,7 @@ jobs:
- name: cache node_modules - name: cache node_modules
id: node_modules_cache_id id: node_modules_cache_id
uses: actions/cache@v1 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -52,13 +52,13 @@ jobs:
# submodules: true # submodules: true
- name: restore cache from package-lock.json - name: restore cache from package-lock.json
uses: actions/cache@v1 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
- name: restore cache from node_modules - name: restore cache from node_modules
uses: actions/cache@v1 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

View File

@ -10,7 +10,7 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: cache package-lock.json - name: cache package-lock.json
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
@ -27,7 +27,7 @@ jobs:
- name: cache node_modules - name: cache node_modules
id: node_modules_cache_id id: node_modules_cache_id
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -43,25 +43,25 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: restore cache from package-lock.json - name: restore cache from package-lock.json
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
- name: restore cache from node_modules - name: restore cache from node_modules
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: cache lib - name: cache lib
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: lib path: lib
key: lib-${{ github.sha }} key: lib-${{ github.sha }}
- name: cache es - name: cache es
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: es path: es
key: es-${{ github.sha }} key: es-${{ github.sha }}
@ -77,13 +77,13 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: restore cache from package-lock.json - name: restore cache from package-lock.json
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
- name: restore cache from node_modules - name: restore cache from node_modules
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
@ -99,13 +99,13 @@ jobs:
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: restore cache from package-lock.json - name: restore cache from package-lock.json
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: package-temp-dir path: package-temp-dir
key: lock-${{ github.sha }} key: lock-${{ github.sha }}
- name: restore cache from node_modules - name: restore cache from node_modules
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: node_modules path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }} 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"> <h1 align="center">
<a href="https://www.antdv.com/" target="_blank">Ant Design Vue</a> <a href="https://www.antdv.com/" target="_blank">Ant Design Vue</a>
</h1> </h1>
@ -18,6 +12,14 @@
[![](https://cdn-images-1.medium.com/max/2000/1*NIlj0-TdLMbo_hzSBP8tmg.png)](https://www.antdv.com/) [![](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) | 简体中文 [English](./README.md) | 简体中文
## 特性 ## 特性
@ -88,14 +90,13 @@ ant-design-vue 是 MIT 协议的开源项目。为了项目能够更好的持续
- [Patreon](https://www.patreon.com/tangjinzhou) - [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue) - [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou) - [paypal](https://www.paypal.me/tangjinzhou)
- [支付宝或微信](https://aliyuncdn.antdv.com/alipay-and-wechat.png)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2 - ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## 赞助商 ## 赞助商
成为赞助商,并在 Github 上的自述文件上获得您的徽标,并链接到您的网站。 [[成为赞助商](https://opencollective.com/ant-design-vue#sponsor)] 成为赞助商,并在 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"> <p align="center">
<a href="https://www.antdv.com/"> <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> </a>
</p> </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/) [![](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) English | [简体中文](./README-zh_CN.md)
## Features ## 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) - [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue) - [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou) - [paypal](https://www.paypal.me/tangjinzhou)
- [支付宝或微信](https://aliyuncdn.antdv.com/alipay-and-wechat.png)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2 - ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## Sponsors ## 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)] 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) ## [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> <template>
<a-space direction="vertical"> <a-space direction="vertical">
<a-space warp> <a-space wrap>
<a-tooltip title="search"> <a-tooltip title="search">
<a-button type="primary" shape="circle" :icon="h(SearchOutlined)" /> <a-button type="primary" shape="circle" :icon="h(SearchOutlined)" />
</a-tooltip> </a-tooltip>
@ -32,7 +32,7 @@ If you want specific control over the positioning and placement of the `Icon`, t
</a-tooltip> </a-tooltip>
<a-button :icon="h(SearchOutlined)">Search</a-button> <a-button :icon="h(SearchOutlined)">Search</a-button>
</a-space> </a-space>
<a-space warp> <a-space wrap>
<a-tooltip title="search"> <a-tooltip title="search">
<a-button shape="circle" :icon="h(SearchOutlined)" /> <a-button shape="circle" :icon="h(SearchOutlined)" />
</a-tooltip> </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`] = ` 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">
<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 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> </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">
<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 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`] = ` 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">
<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 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> <template>
<a-image-preview-group> <a-image-preview-group>
<a-image :width="200" src="https://aliyuncdn.antdv.com/vue.png" /> <a-image :width="200" src="https://www.antdv.com/vue.png" />
<a-image :width="200" src="https://aliyuncdn.antdv.com/logo.png" /> <a-image :width="200" src="https://www.antdv.com/logo.png" />
</a-image-preview-group> </a-image-preview-group>
</template> </template>

View File

@ -19,7 +19,7 @@ You can set different preview image.
<template> <template>
<a-image <a-image
:width="200" :width="200"
src="https://aliyuncdn.antdv.com/logo.png" src="https://www.antdv.com/logo.png"
:preview="{ :preview="{
src: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png', 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 value16 = ref<string>('');
const value17 = ref<string>('Home'); const value17 = ref<string>('Home');
const value18 = ref<string[]>([]); 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'); const value20 = ref<string>('https://antdv.com');
</script> </script>
<style scoped> <style scoped>

View File

@ -105,7 +105,7 @@ exports[`renders ./components/qrcode/demo/icon.vue correctly 1`] = `
</div> </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`] = ` exports[`renders ./components/qrcode/demo/status.vue correctly 1`] = `
<div class="ant-space ant-space-horizontal ant-space-align-center"> <div class="ant-space ant-space-horizontal ant-space-align-center">

View File

@ -19,6 +19,6 @@ With Popover.
<template #content> <template #content>
<a-qrcode value="http://www.antdv.com" :bordered="false" /> <a-qrcode value="http://www.antdv.com" :bordered="false" />
</template> </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> </a-popover>
</template> </template>

View File

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

View File

@ -8,21 +8,21 @@ title:
## zh-CN ## 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 万列的数据你不必担心页面卡顿造成用户投诉进而影响业务进展 该组件致力于解决大数据渲染图表集成等复杂高频问题 使用该组件可以流畅滚动 10 万行10 万列的数据你不必担心页面卡顿造成用户投诉进而影响业务进展
## en-US ## 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. 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. Using this component, you can smoothly scroll through 100,000 rows and 100,000 columns of data.
</docs> </docs>
<template> <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"> <div v-if="false">
you can visit you can visit
<a href="https://www.surely.cool"></a> <a href="https://www.surelyvue.com"></a>
get more info get more info
</div> </div>
</template> </template>

View File

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

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@
content="An enterprise-class UI components based on Ant Design and Vue" content="An enterprise-class UI components based on Ant Design and Vue"
/> />
<title>Ant Design Vue</title> <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"> <style id="nprogress-style">
#page-404 { #page-404 {
background-image: url('https://os.alipayobjects.com/rmsportal/NOAjOBbnYCrNzrW.jpg'); background-image: url('https://os.alipayobjects.com/rmsportal/NOAjOBbnYCrNzrW.jpg');

View File

@ -16,7 +16,7 @@
name="keywords" 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文档" 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"> <style id="nprogress-style">
#nprogress { #nprogress {
display: none; display: none;
@ -45,7 +45,7 @@
<body> <body>
<div id="app"></div> <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> <script type="module" src="/src/main.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics --> <!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-151755889-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-151755889-1"></script>
@ -59,23 +59,5 @@
gtag('config', 'UA-151755889-1'); gtag('config', 'UA-151755889-1');
</script> </script>
<script type="text/javascript" src="https://cdn.wwads.cn/js/makemoney.js" async></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> </body>
</html> </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"> <script lang="ts">
import { computed, defineComponent, provide, watch, ref } from 'vue'; import { computed, defineComponent, provide, watch, ref } from 'vue';
import type { Ref } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import useMediaQuery from './hooks/useMediaQuery'; import useMediaQuery from './hooks/useMediaQuery';
@ -21,16 +20,11 @@ import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn'; import 'dayjs/locale/zh-cn';
import { theme as antdTheme } from 'ant-design-vue'; import { theme as antdTheme } from 'ant-design-vue';
import SiteToken from './SiteToken.vue'; import SiteToken from './SiteToken.vue';
import type { GlobalConfig } from './type';
function isZhCN(name: string) { function isZhCN(name: string) {
return /-cn\/?$/.test(name); 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'; export type ThemeName = '' | 'light' | 'dark' | 'compact';
const getAlgorithm = (themes: ThemeName[] = []) => const getAlgorithm = (themes: ThemeName[] = []) =>
themes themes

View File

@ -103,7 +103,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import type { GlobalConfig } from '../App.vue'; import type { GlobalConfig } from '../type';
import { GLOBAL_CONFIG } from '../SymbolKey'; import { GLOBAL_CONFIG } from '../SymbolKey';
import { computed, defineComponent, inject, onMounted, ref } from 'vue'; import { computed, defineComponent, inject, onMounted, ref } from 'vue';
import { CheckOutlined, SnippetsOutlined, CodeSandboxOutlined } from '@ant-design/icons-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, isEffective,
visible: true, visible: true,
v: dayjs().date(), v: dayjs().date(),
ads: [ 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'),
},
],
}; };
}, },
}; };

View File

@ -10,11 +10,6 @@
<img height="51" src="https://cdn.tipe.io/tipe/tipe-cat-no-text.svg" alt="tipe" /> <img height="51" src="https://cdn.tipe.io/tipe/tipe-cat-no-text.svg" alt="tipe" />
</a> </a>
</li> --> </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"> <li class="sponsorsItem" style="padding: 10px 0">
<a-button type="primary" ghost style="font-size: 12px" @click="handleClick"> <a-button type="primary" ghost style="font-size: 12px" @click="handleClick">
{{ isCN ? '成为赞助商' : 'Become a Sponsor' }} {{ isCN ? '成为赞助商' : 'Become a Sponsor' }}

View File

@ -1,64 +1,241 @@
<template> <template>
<div v-if="show"> <div class="top-rice">
<template v-if="ads.length"> <!-- Mentorbook banner -->
<a-carousel autoplay> <div v-if="showMentorbook" class="mentorbook-banner">
<template v-for="ad in ads" :key="ad.href"> <a href="https://mentorbook.ai/" target="_blank" class="banner-content">
<a :href="ad.href" target="_blank"> <div class="brand-name">Mentorbook.AI</div>
<img style="width: 100%; max-width: 1200px" :alt="ad.alt || ''" :src="ad.img" /> <div class="main-slogan">
</a> {{ isCN ? '你的 AI 导师,你的学习助手' : 'Your AI Mentor, Your Learning Journey' }}
</template> </div>
</a-carousel> <div class="value-props">
</template> {{
<template v-else-if="showGoogleAd"> isCN
<!-- <template v-if="isCN"> ? '✨ 个性化课程 · 即时反馈 · 100+ 学科领域'
<WWAds :key="`WWAds_${$route.path}`" /> : '✨ Personalized Courses · Instant Feedback · 100+ Subjects'
</template> --> }}
<google-ads-top :key="`GoogleAdsTop_${$route.path}`" /> </div>
</template> </a>
<a href="https://mentorbook.ai/" target="_blank" class="start-button">
{{ isCN ? '免费开始' : 'Get Started Free' }}
</a>
</div>
</div> </div>
</template> </template>
<script> <script>
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween'; import isBetween from 'dayjs/plugin/isBetween';
dayjs.extend(isBetween); dayjs.extend(isBetween);
import GoogleAdsTop from './GoogleAdsTop.vue';
// import WWAds from './WWAds.vue'; // import WWAds from './WWAds.vue';
const isEffective = (start, end) => { const isEffective = (start, end) => {
return dayjs().isBetween(start, end); return dayjs().isBetween(start, end);
}; };
export default { export default {
components: { components: {
GoogleAdsTop,
// WWAds, // WWAds,
}, },
props: ['isCN', 'isMobile'], props: ['isCN', 'isMobile'],
data() { data() {
return { return {
show: true, show: true,
showGoogleAd: location.host.indexOf('antdv.com') > -1, showMentorbook: true,
cnAds: [ cnAds: [
{ {
img: `https://yidengfe.com/launches/01/yd.png?v=${Date.now()}`, img: `https://yidengfe.com/launches/01/yd.png?v=${Date.now()}`,
href: 'https://yidengfe.com/launches/01/yd.html', 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), ].filter(ad => ad.visible),
enAds: [ enAds: [
{ {
img: 'https://aliyuncdn.antdv.com/TheBigRichGroup.png', img: `https://yidengfe.com/launches/01/yd.png?v=${Date.now()}`,
href: 'https://thebigrichgroup.com/', href: 'https://yidengfe.com/launches/01/yd.html',
visible: isEffective('2020-09-18 17:00:00', '2021-07-09 17:00:00'), visible: true,
}, },
].filter(ad => ad.visible), ].filter(ad => ad.visible),
}; };
}, },
computed: { computed: {
ads() { otherAds() {
return this.isCN ? this.cnAds : this.enAds; return this.isCN ? this.cnAds : this.enAds;
}, },
}, },
}; };
</script> </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> <template>
<div class="container"> <div class="container">
<a-carousel autoplay> <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="cls">
<div class="logo"> <div class="logo">
<img height="80" src="https://aliyuncdn.antdv.com/form/static/logo-blue.png" alt="" /> <img height="80" src="https://www.surelyvue.com/surely-vue-logo.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="" />
</div> </div>
<div class="desc"> <div class="desc">
<div class="title">Surely Table</div> <div class="title">Surely Table</div>

View File

@ -60,12 +60,9 @@
</div> </div>
</div> </div>
</a-col> </a-col>
<a-col :md="6" :sm="24" :xs="24"> <!-- <a-col :md="6" :sm="24" :xs="24">
<div class="footer-center"> <div class="footer-center">
<h2>{{ isCN ? '友情链接' : 'Links' }}</h2> <h2>{{ isCN ? '友情链接' : 'Links' }}</h2>
<div v-if="showJeecg">
<a href="http://www.jeecg.com/" target="_blank">Jeecg</a>
</div>
<div> <div>
<a href="https://cn.vuejs.org/" target="_blank">Vue</a> <a href="https://cn.vuejs.org/" target="_blank">Vue</a>
</div> </div>
@ -79,8 +76,8 @@
<a href="https://antdv.formilyjs.org/" target="_blank">@formily/antdv</a> <a href="https://antdv.formilyjs.org/" target="_blank">@formily/antdv</a>
</div> </div>
</div> </div>
</a-col> </a-col> -->
<a-col :md="6" :sm="24" :xs="24"> <a-col :md="12" :sm="24" :xs="24">
<div class="footer-center"> <div class="footer-center">
<h2> <h2>
<img <img
@ -88,28 +85,17 @@
class="title-icon" class="title-icon"
src="https://gw.alipayobjects.com/zos/rmsportal/nBVXkrFdWHxbZlmMbsaH.svg" src="https://gw.alipayobjects.com/zos/rmsportal/nBVXkrFdWHxbZlmMbsaH.svg"
/> />
<span>{{ isCN ? '更多产品' : 'More Products' }}</span> <span>{{ isCN ? '友情链接' : 'Links' }}</span>
</h2> </h2>
<div> <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>-</span>
<span>{{ isCN ? '数据可视化' : 'Data Visualization' }}</span> <span>{{ isCN ? '好看好用的录屏工具' : 'Beautiful Screen Recordings' }}</span>
</div>
<div>
<a href="https://eggjs.org/" rel="noopener noreferrer" target="_blank">Egg</a>
<span>-</span>
<span>{{ isCN ? '企业级 Node 开发框架' : 'Enterprise Node Framework' }}</span>
</div> </div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
</div> </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> </footer>
</template> </template>
<script> <script>

View File

@ -15,7 +15,7 @@
<a-menu-item-group v-if="isZhCN" key="advanced" title="高级组件"> <a-menu-item-group v-if="isZhCN" key="advanced" title="高级组件">
<a-menu-item key="surely-table"> <a-menu-item key="surely-table">
<a <a
href="https://www.surely.cool" href="https://www.surelyvue.com"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
style="position: relative" style="position: relative"
@ -23,17 +23,6 @@
Surely Table Surely Table
</a> </a>
</a-menu-item> </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> </a-menu-item-group>
<template v-for="m in menus"> <template v-for="m in menus">
<template v-if="m.children"> <template v-if="m.children">

View File

@ -23,19 +23,6 @@
<a-menu-item key="awesome"> <a-menu-item key="awesome">
<a target="_blank" href="https://github.com/vueComponent/ant-design-vue-awesome">Awesome</a> <a target="_blank" href="https://github.com/vueComponent/ant-design-vue-awesome">Awesome</a>
</a-menu-item> </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-menu-item key="qq1">
<a>QQ 1(217490093) 已满</a> <a>QQ 1(217490093) 已满</a>
</a-menu-item> </a-menu-item>
@ -50,7 +37,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, inject } from 'vue'; import { computed, defineComponent, inject } from 'vue';
import type { GlobalConfig } from '../../App.vue'; import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey'; import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util'; import { getLocalizedPathname } from '../../utils/util';

View File

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

View File

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

View File

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

View File

@ -1,25 +1,5 @@
<template> <template>
<header id="header" :class="headerClassName"> <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-row :style="{ flexFlow: 'nowrap', height: 64, position: 'relative' }">
<a-col v-bind="colProps[0]"> <a-col v-bind="colProps[0]">
<Logo /> <Logo />
@ -57,15 +37,10 @@
<strong>Ant Design Vue 4</strong> <strong>Ant Design Vue 4</strong>
五大新组件全新 Design Token 五大新组件全新 Design Token
</li> </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"> <li class="alert-list-item">
<strong>Surely Table</strong> <strong>Surely Table</strong>
支持高性能编辑模式了 支持高性能编辑模式了
<a target="_blank" href="https://www.surely.cool/">立即体验</a> <a target="_blank" href="https://www.surelyvue.com/">立即体验</a>
</li> </li>
<li class="alert-list-item"> <li class="alert-list-item">
<strong>Admin Pro</strong> <strong>Admin Pro</strong>
@ -77,7 +52,7 @@
</header> </header>
</template> </template>
<script lang="ts"> <script lang="ts">
import type { GlobalConfig } from '../../App.vue'; import type { GlobalConfig } from '../../type';
import { GLOBAL_CONFIG } from '../../SymbolKey'; import { GLOBAL_CONFIG } from '../../SymbolKey';
import { getLocalizedPathname } from '../../utils/util'; import { getLocalizedPathname } from '../../utils/util';
import { computed, defineComponent, inject, onMounted, ref, watch } from 'vue'; import { computed, defineComponent, inject, onMounted, ref, watch } from 'vue';
@ -86,7 +61,6 @@ import Logo from './Logo.vue';
import Menu from './Menu.vue'; import Menu from './Menu.vue';
import { UnorderedListOutlined } from '@ant-design/icons-vue'; import { UnorderedListOutlined } from '@ant-design/icons-vue';
import SearchBox from './SearchBox.vue'; import SearchBox from './SearchBox.vue';
import { version } from 'ant-design-vue';
export default defineComponent({ export default defineComponent({
components: { components: {
Logo, Logo,
@ -157,13 +131,13 @@ export default defineComponent({
watch(globalConfig?.blocked, val => { watch(globalConfig?.blocked, val => {
visibleAdblockBanner.value = val; visibleAdblockBanner.value = val;
}); });
const alertKey = 'ant-design-vue-4-alert'; // const alertKey = 'ant-design-vue-4-alert';
const visibleAlertBanner = ref(!localStorage.getItem(alertKey)); const visibleAlertBanner = ref(false);
watch(visibleAlertBanner, () => { // watch(visibleAlertBanner, () => {
if (!visibleAlertBanner.value) { // if (!visibleAlertBanner.value) {
localStorage.setItem(alertKey, version); // localStorage.setItem(alertKey, version);
} // }
}); // });
return { return {
isZhCN: globalConfig.isZhCN, isZhCN: globalConfig.isZhCN,
isMobile: globalConfig.isMobile, isMobile: globalConfig.isMobile,

View File

@ -1,4 +1,5 @@
<template> <template>
<TopAd :is-c-n="isZhCN" />
<Header /> <Header />
<div v-if="headers.length" class="toc-affix" :style="y > 102 ? 'position:fixed; top: 16px;' : ''"> <div v-if="headers.length" class="toc-affix" :style="y > 102 ? 'position:fixed; top: 16px;' : ''">
<a-anchor style="width: 160px" :items="headers"> <a-anchor style="width: 160px" :items="headers">
@ -43,8 +44,6 @@
</template> </template>
<a-col :xxxl="20" :xxl="20" :xl="19" :lg="18" :md="18" :sm="24" :xs="24"> <a-col :xxxl="20" :xxl="20" :xl="19" :lg="18" :md="18" :sm="24" :xs="24">
<section :class="mainContainerClass"> <section :class="mainContainerClass">
<WWAdsVue v-if="isZhCN" />
<TopAd v-else />
<Demo v-if="isDemo" :page-data="pageData" :is-zh-c-n="isZhCN"> <Demo v-if="isDemo" :page-data="pageData" :is-zh-c-n="isZhCN">
<component :is="matchCom" /> <component :is="matchCom" />
</Demo> </Demo>
@ -85,22 +84,6 @@
</template> </template>
</a-float-button> </a-float-button>
</a-float-button-group> </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" /> <PrevAndNext :menus="menus" :current-menu-index="currentMenuIndex" :is-zh-c-n="isZhCN" />
<Footer /> <Footer />
</a-col> </a-col>
@ -108,7 +91,6 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import type { GlobalConfig } from '../App.vue';
import { GLOBAL_CONFIG } from '../SymbolKey'; import { GLOBAL_CONFIG } from '../SymbolKey';
import { defineComponent, inject, computed, ref, provide, watch } from 'vue'; import { defineComponent, inject, computed, ref, provide, watch } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
@ -129,6 +111,7 @@ import CompactIcon from './icons/Compact';
import surelyVueVue from '../components/surelyVue.vue'; import surelyVueVue from '../components/surelyVue.vue';
import WWAdsVue from '../components/rice/WWAds.vue'; import WWAdsVue from '../components/rice/WWAds.vue';
import { useWindowScroll } from '@vueuse/core'; import { useWindowScroll } from '@vueuse/core';
import type { GlobalConfig } from '../type';
const rControl = /[\u0000-\u001f]/g; const rControl = /[\u0000-\u001f]/g;
const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g; const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g;
@ -227,25 +210,25 @@ export default defineComponent({
{ {
title: '大数据渲染', title: '大数据渲染',
enTitle: 'Virtualized Table', enTitle: 'Virtualized Table',
href: 'https://surely.cool/doc/performance', href: 'https://surelyvue.com/doc/performance',
target: '_blank', target: '_blank',
}, },
{ {
title: '行拖拽排序', title: '行拖拽排序',
enTitle: 'Row Drag Sort', enTitle: 'Row Drag Sort',
href: 'https://surely.cool/doc/dragable#drag-row', href: 'https://surelyvue.com/doc/dragable#drag-row',
target: '_blank', target: '_blank',
}, },
{ {
title: '列拖拽排序', title: '列拖拽排序',
enTitle: 'Column Drag Sort', enTitle: 'Column Drag Sort',
href: 'https://surely.cool/doc/dragable#drag-column', href: 'https://surelyvue.com/doc/dragable#drag-column',
target: '_blank', target: '_blank',
}, },
{ {
title: '更多高性能示例', title: '更多高性能示例',
enTitle: 'More high-performance examples ', enTitle: 'More high-performance examples ',
href: 'https://surely.cool', href: 'https://surelyvue.com',
target: '_blank', 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> </section>
</template> </template>
<script lang="ts"> <script lang="ts">
import type { GlobalConfig } from '../App.vue'; import type { GlobalConfig } from '../type';
import { computed, defineComponent, inject, onMounted, ref } from 'vue'; import { computed, defineComponent, inject, onMounted, ref } from 'vue';
import { SearchOutlined } from '@ant-design/icons-vue'; import { SearchOutlined } from '@ant-design/icons-vue';
import { GLOBAL_CONFIG } from '../SymbolKey'; import { GLOBAL_CONFIG } from '../SymbolKey';
@ -107,24 +107,12 @@ export default defineComponent({
cols: 1, cols: 1,
cover: 'https://gw.alipayobjects.com/zos/alicdn/f-SbcX2Lx/Table.svg', cover: 'https://gw.alipayobjects.com/zos/alicdn/f-SbcX2Lx/Table.svg',
coverDark: '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: '更强大的表格', subtitle: '更强大的表格',
title: 'Surely Table', title: 'Surely Table',
type: 'Advanced And Powerful', type: 'Advanced And Powerful',
target: '_blank', 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', enTitle: 'Advanced And Powerful',
title: '更强大', title: '更强大',

View File

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

View File

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

View File

@ -8,8 +8,6 @@ We accept donations through these channels:
<div> <div>
<a href="https://www.paypal.me/tangjinzhou" target="_blank">PayPal</a> <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> </div>
## Recurring Pledges ## 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)] 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> <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/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/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/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> <div>
<a href="https://www.paypal.me/tangjinzhou" target="_blank">PayPal</a> <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> </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)] 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> <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/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/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/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"
}
]
}