Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite
This commit is contained in:
3516
src/lang/cn.ts
3516
src/lang/cn.ts
File diff suppressed because it is too large
Load Diff
@@ -1889,6 +1889,7 @@ export default {
|
|||||||
draftMessage: 'Product moved to drafts and stats reset.',
|
draftMessage: 'Product moved to drafts and stats reset.',
|
||||||
publishMessage: 'Item is now live on the Marketplace.',
|
publishMessage: 'Item is now live on the Marketplace.',
|
||||||
ActiveListings: 'Active Listings',
|
ActiveListings: 'Active Listings',
|
||||||
|
Praka: 'Praka',
|
||||||
Drafts: 'Drafts',
|
Drafts: 'Drafts',
|
||||||
Cancel: 'Cancel',
|
Cancel: 'Cancel',
|
||||||
Delete: 'Delete',
|
Delete: 'Delete',
|
||||||
@@ -1908,5 +1909,34 @@ export default {
|
|||||||
SelectCollection: 'Select Collection',
|
SelectCollection: 'Select Collection',
|
||||||
SelectSketch: 'Select Sketch',
|
SelectSketch: 'Select Sketch',
|
||||||
EditListingDetails: 'Edit Listing Details',
|
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 1–3 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",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -224,8 +224,8 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
name: "becomeSeller",
|
name: "becomeSeller",
|
||||||
meta: {
|
meta: {
|
||||||
enter: "all",
|
enter: "all",
|
||||||
sellerHeaderTitle: "Apply to Become a Seller",
|
sellerHeaderTitle: "ApplySeller.applySellerTitle",
|
||||||
sellerHeaderTip: "Join the Stylish Parade and start selling your design work"
|
sellerHeaderTip: "ApplySeller.applySellerDesc"
|
||||||
},
|
},
|
||||||
component: () => import("@/views/SellerDashboard/BecomeSeller/index.vue")
|
component: () => import("@/views/SellerDashboard/BecomeSeller/index.vue")
|
||||||
},
|
},
|
||||||
@@ -283,7 +283,7 @@ const routes: Array<RouteRecordRaw> = [
|
|||||||
name: "myListingsSelectItem",
|
name: "myListingsSelectItem",
|
||||||
meta: {
|
meta: {
|
||||||
enter: "all",
|
enter: "all",
|
||||||
sellerHeaderTitleKey: "Seller.SelectCollection",
|
sellerHeaderTitleKey: "Seller.SelectSketch",
|
||||||
sellerBreadcrumbs: [
|
sellerBreadcrumbs: [
|
||||||
myListingsBreadcrumb,
|
myListingsBreadcrumb,
|
||||||
selectCollectionBreadcrumb,
|
selectCollectionBreadcrumb,
|
||||||
|
|||||||
@@ -2,56 +2,58 @@
|
|||||||
<div class="seller-apply">
|
<div class="seller-apply">
|
||||||
<div class="session">
|
<div class="session">
|
||||||
<div class="content mini-scrollbar">
|
<div class="content mini-scrollbar">
|
||||||
<div class="title">Brand Information</div>
|
<div class="title">{{ $t("ApplySeller.formTitle") }}</div>
|
||||||
<div class="tip">Share a few details to set up your seller profile</div>
|
<div class="tip">{{ $t("ApplySeller.formTip") }}</div>
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<a-form :model="formData" :rules="formRules" layout="vertical" ref="formRef">
|
<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
|
<a-input
|
||||||
v-model:value="formData.storeName"
|
v-model:value="formData.storeName"
|
||||||
placeholder="Enter the store name"
|
:placeholder="$t('Seller.storeNameDesc')"
|
||||||
:maxlength="80"
|
:maxlength="80"
|
||||||
/>
|
/>
|
||||||
<span class="tip-length">{{ formData.storeName.length }}/80</span>
|
<span class="tip-length">{{ formData.storeName.length }}/80</span>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Owner’s Full Name" name="fullName">
|
<a-form-item :label="$t('Seller.ownerName')" name="fullName">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formData.fullName"
|
v-model:value="formData.fullName"
|
||||||
placeholder="Enter store owner's full name"
|
:placeholder="$t('Seller.ownerNameDesc')"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<a-form-item label="Email" name="email">
|
<a-form-item :label="$t('Seller.email')" name="email">
|
||||||
<a-input
|
<a-input
|
||||||
type="email"
|
type="email"
|
||||||
v-model:value="formData.email"
|
v-model:value="formData.email"
|
||||||
placeholder="Enter email"
|
:placeholder="$t('Seller.emailDesc')"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Phone Number" name="phoneNumber">
|
<a-form-item :label="$t('Seller.mobile')" name="mobile">
|
||||||
<a-input
|
<a-input
|
||||||
type="tel"
|
type="tel"
|
||||||
v-model:value="formData.phoneNumber"
|
v-model:value="formData.mobile"
|
||||||
placeholder="Enter phone number"
|
:placeholder="$t('Seller.mobileDesc')"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</div>
|
</div>
|
||||||
<a-form-item label="Store Description" name="description">
|
<a-form-item :label="$t('Seller.storeDescription')" name="description">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
v-model:value="formData.description"
|
v-model:value="formData.description"
|
||||||
placeholder="Briefly describe your design style and store features..."
|
:placeholder="$t('Seller.storeDescriptionDesc')"
|
||||||
:maxlength="500"
|
:maxlength="500"
|
||||||
/>
|
/>
|
||||||
<span class="tip-length">{{ formData.description.length }}/500</span>
|
<span class="tip-length">{{ formData.description.length }}/500</span>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Portfoilo/Social Media Links">
|
<a-form-item :label="$t('Seller.links')">
|
||||||
<a-input
|
<a-input
|
||||||
placeholder="https://"
|
placeholder="https://"
|
||||||
v-for="(v, i) in formData.links"
|
v-for="(v, i) in formData.links"
|
||||||
:key="i"
|
:key="i"
|
||||||
v-model:value="formData.links[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>
|
||||||
<a-input
|
<a-input
|
||||||
placeholder="https://"
|
placeholder="https://"
|
||||||
@@ -71,33 +73,25 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="session">
|
<div class="session">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="title">Brand Information</div>
|
<div class="title">{{ $t("ApplySeller.termsTitle") }}</div>
|
||||||
<div class="tip">Share a few details to set up your seller profile</div>
|
<div class="tip">{{ $t("ApplySeller.termsTip") }}</div>
|
||||||
<div class="agreement">
|
<div class="agreement">
|
||||||
<div class="title">AiDA Seller Agreement</div>
|
<div class="title">{{ $t("ApplySeller.agreementTitle") }}</div>
|
||||||
<div class="tip">
|
<div class="tip">{{ $t("ApplySeller.agreementTip") }}</div>
|
||||||
By checking the box below, you agree to comply with the following terms:
|
|
||||||
</div>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Provide accurate and truthful personal and store information</li>
|
<li v-for="(v, i) in 8" :key="i">
|
||||||
<li>Only sell original designs or content with proper licensing</li>
|
{{ $t(`ApplySeller.agreementItem${i + 1}`) }}
|
||||||
<li>Maintain high quality standards for all products</li>
|
</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>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a-checkbox class="agree-agreement" v-model:checked="isAgreement">
|
<a-checkbox class="agree-agreement" v-model:checked="isAgreement">
|
||||||
I have read and agree to the Seller Agreement, understanding my responsibilities
|
{{ $t("ApplySeller.agreementAgreement") }}
|
||||||
and obligations as a seller on the AiDA platform.
|
|
||||||
</a-checkbox>
|
</a-checkbox>
|
||||||
</div>
|
</div>
|
||||||
<div class="btns">
|
<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">
|
<button class="submit" :disabled="!isAgreement" @click="onSubmit">
|
||||||
Submit Application
|
{{ $t("ApplySeller.submitApplication") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -106,24 +100,26 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive } from "vue"
|
import { ref, reactive } from "vue"
|
||||||
|
import { useI18n } from "vue-i18n"
|
||||||
|
const { t } = useI18n()
|
||||||
import { useRoute, useRouter } from "vue-router"
|
import { useRoute, useRouter } from "vue-router"
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
import { Https } from "@/tool/https"
|
import { Https } from "@/tool/https"
|
||||||
const emit = defineEmits(["submit"])
|
const emit = defineEmits(["submit"])
|
||||||
const formRules = {
|
const formRules = {
|
||||||
storeName: [{ required: true, message: "Enter the store name" }],
|
storeName: [{ required: true, message: t("Seller.storeNameDesc") }],
|
||||||
fullName: [{ required: true, message: "Enter store owner's full name" }],
|
fullName: [{ required: true, message: t("Seller.ownerNameDesc") }],
|
||||||
email: [{ required: true, message: "Enter email" }],
|
email: [{ required: true, message: t("Seller.emailDesc") }],
|
||||||
phoneNumber: [{ required: true, message: "Enter phone number" }],
|
mobile: [{ required: true, message: t("Seller.mobileDesc") }],
|
||||||
description: [{ required: true, message: "Enter store description" }]
|
description: [{ required: true, message: t("Seller.storeDescriptionErr") }]
|
||||||
}
|
}
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
storeName: "",
|
storeName: "",
|
||||||
fullName: "",
|
fullName: "",
|
||||||
email: "",
|
email: "",
|
||||||
phoneNumber: "",
|
mobile: "",
|
||||||
description: "",
|
description: "",
|
||||||
links: ["", ""]
|
links: ["", ""]
|
||||||
})
|
})
|
||||||
@@ -140,7 +136,6 @@
|
|||||||
formRef.value
|
formRef.value
|
||||||
.validate()
|
.validate()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log(formData)
|
|
||||||
const data = {
|
const data = {
|
||||||
// userId: 0,
|
// userId: 0,
|
||||||
shopName: formData.storeName,
|
shopName: formData.storeName,
|
||||||
@@ -148,7 +143,7 @@
|
|||||||
// brandBanner: "",
|
// brandBanner: "",
|
||||||
ownerName: formData.fullName,
|
ownerName: formData.fullName,
|
||||||
email: formData.email,
|
email: formData.email,
|
||||||
mobile: formData.phoneNumber,
|
mobile: formData.mobile,
|
||||||
description: formData.description,
|
description: formData.description,
|
||||||
socialLinks: JSON.stringify(formData.links.filter((v) => v))
|
socialLinks: JSON.stringify(formData.links.filter((v) => v))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="seller-review">
|
<div class="seller-review">
|
||||||
<img class="success" src="@/assets/images/seller/success-1.png" />
|
<img class="success" src="@/assets/images/seller/success-1.png" />
|
||||||
<div class="title">Application Submitted</div>
|
<div class="title">{{ $t("ApplySeller.applicationSubmitted") }}</div>
|
||||||
<div class="tip">
|
<div class="tip">{{ $t("ApplySeller.applicationSubmittedTip") }}</div>
|
||||||
Our team will review your application and get back to you within 1–3 business days.
|
|
||||||
You'll receive a notification in your email once a decision has been made.
|
|
||||||
</div>
|
|
||||||
<div class="step-list">
|
<div class="step-list">
|
||||||
<div v-for="v in list" :key="v.title" class="step-item">
|
<div v-for="v in list" :key="v.title" class="step-item">
|
||||||
<img v-show="!v.active" src="@/assets/images/seller/success-0.png" />
|
<img v-show="!v.active" src="@/assets/images/seller/success-0.png" />
|
||||||
@@ -16,7 +13,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</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 class="tip">ID: {{ userId }}</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -26,6 +23,9 @@
|
|||||||
import { useRoute, useRouter } from "vue-router"
|
import { useRoute, useRouter } from "vue-router"
|
||||||
import { useStore } from "vuex"
|
import { useStore } from "vuex"
|
||||||
import { ApplyStatus } from "@/store/seller/index.d"
|
import { ApplyStatus } from "@/store/seller/index.d"
|
||||||
|
import { useI18n } from "vue-i18n"
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
@@ -33,18 +33,18 @@
|
|||||||
const applyStatus = computed(() => store.state.seller.applyStatus)
|
const applyStatus = computed(() => store.state.seller.applyStatus)
|
||||||
const list = computed(() => [
|
const list = computed(() => [
|
||||||
{
|
{
|
||||||
title: "Step 1: Submit Application",
|
title: t("ApplySeller.auditStatus1_title"),
|
||||||
tip: "Fill out the seller information form and agree to our terms",
|
tip: t("ApplySeller.auditStatus1_tip"),
|
||||||
active: [ApplyStatus.Pending, ApplyStatus.Approved].includes(applyStatus.value)
|
active: [ApplyStatus.Pending, ApplyStatus.Approved].includes(applyStatus.value)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Step 2: Review & Verification",
|
title: t("ApplySeller.auditStatus2_title"),
|
||||||
tip: "Our team will review your application (typically 1-3 business days)",
|
tip: t("ApplySeller.auditStatus2_tip"),
|
||||||
active: applyStatus.value === ApplyStatus.Approved
|
active: applyStatus.value === ApplyStatus.Approved
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Step 3: Start Selling",
|
title: t("ApplySeller.auditStatus3_title"),
|
||||||
tip: "Once approved, access your seller dashboard and start listing products ",
|
tip: t("ApplySeller.auditStatus3_tip"),
|
||||||
active: applyStatus.value === ApplyStatus.Approved
|
active: applyStatus.value === ApplyStatus.Approved
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
:closable="false"
|
:closable="false"
|
||||||
wrapClassName="#app"
|
wrapClassName="#app"
|
||||||
:keyboard="false"
|
:keyboard="false"
|
||||||
|
:destroyOnClose="true"
|
||||||
>
|
>
|
||||||
<div class="image-clip-dialog-box">
|
<div class="image-clip-dialog-box">
|
||||||
<div class="header" :class="{ 'is-product': data.isProduct }">
|
<div class="header" :class="{ 'is-product': data.isProduct }">
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ const {} = toRefs(data);
|
|||||||
<div class="title">
|
<div class="title">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<i class="fi fi-rs-comments"></i>
|
<i class="fi fi-rs-comments"></i>
|
||||||
<span>{{ $t('Seller.ActiveListings') }}</span>
|
<span>{{ $t('Seller.Praka') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<div class="generalModel_state">
|
<div class="generalModel_state">
|
||||||
@@ -317,6 +317,7 @@ const {} = toRefs(data);
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
align-content: flex-start;
|
align-content: flex-start;
|
||||||
|
min-width: 90%;
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -400,6 +400,7 @@ const { showDrafts } = toRefs(data);
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
min-width: 90%;
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ const {} = toRefs(data);
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
> .maskBtn{
|
> .maskBtn{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const {} = toRefs(data);
|
|||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="myListings-seller">
|
<div class="myListings-seller">
|
||||||
<seller-header>
|
<seller-header :displayBack="false">
|
||||||
<template #right>
|
<template #right>
|
||||||
<div class="button" @click="newListing">
|
<div class="button" @click="newListing">
|
||||||
<span>{{ $t('Seller.newListing') }}</span>
|
<span>{{ $t('Seller.newListing') }}</span>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="seller-header">
|
<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" />
|
<svg-icon name="seller-back" size="24" />
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
@@ -55,13 +55,16 @@
|
|||||||
defineProps<{
|
defineProps<{
|
||||||
title?: string
|
title?: string
|
||||||
tip?: string
|
tip?: string
|
||||||
|
displayBack?: boolean
|
||||||
breadcrumbs?: SellerBreadcrumbSource[]
|
breadcrumbs?: SellerBreadcrumbSource[]
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
title: "",
|
title: "",
|
||||||
tip: "",
|
tip: "",
|
||||||
breadcrumbs: () => []
|
breadcrumbs: () => [],
|
||||||
|
displayBack: true
|
||||||
}
|
}
|
||||||
|
|
||||||
)
|
)
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|||||||
Reference in New Issue
Block a user