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">
|
|
|
|
|
|
<a-form-item label="Store Name" name="storeName">
|
|
|
|
|
|
<a-input
|
|
|
|
|
|
v-model:value="formData.storeName"
|
|
|
|
|
|
placeholder="Enter the store name"
|
|
|
|
|
|
:maxlength="80"
|
|
|
|
|
|
:readonly="!isEdit"
|
|
|
|
|
|
/>
|
|
|
|
|
|
<span v-show="isEdit" class="tip-length"
|
|
|
|
|
|
>{{ formData.storeName.length }}/80</span
|
|
|
|
|
|
>
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
<a-form-item label="Owner’s Full Name" name="fullName">
|
|
|
|
|
|
<a-input
|
|
|
|
|
|
v-model:value="formData.fullName"
|
|
|
|
|
|
placeholder="Enter store owner's full name"
|
|
|
|
|
|
:readonly="!isEdit"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
</div>
|
2026-04-09 11:40:17 +08:00
|
|
|
|
<div class="form-group">
|
|
|
|
|
|
<a-form-item label="Email" name="email">
|
|
|
|
|
|
<a-input
|
|
|
|
|
|
type="email"
|
|
|
|
|
|
v-model:value="formData.email"
|
|
|
|
|
|
placeholder="Enter email"
|
2026-04-09 13:48:46 +08:00
|
|
|
|
:readonly="!isEdit"
|
2026-04-09 11:40:17 +08:00
|
|
|
|
/>
|
|
|
|
|
|
</a-form-item>
|
|
|
|
|
|
<a-form-item label="Phone Number" name="phoneNumber">
|
|
|
|
|
|
<a-input
|
|
|
|
|
|
type="tel"
|
|
|
|
|
|
v-model:value="formData.phoneNumber"
|
|
|
|
|
|
placeholder="Enter phone number"
|
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">
|
|
|
|
|
|
<a-form-item label="Portfoilo/Social Media Links">
|
|
|
|
|
|
<a-input
|
|
|
|
|
|
placeholder="https://"
|
|
|
|
|
|
v-for="(v, i) in formData.links"
|
|
|
|
|
|
:key="i"
|
|
|
|
|
|
v-model:value="formData.links[i]"
|
|
|
|
|
|
:readonly="!isEdit"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template #prefix>Link {{ i + 1 }}</template>
|
|
|
|
|
|
</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>
|
|
|
|
|
|
<a-form-item label="Store Description" name="description">
|
|
|
|
|
|
<a-textarea
|
|
|
|
|
|
v-model:value="formData.description"
|
|
|
|
|
|
placeholder="Briefly describe your design style and store features..."
|
|
|
|
|
|
: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"
|
|
|
|
|
|
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 = {
|
|
|
|
|
|
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" }]
|
|
|
|
|
|
}
|
2026-04-09 13:48:46 +08:00
|
|
|
|
|
2026-04-09 11:40:17 +08:00
|
|
|
|
const formRef = ref(null)
|
|
|
|
|
|
const formData = reactive({
|
|
|
|
|
|
storeName: "",
|
|
|
|
|
|
fullName: "",
|
|
|
|
|
|
email: "",
|
|
|
|
|
|
phoneNumber: "",
|
|
|
|
|
|
description: "",
|
|
|
|
|
|
links: ["", ""]
|
|
|
|
|
|
})
|
|
|
|
|
|
const newLink = ref("")
|
|
|
|
|
|
const addLink = () => {
|
|
|
|
|
|
formData.links.push(newLink.value)
|
|
|
|
|
|
newLink.value = ""
|
|
|
|
|
|
}
|
2026-04-09 13:48:46 +08:00
|
|
|
|
watch(
|
|
|
|
|
|
() => props.isEdit,
|
|
|
|
|
|
(v) => (v ? edit() : cancel())
|
|
|
|
|
|
)
|
|
|
|
|
|
const edit = () => {}
|
|
|
|
|
|
const cancel = () => {}
|
|
|
|
|
|
const submit = async () => {
|
|
|
|
|
|
const valid = await formRef.value.validate()
|
|
|
|
|
|
if (!valid) return Promise.reject(false)
|
|
|
|
|
|
console.log(valid)
|
|
|
|
|
|
return valid
|
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>
|