Translation and multi-language change

This commit is contained in:
jetli 2024-07-04 21:08:05 +08:00
parent b64cd3eb15
commit 02931a49de
8 changed files with 327 additions and 250 deletions

View File

@ -1,184 +1,180 @@
export default { export default {
About: '关于我们', About: '关于我们',
Contact: '联系我们', Contact: '联系我们',
Blogs: '日志博客', Blogs: '日志博客',
Career: '工作机会', Career: '工作机会',
Summary: '总结', Summary: '总结',
Status: '状态', Status: '状态',
Date: '日期', Date: '日期',
withdraw: '撤销', withdraw: '撤销',
edit: '编辑', edit: '编辑',
Quote: '报价', Quote: '报价',
Payment: '支付', Payment: '支付',
Duration: '历时', Duration: '历时',
days: '日', days: '日',
Update: '更新', Update: '更新',
From: '自从', From: '自从',
reject: '拒绝', reject: '拒绝',
accept: '接受', accept: '接受',
Note: '标注', Note: '标注',
Invite: '邀请', Invite: '邀请',
'Input E-mail to invite other': '输入电子邮件邀请他人', 'Input E-mail to invite other': '输入电子邮件邀请他人',
Submit: '提交', Submit: '提交',
Progress: '进程', Progress: '进程',
milestones: '里程碑', milestones: '里程碑',
Paid: '已付', Paid: '已付',
Milestone: '里程碑', Milestone: '里程碑',
Description: '描述', Description: '描述',
'Mark As Paid': '确认支付', 'Mark As Paid': '确认支付',
'Code Depot': '代码库', 'Code Depot': '代码库',
Commits: '代码提交', Commits: '代码提交',
'Last committer': '最近提交者', 'Last committer': '最近提交者',
'copy git url': '复制git链接', 'copy git url': '复制git链接',
Manage: '管理', Manage: '管理',
'TO BE IMPLEMENTED.': '待开发', 'TO BE IMPLEMENTED.': '待开发',
'Open issues': '待解决问题', 'Open issues': '待解决问题',
'Resolved issues': '已解决问题', 'Resolved issues': '已解决问题',
'Closed issues': '已关闭问题', 'Closed issues': '已关闭问题',
'Add Issue': '添加问题', 'Add Issue': '添加问题',
'New issue description': '新问题描述', 'New issue description': '新问题描述',
'Issue title': '问题标题', 'Issue title': '问题标题',
'Last updated': '最近更新', 'Last updated': '最近更新',
'Issue description': '问题描述', 'Issue description': '问题描述',
Resolve: '解决', Resolve: '解决',
Confirm: '确认', Confirm: '确认',
Reopen: '重开', Reopen: '重开',
fd_1: '匹配靠谱伙伴', // TODO: need to revisit Chinese logo fd_1: '匹配靠谱伙伴', // TODO: need to revisit Chinese logo
fd_2: '简化软件工程', // for fd_1 - fd_5 fd_2: '简化软件工程', // for fd_1 - fd_5
fd_3: '一站式服务', fd_3: '一站式服务',
fd_4: '只为追求更好', fd_4: '只为追求更好',
fd_5: '软件开发人才', fd_5: '软件开发人才',
'Email address': '电子邮箱', 'Email address': '电子邮箱',
'GET STARTED': '开始', 'GET STARTED': '开始',
'Please type in your email': '请填写你的邮箱地址', 'Please type in your email': '请填写你的邮箱地址',
'Your Freeleaps User ID': '设置你的用户ID', 'Your Freeleaps User ID': '设置你的用户ID',
SUBMIT: '提交', SUBMIT: '提交',
'Please type in your Freeleaps user ID': '请输入你的用户ID', 'Please type in your Freeleaps user ID': '请输入你的用户ID',
'Your password': '你的密码', 'Your password': '你的密码',
'Repeat password': '重复密码', 'Repeat password': '重复密码',
'SIGN UP': '注册', 'SIGN UP': '注册',
'Please type in your password': '请输入你的密码', 'Please type in your password': '请输入你的密码',
'The two passwords are not matched': '两次密码不一致', 'The two passwords are not matched': '两次密码不一致',
'Authenticaion Code Sent To Your Email': '验证码已发至你的邮箱', 'Authenticaion Code Sent To Your Email': '验证码已发至你的邮箱',
'SIGN IN': '登入', 'SIGN IN': '登入',
'Please type in the code sent to your email': '请输入发至你邮箱的验证码', 'Please type in the code sent to your email': '请输入发至你邮箱的验证码',
'Invalid auth code': '非法验证码', 'Invalid auth code': '非法验证码',
'invalid code': '验证码不正确', 'invalid code': '验证码不正确',
Password: '密码', Password: '密码',
'Forget password': '忘记密码', 'Forget password': '忘记密码',
'Invalid password': '密码错误', 'Invalid password': '密码错误',
'Read More': '了解更多', 'Read More': '了解更多',
'Total earning': '总收入', 'Total earning': '总收入',
Payable: '应付', Payable: '应付',
'Total spending': '总开销', 'Total spending': '总开销',
Deposit: '预存', Deposit: '预存',
Spending: '开销', Spending: '开销',
Updated: '更新', Updated: '更新',
Earining: '收入', Earining: '收入',
Login: '登入', Login: '登入',
'User ID': '用户名', 'User ID': '用户名',
Email: '电子邮箱', Email: '电子邮箱',
Mobile: '手机', Mobile: '手机',
Personal: '个人', Personal: '个人',
'Full name': '全名', 'Full name': '全名',
Portrait: '个人信息', Portrait: '个人信息',
'Self-intro': '个人介绍', 'Self-intro': '个人介绍',
'Earning now': '开始赚钱', 'Earning now': '开始赚钱',
Edit: '编辑', Edit: '编辑',
Templates: '模版', Templates: '模版',
Cancel: '取消', Cancel: '取消',
'I want to be a service provider and earn money': 'I want to be a service provider and earn money': '我要提供技术服务并且开始赚钱',
'我要提供技术服务并且开始赚钱', 'Stripe account onboarding is not completed.': 'Stripe账户未绑定.',
'Stripe account onboarding is not completed.': 'Stripe账户未绑定.', 'Upload QR code to receive payment': '上传二维码开始收款',
'Upload QR code to receive payment': '上传二维码开始收款', 'Have you linked your strip account?': '你是否已经绑定Stripe账户',
'Have you linked your strip account?': '你是否已经绑定Stripe账户', 'Visit Stripe': '访问Stripe',
'Visit Stripe': '访问Stripe', 'You are a service provider now. Please review your self-intro to reflect your skills to deliver projects.':
'You are a service provider now. Please review your self-intro to reflect your skills to deliver projects.': '你已经成为技术服务提供者。请更新个人信息以反映你的最新技能',
'你已经成为技术服务提供者。请更新个人信息以反映你的最新技能', Achievement: '成就',
Achievement: '成就', 'On Freeleaps': '在Freeleaps',
'On Freeleaps': '在Freeleaps', Connections: '联系',
Connections: '联系', Messages: '消息',
Messages: '消息', Credit: '信用',
Credit: '信用', '12-month spending': '过去12个月的开销',
'12-month spending': '过去12个月的开销', '3-month spending': '过去3个月的开销',
'3-month spending': '过去3个月的开销', Posted: '已发布',
Posted: '已发布', Accomplished: '已完成',
Accomplished: '已完成', Active: '活跃',
Active: '活跃', Ongoing: '正在进行',
Ongoing: '正在进行', '12-month earning': '过去12个月总收入',
'12-month earning': '过去12个月总收入', Delivered: '已交付',
Delivered: '已交付', 'Delivering time': '交付时间',
'Delivering time': '交付时间', 'Apply self-intro template': '应用个人简介模版',
'Apply self-intro template': '应用个人简介模版', Apply: '应用',
Apply: '应用', 'Empty conversation': '空对话',
'Empty conversation': '空对话', 'Please choose conversation': '请选择对话',
'Please choose conversation': '请选择对话', Name: '名字',
Name: '名字', 'Stay on Freeleaps': 'Freeleaps注册时长',
'Stay on Freeleaps': 'Freeleaps注册时长', 'Delivered projects': '已交付项目',
'Delivered projects': '已交付项目', 'Responding time': '响应时间',
'Responding time': '响应时间', 'Credit score': '信用分数',
'Credit score': '信用分数', 'Self intro': '个人简介',
'Self intro': '个人简介', Profile: '个人资料',
Profile: '个人资料', 'Project delivering time': '项目交付时间',
'Project delivering time': '项目交付时间', 'Top programming languages': '最常用变成语言',
'Top programming languages': '最常用变成语言', 'Weekly produced code': '每周产出代码',
'Weekly produced code': '每周产出代码', 'Ongoing projects': '进行中的项目',
'Ongoing projects': '进行中的项目', 'Invitations to requests': '发送邀请申请',
'Invitations to requests': '发送邀请申请', 'Active proposals': '活跃中的申请',
'Active proposals': '活跃中的申请', 'Expected hourly rate': '期待的小时收入',
'Expected hourly rate': '期待的小时收入', 'Code issue rate': '代码问题百分率',
'Code issue rate': '代码问题百分率', 'Online issue rate': '在线问题百分率',
'Online issue rate': '在线问题百分率', 'Issue fixing rate': '问题解决百分率',
'Issue fixing rate': '问题解决百分率', 'Issue fixing time': '问题修复时间',
'Issue fixing time': '问题修复时间', 'Action panel': '活跃面板',
'Action panel': '活跃面板', 'to my open requests': '进入我的开放请求',
'to my open requests': '进入我的开放请求', 'Once the request is selected, the provider will be invited to see the request.':
'Once the request is selected, the provider will be invited to see the request.': '一旦请求被选中,服务提供者将会被邀请并看到全部请求详情',
'一旦请求被选中,服务提供者将会被邀请并看到全部请求详情', Issuer: '发布者',
Issuer: '发布者', Request: '请求',
Request: '请求', Score: '分数',
Score: '分数', Propose: '提议',
Propose: '提议', Preview: '预览',
Preview: '预览', Download: '下载',
Download: '下载', 'Total payment': '总付款',
'Total payment': '总付款', 'Your proposal has been submitted!': '你的提案已经递交',
'Your proposal has been submitted!': '你的提案已经递交', 'You can check the status of proposals in': '你可以在此查看提案状态:',
'You can check the status of proposals in': '你可以在此查看提案状态:', 'My work.': '我的工作',
'My work.': '我的工作', 'Copy from existing proposals': '从现有提案中拷贝',
'Copy from existing proposals': '从现有提案中拷贝', Copy: '拷贝',
Copy: '拷贝', 'Apply proposal template': '应用提案模版',
'Apply proposal template': '应用提案模版', Proposal: '提案',
Proposal: '提案', Milestones: '里程碑',
Milestones: '里程碑', Notes: '标注',
Notes: '标注', 'Add Milestones': '添加里程碑',
'Add Milestones': '添加里程碑', 'Total milestones': '总里程碑',
'Total milestones': '总里程碑', 'Total duration': '总历时',
'Total duration': '总历时', 'Upload file': '上传文件',
'Upload file': '上传文件', Back: '后退',
Back: '后退', 'Issue Request': '问题请求',
'Issue Request': '问题请求', 'pm-1': "This is the second item's accordion body.",
'pm-1': "This is the second item's accordion body.", 'pm-2':
'pm-2': "It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the ",
"It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the ", 'pm-3': '.accordion-body',
'pm-3': '.accordion-body', 'pm-4': ', though the transition does limit overflow.',
'pm-4': ', though the transition does limit overflow.', 'Copy from existing request': '从现有请求拷贝',
'Copy from existing request': '从现有请求拷贝', 'Apply request template': '应用请求模版',
'Apply request template': '应用请求模版', '(Re)Submit': '(再)提交',
'(Re)Submit': '(再)提交', 'The request has been submitted!': '请求已提交',
'The request has been submitted!': '请求已提交', 'You can find it in': '你可以在这里找到:',
'You can find it in': '你可以在这里找到:', 'Review your request and the associated proposals': '核对你的请求和相关提议',
'Review your request and the associated proposals': Title: '标题',
'核对你的请求和相关提议', Action: '响应',
Title: '标题', 'Proposed by': '提议来自',
Action: '响应', Price: '价格',
'Proposed by': '提议来自', Reject: '拒绝',
Price: '价格', Accept: '接受',
Reject: '拒绝', 'Please review the following critical information': '请核对以下重要信息',
Accept: '接受', 'Payment plan proposed by the service provider': '服务提供方提议的付款方案',
'Please review the following critical information': 'Execution plan proposed by the service provider': '服务提供方提议的项目执行方案',
'请核对以下重要信息', 'Proceed to workspace': '进入到我的工作'
'Payment plan proposed by the service provider': '服务提供方提议的付款方案',
'Execution plan proposed by the service provider':
'服务提供方提议的项目执行方案',
'Proceed to workspace': '进入到我的工作'
} }

View File

@ -1,11 +1,7 @@
<template> <template>
<div class="directories_containter"> <div class="directories_containter">
<div <div class="directory_container" v-for="(directory, index) in directories" :key="index"
class="directory_container" @click="view_link(directory)">
v-for="(directory, index) in directories"
:key="index"
@click="view_link(directory)"
>
<img class="directory_cover_image" :src="directory.cover_picture" /> <img class="directory_cover_image" :src="directory.cover_picture" />
<p class="directory-title">{{ directory.title_text }}</p> <p class="directory-title">{{ directory.title_text }}</p>
<p class="directory-subtitle">{{ directory.summary_text }}</p> <p class="directory-subtitle">{{ directory.summary_text }}</p>
@ -24,7 +20,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_about_directories() ContentApi.retrieve_about_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -62,17 +58,20 @@ export default {
padding: 0; padding: 0;
} }
} }
.directory_cover_image { .directory_cover_image {
width: 100%; width: 100%;
border-radius: 16px; border-radius: 16px;
margin-bottom: 16px; margin-bottom: 16px;
} }
.directory-title { .directory-title {
font-size: 48px; font-size: 48px;
// font-weight: bold; // font-weight: bold;
color: #18181a; color: #18181a;
margin-bottom: 5px; margin-bottom: 5px;
} }
.directory-subtitle { .directory-subtitle {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;

View File

@ -1,11 +1,6 @@
<template> <template>
<div v-if="blogs" class="blogs_containter"> <div v-if="blogs" class="blogs_containter">
<div <div class="blog_containter" v-for="(blog, index) in blogs" :key="index" @click="view_blog(blog)">
class="blog_containter"
v-for="(blog, index) in blogs"
:key="index"
@click="view_blog(blog)"
>
<h2>{{ blog.blog_name }}</h2> <h2>{{ blog.blog_name }}</h2>
<img class="blog_cover_image" :src="blog.cover_picture" /> <img class="blog_cover_image" :src="blog.cover_picture" />
<p v-text="retrieve_summary(blog)"></p> <p v-text="retrieve_summary(blog)"></p>
@ -23,7 +18,7 @@ export default {
}, },
methods: { methods: {
retrieve_blogs() { retrieve_blogs() {
ContentApi.retrieve_blogs() ContentApi.retrieve_blogs(window.location.host)
.then((response) => { .then((response) => {
this.blogs = response.data this.blogs = response.data
}) })

View File

@ -1,11 +1,6 @@
<template> <template>
<div class="career_containter"> <div class="career_containter">
<div <div class="career-item" v-for="(directory, index) in directories" :key="index" @click="view_link(directory)">
class="career-item"
v-for="(directory, index) in directories"
:key="index"
@click="view_link(directory)"
>
<p class="career-title"> <p class="career-title">
{{ directory.title_text }} {{ directory.title_text }}
</p> </p>
@ -24,7 +19,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_career_directories() ContentApi.retrieve_career_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -61,6 +56,7 @@ export default {
p { p {
margin: 0; margin: 0;
} }
.career-title { .career-title {
font-size: 32px; font-size: 32px;
margin-bottom: 10px; margin-bottom: 10px;

View File

@ -23,7 +23,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_contact_directories() ContentApi.retrieve_contact_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -63,6 +63,7 @@ export default {
img { img {
width: 100%; width: 100%;
} }
.contact-left-content { .contact-left-content {
padding: 32px; padding: 32px;
display: flex; display: flex;
@ -82,6 +83,7 @@ export default {
} }
} }
} }
.contact-right { .contact-right {
margin-left: 24px; margin-left: 24px;
box-shadow: 0px 0px 24px 0px #d4d3e380; box-shadow: 0px 0px 24px 0px #d4d3e380;

View File

@ -7,9 +7,7 @@
:key="index" :key="index"
class="conversation-container" class="conversation-container"
:class="{ :class="{
selected: selected: current_thread?.conversation?.id === conversation.id
current_thread?.conversation?.id ===
conversation.id
}" }"
@click="selectConversation(conversation)" @click="selectConversation(conversation)"
> >

View File

@ -1,57 +1,106 @@
<template> <template>
<div class="making-proposal-container offcanvas-parent"> <div class="making-proposal-container offcanvas-parent">
<div class="making-proposal-content"> <div class="making-proposal-content">
<div class="offcanvas offcanvas-end offcanvas-container" tabindex="-1" id="offcanvas-copy-existing" <div
aria-labelledby="offcanvas-copy-existing"> class="offcanvas offcanvas-end offcanvas-container"
tabindex="-1"
id="offcanvas-copy-existing"
aria-labelledby="offcanvas-copy-existing"
>
<div class="offcanvas-header"> <div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvas-copy-existing"> <h5 class="offcanvas-title" id="offcanvas-copy-existing">
{{ $t('Copy from existing proposals') }} {{ $t('Copy from existing proposals') }}
</h5> </h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> <button
type="button"
class="btn-close"
data-bs-dismiss="offcanvas"
aria-label="Close"
></button>
</div> </div>
<div class="offcanvas-body"> <div class="offcanvas-body">
<div class="accordion" id="existing-proposal-item-container"> <div class="accordion" id="existing-proposal-item-container">
<div v-for="(existingProposal, index) in existingProposals" :key="index" :id="'existing-proposal' + index" <div
class="accordion-item"> v-for="(existingProposal, index) in existingProposals"
:key="index"
:id="'existing-proposal' + index"
class="accordion-item"
>
<h2 class="accordion-header" :id="'existing-heading' + index"> <h2 class="accordion-header" :id="'existing-heading' + index">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
:data-bs-target="'#' + 'existing-proposal-collapse' + index" aria-expanded="false" class="accordion-button collapsed"
:aria-controls="'collapse' + index"> type="button"
data-bs-toggle="collapse"
:data-bs-target="'#' + 'existing-proposal-collapse' + index"
aria-expanded="false"
:aria-controls="'collapse' + index"
>
<span class="dashed-container">{{ existingProposal.request.title }}</span> <span class="dashed-container">{{ existingProposal.request.title }}</span>
</button> </button>
</h2> </h2>
<div :id="'existing-proposal-collapse' + index" class="accordion-collapse collapse" <div
:aria-labelledby="'existing-heading' + index" data-bs-parent="#existing-proposal-item-container"> :id="'existing-proposal-collapse' + index"
class="accordion-collapse collapse"
:aria-labelledby="'existing-heading' + index"
data-bs-parent="#existing-proposal-item-container"
>
<div class="accordion-body"> <div class="accordion-body">
<button class="copy-existing-button" @click="copyProposal(existingProposal)"> <button class="copy-existing-button" @click="copyProposal(existingProposal)">
{{ $t('Copy') }} {{ $t('Copy') }}
</button> </button>
<div class="existing-request-content-text" v-html="existingProposal.content"></div> <div
class="existing-request-content-text"
v-html="existingProposal.content"
></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="offcanvas offcanvas-end offcanvas-container" tabindex="-1" id="offcanvas-template" <div
aria-labelledby="offcanvas-template"> class="offcanvas offcanvas-end offcanvas-container"
tabindex="-1"
id="offcanvas-template"
aria-labelledby="offcanvas-template"
>
<div class="offcanvas-header"> <div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvas-template"> <h5 class="offcanvas-title" id="offcanvas-template">
{{ $t('Apply proposal template') }} {{ $t('Apply proposal template') }}
</h5> </h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> <button
type="button"
class="btn-close"
data-bs-dismiss="offcanvas"
aria-label="Close"
></button>
</div> </div>
<div class="offcanvas-body"> <div class="offcanvas-body">
<div class="accordion" id="template-item-container"> <div class="accordion" id="template-item-container">
<div v-for="(template, index) in templates" :key="index" :id="'template' + index" class="accordion-item"> <div
v-for="(template, index) in templates"
:key="index"
:id="'template' + index"
class="accordion-item"
>
<h2 class="accordion-header" :id="'heading' + index"> <h2 class="accordion-header" :id="'heading' + index">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
:data-bs-target="'#' + 'collapse' + index" aria-expanded="false" :aria-controls="'collapse' + index"> class="accordion-button collapsed"
type="button"
data-bs-toggle="collapse"
:data-bs-target="'#' + 'collapse' + index"
aria-expanded="false"
:aria-controls="'collapse' + index"
>
<span class="dashed-container">{{ template.title }}</span> <span class="dashed-container">{{ template.title }}</span>
</button> </button>
</h2> </h2>
<div :id="'collapse' + index" class="accordion-collapse collapse" :aria-labelledby="'heading' + index" <div
data-bs-parent="#template-item-container"> :id="'collapse' + index"
class="accordion-collapse collapse"
:aria-labelledby="'heading' + index"
data-bs-parent="#template-item-container"
>
<div class="accordion-body"> <div class="accordion-body">
<button class="load-template-button" @click="applyTemplate(template)"> <button class="load-template-button" @click="applyTemplate(template)">
{{ $t('Apply') }} {{ $t('Apply') }}
@ -67,14 +116,22 @@
<div class="accordion accordion-list" id="accordion-request-container"> <div class="accordion accordion-list" id="accordion-request-container">
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-request-content" aria-expanded="false" class="accordion-button"
aria-controls="collapse-request-content"> type="button"
data-bs-toggle="collapse"
data-bs-target="#collapse-request-content"
aria-expanded="false"
aria-controls="collapse-request-content"
>
<span class="dashed-container">{{ request.title }}</span> <span class="dashed-container">{{ request.title }}</span>
</button> </button>
</h2> </h2>
<div id="collapse-request-content" class="accordion-collapse collapse" <div
data-bs-parent="#accordion-request-container"> id="collapse-request-content"
class="accordion-collapse collapse"
data-bs-parent="#accordion-request-container"
>
<div class="accordion-body"> <div class="accordion-body">
<div class="request-content" v-html="request.content"></div> <div class="request-content" v-html="request.content"></div>
</div> </div>
@ -86,13 +143,23 @@
<div class="proposal-header-container"> <div class="proposal-header-container">
<label class="proposal-label">{{ $t('Proposal') }}:</label> <label class="proposal-label">{{ $t('Proposal') }}:</label>
<div class="header-bar"> <div class="header-bar">
<button class="btn btn-link" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvas-template" <button
aria-controls="offcanvas-template"> class="btn btn-link"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#offcanvas-template"
aria-controls="offcanvas-template"
>
<svg-icon icon="btn-templates" /> <svg-icon icon="btn-templates" />
{{ $t('Templates') }} {{ $t('Templates') }}
</button> </button>
<button class="btn btn-link" type="button" data-bs-toggle="offcanvas" <button
data-bs-target="#offcanvas-copy-existing" aria-controls="offcanvas-copy-existing"> class="btn btn-link"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#offcanvas-copy-existing"
aria-controls="offcanvas-copy-existing"
>
<svg-icon icon="btn-history" /> <svg-icon icon="btn-history" />
{{ $t('Copy') }} {{ $t('Copy') }}
</button> </button>
@ -108,8 +175,12 @@
<div class="form-group"> <div class="form-group">
<div class="input-group-container"> <div class="input-group-container">
<div class="form-floating"> <div class="form-floating">
<input class="input-email" :id="`stage-payment-content-${index}`" type="number" <input
v-model="stage.payment" /> class="input-email"
:id="`stage-payment-content-${index}`"
type="number"
v-model="stage.payment"
/>
<label :for="`stage-payment-content-${index}`">{{ $t('Payment') }}</label> <label :for="`stage-payment-content-${index}`">{{ $t('Payment') }}</label>
</div> </div>
<span class="btn-start">{{ stage.currency }}</span> <span class="btn-start">{{ stage.currency }}</span>
@ -120,8 +191,12 @@
<div class="form-group"> <div class="form-group">
<div class="input-group-container"> <div class="input-group-container">
<div class="form-floating"> <div class="form-floating">
<input class="input-email" :id="`stage-duration-content-${index}`" type="number" <input
v-model="stage.duration_in_days" /> class="input-email"
:id="`stage-duration-content-${index}`"
type="number"
v-model="stage.duration_in_days"
/>
<label :for="`stage-duration-content-${index}`">{{ $t('Duration') }}</label> <label :for="`stage-duration-content-${index}`">{{ $t('Duration') }}</label>
</div> </div>
<span class="btn-start">day(s)</span> <span class="btn-start">day(s)</span>
@ -132,7 +207,12 @@
<div class="form-group"> <div class="form-group">
<div class="input-group-container"> <div class="input-group-container">
<div class="form-floating"> <div class="form-floating">
<input class="input-email" :id="`stage-note-content-${index}`" type="text" v-model="stage.note" /> <input
class="input-email"
:id="`stage-note-content-${index}`"
type="text"
v-model="stage.note"
/>
<label :for="`stage-note-content-${index}`">{{ $t('Notes') }}</label> <label :for="`stage-note-content-${index}`">{{ $t('Notes') }}</label>
</div> </div>
</div> </div>
@ -197,7 +277,12 @@
<span v-if="uploadFile">{{ uploadFile.name }}</span> <span v-if="uploadFile">{{ uploadFile.name }}</span>
<input type="file" hidden @change="handleFileUpload" /> <input type="file" hidden @change="handleFileUpload" />
</label> </label>
<svg-icon v-if="uploadFile" icon="delete" class-name="delete-icon" @click.stop="clearFile" /> <svg-icon
v-if="uploadFile"
icon="delete"
class-name="delete-icon"
@click.stop="clearFile"
/>
</div> </div>
<!-- <label for="file-upload" class="file-upload-label">Upload File:</label> <!-- <label for="file-upload" class="file-upload-label">Upload File:</label>
<input type="file" id="file-upload" class="file-upload-input" @change="handleFileUpload" /> --> <input type="file" id="file-upload" class="file-upload-input" @change="handleFileUpload" /> -->
@ -272,7 +357,7 @@ export default {
// this.mnx_navToCopyProposals() // this.mnx_navToCopyProposals()
// }, // },
isUserInCNY() { isUserInCNY() {
return window.location.host.includes('localhost') || window.location.href.includes('com.cn'); return window.location.host.includes('localhost') || window.location.href.includes('com.cn')
}, },
handleFileUpload(event) { handleFileUpload(event) {
this.uploadFile = event.target.files[0] this.uploadFile = event.target.files[0]

View File

@ -1,7 +1,7 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
class ContentApi { class ContentApi {
static retrieve_blogs() { static retrieve_blogs(host) {
const request = backendAxios.post('/api/content/retrieve-blogs', {}, {}) const request = backendAxios.post('/api/content/retrieve-blogs', { host: host }, {})
return request return request
} }
static retrieve_blog_content(document_id) { static retrieve_blog_content(document_id) {
@ -15,16 +15,22 @@ class ContentApi {
return request return request
} }
static retrieve_about_directories() { static retrieve_about_directories(host) {
const request = backendAxios.post('/api/content/retrieve-about-directories', {}, {}) const request = backendAxios.post('/api/content/retrieve-about-directories', { host: host }, {})
return request return request
} }
static retrieve_career_directories() { static retrieve_career_directories(host) {
const request = backendAxios.post('/api/content/retrieve-career-directories', {}, {}) const request = backendAxios.post('/api/content/retrieve-career-directories', { host: host }, {})
return request return request
} }
static retrieve_contact_directories() { static retrieve_contact_directories(host) {
const request = backendAxios.post('/api/content/retrieve-contact-directories', {}, {}) const request = backendAxios.post(
'/api/content/retrieve-contact-directories',
{
host: host
},
{}
)
return request return request
} }
} }