From 121b714d710cf3c865f4a1b5efe81abec11056d1 Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Sat, 01 Nov 2025 14:36:36 +0800
Subject: [PATCH] 修复名片模板生成失败问题 修复后台名片查看不显示头像和logo问题
---
shop_vue/src/views/plus/business/template/add.vue | 170 ++++++++++++++++++++++++++++----------------------------
1 files changed, 85 insertions(+), 85 deletions(-)
diff --git a/shop_vue/src/views/plus/business/template/add.vue b/shop_vue/src/views/plus/business/template/add.vue
index 29d388e..876a449 100644
--- a/shop_vue/src/views/plus/business/template/add.vue
+++ b/shop_vue/src/views/plus/business/template/add.vue
@@ -7,7 +7,7 @@
<div class="user" v-loading="loading">
<div class="common-form">名片模板添加</div>
<div class="poster-box d-s-s">
- <div class="left-box">
+ <div class="left-box" style="width: auto;height: auto;">
<div v-if="form.backdrop" class="img"><img v-img-url="form.backdrop.src" /></div>
<div class="userinfo">
<!-- 头像 -->
@@ -18,7 +18,7 @@
:style="'width:' + form.avatar.width + 'px;height:' + form.avatar.width + 'px;top:' + form.avatar.top + 'px;left:' + form.avatar.left + 'px;background-color:#f0f0f0;display:flex;align-items:center;justify-content:center;color:#999'">
<span>头像</span>
</div>
-
+
<!-- Logo -->
<div v-if="form.logo.display == 1"
class="logo pa"
@@ -27,66 +27,66 @@
:style="'width:' + form.logo.width + 'px;height:' + form.logo.height + 'px;top:' + form.logo.top + 'px;left:' + form.logo.left + 'px;'">
<img v-img-url="form.logo.src" alt="" />
</div>
-
+
<!-- 姓名 -->
<div class="name pa"
v-drag="{type:'name',obj:this}"
:style="'font-size:' + form.name.fontSize + 'px;color:' + form.name.color + ';top:' + form.name.top + 'px;left:' + form.name.left + 'px;'">
这里是姓名
</div>
-
+
<!-- 手机 -->
<div class="mobile pa"
v-drag="{type:'mobile',obj:this}"
:style="'font-size:' + form.mobile.fontSize + 'px;color:' + form.mobile.color + ';top:' + form.mobile.top + 'px;left:' + form.mobile.left + 'px;'">
手机:134xxxxxxxx
</div>
-
+
<!-- 公司 -->
<div v-for="(item, index) in form.unit" :key="'unit' + index"
:class="'unit' + index + ' pa'"
v-drag="{type:'unit', index:index, obj:this}"
:style="'font-size:' + form.unit[index].fontSize + 'px;color:' + form.unit[index].color + ';top:' + form.unit[index].top + 'px;left:' + form.unit[index].left + 'px;'">
- 这是公司{{index+1}}
+ 这是公司
</div>
-
+
<!-- 职位 -->
<div v-for="(item, index) in form.duties" :key="'duties' + index"
:class="'duties' + index + ' pa'"
v-drag="{type:'duties', index:index, obj:this}"
:style="'font-size:' + form.duties[index].fontSize + 'px;color:' + form.duties[index].color + ';top:' + form.duties[index].top + 'px;left:' + form.duties[index].left + 'px;'">
- 这是职位{{index+1}}
+ 这是职位
</div>
-
+
<!-- 地址 -->
<div v-for="(item, index) in form.address" :key="'address' + index"
:class="'address' + index + ' pa'"
v-drag="{type:'address', index:index, obj:this}"
:style="'font-size:' + form.address[index].fontSize + 'px;color:' + form.address[index].color + ';top:' + form.address[index].top + 'px;left:' + form.address[index].left + 'px;'">
- 地址:广西壮族自治区南宁市江南区壮锦大道八桂绿城·龙湖御景-A栋-2单元{{index+1}}号
+ 地址:广西壮族自治区南宁市江南区壮锦大道八桂绿城·龙湖御景-A栋-2单元xxxx号
</div>
-
+
<!-- 微信 -->
<div class="wechat pa"
v-drag="{type:'wechat',obj:this}"
:style="'font-size:' + form.wechat.fontSize + 'px;color:' + form.wechat.color + ';top:' + form.wechat.top + 'px;left:' + form.wechat.left + 'px;'">
微信:134xxxxxxxx
</div>
-
+
<!-- 邮箱 -->
<div class="mailbox pa"
v-drag="{type:'mailbox',obj:this}"
:style="'font-size:' + form.mailbox.fontSize + 'px;color:' + form.mailbox.color + ';top:' + form.mailbox.top + 'px;left:' + form.mailbox.left + 'px;'">
邮箱:134xxxxxxxx@.xxx.com
</div>
-
+
<!-- 电话 -->
<div class="phone pa"
v-drag="{type:'phone',obj:this}"
:style="'font-size:' + form.phone.fontSize + 'px;color:' + form.phone.color + ';top:' + form.phone.top + 'px;left:' + form.phone.left + 'px;'">
电话:xxx-xxx-xxx
</div>
-
+
<!-- 自定义图标 -->
<div v-for="(item, index) in form.iconL" :key="'iconL' + index"
:class="'iconL' + index + ' pa icon'"
@@ -96,7 +96,7 @@
</div>
</div>
</div>
-
+
<div class="right-box flex-1">
<el-form size="small" ref="form" :model="form" label-width="150px">
<!-- 背景图 -->
@@ -104,7 +104,7 @@
<el-button type="primary" @click="openUpload(1)">上传图片</el-button>
<div class="tips">尺寸建议:宽750像素 高大于(等于)1200像素</div>
</el-form-item>
-
+
<!-- 头像设置 -->
<el-form-item label="是否显示头像">
<el-radio v-model="form.avatar.display" label="1">显示</el-radio>
@@ -124,7 +124,7 @@
<el-input v-model.number="form.avatar.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- Logo设置 -->
<el-form-item label="是否显示Logo">
<el-radio v-model="form.logo.display" label="1">显示</el-radio>
@@ -151,7 +151,7 @@
<el-input v-model.number="form.logo.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- 姓名设置 -->
<el-form-item label="姓名字体大小" prop="name.fontSize" :rules="[{ required: true, message: '请输入字体大小' }]">
<el-input v-model.number="form.name.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -166,7 +166,7 @@
<el-input v-model.number="form.name.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- 手机设置 -->
<el-form-item label="手机字体大小" prop="mobile.fontSize" :rules="[{ required: true, message: '请输入字体大小' }]">
<el-input v-model.number="form.mobile.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -181,8 +181,8 @@
<el-input v-model.number="form.mobile.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
- <!-- 图标数量设置 -->
+
+ <!-- 图标数量设置
<el-form-item label="图标数量">
<div class="d-s-r">
<el-button type="text" @click="editIcon" :disabled="form.iconL.length <= 0">
@@ -193,8 +193,8 @@
<i class="el-icon-plus"></i>
</el-button>
</div>
- </el-form-item>
-
+ </el-form-item>-->
+
<!-- 图标设置 -->
<div v-for="(item, index) in form.iconL" :key="'icon_setting' + index" class="icon-setting">
<el-form-item :label="'图标' + (index + 1)">
@@ -215,8 +215,8 @@
</div>
</el-form-item>
</div>
-
- <!-- 公司数量设置 -->
+
+ <!-- 公司数量设置
<el-form-item label="公司数量">
<div class="d-s-r">
<el-button type="text" @click="editUnit" :disabled="form.unit.length <= 0">
@@ -227,17 +227,17 @@
<i class="el-icon-plus"></i>
</el-button>
</div>
- </el-form-item>
-
+ </el-form-item>-->
+
<!-- 公司设置 -->
<div v-for="(item, index) in form.unit" :key="'unit_setting' + index" class="unit-setting">
- <el-form-item :label="'公司' + (index + 1) + '字体大小'">
+ <el-form-item :label="'公司字体大小'">
<el-input v-model.number="form.unit[index].fontSize" min="12" type="number" class="max-w460"></el-input>
</el-form-item>
- <el-form-item :label="'公司' + (index + 1) + '字体颜色'">
+ <el-form-item :label="'公司字体颜色'">
<el-color-picker v-model="form.unit[index].color"></el-color-picker>
</el-form-item>
- <el-form-item :label="'公司' + (index + 1) + '位置'">
+ <el-form-item :label="'公司位置'">
<div class="d-s-r">
<el-input v-model.number="form.unit[index].left" min="0" type="number" class="max-w200" placeholder="左右位置"></el-input>
<span class="mr-10">x</span>
@@ -245,8 +245,8 @@
</div>
</el-form-item>
</div>
-
- <!-- 职位数量设置 -->
+
+ <!-- 职位数量设置
<el-form-item label="职位数量">
<div class="d-s-r">
<el-button type="text" @click="editDuties" :disabled="form.duties.length <= 0">
@@ -257,17 +257,17 @@
<i class="el-icon-plus"></i>
</el-button>
</div>
- </el-form-item>
-
+ </el-form-item>-->
+
<!-- 职位设置 -->
<div v-for="(item, index) in form.duties" :key="'duties_setting' + index" class="duties-setting">
- <el-form-item :label="'职位' + (index + 1) + '字体大小'">
+ <el-form-item :label="'职位字体大小'">
<el-input v-model.number="form.duties[index].fontSize" min="12" type="number" class="max-w460"></el-input>
</el-form-item>
- <el-form-item :label="'职位' + (index + 1) + '字体颜色'">
+ <el-form-item :label="'职位字体颜色'">
<el-color-picker v-model="form.duties[index].color"></el-color-picker>
</el-form-item>
- <el-form-item :label="'职位' + (index + 1) + '位置'">
+ <el-form-item :label="'职位位置'">
<div class="d-s-r">
<el-input v-model.number="form.duties[index].left" min="0" type="number" class="max-w200" placeholder="左右位置"></el-input>
<span class="mr-10">x</span>
@@ -275,8 +275,8 @@
</div>
</el-form-item>
</div>
-
- <!-- 地址数量设置 -->
+
+ <!-- 地址数量设置
<el-form-item label="地址数量">
<div class="d-s-r">
<el-button type="text" @click="editAddress" :disabled="form.address.length <= 0">
@@ -287,17 +287,17 @@
<i class="el-icon-plus"></i>
</el-button>
</div>
- </el-form-item>
-
+ </el-form-item>-->
+
<!-- 地址设置 -->
<div v-for="(item, index) in form.address" :key="'address_setting' + index" class="address-setting">
- <el-form-item :label="'地址' + (index + 1) + '字体大小'">
+ <el-form-item :label="'地址字体大小'">
<el-input v-model.number="form.address[index].fontSize" min="12" type="number" class="max-w460"></el-input>
</el-form-item>
- <el-form-item :label="'地址' + (index + 1) + '字体颜色'">
+ <el-form-item :label="'地址字体颜色'">
<el-color-picker v-model="form.address[index].color"></el-color-picker>
</el-form-item>
- <el-form-item :label="'地址' + (index + 1) + '位置'">
+ <el-form-item :label="'地址位置'">
<div class="d-s-r">
<el-input v-model.number="form.address[index].left" min="0" type="number" class="max-w200" placeholder="左右位置"></el-input>
<span class="mr-10">x</span>
@@ -305,7 +305,7 @@
</div>
</el-form-item>
</div>
-
+
<!-- 微信设置 -->
<el-form-item label="微信字体大小">
<el-input v-model.number="form.wechat.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -320,7 +320,7 @@
<el-input v-model.number="form.wechat.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- 邮箱设置 -->
<el-form-item label="邮箱字体大小">
<el-input v-model.number="form.mailbox.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -335,7 +335,7 @@
<el-input v-model.number="form.mailbox.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- 电话设置 -->
<el-form-item label="电话字体大小">
<el-input v-model.number="form.phone.fontSize" min="12" type="number" class="max-w460"></el-input>
@@ -350,7 +350,7 @@
<el-input v-model.number="form.phone.top" min="0" type="number" class="max-w200" placeholder="上下位置"></el-input>
</div>
</el-form-item>
-
+
<!-- 提交按钮 -->
<div class="common-button-wrapper">
<el-button @click="back">返回</el-button>
@@ -359,7 +359,7 @@
</el-form>
</div>
</div>
-
+
<!-- 上传图片组件 -->
<Upload v-if="isupload" :isupload="isupload" :type="uploadType" :index="uploadIndex" @returnImgs="returnImgsFunc">上传图片</Upload>
</div>
@@ -483,7 +483,7 @@
},
created() {
this.loadData();
-
+
// 在组件创建后初始化拖拽事件
this.$nextTick(() => {
// 通过遍历this.form对象动态调用dragEventArray方法
@@ -499,7 +499,7 @@
const type = binding.value.type;
el.classList.add('drag');
el.classList.add(type);
-
+
// 避免指令和dragEventArray方法重复绑定拖拽事件
// 实际的拖拽逻辑由dragEventArray方法处理
el.style.position = 'absolute';
@@ -511,50 +511,50 @@
dragEventArray(type) {
// 使用类选择器获取对应的元素,更准确高效
const elements = document.querySelectorAll(`.${type}`);
-
+
elements.forEach((el, index) => {
// 检查是否已经绑定过拖拽事件,避免重复绑定
if (el.getAttribute('drag-handler') === 'true') return;
el.setAttribute('drag-handler', 'true');
-
+
// 为每个元素添加拖拽事件
el.onmousedown = (event) => {
event.preventDefault();
-
+
// 计算鼠标按下位置与元素左上角的偏移
let sentX = event.clientX - el.offsetLeft;
let sentY = event.clientY - el.offsetTop;
-
+
// 获取父容器的边界
let parent = el.parentElement;
let l = 0;
let t = 0;
let r = parent.offsetWidth - el.offsetWidth;
let b = parent.offsetHeight - el.offsetHeight;
-
+
document.onmousemove = (event) => {
event.preventDefault();
-
+
// 计算新位置
let slideLeft = event.clientX - sentX;
let slideTop = event.clientY - sentY;
-
+
// 限制在父容器内
slideLeft <= l && (slideLeft = l);
slideLeft >= r && (slideLeft = r);
slideTop <= t && (slideTop = t);
slideTop >= b && (slideTop = b);
-
+
// 更新位置
if (Array.isArray(this.form[type]) && this.form[type][index]) {
// 使用Vue.set确保响应式更新,这样右侧表单的位置输入框也能同步更新
this.$set(this.form[type][index], 'left', slideLeft);
this.$set(this.form[type][index], 'top', slideTop);
-
+
// 直接更新DOM样式,确保视觉效果即时生效
el.style.left = slideLeft + 'px';
el.style.top = slideTop + 'px';
-
+
// 强制Vue更新,确保表单输入框同步更新
this.$forceUpdate();
} else { // 使用Vue.set确保响应式更新,这样右侧表单的位置输入框也能同步更新
@@ -567,17 +567,17 @@
this.$forceUpdate();
}
};
-
+
document.onmouseup = () => {
document.onmousemove = null;
document.onmouseup = null;
};
-
+
return false;
};
});
},
-
+
// 加载数据
loadData() {
let self = this;
@@ -599,19 +599,19 @@
console.error('加载数据失败', error);
});
},
-
+
// 拖动处理
dragDiv(x, y, type, index) {
// 确保坐标值有效
x = Math.max(0, x || 0);
y = Math.max(0, y || 0);
-
+
// 确保form对象存在
if (!this.form) {
console.warn('Form object not initialized');
return;
}
-
+
switch (type) {
case 'avatar':
if (this.form.avatar) {
@@ -711,14 +711,14 @@
console.warn('Unknown drag type:', type);
}
},
-
+
// 打开上传
openUpload(type, index) {
this.uploadType = type;
this.uploadIndex = index;
this.isupload = true;
},
-
+
// 返回图片
returnImgsFunc(e) {
if (e && e.length > 0) {
@@ -740,7 +740,7 @@
}
this.isupload = false;
},
-
+
// 添加图标
addIcon() {
this.form.iconL.push({
@@ -754,14 +754,14 @@
this.dragEventArray('iconL');
});
},
-
+
// 减少图标
editIcon() {
if (this.form.iconL.length > 0) {
this.form.iconL.pop();
}
},
-
+
// 添加公司
addUnit() {
const index = this.form.unit.length;
@@ -773,20 +773,20 @@
fontWeight: 100,
type: 'text'
});
-
+
// 添加后重新初始化拖拽事件
this.$nextTick(() => {
this.dragEventArray('unit');
});
},
-
+
// 减少公司
editUnit() {
if (this.form.unit.length > 0) {
this.form.unit.pop();
}
},
-
+
// 添加职位
addDuties() {
const index = this.form.duties.length;
@@ -798,20 +798,20 @@
fontWeight: 400,
type: 'text'
});
-
+
// 添加后重新初始化拖拽事件
this.$nextTick(() => {
this.dragEventArray('duties');
});
},
-
+
// 减少职位
editDuties() {
if (this.form.duties.length > 0) {
this.form.duties.pop();
}
},
-
+
// 添加地址
addAddress() {
const index = this.form.address.length;
@@ -823,34 +823,34 @@
fontWeight: 400,
type: 'text'
});
-
+
// 添加后重新初始化拖拽事件
this.$nextTick(() => {
this.dragEventArray('address');
});
},
-
+
// 减少地址
editAddress() {
if (this.form.address.length > 0) {
this.form.address.pop();
}
},
-
+
// 提交表单
onSubmit() {
let self = this;
self.$refs.form.validate(valid => {
if (valid) {
self.loading = true;
-
+
// 确保必要字段存在
if (!self.form.backdrop.src) {
self.$message.error('请上传背景图');
self.loading = false;
return;
}
-
+
BusinessApi.templateSave({
template: self.form
}, true)
@@ -869,7 +869,7 @@
}
});
},
-
+
// 返回
back() {
this.$router.push('/plus/business/template/index');
@@ -990,4 +990,4 @@
margin-bottom: 10px;
border-radius: 4px;
}
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.9.2