Files
aida_front/src/views/SellerDashboard/BrandProfile/brand-info.vue

161 lines
4.3 KiB
Vue
Raw Normal View History

2026-04-09 11:40:17 +08:00
<template>
<div class="brand-info">
2026-04-09 13:48:46 +08:00
<a-form :model="formData" :rules="isEdit ? formRules : {}" layout="vertical" ref="formRef">
<div class="form-group">
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.storeName')" name="shopName">
2026-04-09 13:48:46 +08:00
<a-input
2026-04-27 10:49:37 +08:00
v-model:value="formData.shopName"
2026-05-04 11:18:56 +08:00
:placeholder="$t('Seller.storeNameDesc')"
2026-04-09 13:48:46 +08:00
:maxlength="80"
:readonly="!isEdit"
/>
<span v-show="isEdit" class="tip-length"
2026-04-27 10:49:37 +08:00
>{{ formData.shopName.length }}/80</span
2026-04-09 13:48:46 +08:00
>
</a-form-item>
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.ownerName')" name="ownerName">
2026-04-09 13:48:46 +08:00
<a-input
2026-04-27 10:49:37 +08:00
v-model:value="formData.ownerName"
2026-05-04 11:18:56 +08:00
:placeholder="$t('Seller.ownerNameDesc')"
2026-04-09 13:48:46 +08:00
:readonly="!isEdit"
/>
</a-form-item>
</div>
2026-04-09 11:40:17 +08:00
<div class="form-group">
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.email')" name="email">
2026-04-09 11:40:17 +08:00
<a-input
type="email"
v-model:value="formData.email"
2026-05-04 11:18:56 +08:00
:placeholder="$t('Seller.emailDesc')"
2026-04-09 13:48:46 +08:00
:readonly="!isEdit"
2026-04-09 11:40:17 +08:00
/>
</a-form-item>
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.mobile')" name="mobile">
2026-04-09 11:40:17 +08:00
<a-input
type="tel"
2026-04-27 10:49:37 +08:00
v-model:value="formData.mobile"
2026-05-04 11:18:56 +08:00
:placeholder="$t('Seller.mobileDesc')"
2026-04-09 13:48:46 +08:00
:readonly="!isEdit"
2026-04-09 11:40:17 +08:00
/>
</a-form-item>
</div>
2026-04-09 13:48:46 +08:00
<div class="form-group">
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.links')">
2026-04-09 13:48:46 +08:00
<a-input
placeholder="https://"
2026-04-27 10:49:37 +08:00
v-for="(v, i) in formData.socialLinks"
:key="i"
v-model:value="formData.socialLinks[i]"
2026-04-09 13:48:46 +08:00
:readonly="!isEdit"
>
2026-05-04 11:18:56 +08:00
<template #prefix>{{ $t("Seller.link", { index: i + 1 }) }}</template>
2026-04-09 13:48:46 +08:00
</a-input>
<a-input
placeholder="https://"
v-model:value="newLink"
@keyup.enter.prevent="addLink"
v-if="isEdit"
>
<template #prefix>
<span @click="addLink" style="cursor: pointer">
<svg-icon name="seller-add" size="20" />
</span>
</template>
</a-input>
</a-form-item>
2026-05-04 11:18:56 +08:00
<a-form-item :label="$t('Seller.storeDescription')" name="description">
2026-04-09 13:48:46 +08:00
<a-textarea
v-model:value="formData.description"
2026-05-04 11:18:56 +08:00
:placeholder="$t('Seller.storeDescriptionDesc')"
2026-04-09 13:48:46 +08:00
:maxlength="500"
:readonly="!isEdit"
/>
<span v-show="isEdit" class="tip-length"
>{{ formData.description.length }}/500</span
>
</a-form-item>
</div>
2026-04-09 11:40:17 +08:00
</a-form>
</div>
</template>
<script setup>
2026-04-09 13:48:46 +08:00
import { ref, reactive, watch } from "vue"
2026-04-09 11:40:17 +08:00
import { useRoute, useRouter } from "vue-router"
2026-04-27 10:49:37 +08:00
import { useStore } from "vuex"
2026-05-04 11:18:56 +08:00
import { useI18n } from "vue-i18n"
const { t } = useI18n()
2026-04-27 10:49:37 +08:00
const store = useStore()
const designerInfo = computed(() => store.state.seller.designerInfo)
2026-04-09 11:40:17 +08:00
const route = useRoute()
const router = useRouter()
2026-04-09 13:48:46 +08:00
const props = defineProps({
isEdit: {
type: Boolean,
default: false
}
})
2026-04-09 11:40:17 +08:00
const formRules = {
2026-05-04 11:18:56 +08:00
shopName: [{ required: true, message: t("Seller.storeNameDesc") }],
ownerName: [{ 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") }]
2026-04-09 11:40:17 +08:00
}
2026-04-09 13:48:46 +08:00
2026-04-09 11:40:17 +08:00
const formRef = ref(null)
const formData = reactive({
2026-04-27 10:49:37 +08:00
shopName: "",
ownerName: "",
2026-04-09 11:40:17 +08:00
email: "",
2026-04-27 10:49:37 +08:00
mobile: "",
2026-04-09 11:40:17 +08:00
description: "",
2026-04-27 10:49:37 +08:00
socialLinks: ["", ""]
2026-04-09 11:40:17 +08:00
})
const newLink = ref("")
const addLink = () => {
2026-04-27 10:49:37 +08:00
formData.socialLinks.push(newLink.value)
2026-04-09 11:40:17 +08:00
newLink.value = ""
}
2026-04-27 10:49:37 +08:00
watch(
() => designerInfo.value,
(v) => updateFormData()
)
const updateFormData = () => {
formData.shopName = designerInfo.value.shopName
formData.ownerName = designerInfo.value.ownerName
formData.email = designerInfo.value.email
formData.mobile = designerInfo.value.mobile
formData.description = designerInfo.value.description
formData.socialLinks = JSON.parse(JSON.stringify(designerInfo.value.socialLinks))
}
updateFormData()
2026-04-09 13:48:46 +08:00
watch(
() => props.isEdit,
(v) => (v ? edit() : cancel())
)
2026-04-27 10:49:37 +08:00
const edit = () => {}
2026-04-09 17:17:52 +08:00
const cancel = () => {
formRef.value.clearValidate()
2026-04-27 10:49:37 +08:00
updateFormData()
2026-04-09 17:17:52 +08:00
}
2026-04-09 13:48:46 +08:00
const submit = async () => {
2026-04-17 10:17:03 +08:00
await formRef.value.validate()
return JSON.parse(JSON.stringify(formData))
2026-04-09 11:40:17 +08:00
}
2026-04-09 13:48:46 +08:00
defineExpose({
submit
})
2026-04-09 11:40:17 +08:00
</script>
<style scoped lang="less">
@import "@/assets/style/ant-from-style.less";
.brand-info {
// width: 100%;
// height: 100%;
// overflow: hidden;
// padding: 0 10rem;
}
</style>