mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2026-08-06 10:57:26 +08:00
- 在 App.vue 中重构站点信息的获取与应用逻辑,提升代码可读性与维护性。 - 更新 Search.vue 组件,优化搜索框的样式与结构,增强用户体验。 - 在 element.scss 中注释掉不再使用的样式,并新增确认收货按钮的样式。 - 改进多个页面的布局与样式,确保响应式设计的一致性与美观性。 - 更新订单相关组件的按钮样式,提升视觉一致性与可用性。
261 lines
6.6 KiB
Vue
261 lines
6.6 KiB
Vue
<template>
|
|
<div class="renovation">
|
|
<div class="btn-bar">
|
|
<el-button type="primary" :loading="submitLoading" @click="saveTemplate">保存模板</el-button>
|
|
<el-button class="ml_10" @click="resetTemplate">还原模板</el-button>
|
|
<el-button class="ml_10" @click="witeLocalStore">将装修内容写入到本地</el-button>
|
|
<el-button class="ml_10" v-if="hasCache" @click="clearCache">清空本地装修缓存</el-button>
|
|
</div>
|
|
<div class="renovation-main">
|
|
<div class="model-list">
|
|
<div class="classification-title">基础模块</div>
|
|
<draggable
|
|
tag="ul"
|
|
:list="modelData"
|
|
:item-key="getModelKey"
|
|
:clone="cloneModel"
|
|
:group="{ name: 'model', pull: 'clone', put: false }"
|
|
:sort="false"
|
|
ghost-class="ghost"
|
|
handle=".model-item"
|
|
>
|
|
<template #item="{ element: model }">
|
|
<li class="model-item">
|
|
<el-icon><Picture /></el-icon>
|
|
<span>{{ model.name }}</span>
|
|
</li>
|
|
</template>
|
|
</draggable>
|
|
</div>
|
|
<div class="show-content">
|
|
<model-form ref="modelForm" :data="modelForm"></model-form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import { Picture } from "@element-plus/icons-vue";
|
|
import { modelData } from "./modelConfig";
|
|
import Draggable from "vuedraggable";
|
|
import ModelForm from "./modelForm.vue";
|
|
import * as API_floor from "@/api/other.js";
|
|
export default {
|
|
components: {
|
|
Draggable,
|
|
ModelForm,
|
|
Picture,
|
|
},
|
|
mounted() {
|
|
const cache = this.getStore('managerPCPageCache')
|
|
this.hasCache = !!cache;
|
|
if(cache){
|
|
this.$Modal.confirm({
|
|
title: '提示',
|
|
content: '获取到本地有缓存数据,是否使用缓存数据?',
|
|
okText: '使用',
|
|
cancelText: '取消',
|
|
onOk: () => {
|
|
let pageData = cache;
|
|
if (pageData) {
|
|
pageData = JSON.parse(pageData);
|
|
if (pageData.list[0].type === "topAdvert") {
|
|
this.$refs.modelForm.topAdvert = pageData.list[0];
|
|
this.$refs.modelForm.navList = pageData.list[1];
|
|
pageData.list.splice(0, 2);
|
|
this.modelForm = pageData;
|
|
} else {
|
|
this.modelForm = { list: [] };
|
|
}
|
|
} else {
|
|
this.modelForm = { list: [] };
|
|
}
|
|
}
|
|
});
|
|
}
|
|
this.getTemplateItem(this.$route.query.id);
|
|
},
|
|
data() {
|
|
return {
|
|
hasCache:false,
|
|
modelData,
|
|
modelForm: { list: [] },
|
|
submitLoading: false,
|
|
};
|
|
},
|
|
methods: {
|
|
getModelKey(model) {
|
|
return model.type || model.name;
|
|
},
|
|
cloneModel(model) {
|
|
const key = Date.now() + "_" + Math.ceil(Math.random() * 99999);
|
|
const cloned = JSON.parse(JSON.stringify(model));
|
|
return {
|
|
...cloned,
|
|
key,
|
|
model: cloned.type + "_" + key,
|
|
};
|
|
},
|
|
clearCache(){
|
|
this.setStore('managerPCPageCache', '')
|
|
this.$Message.success('清除成功')
|
|
},
|
|
witeLocalStore(){
|
|
const data ={...this.modelForm}
|
|
data.list.unshift(this.$refs.modelForm.navList);
|
|
data.list.unshift(this.$refs.modelForm.topAdvert);
|
|
this.setStore('managerPCPageCache', data)
|
|
this.$Message.success('写入成功')
|
|
},
|
|
saveTemplate() {
|
|
this.submitTemplate(this.$route.query.pageShow ? 'OPEN' : 'CLOSE')
|
|
},
|
|
submitTemplate(pageShow) {
|
|
this.submitLoading = true
|
|
const modelForm = JSON.parse(JSON.stringify(this.modelForm))
|
|
modelForm.list.unshift(this.$refs.modelForm.navList);
|
|
modelForm.list.unshift(this.$refs.modelForm.topAdvert);
|
|
const data = {
|
|
id: this.$route.query.id,
|
|
pageData: JSON.stringify(modelForm),
|
|
pageShow: this.$route.query.pageType === 'SPECIAL' ? 'CLOSE' : pageShow,
|
|
pageClientType: 'PC',
|
|
};
|
|
API_floor.updateHome(this.$route.query.id, data).then((res) => {
|
|
this.submitLoading = false
|
|
if (res.success) {
|
|
this.$Message.success("保存模板成功");
|
|
}
|
|
});
|
|
},
|
|
resetTemplate() {
|
|
this.getTemplateItem(this.$route.query.id);
|
|
},
|
|
getTemplateItem(id) {
|
|
API_floor.getHomeData(id).then((res) => {
|
|
if (res.success) {
|
|
let pageData = res.result.pageData;
|
|
if (pageData) {
|
|
pageData = JSON.parse(pageData);
|
|
if (pageData.list[0].type === "topAdvert") {
|
|
this.$refs.modelForm.topAdvert = pageData.list[0];
|
|
this.$refs.modelForm.navList = pageData.list[1];
|
|
pageData.list.splice(0, 2);
|
|
this.modelForm = pageData;
|
|
} else {
|
|
this.modelForm = { list: [] };
|
|
}
|
|
} else {
|
|
this.modelForm = { list: [] };
|
|
}
|
|
}
|
|
});
|
|
},
|
|
},
|
|
watch: {
|
|
modelForm: {
|
|
deep: true,
|
|
handler: function (val) {
|
|
console.log(val);
|
|
},
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.renovation {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 100%;
|
|
}
|
|
.btn-bar {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 99;
|
|
background: #fff;
|
|
height: 50px;
|
|
padding: 10px;
|
|
box-shadow: 1px 1px 10px #999;
|
|
}
|
|
.renovation-main {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 20px;
|
|
flex: 1;
|
|
padding-top: 10px;
|
|
}
|
|
.model-list {
|
|
flex-shrink: 0;
|
|
width: 130px;
|
|
max-height: calc(100vh - 180px);
|
|
overflow-y: auto;
|
|
padding: 10px;
|
|
background: #fff;
|
|
position: sticky;
|
|
top: 60px;
|
|
z-index: 10;
|
|
box-shadow: 1px 1px 10px #999;
|
|
.classification-title {
|
|
width: 100%;
|
|
height: 30px;
|
|
line-height: 30px;
|
|
text-align: center;
|
|
}
|
|
:deep(ul) {
|
|
width: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
.model-item {
|
|
width: 110px;
|
|
height: 30px;
|
|
background: #eee;
|
|
margin-top: 10px;
|
|
line-height: 30px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 4px;
|
|
color: #999;
|
|
transition: 0.15s;
|
|
border-radius: 4px;
|
|
&:hover {
|
|
background: $theme_color;
|
|
cursor: move;
|
|
color: #fff;
|
|
}
|
|
}
|
|
.ghost::after {
|
|
border: none;
|
|
height: 0;
|
|
content: "";
|
|
}
|
|
}
|
|
.show-content {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow-x: auto;
|
|
}
|
|
.ghost {
|
|
background: #fff;
|
|
height: 30px;
|
|
position: relative;
|
|
&::after {
|
|
content: "松开鼠标添加模块";
|
|
position: absolute;
|
|
background: #fff;
|
|
border: 1px dashed #409eff;
|
|
color: #409eff;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 50px;
|
|
text-align: center;
|
|
line-height: 50px;
|
|
}
|
|
}
|
|
</style>
|