15 Commits

Author SHA1 Message Date
f2463da8cc bugfix: editdesignType弹窗编辑产品图的prompt assist弹窗 2025-11-25 17:32:19 +08:00
6b8027f449 bugfix: design弹窗转产品图/编辑产品图的placeholder 2025-11-25 17:32:13 +08:00
zhangyh
8c3fea8a24 Merge branch 'dev_vite' into StableVersion 2025-11-24 17:41:56 +08:00
X1627315083
819093db8c 调整注册订阅页面结构 2025-11-24 17:40:43 +08:00
zhangyh
7dcfc3e705 Revert "情绪版布局调整"
This reverts commit f86c18cf3a.
2025-11-24 17:32:24 +08:00
zhangyh
7bb8b227b4 Merge branch 'dev_vite' into StableVersion 2025-11-24 17:26:26 +08:00
X1627315083
3d2fddbe7b 调整history字体大小 2025-11-24 17:11:09 +08:00
zhangyh
9662610b1b Merge branch 'dev_vite' into StableVersion 2025-11-24 15:37:28 +08:00
zhangyh
56f958173b bugfix: editdesignType弹窗问题 2025-11-24 15:08:28 +08:00
zhangyh
0e57e4de46 bugfix: 成人男装单品prompt assist图片错误 2025-11-24 14:52:16 +08:00
X1627315083
b0e365dcde Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2025-11-24 13:33:00 +08:00
X1627315083
5497f4fdbc Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2025-11-24 11:49:31 +08:00
zhangyh
3d6b622eef Merge branch 'dev_vite' into StableVersion 2025-11-22 01:19:33 +08:00
zhangyh
38ac7da504 Merge branch 'dev_vite' into StableVersion 2025-11-22 01:16:05 +08:00
X1627315083
1c895710d8 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2025-11-21 16:41:29 +08:00
38 changed files with 1713 additions and 2784 deletions

View File

@@ -1,90 +0,0 @@
name: git commit 控制 AiDA WEB-Node.js 开发分支构建部署
on:
workflow_dispatch:
push:
branches:
- dev_vite
jobs:
build:
runs-on: ubuntu-latest
if: "contains(github.event.head_commit.message, '[run build]')"
strategy:
matrix:
node-version: [ 18.18.0 ]
env:
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-aida-web-front
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: dev_vite
- name: 2.设置 Node.js 环境
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build:dev
- run: ls -l
- name: 3.同步文件到远程服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
source: "./dist/*"
target: ${{ env.REMOTE_DEPLOY_PATH }}
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
strip_components: 0
- name: 4. 远程重载 Nginx 配置
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
# 核心:执行 Nginx 重载命令
script: |
echo "尝试重载 Nginx 服务..."
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
# 否则工作流可能会因为权限不足而失败。
sudo systemctl reload nginx
echo "Nginx 重载命令已发送。"
- name: 5.发送构建结果邮件
if: always() # 无论上一步是否失败,都执行此步骤
uses: dawidd6/action-send-mail@v3
with:
from: ${{ secrets.MAIL_USERNAME }}
# --- 邮件配置 ---
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |
项目: AiDA back-java Develop
分支: dev/3.1_release_merge
🎉 构建结果: ${{ job.status }}
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
content_type: text/plain

View File

@@ -1,85 +0,0 @@
name: 手动触发 AiDA WEB-Node.js 开发分支构建部署
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 18.18.0 ]
env:
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-aida-web-front
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: dev_vite
- name: 2.设置 Node.js 环境
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build:dev
- run: ls -l
- name: 3.同步文件到远程服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
source: "./dist/*"
target: ${{ env.REMOTE_DEPLOY_PATH }}
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
strip_components: 0
- name: 4. 远程重载 Nginx 配置
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
# 核心:执行 Nginx 重载命令
script: |
echo "尝试重载 Nginx 服务..."
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
# 否则工作流可能会因为权限不足而失败。
sudo systemctl reload nginx
echo "Nginx 重载命令已发送。"
- name: 5.发送构建结果邮件
if: always() # 无论上一步是否失败,都执行此步骤
uses: dawidd6/action-send-mail@v3
with:
from: ${{ secrets.MAIL_USERNAME }}
# --- 邮件配置 ---
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |
项目: AiDA back-java Develop
分支: dev/3.1_release_merge
🎉 构建结果: ${{ job.status }}
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
content_type: text/plain

View File

@@ -1,78 +0,0 @@
name: AiDA WEB-Node.js 生产分支构建部署
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 18.18.0 ]
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: StableVersion
- name: 2.设置 Node.js 环境
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build
- run: ls -l
- name: 3.5. 手动安装 AWS CLI v2 # 新增步骤:确保 aws 命令可用
run: |
echo "安装 AWS CLI V2..."
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
aws --version
echo "AWS CLI V2 安装完成。"
- name: 4.配置 AWS 凭证
uses: aws-actions/configure-aws-credentials@main
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: 'ap-east-1'
- name: 5.同步 dist 目录到 S3
run: |
aws s3 sync dist/ s3://${{ secrets.S3_BUCKET_NAME }}/ --acl public-read
- name: 6.发送构建结果邮件
if: always() # 无论上一步是否失败,都执行此步骤
uses: dawidd6/action-send-mail@v3
with:
from: ${{ secrets.MAIL_USERNAME }}
# --- 邮件配置 ---
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |
项目: AiDA back-java Develop
分支: dev/3.1_release_merge
🎉 构建结果: ${{ job.status }}
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
content_type: text/plain

View File

@@ -1,81 +0,0 @@
name: AiDA WEB-Node.js 生产分支构建部署
on:
schedule:
# cron为UTC时区构建时间=部署时间-8小时 {*分 (-8)时 *日 *月 *周} ---
# 示例: 1月1日22点22分触发构建 cron写作 - '22 14 1 1 *'
- cron: '00 14 23 3 *'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 18.18.0 ]
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: StableVersion
- name: 2.设置 Node.js 环境
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build
- run: ls -l
- name: 3.5. 手动安装 AWS CLI v2 # 新增步骤:确保 aws 命令可用
run: |
echo "安装 AWS CLI V2..."
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
aws --version
echo "AWS CLI V2 安装完成。"
- name: 4.配置 AWS 凭证
uses: aws-actions/configure-aws-credentials@main
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: 'ap-east-1'
- name: 5.同步 dist 目录到 S3
run: |
aws s3 sync dist/ s3://${{ secrets.S3_BUCKET_NAME }}/ --acl public-read
- name: 6.发送构建结果邮件
if: always() # 无论上一步是否失败,都执行此步骤
uses: dawidd6/action-send-mail@v3
with:
from: ${{ secrets.MAIL_USERNAME }}
# --- 邮件配置 ---
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |
项目: AiDA WEB-Node.js 生产分支构建部署
分支: StableVersion
🎉 构建结果: ${{ job.status }}
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
content_type: text/plain

View File

@@ -1,85 +0,0 @@
name: 手动触发 AiDA WEB-Node.js 开发分支构建部署
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 18.18.0 ]
env:
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/Research/research-aida-web-front
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: research
- name: 2.设置 Node.js 环境
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build:dev
- run: ls -l
- name: 3.同步文件到远程服务器
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
source: "./dist/*"
target: ${{ env.REMOTE_DEPLOY_PATH }}
ssh_options: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
strip_components: 0
- name: 4. 远程重载 Nginx 配置
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
# 核心:执行 Nginx 重载命令
script: |
echo "尝试重载 Nginx 服务..."
# 💡 注意:执行此命令需要服务器用户具有 sudo 权限,并且配置了 NOPASSWD。
# 否则工作流可能会因为权限不足而失败。
sudo systemctl reload nginx
echo "Nginx 重载命令已发送。"
- name: 5.发送构建结果邮件
if: always() # 无论上一步是否失败,都执行此步骤
uses: dawidd6/action-send-mail@v3
with:
from: ${{ secrets.MAIL_USERNAME }}
# --- 邮件配置 ---
server_address: smtp.gmail.com # 替换为你的SMTP服务器地址
server_port: 465 # 替换为你的SMTP端口 (通常是465或587)
username: ${{ secrets.MAIL_USERNAME }} # 存储在Secrets中的邮箱用户名
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |
项目: AiDA back-java Develop
分支: dev/3.1_release_merge
🎉 构建结果: ${{ job.status }}
📅 构建时间: ${{ steps.build_start_time.outputs.current_time }}
🔗 构建链接: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
# 确保邮件内容为纯文本,或者你可以设置为 html: true 并调整 body
content_type: text/plain

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 KiB

View File

@@ -8,6 +8,14 @@
"id": 2, "id": 2,
"title":"AiDA X SFT AI Fashion Award 2024", "title":"AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png" "imgUrl": "/image/events/Fashion-Award-2024.png"
},{
"id": 3,
"title":"✨New Year 2025🎉Let's kick off the year with a burst of inspiration and design!",
"imgUrl": "/image/events/AiDA2025-En.jpg"
},{
"id": 4,
"title":"Welcome back Subscribe with the discount code to enjoy 50% OFF!",
"imgUrl": "/image/events/Welcome-back-En.jpg"
} }
], ],
"eventsItem":[ "eventsItem":[
@@ -88,6 +96,106 @@
] ]
} }
] ]
},{
"id":3,
"title":"✨New Year 2025🎉Let's kick off the year with a burst of inspiration and design!",
"imgUrl": "/image/events/AiDA2025-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"Share your work and get 1 month of free access to AiDA"
}
]
},{
"paragraph":[
{
"text":" Just do the following:"
}
]
},{
"paragraph":[
{
"text":" ✅Share your designs on AiDA's Gallery "
},{
"text":" ✅Add the tag #NewYear_2025 in the work description"
},{
"text":" ✅At least 20 likes "
}
]
},{
"paragraph":[
{
"text":"📅 Duration: January 1, 2025 January 31, 2025"
}
]
},{
"paragraph":[
{
"text":"Join in the fun and embark on a new year's journey of design. Mix your creativity with tech to make amazing, unique creations! Get your friends to help you seize this opportunity! Invite them to give your design some love with their likes💗"
}
]
},{
"paragraph":[
{
"text":"👍 AiDA is waiting for you to unlock a new world of design!"
}
]
}
]
},{
"id":4,
"title":"Welcome back Subscribe with the discount code to enjoy 50% OFF!",
"imgUrl": "/image/events/Welcome-back-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"💠 In February, AiDA underwent a legendary transformation"
},{
"text":"💠 A silky-smooth interface and a turbocharged upgrade to all functions"
},{
"text":"😆 Long-time users are saying: “Wait… is this still the AiDA I knew?!"
}
]
},{
"paragraph":[
{
"text":"Demo video👉 <a href='https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h' target='_blank'>https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h</a>"
}
]
},{
"paragraph":[
{
"text":"⚡️ To welcome back our trial users, weve prepared an exclusive design power-up:"
},{
"text":"✔️ Use the promo code「RIINRMKK」 and enjoy 50% off your subscription"
},{
"text":"✔️ Boost your efficiency by 60%—save hours on every project"
},{
"text":"✔️ sNo design background? No problem! Get stunning drafts in just 5 minutes"
}
]
},{
"paragraph":[
{
"text":"⏳ The countdown is on:"
},{
"text":"✨Ignite your creativity like a volcanic eruption"
},{
"text":"✨Let your inspiration flow like a cosmic waterfall"
}
]
},{
"paragraph":[
{
"text":"Promotional Code: <strong>RIINRMKK</strong>"
},{
"text":"Duration: June 10 to June 30, 2025 After that, subscriptions return to full price. Dont miss it!"
}
]
}
]
} }
] ]
} }

View File

@@ -8,7 +8,15 @@
"id": 2, "id": 2,
"title":"AiDA X SFT AI时尚设计比赛2024", "title":"AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png" "imgUrl": "/image/events/Fashion-Award-2024.png"
} },{
"id": 3,
"title":"🎉搭上2025的列车打开新设计的大门",
"imgUrl": "/image/events/AiDA2025-Cn.jpg"
},{
"id": 4,
"title":"设计时速狂飙AiDA 618半价让灵感永不限流",
"imgUrl": "/image/events/Welcome-back-Cn.jpg"
}
], ],
"eventsItem":[ "eventsItem":[
{ {
@@ -88,6 +96,112 @@
] ]
} }
] ]
},{
"id":3,
"title":"🎉搭上2025的列车打开新设计的大门",
"imgUrl": "/image/events/AiDA2025-Cn.jpg",
"textList":[
{
"paragraph":[
{
"text":"快来发布作品获得1个月免费使用AiDA的福利"
}
]
},{
"paragraph":[
{
"text":" 只需要:"
}
]
},{
"paragraph":[
{
"text":" ✅在AiDA将设计作品分享至广场/Gallery"
},{
"text":" ✅点赞至少20"
},{
"text":" ✅在作品描述加上tag #NewYear_2025"
}
]
},{
"paragraph":[
{
"text":"📅 活动时间2025.1.1—2025.1.31"
}
]
},{
"paragraph":[
{
"text":"快来参与,让我们共同开启新年的设计之旅,让创意与科技完美融合,创造出属于你的独一无二的作品!机会难得,叫上你的朋友们助你一臂之力,为你点上大拇指哦!"
}
]
},{
"paragraph":[
{
"text":"👍 点赞即启程AiDA等你来解锁设计新世界"
}
]
}
]
},{
"id":4,
"title":"设计时速狂飙AiDA 618半价让灵感永不限流",
"imgUrl": "/image/events/Welcome-back-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"618的钟声敲响AiDA的AI设计宇宙正式进入「超维折扣纪元」"
}
]
},{
"paragraph":[
{
"text":"💠 就在今年2月AiDA完成史诗级进化"
},{
"text":"💠 界面如丝绸般顺滑,功能矩阵全面升级。"
},{
"text":"😆 旧版用户惊呼这还是我认识的AiDA吗⁉"
}
]
},{
"paragraph":[
{
"text":"演示视频👉 <a href='https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h' target='_blank'>https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h</a>"
}
]
},{
"paragraph":[
{
"text":"⚡️ 618特供「专属暴击福利」💥"
},{
"text":"✔️ 输入口令“RIINRMKK”订阅直接享受半价"
},{
"text":"✔️ 效率提升60%,设计实践节省一大半!"
},{
"text":"✔️ 零基础也能5分钟出稿轻松搞定设计需求"
}
]
},{
"paragraph":[
{
"text":"⏳ 倒计时警报:"
},{
"text":"👉 让设计如火山喷发般炽热"
},{
"text":"👉 让灵感似银河倾泻般璀璨"
}
]
},{
"paragraph":[
{
"text":"优惠码:<strong>RIINRMKK</strong>"
},{
"text":"活动日期2025.6.10-6.30(后续订阅费用将恢复至原价)"
}
]
}
]
} }
] ]
} }

View File

@@ -168,7 +168,6 @@ li {
} }
.ant-modal-mask { .ant-modal-mask {
background-color: #666666; background-color: #666666;
opacity: 0.5;
} }
.select_block { .select_block {
height: 4rem; height: 4rem;

View File

@@ -173,7 +173,6 @@ input:focus{
} }
.ant-modal-mask{ .ant-modal-mask{
background-color: #666666; background-color: #666666;
opacity: .5;
} }
.select_block{ .select_block{
height: 4rem; height: 4rem;

View File

@@ -141,7 +141,6 @@ export default defineComponent({
JSON.stringify(colorData.selectDetail.color.gradient) == JSON.stringify(color?.gradient) JSON.stringify(colorData.selectDetail.color.gradient) == JSON.stringify(color?.gradient)
&& colorData.selectDetail.color.rgba?.r && colorData.selectDetail.color.rgba?.r
){ ){
console.log('---',index)
isNoSelect = true isNoSelect = true
colorData.selectColor = item colorData.selectColor = item
colorData.colorList.index = index colorData.colorList.index = index
@@ -161,8 +160,8 @@ export default defineComponent({
if(color?.gradient){ if(color?.gradient){
item.gradient = color?.gradient item.gradient = color?.gradient
} }
// colorData.colorList.index = index colorData.colorList.index = index
// colorData.selectColor = item colorData.selectColor = item
} }
colorData.colorList.list[newVal].push(item) colorData.colorList.list[newVal].push(item)
} }

View File

@@ -350,7 +350,6 @@ export default defineComponent({
margin-top: 1rem; margin-top: 1rem;
justify-content: space-between; justify-content: space-between;
align-content: flex-start; align-content: flex-start;
padding-bottom: 2rem;
// &::-webkit-scrollbar{display: none;} // &::-webkit-scrollbar{display: none;}
> .content_img_item{ > .content_img_item{
width: calc((50% - 1rem)); width: calc((50% - 1rem));
@@ -369,12 +368,9 @@ export default defineComponent({
> .material_content_list_loding{ > .material_content_list_loding{
width: 100%; width: 100%;
aspect-ratio: 1/1; aspect-ratio: 1/1;
height: 4rem;
overflow: hidden; overflow: hidden;
> img{ > img{
width: 100%; width: 100%;
height: 100%;
object-fit: contain;
} }
} }
} }

View File

@@ -30,7 +30,7 @@
:outputSize="option.size" :outputSize="option.size"
:outputType="option.outputType" :outputType="option.outputType"
:auto-crop="option.autoCrop" :auto-crop="option.autoCrop"
:fixedBox="isRound" :fixedBox="!isRound"
:movable="true" :movable="true"
:fixed="isRound" :fixed="isRound"
:auto-crop-width="option.autoCropWidth" :auto-crop-width="option.autoCropWidth"
@@ -333,7 +333,6 @@ export default defineComponent({
.cut_picture_review_block{ .cut_picture_review_block{
width: 100%; width: 100%;
height: calc(100% - 6.8rem*1.2); height: calc(100% - 6.8rem*1.2);
min-height: calc(100% - 6.8rem*1.2);
margin: 0 auto; margin: 0 auto;
.next_step_button{ .next_step_button{
margin-top: 2rem; margin-top: 2rem;

View File

@@ -679,11 +679,10 @@
margin-bottom: 1rem; margin-bottom: 1rem;
border-radius: 1rem; border-radius: 1rem;
overflow: hidden; overflow: hidden;
border: 1.5px solid #E7EBFF; border: 1.5px solid #eaecf0;
cursor: pointer;
> .popular { > .popular {
background: #1B223C; background: #2d9f75;
font-weight: 600; font-weight: 600;
display: flex; display: flex;
justify-content: center; justify-content: center;
@@ -706,14 +705,14 @@
> .price { > .price {
font-size: 1.8rem; font-size: 1.8rem;
margin-top: 0.4rem; margin-top: 0.4rem;
// opacity: 0.4; opacity: 0.4;
font-weight: 500; font-weight: 500;
} }
} }
> .left { > .left {
> p:nth-child(1) { > p:nth-child(1) {
font-size: 2rem; font-size: 2rem;
// opacity: 0.7; opacity: 0.7;
font-weight: 700; font-weight: 700;
} }
} }
@@ -768,14 +767,24 @@
} }
} }
} }
&.active,&:hover { &.active {
// 40% opacity background: #0ea98233;
background: rgba(231, 235, 255, 0.4); border: 2px solid #0ea982;
// border: 2px solid #0ea982; > .priceBox {
> .left {
> p:nth-child(1) {
opacity: 1;
}
}
> .right {
> .discountsPrice {
opacity: 1;
}
}
}
} }
&.sellWell { &.sellWell {
// border: 2px solid #0ea982; border: 2px solid #0ea982;
} }
} }
> .productItem:last-child { > .productItem:last-child {
@@ -812,8 +821,6 @@
margin: 2rem 0; margin: 2rem 0;
margin-bottom: .5rem; margin-bottom: .5rem;
margin-top: 1rem; margin-top: 1rem;
background: #1B223C;
color: #fff;
} }
> .payMethod_payAffirm_clause { > .payMethod_payAffirm_clause {
text-align: center; text-align: center;

View File

@@ -9,14 +9,14 @@
<div> <div>
<div class="login_form_content" :state="emailStap"> <div class="login_form_content" :state="emailStap">
<div v-show="emailStap === 1"> <div v-show="emailStap === 1">
<div class="login_form_title marign_top30">{{ t('LoginEnterprise.Enterprise') }}</div> <div class="login_form_title marign_top30">Enterprise</div>
<div class="generalModel_state"> <div class="generalModel_state">
<div <div
class="generalModel_state_item" class="generalModel_state_item"
style="width: 100%; margin: 0" style="width: 100%; margin: 0"
> >
<a-select <a-select
:placeholder="t('LoginEnterprise.SelectEnterprise')" placeholder="Select a school"
v-model:value="selectEnterprise" v-model:value="selectEnterprise"
:options="schoolList" :options="schoolList"
@change="schoolListChange" @change="schoolListChange"
@@ -36,21 +36,21 @@
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="login_form_title marign_top30">{{ t('LoginEnterprise.Email') }}</div> <div class="login_form_title marign_top30">Email</div>
<input <input
class="login_form_input" class="login_form_input"
:placeholder="t('LoginEnterprise.EnterEmail')" placeholder="Enter your email address"
v-model="email" v-model="email"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<div>{{ t('LoginEnterprise.Password') }}</div> <div>Password</div>
</div> </div>
<div class="password_input_block"> <div class="password_input_block">
<input <input
class="login_form_input" class="login_form_input"
:type="passwordType" :type="passwordType"
:placeholder="t('LoginEnterprise.EnterPassword')" placeholder="Enter your password"
v-model="password" v-model="password"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
@@ -79,15 +79,15 @@
</div> --> </div> -->
<div class="email_last_step_bottom"> <div class="email_last_step_bottom">
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content">{{ t('LoginEnterprise.EnterCode') }}</div> <div class="sent_email_content">Enter Code</div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="emailNextStepFun()" <span v-show="!time" @click="emailNextStepFun()"
>{{ t('LoginEnterprise.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
<div class="codeEmail">{{ t('LoginEnterprise.SentCodeToEmail') }} <span>{{ email }}</span></div> <div class="codeEmail">Weve sent an code to your email <span>{{ email }}</span></div>
<div class="codeEmailInput"> <div class="codeEmailInput">
<VerificationCodeInput <VerificationCodeInput
:ct="emailCode" :ct="emailCode"
@@ -103,10 +103,10 @@
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span> <span>
{{ t('LoginEnterprise.AgreeTo') }} I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">{{ t('LoginEnterprise.Terms') }}</a>, <a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">{{ t('LoginEnterprise.PrivacyPolicy') }}</a>, <a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
{{ t('LoginEnterprise.AndFees') }} and Fees.
</span> </span>
</label> </label>
</div> </div>
@@ -125,7 +125,7 @@
:state="emailStap" :state="emailStap"
@click="submitPerLogin()" @click="submitPerLogin()"
> >
{{ t('LoginEnterprise.SignIn') }} Sign in
</div> </div>
<!-- <div class="login_text"> <!-- <div class="login_text">
@@ -151,14 +151,14 @@
> >
<!-- <i class="fi fi-br-arrow-left"></i> --> <!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i> <i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">{{ t('LoginEnterprise.RetrievePassword') }}</span> <span class="forget_password_content_title">Retrieve password</span>
</div> </div>
<div v-show="frogetPasswordStep === 1"> <div v-show="frogetPasswordStep === 1">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginEnterprise.Email') }}</div> <div class="forget_passored_form_title">Email</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginEnterprise.EnterEmail')" placeholder="Enter your email"
v-model="forgetPasswordEmail" v-model="forgetPasswordEmail"
@keydown.enter="forgetPasswordNextStepFun()" @keydown.enter="forgetPasswordNextStepFun()"
/> />
@@ -167,20 +167,20 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="forgetPasswordNextStepFun()" @click="forgetPasswordNextStepFun()"
> >
{{ t('LoginEnterprise.NextStep') }} Next step
</div> </div>
</div> </div>
<div v-show="frogetPasswordStep === 2"> <div v-show="frogetPasswordStep === 2">
<div class="forget_verif_code_des">{{ t('LoginEnterprise.VerificationCode') }}</div> <div class="forget_verif_code_des">Verification Code</div>
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content"> <div class="sent_email_content">
{{ t('LoginEnterprise.SentTo') }} {{ forgetPasswordEmail }} Sent to {{ forgetPasswordEmail }}
</div> </div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="forgetPasswordNextStepFun()" <span v-show="!time" @click="forgetPasswordNextStepFun()"
>{{ t('LoginEnterprise.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
@@ -192,7 +192,7 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginEnterprise.Password') }}</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow"> <div v-show="passwordConditionShow" class="conditionShow">
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -205,7 +205,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginEnterprise.AtLeast8Chars') }}</div> <div class="text">At least 8 characters long</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -218,7 +218,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginEnterprise.MustContainSpecial') }}</div> <div class="text">Must contain special characters</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -232,13 +232,13 @@
></i> ></i>
</div> </div>
<div class="text"> <div class="text">
{{ t('LoginEnterprise.MixUpperLowerNumbers') }} Mix of uppercase, lowercase and numbers
</div> </div>
</div> </div>
</div> </div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginEnterprise.EnterNewPassword')" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)" @focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)" @blur="() => (passwordConditionShow = false)"
@@ -250,7 +250,7 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="submitResetPassword()" @click="submitResetPassword()"
> >
{{ t('LoginEnterprise.Submit') }} Submit
</div> </div>
</div> </div>
</div> </div>
@@ -263,7 +263,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, onMounted, reactive, toRefs, inject } from "vue"; import { defineComponent, ref, onMounted, reactive, toRefs } from "vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { isEmail } from "@/tool/util"; import { isEmail } from "@/tool/util";
import { setCookie, WriteCookie } from "@/tool/cookie"; import { setCookie, WriteCookie } from "@/tool/cookie";
@@ -273,6 +273,7 @@ import googleLogin from "@/component/LoginPage/googleLogin.vue";
import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue"; import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue";
import phoneLogin from "@/component/LoginPage/phoneLogin.vue"; import phoneLogin from "@/component/LoginPage/phoneLogin.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import { setLang } from "@/tool/guide"; import { setLang } from "@/tool/guide";
import md5 from "md5"; import md5 from "md5";
export default defineComponent({ export default defineComponent({
@@ -284,8 +285,7 @@ export default defineComponent({
}, },
setup() { setup() {
let timer: any = 0; let timer: any = 0;
// 从父组件注入 i18n const { locale } = useI18n();
const i18n = inject('i18n') as { t: any, locale: any };
const store = useStore(); const store = useStore();
let loadingShow = ref(false); let loadingShow = ref(false);
const data = reactive({ const data = reactive({
@@ -320,8 +320,7 @@ export default defineComponent({
...toRefs(data), ...toRefs(data),
store, store,
timer, timer,
locale: i18n?.locale, locale,
t: i18n?.t,
loadingShow, loadingShow,
schoolListChange, schoolListChange,
filterOption, filterOption,
@@ -384,7 +383,7 @@ export default defineComponent({
//邮箱登录的下一步 //邮箱登录的下一步
emailNextStepFun() { emailNextStepFun() {
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.t('LoginEnterprise.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -414,7 +413,7 @@ export default defineComponent({
//忘记密码的下一步 //忘记密码的下一步
forgetPasswordNextStepFun() { forgetPasswordNextStepFun() {
if (!isEmail(this.forgetPasswordEmail)) { if (!isEmail(this.forgetPasswordEmail)) {
message.info(this.t('LoginEnterprise.IncorrectEmail')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -469,26 +468,26 @@ export default defineComponent({
return; return;
} else { } else {
if (!this.password) { if (!this.password) {
message.info(this.t('LoginEnterprise.PleaseEnterYourAccountNumberOrPassword')); message.info("Please enter your account number or password");
return; return;
} }
//输入邮箱 //输入邮箱
if (!this.email) { if (!this.email) {
message.info(this.t('LoginEnterprise.NeedEmail')); message.info("Please enter your email address");
return; return;
} }
if (!this.selectEnterprise) { if (!this.selectEnterprise) {
message.info(this.t('LoginEnterprise.SelectEnterprise')); message.info("Please select a school");
return; return;
} }
//判断邮箱格式是否正确 //判断邮箱格式是否正确
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.t('LoginEnterprise.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
//判断是否同意隐私政策 //判断是否同意隐私政策
if (!this.checked) { if (!this.checked) {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
return; return;
} }
let data = { let data = {
@@ -548,7 +547,7 @@ export default defineComponent({
}); });
}, },
isCheckAgreement() { isCheckAgreement() {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
}, },
//谷歌登录 //谷歌登录
@@ -585,7 +584,7 @@ export default defineComponent({
if (window.innerWidth < 768) { if (window.innerWidth < 768) {
message.info( message.info(
this.t('Login.Device') "If you need to design, please log in using an iPad or computer."
); );
this.turnToHomePage("/Square"); this.turnToHomePage("/Square");
} else { } else {
@@ -614,7 +613,7 @@ export default defineComponent({
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) { if (this.isPassword(this.newPassword) < 3) {
message.info(this.t('Login.PasswordConditions')); message.info("You must satisfy ALL password conditions to register.");
return; return;
} }
let data = { let data = {

View File

@@ -14,21 +14,21 @@
v-model="username" v-model="username"
/> --> /> -->
<div v-show="emailStap === 1"> <div v-show="emailStap === 1">
<div class="login_form_title marign_top30">{{ t('LoginPersonal.Email') }}</div> <div class="login_form_title marign_top30">Email</div>
<input <input
class="login_form_input" class="login_form_input"
:placeholder="t('LoginPersonal.EnterEmail')" placeholder="Enter your email address"
v-model="email" v-model="email"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<div>{{ t('LoginPersonal.Password') }}</div> <div>Password</div>
</div> </div>
<div class="password_input_block"> <div class="password_input_block">
<input <input
class="login_form_input" class="login_form_input"
:type="passwordType" :type="passwordType"
:placeholder="t('LoginPersonal.EnterPassword')" placeholder="Enter your password"
v-model="password" v-model="password"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
@@ -57,15 +57,15 @@
</div> --> </div> -->
<div class="email_last_step_bottom"> <div class="email_last_step_bottom">
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content">{{ t('LoginPersonal.EnterCode') }}</div> <div class="sent_email_content">Enter Code</div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="emailNextStepFun()" <span v-show="!time" @click="emailNextStepFun()"
>{{ t('LoginPersonal.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
<div class="codeEmail">{{ t('LoginPersonal.SentCodeToEmail') }} <span>{{ email }}</span></div> <div class="codeEmail">Weve sent an code to your email <span>{{ email }}</span></div>
<div class="codeEmailInput"> <div class="codeEmailInput">
<VerificationCodeInput <VerificationCodeInput
ref="verificationCodeInputDom" ref="verificationCodeInputDom"
@@ -80,17 +80,17 @@
<div class="login_text" v-show="emailStap !== 2"> <div class="login_text" v-show="emailStap !== 2">
<div class="forget_password_text" @click="changeIsLogin(2)"> <div class="forget_password_text" @click="changeIsLogin(2)">
{{ t('LoginPersonal.ForgotPassword') }} Forgot your password
</div> </div>
</div> </div>
<div class="login_form_title marign_top40"> <div class="login_form_title marign_top40">
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span> <span>
{{ t('LoginPersonal.AgreeTo') }} I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">{{ t('LoginPersonal.Terms') }}</a>, <a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">{{ t('LoginPersonal.PrivacyPolicy') }}</a>, <a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
{{ t('LoginPersonal.AndFees') }} and Fees.
</span> </span>
</label> </label>
</div> </div>
@@ -102,12 +102,12 @@
@click="submitPerLogin()" @click="submitPerLogin()"
@mousedown="loginBtnMousedown" @mousedown="loginBtnMousedown"
> >
{{ t('LoginPersonal.SignIn') }} Sign in
</div> </div>
<div class="NewAccount" @click="newAccount()">{{ t('LoginPersonal.CreateNewAccount') }}</div> <div class="NewAccount" @click="newAccount()">Create New Account</div>
<div class="segmentation"> <div class="segmentation">
<div class="wire"></div> <div class="wire"></div>
<div class="text">{{ t('LoginPersonal.Or') }}</div> <div class="text">or</div>
<div class="wire"></div> <div class="wire"></div>
</div> </div>
<div class="thirdPartyLogin marign_top30"> <div class="thirdPartyLogin marign_top30">
@@ -147,14 +147,14 @@
> --> > -->
<!-- <i class="fi fi-br-arrow-left"></i> --> <!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i> <i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">{{ t('LoginPersonal.RetrievePassword') }}</span> <span class="forget_password_content_title">Retrieve password</span>
</div> </div>
<div v-show="frogetPasswordStep === 1"> <div v-show="frogetPasswordStep === 1">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginPersonal.Email') }}</div> <div class="forget_passored_form_title">Email</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginPersonal.EnterEmail')" placeholder="Enter your email"
v-model="forgetPasswordEmail" v-model="forgetPasswordEmail"
@keydown.enter="forgetPasswordNextStepFun()" @keydown.enter="forgetPasswordNextStepFun()"
/> />
@@ -163,20 +163,20 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="forgetPasswordNextStepFun()" @click="forgetPasswordNextStepFun()"
> >
{{ t('LoginPersonal.NextStep') }} Next step
</div> </div>
</div> </div>
<div v-show="frogetPasswordStep === 2"> <div v-show="frogetPasswordStep === 2">
<div class="forget_verif_code_des">{{ t('LoginPersonal.VerificationCode') }}</div> <div class="forget_verif_code_des">Verification Code</div>
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content"> <div class="sent_email_content">
{{ t('LoginPersonal.SentTo') }} {{ forgetPasswordEmail }} Sent to {{ forgetPasswordEmail }}
</div> </div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="forgetPasswordNextStepFun()" <span v-show="!time" @click="forgetPasswordNextStepFun()"
>{{ t('LoginPersonal.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
@@ -188,7 +188,7 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginPersonal.Password') }}</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow"> <div v-show="passwordConditionShow" class="conditionShow">
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -201,7 +201,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginPersonal.AtLeast8Chars') }}</div> <div class="text">At least 8 characters long</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -214,7 +214,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginPersonal.MustContainSpecial') }}</div> <div class="text">Must contain special characters</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -228,13 +228,13 @@
></i> ></i>
</div> </div>
<div class="text"> <div class="text">
{{ t('LoginPersonal.MixUpperLowerNumbers') }} Mix of uppercase, lowercase and numbers
</div> </div>
</div> </div>
</div> </div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginPersonal.EnterNewPassword')" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)" @focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)" @blur="() => (passwordConditionShow = false)"
@@ -246,7 +246,7 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="submitResetPassword()" @click="submitResetPassword()"
> >
{{ t('LoginPersonal.Submit') }} Submit
</div> </div>
</div> </div>
</div> </div>
@@ -290,7 +290,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, onMounted, inject } from "vue"; import { defineComponent, ref, onMounted } from "vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { isEmail } from "@/tool/util"; import { isEmail } from "@/tool/util";
import { setCookie, WriteCookie } from "@/tool/cookie"; import { setCookie, WriteCookie } from "@/tool/cookie";
@@ -300,9 +300,11 @@ import googleLogin from "@/component/LoginPage/googleLogin.vue";
import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue"; import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue";
import phoneLogin from "@/component/LoginPage/phoneLogin.vue"; import phoneLogin from "@/component/LoginPage/phoneLogin.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useRouter } from "vue-router"; import { useI18n } from "vue-i18n";
import { setLang } from "@/tool/guide"; import { setLang } from "@/tool/guide";
import md5 from "md5"; import md5 from "md5";
import router from "@/router";
import { pass } from "three/tsl";
export default defineComponent({ export default defineComponent({
components: { components: {
VerificationCodeInput, VerificationCodeInput,
@@ -314,18 +316,17 @@ export default defineComponent({
let timer: any = 0; let timer: any = 0;
let router = useRouter() let router = useRouter()
// 从父组件注入 i18n const { locale } = useI18n();
const i18n = inject('i18n') as { t: any, locale: any };
const store = useStore(); const store = useStore();
let loadingShow = ref(false); let loadingShow = ref(false);
const newAccount = ()=>{ const newAccount = ()=>{
// router.spuh({path:'/register'})
router.push({path:'/register'}) router.push({path:'/register'})
} }
return { return {
store, store,
timer, timer,
locale: i18n?.locale, locale,
t: i18n?.t,
loadingShow, loadingShow,
newAccount, newAccount,
}; };
@@ -388,7 +389,7 @@ export default defineComponent({
//邮箱登录的下一步 //邮箱登录的下一步
emailNextStepFun() { emailNextStepFun() {
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.$t('LoginPersonal.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -418,7 +419,7 @@ export default defineComponent({
//忘记密码的下一步 //忘记密码的下一步
forgetPasswordNextStepFun() { forgetPasswordNextStepFun() {
if (!isEmail(this.forgetPasswordEmail)) { if (!isEmail(this.forgetPasswordEmail)) {
message.info(this.t('LoginPersonal.IncorrectEmail')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -472,7 +473,7 @@ export default defineComponent({
let verificationCodeInputDom:any = this.$refs.verificationCodeInputDom let verificationCodeInputDom:any = this.$refs.verificationCodeInputDom
let code = verificationCodeInputDom.getCtData.map(item => item).join(''); let code = verificationCodeInputDom.getCtData.map(item => item).join('');
if(code.length !== this.emailCode.length){ if(code.length !== this.emailCode.length){
message.info(this.t('LoginPersonal.CompleteVerificationCode')); message.info("Please enter the complete verification code.");
}else{ }else{
this.submitEmailLogin(code) this.submitEmailLogin(code)
} }
@@ -481,22 +482,22 @@ export default defineComponent({
return; return;
} else { } else {
if (!this.password) { if (!this.password) {
message.info(this.t('LoginPersonal.PleaseEnterYourAccountNumberOrPassword')); message.info("Please enter your account number or password");
return; return;
} }
//输入邮箱 //输入邮箱
if (!this.email) { if (!this.email) {
message.info(this.t('LoginPersonal.NeedEmail')); message.info("Please enter your email address");
return; return;
} }
//判断邮箱格式是否正确 //判断邮箱格式是否正确
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.t('LoginPersonal.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
//判断是否同意隐私政策 //判断是否同意隐私政策
if (!this.checked) { if (!this.checked) {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
return; return;
} }
let data = { let data = {
@@ -564,7 +565,7 @@ export default defineComponent({
},1000) },1000)
}, },
isCheckAgreement() { isCheckAgreement() {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
}, },
//谷歌登录 //谷歌登录
googelLogin(value: any) { googelLogin(value: any) {
@@ -600,7 +601,7 @@ export default defineComponent({
if (window.innerWidth < 768) { if (window.innerWidth < 768) {
message.info( message.info(
this.t('Login.Device') "If you need to design, please log in using an iPad or computer."
); );
this.turnToHomePage("/Square"); this.turnToHomePage("/Square");
} else { } else {
@@ -629,7 +630,7 @@ export default defineComponent({
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) { if (this.isPassword(this.newPassword) < 3) {
message.info(this.t('Login.PasswordConditions')); message.info("You must satisfy ALL password conditions to register.");
return; return;
} }
let data = { let data = {

View File

@@ -9,14 +9,14 @@
<div> <div>
<div class="login_form_content" :state="emailStap"> <div class="login_form_content" :state="emailStap">
<div v-show="emailStap === 1"> <div v-show="emailStap === 1">
<div class="login_form_title marign_top30">{{ t('LoginSchool.School') }}</div> <div class="login_form_title marign_top30">School</div>
<div class="generalModel_state"> <div class="generalModel_state">
<div <div
class="generalModel_state_item" class="generalModel_state_item"
style="width: 100%; margin: 0" style="width: 100%; margin: 0"
> >
<a-select <a-select
:placeholder="t('LoginSchool.SelectSchool')" placeholder="Select a school"
v-model:value="selectSchool" v-model:value="selectSchool"
:options="schoolList" :options="schoolList"
@change="schoolListChange" @change="schoolListChange"
@@ -36,21 +36,21 @@
</a-select> </a-select>
</div> </div>
</div> </div>
<div class="login_form_title marign_top30">{{ t('LoginSchool.Email') }}</div> <div class="login_form_title marign_top30">Email</div>
<input <input
class="login_form_input" class="login_form_input"
:placeholder="t('LoginSchool.EnterEmail')" placeholder="Enter your email address"
v-model="email" v-model="email"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<div>{{ t('LoginSchool.Password') }}</div> <div>Password</div>
</div> </div>
<div class="password_input_block"> <div class="password_input_block">
<input <input
class="login_form_input" class="login_form_input"
:type="passwordType" :type="passwordType"
:placeholder="t('LoginSchool.EnterPassword')" placeholder="Enter your password"
v-model="password" v-model="password"
@keydown.enter="submitPerLogin()" @keydown.enter="submitPerLogin()"
/> />
@@ -79,15 +79,15 @@
</div> --> </div> -->
<div class="email_last_step_bottom"> <div class="email_last_step_bottom">
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content">{{ t('LoginSchool.EnterCode') }}</div> <div class="sent_email_content">Enter Code</div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="emailNextStepFun()" <span v-show="!time" @click="emailNextStepFun()"
>{{ t('LoginSchool.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
<div class="codeEmail">{{ t('LoginSchool.SentCodeToEmail') }} <span>{{ email }}</span></div> <div class="codeEmail">Weve sent an code to your email <span>{{ email }}</span></div>
<div class="codeEmailInput"> <div class="codeEmailInput">
<VerificationCodeInput <VerificationCodeInput
ref="verificationCodeInputDom" ref="verificationCodeInputDom"
@@ -101,17 +101,17 @@
</div> </div>
<div class="login_text" v-show="emailStap !== 2"> <div class="login_text" v-show="emailStap !== 2">
<div class="forget_password_text" @click="changeIsLogin(2)"> <div class="forget_password_text" @click="changeIsLogin(2)">
{{ t('LoginSchool.ForgotPassword') }} Forgot your password
</div> </div>
</div> </div>
<div class="login_form_title marign_top30"> <div class="login_form_title marign_top30">
<label :class="{ active: emailStap == 2 }"> <label :class="{ active: emailStap == 2 }">
<input :state="emailStap" type="checkbox" v-model="checked" /> <input :state="emailStap" type="checkbox" v-model="checked" />
<span> <span>
{{ t('LoginSchool.AgreeTo') }} I agree to the
<a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">{{ t('LoginSchool.Terms') }}</a>, <a href="https://code-create.com.hk/aida-terms-and-conditions/" style="text-decoration: underline;color: #000;">Terms</a>,
<a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">{{ t('LoginSchool.PrivacyPolicy') }}</a>, <a href="https://aida.com.hk/privacy-policy.html" target="_blank" style="text-decoration: underline;color: #000;">Privacy Policy</a>,
{{ t('LoginSchool.AndFees') }} and Fees.
</span> </span>
</label> </label>
</div> </div>
@@ -132,7 +132,7 @@
@click="submitPerLogin()" @click="submitPerLogin()"
@mousedown="loginBtnMousedown" @mousedown="loginBtnMousedown"
> >
{{ t('LoginSchool.SignIn') }} Sign in
</div> </div>
<!-- <div class="login_text"> <!-- <div class="login_text">
@@ -158,14 +158,14 @@
> >
<!-- <i class="fi fi-br-arrow-left"></i> --> <!-- <i class="fi fi-br-arrow-left"></i> -->
<i class="fi fi-br-angle-left"></i> <i class="fi fi-br-angle-left"></i>
<span class="forget_password_content_title">{{ t('LoginSchool.RetrievePassword') }}</span> <span class="forget_password_content_title">Retrieve password</span>
</div> </div>
<div v-show="frogetPasswordStep === 1"> <div v-show="frogetPasswordStep === 1">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginSchool.Email') }}</div> <div class="forget_passored_form_title">Email</div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginSchool.EnterEmail')" placeholder="Enter your email"
v-model="forgetPasswordEmail" v-model="forgetPasswordEmail"
@keydown.enter="forgetPasswordNextStepFun()" @keydown.enter="forgetPasswordNextStepFun()"
/> />
@@ -174,20 +174,20 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="forgetPasswordNextStepFun()" @click="forgetPasswordNextStepFun()"
> >
{{ t('LoginSchool.NextStep') }} Next step
</div> </div>
</div> </div>
<div v-show="frogetPasswordStep === 2"> <div v-show="frogetPasswordStep === 2">
<div class="forget_verif_code_des">{{ t('LoginSchool.VerificationCode') }}</div> <div class="forget_verif_code_des">Verification Code</div>
<div class="email_last_step_des"> <div class="email_last_step_des">
<div class="sent_email_content"> <div class="sent_email_content">
{{ t('LoginSchool.SentTo') }} {{ forgetPasswordEmail }} Sent to {{ forgetPasswordEmail }}
</div> </div>
<div class="tip_content"> <div class="tip_content">
<span v-show="time">{{ time }}s</span> <span v-show="time">{{ time }}s</span>
<span v-show="!time" @click="forgetPasswordNextStepFun()" <span v-show="!time" @click="forgetPasswordNextStepFun()"
>{{ t('LoginSchool.Resend') }}</span >Resend</span
> >
</div> </div>
</div> </div>
@@ -199,7 +199,7 @@
<div v-show="frogetPasswordStep === 3"> <div v-show="frogetPasswordStep === 3">
<div class="forget_passored_form_content"> <div class="forget_passored_form_content">
<div class="forget_passored_form_title">{{ t('LoginSchool.Password') }}</div> <div class="forget_passored_form_title">Password</div>
<div v-show="passwordConditionShow" class="conditionShow"> <div v-show="passwordConditionShow" class="conditionShow">
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -212,7 +212,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginSchool.AtLeast8Chars') }}</div> <div class="text">At least 8 characters long</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -225,7 +225,7 @@
class="fi fi-br-check" class="fi fi-br-check"
></i> ></i>
</div> </div>
<div class="text">{{ t('LoginSchool.MustContainSpecial') }}</div> <div class="text">Must contain special characters</div>
</div> </div>
<div class="item"> <div class="item">
<div class="icon"> <div class="icon">
@@ -239,13 +239,13 @@
></i> ></i>
</div> </div>
<div class="text"> <div class="text">
{{ t('LoginSchool.MixUpperLowerNumbers') }} Mix of uppercase, lowercase and numbers
</div> </div>
</div> </div>
</div> </div>
<input <input
class="forget_passored_form_input" class="forget_passored_form_input"
:placeholder="t('LoginSchool.EnterNewPassword')" placeholder="Enter a new password"
v-model="newPassword" v-model="newPassword"
@focus="() => (passwordConditionShow = true)" @focus="() => (passwordConditionShow = true)"
@blur="() => (passwordConditionShow = false)" @blur="() => (passwordConditionShow = false)"
@@ -257,7 +257,7 @@
class="forget_submit_button marign_top40" class="forget_submit_button marign_top40"
@click="submitResetPassword()" @click="submitResetPassword()"
> >
{{ t('LoginSchool.Submit') }} Submit
</div> </div>
</div> </div>
</div> </div>
@@ -270,7 +270,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, onMounted, reactive, toRefs, inject } from "vue"; import { defineComponent, ref, onMounted, reactive, toRefs } from "vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { isEmail } from "@/tool/util"; import { isEmail } from "@/tool/util";
import { setCookie, WriteCookie } from "@/tool/cookie"; import { setCookie, WriteCookie } from "@/tool/cookie";
@@ -280,6 +280,7 @@ import googleLogin from "@/component/LoginPage/googleLogin.vue";
import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue"; import weiXinLogin from "@/component/LoginPage/weiXinLogin.vue";
import phoneLogin from "@/component/LoginPage/phoneLogin.vue"; import phoneLogin from "@/component/LoginPage/phoneLogin.vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import { setLang } from "@/tool/guide"; import { setLang } from "@/tool/guide";
import md5 from "md5"; import md5 from "md5";
export default defineComponent({ export default defineComponent({
@@ -291,8 +292,7 @@ export default defineComponent({
}, },
setup() { setup() {
let timer: any = 0; let timer: any = 0;
// 从父组件注入 i18n const { locale } = useI18n();
const i18n = inject('i18n') as { t: any, locale: any };
const store = useStore(); const store = useStore();
let loadingShow = ref(false); let loadingShow = ref(false);
const data = reactive({ const data = reactive({
@@ -331,8 +331,7 @@ export default defineComponent({
...toRefs(data), ...toRefs(data),
store, store,
timer, timer,
locale: i18n?.locale, locale,
t: i18n?.t,
loadingShow, loadingShow,
schoolListChange, schoolListChange,
filterOption, filterOption,
@@ -397,7 +396,7 @@ export default defineComponent({
//邮箱登录的下一步 //邮箱登录的下一步
emailNextStepFun() { emailNextStepFun() {
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.t('LoginSchool.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -427,7 +426,7 @@ export default defineComponent({
//忘记密码的下一步 //忘记密码的下一步
forgetPasswordNextStepFun() { forgetPasswordNextStepFun() {
if (!isEmail(this.forgetPasswordEmail)) { if (!isEmail(this.forgetPasswordEmail)) {
message.info(this.t('LoginSchool.IncorrectEmail')); message.info("The email format is incorrect");
return; return;
} }
let data = { let data = {
@@ -483,7 +482,7 @@ export default defineComponent({
let code = verificationCodeInputDom.getCtData.map(item => item).join(''); let code = verificationCodeInputDom.getCtData.map(item => item).join('');
console.log(code) console.log(code)
if(code.length !== this.emailCode.length){ if(code.length !== this.emailCode.length){
message.info(this.t('LoginSchool.CompleteVerificationCode')); message.info("Please enter the complete verification code.");
}else{ }else{
this.submitEmailLogin(code) this.submitEmailLogin(code)
} }
@@ -492,26 +491,26 @@ export default defineComponent({
return; return;
} else { } else {
if (!this.password) { if (!this.password) {
message.info(this.t('LoginSchool.PleaseEnterYourAccountNumberOrPassword')); message.info("Please enter your account number or password");
return; return;
} }
//输入邮箱 //输入邮箱
if (!this.email) { if (!this.email) {
message.info(this.t('LoginSchool.NeedEmail')); message.info("Please enter your email address");
return; return;
} }
if (!this.selectSchool) { if (!this.selectSchool) {
message.info(this.t('LoginSchool.SelectSchool')); message.info("Please select a school");
return; return;
} }
//判断邮箱格式是否正确 //判断邮箱格式是否正确
if (!isEmail(this.email)) { if (!isEmail(this.email)) {
message.info(this.t('LoginSchool.IncorrectEmailFormat')); message.info("The email format is incorrect");
return; return;
} }
//判断是否同意隐私政策 //判断是否同意隐私政策
if (!this.checked) { if (!this.checked) {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
return; return;
} }
let data = { let data = {
@@ -577,7 +576,7 @@ export default defineComponent({
},1000) },1000)
}, },
isCheckAgreement() { isCheckAgreement() {
message.info(this.t('Login.AgreePolicies')); message.info("Agree to all terms, privacy fees and policies");
}, },
//谷歌登录 //谷歌登录
googelLogin(value: any) { googelLogin(value: any) {
@@ -613,7 +612,7 @@ export default defineComponent({
if (window.innerWidth < 768) { if (window.innerWidth < 768) {
message.info( message.info(
this.t('Login.Device') "If you need to design, please log in using an iPad or computer."
); );
this.turnToHomePage("/Square"); this.turnToHomePage("/Square");
} else { } else {
@@ -642,7 +641,7 @@ export default defineComponent({
//修改密码提交 //修改密码提交
submitResetPassword() { submitResetPassword() {
if (this.isPassword(this.newPassword) < 3) { if (this.isPassword(this.newPassword) < 3) {
message.info(this.t('Login.PasswordConditions')); message.info("You must satisfy ALL password conditions to register.");
return; return;
} }
let data = { let data = {

View File

@@ -62,8 +62,10 @@
}, },
methods: { methods: {
onInput(val, index) { onInput(val, index) {
console.log("input", val, index);
clearTimeout(this.timeout); clearTimeout(this.timeout);
this.timeout = setTimeout(() => { this.timeout = setTimeout(() => {
console.log("input=>", val, index);
// val = val.replace(/[^0-9]/g, ''); // val = val.replace(/[^0-9]/g, '');
val = String(val).replace(/\D/g, ""); val = String(val).replace(/\D/g, "");
this.getCtData[index] = val; this.getCtData[index] = val;

View File

@@ -276,6 +276,7 @@ import { Modal,message } from "ant-design-vue";
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import fullScreenImg from '@/component/HomePage/fullScreenImg.vue' import fullScreenImg from '@/component/HomePage/fullScreenImg.vue'
import { debounce } from 'lodash-es'
export default defineComponent({ export default defineComponent({
components:{fullScreenImg}, components:{fullScreenImg},
@@ -437,35 +438,25 @@ export default defineComponent({
}) })
} }
let flag = true let setChoose = debounce(async()=>{
let setChoose = async()=>{ if(userDetail.value.systemList.indexOf(1) == -1){
if(!flag) return return message.info(t('newScaleImage.jsContent1'))
flag = false }
try {
if(userDetail.value.systemList.indexOf(1) == -1){
message.info(t('newScaleImage.jsContent1'))
return
}
const targetDate = new Date('2025-09-01T00:00:00'); const targetDate = new Date('2025-09-01T00:00:00');
// 解析输入日期字符串 // 解析输入日期字符串
const inputDate = new Date(imgData.scaleImageData.createDate); const inputDate = new Date(imgData.scaleImageData.createDate);
if(inputDate < targetDate){ if(inputDate < targetDate){
message.info(t('newScaleImage.jsContent2')) return message.info(t('newScaleImage.jsContent2'))
return }
} if(imgData.scaleImageData.openSource == 0){
if(imgData.scaleImageData.openSource == 0){ return message.info(t('newScaleImage.jsContent2'))
message.info(t('newScaleImage.jsContent2')) }
return let id = await getWorks(imgData.scaleImageData.id)
} router.push(`/home/history/${id}`)
let id = await getWorks(imgData.scaleImageData.id) // router.push({name:'home',params: {id:imgData.scaleImageData.id,type:'Works'}})
await router.push(`/home/history/${id}`) store.commit('setChooseIsDesign',false)
store.commit('setChooseIsDesign',false) },300)
} finally {
// 函数执行完成后恢复为 true确保无论成功还是失败都能再次点击
flag = true
}
}
let setCommentReply = (value:any,str:any)=>{ let setCommentReply = (value:any,str:any)=>{
imgData.commentReply.leve1Id = value.id imgData.commentReply.leve1Id = value.id

View File

@@ -711,9 +711,10 @@ export default defineComponent({
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%,-50%); transform: translate(-50%,-50%);
// float: left; float: left;
// user-select:none; object-fit: contain;
// -webkit-user-drag: none; user-select:none;
-webkit-user-drag: none;
} }
} }
.wh1{ .wh1{

View File

@@ -145,7 +145,7 @@
</div> </div>
<!-- 取消请求 --> <!-- 取消请求 -->
<scaleImage ref="scaleImage"></scaleImage> <scaleImage ref="scaleImage"></scaleImage>
<Cropper ref="Cropper" @handleCropperSuccess="handleCropperSuccess" @closeCropper="deletUploadFile()" :cropperFileData="cropperFileData" :isRound="false" :isUpload="isUpload"></Cropper> <Cropper ref="Cropper" @handleCropperSuccess="handleCropperSuccess" @closeCropper="deletUploadFile()" :cropperFileData="cropperFileData" :isUpload="isUpload"></Cropper>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">

View File

@@ -38,7 +38,7 @@
</div> </div>
<div class="style marginBottom" v-if="show.style"> <div class="style marginBottom" v-if="show.style">
<div class="text">{{$t('Habit.Style')}}</div> <div class="text">{{$t('Habit.Style')}}</div>
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:$t('Header.All') }}</div> <div class="center">{{ selectObject?.styleName?selectObject?.styleName:'All' }}</div>
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div> <div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
</div> </div>
<div class="style brand marginBottom"> <div class="style brand marginBottom">

View File

@@ -1250,15 +1250,13 @@ export default defineComponent({
> .item { > .item {
margin-right: 1rem; margin-right: 1rem;
// width: calc(100% / 2 - 0.5rem); width: calc(100% / 2 - 0.5rem);
// height: 25rem;
width: 12.7rem;
height: 17.8rem;
cursor: pointer; cursor: pointer;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
height: 25rem;
position: relative; position: relative;
// &.active{ // &.active{
// border: 2px solid; // border: 2px solid;
@@ -1534,8 +1532,6 @@ export default defineComponent({
.ant-upload-select-picture-card { .ant-upload-select-picture-card {
width: 12.7rem; width: 12.7rem;
height: 17.8rem; height: 17.8rem;
border-width: 1px;
background: #fff;
} }
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -453,8 +453,7 @@ export default {
jsContent4: '图片必须小于5MB', jsContent4: '图片必须小于5MB',
jsContent5: '图片已经上传是否继续上传', jsContent5: '图片已经上传是否继续上传',
jsContent6: '输入的内容超过允许输入的最大长度', jsContent6: '输入的内容超过允许输入的最大长度',
jsContent7: '请输入内容~', jsContent7: '请输入内容~'
jsContent8: '请输入项目名字~'
}, },
ModelPlacement: { ModelPlacement: {
Registration: '新增模特', Registration: '新增模特',
@@ -1531,114 +1530,5 @@ export default {
ChatRobot: '对话生成', ChatRobot: '对话生成',
Yes: '是', Yes: '是',
No: '否' No: '否'
},
Login: {
Login: '登录',
SignUp: '注册',
ForgotPassword: '忘记密码',
Welcome: '欢迎来到',
AiDA: 'AiDA',
Slogan:
'AiDA是一个业界首创的平台致力于赋能时装设计师融汇灵感人机协同共创原创设计。',
LoginMethod: '使用以下方式登录:',
Individual: '个人账号',
Academic: '学术账号',
LogoOnToAiDA: '登录到AiDA 3.1',
Infomation: '请填写以下信息',
Device: '请使用iPad或电脑登录',
AgreePolicies: '请勾选条款、隐私政策和费用',
PasswordConditions: '您必须满足所有密码条件才能注册'
},
LoginPersonal: {
Email: '邮箱',
Password: '密码',
EnterEmail: '请输入您的邮箱地址',
EnterPassword: '请输入您的密码',
EnterCode: '输入验证码',
Resend: '重发',
SentCodeToEmail: '我们已向您的邮箱发送验证码',
ForgotPassword: '忘记密码',
AgreeTo: '我同意',
Terms: '条款',
PrivacyPolicy: '隐私政策',
AndFees: '和费用',
SignIn: '登录',
CreateNewAccount: '创建新账号',
Or: '或',
RetrievePassword: '找回密码',
NextStep: '下一步',
VerificationCode: '验证码',
SentTo: '发送至',
Submit: '提交',
AtLeast8Chars: '至少8个字符',
MustContainSpecial: '必须包含特殊字符',
MixUpperLowerNumbers: '大小写字母和数字的组合',
EnterNewPassword: '请输入新密码',
NeedEmail: '请输入邮箱',
IncorrectEmail: '请输入正确的邮箱地址',
IncorrectEmailFormat: '请输入正确的邮箱格式',
CompleteVerificationCode: '请输入完整的验证码',
PleaseEnterYourAccountNumberOrPassword: '请输入您的账号或密码'
},
LoginSchool: {
School: '学校',
SelectSchool: '请选择学校',
Email: '邮箱',
Password: '密码',
EnterEmail: '请输入您的邮箱地址',
EnterPassword: '请输入您的密码',
EnterCode: '输入验证码',
Resend: '重发',
SentCodeToEmail: '我们已向您的邮箱发送验证码',
ForgotPassword: '忘记密码',
AgreeTo: '我同意',
Terms: '条款',
PrivacyPolicy: '隐私政策',
AndFees: '和费用',
SignIn: '登录',
RetrievePassword: '找回密码',
NextStep: '下一步',
VerificationCode: '验证码',
SentTo: '发送至',
Submit: '提交',
AtLeast8Chars: '至少8个字符',
MustContainSpecial: '必须包含特殊字符',
MixUpperLowerNumbers: '大小写字母和数字的组合',
EnterNewPassword: '请输入新密码',
NeedEmail: '请输入邮箱',
IncorrectEmail: '请输入正确的邮箱地址',
IncorrectEmailFormat: '请输入正确的邮箱格式',
CompleteVerificationCode: '请输入完整的验证码',
PleaseEnterYourAccountNumberOrPassword: '请输入您的账号或密码'
},
LoginEnterprise: {
Enterprise: '企业',
SelectEnterprise: '请选择企业',
Email: '邮箱',
Password: '密码',
EnterEmail: '请输入您的邮箱地址',
EnterPassword: '请输入您的密码',
EnterCode: '输入验证码',
Resend: '重发',
SentCodeToEmail: '我们已向您的邮箱发送验证码',
AgreeTo: '我同意',
Terms: '条款',
PrivacyPolicy: '隐私政策',
AndFees: '和费用',
SignIn: '登录',
RetrievePassword: '找回密码',
NextStep: '下一步',
VerificationCode: '验证码',
SentTo: '发送至',
Submit: '提交',
AtLeast8Chars: '至少8个字符',
MustContainSpecial: '必须包含特殊字符',
MixUpperLowerNumbers: '大小写字母和数字的组合',
EnterNewPassword: '请输入新密码',
NeedEmail: '请输入邮箱',
IncorrectEmail: '请输入正确的邮箱地址',
IncorrectEmailFormat: '请输入正确的邮箱格式',
CompleteVerificationCode: '请输入完整的验证码',
PleaseEnterYourAccountNumberOrPassword: '请输入您的账号或密码'
} }
} }

View File

@@ -107,8 +107,7 @@ export default {
FillBack: 'Fill & Border', FillBack: 'Fill & Border',
Layer: 'Layer', Layer: 'Layer',
More: 'Adjustments', More: 'Adjustments',
insufficient: insufficient: 'Your points balance is insufficient, if you need to use this feature, please click the top left corner to recharge',
'Your points balance is insufficient, if you need to use this feature, please click the top left corner to recharge',
HDExport: 'UpScale', HDExport: 'UpScale',
Save: 'Save', Save: 'Save',
Share: 'Share', Share: 'Share',
@@ -131,13 +130,11 @@ export default {
Copy: 'Copy', Copy: 'Copy',
Paste: 'Paste', Paste: 'Paste',
UploadOpenimage: 'Upload/Open image', UploadOpenimage: 'Upload/Open image',
jsContent1: jsContent1: "Have you saved your canvas content? If not, please click 'Save' before closing.",
"Have you saved your canvas content? If not, please click 'Save' before closing.",
jsContent2: 'We only provide super-resolution capabilities for printboard images.', jsContent2: 'We only provide super-resolution capabilities for printboard images.',
jsContent3: 'Your points are less than one SR', jsContent3: 'Your points are less than one SR',
jsContent4: 'Your points balance is insufficient', jsContent4: 'Your points balance is insufficient',
jsContent5: jsContent5: 'After super-resolution enhancement, the {str} th image you selected has a resolution exceeding 2048, Please choose a lower magnification level.',
'After super-resolution enhancement, the {str} th image you selected has a resolution exceeding 2048, Please choose a lower magnification level.',
jsContent6: 'Please select the picture that requires upscale', jsContent6: 'Please select the picture that requires upscale',
jsContent7: 'It has been successfully saved to the project canvas.', jsContent7: 'It has been successfully saved to the project canvas.',
jsContent8: 'Whether to continue editing', jsContent8: 'Whether to continue editing',
@@ -202,21 +199,16 @@ export default {
Complete: 'Complete', Complete: 'Complete',
jsContent1: 'Whether to delete the workspace?', jsContent1: 'Whether to delete the workspace?',
jsContent2: 'Please enter a workbench name', jsContent2: 'Please enter a workbench name',
jsContent3: jsContent3: "It looks like you've changed the style. Would you like to replace the currently used mannequin with the system-recommended model for this style?",
"It looks like you've changed the style. Would you like to replace the currently used mannequin with the system-recommended model for this style?",
currentProject: 'Current Project' currentProject: 'Current Project'
}, },
RobotAssist: { RobotAssist: {
inputContent1: 'write a message~', inputContent1: 'write a message~',
jsContent1: 'Please enter content', jsContent1: 'Please enter content',
jsContent2: jsContent2: "Welcome to AiDA. I am your friendly fashion design assistant. If you have any questions or need assistance, please don't hesitate to ask",
"Welcome to AiDA. I am your friendly fashion design assistant. If you have any questions or need assistance, please don't hesitate to ask", jsContent3: "I see you might be new here, and I'd love to guide you through a tutorial to help you get acquainted with our new and improved AiDA system. Would you like to start the tutorial now?",
jsContent3: jsContent4: 'You can start the tutorial at any time by simply telling me that you want to.',
"I see you might be new here, and I'd love to guide you through a tutorial to help you get acquainted with our new and improved AiDA system. Would you like to start the tutorial now?", jsContent5: 'We need to refresh the page before starting the tutorial. Would you like to start the tutorial now?'
jsContent4:
'You can start the tutorial at any time by simply telling me that you want to.',
jsContent5:
'We need to refresh the page before starting the tutorial. Would you like to start the tutorial now?'
}, },
HomeView: { HomeView: {
GetStarted: 'Get Started', GetStarted: 'Get Started',
@@ -236,30 +228,24 @@ export default {
colorboard: 'colorboard', colorboard: 'colorboard',
sketchboard: 'sketchboard', sketchboard: 'sketchboard',
mannequins: 'mannequins', mannequins: 'mannequins',
masnnequinHint: masnnequinHint: 'The mannequin you use is not matched with the current clothes, which will cause the generated model to not use the selected clothes',
'The mannequin you use is not matched with the current clothes, which will cause the generated model to not use the selected clothes',
FinalizeCollection: 'complete series', FinalizeCollection: 'complete series',
jsContent1: 'You must choose one or more colors for further process.', jsContent1: 'You must choose one or more colors for further process.',
jsContent2: 'You must choose one or more colors for further process.', jsContent2: 'You must choose one or more colors for further process.',
jsContent3: 'Failed to export the file', jsContent3: 'Failed to export the file',
jsContent4: jsContent4: 'Your subscription will expire in {days} days and {hours} hours. To ensure uninterrupted service, please click here to renew -> ',
'Your subscription will expire in {days} days and {hours} hours. To ensure uninterrupted service, please click here to renew -> ',
jsContent8: 'Renew Subscription.', jsContent8: 'Renew Subscription.',
jsContent7: 'Friendly Reminder', jsContent7: 'Friendly Reminder',
jsContent5: jsContent5: "We're delighted to have you experience AiDA. Please be aware that some services may be limited during the trial period. If you're ready to fully dive in and enjoy the complete experience, we warmly invite you to subscribe. Just visit ",
"We're delighted to have you experience AiDA. Please be aware that some services may be limited during the trial period. If you're ready to fully dive in and enjoy the complete experience, we warmly invite you to subscribe. Just visit ",
jsContent6: ' to get started. Thank you for trying our services!', jsContent6: ' to get started. Thank you for trying our services!',
jsContent9: 'Are you sure to erase current collection and start over?', jsContent9: 'Are you sure to erase current collection and start over?',
jsContent10: jsContent10: "Re-created works are not allowed to use 'design', but you can use 'redesign'",
"Re-created works are not allowed to use 'design', but you can use 'redesign'", jsContent11: 'By unliking this, all connected posts will be deleted. Are you sure you want to continue?',
jsContent11:
'By unliking this, all connected posts will be deleted. Are you sure you want to continue?',
jsContent12: 'Are you sure about deleting the current brand DNA?' jsContent12: 'Are you sure about deleting the current brand DNA?'
}, },
ProductImg: { ProductImg: {
productInput: 'Enter keyword(style,texture)', productInput: 'Enter keyword(style,texture)',
relightInput: relightInput: 'Using revised phrase(e.g. change...to...,replace...with...,add,remove)',
'Using revised phrase(e.g. change...to...,replace...with...,add,remove)',
Finalize: 'Finalize', Finalize: 'Finalize',
SelectCollection: 'Line Drawing', SelectCollection: 'Line Drawing',
SelectCollectionRelight: 'Product Image', SelectCollectionRelight: 'Product Image',
@@ -286,8 +272,7 @@ export default {
TopLight: 'Top Light', TopLight: 'Top Light',
BottomLight: 'Bottom Light', BottomLight: 'Bottom Light',
Clear: 'Clear', Clear: 'Clear',
jsContent1: jsContent1: 'Your changes will be lost if you navigate away from this page. Are you sure you want to leave this page?',
'Your changes will be lost if you navigate away from this page. Are you sure you want to leave this page?',
jsContent2: 'Please select at least one picture', jsContent2: 'Please select at least one picture',
jsContent3: 'One of your images failed to generate. Please try again.', jsContent3: 'One of your images failed to generate. Please try again.',
Prompt: 'Prompt', Prompt: 'Prompt',
@@ -298,7 +283,7 @@ export default {
CopyFiled: 'Failed to copy', CopyFiled: 'Failed to copy',
noPrompt: 'Please enter prompt', noPrompt: 'Please enter prompt',
OriginalImage: 'Original Image', OriginalImage: 'Original Image',
EditGarmen: 'You can edit the Model', EditGarmen: 'You can edit the Model',
EditGarmen2: 'You can edit the Scene', EditGarmen2: 'You can edit the Scene',
Background: 'White Background', Background: 'White Background',
BackgroundColor: 'Background with Pure Color', BackgroundColor: 'Background with Pure Color',
@@ -325,29 +310,18 @@ export default {
ChangeBarInfo: 'Remove Garment', ChangeBarInfo: 'Remove Garment',
ChangeGarden: 'In the garden, in the morning.', ChangeGarden: 'In the garden, in the morning.',
ChangeGardenInfo: 'Add Accessories', ChangeGardenInfo: 'Add Accessories',
SingleGarment: SingleGarment: 'Professional product photo: garment on invisible mannequin, no model visible. Preserve exact design - all patterns, colors, textures, details.', // 单品样衣
'Professional product photo: garment on invisible mannequin, no model visible. Preserve exact design - all patterns, colors, textures, details.', // 单品样衣 SingleChildMaleWithoutModel: 'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.',
SingleChildMaleWithoutModel: SingleChildMaleWithModel: 'Transform this image into a real child model stand and wear this garment, in the white studio, facing camera, standing posture.',
'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.', SingleChildFemaleWithoutModel: 'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.',
SingleChildMaleWithModel: SingleChildFemaleWithModel: 'Transform this image into a real child model stand and wear this garment, in the white studio, facing camera, standing posture.',
'Transform this image into a real child model stand and wear this garment, in the white studio, facing camera, standing posture.', SingleAdultMaleWithoutModel: 'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.',
SingleChildFemaleWithoutModel: SingleAdultMaleWithModel: 'Transform this image into a real model stand and wear this garment, in the white studio, facing camera, standing posture.',
'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.', SingleAdultFemaleWithoutModel: 'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.',
SingleChildFemaleWithModel: SingleAdultFemaleWithModel: 'Transform this image into a real model stand and wear this garment, in the white studio, facing camera, standing posture.',
'Transform this image into a real child model stand and wear this garment, in the white studio, facing camera, standing posture.', Series: 'In the white studio, facing camera, standing posture.',
SingleAdultMaleWithoutModel: UploadWithModel: 'Create realistic studio photo with real people model standing and wearing this garment, in white studio, Keep original model if present, or generate appropriate model, Standing pose, facing camera.', // 上传线稿,带模特
'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.', UploadWithoutModel: 'Transform this image into a real garment showing in the white studio: garment on invisible mannequin' // 上传线稿,不带模特
SingleAdultMaleWithModel:
'Transform this image into a real model stand and wear this garment, in the white studio, facing camera, standing posture.',
SingleAdultFemaleWithoutModel:
'Transform this image into a real garment showing in the white studio: garment on invisible mannequin.',
SingleAdultFemaleWithModel:
'Transform this image into a real model stand and wear this garment, in the white studio, facing camera, standing posture.',
Series: 'In the white studio, facing camera, standing posture.',
UploadWithModel:
'Create realistic studio photo with real people model standing and wearing this garment, in white studio, Keep original model if present, or generate appropriate model, Standing pose, facing camera.', // 上传线稿,带模特
UploadWithoutModel:
'Transform this image into a real garment showing in the white studio: garment on invisible mannequin' // 上传线稿,不带模特
}, },
poseTransfer: { poseTransfer: {
SelectDesign: 'Product image', SelectDesign: 'Product image',
@@ -372,8 +346,7 @@ export default {
firstAndLastFramePlaceholder1: 'Camera Movement', firstAndLastFramePlaceholder1: 'Camera Movement',
firstAndLastFrameText2: ' to follow the motion, under', firstAndLastFrameText2: ' to follow the motion, under',
firstAndLastFramePlaceholder2: 'Light', firstAndLastFramePlaceholder2: 'Light',
firstAndLastFrameText3: firstAndLastFrameText3: ' , maintaining full consistency of model identity, styling, and outfit across all frames.',
' , maintaining full consistency of model identity, styling, and outfit across all frames.',
firstFrameText1: 'Set the ', firstFrameText1: 'Set the ',
firstFramePlaceholder1: 'Scene', firstFramePlaceholder1: 'Scene',
firstFrameText2: ', where the model ', firstFrameText2: ', where the model ',
@@ -438,10 +411,8 @@ export default {
jsContent10: 'Save as New or Overwrite Current Mannequin?', jsContent10: 'Save as New or Overwrite Current Mannequin?',
jsContent11: 'Are you sure about deleting the current brand DNA?', jsContent11: 'Are you sure about deleting the current brand DNA?',
jsContent12: 'Please deselect first, then try deleting again.', jsContent12: 'Please deselect first, then try deleting again.',
jsContent13: jsContent13: 'You must select at least one model of the current gender, and no more than four.',
'You must select at least one model of the current gender, and no more than four.', jsContent14: 'You must select a model whose gender is the same as that of the current project.'
jsContent14:
'You must select a model whose gender is the same as that of the current project.'
}, },
HistoryPage: { HistoryPage: {
History: 'History', History: 'History',
@@ -466,8 +437,7 @@ export default {
jsContent4: 'Image must smaller than 5MB!', jsContent4: 'Image must smaller than 5MB!',
jsContent5: 'This picture has been uploaded whether to continue uploading', jsContent5: 'This picture has been uploaded whether to continue uploading',
jsContent6: 'The entered content exceeds the maximum length.', jsContent6: 'The entered content exceeds the maximum length.',
jsContent7: 'Please enter content', jsContent7: 'Please enter content'
jsContent8: 'Please enter the project name.'
}, },
ModelPlacement: { ModelPlacement: {
Registration: 'Registration', Registration: 'Registration',
@@ -482,13 +452,11 @@ export default {
Point: 'Point', Point: 'Point',
addPoint: 'Add points', addPoint: 'Add points',
RemovePoint: 'Remove points', RemovePoint: 'Remove points',
mannequinHint: mannequinHint: 'Please change the pure white inside the mannequin for another color to enhance your experience',
'Please change the pure white inside the mannequin for another color to enhance your experience',
SHOULDER: 'SHOULDER', SHOULDER: 'SHOULDER',
WAISTBAND: 'WAISTBAND', WAISTBAND: 'WAISTBAND',
HAND: 'HAND', HAND: 'HAND',
jsContent1: jsContent1: "You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?",
"You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?",
jsContent2: 'This picture has been uploaded whether to continue uploading' jsContent2: 'This picture has been uploaded whether to continue uploading'
}, },
ModelPlacementMobile: { ModelPlacementMobile: {
@@ -501,13 +469,11 @@ export default {
Library: 'Library', Library: 'Library',
Point: 'Point', Point: 'Point',
RemovePoint: 'Remove Point', RemovePoint: 'Remove Point',
mannequinHint: mannequinHint: 'Please change the pure white inside the mannequin for another color to enhance your experience',
'Please change the pure white inside the mannequin for another color to enhance your experience',
SHOULDER: 'SHOULDER', SHOULDER: 'SHOULDER',
WAISTBAND: 'WAISTBAND', WAISTBAND: 'WAISTBAND',
HAND: 'HAND', HAND: 'HAND',
jsContent1: jsContent1: "You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?",
"You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?",
jsContent2: 'This picture has been uploaded whether to continue uploading' jsContent2: 'This picture has been uploaded whether to continue uploading'
}, },
Upload: { Upload: {
@@ -556,10 +522,8 @@ export default {
GeneratePrint: 'Pattern', GeneratePrint: 'Pattern',
maximumLength: 'The entered content exceeds the maximum length.', maximumLength: 'The entered content exceeds the maximum length.',
PatternTitle: 'Generates repeatable designs that can be fully tiled across garments.', PatternTitle: 'Generates repeatable designs that can be fully tiled across garments.',
LogoTitle: LogoTitle: 'Creates standalone graphic designs that can be placed individually or tiled.',
'Creates standalone graphic designs that can be placed individually or tiled.', SloganTitle: 'Produces artistic typography for text, suitable for various slogans or phrases.',
SloganTitle:
'Produces artistic typography for text, suitable for various slogans or phrases.',
jsContent1: 'You can only upload Image file!', jsContent1: 'You can only upload Image file!',
jsContent2: 'Image must smaller than 5MB!', jsContent2: 'Image must smaller than 5MB!',
jsContent3: 'Maximum number of allowable file uploads has been exceeded', jsContent3: 'Maximum number of allowable file uploads has been exceeded',
@@ -653,10 +617,8 @@ export default {
currently: 'You are currently in the {generateLineUp} th position in the queue', currently: 'You are currently in the {generateLineUp} th position in the queue',
Merge: 'Merge', Merge: 'Merge',
maximumLength: 'The entered content exceeds the maximum length.', maximumLength: 'The entered content exceeds the maximum length.',
effectPoor: effectPoor: 'The quality of the generated images currently falls below standard. Please consider adjusting your prompt and trying again.',
'The quality of the generated images currently falls below standard. Please consider adjusting your prompt and trying again.', everyTimeEffectPoor: 'One generated image falls below quality thresholds. Modify your text prompt and regenerate.',
everyTimeEffectPoor:
'One generated image falls below quality thresholds. Modify your text prompt and regenerate.',
Model: 'Model', Model: 'Model',
uploadTitle: 'Upload reference image', uploadTitle: 'Upload reference image',
uploadproduct: 'Upload product picture', uploadproduct: 'Upload product picture',
@@ -672,8 +634,7 @@ export default {
GoldSunflower: 'Golden Sunflower', GoldSunflower: 'Golden Sunflower',
EmrldJungle: 'Emerald Jungle Canopy', EmrldJungle: 'Emerald Jungle Canopy',
PinkSakura: 'Pink Sakura Blossom', PinkSakura: 'Pink Sakura Blossom',
generateLoading: generateLoading: 'Please wait while we extract text from your images. This will just take a moment.',
'Please wait while we extract text from your images. This will just take a moment.',
jsContent1: 'You can only upload Image file!', jsContent1: 'You can only upload Image file!',
jsContent2: 'Image must smaller than 5MB!', jsContent2: 'Image must smaller than 5MB!',
jsContent3: 'Please enter content', jsContent3: 'Please enter content',
@@ -684,8 +645,7 @@ export default {
jsContent8: 'You have {num} remaining opportunity to generate {str}.', jsContent8: 'You have {num} remaining opportunity to generate {str}.',
jsContent9: 'You have exhausted your generation opportunities {str}.', jsContent9: 'You have exhausted your generation opportunities {str}.',
jsContent10: 'Please complete the slogan picture', jsContent10: 'Please complete the slogan picture',
jsContent11: jsContent11: 'See the input content may overlap, overlap will affect the final effect oh',
'See the input content may overlap, overlap will affect the final effect oh',
jsContent12: 'Complete at least one slogan' jsContent12: 'Complete at least one slogan'
}, },
collectionModal: { collectionModal: {
@@ -699,14 +659,11 @@ export default {
PrinCollection: 'select printboard for your collection', PrinCollection: 'select printboard for your collection',
ColorCollection: 'select colors for your collection', ColorCollection: 'select colors for your collection',
SketchCollection: 'select sketchboard for your collection', SketchCollection: 'select sketchboard for your collection',
jsContent1: jsContent1: "Since you have selected multiple images, please click 'Layout' to proceed.",
"Since you have selected multiple images, please click 'Layout' to proceed.",
jsContent2: 'The uploaded files will not be saved, being sure to continue? ', jsContent2: 'The uploaded files will not be saved, being sure to continue? ',
jsContent3: 'You must choose one or more colors for further process.', jsContent3: 'You must choose one or more colors for further process.',
jsContent5: jsContent5: "We've detected that the number of pins on your ({str}) exceeds eight, which may result in some pinned items not being used. Would you like to continue anyway?",
"We've detected that the number of pins on your ({str}) exceeds eight, which may result in some pinned items not being used. Would you like to continue anyway?", jsContent6: 'The content on the canvas has not been saved. Please click "Preview" to continue.',
jsContent6:
'The content on the canvas has not been saved. Please click "Preview" to continue.',
jsContent7: 'Please select at least one model.' jsContent7: 'Please select at least one model.'
}, },
DesignDetail: { DesignDetail: {
@@ -798,8 +755,7 @@ export default {
available: 'This feature is not available to trial users', available: 'This feature is not available to trial users',
src: 'This function is not open to trial users, if you need to subscribe, please visit ', src: 'This function is not open to trial users, if you need to subscribe, please visit ',
userName: 'Trial User', userName: 'Trial User',
loginIsTest: loginIsTest: "You are a trial user, Probation period until{date}. For the security of users' data, we do not save any personal data uploaded by trial users, and will erase personal data after each logout. if you need to subscribe, please click ->",
"You are a trial user, Probation period until{date}. For the security of users' data, we do not save any personal data uploaded by trial users, and will erase personal data after each logout. if you need to subscribe, please click ->",
image: 'Because you are a trial user, you can only upload 10 images' image: 'Because you are a trial user, you can only upload 10 images'
}, },
setLabel: { setLabel: {
@@ -826,8 +782,7 @@ export default {
UpdatePublish: 'Update Publish', UpdatePublish: 'Update Publish',
jsContent1: 'Are you sure to leave this page? Your changes are not saved. ', jsContent1: 'Are you sure to leave this page? Your changes are not saved. ',
jsContent2: 'Please enter the name of your work', jsContent2: 'Please enter the name of your work',
jsContent3: jsContent3: 'This will publish your work to the square for all users to see. Please confirm whether to publish?',
'This will publish your work to the square for all users to see. Please confirm whether to publish?',
jsContent4: 'Release success! You can find it in my work' jsContent4: 'Release success! You can find it in my work'
}, },
newScaleImage: { newScaleImage: {
@@ -961,8 +916,7 @@ export default {
Yearly: 'Yearly', Yearly: 'Yearly',
promotionCode: 'Coupon', promotionCode: 'Coupon',
use: 'Apply', use: 'Apply',
PromoCodeError: PromoCodeError: 'Please check if the promo code is correct or if the date has expired',
'Please check if the promo code is correct or if the date has expired',
CreditCard: 'Credit Card', CreditCard: 'Credit Card',
Alipay: 'Alipay', Alipay: 'Alipay',
Payment: 'Payment method', Payment: 'Payment method',
@@ -1004,34 +958,26 @@ export default {
subscriptionRenewal: 'There are no subscription plans with automatic renewal.' subscriptionRenewal: 'There are no subscription plans with automatic renewal.'
}, },
guide: { guide: {
guide1: guide1: "You can personalize your design settings right here in the <strong>Workspace</strong>, including choosing to design for men's or women's wear, as well as selecting the mannequin to use for your creations.",
"You can personalize your design settings right here in the <strong>Workspace</strong>, including choosing to design for men's or women's wear, as well as selecting the mannequin to use for your creations.",
guide2: "Select the apparel type you'd like to work on.", guide2: "Select the apparel type you'd like to work on.",
guide3: 'Change the mannequin here.', guide3: 'Change the mannequin here.',
guide4: guide4: 'You can currently select a mannequin from our system library. Later, you can also choose from the user library after registering your own mannequin.',
'You can currently select a mannequin from our system library. Later, you can also choose from the user library after registering your own mannequin.',
guide5: 'Begin your creative journey here. ', guide5: 'Begin your creative journey here. ',
guide6: guide6: 'For the Moodboard, Printboard, or Sketchboard, we provide three different sourcing methods to add images. The first option is <strong>Upload</strong>, allowing you to <stront>upload</stront> directly from your local device.',
'For the Moodboard, Printboard, or Sketchboard, we provide three different sourcing methods to add images. The first option is <strong>Upload</strong>, allowing you to <stront>upload</stront> directly from your local device.', guide7: "The second method is to select from your <strong>Library</strong>. <br> You might notice that your library page is currently empty; there's no need to worry. All the images you upload will be automatically added to your library. In the future, you won't have to upload each time—you can simply choose from your library instead.",
guide7: guide8: 'The third method is to <strong>Generate</strong> images using the latest Image Generation technology.',
"The second method is to select from your <strong>Library</strong>. <br> You might notice that your library page is currently empty; there's no need to worry. All the images you upload will be automatically added to your library. In the future, you won't have to upload each time—you can simply choose from your library instead.", guide9: 'Enter keywords that capture the mood you wish to express and then click the <strong>Low Quality</strong> button.',
guide8:
'The third method is to <strong>Generate</strong> images using the latest Image Generation technology.',
guide9:
'Enter keywords that capture the mood you wish to express and then click the <strong>Low Quality</strong> button.',
guide10: 'Select two images for your moodboard.', guide10: 'Select two images for your moodboard.',
guide11: 'Click here to layout your moodboard.', guide11: 'Click here to layout your moodboard.',
guide12: 'Click here for next step.', guide12: 'Click here for next step.',
guide13: 'Click here to generate print images.', guide13: 'Click here to generate print images.',
// guide14:"We provide three input options for generating images: Image Only, Text Only, and Text-Image.", // guide14:"We provide three input options for generating images: Image Only, Text Only, and Text-Image.",
// guide15:"Select this option and we will generate four print images using both the picture you upload and the text you enter.", // guide15:"Select this option and we will generate four print images using both the picture you upload and the text you enter.",
guide16: guide16: 'Choose a generation model here; different models will generate images in various styles.',
'Choose a generation model here; different models will generate images in various styles.',
// guide17:"Choose a generation model here; different models will generate images in various styles.", // guide17:"Choose a generation model here; different models will generate images in various styles.",
guide18: 'Upload the input picture here.', guide18: 'Upload the input picture here.',
// guide19:"Click on this image to select it.", // guide19:"Click on this image to select it.",
guide20: guide20: 'Enter keywords about the print you wish to create and then click the <strong>Generate</strong> button.',
'Enter keywords about the print you wish to create and then click the <strong>Generate</strong> button.',
guide21: 'Select the generated prints you like best.', guide21: 'Select the generated prints you like best.',
guide22: 'Click here for next step.', guide22: 'Click here for next step.',
guide23: 'Click here to extract primary colors from image.', guide23: 'Click here to extract primary colors from image.',
@@ -1041,8 +987,7 @@ export default {
guide27: 'Click here for next step.', guide27: 'Click here for next step.',
guide28: 'Click here to generate clothing sketches.', guide28: 'Click here to generate clothing sketches.',
// guide29:"Using text only option for generation.", // guide29:"Using text only option for generation.",
guide30: guide30: 'Enter keywords about the sketch you wish to create and then click the <strong>Generate</strong> button.',
'Enter keywords about the sketch you wish to create and then click the <strong>Generate</strong> button.',
guide31: 'Click here to choose a category for the generated sketch.', guide31: 'Click here to choose a category for the generated sketch.',
guide32: 'Choose correct category for the sketch.', guide32: 'Choose correct category for the sketch.',
guide33: 'Select the generated sketches you like best.', guide33: 'Select the generated sketches you like best.',
@@ -1050,8 +995,7 @@ export default {
guide35: 'Click here to let AI generate design illustrations.', guide35: 'Click here to let AI generate design illustrations.',
guide36: 'Please wait a few seconds.', guide36: 'Please wait a few seconds.',
guide37: 'Click the little red heart to save your favorite design.', guide37: 'Click the little red heart to save your favorite design.',
guide38: guide38: "Click '<strong>Redesign</strong>' to generate eight new outfits for your collection to choose from.",
"Click '<strong>Redesign</strong>' to generate eight new outfits for your collection to choose from.",
guide39: 'Click here to let AI generate design illustrations.', guide39: 'Click here to let AI generate design illustrations.',
guide40: 'Click on any design image you are interested in to modify the details.', guide40: 'Click on any design image you are interested in to modify the details.',
guide41: 'Click on the clothes to modify its details.', guide41: 'Click on the clothes to modify its details.',
@@ -1063,8 +1007,7 @@ export default {
guide47: 'Save printed design here.', guide47: 'Save printed design here.',
guide48: 'Click here to finalize your modification.', guide48: 'Click here to finalize your modification.',
guide49: 'Click here to access the finalize page.', guide49: 'Click here to access the finalize page.',
guide51: guide51: 'This interface allows you to transform design results into product images. You can achieve your desired effect by adjusting the text and similarity. Click this product image to proceed to the next step.',
'This interface allows you to transform design results into product images. You can achieve your desired effect by adjusting the text and similarity. Click this product image to proceed to the next step.',
guide52: 'Click here to generate the product image.', guide52: 'Click here to generate the product image.',
guide53: 'Click this button to apply more tools to the product image. ', guide53: 'Click this button to apply more tools to the product image. ',
guide54: 'We can adjust the lighting and background of this image. ', guide54: 'We can adjust the lighting and background of this image. ',
@@ -1072,8 +1015,7 @@ export default {
guide56: 'If you like this result, click the little heart to save it.', guide56: 'If you like this result, click the little heart to save it.',
guide57: 'Click here to go to the export page. ', guide57: 'Click here to go to the export page. ',
guide58: 'You can share your work to the gallery or export to your local device.', guide58: 'You can share your work to the gallery or export to your local device.',
guide50: guide50: "Your guide is complete, and now the canvas is yours to create freely. For more insights and details, check out our demo video on the homepage at <a href='https://code-create.com.hk/aida/' style='pointer-events: auto;' target='_blank'>https://code-create.com.hk/aida/</a><br>You can restart the tutorial at any time by simply telling the robot that you want to."
"Your guide is complete, and now the canvas is yours to create freely. For more insights and details, check out our demo video on the homepage at <a href='https://code-create.com.hk/aida/' style='pointer-events: auto;' target='_blank'>https://code-create.com.hk/aida/</a><br>You can restart the tutorial at any time by simply telling the robot that you want to."
}, },
createSlogan: { createSlogan: {
title: 'Create Slogan', title: 'Create Slogan',
@@ -1095,16 +1037,13 @@ export default {
Setting: 'Manual Mode', Setting: 'Manual Mode',
SeriesDesign: 'Overall Illustration Design', SeriesDesign: 'Overall Illustration Design',
series: 'Series Design', series: 'Series Design',
SeriesDesignInfo: SeriesDesignInfo: 'Series Design focuses on the coordinated design of multi-category clothing, ideal for creating a unified fashion collection. Gather and arrange your inspiration using the Moodboard, Printboard, Colorboard, Sketchboard, and Mannequin tools in the Design Assets panel to build harmonious outfit combinations. Refine your creations in the Draft and Collection panels using powerful tools like To Product Image, Relight, and Transfer Pose. When youre ready, export everything to the Canvas to display your complete series design.',
'Series Design focuses on the coordinated design of multi-category clothing, ideal for creating a unified fashion collection. Gather and arrange your inspiration using the Moodboard, Printboard, Colorboard, Sketchboard, and Mannequin tools in the Design Assets panel to build harmonious outfit combinations. Refine your creations in the Draft and Collection panels using powerful tools like To Product Image, Relight, and Transfer Pose. When youre ready, export everything to the Canvas to display your complete series design.',
SingleDesign: 'Single item design', SingleDesign: 'Single item design',
single: 'Single Design', single: 'Single Design',
DeepThinking: 'Deep Thinking', DeepThinking: 'Deep Thinking',
SingleDesignInfo: SingleDesignInfo: 'Single Design focuses on creating an individual clothing item, such as a T-shirt, dress, or jacket, without coordinating it with other pieces. Use the Moodboard, Printboard, Colorboard, and Sketchboard sections in the Design Assets panel to gather inspiration and develop a unique design. Once finished, refine your work in the Draft and Collection panels using tools like To Product Image, Relight, and Transfer Pose, then export to the Canvas to showcase your standalone creation. ',
'Single Design focuses on creating an individual clothing item, such as a T-shirt, dress, or jacket, without coordinating it with other pieces. Use the Moodboard, Printboard, Colorboard, and Sketchboard sections in the Design Assets panel to gather inspiration and develop a unique design. Once finished, refine your work in the Draft and Collection panels using tools like To Product Image, Relight, and Transfer Pose, then export to the Canvas to showcase your standalone creation. ',
selectDesignType: 'Please select the design type', selectDesignType: 'Please select the design type',
hintListSERIES1: hintListSERIES1: 'Design a collection of futuristic clothes, deep purple color scheme.',
'Design a collection of futuristic clothes, deep purple color scheme.',
hintListSERIES2: 'Design a set of bright-colored, Bohemian-style dresses.', hintListSERIES2: 'Design a set of bright-colored, Bohemian-style dresses.',
hintListSERIES3: 'Design a set of hip-hop street style denim jackets for boys.', hintListSERIES3: 'Design a set of hip-hop street style denim jackets for boys.',
hintListSIGNLE1: 'A silver-gray, steampunk-style windbreaker.', hintListSIGNLE1: 'A silver-gray, steampunk-style windbreaker.',
@@ -1165,8 +1104,7 @@ export default {
Delete: 'Delete', Delete: 'Delete',
Finish: 'We have calculated your preferred style.', Finish: 'We have calculated your preferred style.',
LastCompletionTime: 'Last completion time', LastCompletionTime: 'Last completion time',
textarea: textarea: 'Please enter your thoughts about this brand, and we will help you generate the name, logo, and slogan.'
'Please enter your thoughts about this brand, and we will help you generate the name, logo, and slogan.'
}, },
chat: { chat: {
DeepThinking: 'Deep Thinking', DeepThinking: 'Deep Thinking',
@@ -1312,13 +1250,11 @@ export default {
SpecialEffectsBrush: 'Special Effects Brush', SpecialEffectsBrush: 'Special Effects Brush',
PencilSettings: 'Pencil Settings', PencilSettings: 'Pencil Settings',
ParticleSeparationDegree: 'Particle separation degree', ParticleSeparationDegree: 'Particle separation degree',
ParticleSeparationDegreeDescription: ParticleSeparationDegreeDescription: 'Control the degree of separation of the crayon particles',
'Control the degree of separation of the crayon particles',
TheAmountOfInk: 'The Amount Of Ink', TheAmountOfInk: 'The Amount Of Ink',
TheAmountOfInkDescription: 'Control the amount of pigment in the crayons', TheAmountOfInkDescription: 'Control the amount of pigment in the crayons',
randomness: 'Randomness', randomness: 'Randomness',
randomnessDescription: randomnessDescription: 'Controlling the degree of randomness in the texture of the crayon',
'Controlling the degree of randomness in the texture of the crayon',
TextureType: 'Texture Type', TextureType: 'Texture Type',
TextureTypeDescription: 'Set the texture type of the crayons', TextureTypeDescription: 'Set the texture type of the crayons',
Default: 'Default', Default: 'Default',
@@ -1453,36 +1389,28 @@ export default {
back: 'Back', back: 'Back',
confirm: 'Confirm', confirm: 'Confirm',
RasterizedLayer: 'Rasterized Layer', RasterizedLayer: 'Rasterized Layer',
rasterizeImmediately: rasterizeImmediately: 'You need to rasterize first before performing the distortion operation. Do you want to rasterize immediately?',
'You need to rasterize first before performing the distortion operation. Do you want to rasterize immediately?',
ConfirmRasterization: 'Confirm Rasterization', ConfirmRasterization: 'Confirm Rasterization',
beingRasterized: 'Currently, it is being rasterized.', beingRasterized: 'Currently, it is being rasterized.',
waitRasterizing: 'Rasterizing the layer. Please wait...', waitRasterizing: 'Rasterizing the layer. Please wait...',
successRasterizing: successRasterizing: 'The layer has been successfully rasterized and can now undergo the distortion operation.',
'The layer has been successfully rasterized and can now undergo the distortion operation.',
gridingFailed: 'Griding Failed', gridingFailed: 'Griding Failed',
gridingFailedNoOperation: gridingFailedNoOperation: 'Griding failed. Unable to perform the liquefaction operation.',
'Griding failed. Unable to perform the liquefaction operation.',
gridingError: 'Griding Error', gridingError: 'Griding Error',
LayerError: 'Layer Error', LayerError: 'Layer Error',
LayerDoesNotExist: 'The layer does not exist.', LayerDoesNotExist: 'The layer does not exist.',
backgroundEmpty: 'The background layer is empty.', backgroundEmpty: 'The background layer is empty.',
backgroundEmptyNoLiquidation: backgroundEmptyNoLiquidation: 'The background layer is empty, so the liquidation operation cannot be performed.',
'The background layer is empty, so the liquidation operation cannot be performed.',
layerEmpty: 'The layer is empty.', layerEmpty: 'The layer is empty.',
layerEmptyNoLiquidation: layerEmptyNoLiquidation: 'The layer is empty and cannot perform the liquefaction operation.',
'The layer is empty and cannot perform the liquefaction operation.',
liqueficationManagerError: 'Liquefication Manager Error', liqueficationManagerError: 'Liquefication Manager Error',
liqueficationManagerErrorInitialized: liqueficationManagerErrorInitialized: 'The liquefaction manager has not been initialized.',
'The liquefaction manager has not been initialized.',
liquefactionEnvironment: 'Prepare for the liquefaction environment', liquefactionEnvironment: 'Prepare for the liquefaction environment',
liquefactionEnvironmentLoading: liquefactionEnvironmentLoading: 'The liquefaction environment is being prepared. Please wait a moment...',
'The liquefaction environment is being prepared. Please wait a moment...',
LiqueficationFailed: 'Liquefication tool failed to start.', LiqueficationFailed: 'Liquefication tool failed to start.',
TextLayer: 'Text Layer', TextLayer: 'Text Layer',
DoubleClickText: 'Double-click to edit the text', DoubleClickText: 'Double-click to edit the text',
LiquidationError: LiquidationError: 'No valid image selected or the layer does not fit the liquefaction operation.',
'No valid image selected or the layer does not fit the liquefaction operation.',
ErrorMessage: 'Error Message', ErrorMessage: 'Error Message',
preset: 'Preset', preset: 'Preset',
presetNamePrompt: 'Please enter the preset name:', presetNamePrompt: 'Please enter the preset name:',
@@ -1575,114 +1503,5 @@ export default {
ChatRobot: 'ChatRobot', ChatRobot: 'ChatRobot',
Yes: 'Yes', Yes: 'Yes',
No: 'No' No: 'No'
},
Login: {
Login: 'Login',
SignUp: 'Sign Up',
ForgotPassword: '忘记密码',
Welcome: 'Welcome to',
AiDA: 'AiDA',
Slogan:
'AiDA, a first-to-market technology that empowers fashion designers, based on their creative inspirations, to work with AI to create original designs.',
LoginMethod: 'Continue with one of these:',
Individual: 'Individual',
Academic: 'Academic',
LogonToAiDA: 'Log on to AiDA 3.1',
Infomation: 'Please fill your information below',
Device: 'If you need to design, please log in using an iPad or computer.',
AgreePolicies: 'Please agree to all terms, privacy policy, and fees.',
PasswordConditions: 'You must satisfy ALL password conditions to register.'
},
LoginPersonal: {
Email: 'Email',
Password: 'Password',
EnterEmail: 'Enter your email address',
EnterPassword: 'Enter your password',
EnterCode: 'Enter Code',
Resend: 'Resend',
SentCodeToEmail: "We've sent an code to your email",
ForgotPassword: 'Forgot your password',
AgreeTo: 'I agree to the',
Terms: 'Terms',
PrivacyPolicy: 'Privacy Policy',
AndFees: 'and Fees.',
SignIn: 'Sign in',
CreateNewAccount: 'Create New Account',
Or: 'or',
RetrievePassword: 'Retrieve password',
NextStep: 'Next step',
VerificationCode: 'Verification Code',
SentTo: 'Sent to',
Submit: 'Submit',
AtLeast8Chars: 'At least 8 characters long',
MustContainSpecial: 'Must contain special characters',
MixUpperLowerNumbers: 'Mix of uppercase, lowercase and numbers',
EnterNewPassword: 'Enter a new password',
NeedEmail: 'Please enter your email address',
IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
},
LoginSchool: {
School: 'School',
SelectSchool: 'Select a school',
Email: 'Email',
Password: 'Password',
EnterEmail: 'Enter your email address',
EnterPassword: 'Enter your password',
EnterCode: 'Enter Code',
Resend: 'Resend',
SentCodeToEmail: "We've sent an code to your email",
ForgotPassword: 'Forgot your password',
AgreeTo: 'I agree to the',
Terms: 'Terms',
PrivacyPolicy: 'Privacy Policy',
AndFees: 'and Fees.',
SignIn: 'Sign in',
RetrievePassword: 'Retrieve password',
NextStep: 'Next step',
VerificationCode: 'Verification Code',
SentTo: 'Sent to',
Submit: 'Submit',
AtLeast8Chars: 'At least 8 characters long',
MustContainSpecial: 'Must contain special characters',
MixUpperLowerNumbers: 'Mix of uppercase, lowercase and numbers',
EnterNewPassword: 'Enter a new password',
NeedEmail: 'Please enter your email address',
IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
},
LoginEnterprise: {
Enterprise: 'Enterprise',
SelectEnterprise: 'Select an enterprise',
Email: 'Email',
Password: 'Password',
EnterEmail: 'Enter your email address',
EnterPassword: 'Enter your password',
EnterCode: 'Enter Code',
Resend: 'Resend',
SentCodeToEmail: "We've sent an code to your email",
AgreeTo: 'I agree to the',
Terms: 'Terms',
PrivacyPolicy: 'Privacy Policy',
AndFees: 'and Fees.',
SignIn: 'Sign in',
RetrievePassword: 'Retrieve password',
NextStep: 'Next step',
VerificationCode: 'Verification Code',
SentTo: 'Sent to',
Submit: 'Submit',
AtLeast8Chars: 'At least 8 characters long',
MustContainSpecial: 'Must contain special characters',
MixUpperLowerNumbers: 'Mix of uppercase, lowercase and numbers',
EnterNewPassword: 'Enter a new password',
NeedEmail: 'Please enter your email address',
IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
} }
} }

View File

@@ -393,27 +393,6 @@
<span class="fi fi-rr-book-user"></span> <span class="fi fi-rr-book-user"></span>
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span> <span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
</div> </div>
<div class="select_item logo">
<a href="https://www.tiktok.com" target="_blank" >
<img src="@/assets/images/socialMediaLogo/tikTokIcon.png" alt="">
</a>
<a href="https://www.instagram.com" target="_blank" >
<img src="@/assets/images/socialMediaLogo/instagramIcon.png" alt="">
</a>
<a href="https://www.youtube.com" target="_blank" >
<img src="@/assets/images/socialMediaLogo/youTubeIcon.png" alt="">
</a>
<a href="https://www.xiaohongshu.com" target="_blank" >
<img src="@/assets/images/socialMediaLogo/xiaoHongShuIcon.png" alt="">
</a>
<a href="https://www.zhihu.com" target="_blank" >
<img src="@/assets/images/socialMediaLogo/zhiHuIcon.png" alt="">
</a>
<a href="https://www.bilibili.com/" target="_blank" >
<img src="@/assets/images/socialMediaLogo/biliBliIcon.png" alt="">
</a>
</div>
<div class="select_item_long"></div> <div class="select_item_long"></div>
<div class="select_item" @click="logout()"> <div class="select_item" @click="logout()">
<span class="icon iconfont icon-tuichu"></span> <span class="icon iconfont icon-tuichu"></span>
@@ -582,7 +561,7 @@ export default defineComponent({
const getIdExistToHistory = async () => { const getIdExistToHistory = async () => {
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
let value = { let value = {
id: Number(route.params?.id || route.query?.history) id: Number(route.query?.id || route.query?.history)
} }
Https.axiosPost(Https.httpUrls.historyProject, value) Https.axiosPost(Https.httpUrls.historyProject, value)
.then(rv => { .then(rv => {
@@ -603,9 +582,9 @@ export default defineComponent({
} }
const key = Object.keys(query)?.[0] const key = Object.keys(query)?.[0]
if (key) { if (key) {
if (route.params?.id && !query.tools) { if (query.id && !query.tools) {
homeMainData.openType = 'history' homeMainData.openType = 'history'
homeMainData.openTypeChild = route.params?.id homeMainData.openTypeChild = query.id
} else { } else {
homeMainData.openType = Object.keys(query)[0] homeMainData.openType = Object.keys(query)[0]
homeMainData.openTypeChild = query[Object.keys(query)[0]] homeMainData.openTypeChild = query[Object.keys(query)[0]]
@@ -614,6 +593,10 @@ export default defineComponent({
homeMainData.openTypeChild = '' homeMainData.openTypeChild = ''
homeMainData.openType = '' homeMainData.openType = ''
} }
if ((query?.id || query?.history) && !(await getIdExistToHistory())) {
router.push('/home')
return
}
} else { } else {
homeMainData.openType = '' homeMainData.openType = ''
homeMainData.openTypeChild = '' homeMainData.openTypeChild = ''
@@ -933,12 +916,12 @@ export default defineComponent({
rv.content.forEach((item, index) => { rv.content.forEach((item, index) => {
let str = categorizeDate(item.updateTime) + 'list' let str = categorizeDate(item.updateTime) + 'list'
homeMainData.navTypeList.history[str].push(item) homeMainData.navTypeList.history[str].push(item)
if (item.id == (route.params?.id || route.query?.history)) { if (item.id == (route.query?.id || route.query?.history)) {
existToHistoryIndex = rv.page * rv.size + index + 1 - rv.size existToHistoryIndex = rv.page * rv.size + index + 1 - rv.size
} }
}) })
homeMainData.historyData.isNull = false homeMainData.historyData.isNull = false
if ((route.params?.id || route.query?.history) && isFound < 1) setScrollTop() if ((route.query?.id || route.query?.history) && isFound < 1) setScrollTop()
} else { } else {
homeMainData.historyData.isNoData = true homeMainData.historyData.isNoData = true
} }
@@ -1148,21 +1131,7 @@ export default defineComponent({
document.addEventListener('click', this.operateClick) document.addEventListener('click', this.operateClick)
} }
this.getCredits() this.getCredits()
// 获取用户语言并检查是否需要与 localStorage 中的 loginLanguage 同步 this.getLang('')
this.getLang('').then(userLanguage => {
// 检查 localStorage 中的 loginLanguage
const loginLanguage = localStorage.getItem('loginLanguage')
if (loginLanguage && userLanguage && loginLanguage !== userLanguage) {
// 如果 loginLanguage 与用户当前语言不同,则更新用户语言
this.setLocale(loginLanguage)
}
}).catch(() => {
// 如果获取用户语言失败,也检查 localStorage
const loginLanguage = localStorage.getItem('loginLanguage')
if (loginLanguage && loginLanguage !== this.locale) {
this.setLocale(loginLanguage)
}
})
//语言适配 //语言适配
let tl1 = gsap.timeline({ paused: true }) let tl1 = gsap.timeline({ paused: true })
@@ -1324,13 +1293,11 @@ export default defineComponent({
//获取当前语言 //获取当前语言
getLang(v) { getLang(v) {
let data let data
return Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(rv => { Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(rv => {
if (rv) { if (rv) {
this.locale = rv this.locale = rv
setLang(rv) setLang(rv)
return rv
} }
return null
}) })
}, },
setLang(v) { setLang(v) {
@@ -1360,10 +1327,6 @@ export default defineComponent({
}, },
setLocale(v) { setLocale(v) {
// 同步更新 localStorage 中的 loginLanguage
if (v) {
localStorage.setItem('loginLanguage', v)
}
this.setLang(v) this.setLang(v)
}, },
openTask(data) { openTask(data) {
@@ -2036,25 +1999,6 @@ export default defineComponent({
font-weight: 500; font-weight: 500;
} }
} }
.logo{
padding: 1rem 0.5rem;
gap: 1rem;
cursor: auto;
> a{
width: 2.5rem;
height: 2.5rem;
border-radius: .5rem;
overflow: hidden;
display: flex;
> img{
width: 100%;
height: 100%;
}
}
&:hover {
background: #fff;
}
}
.select_item_long { .select_item_long {
border-bottom: 1px solid #eceaea; border-bottom: 1px solid #eceaea;
margin: 2rem 0; margin: 2rem 0;

View File

@@ -1,443 +1,384 @@
<template> <template>
<div class="homeRecommend_max"> <div class="homeRecommend_max">
<div class="header"> <div class="header">
<img <img
class="homeRecommend_logo" class="homeRecommend_logo"
@click="turnToNewPage('/')" @click="turnToNewPage('/')"
src="@/assets/images/homePage/aidaIcon.png" src="@/assets/images/homePage/aidaIcon.png"
/> />
<div class="gallery_btn login white" @click="setLogin">{{ t('Login.Login') }}</div> <div class="gallery_btn login white" @click="setLogin">Login</div>
<div class="gallery_btn" @click="signUp">{{ t('Login.SignUp') }}</div> <div class="gallery_btn" @click="signUp">Sign up</div>
<div class="language_btn"> </div>
<div @click="handleChangeLanguage">
<i class="fi fi-rr-globe"></i>
{{ isChinese ? 'CN' : 'EN' }}
</div>
</div>
</div>
<div class="content"> <div class="content">
<img class="bg pc" src="@/assets/images/homePage/squareBg.png" alt="" /> <img class="bg pc" src="@/assets/images/homePage/squareBg.png" alt="">
<img class="bg mobile" src="@/assets/images/homePage/squareBgMobile.png" alt="" /> <img class="bg mobile" src="@/assets/images/homePage/squareBgMobile.png" alt="">
<div class="beForm"> <div class="beForm">Developed by AiDLab<br />
Developed by AiDLab Commercialized by Code-Create</div>
<br /> <div class="title">
Commercialized by Code-Create <img src="@/assets/images/homePage/recommendtitleMobile.png" alt="">
</div> <div class="text">
<div class="title"> AI-based Interactive Design <br />Assistant for Fashion
<img src="@/assets/images/homePage/recommendtitleMobile.png" alt="" /> </div>
<div class="text"> </div>
AI-based Interactive Design <div class="learnMore">
<br /> <img src="@/assets/images/homePage/learnMore.png" alt="">
Assistant for Fashion <!-- <div class="title">AiDA</div>
</div>
</div>
<div class="learnMore">
<img src="@/assets/images/homePage/learnMore.png" alt="" />
<!-- <div class="title">AiDA</div>
<div class="info"> <div class="info">
AI-based Interactive Design Assistant for Fashion AI-based Interactive Design Assistant for Fashion
</div> --> </div> -->
<!-- <div class="btn gallery_btn" @click="goLearnMore">Learn More</div> --> <!-- <div class="btn gallery_btn" @click="goLearnMore">Learn More</div> -->
</div> </div>
</div>
</div> </div>
</div>
</template> </template>
<script> <script >
import { import { defineComponent, toRefs, reactive, ref , nextTick,computed, onMounted, onBeforeUnmount } from "vue";
defineComponent, import { isEmail } from "@/tool/util";
toRefs, import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
reactive, import { Https } from "@/tool/https";
ref, import { Modal, message } from "ant-design-vue";
nextTick, import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
computed, import { useStore } from "vuex";
onMounted, import { setLang } from "@/tool/guide";
onBeforeUnmount import { useI18n } from "vue-i18n";
} from 'vue' import { useRouter } from 'vue-router';
import { isEmail } from '@/tool/util' import { gsap, TweenMax } from "gsap";
import { setCookie, getCookie, WriteCookie, clonAllCookie } from '@/tool/cookie' import { ScrollTrigger } from "gsap/ScrollTrigger";
import { Https } from '@/tool/https'
import { Modal, message } from 'ant-design-vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { useStore } from 'vuex'
import { setLang } from '@/tool/guide'
import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router'
import { gsap, TweenMax } from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
export default defineComponent({ export default defineComponent({
components: {}, components: {
setup() { },
const {t, locale} = useI18n() setup(){
const store = useStore() const store = useStore();
const router = useRouter() const router = useRouter();
let registerModel = ref() let registerModel = ref()
let data = reactive({}) let data = reactive({
})
const isChinese = ref(false) let userDetail = computed(()=>{
const handleChangeLanguage = () => { return store.state.UserHabit.userDetail
isChinese.value = !isChinese.value })
const lang = isChinese.value ? 'CHINESE_SIMPLIFIED' : 'ENGLISH' let setLogin = ()=>{
localStorage.setItem('loginLanguage', lang) router.push("/login");
locale.value = lang }
} let logout = ()=>{
let userInfo = store.state.UserHabit.userDetail;
let userDetail = computed(() => { let data = {
return store.state.UserHabit.userDetail userId: userInfo?.userId,
}) };
let setLogin = () => { store.commit('createDetail')
router.push('/login') store.commit('createProbject')
} if(!data.userId) return
let logout = () => { Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
let userInfo = store.state.UserHabit.userDetail clonAllCookie();
let data = { });
userId: userInfo?.userId }
} let goHome = ()=>{
store.commit('createDetail') router.push('/home');
store.commit('createProbject') }
if (!data.userId) return let time
Https.axiosPost(Https.httpUrls.accountLogout, data).then(rv => { let updataIsMoblie = ()=>{
clonAllCookie() clearTimeout(time)
}) time = setTimeout(()=>{
} },500)
let goHome = () => { }
router.push('/home') const signUp = ()=>{
} router.push('/register');
let time }
let updataIsMoblie = () => { const goLearnMore = ()=>{
clearTimeout(time) window.open('https://www.aida.com.hk/Square/works', '_blank');
time = setTimeout(() => {}, 500) }
} onMounted(()=>{
const signUp = () => { window.addEventListener('resize',updataIsMoblie)
router.push('/register') })
} onBeforeUnmount(() => {
const goLearnMore = () => { window.removeEventListener('resize', updataIsMoblie);
window.open('https://www.aida.com.hk/Square/works', '_blank') });
} return {
onMounted(() => { ...toRefs(data),
window.addEventListener('resize', updataIsMoblie) userDetail,
// 初始化语言设置 setLogin,
const savedLang = localStorage.getItem('loginLanguage') registerModel,
if (savedLang) { logout,
isChinese.value = savedLang === 'CHINESE_SIMPLIFIED' goHome,
locale.value = savedLang signUp,
} goLearnMore,
}) }
onBeforeUnmount(() => { },
window.removeEventListener('resize', updataIsMoblie) data() {
}) return {
return { };
...toRefs(data), },
userDetail, watch: {
setLogin, // credits.value(newVal,oldVal){
registerModel, // console.log(String(newVal).length);
logout, // }
goHome, },
signUp, mounted() {
goLearnMore, // nextTick().then(()=>{
isChinese, // let dom = document.querySelector('.homeRecommend_content_body')
handleChangeLanguage, // let codeTween = document.querySelectorAll('.homeRecommend_content_body_recommend .content_body_img')
t // let codeTweenText = document.querySelectorAll('.homeRecommend_content_body_recommend .content_body_text')
} // for (let index = 0; index < codeTween.length; index++) {
}, // gsap.from(codeTween[index],.5, {scale:.6 },);
data() { // gsap.registerPlugin(ScrollTrigger);
return {} // let tl1 = gsap.timeline();
}, // tl1.to(codeTween[index],1, {y:'-30px',opacity:0},)
watch: { // ScrollTrigger.create({
// credits.value(newVal,oldVal){ // trigger: codeTween[index], // 触发器元素
// console.log(String(newVal).length); // start: "top 0%", // 滚动触发器的起始滚动位置
// } // end: '200% 20%', // 滚动触发器的结束滚动位置
}, // // markers: true, // 开启标注功能
mounted() { // scrub: true,
// nextTick().then(()=>{ // animation:tl1,
// let dom = document.querySelector('.homeRecommend_content_body') // scroller:dom,//设置指定元素为滚动依据
// let codeTween = document.querySelectorAll('.homeRecommend_content_body_recommend .content_body_img') // scrub:2,
// let codeTweenText = document.querySelectorAll('.homeRecommend_content_body_recommend .content_body_text') // });
// for (let index = 0; index < codeTween.length; index++) { // }
// gsap.from(codeTween[index],.5, {scale:.6 },); // gsap.registerPlugin(ScrollTrigger);
// gsap.registerPlugin(ScrollTrigger); // let tl1 = gsap.timeline();
// let tl1 = gsap.timeline(); // tl1.from(codeTweenText,1, {'margin-top':'30px',opacity:1},)
// tl1.to(codeTween[index],1, {y:'-30px',opacity:0},) // ScrollTrigger.create({
// ScrollTrigger.create({ // trigger: codeTweenText, // 触发器元素
// trigger: codeTween[index], // 触发器元素 // start: "top 0%", // 滚动触发器的起始滚动位置
// start: "top 0%", // 滚动触发器的起始滚动位置 // end: '200% 20%', // 滚动触发器的结束滚动位置
// end: '200% 20%', // 滚动触发器的结束滚动位置 // // markers: true, // 开启标注功能
// // markers: true, // 开启标注功能 // scrub: true,
// scrub: true, // animation:tl1,
// animation:tl1, // scroller:dom,//设置指定元素为滚动依据
// scroller:dom,//设置指定元素为滚动依据 // scrub:2,
// scrub:2, // });
// }); // })
// } },
// gsap.registerPlugin(ScrollTrigger); methods: {
// let tl1 = gsap.timeline(); turnToWindow(url) {
// tl1.from(codeTweenText,1, {'margin-top':'30px',opacity:1},) window.open(url);
// ScrollTrigger.create({ },
// trigger: codeTweenText, // 触发器元素 },
// start: "top 0%", // 滚动触发器的起始滚动位置 });
// end: '200% 20%', // 滚动触发器的结束滚动位置
// // markers: true, // 开启标注功能
// scrub: true,
// animation:tl1,
// scroller:dom,//设置指定元素为滚动依据
// scrub:2,
// });
// })
},
methods: {
turnToWindow(url) {
window.open(url)
}
}
})
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.homeRecommend_max { .homeRecommend_max{
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
position: relative; position: relative;
@media (max-width: 768px) { @media (max-width: 768px) {
flex-direction: column; flex-direction: column;
} }
> .header { > .header{
padding: 3.2rem 4rem; padding: 3.2rem 4rem;
z-index: 2; z-index: 2;
margin-left: auto; margin-left: auto;
display: flex;
column-gap: 2rem;
align-items: center;
position: absolute;
right: 0;
@media (max-width: 768px) {
position: relative;
justify-content: flex-end;
width: 100%;
padding: 0.7rem 1.4rem;
margin-left: auto;
background-color: #fff;
}
> .homeRecommend_logo {
display: none;
@media (max-width: 768px) {
display: block;
height: 2.5rem;
margin-right: auto;
}
}
.language_btn {
color: #fff;
cursor: pointer;
font-size: 2.5rem;
>div {
display: flex; display: flex;
>i{ align-items: center;
display: flex; position: absolute;
align-items: center; right: 0;
font-size: 2.5rem; @media (max-width: 768px) {
margin-right: .7rem; position: relative;
justify-content: space-between;
width: 100%;
padding: .7rem 1.4rem;
margin-left: auto;
background-color: #fff;
} }
} > .homeRecommend_logo{
@media (max-width: 768px) { display: none;
font-size: 1.5rem; @media (max-width: 768px) {
color: #000; display: block;
>div { height: 2.5rem;
>i{
font-size: 1.5rem;
margin-right: .7rem;
} }
} }
} > .gallery_btn{
} margin-right: 2rem;
> .gallery_btn { border: none;
// margin-right: 2rem; font-size: 1.7rem;
border: none; width: 13rem;
font-size: 1.7rem; line-height: 6rem;
width: 13rem; font-weight: 500;
line-height: 6rem; border-radius: 4rem;
font-weight: 500; &:last-child{
border-radius: 4rem; margin-right: 0;
&:last-child { }
margin-right: 0; &.login{
} @media (max-width: 768px) {
&.login { display: none;
@media (max-width: 768px) { }
display: none; }
} @media (max-width: 768px) {
} font-size: .72rem;
@media (max-width: 768px) { width: 5.2rem;
font-size: 0.72rem; line-height: 2.4rem;
width: 5.2rem; padding: 0;
line-height: 2.4rem;
padding: 0; }
} }
}
} }
> .content { > .content{
flex: 1; flex: 1;
position: relative; position: relative;
> .bg { > .bg{
width: 100%; width: 100%;
height: 100%; height: 100%;
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -50%); transform: translate(-50%,-50%);
object-fit: cover; object-fit: cover;
display: none; display: none;
&.pc { &.pc{
@media (min-width: 768px) { @media (min-width: 768px) {
display: block; display: block;
} }
} }
&.mobile { &.mobile{
@media (max-width: 768px) { @media (max-width: 768px) {
display: block; display: block;
} }
} }
} }
> .title { > .title{
display: none; display: none;
position: absolute; position: absolute;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -50%); transform: translate(-50%,-50%);
text-align: center; text-align: center;
@media (max-width: 768px) { @media (max-width: 768px) {
margin-top: -2rem; margin-top: -2rem;
> img { > img{
width: 17rem; width: 17rem;
} }
> .text { > .text{
width: max-content; width: max-content;
text-align: center; text-align: center;
} }
font-size: 1.8rem; font-size: 1.8rem;
color: #fff; color: #fff;
display: block; display: block;
} }
} }
> .beForm { > .beForm{
position: absolute; position: absolute;
font-size: 2.1rem; font-size: 2.1rem;
bottom: 10rem; bottom: 10rem;
left: 10rem; left: 10rem;
@media (max-width: 768px) { @media (max-width: 768px) {
display: block; display: block;
left: 50%; left: 50%;
color: #fff; color: #fff;
bottom: 1rem; bottom: 1rem;
font-size: 0.8rem; font-size: .8rem;
text-align: center; text-align: center;
transform: translateX(-50%); transform: translateX(-50%);
} }
} }
> .learnMore { > .learnMore{
position: absolute; position: absolute;
bottom: 29rem; bottom: 29rem;
right: 10rem; right: 10rem;
width: 53.4rem; width: 53.4rem;
text-align: right; text-align: right;
z-index: 2; z-index: 2;
> img { > img{
height: 19.5rem; height: 19.5rem;
margin-bottom: 2rem; margin-bottom: 2rem;
display: none; display: none;
} }
// > .title{ // > .title{
// margin-bottom: .8rem; // margin-bottom: .8rem;
// font-size: 11.8rem; // font-size: 11.8rem;
// font-weight: 500; // font-weight: 500;
// } // }
// > .info{ // > .info{
// font-family: 'pingfang_regular'; // font-family: 'pingfang_regular';
// font-size: 2.8rem; // font-size: 2.8rem;
// font-weight: 400; // font-weight: 400;
// margin-bottom: 2rem; // margin-bottom: 2rem;
// } // }
> .btn { > .btn{
line-height: 6rem; line-height: 6rem;
width: 18rem; width: 18rem;
font-size: 2rem; font-size: 2rem;
font-weight: 500; font-weight: 500;
} }
} }
// > .left,> .right{ // > .left,> .right{
// height: 100%; // height: 100%;
// display: flex; // display: flex;
// display: none; // display: none;
// } // }
// > .left{ // > .left{
// width: 45%; // width: 45%;
// align-items: center; // align-items: center;
// justify-content: center; // justify-content: center;
// position: relative; // position: relative;
// > .logoBox{ // > .logoBox{
// height: 4rem; // height: 4rem;
// position: absolute; // position: absolute;
// left: 2rem; // left: 2rem;
// top: 2rem; // top: 2rem;
// img{ // img{
// height: 100%; // height: 100%;
// margin-left: 2rem; // margin-left: 2rem;
// } // }
// .codeCreatelogo{ // .codeCreatelogo{
// cursor: pointer; // cursor: pointer;
// } // }
// } // }
// > .text{ // > .text{
// width: 68rem; // width: 68rem;
// > .title{ // > .title{
// font-size: 6.4rem; // font-size: 6.4rem;
// font-weight: 900; // font-weight: 900;
// line-height: 1.2; // line-height: 1.2;
// margin-bottom: 3.2rem; // margin-bottom: 3.2rem;
// p{ // p{
// margin-bottom: 0; // margin-bottom: 0;
// } // }
// } // }
// > .info{ // > .info{
// font-size: 2.4rem; // font-size: 2.4rem;
// margin-bottom: 1.6rem; // margin-bottom: 1.6rem;
// line-height: 1.2; // line-height: 1.2;
// > span{ // > span{
// color: #0070c9; // color: #0070c9;
// cursor: pointer; // cursor: pointer;
// &:hover{ // &:hover{
// text-decoration: underline; // text-decoration: underline;
// } // }
// } // }
// } // }
// > .continue{ // > .continue{
// font-size: 2.4rem; // font-size: 2.4rem;
// > i{ // > i{
// margin-left: 1rem; // margin-left: 1rem;
// } // }
// } // }
// } // }
// } // }
// > .right{ // > .right{
// position: relative; // position: relative;
// width: 55%; // width: 55%;
// background: #d7d6d5; // background: #d7d6d5;
// display: flex; // display: flex;
// align-items: center; // align-items: center;
// justify-content: flex-end; // justify-content: flex-end;
// > img{ // > img{
// object-fit: cover; // object-fit: cover;
// } // }
// > .model{ // > .model{
// height: 100%; // height: 100%;
// position: absolute; // position: absolute;
// left: 0; // left: 0;
// } // }
// > .text{ // > .text{
// height: 45rem; // height: 45rem;
// text-align: right; // text-align: right;
// } // }
// } // }
} }
} }
</style> </style>

View File

@@ -9,7 +9,7 @@
:placeholder="t('batchGeneration.Search')" :placeholder="t('batchGeneration.Search')"
@search="searchHistoryList" @search="searchHistoryList"
/> />
<div class="history_table_content" ref="historyTable" @click.stop> <div class="history_table_content" ref="historyTable">
<a-config-provider :locale="tableLocale"> <a-config-provider :locale="tableLocale">
<a-table <a-table
row-class-name="history_table_row" row-class-name="history_table_row"
@@ -28,14 +28,6 @@
}" }"
> >
<template #bodyCell="{ column, text, record, index }"> <template #bodyCell="{ column, text, record, index }">
<div class="update_name" v-if="column?.key === 'collectionName'">
<div v-if="updateName.selectIndex === index">
<input type="text" v-model="updateName.currentName">
</div>
<div v-show="updateName.selectIndex !== index">{{ record.name }}</div>
<i @click="setUpdateName(record.name,index)" v-show="updateName.selectIndex !== index" class="fi fi-rr-edit"></i>
<i @click="submitUpdateName" v-show="updateName.selectIndex === index" class="fi fi-sr-check-circle"></i>
</div>
<div class="operate_list" v-if="column?.Operations"> <div class="operate_list" v-if="column?.Operations">
<div <div
class="operate_item" class="operate_item"
@@ -221,39 +213,6 @@ export default defineComponent({
selectCode: selectCode, selectCode: selectCode,
designType: '' designType: ''
} }
const updateName = ref({
currentName:'',
selectIndex:-1,
})
const clearUpdateName = () => {
updateName.value.currentName = ''
updateName.value.selectIndex = -1
document.removeEventListener('click',clearUpdateName)
}
const setUpdateName = (name,index) => {
updateName.value.currentName = name
updateName.value.selectIndex = index
document.addEventListener('click',clearUpdateName)
}
const submitUpdateName = ()=>{
if(updateName.value.currentName === collectionList.value[updateName.value.selectIndex].name){
clearUpdateName()
return
}
if(updateName.value.selectIndex != -1){
if(!updateName.value.currentName)return message.info(t('HistoryPage.jsContent8'))
let data = {
id: collectionList.value[updateName.value.selectIndex].id, //library名字
name: updateName.value.currentName //history id
}
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate, data)
.then(rv => {
collectionList.value[updateName.value.selectIndex].name = updateName.value.currentName
clearUpdateName()
})
.catch(res => {})
}
}
provide('type', type) provide('type', type)
return { return {
store, store,
@@ -273,10 +232,7 @@ export default defineComponent({
tableLocale, tableLocale,
projectSetting, projectSetting,
tableSearchBar, tableSearchBar,
currentProjectPath, currentProjectPath
updateName,
setUpdateName,
submitUpdateName,
} }
}, },
data() { data() {
@@ -652,7 +608,6 @@ export default defineComponent({
customTableRow(record: any) { customTableRow(record: any) {
return { return {
onDblclick: () => { onDblclick: () => {
if(this.updateName.selectIndex !== -1)return
this.retrieveHome(record) this.retrieveHome(record)
} }
} }
@@ -771,11 +726,6 @@ export default defineComponent({
} }
:deep(.ant-table-tbody > tr:hover) { :deep(.ant-table-tbody > tr:hover) {
background: #ededed; background: #ededed;
.update_name{
> .fi-rr-edit{
display: flex;
}
}
} }
:deep(.ant-table-tbody > tr > td) { :deep(.ant-table-tbody > tr > td) {
border: none; border: none;
@@ -830,26 +780,7 @@ export default defineComponent({
color: #000; color: #000;
} }
} }
.update_name{
display: flex;
align-items: center;
> div{
> input{
width: 12rem;
border-radius: .8rem;
padding-left: 1.5rem;
}
}
> i{
margin-left: 1.5rem;
cursor: pointer;
font-size: 2rem;
display: flex;
}
> .fi-rr-edit{
display: none;
}
}
.operate_list { .operate_list {
display: flex; display: flex;
align-items: center; align-items: center;
@@ -857,7 +788,7 @@ export default defineComponent({
padding: 0 1rem; padding: 0 1rem;
.operate_item { .operate_item {
// font-size: 1.4rem; font-size: 1.6rem;
font-family: Roboto; font-family: Roboto;
font-weight: 400; font-weight: 400;
color: #007ee5; color: #007ee5;

View File

@@ -15,21 +15,21 @@
<div class="Text" v-show="!loginType"> <div class="Text" v-show="!loginType">
<img src="@/assets/images/homePage/aidaIcon.png" alt=""> <img src="@/assets/images/homePage/aidaIcon.png" alt="">
<div class="title"> <div class="title">
<p>{{ t('Login.Welcome') }} <span>{{ t('Login.AiDA') }}</span></p> <p>Welcome to <span>AiDA</span></p>
</div> </div>
<div class="info"> <div class="info">
{{ t('Login.Slogan') }} AiDA, a first-to-market technology that empowers fashion designers, based on their creative inspirations, to work with AI to create original designs.
</div> </div>
</div> </div>
<div class="loginBox" :class="{'active':loginType}"> <div class="loginBox" :class="{'active':loginType}">
<div class="selectType" v-show="!loginType"> <div class="selectType" v-show="!loginType">
<div class="text">{{ t('Login.LoginMethod') }}</div> <div class="text">Continue with one of these:</div>
<div class="typeList"> <div class="typeList">
<div class="gallery_btn" @click="setLoginType('personal')"> <div class="gallery_btn" @click="setLoginType('personal')">
{{ t('Login.Individual') }} Individual
</div> </div>
<div class="gallery_btn" @click="setLoginType('school')"> <div class="gallery_btn" @click="setLoginType('school')">
{{ t('Login.Academic') }} Academic
</div> </div>
<!-- <div class="gallery_btn" @click="setLoginType('enterprise')"> <!-- <div class="gallery_btn" @click="setLoginType('enterprise')">
Enterprise Enterprise
@@ -40,9 +40,9 @@
<div class="title"> <div class="title">
<i class="fi fi-br-angle-left" @click="loginBack"></i> <i class="fi fi-br-angle-left" @click="loginBack"></i>
<!-- <i class="fi fi-rr-arrow-left" @click="()=>loginType = ''"></i> --> <!-- <i class="fi fi-rr-arrow-left" @click="()=>loginType = ''"></i> -->
<span>{{ t('Login.LogonToAiDA') }}</span> <span>Log on to AiDA 3.1</span>
</div> </div>
<div class="info" v-show="!loginType">{{ t('Login.Infomation') }}</div> <div class="info" v-show="!loginType">Please fill your information below</div>
<personal ref="personal" v-if="loginType == 'personal'" v-model:isMask="isMask"></personal> <personal ref="personal" v-if="loginType == 'personal'" v-model:isMask="isMask"></personal>
<school ref="school" v-if="loginType == 'school'"></school> <school ref="school" v-if="loginType == 'school'"></school>
<enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise> <enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise>
@@ -90,17 +90,9 @@ export default defineComponent({
props: {}, props: {},
emits: [], emits: [],
setup(props, { emit }) { setup(props, { emit }) {
const {t,locale} = useI18n()
const store = useStore(); const store = useStore();
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
// 通过 provide 传递 i18n 给子组件
provide('i18n', {
t,
locale
})
const loginData = reactive({ const loginData = reactive({
loginType: "", loginType: "",
isMask: false, isMask: false,
@@ -145,7 +137,7 @@ export default defineComponent({
store.commit("upUserDetail", userid); store.commit("upUserDetail", userid);
if (window.innerWidth < 768) { if (window.innerWidth < 768) {
message.info( message.info(
t('Login.Device') "If you need to design, please log in using an iPad or computer."
); );
turnToHomePage("/Square"); turnToHomePage("/Square");
} else { } else {
@@ -182,10 +174,6 @@ export default defineComponent({
if (data?.state == "weiXin") { if (data?.state == "weiXin") {
wechatLogin(data); wechatLogin(data);
} }
const savedLang = localStorage.getItem('loginLanguage')
if (savedLang) {
locale.value = savedLang
}
}) })
return { return {
...toRefs(dataDom), ...toRefs(dataDom),
@@ -193,10 +181,11 @@ export default defineComponent({
setLoginType, setLoginType,
loginBack, loginBack,
toBack, toBack,
t,
locale
}; };
}, },
provide() {
return {};
},
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@@ -1,35 +1,24 @@
<template> <template>
<div class="homeRecommend_max openSignUp"> <div class="homeRecommend_max openSignUp">
<header class="homeRecommend_heade"> <header class="homeRecommend_heade">
<div class="homeRecommend_right_content"> <div class="homeRecommend_right_content">
<div class="homeRecommend_user_content"> <div class="homeRecommend_user_content">
<!-- <img <!-- <img
class="homeRecommend_logo" class="homeRecommend_logo"
@click="turnToNewPage('https://www.aidlab.hk/en/')" @click="turnToNewPage('https://www.aidlab.hk/en/')"
src="@/assets/images/loginPage/aida_logo.png" src="@/assets/images/loginPage/aida_logo.png"
/> --> /> -->
<!-- <img <!-- <img
class="homeRecommend_logo" class="homeRecommend_logo"
@click="turnToNewPage('https://www.aidlab.hk/en/')" @click="turnToNewPage('https://www.aidlab.hk/en/')"
src="@/assets/images/loginPage/aida_Logo_login.png" src="@/assets/images/loginPage/aida_Logo_login.png"
/> --> /> -->
<div class="mobile_logo_group" v-if="isMoblie" @click="turnToNewPage('/')"> <img
<img class="homeRecommend_logo"
class="homeRecommend_logo aid" @click="turnToNewPage('/')"
src="@/assets/images/loginPage/aida_logo.png" src="@/assets/images/homePage/aidaIcon.png"
/> />
<img <!-- <div
class="homeRecommend_logo code"
src="@/assets/images/loginPage/aida_Logo_login.png"
/>
</div>
<img
v-else
class="homeRecommend_logo"
@click="turnToNewPage('/')"
src="@/assets/images/homePage/aidaIcon.png"
/>
<!-- <div
class="login_footer_item_text" class="login_footer_item_text"
@click="turnToWindow( @click="turnToWindow(
'https://code-create.com.hk/aida-terms-and-conditions/' 'https://code-create.com.hk/aida-terms-and-conditions/'
@@ -45,321 +34,282 @@
> >
Privacy Policy Privacy Policy
</div> --> </div> -->
</div> </div>
</div> </div>
<!-- <div class="homeRecommend_right"> <!-- <div class="homeRecommend_right">
<div class="gallery_btn" v-if="userDetail.systemList.indexOf(1) > -1 && !isMoblie" @click="goHome">Home</div> <div class="gallery_btn" v-if="userDetail.systemList.indexOf(1) > -1 && !isMoblie" @click="goHome">Home</div>
<div class="gallery_btn white" v-if="userDetail.systemUser != -1" @click="logout">log off</div> <div class="gallery_btn white" v-if="userDetail.systemUser != -1" @click="logout">log off</div>
</div> --> </div> -->
<div class="homeRecommend_right"> <div class="homeRecommend_right">
<!-- <div class="homeRecommend_right" v-if="userDetail.systemUser == -1"> --> <!-- <div class="homeRecommend_right" v-if="userDetail.systemUser == -1"> -->
<div class="cutLangue"> <div class="cutLangue">
<div @click="() => (isSelectSuccessively = !isSelectSuccessively)"> <div @click="()=>isSelectSuccessively = !isSelectSuccessively">
<i class="fi fi-rr-globe"></i> <i class="fi fi-rr-globe"></i>
<!-- <a-switch :checked="isSelectSuccessively" @click="()=>isSelectSuccessively = !isSelectSuccessively" checked-children="EN" un-checked-children="CN"/> --> <!-- <a-switch :checked="isSelectSuccessively" @click="()=>isSelectSuccessively = !isSelectSuccessively" checked-children="EN" un-checked-children="CN"/> -->
{{ isSelectSuccessively ? 'CN' : 'EN' }} {{ isSelectSuccessively? 'CN':'EN'}}
</div> </div>
</div> </div>
<div class="gallery_btn" @click="setLogin"> <div class="gallery_btn" @click="setLogin">Login</div>
{{ isSelectSuccessively ? '登录' : 'Login' }} </div>
</div> </header>
</div> <signUp ref="signUp" :isSelectSuccessively="isSelectSuccessively"></signUp>
</header>
<div class="content">
<signUp ref="signUp" :isSelectSuccessively="isSelectSuccessively"></signUp>
</div> </div>
</div>
</template> </template>
<script> <script >
import { import { defineComponent, toRefs, reactive, ref , nextTick,computed, onMounted, onBeforeUnmount } from "vue";
defineComponent, import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
toRefs, import { Https } from "@/tool/https";
reactive, import { useStore } from "vuex";
ref, import { useRouter } from 'vue-router';
nextTick,
computed,
onMounted,
onBeforeUnmount,
watch
} from 'vue'
import { setCookie, getCookie, WriteCookie, clonAllCookie } from '@/tool/cookie'
import { Https } from '@/tool/https'
import { useStore } from 'vuex'
import { useRouter } from 'vue-router'
import signUp from '@/component/mainPage/signUp/index.vue' import signUp from '@/component/mainPage/signUp/index.vue'
export default defineComponent({ export default defineComponent({
components: { components: {
signUp signUp,
},
setup() {
const store = useStore()
const router = useRouter()
let data = reactive({
homeRecommendMax: null,
signUp: null,
isSelectSuccessively: false
})
let isMoblie = ref(false)
let userDetail = computed(() => {
return store.state.UserHabit.userDetail
})
let setLogin = () => {
router.push('/login')
}
let logout = () => {
let userInfo = store.state.UserHabit.userDetail
let data = {
userId: userInfo?.userId
}
store.commit('createDetail')
store.commit('createProbject')
if (!data.userId) return
Https.axiosPost(Https.httpUrls.accountLogout, data).then(rv => {
clonAllCookie()
})
}
let goHome = () => {
router.push('/home')
}
let time
let updataIsMoblie = () => {
clearTimeout(time)
time = setTimeout(() => {
if (window.innerWidth < 768) {
isMoblie.value = true
} else {
isMoblie.value = false
}
}, 500)
}
watch(
() => data.isSelectSuccessively,
val => {
let str = ''
if (val) {
str = 'CHINESE_SIMPLIFIED'
} else {
str = 'ENGLISH'
}
localStorage.setItem('loginLanguage', str)
}
)
onMounted(() => {
updataIsMoblie()
const savedLang = localStorage.getItem('loginLanguage')
if (savedLang) {
data.isSelectSuccessively = savedLang === 'CHINESE_SIMPLIFIED'
}
window.addEventListener('resize', updataIsMoblie)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', updataIsMoblie)
})
return {
...toRefs(data),
userDetail,
setLogin,
logout,
goHome,
isMoblie
}
},
data() {
return {}
},
watch: {
// credits.value(newVal,oldVal){
// console.log(String(newVal).length);
// }
},
mounted() {},
methods: {
turnToNewPage(url) {
window.open(url)
}, },
turnToWindow(url) { setup(){
window.open(url) const store = useStore();
} const router = useRouter();
} let data = reactive({
}) homeRecommendMax:null,
signUp:null,
isSelectSuccessively:false,
})
let isMoblie = ref(false)
let userDetail = computed(()=>{
return store.state.UserHabit.userDetail
})
let setLogin = ()=>{
router.push("/login");
}
let logout = ()=>{
let userInfo = store.state.UserHabit.userDetail;
let data = {
userId: userInfo?.userId,
};
store.commit('createDetail')
store.commit('createProbject')
if(!data.userId) return
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
clonAllCookie();
});
}
let goHome = ()=>{
router.push('/home');
}
let time
let updataIsMoblie = ()=>{
clearTimeout(time)
time = setTimeout(()=>{
if(window.innerWidth < 768){
isMoblie.value = true
}else{
isMoblie.value = false
}
},500)
}
onMounted(()=>{
window.addEventListener('resize',updataIsMoblie)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', updataIsMoblie);
});
return {
...toRefs(data),
userDetail,
setLogin,
logout,
goHome,
isMoblie,
}
},
data() {
return {
};
},
watch: {
// credits.value(newVal,oldVal){
// console.log(String(newVal).length);
// }
},
mounted() {
},
methods: {
turnToNewPage(url) {
window.open(url);
},
turnToWindow(url) {
window.open(url);
},
},
});
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.homeRecommend_max { .homeRecommend_max{
position: relative; position: relative;
display: flex; display: flex;
height: 100%; height: 100%;
flex-direction: column; flex-direction: column;
&.openSignUp {
.homeRecommend_heade { &.openSignUp{
position: relative; .homeRecommend_heade{
background: #fff !important; position: relative;
.login_footer_item_text { background: #fff !important;
display: block; .login_footer_item_text{
} display: block;
} }
}
.homeRecommend_content_adminTop {
display: none; .homeRecommend_content_adminTop{
} display: none;
} }
}
} }
.homeRecommend_heade { .homeRecommend_heade {
display: flex;
justify-content: space-between;
// padding: 0 30px;
padding: 2rem 4rem;
width: 100%;
// height: 7rem;
flex-shrink: 0;
// background: rgba(255, 255, 255, 0.2);
// border-bottom: 0.1rem solid rgba(3, 3, 3, 0.1);
position: absolute;
align-items: center;
z-index: 2;
border-bottom: 1px solid #ddd;
@media (max-width: 768px) {
z-index: 1000;
padding: 1.4rem 2.1rem;
}
.homeRecommend_right {
width: 33%;
display: flex; display: flex;
justify-content: flex-end; justify-content: space-between;
// padding: 0 30px;
padding: 2rem 4rem;
width: 100%;
// height: 7rem;
flex-shrink: 0;
// background: rgba(255, 255, 255, 0.2);
// border-bottom: 0.1rem solid rgba(3, 3, 3, 0.1);
position: absolute;
align-items: center; align-items: center;
.gallery_btn { z-index: 2;
// color: #000; border-bottom: 1px solid #DDD;
// background: #fff; @media (max-width: 768px) {
// border: 2px solid #000; z-index: 1000;
// margin-left: 2rem; padding: 1.4rem 2.1rem;
width: 13rem; }
text-align: center; .homeRecommend_right{
@media (max-width: 768px) { width: 33%;
width: 5.2rem; display: flex;
padding: 0; justify-content: flex-end;
display: none; align-items: center;
} .gallery_btn{
&.gallery_btn:nth-child(1) { // color: #000;
margin-right: 3rem; // background: #fff;
@media (max-width: 768px) { // border: 2px solid #000;
margin-right: 1.8rem; // margin-left: 2rem;
} width: 13rem;
} text-align: center;
@media (max-width: 768px) {
width: 5.2rem;
padding: 0;
display: none;
}
&.gallery_btn:nth-child(1){
margin-right: 3rem;
@media (max-width: 768px) {
margin-right: 1.8rem;
}
}
}
> .cutLangue{
display: flex;
align-items: center;
margin-right: 4rem;
@media (max-width: 768px) {
margin-right: 2.8rem;
}
> i{
font-size: 5rem;
}
> div{
cursor: pointer;
display: flex;
align-items: center;
@media (max-width: 768px) {
font-size: 1.5rem;
}
> i{
font-size: 3.5rem;
display: flex;
margin-right: 1rem;
@media (max-width: 768px) {
margin-right: .7rem;
font-size: 2rem;
}
}
}
> button{
height: 4rem;
min-width: 8rem;
}
> .text{
margin-right: 1rem;
}
}
}
.homeRecommend_logo {
// width: 14.4rem;
height: 8rem;
// height: 4rem;
margin-top: 0;
margin-right: 2rem;
@media (max-width: 768px) {
// height: 1.76rem;
height: 4.5rem;
margin-right: .9rem;
}
// &:last-child{
// margin-right: 2rem;
// }
} }
> .cutLangue { .login_footer_item_text{
display: flex; // margin-left: 5rem;
align-items: center; margin-right: 2rem;
margin-right: 4rem; font-size: 1.6rem;
@media (max-width: 768px) { text-decoration: underline;
margin-right: 2.8rem; display: none;
} cursor: pointer;
> i { }
font-size: 5rem; .homeRecommend_right_content {
} top: 0;
> div { left: 0;
cursor: pointer;
display: flex; display: flex;
align-items: center; width: 40%;
@media (max-width: 768px) { height: 100%;
font-size: 1.5rem; align-items: center;
overflow: hidden;
.homeRecommend_user_content {
display: flex;
align-items: center;
position: relative;
height: 3.7rem;
&.marLeft2{
margin-left: 2rem;
}
.username {
font-size: 1.8rem;
color: #1a1a1a;
margin: 0 0.8rem;
font-weight: 900;
span{
margin: .7rem;
}
}
.icon-xiala {
font-size: 1.4rem;
cursor: pointer;
transition: .3s all;
}
.icon_rotate {
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
animation-direction: 0.5s;
}
} }
> i {
font-size: 3.5rem;
display: flex;
margin-right: 1rem;
@media (max-width: 768px) {
margin-right: 0.7rem;
font-size: 2rem;
}
}
}
> button {
height: 4rem;
min-width: 8rem;
}
> .text {
margin-right: 1rem;
}
} }
}
.homeRecommend_logo {
height: 8rem;
margin-top: 0;
margin-right: 2rem;
@media (max-width: 768px) {
// height: 1.76rem;
height: 4.5rem;
margin-right: 0.9rem;
}
}
.login_footer_item_text {
// margin-left: 5rem;
margin-right: 2rem;
font-size: 1.6rem;
text-decoration: underline;
display: none;
cursor: pointer;
}
.homeRecommend_right_content {
top: 0;
left: 0;
display: flex;
width: 40%;
height: 100%;
align-items: center;
overflow: hidden;
.homeRecommend_user_content {
display: flex;
align-items: center;
position: relative;
height: 3.7rem;
.mobile_logo_group {
display: flex;
align-items: center;
cursor: pointer;
column-gap: 0.9rem;
.homeRecommend_logo {
&.aid {
width: 8rem;
height: 1.75rem;
}
&.code {
width: 5rem;
height: 1.98rem;
}
}
}
&.marLeft2 {
margin-left: 2rem;
}
.username {
font-size: 1.8rem;
color: #1a1a1a;
margin: 0 0.8rem;
font-weight: 900;
span {
margin: 0.7rem;
}
}
.icon-xiala {
font-size: 1.4rem;
cursor: pointer;
transition: 0.3s all;
}
.icon_rotate {
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
animation-direction: 0.5s;
}
}
}
}
.content {
flex: 1;
overflow-y: auto;
} }
</style> </style>

View File

@@ -147,11 +147,11 @@ export default defineComponent({
} }
}); });
//储存所有用户id和name //储存所有用户id和name
// Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => { Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
// if (rv) { if (rv) {
// store.commit('setAllUserList',rv); store.commit('setAllUserList',rv);
// } }
// }) })
let allCountry = country let allCountry = country
sessionStorage.setItem('allCountry',JSON.stringify(allCountry)); sessionStorage.setItem('allCountry',JSON.stringify(allCountry));
// state.nowPageName = state.rootSubmenuKeys[0].name // state.nowPageName = state.rootSubmenuKeys[0].name