qrcode.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <div class="row-content am-cf">
  2. <div class="row">
  3. <div class="am-u-sm-12 am-u-md-12 am-u-lg-12">
  4. <div class="widget am-cf">
  5. <div class="widget-body">
  6. <div class="widget-head am-cf">
  7. <div class="widget-title am-fl">分销海报设置</div>
  8. </div>
  9. <div class="tips am-margin-bottom">
  10. <div class="pre">
  11. <p> 注:可拖动头像、二维码、昵称调整位置,如修改</p>
  12. <p> 注:修改后如需生效请前往 <a href="<?= url('setting.cache/clear') ?>" target="_blank">设置-清理缓存</a>,清除临时图片
  13. </p>
  14. </div>
  15. </div>
  16. <div id="app" v-cloak class="poster-pannel am-cf am-padding-bottom-xl">
  17. <div class="pannel__left am-fl">
  18. <div id="j-preview" ref="preview" class="poster-preview">
  19. <img id="preview-backdrop" class="backdrop" :src="backdrop.src" alt="">
  20. <div id="j-qrcode" ref="qrcode" class="drag pre-qrcode" v-bind:class="qrcode.style"
  21. v-bind:style="{ width: qrcode.width + 'px', height: qrcode.width + 'px', top: qrcode.top + 'px', left: qrcode.left + 'px' }">
  22. <img src="assets/store/img/dealer/qrcode.png" alt="">
  23. </div>
  24. <div id="j-avatar" ref="avatar" v-drag class="drag pre-avatar"
  25. v-bind:class="avatar.style"
  26. v-bind:style="{ width: avatar.width + 'px', height: avatar.width + 'px', top: avatar.top + 'px', left: avatar.left + 'px' }">
  27. <img src="assets/store/img/dealer/avatar.png" alt="">
  28. </div>
  29. <div id="j-nickName" ref="nickName" class="drag pre-nickName"
  30. v-bind:style="{ fontSize: nickName.fontSize + 'px', color: nickName.color, top: nickName.top + 'px', left: nickName.left + 'px' }">
  31. <span>这里是昵称</span>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="pannel__right am-fl">
  36. <form id="my-form" class="am-form tpl-form-line-form" method="post">
  37. <div class="am-form-group">
  38. <label class="am-u-sm-3 am-u-lg-4 am-form-label form-require">海报背景图 </label>
  39. <div class="am-u-sm-8 am-u-end">
  40. <div class="am-form-file">
  41. <div class="am-form-file">
  42. <button type="button"
  43. class="j-image upload-file am-btn am-btn-secondary am-radius">
  44. <i class="am-icon-cloud-upload"></i> 选择图片
  45. </button>
  46. </div>
  47. <div class="help-block">
  48. <small>尺寸:宽750像素 高大于(等于)1200像素</small>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="am-form-group">
  54. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 头像宽度 </label>
  55. <div class="am-u-sm-9 am-u-md-8">
  56. <input type="number" min="30" class="tpl-form-input" v-model="avatar.width"
  57. required>
  58. </div>
  59. </div>
  60. <div class="am-form-group">
  61. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 头像样式 </label>
  62. <div class="am-u-sm-9 am-u-md-8">
  63. <label class="am-radio-inline">
  64. <input type="radio" value="square" data-am-ucheck
  65. v-model="avatar.style"> 正方形
  66. </label>
  67. <label class="am-radio-inline">
  68. <input type="radio" value="circle" data-am-ucheck
  69. v-model="avatar.style"> 圆形
  70. </label>
  71. </div>
  72. </div>
  73. <div class="am-form-group am-padding-top">
  74. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 昵称字体大小 </label>
  75. <div class="am-u-sm-9 am-u-md-8">
  76. <input type="number" min="12" class="tpl-form-input"
  77. v-model="nickName.fontSize" required>
  78. </div>
  79. </div>
  80. <div class="am-form-group">
  81. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 昵称字体颜色 </label>
  82. <div class="am-u-sm-9 am-u-md-8">
  83. <input class="tpl-form-input" type="color" v-model="nickName.color">
  84. </div>
  85. </div>
  86. <div class="am-form-group am-padding-top">
  87. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 小程序码宽度 </label>
  88. <div class="am-u-sm-9 am-u-md-8">
  89. <input type="number" min="50" class="tpl-form-input" v-model="qrcode.width"
  90. required>
  91. </div>
  92. </div>
  93. <div class="am-form-group">
  94. <label class="am-u-sm-3 am-u-md-4 am-form-label form-require"> 小程序码样式 </label>
  95. <div class="am-u-sm-9 am-u-md-8">
  96. <label class="am-radio-inline">
  97. <input type="radio" value="square" v-model="qrcode.style" data-am-ucheck
  98. checked> 正方形
  99. </label>
  100. <label class="am-radio-inline">
  101. <input type="radio" value="circle" v-model="qrcode.style" data-am-ucheck> 圆形
  102. </label>
  103. </div>
  104. </div>
  105. <div class="am-form-group">
  106. <div class="am-u-sm-9 am-u-sm-push-3 am-margin-top-lg">
  107. <button type="submit" class="j-submit am-btn am-btn-secondary">提交
  108. </button>
  109. </div>
  110. </div>
  111. </form>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. <!-- 文件库弹窗 -->
  120. {{include file="layouts/_template/file_library" /}}
  121. <script src="assets/common/js/vue.min.js"></script>
  122. <script>
  123. $(function () {
  124. var appVue = new Vue({
  125. el: '#app',
  126. data: <?= $data ?>,
  127. created: function () {
  128. /**
  129. * 注册拖拽事件
  130. */
  131. this.$nextTick(function () {
  132. this.dragEvent('qrcode');
  133. this.dragEvent('avatar');
  134. this.dragEvent('nickName');
  135. });
  136. },
  137. methods: {
  138. /**
  139. * 注册拖拽事件
  140. * @param ele
  141. */
  142. dragEvent: function (ele) {
  143. var _this = this
  144. , $preview = this.$refs.preview
  145. , $ele = this.$refs[ele]
  146. , l = 0
  147. , t = 0
  148. , r = $preview.offsetWidth - $ele.offsetWidth
  149. , b = $preview.offsetHeight - $ele.offsetHeight;
  150. $ele.onmousedown = function (ev) {
  151. var sentX = ev.clientX - $ele.offsetLeft;
  152. var sentY = ev.clientY - $ele.offsetTop;
  153. document.onmousemove = function (ev) {
  154. var slideLeft = ev.clientX - sentX;
  155. var slideTop = ev.clientY - sentY;
  156. slideLeft <= l && (slideLeft = l);
  157. slideLeft >= r && (slideLeft = r);
  158. slideTop <= t && (slideTop = t);
  159. slideTop >= b && (slideTop = b);
  160. _this[ele].left = slideLeft;
  161. _this[ele].top = slideTop;
  162. };
  163. document.onmouseup = function () {
  164. document.onmousemove = null;
  165. document.onmouseup = null;
  166. };
  167. return false;
  168. }
  169. }
  170. }
  171. });
  172. // 选择图片:分销中心首页
  173. $('.j-image').selectImages({
  174. multiple: false,
  175. done: function (data) {
  176. appVue.$data.backdrop.src = data[0].file_path;
  177. }
  178. });
  179. /**
  180. * 表单验证提交
  181. * @type {*}
  182. */
  183. $('#my-form').superForm({
  184. buildData: function () {
  185. return {
  186. qrcode: appVue.$data
  187. };
  188. }
  189. });
  190. });
  191. </script>