edit.blade.php 87 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430
  1. @extends('layouts.base')
  2. @section('title', '基础设置')
  3. @section('content')
  4. <link rel="stylesheet" href="{{resource_get('plugins/new-poster/views/admin/index.css')}}">
  5. <link rel="stylesheet" href="{{resource_get('plugins/new-poster/views/admin/edit.css')}}">
  6. <link rel="stylesheet" href="{{static_url('css/public-number.css')}}">
  7. <style>
  8. /* 导航 */
  9. .el-radio-button .el-radio-button__inner,.el-radio-button:first-child .el-radio-button__inner {border-radius: 4px 4px 4px 4px;border-left: 0px;}
  10. .el-radio-button__inner{border:0;}
  11. .el-radio-button:last-child .el-radio-button__inner {border-radius: 4px 4px 4px 4px;}
  12. .upload-boxed .el-icon-close {position: absolute;top: -5px;right: -5px;color: #fff;background: #333;border-radius: 50%;cursor: pointer;}
  13. .el-radio__inner { border: 1px solid #cfcfcf;}
  14. .edit-poster .el-form-item__label{width:20%!important}
  15. .edit-poster .el-form-item__content{margin-left:20%!important}
  16. </style>
  17. <div class="all">
  18. <div id="app" v-cloak>
  19. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  20. <div class="vue-head">
  21. <el-radio-group v-model="order_type">
  22. <el-radio-button label="1">海报设置</el-radio-button>
  23. <el-radio-button label="2" v-if="poster_type==1">权限设置</el-radio-button>
  24. <el-radio-button label="3" v-if="poster_type==1">推送设置</el-radio-button>
  25. <el-radio-button label="4" v-if="poster_type==1">奖励设置</el-radio-button>
  26. <el-radio-button label="5" v-if="poster_type==1">通知设置</el-radio-button>
  27. <el-radio-button label="6" v-if="poster_type==1">推广设置</el-radio-button>
  28. <el-radio-button label="7" v-if="poster_type==1||poster_type==2||poster_type==5||poster_type==7||poster_type==16">海报中心</el-radio-button>
  29. </el-radio-group>
  30. </div>
  31. <div v-show="order_type==1">
  32. <div class="vue-head">
  33. <div class="vue-main-title">
  34. <div class="vue-main-title-left"></div>
  35. <div class="vue-main-title-content">基础设置</div>
  36. </div>
  37. <div class="vue-main-form">
  38. <el-form-item label="海报名称" prop="title">
  39. <el-input v-model="form.title" style="width:70%;" ref="title"></el-input>
  40. </el-form-item>
  41. <el-form-item label="关键词" prop="keyword" v-if="poster_type==1">
  42. <el-input v-model="form.keyword" style="width:70%;" ref="keyword"></el-input>
  43. <div class="tip">接入微信公众号有效,公众号触发生成海报的关键词</div>
  44. </el-form-item>
  45. <el-form-item label="是否启用" prop="status" v-if="poster_type == 1">
  46. <el-switch v-model="form.status" :active-value="1" :inactive-value="0"></el-switch>
  47. </el-form-item>
  48. <el-form-item label="会员中心显示" prop="center_show" v-if="poster_type!=30">
  49. <el-checkbox-group v-model="form.center_show">
  50. <el-checkbox label="1" @change="changeCenterShow()">微信公众号</el-checkbox>
  51. <el-checkbox label="5" @change="changeCenterShow()">H5</el-checkbox>
  52. <el-checkbox label="2" @change="changeCenterShow()">微信小程序</el-checkbox>
  53. <el-checkbox label="7" @change="changeCenterShow()">商城APP</el-checkbox>
  54. <el-checkbox label="0" @change="changeCenterShow('other')">不显示</el-checkbox>
  55. </el-checkbox-group>
  56. <div class="tip">开启状态:会员中心推广二维码显示该海报图片</div>
  57. </el-form-item>
  58. <!-- <el-form-item label="会员中心显示" prop="center_show">
  59. <el-switch v-model="form.center_show" :active-value="1" :inactive-value="0"></el-switch>
  60. <div class="tip">开启状态:会员中心推广二维码显示该海报图片</div>
  61. </el-form-item> -->
  62. <el-form-item label="APP分享页面显示" prop="app_share_show" v-if="poster_type == 7 || poster_type == 16">
  63. <el-switch v-model="form.app_share_show" :active-value="1" :inactive-value="0"></el-switch>
  64. <div class="tip">开启状态:APP分享页面显示该海报图片</div>
  65. </el-form-item>
  66. <el-form-item label="是否前端生成" prop="is_ago" v-if="poster_type!=30">
  67. <el-switch v-model="form.is_ago" :active-value="1" :inactive-value="0"></el-switch>
  68. </el-form-item>
  69. <el-form-item label="标签" prop="">
  70. <!-- 回显选择标签-->
  71. <div v-if="form.label">
  72. <el-tag closable :disable-transitions="false" @close="handleClose(tag)">
  73. [[form.label]]
  74. </el-tag>
  75. </div>
  76. <el-popover placement="top" width="200" v-model="label_show">
  77. <el-input v-model="label_word" size="mini" placeholder="请输入标签名"></el-input>
  78. <div style="text-align: right; margin: 10px 0">
  79. <el-button size="mini" type="text" @click="label_show = false">取消</el-button>
  80. <el-button type="primary" size="mini" @click="sureAddLabel">确定</el-button>
  81. </div>
  82. <el-button plain type="primary" slot="reference" icon="el-icon-plus" size="small">添加标签</el-button>
  83. </el-popover>
  84. <el-popover placement="right" width="400" v-model="history_show">
  85. <div>
  86. <el-input v-model="label_word" size="mini" placeholder="请输入标签名" style="width:70%"></el-input>
  87. <el-button type="primary" size="mini" @click="getLabel()">搜索</el-button>
  88. </div>
  89. <div class="label-history" style="min-height:200px;overflow:auto;margin:10px 0;">
  90. <!-- 循环标签 -->
  91. <div style="display:flex;flex-wrap:wrap">
  92. <div v-for="(item,index) in label_list" :key="index" @click="chooseLabel(item)" :style="{color:item.name==form.label?'#29BA9C':''}" style="margin:5px 10px;font-weight: 400;cursor: pointer;">[[item.name]]</div>
  93. </div>
  94. </div>
  95. <el-row>
  96. <el-col align="right">
  97. <el-pagination layout="prev, pager, next,jumper" @current-change="getLabel" :total="label_total"
  98. :page-size="label_per_page" :current-page="label_current_page" background
  99. ></el-pagination>
  100. </el-col>
  101. </el-row>
  102. <el-button type="text" slot="reference" @click="getLabel()" size="small" style="color:#ff9b19;margin-left:20px">历史标签</el-button>
  103. </el-popover>
  104. </el-form-item>
  105. </div>
  106. </div>
  107. <div class="vue-head" style="margin-top:20px">
  108. <div class="vue-main-title">
  109. <div class="vue-main-title-left"></div>
  110. <div class="vue-main-title-content">海报设计</div>
  111. </div>
  112. <div class="vue-main-form">
  113. <div style="width:85%;margin:auto;display:flex;margin-bottom:30px;">
  114. <div style="width: 320px;height: 504px;border: 1px solid #ccc;position: relative;">
  115. <img v-if="form.background_url" :src="form.background_url" alt="" style="width:100%;height:100%;">
  116. <drag-resize
  117. v-for="(rect, index) in rects"
  118. :key="index"
  119. :w="rect.width"
  120. :h="rect.height"
  121. :x="rect.left"
  122. :y="rect.top"
  123. :axis="rect.axis"
  124. :is-active="rect.active"
  125. :minw="rect.minw"
  126. :minh="rect.minh"
  127. :is-draggable="rect.draggable"
  128. :is-resizable="rect.resizable"
  129. :parent-limitation="rect.parentLim"
  130. :aspect-ratio="rect.aspectRatio"
  131. :z="rect.zIndex"
  132. :content-class="rect.class"
  133. v-on:activated="activateEv(index)"
  134. v-on:deactivated="deactivateEv(index)"
  135. v-on:dragging="changePosition($event, index)"
  136. v-on:resizing="changeSize($event, index)"
  137. style="position: absolute;"
  138. >
  139. <!-- 头像 -->
  140. <img v-if="rect.type=='head'" :src="head_url" alt="" style="width:100%;height:100%;">
  141. <!-- 关注二维码 -->
  142. <img v-if="poster_type==1&&rect.type=='qr'" :src="qr_url" alt="" style="width:100%;height:100%;">
  143. <!-- 关注二维码 -->
  144. <!-- 商城二维码 -->
  145. <img v-if="poster_type==1&&rect.type=='shopqr'" :src="qr_shop" alt="" style="width:100%;height:100%;">
  146. <!-- 商城二维码 -->
  147. <!-- 小程序二维码 -->
  148. <img v-if="poster_type==2&&rect.type=='qr'" :src="qr_url" alt="" style="width:100%;height:100%;">
  149. <!-- 小程序二维码 -->
  150. <!-- H5二维码 -->
  151. <img v-if="poster_type==5&&rect.type=='qr'" :src="qr_shop" alt="" style="width:100%;height:100%;">
  152. <!-- H5二维码 -->
  153. <!-- APP二维码 -->
  154. <img v-if="(poster_type==7 || poster_type==16) &&rect.type=='qr'" :src="app_qr_url" alt="" style="width:100%;height:100%;">
  155. <!-- APP二维码 -->
  156. <img v-if="rect.type=='img'" :src="rect.src_url" alt="" style="width:100%;height:100%;">
  157. <!-- 企业成员二维码 -->
  158. <img v-if="poster_type==30&&rect.type=='customer_qr'" :src="qr_url" alt="" style="width:100%;height:100%;">
  159. <div v-if="rect.type=='nickname'"
  160. :style="{color:rect.color,fontSize:rect.size+'px'}"
  161. style="width:100%;height:100%;"
  162. >
  163. 昵称
  164. </div>
  165. <div v-if="rect.type=='invite'"
  166. :style="{color:rect.color,fontSize:rect.size+'px'}"
  167. style="width:100%;height:100%;"
  168. >
  169. A1H3U5GF
  170. </div>
  171. <div v-if="rect.type=='mid'"
  172. :style="{color:rect.color,fontSize:rect.size+'px'}"
  173. style="width:100%;height:100%;"
  174. >
  175. 8888
  176. </div>
  177. <div v-if="rect.type=='customer_activity'"
  178. :style="{color:rect.color,fontSize:rect.size+'px'}"
  179. style="width:100%;height:100%;"
  180. >
  181. 活动名称
  182. </div>
  183. </drag-resize>
  184. </div>
  185. <div class="edit-poster" style="flex:1;margin-left:10%">
  186. <!-- <div>背景图片</div> -->
  187. <el-form-item label="背景图片" prop="background">
  188. <div class="upload-box" @click="openUpload('background')" v-if="!form.background_url">
  189. <i class="el-icon-plus" style="font-size:32px"></i>
  190. </div>
  191. <div @click="openUpload('background')" class="upload-boxed" v-if="form.background_url" style="height:236.25px">
  192. <img :src="form.background_url" alt="" style="width:150px;height:236.25px;border-radius: 5px;cursor: pointer;">
  193. <i class="el-icon-close" @click.stop="clearImg('background')" title="点击清除图片"></i>
  194. <div class="upload-boxed-text">点击重新上传</div>
  195. </div>
  196. <div class="tip">建议背景图片尺寸: 640*1008
  197. <span v-if="isDecorate">
  198. <span @click.stop="jumpUrl" style="color: #196dfa;font-weight: 600;margin-left: 15px;cursor:pointer;">图片智能在线设计</span><i class="el-icon-question" style="color:#196dfa;margin-left:2px;" @click="showIntroduce = true;"></i>
  199. </span>
  200. </div>
  201. </el-form-item>
  202. <el-form-item label="海报元素" prop="">
  203. <el-button size="small" @click="addEle('head')">头像</el-button>
  204. <el-button size="small" @click="addEle('nickname')">昵称</el-button>
  205. <el-button size="small" @click="addEle('qr')" v-if="poster_type==1">关注二维码</el-button>
  206. <el-button size="small" @click="addEle('shopqr')" v-if="poster_type==1">商城二维码</el-button>
  207. <el-button size="small" @click="addEle('qr')" v-if="poster_type==2">小程序二维码</el-button>
  208. <el-button size="small" @click="addEle('qr')" v-if="poster_type==5">商城二维码</el-button>
  209. <el-button size="small" @click="addEle('qr')" v-if="poster_type==7 || poster_type==16">APP二维码</el-button>
  210. <el-button size="small" @click="addEle('img')">图片</el-button>
  211. <el-button size="small" @click="addEle('invite')">邀请码</el-button>
  212. <el-button size="small" @click="addEle('mid')">会员ID</el-button>
  213. <el-button size="small" @click="addEle('customer_activity')" v-if="poster_type==30">活动名称</el-button>
  214. <el-button size="small" @click="addEle('customer_qr')" v-if="poster_type==30">企业成员二维码</el-button>
  215. <el-button type="text" icon="iconfont icon-ht_operation_delete" @click="delEle" title="删除当前元素" style="color:#F56C6C"></el-button>
  216. </el-form-item>
  217. <!-- 昵称设置项、邀请码、会员ID -->
  218. <div v-if="choosed_obj.type=='nickname' || choosed_obj.type=='invite' || choosed_obj.type=='mid'">
  219. <el-form-item label="文字颜色" prop="">
  220. <el-color-picker v-model="choosed_obj.color" style="display:inline-block"></el-color-picker>
  221. </el-form-item>
  222. <el-form-item label="文字大小" prop="">
  223. <el-input v-model="choosed_obj.size" style="width:200px">
  224. <template slot="append">PX</template>
  225. </el-input>
  226. </el-form-item>
  227. </div>
  228. <!-- 图片设置项 -->
  229. <div v-if="choosed_obj.type=='img'">
  230. <el-form-item label="图片设置" prop="">
  231. <div class="upload-box" @click="openUpload('src',2)" v-if="!choosed_obj.src_url">
  232. <i class="el-icon-plus" style="font-size:32px"></i>
  233. </div>
  234. <div @click="openUpload('src',2)" class="upload-boxed" v-if="choosed_obj.src_url" style="height:150px">
  235. <img :src="choosed_obj.src_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  236. <i class="el-icon-close" @click.stop="clearImg('src',2)" title="点击清除图片"></i>
  237. <div class="upload-boxed-text">点击重新上传</div>
  238. </div>
  239. </el-form-item>
  240. </div>
  241. <!-- 小程序二维码设置项 -->
  242. <div v-if="choosed_obj.type=='qr'&&poster_type==2">
  243. <el-form-item label="小程序二维码链接跳转" prop="">
  244. <el-input v-model="choosed_obj.mini_link" style="width:300px;"></el-input>
  245. <el-button @click="showLink('mini','mini_link',2)">选择链接</el-button>
  246. <div class="tip">默认跳转小程序首页</div>
  247. </el-form-item>
  248. </div>
  249. <!-- H5二维码设置项 -->
  250. <div v-if="choosed_obj.type=='qr'&&poster_type==5">
  251. <el-form-item label="二维码链接跳转" prop="">
  252. <el-input v-model="choosed_obj.h5_link" style="width:300px;"></el-input>
  253. <el-button @click="showLink('link','h5_link',5)">选择链接</el-button>
  254. <div class="tip">默认跳转商城首页</div>
  255. </el-form-item>
  256. </div>
  257. <!-- 公众号关注二维码设置项 -->
  258. <div v-if="choosed_obj.type=='shopqr'&&poster_type==1">
  259. <el-form-item label="二维码链接跳转" prop="">
  260. <el-input v-model="choosed_obj.h5_link" style="width:300px;"></el-input>
  261. <el-button @click="showLink('link','h5_link',5)">选择链接</el-button>
  262. <div class="tip">默认跳转商城首页</div>
  263. </el-form-item>
  264. </div>
  265. </div>
  266. </div>
  267. <el-form-item label="" prop="wait_reminder" v-if="poster_type==1">
  268. <template slot="label">
  269. <div style="line-height:30px">用户生成海报时等待文字</div>
  270. <div style="line-height:30px">(微信公众号关键词回复)</div>
  271. </template>
  272. <el-input v-model="form.wait_reminder" rows="5" type="textarea" style="width:70%;" ref="wait_reminder" placeholder="默认:您的专属海报正在拼命生成中,请稍等片刻...">
  273. </el-input>
  274. <div>
  275. <el-button size="mini" @click="addContent('nickname','wait_reminder')" ref="nickname">会员昵称</el-button>
  276. <el-button size="mini" @click="addLink('link','wait_reminder')">链接</el-button>
  277. </div>
  278. </el-form-item>
  279. <el-form-item label="" prop="disable_reminder" v-if="poster_type==1">
  280. <template slot="label">
  281. <div style="line-height:30px">海报禁用时回复文字</div>
  282. <div style="line-height:30px">(微信公众号关键词回复)</div>
  283. </template>
  284. <el-input v-model="form.disable_reminder" rows="5" type="textarea" style="width:70%;" ref="disable_reminder" placeholder="默认:该海报已经失效,请尝试其他海报">
  285. </el-input>
  286. <div>
  287. <el-button size="mini" @click="addContent('nickname','disable_reminder')" ref="nickname">会员昵称</el-button>
  288. <el-button size="mini" @click="addLink('link','disable_reminder')">链接</el-button>
  289. </div>
  290. </el-form-item>
  291. </div>
  292. </div>
  293. </div>
  294. <!-- 权限设置 -->
  295. <div v-show="order_type==2">
  296. <div class="vue-main">
  297. <div class="vue-main-title">
  298. <div class="vue-main-title-left"></div>
  299. <div class="vue-main-title-content">基础设置</div>
  300. </div>
  301. <div class="vue-main-form">
  302. <el-form-item label="开放权限" prop="is_open">
  303. <el-radio v-model="form.is_open" :label="0">不允许</el-radio>
  304. <el-radio v-model="form.is_open" :label="1">允许</el-radio>
  305. <div class="tip">是否允许没有发展下线资格的用户生成自己的海报</div>
  306. <div class="tip"><span style="color:#f00">*</span>由于每个公众号的永久二维码数量有限,建议不要开放权限</div>
  307. </el-form-item>
  308. <el-form-item label="未开放权限时的提示" prop="not_open_reminder">
  309. <el-input v-model="form.not_open_reminder" style="width:70%;" ref="not_open_reminder" placeholder="默认:您还没有发展下线的资格,努力去拥有资格,获得您的专属海报吧!"></el-input>
  310. <div>
  311. <el-button size="mini" @click="addContent('nickname','not_open_reminder','input')" ref="nickname">会员昵称</el-button>
  312. </div>
  313. </el-form-item>
  314. <el-form-item label="未开放权限时的说明链接" prop="not_open_reminder_url">
  315. <el-input v-model="form.not_open_reminder_url" style="width:70%;"></el-input>
  316. </el-form-item>
  317. </div>
  318. </div>
  319. </div>
  320. <!-- 推送设置 -->
  321. <div v-show="order_type==3" v-if="poster_type==1">
  322. <div class="vue-main">
  323. <div class="vue-main-title">
  324. <div class="vue-main-title-left"></div>
  325. <div class="vue-main-title-content">基础设置</div>
  326. </div>
  327. <div class="vue-main-form">
  328. <el-form-item label="海报推送" prop="response_status">
  329. <el-switch v-model="form.response_status" :active-value="1" :inactive-value="0"></el-switch>
  330. <div class="tip">提示:开启后,如果关注的会员有权限或者权限设置开放权限设置为允许,当用户扫海报关注公众号状态下则自动推送该会员专属海报!</div>
  331. </el-form-item>
  332. <hr>
  333. <el-form-item label="推送类型" prop="response_type">
  334. <el-radio v-model="form.response_type" :label="0">图文推送</el-radio>
  335. <el-radio v-model="form.response_type" :label="1">文本推送</el-radio>
  336. </el-form-item>
  337. <!-- 图文 -->
  338. <div v-if="!form.response_type">
  339. <el-form-item label="推送标题" prop="response_title">
  340. <el-input v-model="form.response_title" style="width:70%;" placeholder="如果这里设置为空,则用户扫码推荐者的海报二维码后,系统不推荐内容"></el-input>
  341. </el-form-item>
  342. <el-form-item label="推送封面" prop="response_thumb">
  343. <div class="upload-box" @click="openUpload('response_thumb')" v-if="!form.response_thumb_url">
  344. <i class="el-icon-plus" style="font-size:32px"></i>
  345. </div>
  346. <div @click="openUpload('response_thumb')" class="upload-boxed" v-if="form.response_thumb_url" style="height:150px">
  347. <img :src="form.response_thumb_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  348. <i class="el-icon-close" @click.stop="clearImg('response_thumb')" title="点击清除图片"></i>
  349. <div class="upload-boxed-text">点击重新上传</div>
  350. </div>
  351. </el-form-item>
  352. <el-form-item label="推送描述" prop="response_desc">
  353. <el-input type="textarea" rows="5" v-model="form.response_desc" style="width:70%;"></el-input>
  354. </el-form-item>
  355. <el-form-item label="推送链接" prop="response_url">
  356. <el-input v-model="form.response_url" style="width:70%;" placeholder="默认为商城首页链接"></el-input>
  357. </el-form-item>
  358. </div>
  359. <!-- 文本 -->
  360. <div v-if="form.response_type">
  361. <el-form-item label="推送消息" prop="response_text">
  362. <el-input type="textarea" rows="5" v-model="form.response_text" ref="response_text" style="width:70%;"></el-input>
  363. <div>
  364. <el-button size="mini" @click="addContent('nickname','response_text')">会员昵称</el-button>
  365. <el-button size="mini" @click="addLink('link','response_text')">链接</el-button>
  366. <el-button size="mini" @click="addContent('shopname','response_text')">商城名称</el-button>
  367. <el-button size="mini" @click="addContent('credit','response_text')">积分数量</el-button>
  368. <el-button size="mini" @click="addContent('bonus','response_text')">现金金额</el-button>
  369. <el-button size="mini" @click="addContent('coupon_name','response_text')">优惠券名称</el-button>
  370. <el-button size="mini" @click="addContent('coupon_num','response_text')">优惠券张数</el-button>
  371. <el-popover placement="right" width="300">
  372. <div style="margin:10px 0;line-height:24px;font-weight: 500;">
  373. <div>你好,[用户昵称]</div>
  374. <div>感谢您关注[商城名称]</div>
  375. <div>分享下方海报,邀请好友关注:</div>
  376. <div>[积分数量]个[[shop_credit1]],[现金金额]元,[优惠券名称][优惠券张数]张的奖励!</div>
  377. <div>快去分享你的专属海报↓↓↓</div>
  378. </div>
  379. <el-button size="mini" type="text" slot="reference" icon="el-icon-info">查看示例</el-button>
  380. </el-popover>
  381. </div>
  382. </el-form-item>
  383. </div>
  384. </div>
  385. </div>
  386. </div>
  387. <!-- 奖励设置 -->
  388. <div v-show="order_type==4">
  389. <div class="vue-main">
  390. <div class="vue-main-title">
  391. <div class="vue-main-title-left"></div>
  392. <div class="vue-main-title-content">基础设置</div>
  393. </div>
  394. <div class="vue-main-form">
  395. <el-form-item label="推荐者奖励" prop="">
  396. </el-form-item>
  397. <el-form-item :label="shop_credit1" prop="recommender_credit">
  398. <el-input v-model="form.recommender_credit" style="width:70%;"></el-input>
  399. </el-form-item>
  400. <el-form-item label="现金" prop="recommender_bonus">
  401. <el-input v-model="form.recommender_bonus" style="width:70%;"></el-input>
  402. </el-form-item>
  403. <el-form-item label="优惠券" prop="">
  404. <el-input :value="coupon_word1" style="width:calc(70% - 180px)" disabled></el-input>
  405. <!-- recommender_coupon_id+recommender_coupon_name -->
  406. <el-button type="primary" @click="openCoupon('1')">选择优惠券</el-button>
  407. <el-button type="text" style="color:#F56C6C" @click="clearCoupon('1')">清除选择</el-button>
  408. </el-form-item>
  409. <el-form-item label="优惠券张数" prop="recommender_coupon_num">
  410. <el-input v-model="form.recommender_coupon_num" style="width:70%;"></el-input>
  411. </el-form-item>
  412. <el-form-item label="关注者奖励" prop="">
  413. </el-form-item>
  414. <el-form-item :label="shop_credit1" prop="subscriber_credit">
  415. <el-input v-model="form.subscriber_credit" style="width:70%;"></el-input>
  416. </el-form-item>
  417. <el-form-item label="现金" prop="subscriber_bonus">
  418. <el-input v-model="form.subscriber_bonus" style="width:70%;"></el-input>
  419. </el-form-item>
  420. <!-- subscriber_coupon_id+subscriber_coupon_name -->
  421. <el-form-item label="优惠券" prop="subscriber_coupon_name">
  422. <el-input :value="coupon_word2" style="width:calc(70% - 180px)" disabled></el-input>
  423. <el-button type="primary" @click="openCoupon('2')">选择优惠券</el-button>
  424. <el-button type="text" style="color:#F56C6C" @click="clearCoupon('2')">清除选择</el-button>
  425. </el-form-item>
  426. <el-form-item label="优惠券张数" prop="subscriber_coupon_num">
  427. <el-input v-model="form.subscriber_coupon_num" style="width:70%;"></el-input>
  428. </el-form-item>
  429. <el-form-item label="奖励现金方式" prop="bonus_method">
  430. <el-radio v-model="form.bonus_method" :label="1">余额</el-radio>
  431. <el-radio v-model="form.bonus_method" :label="2">微信钱包</el-radio>
  432. <div class="tip">如果奖励现金,可以选择打款到用户余额或者是微信钱包(微信钱包需要开通微信支付,并在后台上传证书)</div>
  433. </el-form-item>
  434. </div>
  435. </div>
  436. </div>
  437. <!-- 奖励设置 -->
  438. <div v-show="order_type==5" v-if="poster_type==1">
  439. <div class="vue-main">
  440. <div class="vue-main-title">
  441. <div class="vue-main-title-left"></div>
  442. <div class="vue-main-title-content">基础设置</div>
  443. </div>
  444. <div class="vue-main-form">
  445. {{--<el-form-item label="推荐者的奖励通知-标题" prop="recommender_award_title">--}}
  446. {{--<el-input v-model="form.recommender_award_title" ref="recommender_award_title" style="width:70%;" placeholder="默认“推荐关注奖励通知”"></el-input>--}}
  447. {{--</el-form-item>--}}
  448. <el-form-item label="推荐者的奖励通知-内容" prop="recommender_award_notice">
  449. <el-input type="textarea" rows="5" v-model="form.recommender_award_notice" ref="recommender_award_notice" style="width:70%;"></el-input>
  450. <div>
  451. <el-button size="mini" @click="addContent('s_nickname','recommender_award_notice')">扫码者昵称</el-button>
  452. <el-button size="mini" @click="addContent('credit','recommender_award_notice')">积分数量</el-button>
  453. <el-button size="mini" @click="addContent('bonus','recommender_award_notice')">现金金额</el-button>
  454. <el-button size="mini" @click="addContent('coupon_name','recommender_award_notice')">优惠券名称</el-button>
  455. <el-button size="mini" @click="addContent('coupon_num','recommender_award_notice')">优惠券张数</el-button>
  456. <el-popover placement="right" width="300">
  457. <div style="margin:10px 0;line-height:24px;font-weight: 500;">
  458. <div>[扫码者昵称]通过您的二维码关注公众号,恭喜您可获得[积分数量]个积分,[现金金额]元,[优惠券名称][优惠券张数]张的奖励!</div>
  459. <div>继续加油哟!</div>
  460. </div>
  461. <el-button size="mini" type="text" slot="reference" icon="el-icon-info">查看示例</el-button>
  462. </el-popover>
  463. </div>
  464. </el-form-item>
  465. {{--<el-form-item label="关注者的奖励通知-标题" prop="subscriber_award_title">--}}
  466. {{--<el-input v-model="form.subscriber_award_title" ref="subscriber_award_title" style="width:70%;" placeholder="默认“关注奖励通知”"></el-input>--}}
  467. {{--</el-form-item>--}}
  468. <el-form-item label="关注者的奖励通知-内容" prop="subscriber_award_notice">
  469. <el-input type="textarea" rows="5" v-model="form.subscriber_award_notice" ref="subscriber_award_notice" style="width:70%;"></el-input>
  470. <div>
  471. <el-button size="mini" @click="addContent('t_nickname','subscriber_award_notice')">推荐者昵称</el-button>
  472. <el-button size="mini" @click="addContent('credit','subscriber_award_notice')">积分数量</el-button>
  473. <el-button size="mini" @click="addContent('bonus','subscriber_award_notice')">现金金额</el-button>
  474. <el-button size="mini" @click="addContent('coupon_name','subscriber_award_notice')">优惠券名称</el-button>
  475. <el-button size="mini" @click="addContent('coupon_num','subscriber_award_notice')">优惠券张数</el-button>
  476. <el-popover placement="right" width="300">
  477. <div style="margin:10px 0;line-height:24px;font-weight: 500;">
  478. <div>恭喜您通过扫[推荐者昵称]的二维码关注公众号,可获得[积分数量]个积分,[现金金额]元,[优惠券名称][优惠券张数]张的奖励!</div>
  479. <div>分享可获得更多奖励哟!</div>
  480. </div>
  481. <el-button size="mini" type="text" slot="reference" icon="el-icon-info">查看示例</el-button>
  482. </el-popover>
  483. </div>
  484. </el-form-item>
  485. </div>
  486. </div>
  487. </div>
  488. <!-- 分销设置 -->
  489. <div v-show="order_type==6" v-if="poster_type==1">
  490. <div class="vue-main">
  491. <div class="vue-main-title">
  492. <div class="vue-main-title-left"></div>
  493. <div class="vue-main-title-content">基础设置</div>
  494. </div>
  495. <div class="vue-main-form">
  496. <el-form-item label="扫码关注成为下线" prop="auto_sub">
  497. <el-radio v-model="form.auto_sub" :label="1">是</el-radio>
  498. <el-radio v-model="form.auto_sub" :label="0">否</el-radio>
  499. <div class="tip">如果扫码用户之前不存在分销关系,那么扫码关注后直接成为推荐人的下线</div>
  500. </el-form-item>
  501. </div>
  502. </div>
  503. </div>
  504. <!-- 海报中心 -->
  505. <div v-show="order_type==7">
  506. <div class="vue-main">
  507. <div class="vue-main-title">
  508. <div class="vue-main-title-left"></div>
  509. <div class="vue-main-title-content">基础设置</div>
  510. </div>
  511. <div class="vue-main-form">
  512. <el-form-item label="是否在海报中心显示">
  513. <el-switch v-model="form.is_show_center" :active-value="1" :inactive-value="0"></el-switch>
  514. </el-form-item>
  515. <el-form-item label="海报中心效果图显示">
  516. <el-radio v-model="form.design_img_show" :label="0">背景图</el-radio>
  517. <el-radio v-model="form.design_img_show" :label="1">自定义图片</el-radio>
  518. </el-form-item>
  519. <el-form-item v-if="form.design_img_show==1">
  520. <div v-if="!form.design_img_url">
  521. <div class="upload-box" @click="openUpload('design_img')">
  522. <i class="el-icon-plus" style="font-size:32px"></i>
  523. </div>
  524. <div class="tip">建议尺寸:640*1008</div>
  525. </div>
  526. <div @click="openUpload('design_img')" class="upload-boxed" v-if="form.design_img_url" style="height:150px">
  527. <img :src="form.design_img_url" alt="" style="width:150px;height:150px;border-radius: 5px;cursor: pointer;">
  528. <i class="el-icon-close" @click.stop="clearImg('design_img')" title="点击清除图片"></i>
  529. <div class="upload-boxed-text">点击重新上传</div>
  530. <div class="tip">建议尺寸:640*1008</div>
  531. </div>
  532. </el-form-item>
  533. </div>
  534. </div>
  535. </div>
  536. </el-form>
  537. <!-- 分页 -->
  538. <div class="vue-page">
  539. <div class="vue-center">
  540. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  541. <el-button @click="goBack">返回</el-button>
  542. </div>
  543. </div>
  544. <!-- 选择优惠券 -->
  545. <el-dialog :visible.sync="coupon_show" width="850px" center title="选择优惠券">
  546. <div>
  547. <el-input v-model="coupon_word" style="width:70%"></el-input>
  548. <el-button @click="searchCoupon" type="primary">搜索</el-button>
  549. </div>
  550. <el-table :data="coupon_list" style="width: 100%;height:500px;overflow:auto" id="goods-list">
  551. <el-table-column label="ID" prop="id" align="center" width="150px"></el-table-column>
  552. <el-table-column label="优惠券">
  553. <template slot-scope="scope">
  554. <div>
  555. <div style="color:#333;font-weight:500">[[scope.row.name]]</div>
  556. </template>
  557. </el-table-column>
  558. <el-table-column label="选择" prop="id" align="center" width="150px">
  559. <template slot-scope="scope">
  560. <el-button size="small" @click="chooseCoupon(scope.row)">选择</el-button>
  561. </template>
  562. </el-table-column>
  563. </el-table>
  564. <el-row>
  565. <el-col align="right">
  566. <el-pagination layout="prev, pager, next,jumper" @current-change="searchCoupon" :total="coupon_total"
  567. :page-size="coupon_per_page" :current-page="coupon_current_page" background
  568. ></el-pagination>
  569. </el-col>
  570. </el-row>
  571. <span slot="footer" class="dialog-footer">
  572. <el-button @click="coupon_show = false">取 消</el-button>
  573. </span>
  574. </el-dialog>
  575. <el-dialog :visible.sync="link_show" width="850px" center title="插入链接">
  576. <el-form ref="link_form" :model="link_form" label-width="15%">
  577. <el-form-item label="链接标题" prop="title">
  578. <el-input v-model="link_form.title" style="width:70%;" placeholder="请输入链接显示的文字"></el-input>
  579. </el-form-item>
  580. <el-form-item label="链接地址" prop="content">
  581. <el-input v-model="link_form.content" style="width:70%;" placeholder="以https://开头"></el-input>
  582. </el-form-item>
  583. </el-form>
  584. <span slot="footer" class="dialog-footer">
  585. <el-button type="primary" @click="sureAddLink">确 定</el-button>
  586. <el-button @click="link_show = false">取 消</el-button>
  587. </span>
  588. </el-dialog>
  589. <upload-img :upload-show="uploadShow" :name="chooseImgName" @replace="changeProp" @sure="sureImg"></upload-img>
  590. <pop :show="show" @replace="changeLink" @add="parHref"></pop>
  591. <program :pro="pro" @replacepro="changeprogram" @addpro="parpro"></program>
  592. <introduce v-model="showIntroduce" v-show="showIntroduce"></introduce>
  593. </div>
  594. </div>
  595. @include('public.admin.uploadImg')
  596. @include('public.admin.vueDragResize')
  597. @include('public.admin.pop')
  598. @include('public.admin.program')
  599. @include('public.admin.new-poster-introduce')
  600. <script>
  601. const CktUrl = "{!! $ckt_url !!}"; //* 创客贴url
  602. const IsDecorate = "{!! $is_decorate !!}";
  603. </script>
  604. <script>
  605. const qr_url = `{!! resource_get('plugins/new-poster/assets/img/qr.png') !!}`;
  606. const head_url = `{!! resource_get('plugins/new-poster/assets/img/head.jpg') !!}`;
  607. const thumb_url = `{!! resource_get('plugins/new-poster/assets/img/img.jpg') !!}`;
  608. const app_qr_url = `{!! resource_get('plugins/new-poster/assets/img/qr_app_share.jpg') !!}`;
  609. const qr_shop = `{!! resource_get('plugins/new-poster/assets/img/qr_shop.jpg') !!}`;
  610. const invite = `{!! resource_get('plugins/new-poster/assets/img/qr_shop.jpg') !!}`;
  611. let data = {!! json_encode($data)?:'[]' !!};
  612. let poster = {!! json_encode($poster)?:'{}' !!};
  613. let shop_credit1 = {!! json_encode($shop_credit1)?:' ' !!};
  614. let id = 0;
  615. let supplement = {};
  616. if(data==null) {
  617. data = [];
  618. }
  619. if(poster==null) {
  620. poster = {};
  621. }
  622. else{
  623. if(poster.supplement && poster.supplement!=null) {
  624. supplement = poster.supplement;
  625. }
  626. id = poster.id;
  627. }
  628. if(shop_credit1==null) {
  629. shop_credit1 = "";
  630. }
  631. console.log(data);
  632. var app = new Vue({
  633. el:"#app",
  634. delimiters: ['[[', ']]'],
  635. name: 'test',
  636. data() {
  637. return{
  638. showIntroduce:false,
  639. id:id,
  640. poster_type:1,
  641. label_word:"",
  642. label_show:false,
  643. history_show:false,
  644. label_list:[],
  645. label_total:0,
  646. label_per_page:0,
  647. label_current_page:0,
  648. shop_credit1:shop_credit1,//积分字样
  649. show:false,//是否开启公众号弹窗
  650. pro:false ,//是否开启小程序弹窗
  651. chooseLink:'',
  652. chooseMiniLink:'',
  653. link_type:1,
  654. coupon_word:"",
  655. coupon_show:false,
  656. coupon_list:[],
  657. coupon_total:0,
  658. coupon_per_page:0,
  659. coupon_current_page:0,
  660. coupon_type:0,
  661. rects:[],
  662. data:data,
  663. zIndex:0,//全局层次
  664. choosed_obj:{},
  665. choosed_index:-1,
  666. qr_url :qr_url,
  667. head_url :head_url,
  668. thumb_url:thumb_url,
  669. app_qr_url:app_qr_url,
  670. qr_shop:qr_shop,
  671. invite:invite,
  672. listWidth:"",
  673. listHeight:"",
  674. color1:'1',
  675. order_type:1,
  676. link_show:false,
  677. link_ref : "",
  678. link_type : "",
  679. link_form:{
  680. },
  681. form:{
  682. // poster
  683. title:poster.title || "",
  684. keyword:poster.keyword || "",
  685. status:poster.status || 0,
  686. center_show:poster.center_show&&poster.center_show.length>=0?poster.center_show:[],//会员中心显示
  687. app_share_show:poster.app_share_show || 0,
  688. is_ago:poster.is_ago || 0,
  689. background:poster.background || "",
  690. background_url:poster.background_url || "",
  691. is_open:poster.is_open || 0,
  692. response_status:poster.response_status || 0,//推送状态
  693. response_type:poster.response_type || 0,
  694. response_title:poster.response_title || "",//推送
  695. response_thumb:poster.response_thumb || "",
  696. response_thumb_url:poster.response_thumb_url || "",
  697. response_text:poster.response_text || "",
  698. label:(poster.label&&poster.label!=null)?poster.label.name:"",
  699. label_id:poster.label_id || "",
  700. response_desc:poster.response_desc || "",
  701. response_url:poster.response_url || "",
  702. auto_sub:poster.auto_sub == 0 ?0: 1,//扫码关注成为下线
  703. // poster_supplement
  704. wait_reminder:supplement.wait_reminder || "",
  705. disable_reminder:supplement.disable_reminder || "",
  706. not_open_reminder:supplement.not_open_reminder || "",
  707. not_open_reminder_url:supplement.not_open_reminder_url || "",
  708. recommender_credit:supplement.recommender_credit || "",//奖励
  709. recommender_bonus:supplement.recommender_bonus || "",
  710. recommender_coupon_id:supplement.recommender_coupon_id || "",
  711. recommender_coupon_name:supplement.recommender_coupon_name || "",
  712. recommender_coupon_num:supplement.recommender_coupon_num || "",
  713. subscriber_credit:supplement.subscriber_credit || "",
  714. subscriber_bonus:supplement.subscriber_bonus || "",
  715. subscriber_coupon_id:supplement.subscriber_coupon_id || "",
  716. subscriber_coupon_name:supplement.subscriber_coupon_name || "",
  717. subscriber_coupon_num:supplement.subscriber_coupon_num || "",
  718. bonus_method:supplement.bonus_method || 1,//奖励现金方式
  719. recommender_award_title:supplement.recommender_award_title || "",// 通知
  720. recommender_award_notice:supplement.recommender_award_notice || "",
  721. subscriber_award_title:supplement.subscriber_award_title || "",
  722. subscriber_award_notice:supplement.subscriber_award_notice || "",
  723. is_show_center: poster.is_show_center==0?0: 1,
  724. design_img_show: poster.design_img_show==1?1:0,
  725. design_img: poster.design_img || '',
  726. design_img_url: poster.design_img_url || '',
  727. },
  728. coupon_word1:"",
  729. coupon_word2:"",
  730. uploadShow:false,
  731. chooseImgName:'',
  732. img_type:"",
  733. submit_url:'',
  734. showVisible:false,
  735. loading: false,
  736. rules:{
  737. keyword:{ required: true, message: '请输入关键字'}
  738. },
  739. isDecorate:IsDecorate,
  740. }
  741. },
  742. // watch: {
  743. // formResponseStatus(val) {
  744. // if(val == 1) {
  745. // this.form.response_type = 1
  746. // }
  747. // },
  748. // formResponseType(val) {
  749. // if(val == 0 && this.form.response_status == 1) {
  750. // this.form.response_type = 1;
  751. // }
  752. // }
  753. // },
  754. computed: {
  755. formResponseStatus() {
  756. return this.form.response_status;
  757. },
  758. formResponseType() {
  759. return this.form.response_type;
  760. }
  761. },
  762. created() {
  763. },
  764. mounted() {
  765. if(this.id) {
  766. this.submit_url = '{!! yzWebFullUrl('plugin.new-poster.admin.poster.edit') !!}'
  767. if(this.form.recommender_coupon_id) {
  768. this.coupon_word1 = `【ID:】`+this.form.recommender_coupon_id+``+this.form.recommender_coupon_name;
  769. }
  770. if(this.form.subscriber_coupon_id) {
  771. this.coupon_word2 = `【ID:】`+this.form.subscriber_coupon_id+``+this.form.subscriber_coupon_name;
  772. }
  773. }
  774. else {
  775. this.submit_url = '{!! yzWebFullUrl('plugin.new-poster.admin.poster.add') !!}'
  776. }
  777. this.poster_type = this.getParam('poster_type');
  778. // console.log(this.poster_type)
  779. this.setPosterView(this.data);
  780. },
  781. methods: {
  782. setPosterView(data) {
  783. data.forEach((item,index) => {
  784. let width = parseInt(item.width);
  785. let height = parseInt(item.height);
  786. let top = parseInt(item.top);
  787. let left =parseInt(item.left);
  788. if(item.type=='head') {
  789. this.rects.push(
  790. {zIndex:this.zIndex+1,type:item.type,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  791. )
  792. }
  793. else if(item.type=='invite') {
  794. let size = parseInt(item.size);
  795. this.rects.push(
  796. {zIndex:this.zIndex+1,type:item.type,color:item.color,size:size,width:width,height:height,left:left,top:top,axis:"both",active:false,minw:100,minh:20,draggable:true,resizable:true,parentLim:false,aspectRatio:false,class:""}
  797. )
  798. }
  799. else if(item.type=='mid') {
  800. let size = Number(item.size.split('p')[0]);
  801. this.rects.push(
  802. {zIndex:this.zIndex+1,type:item.type,color:item.color,size:size,width:width,height:height,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  803. )
  804. }
  805. else if(item.type=="nickname") {
  806. let size = Number(item.size.split('p')[0]);
  807. this.rects.push(
  808. {zIndex:this.zIndex+1,type:item.type,color:item.color,size:size,width:width,height:height,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  809. )
  810. }
  811. else if(item.type=="img") {
  812. this.rects.push(
  813. {zIndex:this.zIndex+1,type:item.type,src:item.src,src_url:item.src_url,width:width,height:height,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  814. )
  815. }
  816. else if(item.type=='qr') {
  817. if(this.poster_type==1 || this.poster_type==7 || this.poster_type==16) {
  818. this.rects.push(
  819. {zIndex:this.zIndex+1,type:item.type,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  820. )
  821. }
  822. else if(this.poster_type==2) {
  823. this.rects.push(
  824. {zIndex:this.zIndex+1,type:item.type,mini_link:item.mini_link,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  825. )
  826. }
  827. else if(this.poster_type==5) {
  828. this.rects.push(
  829. {zIndex:this.zIndex+1,type:item.type,h5_link:item.h5_link,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  830. )
  831. }
  832. }
  833. else if(item.type=='shopqr') {
  834. this.rects.push(
  835. {zIndex:this.zIndex+1,type:item.type,h5_link:item.h5_link,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  836. )
  837. }
  838. else if(item.type=="customer_activity") {
  839. let size = Number(item.size.split('p')[0]);
  840. this.rects.push(
  841. {zIndex:this.zIndex+1,type:item.type,color:item.color,size:size,width:width,height:height,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  842. )
  843. }
  844. else if(item.type=='customer_qr') {
  845. console.log(item.type,12);
  846. if(this.poster_type==30) {
  847. this.rects.push(
  848. {zIndex:this.zIndex+1,type:item.type,width:width,height:width,left:left,top:top,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  849. )
  850. }
  851. }
  852. this.zIndex++;
  853. })
  854. },
  855. getLabel() {
  856. let url = '{!! yzWebFullUrl('plugin.new-poster.admin.poster.getLabelList') !!}';
  857. if(this.label_word) {
  858. url = '{!! yzWebFullUrl('plugin.new-poster.admin.poster.searchLabel') !!}';
  859. }
  860. let loading = this.$loading({target:document.querySelector(".label-history"),background: 'rgba(0, 0, 0, 0)'});
  861. this.$http.post(url,{label_kwd:this.label_word}).then(function (response) {
  862. if (response.data.result){
  863. this.label_list = response.data.data.list.data;
  864. this.label_total = response.data.data.list.total;
  865. this.label_per_page = response.data.data.list.per_page;
  866. this.label_current_page = response.data.data.list.current_page;
  867. }
  868. else {
  869. this.$message({message: response.data.msg,type: 'error'});
  870. }
  871. loading.close();
  872. },function (response) {
  873. this.$message({message: response.data.msg,type: 'error'});
  874. loading.close();
  875. }
  876. );
  877. },
  878. sureAddLabel() {
  879. if(this.label_word == "") {
  880. this.$message.error("请输入标签")
  881. return;
  882. }
  883. this.$http.post('{!! yzWebFullUrl('plugin.new-poster.admin.poster.addLabel') !!}',{label:{name:this.label_word}}).then(response => {
  884. if (response.data.result) {
  885. this.$message({type: 'success',message: '操作成功!'});
  886. this.form.label = this.label_word;
  887. this.form.label_id = response.data.data.label.id;
  888. this.label_word = "";
  889. this.label_show = false;
  890. } else {
  891. this.$message({message: response.data.msg,type: 'error'});
  892. }
  893. },response => {
  894. });
  895. },
  896. handleClose() {
  897. this.form.label = "";
  898. },
  899. chooseLabel(item) {
  900. console.log(item);
  901. this.history_show = false;
  902. this.form.label = item.name;
  903. this.form.label_id = item.id;
  904. },
  905. submitForm(formName) {
  906. console.log(this.form)
  907. console.log(this.rects)
  908. let that = this;
  909. let json = {
  910. poster:{
  911. poster_type:this.poster_type,
  912. title:this.form.title,
  913. keyword:this.form.keyword,
  914. status:this.form.status,
  915. label_id:this.form.label_id,
  916. center_show:this.form.center_show,
  917. app_share_show:this.form.app_share_show,
  918. is_ago:this.form.is_ago,
  919. is_open:this.form.is_open,
  920. background:this.form.background,
  921. response_status:this.form.response_status,
  922. response_type:this.form.response_type,
  923. response_title:this.form.response_title,
  924. response_thumb:this.form.response_thumb,
  925. response_thumb_url:this.form.response_thumb_url,
  926. response_desc:this.form.response_desc,
  927. response_url:this.form.response_url,
  928. response_text:this.form.response_text,
  929. auto_sub:this.form.auto_sub,
  930. is_show_center:this.form.is_show_center,
  931. design_img_show:this.form.design_img_show,
  932. design_img:this.form.design_img,
  933. },
  934. poster_supplement:{
  935. wait_reminder:this.form.wait_reminder,
  936. disable_reminder:this.form.disable_reminder,
  937. not_open_reminder:this.form.not_open_reminder,
  938. not_open_reminder_url:this.form.not_open_reminder_url,
  939. recommender_credit:this.form.recommender_credit,
  940. recommender_bonus:this.form.recommender_bonus,
  941. recommender_coupon_id:this.form.recommender_coupon_id,
  942. recommender_coupon_name:this.form.recommender_coupon_name,
  943. recommender_coupon_num:this.form.recommender_coupon_num,
  944. subscriber_credit:this.form.subscriber_credit,
  945. subscriber_bonus:this.form.subscriber_bonus,
  946. subscriber_coupon_id:this.form.subscriber_coupon_id,
  947. subscriber_coupon_name:this.form.subscriber_coupon_name,
  948. subscriber_coupon_num:this.form.subscriber_coupon_num,
  949. bonus_method:this.form.bonus_method,
  950. recommender_award_title:this.form.recommender_award_title,
  951. recommender_award_notice:this.form.recommender_award_notice,
  952. subscriber_award_title:this.form.subscriber_award_title,
  953. subscriber_award_notice:this.form.subscriber_award_notice,
  954. },
  955. data:[],
  956. };
  957. this.rects.forEach((item,index) => {
  958. if(item.type=='nickname') {
  959. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,size:item.size+'px',color:item.color})
  960. }
  961. else if(item.type=='invite') {
  962. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,size:item.size+'px',color:item.color})
  963. }
  964. else if(item.type=='mid') {
  965. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,size:item.size+'px',color:item.color})
  966. }
  967. else if(item.type=='head') {
  968. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type})
  969. }
  970. else if(item.type=='img') {
  971. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,src:item.src,src_url:item.src_url})
  972. }
  973. else if(item.type=='shopqr') {
  974. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,h5_link:item.h5_link})
  975. }
  976. else if(item.type=='qr') {
  977. if(this.poster_type == 1 || this.poster_type == 7 || this.poster_type == 16) {
  978. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type})
  979. }
  980. else if(this.poster_type == 2) {
  981. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,mini_link:item.mini_link})
  982. }
  983. else if(this.poster_type == 5) {
  984. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,h5_link:item.h5_link})
  985. }
  986. }
  987. if(item.type=='customer_activity') {
  988. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type,size:item.size+'px',color:item.color})
  989. }
  990. else if(item.type=='customer_qr') {
  991. if(this.poster_type == 30) {
  992. json.data.push({width:item.width+'px',height:item.height+'px',top:item.top+'px',left:item.left+'px',type:item.type})
  993. }
  994. }
  995. });
  996. let json1 = {
  997. form_data : json,
  998. }
  999. if(this.id) {
  1000. json1.id = this.id
  1001. }
  1002. this.$refs[formName].validate((valid) => {
  1003. if (valid) {
  1004. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  1005. this.$http.post(this.submit_url, json1).then(response => {
  1006. if (response.data.result) {
  1007. this.$message({type: 'success',message: '操作成功!'});
  1008. this.goBack();
  1009. } else {
  1010. this.$message({message: response.data.msg,type: 'error'});
  1011. }
  1012. loading.close();
  1013. },response => {
  1014. loading.close();
  1015. });
  1016. }
  1017. else {
  1018. if(!this.form.keyword) {
  1019. this.$message.error('请输入关键字')
  1020. }
  1021. console.log('error submit!!');
  1022. return false;
  1023. }
  1024. });
  1025. },
  1026. goBack() {
  1027. history.go(-1)
  1028. },
  1029. openUpload(str,img_type) {
  1030. this.chooseImgName = str;
  1031. this.uploadShow = true;
  1032. this.img_type = img_type;
  1033. },
  1034. changeProp(val) {
  1035. if(val == true) {
  1036. this.uploadShow = false;
  1037. }
  1038. else {
  1039. this.uploadShow = true;
  1040. }
  1041. },
  1042. sureImg(name,image,image_url) {
  1043. if(this.img_type) {
  1044. this.rects[this.choosed_index][name] = image;
  1045. this.rects[this.choosed_index][name+'_url'] = image_url;
  1046. this.choosed_obj[name] = image;
  1047. this.choosed_obj[name+'_url'] = image_url;
  1048. this.$forceUpdate();
  1049. }
  1050. else {
  1051. this.form[name] = image;
  1052. this.form[name+'_url'] = image_url;
  1053. }
  1054. console.log(this.rects)
  1055. },
  1056. clearImg(str,type) {
  1057. if(type) {
  1058. this.rects[this.choosed_index][str] = "";
  1059. this.rects[this.choosed_index][str+'_url'] = "";
  1060. this.choosed_obj[str] = "";
  1061. this.choosed_obj[str+'_url'] = "";
  1062. }
  1063. else {
  1064. this.form[str] = "";
  1065. this.form[str+'_url'] = "";
  1066. }
  1067. this.$forceUpdate();
  1068. },
  1069. openCoupon(type) {
  1070. this.coupon_type = type;
  1071. this.coupon_show = true;
  1072. },
  1073. searchCoupon() {
  1074. this.$http.post('{!! yzWebFullUrl('plugin.new-poster.admin.poster.getCouponByWord') !!}',{coupon_kwd:this.coupon_word}).then(response => {
  1075. if (response.data.result) {
  1076. this.coupon_list = response.data.data.list.data;
  1077. this.coupon_total = response.data.data.list.total;
  1078. this.coupon_per_page = response.data.data.list.per_page;
  1079. this.coupon_current_page = response.data.data.list.current_page;
  1080. } else {
  1081. this.$message({message: response.data.msg,type: 'error'});
  1082. }
  1083. },response => {
  1084. });
  1085. },
  1086. chooseCoupon(row) {
  1087. if(this.coupon_type==1) {
  1088. this.form.recommender_coupon_id = row.id;
  1089. this.form.recommender_coupon_name = row.name;
  1090. this.coupon_word1 = `【ID:】`+this.form.recommender_coupon_id+``+this.form.recommender_coupon_name;
  1091. }
  1092. else if(this.coupon_type==2) {
  1093. this.form.subscriber_coupon_id = row.id;
  1094. this.form.subscriber_coupon_name = row.name;
  1095. this.coupon_word2 = `【ID:】`+this.form.subscriber_coupon_id+``+this.form.subscriber_coupon_name;
  1096. }
  1097. this.coupon_show = false;
  1098. console.log(this.form)
  1099. },
  1100. clearCoupon(type) {
  1101. if(type==1) {
  1102. this.form.recommender_coupon_id = "";
  1103. this.form.recommender_coupon_name = "";
  1104. this.coupon_word1 = "";
  1105. }
  1106. else if(type==2) {
  1107. this.form.subscriber_coupon_id = "";
  1108. this.form.subscriber_coupon_name = "";
  1109. this.coupon_word2 = "";
  1110. }
  1111. },
  1112. addEle(type) {
  1113. let is_true = false;
  1114. let choose_index = -1;
  1115. this.rects.some((item,index) => {
  1116. if(item.type == type) {
  1117. is_true = true;
  1118. choose_index = index
  1119. return true
  1120. }
  1121. })
  1122. if(is_true) {
  1123. this.rects[choose_index].active = true;
  1124. return false;
  1125. }
  1126. if(type=="nickname") {
  1127. this.rects.push(
  1128. {zIndex:this.zIndex+1,type:type,color:"#f00",size:20,width:130,height:30,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  1129. )
  1130. }
  1131. if(type=="invite") {
  1132. this.rects.push(
  1133. {zIndex:this.zIndex+1,type:type,color:"#f00",size:20,width:110,height:30,left:0,top:0,axis:"both",active:false,minw:100,minh:22,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  1134. )
  1135. }
  1136. if(type=="mid") {
  1137. this.rects.push(
  1138. {zIndex:this.zIndex+1,type:type,color:"#f00",size:20,width:54,height:30,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  1139. )
  1140. }
  1141. if(type=="img"){
  1142. this.rects.push(
  1143. {zIndex:this.zIndex+1,type:type,src:thumb_url,src_url:thumb_url,width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1144. )
  1145. }
  1146. if(type=="head") {
  1147. this.rects.push(
  1148. {zIndex:this.zIndex+1,type:type,width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1149. )
  1150. }
  1151. if(type=="qr"&&(this.poster_type==1||this.poster_type==7||this.poster_type==16)){
  1152. this.rects.push(
  1153. {zIndex:this.zIndex+1,type:type,width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1154. )
  1155. }
  1156. if(type=="qr"&&this.poster_type==2){
  1157. this.rects.push(
  1158. {zIndex:this.zIndex+1,type:type,mini_link:"/pages/index/index",width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1159. )
  1160. }
  1161. if(type=="qr"&&this.poster_type==5){
  1162. this.rects.push(
  1163. {zIndex:this.zIndex+1,type:type,h5_link:"",width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1164. )
  1165. }
  1166. if(type=="shopqr"&&this.poster_type==1){
  1167. this.rects.push(
  1168. {zIndex:this.zIndex+1,type:type,h5_link:"",width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1169. )
  1170. }
  1171. if(type=="customer_activity") {
  1172. this.rects.push(
  1173. {zIndex:this.zIndex+1,type:type,color:"#f00",size:20,width:130,height:30,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:false,class:""}
  1174. )
  1175. }
  1176. if(type=="customer_qr"&& this.poster_type== 30 ){
  1177. this.rects.push(
  1178. {zIndex:this.zIndex+1,type:type,width:100,height:100,left:0,top:0,axis:"both",active:false,minw:40,minh:40,draggable:true,resizable:true,parentLim:true,aspectRatio:true,class:""}
  1179. )
  1180. }
  1181. this.zIndex++;
  1182. },
  1183. delEle() {
  1184. console.log(this.rects);
  1185. let list = JSON.parse(JSON.stringify(this.rects));
  1186. list.splice(this.choosed_index,1);
  1187. console.log(list);
  1188. this.rects = [];
  1189. // 样式处理
  1190. setTimeout(() => {
  1191. list.forEach((item,index) => {
  1192. this.rects.push(item)
  1193. })
  1194. },10)
  1195. this.choosed_obj = {};
  1196. console.log(this.rects);
  1197. this.choosed_index = -1;
  1198. },
  1199. activateEv(index) {
  1200. console.log(index);
  1201. if(this.choosed_index!=-1) {
  1202. this.rects[this.choosed_index].active = false;
  1203. }
  1204. this.choosed_obj = this.rects[index];
  1205. this.choosed_index = index;
  1206. this.rects[index].active = true;
  1207. },
  1208. deactivateEv(index) {
  1209. console.log(index)
  1210. // this.rects[index].active = false;
  1211. // this.choosed_index!=-1;
  1212. },
  1213. changePosition(newRect, index) {
  1214. this.rects[index].top = newRect.top;
  1215. this.rects[index].left = newRect.left;
  1216. this.rects[index].width = newRect.width;
  1217. this.rects[index].height = newRect.height;
  1218. },
  1219. changeSize(newRect, index) {
  1220. this.rects[index].top = newRect.top;
  1221. this.rects[index].left = newRect.left;
  1222. this.rects[index].width = newRect.width;
  1223. this.rects[index].height = newRect.height;
  1224. },
  1225. // 添加关键词
  1226. addContent(name,ref,type) {
  1227. let words = "";
  1228. if(name=='nickname'){
  1229. words = "[会员昵称]";
  1230. }
  1231. if(name=='s_nickname'){
  1232. words = "[扫码者昵称]";
  1233. }
  1234. if(name=='credit'){
  1235. words = "[积分数量]";
  1236. }
  1237. if(name=='bonus'){
  1238. words = "[现金金额]";
  1239. }
  1240. if(name=='coupon_name'){
  1241. words = "[优惠券名称]";
  1242. }
  1243. if(name=='coupon_num'){
  1244. words = "[优惠券张数]";
  1245. }
  1246. if(name=='t_nickname'){
  1247. words = "[推荐者昵称]";
  1248. }
  1249. if(name=='shopname'){
  1250. words = "[商城名称]";
  1251. }
  1252. this.insertInputTxt(name,words,ref,type)
  1253. },
  1254. insertInputTxt(name1,words,ref,type) {
  1255. let name = "";
  1256. if(type) {
  1257. console.log(this.$refs[ref])
  1258. name = this.$refs[ref].$refs[type];
  1259. }
  1260. else {
  1261. name = this.$refs[ref].$refs.textarea;
  1262. }
  1263. var startPos = name.selectionStart;
  1264. console.log(startPos);
  1265. var endPos = name.selectionEnd;
  1266. if (startPos === undefined || endPos === undefined) return
  1267. var txt = name.value;
  1268. var result = txt.substring(0, startPos) + words + txt.substring(endPos)
  1269. name.value = result;
  1270. name.focus();
  1271. name.selectionStart = startPos + words.length;
  1272. name.selectionEnd = startPos + words.length;
  1273. console.log(name.value)
  1274. console.log(ref)
  1275. this.form[ref] = name.value;
  1276. },
  1277. addLink(name,ref,type) {
  1278. this.link_show = true;
  1279. this.link_ref = ref;
  1280. this.link_type = type
  1281. },
  1282. sureAddLink() {
  1283. let title = this.link_form.title;
  1284. let content = this.link_form.content;
  1285. let words = `<a href="`+content+`">`+title+`</a>`
  1286. this.insertInputTxt('link',words,this.link_ref,this.link_type);
  1287. this.link_show = false;
  1288. },
  1289. showLink(type,name,link_type) {
  1290. if(type=="link") {
  1291. this.chooseLink = name;
  1292. this.show = true;
  1293. }
  1294. else {
  1295. this.chooseMiniLink = name;
  1296. this.pro = true;
  1297. }
  1298. this.link_type = link_type;
  1299. },
  1300. changeProp(val) {
  1301. if(val == true) {
  1302. this.uploadShow = false;
  1303. }
  1304. else {
  1305. this.uploadShow = true;
  1306. }
  1307. },
  1308. //弹窗显示与隐藏的控制
  1309. changeLink(item){
  1310. this.show=item;
  1311. },
  1312. //当前链接的增加
  1313. parHref(child,confirm){
  1314. this.show=confirm;
  1315. // this.form.link=child;
  1316. if(this.link_type!=5) {
  1317. this.form[this.chooseLink] = child;
  1318. }
  1319. else {
  1320. this.rects[this.choosed_index]['h5_link'] = child;
  1321. this.$forceUpdate();
  1322. }
  1323. },
  1324. changeprogram(item){
  1325. this.pro=item;
  1326. },
  1327. parpro(child,confirm){
  1328. this.pro=confirm;
  1329. // this.form.prolink=child;
  1330. if(this.link_type!=2) {
  1331. this.form[this.chooseMiniLink] = child;
  1332. }
  1333. else {
  1334. this.rects[this.choosed_index]['mini_link'] = child;
  1335. this.$forceUpdate();
  1336. }
  1337. },
  1338. getParam(name) {
  1339. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  1340. var r = window.location.search.substr(1).match(reg);
  1341. if (r != null) return unescape(r[2]);
  1342. return null;
  1343. },
  1344. changeCenterShow(type) {
  1345. if(type=="other"&&this.form.center_show.indexOf(0)>=-1) {
  1346. this.form.center_show = [];
  1347. this.form.center_show.push(0);
  1348. }
  1349. else {
  1350. let arr = []
  1351. for(let i=0;i<this.form.center_show.length;i++) {
  1352. if(this.form.center_show[i]!=0) {
  1353. arr.push(this.form.center_show[i])
  1354. }
  1355. }
  1356. this.form.center_show = arr;
  1357. }
  1358. console.log(this.form.center_show)
  1359. this.$forceUpdate();
  1360. },
  1361. jumpUrl() {
  1362. window.open(CktUrl);
  1363. },
  1364. },
  1365. })
  1366. </script>
  1367. @endsection