special_barrage.php 14 KB

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