broadcast.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. let cacheData = {
  2. }
  3. let broadcastMap = {
  4. 101: '直播中',
  5. 102: '未开始',
  6. 103: '已结束',
  7. 104: '禁播',
  8. 105: '暂停',
  9. 106: '异常',
  10. 107: '已过期'
  11. }
  12. $(function () {
  13. var types = {
  14. 0:'服饰',
  15. 1:'家居',
  16. 2:'数码',
  17. 3:'美妆',
  18. 4:'其他',
  19. }
  20. $("#jqGrid").Grid({
  21. url: '../liveRoom/getRoomList',
  22. rownumWidth:60,
  23. colModel: [{
  24. label: 'id', name: 'id', index: 'liveId', key: true, hidden: true
  25. },
  26. {
  27. label: 'liveId', name: 'liveId', index: 'liveId', hidden: true
  28. },
  29. {
  30. label: '最近开播', name: 'startTime', index: 'startTime', width: 80,formatter: function (value, col, row) {
  31. cacheData[col.rowId] = row
  32. return transDate(parseInt(value)*1000);
  33. }
  34. },
  35. {
  36. label: '直播名称', name: 'name', index: 'name', width: 80
  37. },
  38. {
  39. label: '直播分享图',align:'center', name: 'shareImgOss', index: 'shareImgOss', width: 120, formatter: function (value) {
  40. return transImg(value,100,'auto');
  41. }
  42. },
  43. {
  44. label: '房间号', name: 'roomId', index: 'roomId', width: 80
  45. },
  46. {
  47. label: '主播', name: 'anchorName', index: 'anchorName', width: 80
  48. },
  49. {
  50. label: '直播状态', name: 'liveStatus', index: 'liveStatus', width: 80, formatter (value) {
  51. return broadcastMap[value] || value
  52. }
  53. }
  54. ]
  55. });
  56. });
  57. const validateSceneUrlCheck = function (rule, value, callback){
  58. var link1 ='https://test.4dkankan.com/eShopMobile.html?m='
  59. var link2 ='https://www.4dkankan.com/eShopMobile.html?m='
  60. if (value === ''||!value) {
  61. callback(new Error('场景地址不能为空'));
  62. } else if(!~value.indexOf(link1)&&!~value.indexOf(link2)){
  63. callback(new Error('场景地址需为'+link2+'或'+link1));
  64. } else {
  65. callback();
  66. }
  67. };
  68. const validateNotNullIdCheck =function (rule, value, callback) {
  69. if (value === '' || !value) {
  70. callback(new Error(rule.name+'不能为空'));
  71. }else {
  72. callback();
  73. }
  74. };
  75. var vm = new Vue({
  76. el: '#rrapp',
  77. data: {
  78. loading:false,
  79. showList: true,
  80. title: null,
  81. broadcast: {name: '',coverImg:'',startTime:'',endTime:'',anchorName:'',anchorWechat:'', shareImg: '',feedsImg: '',screenType:0,isFeedsPublic: 0,type: 0,closeLike:1, closeGoods: 1,closeKf:0, closeComment: 1,closeReplay: 0,closeShare: 1},
  82. func:['closeComment','closeGoods'],
  83. ruleValidate: {
  84. name: [
  85. {required: true, message: '直播间标题不能为空', trigger: 'blur'}
  86. ],
  87. startTime: [
  88. {required: true, name: '直播开始时间',validator: validateNotNullIdCheck, trigger: 'change'},
  89. {required: true, name: '直播开始时间只能在十分钟后',validator: validateNotNullIdCheck, trigger: 'change'},
  90. ],
  91. endTime: [
  92. {required: true, name: '直播结束时间',validator: validateNotNullIdCheck, trigger: 'change'}
  93. ],
  94. anchorName: [
  95. {required: true, message: '主播名称不能为空', trigger: 'blur'}
  96. ],
  97. anchorWechat: [
  98. {required: true, message: '主播微信账号不能为空', trigger: 'blur'}
  99. ],
  100. shareImg: [
  101. {required: true, message: '分享卡片封面不能为空', trigger: 'blur'}
  102. ],
  103. coverImg: [
  104. {required: true, message: '直播卡片封面不能为空', trigger: 'blur'}
  105. ],
  106. feedsImg: [
  107. {required: true, message: '直播间背景墙不能为空', trigger: 'blur'}
  108. ]
  109. },
  110. q: {
  111. name: ''
  112. },
  113. coverImg:'',
  114. shareImg:'',
  115. feedsImg:'',
  116. startTime:'',
  117. endTime:'',
  118. valiImg: ''
  119. },
  120. methods: {
  121. handleRemove (file) {
  122. },
  123. query: function () {
  124. vm.reload();
  125. },
  126. add: function () {
  127. vm.showList = false;
  128. vm.title = "新增";
  129. vm.broadcast = {name: '',coverImg:'',startTime:'',endTime:'',anchorName:'',anchorWechat:'', shareImg: '',feedsImg: '',screenType:0,isFeedsPublic: 0,type: 0,closeLike:1, closeGoods: 1,closeKf:0, closeComment: 1,closeReplay: 0,closeShare: 1}
  130. },
  131. share: function (event) {
  132. eyeImage('https://res.wx.qq.com/op_res/BbVNeczA1XudfjVqCVoKgfuWe7e3aUhokktRVOqf_F0IqS6kYR--atCpVNUUC3zr');
  133. },
  134. saveOrUpdate: function (event) {
  135. var url = vm.broadcast.slideId == null ? "../liveRoom/add" : "../liveRoom/update";
  136. // 判断时间
  137. if ((new Date().getTime() + 60000 * 10) >= vm.startTime * 1000) {
  138. alert('开播时间需要在当前时间的10分钟后,并且不能在6 个月后')
  139. return
  140. }
  141. if ((vm.endTime * 1000 - vm.startTime * 1000 < 30 * 60000) || (vm.endTime * 1000 - vm.startTime * 1000 >= 86400000)) {
  142. alert('开播时间和结束时间间隔不得短于30分钟,不得超过24小时')
  143. return
  144. }
  145. let params = Object.assign({}, vm.broadcast,{
  146. startTime:vm.startTime,
  147. endTime:vm.endTime
  148. })
  149. Ajax.request({
  150. type: "POST",
  151. url: url,
  152. contentType: "application/json",
  153. params: JSON.stringify(params),
  154. successCallback: function (r) {
  155. if (r.errcode === 0) {
  156. alert('操作成功', function (index) {
  157. vm.reload();
  158. })
  159. return
  160. }
  161. const errcode = {
  162. 300002: '主播名称长度非法',
  163. 300001: '禁止创建/更新商品',
  164. 300002: '名称长度不符合规则',
  165. 300006: '图片上传失败',
  166. 300022: '此房间号不存在',
  167. 300023: '当前房间状态不允许此操作',
  168. 300028: '房间名称违规',
  169. 300029: '主播昵称违规',
  170. 300030: '主播微信号不合法',
  171. 300031: '直播间封面图不合规',
  172. 300032: '直播间分享图违规',
  173. 300034: '主播微信昵称长度不符合要求',
  174. 300035: '主播微信号不存在',
  175. 300036: '主播微信号未实名认证,请扫码进行验证',
  176. 300037: '购物直播频道封面图不合规',
  177. 300038: '未在小程序管理后台配置客服',
  178. 300039: '主播副号微信号不合法',
  179. 300040: '名称含有非限定字符(含有特殊字符)'
  180. }
  181. alert(errcode[r.errcode] || '添加失败')
  182. if (r.errcode === 300036) {
  183. vm.valiImg = r.qrcode_url
  184. }
  185. }
  186. });
  187. },
  188. handleChangeStart(val){
  189. let date = new Date(val)
  190. this.startTime = parseInt(date.getTime()/1000)
  191. },
  192. handleChangeEnd(val){
  193. let date = new Date(val)
  194. this.endTime = parseInt(date.getTime()/1000)
  195. },
  196. del: function (event) {
  197. let rowId = getSelectedRow("#jqGrid");
  198. if (rowId == null) {
  199. return;
  200. }
  201. var data = cacheData[rowId]
  202. confirm('确定要删除选中的记录?', function () {
  203. Ajax.request({
  204. type: "POST",
  205. url: "..//liveRoom/update",
  206. contentType: "application/json",
  207. params: JSON.stringify(Object.assign(data,{
  208. enable:0
  209. })),
  210. successCallback: function () {
  211. alert('操作成功', function (index) {
  212. vm.reload();
  213. });
  214. }
  215. });
  216. });
  217. },
  218. getInfo: function (id) {
  219. vm.defaultList = []
  220. Ajax.request({
  221. url: "../slideShow/getById?slideId=" + id,
  222. async: true,
  223. successCallback: function (r) {
  224. vm.carousel = r.page;
  225. }
  226. });
  227. },
  228. reload: function (event) {
  229. vm.showList = true;
  230. var page = $("#jqGrid").jqGrid('getGridParam', 'page');
  231. $("#jqGrid").jqGrid('setGridParam', {
  232. postData: {'name': vm.q.name},
  233. page: page
  234. }).trigger("reloadGrid");
  235. vm.handleReset('formValidate');
  236. },
  237. handleSuccessListPicUrl: function (res, file) {
  238. vm.brand.listPicUrl = file.response.url;
  239. vm.brand.appListPicUrl = file.response.url;
  240. },
  241. handleSuccessPicUrl: function (res, file) {
  242. vm.brand.picUrl = file.response.url;
  243. },
  244. handleSuccessAppListPicUrl: function (res, file) {
  245. vm.brand.appListPicUrl = file.response.url;
  246. },
  247. beforecoverImgUpload: function (file) {
  248. this.loading = true
  249. this.coverImg = URL.createObjectURL(file)
  250. },
  251. beforeShareImgUpload: function (file) {
  252. this.loading = true
  253. this.shareImg = URL.createObjectURL(file)
  254. },
  255. beforefeedsImgUpload: function (file) {
  256. this.loading = true
  257. this.feedsImg = URL.createObjectURL(file)
  258. },
  259. handleSuccessShareImg: function (res, file) {
  260. this.loading = false
  261. this.broadcast.shareImg = file.response.mediaId;
  262. this.broadcast.shareImgOss = file.response.ossUrl
  263. },
  264. handleSuccesscoverImg: function (res, file) {
  265. this.loading = false
  266. this.broadcast.coverImg = file.response.mediaId;
  267. this.broadcast.coverImgOss = file.response.ossUrl
  268. },
  269. handleSuccessfeedsImg: function (res, file) {
  270. this.loading = false
  271. this.broadcast.feedsImg = file.response.mediaId;
  272. this.broadcast.feedsImgOss = file.response.ossUrl
  273. },
  274. handleBefore(){
  275. this.loading = true
  276. },
  277. handleSuccessNewPicUrl: function (res, file) {
  278. vm.brand.newPicUrl = file.response.url;
  279. },
  280. handleFormatError: function (file) {
  281. this.loading = false
  282. this.$Notice.warning({
  283. title: '文件格式不正确',
  284. desc: '文件 ' + file.name + ' 格式不正确。'
  285. });
  286. },
  287. handleMaxSize: function (file) {
  288. this.loading = false
  289. this.$Notice.warning({
  290. title: '超出文件大小限制',
  291. desc: '文件 ' + file.name + ' 太大。'
  292. });
  293. },
  294. eyeImageListPicUrl: function () {
  295. var url = vm.brand.listPicUrl;
  296. eyeImage(url);
  297. },
  298. eyeImagePicUrl: function () {
  299. var url = vm.brand.picUrl;
  300. eyeImage(url);
  301. },
  302. eyeImageAppListPicUrl: function () {
  303. var url = vm.brand.appListPicUrl;
  304. eyeImage(url);
  305. },
  306. eyeImageNewPicUrl: function () {
  307. var url = vm.brand.newPicUrl;
  308. eyeImage(url);
  309. },
  310. handleSubmit: function (name) {
  311. handleSubmitValidate(this, name, function () {
  312. vm.saveOrUpdate()
  313. });
  314. },
  315. handleReset: function (name) {
  316. handleResetForm(this, name);
  317. }
  318. },
  319. mounted () {
  320. }
  321. });