Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite
This commit is contained in:
@@ -5,9 +5,20 @@ import { Https } from '@/tool/https'
|
|||||||
import { ApplyStatus } from "./index.d"
|
import { ApplyStatus } from "./index.d"
|
||||||
|
|
||||||
import store from '../index'
|
import store from '../index'
|
||||||
|
interface DesignerInfo {
|
||||||
|
shopName: string,
|
||||||
|
avatar: string,
|
||||||
|
brandBanner: string,
|
||||||
|
ownerName: string,
|
||||||
|
email: string,
|
||||||
|
mobile: string,
|
||||||
|
socialLinks: string,
|
||||||
|
description: string,
|
||||||
|
}
|
||||||
interface Seller {
|
interface Seller {
|
||||||
isSeller: boolean,
|
isSeller: boolean,
|
||||||
applyStatus: number,
|
applyStatus: number,
|
||||||
|
designerInfo: DesignerInfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
const seller: Module<Seller, RootState> = {
|
const seller: Module<Seller, RootState> = {
|
||||||
@@ -15,6 +26,16 @@ const seller: Module<Seller, RootState> = {
|
|||||||
state: {
|
state: {
|
||||||
isSeller: false,
|
isSeller: false,
|
||||||
applyStatus: null,
|
applyStatus: null,
|
||||||
|
designerInfo: {
|
||||||
|
shopName: "--",
|
||||||
|
avatar: null,
|
||||||
|
brandBanner: null,
|
||||||
|
ownerName: "--",
|
||||||
|
email: "--",
|
||||||
|
mobile: "--",
|
||||||
|
socialLinks: ["--"],
|
||||||
|
description: "--"
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
set_isSeller(state: Seller, value: boolean) {
|
set_isSeller(state: Seller, value: boolean) {
|
||||||
@@ -26,13 +47,24 @@ const seller: Module<Seller, RootState> = {
|
|||||||
state.isSeller = true
|
state.isSeller = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
set_designerInfo(state: Seller, value: DesignerInfo) {
|
||||||
|
state.designerInfo = {
|
||||||
|
...value,
|
||||||
|
socialLinks: JSON.parse(value.socialLinks)
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
get_isSeller({ commit }) {
|
get_isSeller({ commit }) {
|
||||||
// Https.axiosGet(Https.httpUrls.checkSellerDesigner).then(rv => {
|
Https.axiosGet(Https.httpUrls.checkSellerDesigner).then(rv => {
|
||||||
// commit('set_isSeller', !!rv)
|
commit('set_isSeller', !!rv)
|
||||||
// })
|
})
|
||||||
|
},
|
||||||
|
async get_designerInfo({ commit }) {
|
||||||
|
const rv = await Https.axiosGet(Https.httpUrls.getDesignerInfo)
|
||||||
|
commit('set_designerInfo', rv)
|
||||||
|
return rv
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -477,6 +477,8 @@ export const Https = {
|
|||||||
checkSellerDesigner: '/seller/designer/check', // 检查卖家是否为设计师
|
checkSellerDesigner: '/seller/designer/check', // 检查卖家是否为设计师
|
||||||
getSellerApplyStatus: '/seller/designer/apply/status', // 获取卖家申请状态
|
getSellerApplyStatus: '/seller/designer/apply/status', // 获取卖家申请状态
|
||||||
submitSellerApply: '/seller/designer/apply', // 提交卖家申请
|
submitSellerApply: '/seller/designer/apply', // 提交卖家申请
|
||||||
|
getDesignerInfo: '/seller/designer/info', // 获取设计师信息
|
||||||
|
updateDesignerInfo: '/seller/designer/update', // 更新设计师信息
|
||||||
getSellerOrderSummary: '/seller/order/summary', // 获取卖家订单数据总览
|
getSellerOrderSummary: '/seller/order/summary', // 获取卖家订单数据总览
|
||||||
getSellerOrderList: '/seller/order/page', // 获取卖家订单列表
|
getSellerOrderList: '/seller/order/page', // 获取卖家订单列表
|
||||||
getListingPopup: '/seller/listing/popup/check', // 获取是否勾选发布作品提示
|
getListingPopup: '/seller/listing/popup/check', // 获取是否勾选发布作品提示
|
||||||
|
|||||||
@@ -2,20 +2,20 @@
|
|||||||
<div class="brand-info">
|
<div class="brand-info">
|
||||||
<a-form :model="formData" :rules="isEdit ? formRules : {}" layout="vertical" ref="formRef">
|
<a-form :model="formData" :rules="isEdit ? formRules : {}" layout="vertical" ref="formRef">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<a-form-item label="Store Name" name="storeName">
|
<a-form-item label="Store Name" name="shopName">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formData.storeName"
|
v-model:value="formData.shopName"
|
||||||
placeholder="Enter the store name"
|
placeholder="Enter the store name"
|
||||||
:maxlength="80"
|
:maxlength="80"
|
||||||
:readonly="!isEdit"
|
:readonly="!isEdit"
|
||||||
/>
|
/>
|
||||||
<span v-show="isEdit" class="tip-length"
|
<span v-show="isEdit" class="tip-length"
|
||||||
>{{ formData.storeName.length }}/80</span
|
>{{ formData.shopName.length }}/80</span
|
||||||
>
|
>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Owner’s Full Name" name="fullName">
|
<a-form-item label="Owner’s Full Name" name="ownerName">
|
||||||
<a-input
|
<a-input
|
||||||
v-model:value="formData.fullName"
|
v-model:value="formData.ownerName"
|
||||||
placeholder="Enter store owner's full name"
|
placeholder="Enter store owner's full name"
|
||||||
:readonly="!isEdit"
|
:readonly="!isEdit"
|
||||||
/>
|
/>
|
||||||
@@ -30,10 +30,10 @@
|
|||||||
:readonly="!isEdit"
|
:readonly="!isEdit"
|
||||||
/>
|
/>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Phone Number" name="phoneNumber">
|
<a-form-item label="Phone Number" 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="Enter phone number"
|
||||||
:readonly="!isEdit"
|
:readonly="!isEdit"
|
||||||
/>
|
/>
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
<a-form-item label="Portfoilo/Social Media Links">
|
<a-form-item label="Portfoilo/Social Media Links">
|
||||||
<a-input
|
<a-input
|
||||||
placeholder="https://"
|
placeholder="https://"
|
||||||
v-for="(v, i) in formData.links"
|
v-for="(v, i) in formData.socialLinks"
|
||||||
:key="v + i"
|
:key="i"
|
||||||
v-model:value="formData.links[i]"
|
v-model:value="formData.socialLinks[i]"
|
||||||
:readonly="!isEdit"
|
:readonly="!isEdit"
|
||||||
>
|
>
|
||||||
<template #prefix>Link {{ i + 1 }}</template>
|
<template #prefix>Link {{ i + 1 }}</template>
|
||||||
@@ -82,6 +82,9 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, watch } from "vue"
|
import { ref, reactive, watch } from "vue"
|
||||||
import { useRoute, useRouter } from "vue-router"
|
import { useRoute, useRouter } from "vue-router"
|
||||||
|
import { useStore } from "vuex"
|
||||||
|
const store = useStore()
|
||||||
|
const designerInfo = computed(() => store.state.seller.designerInfo)
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -91,42 +94,49 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
const formRules = {
|
const formRules = {
|
||||||
storeName: [{ required: true, message: "Enter the store name" }],
|
shopName: [{ required: true, message: "Enter the store name" }],
|
||||||
fullName: [{ required: true, message: "Enter store owner's full name" }],
|
ownerName: [{ required: true, message: "Enter store owner's full name" }],
|
||||||
email: [{ required: true, message: "Enter email" }],
|
email: [{ required: true, message: "Enter email" }],
|
||||||
phoneNumber: [{ required: true, message: "Enter phone number" }],
|
mobile: [{ required: true, message: "Enter phone number" }],
|
||||||
description: [{ required: true, message: "Enter store description" }]
|
description: [{ required: true, message: "Enter store description" }]
|
||||||
}
|
}
|
||||||
|
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
storeName: "",
|
shopName: "",
|
||||||
fullName: "",
|
ownerName: "",
|
||||||
email: "",
|
email: "",
|
||||||
phoneNumber: "",
|
mobile: "",
|
||||||
description: "",
|
description: "",
|
||||||
links: ["", ""]
|
socialLinks: ["", ""]
|
||||||
})
|
})
|
||||||
const newLink = ref("")
|
const newLink = ref("")
|
||||||
const addLink = () => {
|
const addLink = () => {
|
||||||
formData.links.push(newLink.value)
|
formData.socialLinks.push(newLink.value)
|
||||||
newLink.value = ""
|
newLink.value = ""
|
||||||
}
|
}
|
||||||
|
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()
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.isEdit,
|
() => props.isEdit,
|
||||||
(v) => (v ? edit() : cancel())
|
(v) => (v ? edit() : cancel())
|
||||||
)
|
)
|
||||||
const edit = () => {
|
const edit = () => {}
|
||||||
formData.storeName = "测试"
|
|
||||||
formData.fullName = "测试"
|
|
||||||
formData.email = "测试"
|
|
||||||
formData.phoneNumber = "测试"
|
|
||||||
formData.description = "测试"
|
|
||||||
formData.links = ["https://www.baidu.com", "https://www.taobao.com"]
|
|
||||||
}
|
|
||||||
const cancel = () => {
|
const cancel = () => {
|
||||||
formRef.value.clearValidate()
|
formRef.value.clearValidate()
|
||||||
edit()
|
updateFormData()
|
||||||
}
|
}
|
||||||
const submit = async () => {
|
const submit = async () => {
|
||||||
await formRef.value.validate()
|
await formRef.value.validate()
|
||||||
|
|||||||
@@ -41,11 +41,15 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from "vue"
|
import { Https } from "@/tool/https"
|
||||||
|
import { ref, computed } from "vue"
|
||||||
import BrandInfo from "./brand-info.vue"
|
import BrandInfo from "./brand-info.vue"
|
||||||
import ImageClipDialog from "./image-clip-dialog.vue"
|
import ImageClipDialog from "./image-clip-dialog.vue"
|
||||||
const banner = ref("")
|
import { useStore } from "vuex"
|
||||||
const avatar = ref("")
|
const store = useStore()
|
||||||
|
const designerInfo = computed(() => store.state.seller.designerInfo)
|
||||||
|
const avatar = computed(() => designerInfo.value.avatar)
|
||||||
|
const banner = computed(() => designerInfo.value.brandBanner)
|
||||||
const isEdit = ref(false)
|
const isEdit = ref(false)
|
||||||
const brandInfoRef = ref(null)
|
const brandInfoRef = ref(null)
|
||||||
const imageClipDialogRef = ref(null)
|
const imageClipDialogRef = ref(null)
|
||||||
@@ -70,7 +74,8 @@
|
|||||||
imageClipDialogRef.value.open(
|
imageClipDialogRef.value.open(
|
||||||
url,
|
url,
|
||||||
(file) => {
|
(file) => {
|
||||||
banner.value = URL.createObjectURL(file)
|
// banner.value = URL.createObjectURL(file)
|
||||||
|
console.log(URL.createObjectURL(file))
|
||||||
},
|
},
|
||||||
{ ratio: [40, 7], isPreview: false, title: "Crop Brand Banner" }
|
{ ratio: [40, 7], isPreview: false, title: "Crop Brand Banner" }
|
||||||
)
|
)
|
||||||
@@ -81,7 +86,8 @@
|
|||||||
imageClipDialogRef.value.open(
|
imageClipDialogRef.value.open(
|
||||||
url,
|
url,
|
||||||
(file) => {
|
(file) => {
|
||||||
avatar.value = URL.createObjectURL(file)
|
// avatar.value = URL.createObjectURL(file)
|
||||||
|
console.log(URL.createObjectURL(file))
|
||||||
},
|
},
|
||||||
{ ratio: [1, 1], isPreview: true, title: "Crop Avatar" }
|
{ ratio: [1, 1], isPreview: true, title: "Crop Avatar" }
|
||||||
)
|
)
|
||||||
@@ -93,14 +99,17 @@
|
|||||||
const onCancel = () => {
|
const onCancel = () => {
|
||||||
isEdit.value = false
|
isEdit.value = false
|
||||||
}
|
}
|
||||||
const onSubmit = () => {
|
const onSubmit = async () => {
|
||||||
brandInfoRef.value
|
const res = await brandInfoRef.value.submit()
|
||||||
.submit()
|
const data = {
|
||||||
.then((res) => {
|
...designerInfo.value,
|
||||||
console.log(res)
|
...res,
|
||||||
|
socialLinks: JSON.stringify(res.socialLinks)
|
||||||
|
}
|
||||||
|
Https.axiosPut(Https.httpUrls.updateDesignerInfo, data).then((res) => {
|
||||||
isEdit.value = false
|
isEdit.value = false
|
||||||
|
store.commit("seller/set_designerInfo", data)
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|||||||
@@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Https } from "@/tool/https"
|
import { Https } from "@/tool/https"
|
||||||
import { ref, computed,onMounted,onUnmounted } from "vue"
|
import { ref, computed, onMounted, onUnmounted } from "vue"
|
||||||
import { useRoute, useRouter } from "vue-router"
|
import { useRoute, useRouter } from "vue-router"
|
||||||
import toolTipBox from "./toolTipBox.vue"
|
import toolTipBox from "./toolTipBox.vue"
|
||||||
import myEvent from "@/tool/myEvents.js"
|
import myEvent from "@/tool/myEvents.js"
|
||||||
|
import { useStore } from "vuex"
|
||||||
|
const store = useStore()
|
||||||
|
store.dispatch("seller/get_designerInfo")
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
@@ -60,8 +63,8 @@
|
|||||||
visible.value = true
|
visible.value = true
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
onUnmounted(()=>{
|
onUnmounted(() => {
|
||||||
myEvent.remove('newListing')
|
myEvent.remove("newListing")
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|||||||
Reference in New Issue
Block a user