Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite

This commit is contained in:
2026-05-06 16:33:32 +08:00
11 changed files with 1865 additions and 1803 deletions

View File

@@ -1535,7 +1535,7 @@ export default {
},
event: {
back: '返回',
detail:'查看详情'
detail: '查看详情'
},
admin: {
allUser: '所有用户',
@@ -1609,7 +1609,7 @@ export default {
Cancel: '取消',
SelectPlan: '选择计划',
AllPlan: '全部',
PlanStart:'订阅计划生效时间:'
PlanStart: '订阅计划生效时间:'
},
Login: {
Login: '登录',
@@ -1736,32 +1736,32 @@ export default {
showAgain: '不再提示',
GetStarted: '开始体验',
},
SellerListEdit:{
SellerListEdit: {
saveDraft: "全部保存",
publish: "发布",
sketch: "线稿图",
mainProductImage: "产品主图",
cover: "封面",
productImageDesc:'从产品图中选取',
cropDesc:'从主产品图或线稿图中裁剪',
productImageMainTitle:'产品图 ',
productImageSubTitle:' (来自设计集)',
apparelSketchTitle:'服装线稿图 ',
apparelSketchSubTitle:' (来自设计集)',
productName:'商品名称',
price:'价格',
productDescription:'商品描述',
designFor:'目标人群',
productCategory:'商品类别',
categoryTips:'请选择所有适用选项',
policy:'默认情况下,所有销售均遵循平台的许可政策——买家在下载后将获得使用许可',
learnMore:'了解更多',
requiredFieldTips:'请填写{field}',
requiredFieldTipsWithPage:'第 {index} 个商品:请填写{field}',
productImageDesc: '从产品图中选取',
cropDesc: '从主产品图或线稿图中裁剪',
productImageMainTitle: '产品图 ',
productImageSubTitle: ' (来自设计集)',
apparelSketchTitle: '服装线稿图 ',
apparelSketchSubTitle: ' (来自设计集)',
productName: '商品名称',
price: '价格',
productDescription: '商品描述',
designFor: '目标人群',
productCategory: '商品类别',
categoryTips: '请选择所有适用选项',
policy: '默认情况下,所有销售均遵循平台的许可政策——买家在下载后将获得使用许可',
learnMore: '了解更多',
requiredFieldTips: '请填写{field}',
requiredFieldTipsWithPage: '第 {index} 个商品:请填写{field}',
draftSaved: '草稿已保存',
draftDesc: '您的商品已保存为草稿。\n您可以继续编辑或稍后在“我的商品”中发布。',
listingLive:'商品已上架',
publishDesc:'您的商品现已上架。\n买家可以浏览并购买您的设计。'
listingLive: '商品已上架',
publishDesc: '您的商品现已上架。\n买家可以浏览并购买您的设计。'
},
Seller: {
// Brand Profile
@@ -1835,6 +1835,7 @@ export default {
draftMessage: '商品已保存为草稿。您可以继续编辑,或稍后在“我的商品”中发布。',
publishMessage: '商品现已上架。买家可以浏览并购买您的设计。',
ActiveListings: '已发布商品',
Praka: '线稿',
Drafts: '草稿',
Cancel: '取消',
Delete: '删除',
@@ -1854,5 +1855,34 @@ export default {
SelectCollection: '选择商品',
SelectSketch: '选择线稿图',
EditListingDetails: '编辑商品详情',
},
ApplySeller: {
applySellerTitle: '申请成为卖家',
applySellerDesc: '加入Stylish Parade开始销售您的设计作品',
formTitle: '店铺信息',
formTip: '请提供一些详细信息来创建您的卖家资料。',
termsTitle: '服务条款',
termsTip: '请阅读并同意服务条款。',
agreementTitle: 'AiDA 卖家协议',
agreementTip: '请阅读并同意卖家协议。',
agreementItem1: '提供准确和真实的个人信息和店铺信息',
agreementItem2: '仅销售原创设计或内容,获得必要的许可证',
agreementItem3: '维护所有产品的高质量标准',
agreementItem4: '在48小时内回复客户咨询',
agreementItem5: '在承诺的时间内发货',
agreementItem6: '遵守AiDA的服务条款和社区指南',
agreementItem7: '支付适用的平台费用和交易费用',
agreementItem8: '专业和公平地处理客户纠纷',
agreementAgreement: '我已经阅读并同意了卖家协议,清楚地了解了自己在 AiDA 平台上作为卖家所应承担的责任和义务。',
submitApplication: '提交申请',
applicationSubmitted: '申请已提交',
applicationSubmittedTip: '我们的团队将审核您的申请并在1-3个工作日回复您。您会在邮箱中收到相关通知。',
auditStatus1_title: "步骤 1提交申请",
auditStatus1_tip: "请填写店铺信息并同意服务条款。",
auditStatus2_title: "步骤 2审核验证",
auditStatus2_tip: "我们的团队将在审核您的申请后1-3个工作日审核您的店铺信息。",
auditStatus3_title: "步骤 3开始销售",
auditStatus3_tip: "审核通过后,您可以开始销售您的商品。",
backToHomepage: "返回首页",
}
}

View File

@@ -1889,6 +1889,7 @@ export default {
draftMessage: 'Product moved to drafts and stats reset.',
publishMessage: 'Item is now live on the Marketplace.',
ActiveListings: 'Active Listings',
Praka: 'Praka',
Drafts: 'Drafts',
Cancel: 'Cancel',
Delete: 'Delete',
@@ -1908,5 +1909,34 @@ export default {
SelectCollection: 'Select Collection',
SelectSketch: 'Select Sketch',
EditListingDetails: 'Edit Listing Details',
},
ApplySeller: {
applySellerTitle: 'Apply to Become a Seller',
applySellerDesc: 'Join the Stylish Parade and start selling your design work',
formTitle: 'Brand Information',
formTip: 'Share a few details to set up your seller profile',
termsTitle: 'Seller Terms',
termsTip: 'Please carefully read and agree to the following terms',
agreementTitle: 'AiDA Seller Agreement',
agreementTip: 'Please read and agree to the following agreement',
agreementItem1: "Provide accurate and truthful personal and store information",
agreementItem2: "Only sell original designs or content with proper licensing",
agreementItem3: "Maintain high quality standards for all products",
agreementItem4: "Respond to customer inquiries within 48 hours",
agreementItem5: "Ship orders within promised timeframes",
agreementItem6: "Comply with AiDA's terms of service and community guidelines",
agreementItem7: "Pay applicable platform fees and transaction charges",
agreementItem8: "Handle customer disputes professionally and fairly",
agreementAgreement: "I have read and agree to the Seller Agreement, understanding my responsibilities and obligations as a seller on the AiDA platform.",
submitApplication: "Submit Application",
applicationSubmitted: "Application Submitted",
applicationSubmittedTip: "Our team will review your application and get back to you within 13 business days. You'll receive a notification in your email once a decision has been made.",
auditStatus1_title: "Step 1: Submit Application",
auditStatus1_tip: "Fill out the seller information form and agree to our terms",
auditStatus2_title: "Step 2: Review & Verification",
auditStatus2_tip: "Our team will review your application (typically 1-3 business days)",
auditStatus3_title: "Step 3: Start Selling",
auditStatus3_tip: "Once approved, access your seller dashboard and start listing products",
backToHomepage: "Back to Homepage",
}
}

View File

@@ -224,8 +224,8 @@ const routes: Array<RouteRecordRaw> = [
name: "becomeSeller",
meta: {
enter: "all",
sellerHeaderTitle: "Apply to Become a Seller",
sellerHeaderTip: "Join the Stylish Parade and start selling your design work"
sellerHeaderTitle: "ApplySeller.applySellerTitle",
sellerHeaderTip: "ApplySeller.applySellerDesc"
},
component: () => import("@/views/SellerDashboard/BecomeSeller/index.vue")
},
@@ -283,7 +283,7 @@ const routes: Array<RouteRecordRaw> = [
name: "myListingsSelectItem",
meta: {
enter: "all",
sellerHeaderTitleKey: "Seller.SelectCollection",
sellerHeaderTitleKey: "Seller.SelectSketch",
sellerBreadcrumbs: [
myListingsBreadcrumb,
selectCollectionBreadcrumb,

View File

@@ -2,56 +2,58 @@
<div class="seller-apply">
<div class="session">
<div class="content mini-scrollbar">
<div class="title">Brand Information</div>
<div class="tip">Share a few details to set up your seller profile</div>
<div class="title">{{ $t("ApplySeller.formTitle") }}</div>
<div class="tip">{{ $t("ApplySeller.formTip") }}</div>
<div class="form">
<a-form :model="formData" :rules="formRules" layout="vertical" ref="formRef">
<a-form-item label="Store Name" name="storeName">
<a-form-item :label="$t('Seller.storeName')" name="storeName">
<a-input
v-model:value="formData.storeName"
placeholder="Enter the store name"
:placeholder="$t('Seller.storeNameDesc')"
:maxlength="80"
/>
<span class="tip-length">{{ formData.storeName.length }}/80</span>
</a-form-item>
<a-form-item label="Owners Full Name" name="fullName">
<a-form-item :label="$t('Seller.ownerName')" name="fullName">
<a-input
v-model:value="formData.fullName"
placeholder="Enter store owner's full name"
:placeholder="$t('Seller.ownerNameDesc')"
/>
</a-form-item>
<div class="form-group">
<a-form-item label="Email" name="email">
<a-form-item :label="$t('Seller.email')" name="email">
<a-input
type="email"
v-model:value="formData.email"
placeholder="Enter email"
:placeholder="$t('Seller.emailDesc')"
/>
</a-form-item>
<a-form-item label="Phone Number" name="phoneNumber">
<a-form-item :label="$t('Seller.mobile')" name="mobile">
<a-input
type="tel"
v-model:value="formData.phoneNumber"
placeholder="Enter phone number"
v-model:value="formData.mobile"
:placeholder="$t('Seller.mobileDesc')"
/>
</a-form-item>
</div>
<a-form-item label="Store Description" name="description">
<a-form-item :label="$t('Seller.storeDescription')" name="description">
<a-textarea
v-model:value="formData.description"
placeholder="Briefly describe your design style and store features..."
:placeholder="$t('Seller.storeDescriptionDesc')"
:maxlength="500"
/>
<span class="tip-length">{{ formData.description.length }}/500</span>
</a-form-item>
<a-form-item label="Portfoilo/Social Media Links">
<a-form-item :label="$t('Seller.links')">
<a-input
placeholder="https://"
v-for="(v, i) in formData.links"
:key="i"
v-model:value="formData.links[i]"
>
<template #prefix>Link {{ i + 1 }}</template>
<template #prefix>{{
$t("Seller.link", { index: i + 1 })
}}</template>
</a-input>
<a-input
placeholder="https://"
@@ -71,33 +73,25 @@
</div>
<div class="session">
<div class="content">
<div class="title">Brand Information</div>
<div class="tip">Share a few details to set up your seller profile</div>
<div class="title">{{ $t("ApplySeller.termsTitle") }}</div>
<div class="tip">{{ $t("ApplySeller.termsTip") }}</div>
<div class="agreement">
<div class="title">AiDA Seller Agreement</div>
<div class="tip">
By checking the box below, you agree to comply with the following terms:
</div>
<div class="title">{{ $t("ApplySeller.agreementTitle") }}</div>
<div class="tip">{{ $t("ApplySeller.agreementTip") }}</div>
<ul>
<li>Provide accurate and truthful personal and store information</li>
<li>Only sell original designs or content with proper licensing</li>
<li>Maintain high quality standards for all products</li>
<li>Respond to customer inquiries within 48 hours</li>
<li>Ship orders within promised timeframes</li>
<li>Comply with AiDA's terms of service and community guidelines</li>
<li>Pay applicable platform fees and transaction charges</li>
<li>Handle customer disputes professionally and fairly</li>
<li v-for="(v, i) in 8" :key="i">
{{ $t(`ApplySeller.agreementItem${i + 1}`) }}
</li>
</ul>
</div>
<a-checkbox class="agree-agreement" v-model:checked="isAgreement">
I have read and agree to the Seller Agreement, understanding my responsibilities
and obligations as a seller on the AiDA platform.
{{ $t("ApplySeller.agreementAgreement") }}
</a-checkbox>
</div>
<div class="btns">
<button class="cancel" @click="onCancel">Cancel</button>
<button class="cancel" @click="onCancel">{{ $t("Seller.cancel") }}</button>
<button class="submit" :disabled="!isAgreement" @click="onSubmit">
Submit Application
{{ $t("ApplySeller.submitApplication") }}
</button>
</div>
</div>
@@ -106,24 +100,26 @@
<script setup>
import { ref, reactive } from "vue"
import { useI18n } from "vue-i18n"
const { t } = useI18n()
import { useRoute, useRouter } from "vue-router"
const route = useRoute()
const router = useRouter()
import { Https } from "@/tool/https"
const emit = defineEmits(["submit"])
const formRules = {
storeName: [{ required: true, message: "Enter the store name" }],
fullName: [{ required: true, message: "Enter store owner's full name" }],
email: [{ required: true, message: "Enter email" }],
phoneNumber: [{ required: true, message: "Enter phone number" }],
description: [{ required: true, message: "Enter store description" }]
storeName: [{ required: true, message: t("Seller.storeNameDesc") }],
fullName: [{ required: true, message: t("Seller.ownerNameDesc") }],
email: [{ required: true, message: t("Seller.emailDesc") }],
mobile: [{ required: true, message: t("Seller.mobileDesc") }],
description: [{ required: true, message: t("Seller.storeDescriptionErr") }]
}
const formRef = ref(null)
const formData = reactive({
storeName: "",
fullName: "",
email: "",
phoneNumber: "",
mobile: "",
description: "",
links: ["", ""]
})
@@ -140,7 +136,6 @@
formRef.value
.validate()
.then(() => {
console.log(formData)
const data = {
// userId: 0,
shopName: formData.storeName,
@@ -148,7 +143,7 @@
// brandBanner: "",
ownerName: formData.fullName,
email: formData.email,
mobile: formData.phoneNumber,
mobile: formData.mobile,
description: formData.description,
socialLinks: JSON.stringify(formData.links.filter((v) => v))
}

View File

@@ -1,11 +1,8 @@
<template>
<div class="seller-review">
<img class="success" src="@/assets/images/seller/success-1.png" />
<div class="title">Application Submitted</div>
<div class="tip">
Our team will review your application and get back to you within 13 business days.
You'll receive a notification in your email once a decision has been made.
</div>
<div class="title">{{ $t("ApplySeller.applicationSubmitted") }}</div>
<div class="tip">{{ $t("ApplySeller.applicationSubmittedTip") }}</div>
<div class="step-list">
<div v-for="v in list" :key="v.title" class="step-item">
<img v-show="!v.active" src="@/assets/images/seller/success-0.png" />
@@ -16,7 +13,7 @@
</div>
</div>
</div>
<button class="home-btn" @click="onBackToHome">Back to Homepage</button>
<button class="home-btn" @click="onBackToHome">{{ $t("ApplySeller.backToHomepage") }}</button>
<div class="tip">ID: {{ userId }}</div>
</div>
</template>
@@ -26,6 +23,9 @@
import { useRoute, useRouter } from "vue-router"
import { useStore } from "vuex"
import { ApplyStatus } from "@/store/seller/index.d"
import { useI18n } from "vue-i18n"
const { t } = useI18n()
const route = useRoute()
const router = useRouter()
const store = useStore()
@@ -33,18 +33,18 @@
const applyStatus = computed(() => store.state.seller.applyStatus)
const list = computed(() => [
{
title: "Step 1: Submit Application",
tip: "Fill out the seller information form and agree to our terms",
title: t("ApplySeller.auditStatus1_title"),
tip: t("ApplySeller.auditStatus1_tip"),
active: [ApplyStatus.Pending, ApplyStatus.Approved].includes(applyStatus.value)
},
{
title: "Step 2: Review & Verification",
tip: "Our team will review your application (typically 1-3 business days)",
title: t("ApplySeller.auditStatus2_title"),
tip: t("ApplySeller.auditStatus2_tip"),
active: applyStatus.value === ApplyStatus.Approved
},
{
title: "Step 3: Start Selling",
tip: "Once approved, access your seller dashboard and start listing products ",
title: t("ApplySeller.auditStatus3_title"),
tip: t("ApplySeller.auditStatus3_tip"),
active: applyStatus.value === ApplyStatus.Approved
}
])

View File

@@ -10,6 +10,7 @@
:closable="false"
wrapClassName="#app"
:keyboard="false"
:destroyOnClose="true"
>
<div class="image-clip-dialog-box">
<div class="header" :class="{ 'is-product': data.isProduct }">

View File

@@ -178,7 +178,7 @@ const {} = toRefs(data);
<div class="title">
<div class="left">
<i class="fi fi-rs-comments"></i>
<span>{{ $t('Seller.ActiveListings') }}</span>
<span>{{ $t('Seller.Praka') }}</span>
</div>
<div class="right">
<div class="generalModel_state">
@@ -317,6 +317,7 @@ const {} = toRefs(data);
margin: 0 auto;
overflow-y: auto;
align-content: flex-start;
min-width: 90%;
&::-webkit-scrollbar {
display: none;
}

View File

@@ -400,6 +400,7 @@ const { showDrafts } = toRefs(data);
margin: 0 auto;
align-items: flex-start;
overflow: auto;
min-width: 90%;
&::-webkit-scrollbar {
display: none;
}

View File

@@ -132,6 +132,7 @@ const {} = toRefs(data);
width: 100%;
height: 100%;
object-fit: cover;
background-color: #fff;
}
> .maskBtn{
position: absolute;

View File

@@ -41,7 +41,7 @@ const {} = toRefs(data);
</script>
<template>
<div class="myListings-seller">
<seller-header>
<seller-header :displayBack="false">
<template #right>
<div class="button" @click="newListing">
<span>{{ $t('Seller.newListing') }}</span>

View File

@@ -1,6 +1,6 @@
<template>
<div class="seller-header">
<div class="back" @click="() => router.back()">
<div class="back" v-if="displayBack" @click="() => router.back()">
<svg-icon name="seller-back" size="24" />
</div>
<div class="content">
@@ -55,13 +55,16 @@
defineProps<{
title?: string
tip?: string
displayBack?: boolean
breadcrumbs?: SellerBreadcrumbSource[]
}>(),
{
title: "",
tip: "",
breadcrumbs: () => []
breadcrumbs: () => [],
displayBack: true
}
)
const route = useRoute()
const router = useRouter()