| | |
| | | <template> |
| | | <view> |
| | | <template> |
| | | <view> |
| | | <form @submit="add"> |
| | | <view |
| | | style="display: flex;justify-content: center;position: relative;overflow: hidden;border-radius: 30rpx;" |
| | | v-for="(item,index) in templateList" v-if="item.template_id==template_id" :key="index"> |
| | | <view v-for="(item,index) in item.style.icon" :key="index" |
| | | :style="'position:absolute;display: flex;left:'+item.left+'px;top:'+item.top+'px;width:'+item.width+'px;height:'+item.height+'px;'"> |
| | | <image :src="item.src" :style="'width:'+item.width+'px;height:'+item.height+'px;'"></image> |
| | | </view> |
| | | <view v-for="(item,index) in item.style.address" :key="index" |
| | | :style="'position:absolute;left:'+item.left+'px;top:'+item.top+'px;color:'+item.color+';font-size:'+item.fontSize+'px;'"> |
| | | 地址:{{(business.address[index]||selectCity!='选择省 市 区')?(selectCity!='选择省 市 区'?selectCity:'')+business.address[index]:'未填写地址'}} |
| | | </view> |
| | | <view v-for="(item,index) in item.style.unit" :key="index" |
| | | :style="'position:absolute;left:'+item.left+'px;top:'+item.top+'px;color:'+item.color+';font-size:'+item.fontSize+'px;'"> |
| | | {{business.unit[index]?business.unit[index]:'未填写公司'}} |
| | | </view> |
| | | <!-- <view v-for="(item,index) in item.style.position" :key="index" |
| | | :style="'position:absolute;left:'+item.left+'px;top:'+item.top+'px;color:'+item.color+';font-size:'+item.fontSize+'px;'"> |
| | | {{business.position[index]?business.position[index]:'未填职位'}} |
| | | </view> --> |
| | | <view |
| | | :style="'position:absolute;left:'+item.style.duties[0].left+'px;top:'+item.style.duties[0].top+'px;color:'+item.style.duties[0].color+';font-size:'+item.style.duties[0].fontSize+'px;'"> |
| | | {{business.duties[0]?business.duties[0]:'未填写职位'}} |
| | | </view> |
| | | <view v-if="business.mailbox" |
| | | :style="'position:absolute;left:'+item.style.mailbox.left+'px;top:'+item.style.mailbox.top+'px;color:'+item.style.mailbox.color+';font-size:'+item.style.mailbox.fontSize+'px;'"> |
| | | 邮箱:{{business.mailbox?business.mailbox:'未填写邮箱'}} |
| | | </view> |
| | | <view |
| | | :style="'position:absolute;left:'+item.style.mobile.left+'px;top:'+item.style.mobile.top+'px;color:'+item.style.mobile.color+';font-size:'+item.style.mobile.fontSize+'px;'"> |
| | | 手机:{{business.mobile?business.mobile:'未填写手机'}}{{business.mobile_phone?' / '+business.mobile_phone:''}} |
| | | </view> |
| | | <view |
| | | :style="'position:absolute;left:'+item.style.wechat.left+'px;top:'+item.style.wechat.top+'px;color:'+item.style.wechat.color+';font-size:'+item.style.wechat.fontSize+'px;'"> |
| | | 微信:{{business.wechat?business.wechat:'未填写微信'}} |
| | | </view> |
| | | <view |
| | | :style="'position:absolute;left:'+item.style.name.left+'px;top:'+item.style.name.top+'px;color:'+item.style.name.color+';font-size:'+item.style.name.fontSize+'px;'"> |
| | | {{business.name?business.name:'未填写姓名'}} |
| | | </view> |
| | | <view v-if="business.phone" |
| | | :style="'position:absolute;left:'+item.style.phone.left+'px;top:'+item.style.phone.top+'px;color:'+item.style.phone.color+';font-size:'+item.style.phone.fontSize+'px;'"> |
| | | 电话:{{business.phone?business.phone:'未填写电话'}} |
| | | </view> |
| | | <image class="tup" |
| | | :style="'width:'+item.style.backdrop.width+'px;height:'+item.style.backdrop.height+'px;'" |
| | | :src="item.style.backdrop.src"></image> |
| | | <view v-if="item.style.avatar.display==1" |
| | | :style="'position:absolute;left:'+item.style.avatar.left+'px;top:'+item.style.avatar.top+'px;width:'+item.style.avatar.width+'px;height:'+item.style.avatar.width+'px;'+(item.style.avatar.style=='circle'?'border-radius:'+item.style.avatar.width+'px;overflow: hidden;':'overflow: hidden;')"> |
| | | <image :src="file_path?file_path:item.style.avatar.src" |
| | | :style="'width:'+item.style.avatar.width+'px;height:'+item.style.avatar.width+'px;'"> |
| | | </image> |
| | | </view> |
| | | <view v-if="item.style.logo.display==1" class="logo_h" ref="logo_h" |
| | | :style="'position:absolute;left:'+item.style.logo.left+'px;top:'+item.style.logo.top+'px;width:'+item.style.logo.width+'px;height:'+item.style.logo.height+'px;'+(item.style.logo.style=='circle'?'border-radius:'+item.style.logo.width+'px;overflow: hidden;':'overflow: hidden;')"> |
| | | <image :src="logo_path?logo_path:item.style.logo.src" class="logo_h" ref="logo_h"></image> |
| | | </view> |
| | | <!-- 名片预览区域 --> |
| | | <view class="business-card-preview" |
| | | v-for="(templateItem,templateIndex) in templateList" v-if="templateItem.template_id==template_id" :key="templateIndex"> |
| | | |
| | | <!-- 图标装饰 --> |
| | | <view v-for="(item,index) in templateItem.style.icon" :key="index" |
| | | class="card-icon" |
| | | :style="{position:'absolute',display:'flex',left:item.left+'px',top:item.top+'px',width:item.width+'px',height:item.height+'px'}"> |
| | | <image :src="item.src" :style="{width:item.width+'px',height:item.height+'px'}"></image> |
| | | </view> |
| | | |
| | | <!-- 预览区域 - 支持多个公司和职位 --> |
| | | <scroll-view scroll-y="true" class="card-scroll-unit" |
| | | :style="{position:'absolute',left:(templateItem.style.unit[0].left||0)+'px',top:(templateItem.style.unit[0].top||0)+'px',width:unitWidth+'px',height:unitHeight+'px'}"> |
| | | <view v-for="(companyItem, idx) in business.unit" :key="idx" |
| | | class="card-text-item" |
| | | :style="{color:(templateItem.style.unit[0].color||'#333'),fontSize:(templateItem.style.unit[0].fontSize||14)+'px',marginBottom:((templateItem.style.unit[0].fontSize||14)*0.5)+'px'}"> |
| | | {{companyItem||'未填写公司'}} |
| | | </view> |
| | | </scroll-view> |
| | | |
| | | <scroll-view scroll-y="true" class="card-scroll-duties" |
| | | :style="{position:'absolute',left:(templateItem.style.duties[0].left||0)+'px',top:(templateItem.style.duties[0].top||0)+'px',width:dutiesWidth+'px',height:dutiesHeight+'px'}"> |
| | | <view v-for="(dutiesItem, idx) in business.duties" :key="idx" |
| | | class="card-text-item" |
| | | :style="{color:(templateItem.style.duties[0].color||'#333'),fontSize:(templateItem.style.duties[0].fontSize||14)+'px',lineHeight:1.5,marginBottom:((templateItem.style.duties[0].fontSize||14)*0.5)+'px'}"> |
| | | {{dutiesItem||'未填写职位'}} |
| | | </view> |
| | | </scroll-view> |
| | | |
| | | <!-- 地址 --> |
| | | <view v-for="(item,index) in templateItem.style.address" :key="index" |
| | | class="card-text" |
| | | :style="{position:'absolute',left:item.left+'px',top:item.top+'px',color:item.color,fontSize:item.fontSize+'px',maxWidth:addressMaxWidth+'px'}"> |
| | | 地址:{{(business.address[index]||selectCity!='选择省 市 区')?(selectCity!='选择省 市 区'?selectCity:'')+business.address[index]:'未填写地址'}} |
| | | </view> |
| | | |
| | | <!-- 邮箱 --> |
| | | <view v-if="business.mailbox" |
| | | class="card-text" |
| | | :style="{position:'absolute',left:templateItem.style.mailbox.left+'px',top:templateItem.style.mailbox.top+'px',color:templateItem.style.mailbox.color,fontSize:templateItem.style.mailbox.fontSize+'px',maxWidth:mailboxMaxWidth+'px'}"> |
| | | 邮箱:{{business.mailbox?business.mailbox:'未填写邮箱'}} |
| | | </view> |
| | | |
| | | <!-- 手机 --> |
| | | <view class="card-text" |
| | | :style="{position:'absolute',left:templateItem.style.mobile.left+'px',top:templateItem.style.mobile.top+'px',color:templateItem.style.mobile.color,fontSize:templateItem.style.mobile.fontSize+'px',maxWidth:mobileMaxWidth+'px'}"> |
| | | 手机:{{business.mobile?business.mobile:'未填写手机'}}{{business.mobile_phone?' / '+business.mobile_phone:''}} |
| | | </view> |
| | | |
| | | <!-- 微信 --> |
| | | <view class="card-text" |
| | | :style="{position:'absolute',left:templateItem.style.wechat.left+'px',top:templateItem.style.wechat.top+'px',color:templateItem.style.wechat.color,fontSize:templateItem.style.wechat.fontSize+'px',maxWidth:wechatMaxWidth+'px'}"> |
| | | 微信:{{business.wechat?business.wechat:'未填写微信'}} |
| | | </view> |
| | | |
| | | |
| | | <!-- 姓名 --> |
| | | <view class="card-text" |
| | | :style="{position:'absolute',left:templateItem.style.name.left+'px',top:templateItem.style.name.top+'px',color:templateItem.style.name.color,fontSize:templateItem.style.name.fontSize+'px',maxWidth:nameMaxWidth+'px'}"> |
| | | {{business.name?business.name:'未填写姓名'}} |
| | | </view> |
| | | |
| | | <!-- 电话 --> |
| | | <view v-if="business.phone" |
| | | class="card-text" |
| | | :style="{position:'absolute',left:templateItem.style.phone.left+'px',top:templateItem.style.phone.top+'px',color:templateItem.style.phone.color,fontSize:templateItem.style.phone.fontSize+'px',maxWidth:phoneMaxWidth+'px'}"> |
| | | 电话:{{business.phone?business.phone:'未填写电话'}} |
| | | </view> |
| | | |
| | | <!-- 背景图 --> |
| | | <image class="tup card-backdrop" |
| | | :style="{width:templateItem.style.backdrop.width+'px',height:templateItem.style.backdrop.height+'px'}" |
| | | :src="templateItem.style.backdrop.src"></image> |
| | | |
| | | <!-- 头像 --> |
| | | <view v-if="templateItem.style.avatar.display==1" |
| | | class="card-avatar" |
| | | :class="{'avatar-circle': templateItem.style.avatar.style==='circle'}" |
| | | style="position:absolute" |
| | | :style="{left:templateItem.style.avatar.left+'px',top:templateItem.style.avatar.top+'px',width:templateItem.style.avatar.width+'px',height:templateItem.style.avatar.width+'px'}"> |
| | | <image :src="file_path?file_path:templateItem.style.avatar.src" |
| | | :style="{width:templateItem.style.avatar.width+'px',height:templateItem.style.avatar.width+'px'}"> |
| | | </image> |
| | | </view> |
| | | |
| | | <!-- Logo --> |
| | | <view v-if="templateItem.style.logo.display==1" |
| | | class="card-logo" |
| | | :class="{'logo-circle': templateItem.style.logo.style==='circle'}" |
| | | ref="logo_h" |
| | | style="position:absolute" |
| | | :style="{left:templateItem.style.logo.left+'px',top:templateItem.style.logo.top+'px',width:templateItem.style.logo.width+'px',height:templateItem.style.logo.height+'px'}"> |
| | | <image :src="logo_path?logo_path:templateItem.style.logo.src" class="logo_h" ref="logo_h"></image> |
| | | </view> |
| | | </view> |
| | | <view class="fds"> |
| | | <view> |
| | | <scroll-view scroll-x="true"> |
| | | <view style="width: 100%;white-space: nowrap;"> |
| | | <view class="mpxz" v-for="(item,index) in templateList" :key="index" |
| | | @tap="radioChange(index)"> |
| | | <view class="zjc" v-if="item.template_id==template_id"> |
| | | <scroll-view scroll-x="true"> |
| | | <view style="width: 100%;white-space: nowrap;"> |
| | | <view class="mpxz" v-for="(item,index) in templateList" :key="index" |
| | | @tap="radioChange(index)"> |
| | | <view class="zjc" v-if="item.template_id==template_id"> |
| | | </view> |
| | | <image class="mpxz-image" :src="item.image" mode="aspectFit"></image> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">名片类型:</view> |
| | | <view class="lxfxnrr"> |
| | | <picker @change="changeIlk" :range="ilkList" :range-key="'name'" class="lxfxneirong" |
| | | mode="selector"> |
| | | <view class="picker-content"> |
| | | {{selectedIlk.name || '请选择名片类型'}} |
| | | <text class="icon iconfont icon-jiantou"></text> |
| | | </view> |
| | | <input style="display: none;" name='ilk' v-model="business.ilk" type="text"> |
| | | </picker> |
| | | </view> |
| | | </view> |
| | | <view class="grxx" @click="is_avatar=true" v-show="avatar_display==1" style="overflow: hidden;"> |
| | | <view class="biaoti"> |
| | | 头像 |
| | | </view> |
| | | <view class="tx" style="margin-left: 30rpx;"> |
| | | <image class="logo" :src="file_path||'@/static/shop/login/qietu_1054.png'" mode="heightFix"></image> |
| | | <Upload v-if="is_avatar" @getImgs="handleAvatarUpload" :imageList="[file_path]"></Upload> |
| | | </view> |
| | | </view> |
| | | <view @click="is_logo=true" v-show="logo_display==1"> |
| | | <view class="biaoti"> |
| | | logo |
| | | </view> |
| | | <view class="logo" style="overflow: hidden;"> |
| | | <image class="logo" :src="logo_path||'@/static/shop/login/qietu_1054.png'" mode="heightFix"></image> |
| | | <Upload v-if="is_logo" @getImgs="handleLogoUpload" :imageList="[logo_path]"></Upload> |
| | | </view> |
| | | </view> |
| | | <view> |
| | | <view class="biaoti"> |
| | | 联系方式 |
| | | </view> |
| | | <view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>姓名:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入姓名" name='name' v-model="business.name" class="lxfxneirong" |
| | | type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>手机:</view> |
| | | <view class="lxfxnrr"> |
| | | <input @input="sjh" placeholder="输入手机号" v-model="mobile" class="lxfxneirong" |
| | | type="text"> |
| | | <input style="display: none;" name="mobile" v-model="business.mobile" |
| | | class="lxfxneirong" type="text"> |
| | | <input style="display: none;" name="mobile_phone" v-model="business.mobile_phone" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">座机:</view> |
| | | <view class="lxfxnrr"><input placeholder="请输入电话" v-model="business.phone" name="phone" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">微信:</view> |
| | | <view class="lxfxnrr"><input class="lxfxneirong" name="wechat" v-model="business.wechat" |
| | | placeholder="请输入微信" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">邮箱:</view> |
| | | <view class="lxfxnrr"><input class="lxfxneirong" name="mailbox" v-model="business.mailbox" |
| | | placeholder="请输入邮箱" type="text"> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view style="padding-bottom: 300rpx;"> |
| | | <view class="biaoti"> |
| | | 详细信息 |
| | | </view> |
| | | <view> |
| | | <view v-for="(item,index) in companyList" :key="index" class="company-item"> |
| | | <view class="company-header"> |
| | | <text class="company-title">公司/职位 {{index+1}}</text> |
| | | <text class="delete-btn" v-if="companyList.length > 1" @tap="deleteCompany(index)">删除</text> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">公司名称:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入公司名称" :name="'unit['+index+']'" |
| | | v-model="companyList[index].unit" @input="syncBusinessFromCompanyList" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">职位:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入职位" :name="'duties['+index+']'" |
| | | v-model="companyList[index].duties" @input="syncBusinessFromCompanyList" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="add-company-btn" @tap="addCompany"> |
| | | <text class="icon iconfont icon-add"></text> |
| | | <text>添加公司/职位</text> |
| | | </view> |
| | | <view class="lxfx" @tap="industryClose"> |
| | | <view class="lxfxbiaoti">行业:</view> |
| | | <view class="lxfxnrr"> |
| | | <input class="lxfxneirong" :value="industryNmae" disabled readonly> |
| | | <input style="display: none;" type="hidden" name="industry_id" |
| | | v-model="business.industry_id"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx" > |
| | | <view class="lxfxbiaoti">所在地区:</view> |
| | | <view class="lxfxnrr"> |
| | | <input class="lxfxneirong" :value="selectCity" disabled="true" |
| | | @click="chooseLocation" placeholder="请选择省市区"> |
| | | <input style="display: none;" type="hidden" name="province_id" |
| | | v-model="business.province_id"> |
| | | <input style="display: none;" type="hidden" name="city_id" v-model="business.city_id"> |
| | | <input style="display: none;" type="hidden" name="region_id" |
| | | v-model="business.region_id"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx" > |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>地址:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入详细地址" name="address[0]" v-model="business.address[0]" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">简介:</view> |
| | | <view class="lxfxnrr"> |
| | | <textarea placeholder="请输入个人或公司简介" maxlength="-1" name="Introduction" v-model="business.Introduction" |
| | | class="lxfxneirong" :auto-height="true"></textarea> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="anu"> |
| | | <button form-type="submit" class="tijiao">保存名片</button> |
| | | <input type="text" style="display: none;" name="file_id" :value="file_id"> |
| | | <input type="text" style="display: none;" name="logo" :value="logo_id"> |
| | | <input type="text" style="display: none;" name="logo_height" :value="logo_height"> |
| | | <input type="text" style="display: none;" name="logo_width" :value="logo_width"> |
| | | <input type="text" style="display: none;" name="longitude" :value="business.longitude"> |
| | | <input type="text" style="display: none;" name="latitude" :value="business.latitude"> |
| | | </view> |
| | | <Popup :show="industryShow" :width="screenWidth" type="bottom" :closeable="true" @close="industryClose"> |
| | | <view class="industry-popup"> |
| | | <view class="industry-title">选择行业</view> |
| | | <scroll-view scroll-y="true" style="height: 600rpx;"> |
| | | <!-- 递归展示行业树形结构 --> |
| | | <view v-for="item in industryList" :key="item.industry_id"> |
| | | <view class="industry-item" @tap="selectIndustry" :data-id="item.industry_id" |
| | | :class="{ 'selected': business.industry_id == item.industry_id }"> |
| | | {{ item.name }} |
| | | </view> |
| | | <!-- 显示子行业 --> |
| | | <view v-if="item.child && item.child.length > 0" class="industry-child"> |
| | | <view class="industry-item industry-child-item" v-for="child in item.child" |
| | | :key="child.industry_id" @tap="selectIndustry" :data-id="child.industry_id" |
| | | :class="{ 'selected': business.industry_id == child.industry_id }"> |
| | | {{ child.name }} |
| | | </view> |
| | | <image class="mpxz-image" :src="item.image" mode="aspectFit"></image> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">名片类型:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请备注名片的用途" name='ilk' v-model="business.ilk" class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="grxx" @click="is_avatar=true" v-show="avatar_display==1" style="overflow: hidden;"> |
| | | <view class="biaoti"> |
| | | 头像 |
| | | </view> |
| | | <view class="tx" style="margin-left: 30rpx;"> |
| | | <image class="logo" :src="file_path" mode="heightFix"></image> |
| | | <Upload v-if="is_avatar" @getImgs="handleAvatarUpload" :imageList="[file_path]"></Upload> |
| | | </view> |
| | | </view> |
| | | <view @click="is_logo=true" v-show="logo_display==1"> |
| | | <view class="biaoti"> |
| | | logo |
| | | </view> |
| | | <view class="logo" style="overflow: hidden;"> |
| | | <image class="logo" :src="logo_path" mode="heightFix"></image> |
| | | <Upload v-if="is_logo" @getImgs="handleLogoUpload" :imageList="[logo_path]"></Upload> |
| | | </view> |
| | | </view> |
| | | <view> |
| | | <view class="biaoti"> |
| | | 联系方式 |
| | | </view> |
| | | <view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>姓名:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入姓名" name='name' v-model="business.name" class="lxfxneirong" |
| | | type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>手机:</view> |
| | | <view class="lxfxnrr"> |
| | | <input @input="sjh" placeholder="输入手机号,多个手机号用/隔开" v-model="mobile" class="lxfxneirong" |
| | | type="text"> |
| | | <input style="display: none;" name="mobile" v-model="business.mobile" |
| | | class="lxfxneirong" type="text"> |
| | | <input style="display: none;" name="mobile_phone" v-model="business.mobile_phone" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">座机:</view> |
| | | <view class="lxfxnrr"><input placeholder="请输入电话" v-model="business.phone" name="phone" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">微信:</view> |
| | | <view class="lxfxnrr"><input class="lxfxneirong" name="wechat" v-model="business.wechat" |
| | | placeholder="请输入微信" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">邮箱:</view> |
| | | <view class="lxfxnrr"><input class="lxfxneirong" name="mailbox" v-model="business.mailbox" |
| | | placeholder="请输入邮箱" type="text"> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view style="padding-bottom: 120rpx;"> |
| | | <view class="biaoti"> |
| | | 详细信息 |
| | | </view> |
| | | <view> |
| | | <view v-for="(item,index) in unit" :key="index"> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">单位名称:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入单位名称" :name="'unit['+index+']'" |
| | | v-model="business.unit[index]" class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">职位:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入职位" :name="'duties['+index+']'" |
| | | v-model="business.duties[index]" class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx" @tap="industryClose"> |
| | | <view class="lxfxbiaoti">行业:</view> |
| | | <view class="lxfxnrr"> |
| | | <input class="lxfxneirong" :value="industryNmae" disabled readonly> |
| | | <input style="display: none;" type="hidden" name="industry_id" v-model="business.industry_id"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">所在地区:</view> |
| | | <view class="lxfxnrr"> |
| | | <input class="lxfxneirong" :value="selectCity" disabled="true" @click="showMulLinkageThreePicker" placeholder="请选择省市区"> |
| | | <input style="display: none;" type="hidden" name="province_id" v-model="business.province_id"> |
| | | <input style="display: none;" type="hidden" name="city_id" v-model="business.city_id"> |
| | | <input style="display: none;" type="hidden" name="region_id" v-model="business.region_id"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti"><text style="color: #fa3534;">*</text>地址:</view> |
| | | <view class="lxfxnrr"> |
| | | <input placeholder="请输入详细地址" name="address[0]" v-model="business.address[0]" |
| | | class="lxfxneirong" type="text"> |
| | | </view> |
| | | </view> |
| | | <view class="lxfx"> |
| | | <view class="lxfxbiaoti">简介:</view> |
| | | <view class="lxfxnrr"> |
| | | <textarea placeholder="请输入个人或公司简介" name="Introduction" v-model="business.Introduction" |
| | | class="lxfxneirong" :auto-height="true"></textarea> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="anu"> |
| | | <button form-type="submit" class="tijiao">保存名片</button> |
| | | <input type="text" style="display: none;" name="file_id" :value="file_id"> |
| | | <input type="text" style="display: none;" name="logo" :value="logo_id"> |
| | | <input type="text" style="display: none;" name="logo_height" :value="logo_height"> |
| | | <input type="text" style="display: none;" name="logo_width" :value="logo_width"> |
| | | </view> |
| | | <Popup :show="industryShow" :width="screenWidth" type="bottom" :closeable="true" @close="industryClose"> |
| | | <view class="industry-popup"> |
| | | <view class="industry-title">选择行业</view> |
| | | <scroll-view scroll-y="true" style="height: 600rpx;"> |
| | | <!-- 递归展示行业树形结构 --> |
| | | <view v-for="item in industryList" :key="item.industry_id"> |
| | | <view class="industry-item" |
| | | @tap="selectIndustry" :data-id="item.industry_id" |
| | | :class="{ 'selected': business.industry_id == item.industry_id }"> |
| | | {{ item.name }} |
| | | </view> |
| | | <!-- 显示子行业 --> |
| | | <view v-if="item.child && item.child.length > 0" class="industry-child"> |
| | | <view class="industry-item industry-child-item" |
| | | v-for="child in item.child" :key="child.industry_id" |
| | | @tap="selectIndustry" :data-id="child.industry_id" |
| | | :class="{ 'selected': business.industry_id == child.industry_id }"> |
| | | {{ child.name }} |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | </Popup> |
| | | <mpvue-city-picker v-if="is_load" ref="mpvueCityPicker" :province="province" :city="city" :area="area" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm"></mpvue-city-picker> |
| | | </view> |
| | | </form> |
| | | </view> |
| | | </Popup> |
| | | <mpvue-city-picker v-if="is_load" ref="mpvueCityPicker" :province="province" :city="city" :area="area" |
| | | :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm"></mpvue-city-picker> |
| | | </view> |
| | | </form> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'; |
| | | export default { |
| | | components: { |
| | | Upload, |
| | | Popup, |
| | | mpvueCityPicker |
| | | }, |
| | | data() { |
| | | return { |
| | | // 模板相关 |
| | | templateList: [], // 模板列表 |
| | | templateShow: false, // 模板弹窗显示状态 |
| | | template_id: 0, // 当前选中的模板ID |
| | | templateIndex: 0, // 当前选中的模板索引 |
| | | // 业务数据 |
| | | business: { |
| | | name: '', // 姓名 |
| | | mobile: '', // 手机号 |
| | | mobile_phone: '', // 备用手机号 |
| | | duties: [], // 职位 |
| | | phone: '', // 电话 |
| | | mailbox: '', // 邮箱 |
| | | wechat: '', // 微信 |
| | | unit: [], // 单位名称 |
| | | position: [], // 职位信息 |
| | | address: [], // 地址 |
| | | industry_id: 0, // 行业ID |
| | | province_id: 0, // 省份ID |
| | | city_id: 0, // 城市ID |
| | | region_id: 0, // 区域ID |
| | | Introduction: '' // 简介 |
| | | }, |
| | | // 辅助输入 |
| | | mobile: '', // 用于输入的手机号(支持多手机号) |
| | | // 业务状态 |
| | | business_card_id: 0, // 名片ID(用于编辑) |
| | | // 图片相关 |
| | | file_id: 0, // 头像文件ID |
| | | file_path: "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132", // 头像路径 |
| | | logo_id: 0, // Logo文件ID |
| | | logo_path: "http://lblmh.com/image/diy/logo_top.png", // Logo路径 |
| | | // 布局相关 |
| | | unit: [], // 单位信息数组 |
| | | logo_height: 0, // Logo高度 |
| | | logo_width: 0, // Logo宽度 |
| | | avatar_width: 0, // 头像宽度 |
| | | // 显示控制 |
| | | avatar_display: 1, // 头像显示状态 |
| | | logo_display: 1, // Logo显示状态 |
| | | position: [], // 位置信息 |
| | | is_business: 0, // 业务类型 |
| | | duties: '', // 职位字符串 |
| | | positionNum: 0, // 位置数量 |
| | | is_avatar: false, // 头像上传弹窗状态 |
| | | is_logo: false, // Logo上传弹窗状态 |
| | | // 行业相关 |
| | | industryList: [], // 行业列表 |
| | | industryShow: false, // 行业选择弹窗状态 |
| | | industryNmae:'请选择行业', // 选中的行业名称 |
| | | screenWidth:0, // 屏幕宽度 |
| | | // 区域选择相关 |
| | | cityPickerValueDefault: [0, 0, 0], // 地区选择器默认值 |
| | | selectCity: '选择省 市 区', // 选中的地区显示 |
| | | region: {}, // 地区信息 |
| | | is_load: false, // 数据加载状态 |
| | | province: [], // 省份数据 |
| | | city: [], // 城市数据 |
| | | area: [] // 区域数据 |
| | | } |
| | | Upload, |
| | | Popup, |
| | | mpvueCityPicker |
| | | }, |
| | | data() { |
| | | return { |
| | | // 模板相关 |
| | | templateList: [], // 模板列表 |
| | | templateShow: false, // 模板弹窗显示状态 |
| | | template_id: 0, // 当前选中的模板ID |
| | | templateIndex: 0, // 当前选中的模板索引 |
| | | // 业务数据 |
| | | business: { |
| | | name: '', // 姓名 |
| | | mobile: '', // 手机号 |
| | | mobile_phone: '', // 备用手机号 |
| | | duties: [], // 职位 |
| | | phone: '', // 电话 |
| | | mailbox: '', // 邮箱 |
| | | wechat: '', // 微信 |
| | | unit: [], // 单位名称 |
| | | position: [], // 职位信息 |
| | | address: [], // 地址 |
| | | industry_id: 0, // 行业ID |
| | | province_id: 0, // 省份ID |
| | | city_id: 0, // 城市ID |
| | | region_id: 0, // 区域ID |
| | | Introduction: '', // 简介 |
| | | ilk: '' ,// 名片类型 |
| | | latitude:0, |
| | | longitude:0 |
| | | }, |
| | | // 名片类型 |
| | | ilkList: [], // 类型列表 |
| | | selectedIlk: {}, // 选中的类型 |
| | | // 辅助输入 |
| | | mobile: '', // 用于输入的手机号(支持多手机号) |
| | | // 业务状态 |
| | | business_card_id: 0, // 名片ID(用于编辑) |
| | | // 图片相关 |
| | | file_id: 0, // 头像文件ID |
| | | file_path: "", // 头像路径 |
| | | logo_id: 0, // Logo文件ID |
| | | logo_path: "", // Logo路径 |
| | | // 布局相关 |
| | | unit: [], // 单位信息数组 |
| | | logo_height: 0, // Logo高度 |
| | | logo_width: 0, // Logo宽度 |
| | | avatar_width: 0, // 头像宽度 |
| | | // 公司职位列表 |
| | | companyList: [], // 公司职位列表 |
| | | // 显示控制 |
| | | avatar_display: 1, // 头像显示状态 |
| | | logo_display: 1, // Logo显示状态 |
| | | position: [], // 位置信息 |
| | | is_business: 0, // 业务类型 |
| | | duties: '', // 职位字符串 |
| | | positionNum: 0, // 位置数量 |
| | | is_avatar: false, // 头像上传弹窗状态 |
| | | is_logo: false, // Logo上传弹窗状态 |
| | | // 行业相关 |
| | | industryList: [], // 行业列表 |
| | | industryShow: false, // 行业选择弹窗状态 |
| | | industryNmae: '请选择行业', // 选中的行业名称 |
| | | screenWidth: 0, // 屏幕宽度 |
| | | // 区域选择相关 |
| | | cityPickerValueDefault: [0, 0, 0], // 地区选择器默认值 |
| | | selectCity: '选择省 市 区', // 选中的地区显示 |
| | | region: {}, // 地区信息 |
| | | is_load: false, // 数据加载状态 |
| | | province: [], // 省份数据 |
| | | city: [], // 城市数据 |
| | | area: [] // 区域数据 |
| | | } |
| | | }, |
| | | onLoad(e) { |
| | | if (e.business_card_id) { |
| | |
| | | }) |
| | | this.business_card_id = e.business_card_id |
| | | this.getBusiness(e.business_card_id) |
| | | } else { |
| | | // 新增时默认添加一个公司职位 |
| | | this.addCompany(); |
| | | } |
| | | this.getTemplate(); |
| | | this.getIndustryList(); |
| | | this.getIlkList(); |
| | | // 初始化区域选择器数据 |
| | | this.initRegionData(); |
| | | }, |
| | | computed: { |
| | | // 计算公司列表高度 |
| | | unitHeight() { |
| | | const fontSize = (this.templateList.find(t => t.template_id === this.template_id)?.style?.unit?.[0]?.fontSize) || 14; |
| | | const lineHeight = fontSize * 1.5; // 行高 = 字体大小 * 1.5 |
| | | const lineSpacing = fontSize * 0.5; // 行间距 = 字体大小 * 0.5 |
| | | const itemCount = this.business.unit ? this.business.unit.length : 0; |
| | | // 估算高度:每个公司可能占用最多3行,乘以行高,加上行间距,再加上padding |
| | | const estimatedLinesPerItem = 3; |
| | | const height = (lineHeight * estimatedLinesPerItem + lineSpacing) * itemCount + 20; |
| | | return Math.max(height, 80); // 确保最小高度为80px |
| | | }, |
| | | // 计算职位列表高度 |
| | | dutiesHeight() { |
| | | const fontSize = (this.templateList.find(t => t.template_id === this.template_id)?.style?.duties?.[0]?.fontSize) || 14; |
| | | const lineHeight = fontSize * 1.5; // 行高 = 字体大小 * 1.5 |
| | | const lineSpacing = fontSize * 0.5; // 行间距 = 字体大小 * 0.5 |
| | | const itemCount = this.business.duties ? this.business.duties.length : 0; |
| | | // 估算高度:每个职位可能占用最多3行,乘以行高,加上行间距,再加上padding |
| | | const estimatedLinesPerItem = 3; |
| | | const height = (lineHeight * estimatedLinesPerItem + lineSpacing) * itemCount + 20; |
| | | return Math.max(height, 80); // 确保最小高度为80px |
| | | }, |
| | | // 计算公司容器的合适宽度(智能判断右边是否有其他字段) |
| | | unitWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.unit?.[0]) return 150; |
| | | return this.calculateFieldMaxWidth(template.style.unit[0].left, template.style.unit[0].top); |
| | | }, |
| | | // 计算职位容器的合适宽度(智能判断右边是否有其他字段) |
| | | dutiesWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.duties?.[0]) return 150; |
| | | return this.calculateFieldMaxWidth(template.style.duties[0].left, template.style.duties[0].top); |
| | | }, |
| | | // 地址字段的最大宽度 |
| | | addressMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.address?.[0]) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.address[0].left, template.style.address[0].top); |
| | | }, |
| | | // 邮箱字段的最大宽度 |
| | | mailboxMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.mailbox) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.mailbox.left, template.style.mailbox.top); |
| | | }, |
| | | // 手机字段的最大宽度 |
| | | mobileMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.mobile) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.mobile.left, template.style.mobile.top); |
| | | }, |
| | | // 微信字段的最大宽度 |
| | | wechatMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.wechat) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.wechat.left, template.style.wechat.top); |
| | | }, |
| | | // 姓名字段的最大宽度 |
| | | nameMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.name) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.name.left, template.style.name.top); |
| | | }, |
| | | // 电话字段的最大宽度 |
| | | phoneMaxWidth() { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.phone) return 200; |
| | | return this.calculateFieldMaxWidth(template.style.phone.left, template.style.phone.top); |
| | | } |
| | | }, |
| | | watch: { |
| | | // 监听companyList变化,同步到business对象 |
| | | // 不使用deep监听,只在数组引用变化时同步 |
| | | // 这样可以避免深度监听导致的多次同步 |
| | | companyList: { |
| | | handler(newVal, oldVal) { |
| | | if (newVal && newVal.length > 0) { |
| | | this.syncBusinessFromCompanyList(); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | // 智能计算文本字段的最大宽度(供computed调用) |
| | | // 根据右边是否有其他字段来动态计算maxWidth |
| | | calculateFieldMaxWidth(left, top) { |
| | | const template = this.templateList.find(t => t.template_id === this.template_id); |
| | | if (!template || !template.style?.backdrop) return 200; |
| | | |
| | | const backdropWidth = template.style.backdrop.width || 375; |
| | | const rightFields = []; |
| | | |
| | | // 收集所有可能的字段 |
| | | const fields = []; |
| | | |
| | | // 公司 |
| | | if (template.style.unit && template.style.unit[0]) { |
| | | fields.push({ |
| | | name: 'unit', |
| | | left: template.style.unit[0].left, |
| | | top: template.style.unit[0].top, |
| | | width: template.style.unit[0].width |
| | | }); |
| | | } |
| | | |
| | | // 职位 |
| | | if (template.style.duties && template.style.duties[0]) { |
| | | fields.push({ |
| | | name: 'duties', |
| | | left: template.style.duties[0].left, |
| | | top: template.style.duties[0].top, |
| | | width: template.style.duties[0].width |
| | | }); |
| | | } |
| | | |
| | | // 姓名 |
| | | if (template.style.name) { |
| | | fields.push({ |
| | | name: 'name', |
| | | left: template.style.name.left, |
| | | top: template.style.name.top, |
| | | width: template.style.name.width |
| | | }); |
| | | } |
| | | |
| | | // 地址 |
| | | if (template.style.address && template.style.address[0]) { |
| | | fields.push({ |
| | | name: 'address', |
| | | left: template.style.address[0].left, |
| | | top: template.style.address[0].top, |
| | | width: template.style.address[0].width |
| | | }); |
| | | } |
| | | |
| | | // 邮箱 |
| | | if (template.style.mailbox) { |
| | | fields.push({ |
| | | name: 'mailbox', |
| | | left: template.style.mailbox.left, |
| | | top: template.style.mailbox.top, |
| | | width: template.style.mailbox.width |
| | | }); |
| | | } |
| | | |
| | | // 手机 |
| | | if (template.style.mobile) { |
| | | fields.push({ |
| | | name: 'mobile', |
| | | left: template.style.mobile.left, |
| | | top: template.style.mobile.top, |
| | | width: template.style.mobile.width |
| | | }); |
| | | } |
| | | |
| | | // 微信 |
| | | if (template.style.wechat) { |
| | | fields.push({ |
| | | name: 'wechat', |
| | | left: template.style.wechat.left, |
| | | top: template.style.wechat.top, |
| | | width: template.style.wechat.width |
| | | }); |
| | | } |
| | | |
| | | // 电话 |
| | | if (template.style.phone) { |
| | | fields.push({ |
| | | name: 'phone', |
| | | left: template.style.phone.left, |
| | | top: template.style.phone.top, |
| | | width: template.style.phone.width |
| | | }); |
| | | } |
| | | |
| | | // 找出右边最近的字段 |
| | | // 判断标准: left > 当前left, 且top在合理范围内(±20px) |
| | | const TOLERANCE = 20; |
| | | for (let field of fields) { |
| | | if (field.left > left && Math.abs(field.top - top) <= TOLERANCE) { |
| | | rightFields.push(field); |
| | | } |
| | | } |
| | | |
| | | // 如果右边有字段,取最近的一个的左边距 |
| | | if (rightFields.length > 0) { |
| | | rightFields.sort((a, b) => a.left - b.left); |
| | | return Math.max(rightFields[0].left - left, 50); |
| | | } |
| | | |
| | | // 如果右边没有字段,使用名片边缘 |
| | | return Math.max(backdropWidth - left - 10, 100); |
| | | }, |
| | | // 打开地图选择地址 by lyzflash |
| | | chooseLocation(n) { |
| | | let self=this; |
| | | uni.chooseLocation({ |
| | | success: function (res) { |
| | | console.log(res); |
| | | self.business.longitude=res.longitude; |
| | | self.business.latitude=res.latitude; |
| | | self.location_address=res.address; |
| | | self.business.address[0]=res.name; |
| | | // 获取省市区 |
| | | self.setLocationAddress(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // 获取掉省市区 by lyzflash |
| | | setLocationAddress() { |
| | | let self = this; |
| | | self._get('user.address/setLocationAddress', { |
| | | address: self.location_address |
| | | }, function(res) { |
| | | /* self.address.location_address = res.data.short_address; */ |
| | | self.business.province_id = res.data.cityCode[0]; |
| | | self.business.city_id = res.data.cityCode[1]; |
| | | self.business.region_id = res.data.cityCode[2]; |
| | | self.selectCity = res.data.region; |
| | | }); |
| | | }, |
| | | templateClose() { |
| | | this.templateShow = !this.templateShow |
| | | }, |
| | |
| | | this.business.duties = duties |
| | | }, |
| | | handleAvatarUpload(imgs) { |
| | | this.is_avatar = false |
| | | if (imgs && imgs.length > 0) { |
| | | this.file_path = imgs[0].file_path |
| | | this.file_id = imgs[0].file_id |
| | | this.is_avatar = false |
| | | } |
| | | }, |
| | | handleLogoUpload(imgs) { |
| | | this.is_logo = false |
| | | if (imgs && imgs.length > 0) { |
| | | this.logo_path = imgs[0].file_path |
| | | this.logo_id = imgs[0].file_id |
| | | } |
| | | }, |
| | | // 获取名片类型列表 |
| | | getIlkList() { |
| | | let _this = this; |
| | | this._post('plus.business.business/getIlk', {}, res => { |
| | | if (res.data) { |
| | | // 转换为数组格式便于picker使用 |
| | | _this.ilkList = Object.keys(res.data).map(key => ({ |
| | | id: key, |
| | | name: res.data[key] |
| | | })); |
| | | } |
| | | }) |
| | | }, |
| | | // 切换名片类型 |
| | | changeIlk(e) { |
| | | const index = e.detail.value; |
| | | this.selectedIlk = this.ilkList[index]; |
| | | this.business.ilk = this.selectedIlk.id; |
| | | }, |
| | | getTemplate() { |
| | | let _this = this; |
| | | const systemInfo = uni.getSystemInfoSync() |
| | | this.screenWidth=systemInfo.screenWidth*2-70; |
| | | const systemInfo = uni.getSystemInfoSync(); |
| | | // 使用实际屏幕宽度减去左右边距 (20rpx * 2 = 40rpx = 20px) |
| | | const displayWidth = systemInfo.screenWidth - 20; |
| | | this.screenWidth = displayWidth * 2; // 保存为rpx宽度 |
| | | |
| | | this._post('plus.business.template/getList', { |
| | | screenWidth: systemInfo.screenWidth |
| | | screenWidth: displayWidth // 传递实际显示宽度(px) |
| | | }, res => { |
| | | this.templateList = res.data; |
| | | this.template_id ? '' : this.template_id = this.templateList[0].template_id |
| | |
| | | this.template_id = res.data.template_id; |
| | | this.unit = res.data.unit; |
| | | this.position = res.data.position; |
| | | |
| | | // 初始化公司职位列表 |
| | | this.initCompanyList(); |
| | | |
| | | this.mobile = this.business.mobile + (this.business.mobile_phone ? '/' + this.business |
| | | .mobile_phone : ''); |
| | | this.business.duties.forEach(function(item, index) { |
| | |
| | | }) |
| | | this.file_id = res.data.file_id; |
| | | this.logo_id = res.data.logo |
| | | res.data.file_path ? this.file_path = res.data.file_path : ""; |
| | | res.data.logo ? this.logo_path = res.data.logo_image.file_path : ""; |
| | | res.data.file_id ? this.file_path = res.data.file_path : ""; |
| | | res.data.logo ? this.logo_path = res.data.logoImage.file_path : ""; |
| | | res.data.logo_width ? this.logo_width = res.data.logo_width : 0; |
| | | res.data.logo_height ? this.logo_height = res.data.logo_height : 0; |
| | | |
| | | |
| | | // 设置名片类型 |
| | | if (this.business.ilk !== undefined && this.business.ilk !== '') { |
| | | // 等待类型列表加载完成后设置选中项 |
| | | if (this.ilkList && this.ilkList.length > 0) { |
| | | // 尝试根据id查找,id可能是字符串或数字 |
| | | const ilkId = String(this.business.ilk); |
| | | this.selectedIlk = this.ilkList.find(item => item.id === ilkId) || {}; |
| | | } else { |
| | | // 如果类型列表还没加载完成,先获取列表再设置 |
| | | this._post('plus.business.business/getIlk', {}, res => { |
| | | if (res.data) { |
| | | _this.ilkList = Object.keys(res.data).map(key => ({ |
| | | id: key, |
| | | name: res.data[key] |
| | | })); |
| | | // 尝试根据id查找,id可能是字符串或数字 |
| | | const ilkId = String(_this.business.ilk); |
| | | _this.selectedIlk = _this.ilkList.find(item => item.id === |
| | | ilkId) || {}; |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | // 设置行业名称 |
| | | if (this.business.industry_id) { |
| | | // 先等待行业列表加载完成再查找名称 |
| | |
| | | this._post('plus.business.industry/getIndustryTree', {}, res => { |
| | | if (res.data) { |
| | | _this.industryList = res.data.tree; |
| | | _this.findIndustryName(_this.industryList, _this.business.industry_id); |
| | | _this.findIndustryName(_this.industryList, _this.business |
| | | .industry_id); |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | |
| | | // 设置地区显示值 |
| | | if (this.business.region && this.business.region.province) { |
| | | let region = this.business.region; |
| | | this.selectCity = `${region.province} ${region.city} ${region.region}`; |
| | | } |
| | | |
| | | |
| | | this.getTemplate(); |
| | | |
| | | } |
| | |
| | | this.is_business = templateList.style.is_business; |
| | | }, |
| | | |
| | | // 初始化公司职位列表 |
| | | initCompanyList() { |
| | | let unitLength = Array.isArray(this.business.unit) ? this.business.unit.length : 0; |
| | | if (unitLength > 0) { |
| | | // 根据现有数据生成公司职位列表 |
| | | this.companyList = []; |
| | | for (let i = 0; i < unitLength; i++) { |
| | | this.companyList.push({ |
| | | unit: this.business.unit[i] || '', |
| | | duties: this.business.duties[i] || '' |
| | | }); |
| | | } |
| | | } else { |
| | | // 如果没有数据,至少添加一个 |
| | | this.companyList = [{ unit: '', duties: '' }]; |
| | | } |
| | | |
| | | // 不在这里调用syncBusinessFromCompanyList,因为watch会自动同步 |
| | | // 这样可以避免数据被意外重置 |
| | | }, |
| | | |
| | | // 添加公司职位 |
| | | addCompany() { |
| | | this.companyList.push({ |
| | | unit: '', |
| | | duties: '' |
| | | }); |
| | | // 移除syncBusinessFromCompanyList调用,watch会处理 |
| | | }, |
| | | |
| | | // 删除公司职位 |
| | | deleteCompany(index) { |
| | | if (this.companyList.length <= 1) { |
| | | this.showError('至少保留一个公司/职位'); |
| | | return; |
| | | } |
| | | this.companyList.splice(index, 1); |
| | | // 移除syncBusinessFromCompanyList调用,watch会处理 |
| | | }, |
| | | |
| | | // 从公司职位列表同步到business对象 |
| | | syncBusinessFromCompanyList() { |
| | | if (this.companyList && this.companyList.length > 0) { |
| | | this.business.unit = this.companyList.map(item => item.unit); |
| | | this.business.duties = this.companyList.map(item => item.duties); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .lxfx { |
| | | height: 100rpx; |
| | | min-height: 100rpx; |
| | | align-items: center; |
| | | display: flex; |
| | | border-bottom: #dce3ec 1rpx solid; |
| | |
| | | } |
| | | |
| | | .biaoti { |
| | | color: #37bde6; |
| | | color: #D41003; |
| | | font-size: 40rpx; |
| | | padding: 20rpx 0rpx; |
| | | } |
| | |
| | | border-radius: 30rpx; |
| | | } |
| | | |
| | | /* 名片预览样式优化 */ |
| | | .business-card-preview { |
| | | position: sticky; |
| | | top: 0; |
| | | z-index: 99999; |
| | | overflow: visible; |
| | | border-radius: 30rpx; |
| | | margin: 20rpx; |
| | | background-color: #f5f5f5; |
| | | width: calc(100% - 40rpx); |
| | | min-height: 450rpx; |
| | | } |
| | | |
| | | .card-backdrop { |
| | | border-radius: 30rpx; |
| | | } |
| | | |
| | | .card-icon { |
| | | z-index: 10; |
| | | } |
| | | |
| | | .card-text { |
| | | white-space: normal; |
| | | word-break: break-word; |
| | | word-wrap: break-word; |
| | | overflow-wrap: break-word; |
| | | overflow: hidden; |
| | | max-width: 100%; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | .card-scroll-unit, |
| | | .card-scroll-duties { |
| | | overflow: hidden; |
| | | overflow-y: auto; |
| | | background-color: transparent; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .card-text-item { |
| | | word-break: break-word; |
| | | word-wrap: break-word; |
| | | overflow-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 2px 4px; |
| | | line-height: 1.5; |
| | | margin-bottom: 4px; /* 行间距 */ |
| | | } |
| | | |
| | | .card-avatar, |
| | | .card-logo { |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .card-avatar.avatar-circle { |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .card-logo.logo-circle { |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .card-avatar image, |
| | | .card-logo image { |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: cover; |
| | | } |
| | | |
| | | .picker-content { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | height: 100rpx; |
| | | color: #333; |
| | | } |
| | | |
| | | .anu { |
| | | position: fixed; |
| | | bottom: 0rpx; |
| | |
| | | |
| | | .tijiao { |
| | | width: 30%; |
| | | background-color: #37bde6; |
| | | background-color: #D41003; |
| | | margin-left: 35%; |
| | | color: #fff; |
| | | } |
| | | |
| | | |
| | | .industry-popup { |
| | | padding: 20rpx; |
| | | } |
| | | |
| | | |
| | | .industry-title { |
| | | text-align: center; |
| | | font-size: 36rpx; |
| | | font-weight: bold; |
| | | margin-bottom: 20rpx; |
| | | color: #37bde6; |
| | | color: #D41003; |
| | | } |
| | | |
| | | |
| | | .industry-item { |
| | | padding: 20rpx; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | font-size: 32rpx; |
| | | } |
| | | |
| | | |
| | | .industry-item.selected { |
| | | color: #37bde6; |
| | | color: #D41003; |
| | | } |
| | | |
| | | |
| | | .industry-item:active { |
| | | background-color: #f5f5f5; |
| | | } |
| | | |
| | | |
| | | /* 子行业样式 */ |
| | | .industry-child { |
| | | background-color: #f8f8f8; |
| | | } |
| | | |
| | | |
| | | .industry-child-item { |
| | | padding-left: 60rpx; |
| | | font-size: 30rpx; |
| | | color: #666; |
| | | } |
| | | |
| | | /* 公司职位样式 */ |
| | | .company-item { |
| | | background-color: #f9f9f9; |
| | | border-radius: 12rpx; |
| | | padding: 20rpx; |
| | | margin-bottom: 20rpx; |
| | | } |
| | | |
| | | .company-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 16rpx; |
| | | padding-bottom: 12rpx; |
| | | border-bottom: 1rpx solid #e5e5e5; |
| | | } |
| | | |
| | | .company-title { |
| | | font-size: 28rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | |
| | | .delete-btn { |
| | | font-size: 26rpx; |
| | | color: #fa3534; |
| | | padding: 4rpx 12rpx; |
| | | background-color: rgba(250, 53, 52, 0.1); |
| | | border-radius: 4rpx; |
| | | } |
| | | |
| | | .add-company-btn { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | padding: 24rpx; |
| | | margin-top: 20rpx; |
| | | border: 2rpx dashed #D41003; |
| | | border-radius: 12rpx; |
| | | color: #D41003; |
| | | font-size: 28rpx; |
| | | background-color: rgba(212, 16, 3, 0.05); |
| | | } |
| | | |
| | | .add-company-btn .icon { |
| | | margin-right: 8rpx; |
| | | font-size: 32rpx; |
| | | } |
| | | </style> |