special_barrage.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. {extend name="public/container"}
  2. {block name='head_top'}
  3. <style>
  4. .layui-form-item .special-label i{display: inline-block;width: 18px;height: 18px;font-size: 18px;color: #fff;}
  5. .layui-form-item .label-box p{line-height: inherit;}
  6. .m-t-5{margin-top:5px;}
  7. #app .layui-barrage-box{margin-bottom: 10px;margin-top: 10px;margin-left: 10px;border: 1px solid #0092DC;border-radius: 5px;cursor: pointer;position: relative;}
  8. #app .layui-barrage-box.border-color{border-color: #0bb20c;}
  9. #app .layui-barrage-box .del-text{position: absolute;top: 0;left: 0;background-color: rgba(0,0,0,0.5);color: #ffffff;width: 92%;text-align: center;}
  10. #app .layui-barrage-box p{padding:5px 5px; }
  11. #app .layui-empty-text{text-align: center;font-size: 18px;}
  12. #app .layui-empty-text p{padding: 10px 10px;}
  13. </style>
  14. {/block}
  15. {block name="content"}
  16. <div class="layui-fluid">
  17. <div class="layui-row layui-col-space15" id="app" v-cloak>
  18. <div class="layui-col-md12">
  19. <div class="layui-card">
  20. <div class="layui-card-header">
  21. <div style="font-weight: bold;">拼团弹幕</div>
  22. </div>
  23. <div class="layui-card-body">
  24. <div class="layui-row layui-col-space15">
  25. <div class="layui-col-md12">
  26. <form action="" class="layui-form">
  27. <div class="layui-form-item">
  28. <label class="layui-form-label">弹幕开关</label>
  29. <div class="layui-input-block">
  30. <input type="checkbox" checked="" name="open_barrage" lay-skin="switch" :value="open_barrage" lay-filter='is_show' lay-text="打开|关闭" :checked="open_barrage">
  31. </div>
  32. </div>
  33. </form>
  34. </div>
  35. <div class="layui-col-md12">
  36. <form action="" class="layui-form">
  37. <div class="layui-form-item">
  38. <label class="layui-form-label">
  39. <div>头像:</div>
  40. <div>(100*100px)</div>
  41. </label>
  42. <div class="layui-input-block">
  43. <div class="upload-image-box" v-if="avatar" @mouseenter="is_show = true" @mouseleave="is_show = false">
  44. <img :src="avatar" alt="" style="border-radius: 5px;">
  45. <div class="mask" v-show="is_show" style="display: block">
  46. <p><i class="fa fa-eye" @click="look(avatar)"></i><i class="fa fa-trash-o" @click="avatar = ''"></i></p>
  47. </div>
  48. </div>
  49. <div class="upload-image" v-show="!avatar" @click="upload(1)">
  50. <div class="fiexd"><i class="fa fa-plus"></i></div>
  51. <p>上传图片</p>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="layui-form-item">
  56. <label class="layui-form-label">昵称:</label>
  57. <div class="layui-input-block">
  58. <input type="text" name="title" style="width: 300px;" v-model="nickname" autocomplete="off" placeholder="请输入昵称" class="layui-input">
  59. </div>
  60. </div>
  61. <div class="layui-form-item">
  62. <label class="layui-form-label">排序:</label>
  63. <div class="layui-input-block">
  64. <input type="number" name="sort" style="width: 300px;" v-model="sort" autocomplete="off" class="layui-input">
  65. </div>
  66. </div>
  67. <div class="layui-form-item">
  68. <label class="layui-form-label">动作:</label>
  69. <div class="layui-input-block">
  70. <input type="radio" name="action" value="1" title="开团" v-model="action" lay-filter="action">
  71. <input type="radio" name="action" value="2" title="参团" v-model="action" lay-filter="action">
  72. </div>
  73. </div>
  74. <div class="layui-form-item">
  75. <div class="layui-input-block">
  76. <button class="layui-btn layui-btn-normal" type="button" @click="save_barrage">{{id ? '立即修改':'立即提交'}}</button>
  77. <button class="layui-btn layui-btn-primary clone" type="button" @click="empty_barrage">清空</button>
  78. </div>
  79. </div>
  80. </form>
  81. </div>
  82. <div class="layui-col-md12">
  83. <blockquote class="layui-elem-quote layui-quote-nm" style="margin: 10px;">
  84. 点击列表里面的弹幕可进行修改,取消修改请点击【清空】按钮;
  85. </blockquote>
  86. <div class="layui-row">
  87. <div class="layui-col-md1 layui-barrage-box" :class="id==item.id ? 'border-color':'' " v-for="(item,index) in barrageList" @click.stop="set_barrage(item)">
  88. <p @click.stop="del_barrage(item,index)" class="del-text"><span>删除</span></p>
  89. <img :src="item.avatar" alt="" style="width: 100%;height: 136px;">
  90. <p><span>用户名:</span>{{ item.nickname.length > 6 ? item.nickname.slice(0,5) : item.nickname }}</p>
  91. <p><span>排序:</span>{{ item.sort }}</p>
  92. <p><span>类型:</span>{{ item.action==1 ? '开团':'参团' }}</p>
  93. </div>
  94. <div class="layui-col-md12 layui-empty-text" v-if="barrageList.length <= 0">
  95. <p>暂无数据</p>
  96. </div>
  97. </div>
  98. <div class="layui-row" style="text-align: right;">
  99. <div ref="barrage_page"></div>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. <script type="text/javascript" src="{__ADMIN_PATH}js/request.js"></script>
  109. <script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
  110. <script type="text/javascript" src="{__MODULE_PATH}widget/OssUpload.js"></script>
  111. {/block}
  112. {block name='script'}
  113. <script>
  114. var open_barrage=<?=$open_barrage ? (int)$open_barrage : 0?>;
  115. require(['vue'],function(Vue) {
  116. new Vue({
  117. el: "#app",
  118. data: {
  119. avatar:'',
  120. nickname:'',
  121. sort:0,
  122. action:1,
  123. id:0,
  124. open_barrage:open_barrage,
  125. barrageList:[],
  126. loading:false,
  127. loadend:false,
  128. page:1,
  129. limit:22,
  130. is_show:false
  131. },
  132. watch:{
  133. page:function () {
  134. this.get_barrage_list();
  135. }
  136. },
  137. methods:{
  138. del_barrage:function(item,index){
  139. var that=this;
  140. layList.layer.confirm('是否删除【'+item.nickname+'】虚拟用户的弹幕?', {
  141. btn: ['删除','我在想想'] //按钮
  142. }, function(){
  143. layList.baseGet(layList.U({a:'del_barrage',q:{id:item.id}}),function () {
  144. that.get_barrage_list();
  145. layList.msg('删除成功');
  146. });
  147. }, function(){
  148. that.get_barrage_list();
  149. });
  150. },
  151. set_barrage:function(item){
  152. this.action=item.action;
  153. this.avatar=item.avatar;
  154. this.avatar.is_show=false;
  155. this.$set(this,'avatar',this.avatar);
  156. this.sort=item.sort;
  157. this.id=item.id;
  158. this.nickname=item.nickname;
  159. this.$nextTick(function () {
  160. layList.form.render('radio');
  161. })
  162. },
  163. empty_barrage:function(){
  164. if(this.id){
  165. this.avatar='';
  166. this.nickname='';
  167. this.sort=0;
  168. this.action=1;
  169. this.id=0;
  170. }else{
  171. this.avatar='';
  172. this.nickname='';
  173. this.sort=0;
  174. this.action=1;
  175. }
  176. },
  177. save_barrage:function(){
  178. var that=this;
  179. if(!this.avatar) return layList.msg('请上传虚拟用户头像');
  180. if(!this.nickname) return layList.msg('请输入虚拟用户昵称');
  181. layList.loadFFF();
  182. layList.basePost(layList.U({a:'save_barrage'}),{nickname:that.nickname,avatar:that.avatar,action:that.action,sort:that.sort,id:that.id},function (res) {
  183. layList.loadClear();
  184. if(that.id) return layList.msg('修改成功',function () {
  185. that.avatar='';
  186. that.nickname='';
  187. that.sort=0;
  188. that.action=1;
  189. that.id=0;
  190. that.$nextTick(function () {
  191. layList.form.render('radio');
  192. })
  193. });
  194. layList.layer.confirm('添加成功,是保留当前内容?', {
  195. btn: ['保留','清空'] //按钮
  196. }, function(index){
  197. that.get_barrage_list();
  198. layList.layer.close(index);
  199. }, function(){
  200. that.avatar='';
  201. that.nickname='';
  202. that.sort=0;
  203. that.action=1;
  204. that.get_barrage_list();
  205. });
  206. },function (res) {
  207. layList.loadClear();
  208. });
  209. },
  210. //删除图片
  211. delect:function(act,key,index) {
  212. var that = this;
  213. that.avatar = '';
  214. },
  215. //查看图片
  216. look:function(pic){
  217. $eb.openImage(pic);
  218. },
  219. //鼠标移入事件
  220. enter:function(){
  221. this.avatar.is_show=true;
  222. this.$set(this,'avatar',this.avatar);
  223. },
  224. //鼠标移出事件
  225. leave:function(){
  226. this.avatar.is_show=false;
  227. this.$set(this,'avatar',this.avatar);
  228. },
  229. changeIMG:function(key,value,multiple){
  230. if(multiple){
  231. var that = this;
  232. value.map(function (v) {
  233. that[key].push({pic:v,is_show:false});
  234. });
  235. this.$set(this,key,this[key]);
  236. }else{
  237. this.$set(this,key,value);
  238. }
  239. },
  240. //上传图片
  241. upload:function() {
  242. console.log(11);
  243. ossUpload.createFrame('选择头像',{fodder:'avatar'},{w:800,h:550});
  244. },
  245. get_barrage_list:function(){
  246. var that=this;
  247. if(that.loading) return;
  248. if(that.loadend) return;
  249. that.loading=true;
  250. layList.baseGet(layList.U({a:'get_barrage_list',q:{page:that.page,limit:that.limit}}),function (res){
  251. that.loading=false;
  252. that.$set(that,'barrageList',res.data.list);
  253. that.set_page(res.data.count);
  254. that.$nextTick(function () {
  255. layList.form.render('radio');
  256. })
  257. },function (res) {
  258. that.loading=false;
  259. });
  260. },
  261. set_page:function (count){
  262. var that=this;
  263. layList.laypage.render({
  264. elem: this.$refs.barrage_page,
  265. count: count,
  266. limit:this.limit,theme: '#1E9FFF',
  267. jump:function (obj,first) {
  268. that.page=obj.curr;
  269. }
  270. });
  271. }
  272. },
  273. mounted:function () {
  274. var that=this;
  275. this.$nextTick(function () {
  276. layList.form.render();
  277. });
  278. this.get_barrage_list();
  279. window.changeIMG = this.changeIMG;
  280. layList.form.on('radio(action)',function (data) {
  281. that.action=data.value;
  282. });
  283. layList.switch('is_show',function (odj,value) {
  284. if(odj.elem.checked==true){
  285. layList.baseGet(layList.Url({a:'set_barrage_show',p:{value:1,key_nime:'open_barrage'}}),function (res) {
  286. layList.msg(res.msg);
  287. });
  288. }else{
  289. layList.baseGet(layList.Url({a:'set_barrage_show',p:{value:0,key_nime:'open_barrage'}}),function (res) {
  290. layList.msg(res.msg);
  291. });
  292. }
  293. });
  294. }
  295. })
  296. })
  297. </script>
  298. {/block}