Branch_csl #31

Merged
root merged 3 commits from Branch_csl into master 2024-10-08 17:44:33 +08:00
5 changed files with 500 additions and 144 deletions
Showing only changes of commit d83522607b - Show all commits

View File

@ -249,6 +249,7 @@ watch(
const component = componentConfigs[item.id] const component = componentConfigs[item.id]
return { ...component, property: item.property } return { ...component, property: item.property }
}) })
console.log(modelValue,"pageComponents.value")
}, },
{ {
immediate: true immediate: true

View File

@ -469,7 +469,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
] ]
}, },
{ {
path: '/diy', path: '/diy-template/diy',
name: 'DiyCenter', name: 'DiyCenter',
meta: { hidden: true }, meta: { hidden: true },
component: Layout, component: Layout,

View File

@ -1,18 +1,10 @@
<template> <template>
<DiyEditor <DiyEditor v-if="formData && !formLoading" v-model="currentFormData!.property"
v-if="formData && !formLoading" :title="templateItems[selectedTemplateItem].name" :libs="libs" :show-page-config="selectedTemplateItem !== 0"
v-model="currentFormData!.property" :show-tab-bar="selectedTemplateItem === 0" :show-navigation-bar="selectedTemplateItem !== 0"
:title="templateItems[selectedTemplateItem].name" :preview-url="previewUrl" @save="submitForm" @reset="handleEditorReset">
:libs="libs"
:show-page-config="selectedTemplateItem !== 0"
:show-tab-bar="selectedTemplateItem === 0"
:show-navigation-bar="selectedTemplateItem !== 0"
:preview-url="previewUrl"
@save="submitForm"
@reset="handleEditorReset"
>
<template #toolBarLeft> <template #toolBarLeft>
<el-radio-group <!-- <el-radio-group
v-model="selectedTemplateItem" v-model="selectedTemplateItem"
class="h-full!" class="h-full!"
@change="handleTemplateItemChange" @change="handleTemplateItemChange"
@ -22,82 +14,90 @@
<Icon :icon="item.icon" :size="24" /> <Icon :icon="item.icon" :size="24" />
</el-radio-button> </el-radio-button>
</el-tooltip> </el-tooltip>
</el-radio-group> </el-radio-group> -->
</template> </template>
</DiyEditor> </DiyEditor>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
// TODO @ decorate index.vue // TODO @ decorate index.vue
import * as DiyTemplateApi from '@/api/mall/promotion/diy/template' import * as DiyTemplateApi from '@/api/mall/promotion/diy/template'
import * as DiyPageApi from '@/api/mall/promotion/diy/page' import * as DiyPageApi from '@/api/mall/promotion/diy/page'
import { useTagsViewStore } from '@/store/modules/tagsView' import { useTagsViewStore } from '@/store/modules/tagsView'
import { DiyComponentLibrary, PAGE_LIBS } from '@/components/DiyEditor/util' // DIY DiyEditor import { DiyComponentLibrary, PAGE_LIBS } from '@/components/DiyEditor/util' // DIY DiyEditor
import { toNumber } from 'lodash-es' import { toNumber } from 'lodash-es'
// import { watch } from 'vue';
/** 装修模板表单 */ /** 装修模板表单 */
defineOptions({ name: 'DiyTemplateDecorate' }) defineOptions({ name: 'DiyTemplateDecorate' })
/** 初始化 **/
// const { currentRoute } = useRouter() //
const selectedTemplateItem = ref(0) const { delView } = useTagsViewStore() //
const templateItems = reactive([ const route = useRoute();
//
const selectedTemplateItem = ref('0')
// console.log(selectedTemplateItem.value,'selectedTemplateItemselectedTemplateItem')
const templateItems = reactive([
{ name: '基础设置', icon: 'ep:iphone' }, { name: '基础设置', icon: 'ep:iphone' },
{ name: '首页', icon: 'ep:home-filled' }, { name: '首页', icon: 'ep:home-filled' },
{ name: '我的', icon: 'ep:user-filled' } { name: '我的', icon: 'ep:user-filled' }
]) ])
const message = useMessage() // const message = useMessage() //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formData = ref<DiyTemplateApi.DiyTemplatePropertyVO>() const formData = ref<DiyTemplateApi.DiyTemplatePropertyVO>()
const formRef = ref() // Ref const formRef = ref() // Ref
// //
const currentFormData = ref<DiyTemplateApi.DiyTemplatePropertyVO | DiyPageApi.DiyPageVO>() const currentFormData = ref<DiyTemplateApi.DiyTemplatePropertyVO | DiyPageApi.DiyPageVO>()
// H5 // H5
const previewUrl = ref('') const previewUrl = ref('')
// //
const getPageDetail = async (id: any) => { const getPageDetail = async (id : any) => {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await DiyTemplateApi.getDiyTemplateProperty(id) formData.value = await DiyTemplateApi.getDiyTemplateProperty(id)
currentFormData.value = formData.value currentFormData.value = formData.value
// //
const domain = import.meta.env.VITE_MALL_H5_DOMAIN const domain = import.meta.env.VITE_MALL_H5_DOMAIN
previewUrl.value = `${domain}/#/pages/index/index?templateId=${formData.value.id}` previewUrl.value = `${domain}/#/pages/index/index?templateId=${formData.value.id}`
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
}
//
const templateLibs = [] as DiyComponentLibrary[]
//
const libs = ref<DiyComponentLibrary[]>(templateLibs)
//
const handleTemplateItemChange = () => {
//
if (selectedTemplateItem.value === 0) {
libs.value = templateLibs
currentFormData.value = formData.value
return
} }
//
const templateLibs = [] as DiyComponentLibrary[]
//
const libs = ref<DiyComponentLibrary[]>(templateLibs)
//
const handleTemplateItemChange = () => {
//
// if (selectedTemplateItem.value === 0) {
// libs.value = templateLibs
// currentFormData.value = formData.value
// return
// }
// //
libs.value = PAGE_LIBS libs.value = PAGE_LIBS
currentFormData.value = formData.value!.pages.find( console.log(formData.value!.pages, 'PAGE_LIBS')
(page: DiyPageApi.DiyPageVO) => page.name === templateItems[selectedTemplateItem.value].name // currentFormData.value = formData.value!.pages.find(
) // // (page: DiyPageApi.DiyPageVO) => page.name === templateItems[selectedTemplateItem.value].name
} // (page: DiyPageApi.DiyPageVO) => page.name === templateItems[1].name
// )
currentFormData.value = formData.value!.pages[selectedTemplateItem.value]
console.log(selectedTemplateItem.value, 'selectedTemplateItem.value11111111111111')
}
// //
const submitForm = async () => { const submitForm = async () => {
// //
if (!formRef) return if (!formRef) return
// //
formLoading.value = true formLoading.value = true
try { try {
if (selectedTemplateItem.value === 0) { if (selectedTemplateItem.value === '0') {
// //
await DiyTemplateApi.updateDiyTemplateProperty(unref(formData)!) await DiyTemplateApi.updateDiyTemplateProperty(unref(formData)!)
} else { } else {
@ -108,10 +108,10 @@ const submitForm = async () => {
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
// //
const resetForm = () => { const resetForm = () => {
formData.value = { formData.value = {
id: undefined, id: undefined,
name: '', name: '',
@ -123,19 +123,19 @@ const resetForm = () => {
pages: [] pages: []
} as DiyTemplateApi.DiyTemplatePropertyVO } as DiyTemplateApi.DiyTemplatePropertyVO
formRef.value?.resetFields() formRef.value?.resetFields()
} }
// //
const handleEditorReset = () => storePageIndex() const handleEditorReset = () => storePageIndex()
//#region //#region
// //
const DIY_PAGE_INDEX_KEY = 'diy_page_index' const DIY_PAGE_INDEX_KEY = 'diy_page_index'
// 1. // 1.
const storePageIndex = () => const storePageIndex = () =>
sessionStorage.setItem(DIY_PAGE_INDEX_KEY, `${selectedTemplateItem.value}`) sessionStorage.setItem(DIY_PAGE_INDEX_KEY, `${selectedTemplateItem.value}`)
// 2. // 2.
const recoverPageIndex = () => { const recoverPageIndex = () => {
// //
const pageIndex = toNumber(sessionStorage.getItem(DIY_PAGE_INDEX_KEY)) || 0 const pageIndex = toNumber(sessionStorage.getItem(DIY_PAGE_INDEX_KEY)) || 0
// //
@ -145,23 +145,28 @@ const recoverPageIndex = () => {
selectedTemplateItem.value = pageIndex selectedTemplateItem.value = pageIndex
handleTemplateItemChange() handleTemplateItemChange()
} }
}
//#endregion
/** 初始化 **/
const { currentRoute } = useRouter() //
const { delView } = useTagsViewStore() //
onMounted(async () => {
resetForm()
if (!currentRoute.value.params.id) {
message.warning('参数错误,页面编号不能为空!')
delView(unref(currentRoute))
return
} }
//#endregion
onMounted(async () => {
resetForm()
// if (!currentRoute.value.params.id) {
// message.warning('')
// delView(unref(currentRoute))
// return
// }
// //
await getPageDetail(currentRoute.value.params.id) // await getPageDetail(currentRoute.value.params.id)
await getPageDetail(4)
// //
recoverPageIndex() recoverPageIndex()
}) currentFormData.value = formData.value!.pages[0]
})
// watch(() => route.path, (newPath, oldPath) => {
// console.log(newPath,'newPathnewPath');
// // handleTemplateItemChange()
// }, { immediate: true });
</script> </script>

View File

@ -0,0 +1,175 @@
<template>
<DiyEditor v-if="formData && !formLoading" v-model="currentFormData!.property"
:title="templateItems[selectedTemplateItem].name" :libs="libs" :show-page-config="selectedTemplateItem !== 0"
:show-tab-bar="selectedTemplateItem === 0" :show-navigation-bar="selectedTemplateItem !== 0"
:preview-url="previewUrl" @save="submitForm" @reset="handleEditorReset">
<template #toolBarLeft>
<!-- <el-radio-group
v-model="selectedTemplateItem"
class="h-full!"
@change="handleTemplateItemChange"
>
<el-tooltip v-for="(item, index) in templateItems" :key="index" :content="item.name">
<el-radio-button :label="index">
<Icon :icon="item.icon" :size="24" />
</el-radio-button>
</el-tooltip>
</el-radio-group> -->
</template>
</DiyEditor>
</template>
<script setup lang="ts">
// TODO @ decorate index.vue
import * as DiyTemplateApi from '@/api/mall/promotion/diy/template'
import * as DiyPageApi from '@/api/mall/promotion/diy/page'
import { useTagsViewStore } from '@/store/modules/tagsView'
import { DiyComponentLibrary, PAGE_LIBS } from '@/components/DiyEditor/util' // DIY DiyEditor
import { toNumber } from 'lodash-es'
// import { watch } from 'vue';
/** 装修模板表单 */
defineOptions({ name: 'DiyTemplateDecorate' })
/** 初始化 **/
const { currentRoute } = useRouter() //
const { delView } = useTagsViewStore() //
const route = useRoute();
//
const selectedTemplateItem = ref('1')
// console.log(selectedTemplateItem.value,'selectedTemplateItemselectedTemplateItem')
const templateItems = reactive([
{ name: '基础设置', icon: 'ep:iphone' },
{ name: '首页', icon: 'ep:home-filled' },
{ name: '我的', icon: 'ep:user-filled' }
])
const message = useMessage() //
const formLoading = ref(false) // 12
const formData = ref<DiyTemplateApi.DiyTemplatePropertyVO>()
const formRef = ref() // Ref
//
const currentFormData = ref<DiyTemplateApi.DiyTemplatePropertyVO | DiyPageApi.DiyPageVO>()
// H5
const previewUrl = ref('')
//
const getPageDetail = async (id : any) => {
formLoading.value = true
try {
formData.value = await DiyTemplateApi.getDiyTemplateProperty(id)
currentFormData.value = formData.value
//
const domain = import.meta.env.VITE_MALL_H5_DOMAIN
previewUrl.value = `${domain}/#/pages/index/index?templateId=${formData.value.id}`
} finally {
formLoading.value = false
}
}
//
const templateLibs = [] as DiyComponentLibrary[]
//
const libs = ref<DiyComponentLibrary[]>(templateLibs)
//
const handleTemplateItemChange = () => {
//
// if (selectedTemplateItem.value === 0) {
// libs.value = templateLibs
// currentFormData.value = formData.value
// return
// }
//
libs.value = PAGE_LIBS
console.log(formData.value!.pages, 'PAGE_LIBS')
// currentFormData.value = formData.value!.pages.find(
// // (page: DiyPageApi.DiyPageVO) => page.name === templateItems[selectedTemplateItem.value].name
// (page: DiyPageApi.DiyPageVO) => page.name === templateItems[1].name
// )
currentFormData.value = formData.value!.pages[selectedTemplateItem.value]
console.log(selectedTemplateItem.value, 'selectedTemplateItem.value11111111111111')
}
//
const submitForm = async () => {
//
if (!formRef) return
//
formLoading.value = true
try {
if (selectedTemplateItem.value === '0') {
//
await DiyTemplateApi.updateDiyTemplateProperty(unref(formData)!)
} else {
//
await DiyPageApi.updateDiyPageProperty(unref(currentFormData)!)
}
message.success('保存成功')
} finally {
formLoading.value = false
}
}
//
const resetForm = () => {
formData.value = {
id: undefined,
name: '',
used: false,
usedTime: undefined,
remark: '',
previewPicUrls: [],
property: '',
pages: []
} as DiyTemplateApi.DiyTemplatePropertyVO
formRef.value?.resetFields()
}
//
const handleEditorReset = () => storePageIndex()
//#region
//
const DIY_PAGE_INDEX_KEY = 'diy_page_index'
// 1.
const storePageIndex = () =>
sessionStorage.setItem(DIY_PAGE_INDEX_KEY, `${selectedTemplateItem.value}`)
// 2.
const recoverPageIndex = () => {
//
const pageIndex = toNumber(sessionStorage.getItem(DIY_PAGE_INDEX_KEY)) || 0
//
sessionStorage.removeItem(DIY_PAGE_INDEX_KEY)
//
if (pageIndex !== selectedTemplateItem.value) {
selectedTemplateItem.value = pageIndex
handleTemplateItemChange()
}
}
//#endregion
onMounted(async () => {
resetForm()
// if (!currentRoute.value.params.id) {
// message.warning('')
// delView(unref(currentRoute))
// return
// }
//
// await getPageDetail(currentRoute.value.params.id)
await getPageDetail(4)
//
recoverPageIndex()
selectedTemplateItem.value = 1
currentFormData.value = formData.value!.pages[selectedTemplateItem.value]
// handleTemplateItemChange()
console.log(currentRoute.value.params.id, "currentRoute.value.params.id");
})
// watch(() => route.path, (newPath, oldPath) => {
// console.log(newPath,'newPathnewPath');
// // handleTemplateItemChange()
// }, { immediate: true });
</script>

View File

@ -0,0 +1,175 @@
<template>
<DiyEditor v-if="formData && !formLoading" v-model="currentFormData!.property"
:title="templateItems[selectedTemplateItem].name" :libs="libs" :show-page-config="selectedTemplateItem !== 0"
:show-tab-bar="selectedTemplateItem === 0" :show-navigation-bar="selectedTemplateItem !== 0"
:preview-url="previewUrl" @save="submitForm" @reset="handleEditorReset">
<template #toolBarLeft>
<!-- <el-radio-group
v-model="selectedTemplateItem"
class="h-full!"
@change="handleTemplateItemChange"
>
<el-tooltip v-for="(item, index) in templateItems" :key="index" :content="item.name">
<el-radio-button :label="index">
<Icon :icon="item.icon" :size="24" />
</el-radio-button>
</el-tooltip>
</el-radio-group> -->
</template>
</DiyEditor>
</template>
<script setup lang="ts">
// TODO @ decorate index.vue
import * as DiyTemplateApi from '@/api/mall/promotion/diy/template'
import * as DiyPageApi from '@/api/mall/promotion/diy/page'
import { useTagsViewStore } from '@/store/modules/tagsView'
import { DiyComponentLibrary, PAGE_LIBS } from '@/components/DiyEditor/util' // DIY DiyEditor
import { toNumber } from 'lodash-es'
// import { watch } from 'vue';
/** 装修模板表单 */
defineOptions({ name: 'DiyTemplateDecorate' })
/** 初始化 **/
const { currentRoute } = useRouter() //
const { delView } = useTagsViewStore() //
const route = useRoute();
//
const selectedTemplateItem = ref('1')
// console.log(selectedTemplateItem.value,'selectedTemplateItemselectedTemplateItem')
const templateItems = reactive([
{ name: '基础设置', icon: 'ep:iphone' },
{ name: '首页', icon: 'ep:home-filled' },
{ name: '我的', icon: 'ep:user-filled' }
])
const message = useMessage() //
const formLoading = ref(false) // 12
const formData = ref<DiyTemplateApi.DiyTemplatePropertyVO>()
const formRef = ref() // Ref
//
const currentFormData = ref<DiyTemplateApi.DiyTemplatePropertyVO | DiyPageApi.DiyPageVO>()
// H5
const previewUrl = ref('')
//
const getPageDetail = async (id : any) => {
formLoading.value = true
try {
formData.value = await DiyTemplateApi.getDiyTemplateProperty(id)
currentFormData.value = formData.value
//
const domain = import.meta.env.VITE_MALL_H5_DOMAIN
previewUrl.value = `${domain}/#/pages/index/index?templateId=${formData.value.id}`
} finally {
formLoading.value = false
}
}
//
const templateLibs = [] as DiyComponentLibrary[]
//
const libs = ref<DiyComponentLibrary[]>(templateLibs)
//
const handleTemplateItemChange = () => {
//
// if (selectedTemplateItem.value === 0) {
// libs.value = templateLibs
// currentFormData.value = formData.value
// return
// }
//
libs.value = PAGE_LIBS
console.log(formData.value!.pages, 'PAGE_LIBS')
// currentFormData.value = formData.value!.pages.find(
// // (page: DiyPageApi.DiyPageVO) => page.name === templateItems[selectedTemplateItem.value].name
// (page: DiyPageApi.DiyPageVO) => page.name === templateItems[1].name
// )
currentFormData.value = formData.value!.pages[selectedTemplateItem.value]
console.log(selectedTemplateItem.value, 'selectedTemplateItem.value11111111111111')
}
//
const submitForm = async () => {
//
if (!formRef) return
//
formLoading.value = true
try {
if (selectedTemplateItem.value === '0') {
//
await DiyTemplateApi.updateDiyTemplateProperty(unref(formData)!)
} else {
//
await DiyPageApi.updateDiyPageProperty(unref(currentFormData)!)
}
message.success('保存成功')
} finally {
formLoading.value = false
}
}
//
const resetForm = () => {
formData.value = {
id: undefined,
name: '',
used: false,
usedTime: undefined,
remark: '',
previewPicUrls: [],
property: '',
pages: []
} as DiyTemplateApi.DiyTemplatePropertyVO
formRef.value?.resetFields()
}
//
const handleEditorReset = () => storePageIndex()
//#region
//
const DIY_PAGE_INDEX_KEY = 'diy_page_index'
// 1.
const storePageIndex = () =>
sessionStorage.setItem(DIY_PAGE_INDEX_KEY, `${selectedTemplateItem.value}`)
// 2.
const recoverPageIndex = () => {
//
const pageIndex = toNumber(sessionStorage.getItem(DIY_PAGE_INDEX_KEY)) || 0
//
sessionStorage.removeItem(DIY_PAGE_INDEX_KEY)
//
if (pageIndex !== selectedTemplateItem.value) {
selectedTemplateItem.value = pageIndex
handleTemplateItemChange()
}
}
//#endregion
onMounted(async () => {
resetForm()
// if (!currentRoute.value.params.id) {
// message.warning('')
// delView(unref(currentRoute))
// return
// }
//
// await getPageDetail(currentRoute.value.params.id)
await getPageDetail(4)
//
recoverPageIndex()
libs.value = templateLibs
currentFormData.value = formData.value
// handleTemplateItemChange()
console.log(currentRoute.value.params.id, "currentRoute.value.params.id");
})
// watch(() => route.path, (newPath, oldPath) => {
// console.log(newPath,'newPathnewPath');
// // handleTemplateItemChange()
// }, { immediate: true });
</script>