videoUpload.blade.php 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315
  1. <style>
  2. html,
  3. body {
  4. width: 100%;
  5. height: 100%;
  6. }
  7. .mark {
  8. position: fixed;
  9. top: 0;
  10. left: 0;
  11. width: 100%;
  12. height: 100%;
  13. background: rgba(0, 0, 0, 0.1);
  14. overflow: hidden;
  15. }
  16. .el-dialog__wrapper {
  17. padding: 20px;
  18. margin: 100px auto;
  19. width: 800px;
  20. height: 700px;
  21. background-color: #fff;
  22. border-radius: 5px;
  23. }
  24. .eixt {
  25. margin-bottom: 20px;
  26. width: 100%;
  27. text-align: right;
  28. cursor: pointer;
  29. font-size: 16px;
  30. color: #909399;
  31. }
  32. .top-tab {
  33. height: 40px;
  34. border-bottom: 2px solid #e4e7ed;
  35. }
  36. .tab-title {
  37. position: relative;
  38. bottom: -2px;
  39. display: inline-block;
  40. height: 100%;
  41. line-height: 40px;
  42. font-size: 14px;
  43. font-weight: 500;
  44. margin-right: 20px;
  45. cursor: pointer;
  46. }
  47. .is-active {
  48. color: #29BA9C;
  49. border-bottom: 2px solid #29BA9C;
  50. }
  51. .upload-btn {
  52. position: relative;
  53. float: right;
  54. padding: 7px 15px;
  55. background-color: #29BA9C;
  56. font-size: 12px;
  57. border-radius: 3px;
  58. color: #fff;
  59. cursor: pointer;
  60. }
  61. .upload-btn input {
  62. position: absolute;
  63. right: 0;
  64. top: 0;
  65. opacity: 0;
  66. cursor: pointer;
  67. }
  68. .fl {
  69. float: left;
  70. }
  71. .scroll-box {
  72. width: 150px;
  73. height: 475px;
  74. overflow-y: scroll;
  75. }
  76. .left-group {
  77. padding: 10px 0;
  78. }
  79. .D-gro {
  80. margin: 0;
  81. width: 148px;
  82. color: #666;
  83. font-size: 14px;
  84. white-space: nowrap;
  85. padding: 3px 0 3px 0px;
  86. cursor: pointer;
  87. }
  88. /*滚动条整体样式*/
  89. .scroll-box::-webkit-scrollbar {
  90. width: 2px;
  91. }
  92. /*滚动条滑块*/
  93. .scroll-box::-webkit-scrollbar-thumb {
  94. border-radius: 30px;
  95. background: #29BA9C;
  96. }
  97. /*滚动条轨道*/
  98. .scroll-box::-webkit-scrollbar-track {
  99. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0);
  100. border-radius: 30px;
  101. background: #f4f4f5;
  102. }
  103. .text-bg {
  104. background: #29BA9C;
  105. color: #fff;
  106. }
  107. .right {
  108. width: 610px;
  109. height: 475px;
  110. }
  111. .fr {
  112. float: right;
  113. }
  114. .img-source {
  115. position: relative;
  116. margin: 10px 0 0 10px;
  117. width: 290px;
  118. height: 110px;
  119. border: 1px solid #ebebeb;
  120. /* background-color: pink; */
  121. }
  122. .img-source img {
  123. width: 100%;
  124. height: 100%;;
  125. }
  126. img {
  127. border: 0;
  128. }
  129. .img-source p {
  130. margin-top: 15px;
  131. text-align: center;
  132. padding: 0 5px;
  133. width: 100%;
  134. text-overflow: ellipsis;
  135. white-space: nowrap;
  136. vertical-align: middle;
  137. overflow: hidden;
  138. }
  139. .img-mark {
  140. position: absolute;
  141. /* display: none; */
  142. visibility:hidden;
  143. width: 100%;
  144. height: 110px;
  145. top: 0px;
  146. left: 0px;
  147. background: rgba(41, 186, 156, 0.3);
  148. border: 1px solid rgb(41, 186, 156);
  149. }
  150. .img-source:hover .img-mark {
  151. visibility: visible;
  152. }
  153. .img-mark input {
  154. margin-left: 5px;
  155. }
  156. input[type="checkbox"] {
  157. zoom: 120%;
  158. }
  159. .img-source .sle-img {
  160. position: absolute;
  161. top: 5px;
  162. left: 5px;
  163. }
  164. .sel-checkbox {
  165. margin-left: 5px;
  166. }
  167. .foot {
  168. position: relative;
  169. margin-top: 15px;
  170. }
  171. .newdialog {
  172. padding: 10px;
  173. position: absolute;
  174. display: none;
  175. background-color: #fff;
  176. z-index: 2000;
  177. width: 230px;
  178. left: -10px;
  179. top: -136px;
  180. border-radius: 4px;
  181. border: 1px solid #ebebeb;
  182. }
  183. .clearfix::after {
  184. content: '';
  185. display: block;
  186. clear: both;
  187. }
  188. .newgroup {
  189. color: rgb(64, 158, 255);
  190. cursor: pointer;
  191. font-size: 14px;
  192. }
  193. .number {
  194. margin: 0 5px;
  195. background-color: #f4f4f5;
  196. color: #666;
  197. min-width: 30px;
  198. border-radius: 2px;
  199. }
  200. button {
  201. padding: 0;
  202. border: none;
  203. }
  204. .page,
  205. .btn-prev,
  206. .btn-next {
  207. display: inline-block;
  208. margin: 0 3px;
  209. width: 30px;
  210. height: 30px;
  211. line-height: 30px;
  212. font-size: 13px;
  213. text-align: center;
  214. color: #666;
  215. border-radius: 4px;
  216. background-color: #f4f4f5;
  217. cursor: pointer;
  218. }
  219. .btn-prev,
  220. .btn-next {
  221. font-weight: bold;
  222. border-radius: 4px;
  223. font-size: 16px;
  224. cursor: pointer!important;
  225. }
  226. .page-active {
  227. background-color: #29BA9C;
  228. color: #FFF;
  229. }
  230. .foot-btn {
  231. position: absolute;
  232. margin-top: 15px;
  233. font-size: 14px;
  234. }
  235. .bule-text {
  236. color: rgb(64, 158, 255);
  237. }
  238. .sure-cancel {
  239. margin-left: 180px;
  240. }
  241. .footbtn {
  242. width: 100px;
  243. height: 40px;
  244. border-radius: 4px;
  245. }
  246. .srue {
  247. margin-right: 20px;
  248. color: #fff;
  249. background-color: #29ba9c;
  250. }
  251. .triangle {
  252. position: absolute;
  253. left: 15%;
  254. bottom: -16px;
  255. width: 0;
  256. height: 0;
  257. border-width: 8px;
  258. border-style: solid;
  259. border-color: #fff transparent transparent transparent;
  260. }
  261. .please-inp {
  262. margin-bottom: 10px;
  263. color: #666;
  264. font-size: 14px;
  265. }
  266. .group-inp {
  267. width: 100%;
  268. height: 30px;
  269. border: 1px solid #DCDFE6;
  270. }
  271. .dio-btn {
  272. margin-top: 15px;
  273. text-align: center;
  274. }
  275. .new-group {
  276. width: 50px;
  277. height: 30px;
  278. margin: 0 10px;
  279. border-radius: 4px;
  280. }
  281. .new-group-sure {
  282. background-color: #54c8b0;
  283. color: #fff;
  284. }
  285. .new-group-cancel {
  286. border: 1px solid #DCDFE6;
  287. color: #666;
  288. }
  289. #sel-img {
  290. display: block;
  291. }
  292. #collect-img {
  293. display: none;
  294. }
  295. .new-img {
  296. margin-top: 20px;
  297. width: 150px;
  298. height: 150px;
  299. line-height: 150px;
  300. text-align: center;
  301. color: #999;
  302. line-height: 150px;
  303. text-align: center;
  304. margin: 20px auto;
  305. }
  306. .new-img img {
  307. width: 100%;
  308. height: 100%;
  309. display: block;
  310. border: none;
  311. }
  312. .newlink-box {
  313. margin-top: 50px;
  314. margin-bottom: 270px;
  315. text-align: center;
  316. }
  317. .netlink {
  318. padding: 0 10px;
  319. width: 450px;
  320. height: 40px;
  321. border-radius: 4px;
  322. border: 1px solid #DCDFE6;
  323. }
  324. .conversion {
  325. text-align: center;
  326. }
  327. .conversion-btn {
  328. margin: 30px auto;
  329. width: 100px;
  330. display: inline-block;
  331. cursor: pointer;
  332. background: #FFF;
  333. border: 1px solid #DCDFE6;
  334. color: #666;
  335. text-align: center;
  336. box-sizing: border-box;
  337. padding: 12px 20px;
  338. font-size: 14px;
  339. border-radius: 4px;
  340. }
  341. /* 提示信息 */
  342. .success-tip {
  343. position: fixed;
  344. left: 50%;
  345. top: 60px;
  346. transform: translate(-50%);
  347. padding: 10px;
  348. background-color: #f0f9eb;
  349. border-radius: 10px;
  350. color: #67c23a;
  351. font-size: 14px;
  352. display: none;
  353. }
  354. #none-data {
  355. margin-top: 10px;
  356. width: 100%;
  357. text-align: center;
  358. }
  359. #pageNum {
  360. display: inline-block;
  361. }
  362. .shows {
  363. visibility: visible;
  364. }
  365. .nones {
  366. visibility: hidden;
  367. }
  368. .paginations {
  369. font-size: 0;
  370. text-align: center;
  371. }
  372. .paginations .page-li {
  373. display: inline-block;
  374. font-size: 15px;
  375. line-height: 1;
  376. -ms-user-select: none;
  377. -moz-user-select: none;
  378. -webkit-user-select: none;
  379. user-select: none;
  380. }
  381. .paginations .page-li.page-active {
  382. cursor: default;
  383. color: #fff;
  384. border-color: #29BA9C;
  385. background-color: #29BA9C;
  386. }
  387. .paginations .page-li.number-ellipsis {
  388. border: none;
  389. cursor: default;
  390. }
  391. .paginations .page-number {
  392. margin: 0 5px;
  393. padding: 5px 12px;
  394. text-align: center;
  395. border-radius: 2px;
  396. background-color: #f4f4f5;
  397. cursor: pointer;
  398. }
  399. .paginations .page-prev {
  400. padding: 5px 12px;
  401. margin-right: 8px;
  402. background-color: #f4f4f5;
  403. border-radius: 2px;
  404. cursor: pointer;
  405. }
  406. .paginations .page-next {
  407. padding: 5px 12px;
  408. margin-left: 8px;
  409. background-color: #f4f4f5;
  410. border-radius: 2px;
  411. cursor: pointer;
  412. }
  413. .paginations .number-ellipsis {
  414. display: inline-block;
  415. font-size: 15px;
  416. padding: 8px 14px;
  417. }
  418. .paginations .number-ellipsis.page-hidden {
  419. display: none;
  420. }
  421. #page-go {
  422. margin-top: 10px;
  423. text-align: center;
  424. }
  425. .video-box {
  426. position: absolute;
  427. top: 0;
  428. left: 0;
  429. width: 160px;
  430. height: 110px;
  431. }
  432. .right-text {
  433. position: absolute;
  434. top: 17px;
  435. right: 0;
  436. color: #666;
  437. }
  438. .time {
  439. position: absolute;
  440. padding: 2px 5px;
  441. background-color: rgba(0, 0, 0, 0.5);
  442. border-radius: 10px;
  443. bottom: 10px;
  444. left: 10px;
  445. color: #fff;
  446. }
  447. </style>
  448. <div class="mark" id="mark-box3">
  449. <div class="el-dialog__wrapper" id="img-dialog3" style="display: block;">
  450. <!-- 右上角的X -->
  451. <div class="eixt">X</div>
  452. <!-- 顶部切换项 -->
  453. <div class="top-tab">
  454. <span class="tab-title is-active" onclick="handlSelect()" id="sel-img-btn">选取视频</span>
  455. <span class="tab-title" onclick="newWorkImg()" id="net-img3-btn">提取网络视频</span>
  456. <div class="upload-btn">点击上传<input type="file" title="" id="uploadfle" /></div>
  457. </div>
  458. <!-- 选取视频start -->
  459. <div id="sel-img">
  460. <div style="height: 475px;" class="clearfix">
  461. <div class="left fl scroll-box">
  462. <div class="left-group fl bor-right" id="group-item">
  463. </div>
  464. </div>
  465. <div class="right fr" id="imgList">
  466. </div>
  467. </div>
  468. </div>
  469. <!-- 选取视频end -->
  470. <div>
  471. <div class="foot clearfix" id="foot-box">
  472. <span class="newgroup fl" onclick="newgroup()">新建分组</span>
  473. <!-- 新建分组弹窗 -->
  474. <div class="newdialog" id="new-dialog">
  475. <p class="please-inp">请输入分组名</p>
  476. <input class="group-inp" id="new-group" type="text" >
  477. <div class="dio-btn">
  478. <button class="new-group new-group-sure" onclick="srueGroup()">确定</button>
  479. <button class="new-group new-group-cancel" onclick="cancleGroup()">取消</button>
  480. </div>
  481. <div class="triangle"></div>
  482. </div>
  483. <div class="fr">
  484. <div class="page-box">
  485. <!-- <ul class="clearfix paginations">
  486. <li class="page-li page-prev no-prev">&lt;</li>
  487. <li class="page-li page-number page-active" data-number="1">1</li>
  488. <li class="page-li number-ellipsis ellipsis-head" style="display: none;">...</li><li class="page-li page-number " data-number="2">2</li><li class="page-li page-number " data-number="3">3</li><li class="page-li page-number " data-number="4">4</li><li class="page-li page-number " data-number="5">5</li><li class="page-li page-number " data-number="6">6</li>
  489. <li class="page-li number-ellipsis ellipsis-tail">...</li>
  490. <li class="page-li page-number" data-number="100">100</li>
  491. <li class="page-li page-next">&gt;</li>
  492. </ul> -->
  493. </div>
  494. </div>
  495. </div>
  496. </div>
  497. <!-- 提取网络视频start -->
  498. <div id="collect-img">
  499. <!-- <div class="new-img">
  500. <img src="" alt="" title="" id="show-net-img3">
  501. </div> -->
  502. <!-- <p style="text-align: center; color:#666">输入视频链接</p> -->
  503. <div class="newlink-box">
  504. <input type="text" class="netlink" id="net-img3" placeholder="视频链接" onfocus="onfocusClick()" onblur="onblurClick()">
  505. </div>
  506. <!-- <div class="conversion">
  507. <button class="conversion-btn" onclick="conversion()">转化</button>
  508. </div> -->
  509. </div>
  510. <div class="foot-btn clearfix">
  511. <div class="sel-num fl" id="selNum">
  512. <span>已选择</span>
  513. <span class="bule-text" id="startNum">0</span>
  514. <span class="bule-text">/</span>
  515. <span class="bule-text" id="totalNum">100</span>
  516. <span class="bule-text">个视频</span>
  517. </div>
  518. <div class="sure-cancel fl">
  519. <button class="footbtn srue" onclick="determine()">确定</button>
  520. <button class="footbtn cancel" onclick="cancle()">取消</button>
  521. </div>
  522. </div>
  523. </div>
  524. </div>
  525. <script>
  526. var imgDialog = document.getElementById('img-dialog3') //获取整个弹窗的id
  527. var selImg = document.getElementById('sel-img')
  528. var collectImg = document.getElementById('collect-img')
  529. var selImgBtn = document.getElementById('sel-img-btn')
  530. var netImgBtn = document.getElementById('net-img3-btn')
  531. var newDialog = document.getElementById('new-dialog')
  532. var netlink = document.getElementsByClassName('netlink')[0]
  533. var footBox = document.getElementById('foot-box')
  534. var startNum = document.getElementById('startNum')
  535. var totalNum = document.getElementById('totalNum')
  536. var groupData = [];//分组列表的数据
  537. var newName = '';//新建分组的名字
  538. var netIMgLink = '';//网络的视频链接
  539. var groupId = '';//分组id
  540. var imgList = []
  541. var total = null
  542. var tabTag = ''
  543. var videoLink = ''
  544. function selcetImg(str) {
  545. imgDialog.css("display", "block");
  546. }
  547. function getGroupList() {
  548. var str = ''
  549. $.ajax({
  550. url: "{!! yzWebUrl("setting.media.tags") !!}", //请求接口的地址
  551. type: "POST", //请求的方法GET/POST
  552. data: { //需要传递的参数
  553. source_type: 3,
  554. },
  555. async : false, //将ajax请求设置为同步请求
  556. success: function (res) { //请求成功后的操作
  557. if(res.result == 1) {
  558. groupData = res.data
  559. groupData.forEach((item,index) => {
  560. str += `<p class="D-gro" ids=${item.id === ''?'all':item.id}>${item.title}(<span id=${item.id === ''?'all':item.id}>${item.source_count}</span>)</p>`
  561. })
  562. $('#group-item').html(str);
  563. $('#group-item').find('p:first').addClass('text-bg');//选取第一个默认元素添加背景
  564. }
  565. },
  566. error: function (err) { //请求失败后的操作
  567. console.log(err); //请求失败在控制台输出22
  568. }
  569. })
  570. }
  571. getGroupList()
  572. // 获取新建分组的输入框的内容
  573. function groupInp(val) {
  574. console.log(val)
  575. }
  576. function handChecked(checkbox) {
  577. console.log(checkbox.checked)
  578. }
  579. function handleGroup() {
  580. console.log(this);
  581. }
  582. function handlSelect() {
  583. selImg.style.display = 'block';
  584. collectImg.style.display = 'none';
  585. selImgBtn.classList.add("is-active")
  586. netImgBtn.classList.remove("is-active");
  587. imgDialog.style.height = "700px"
  588. footBox.style.display="block"
  589. tabTag = ''
  590. }
  591. function newWorkImg() {
  592. selImg.style.display = 'none';
  593. collectImg.style.display = 'block';
  594. netImgBtn.classList.add("is-active")
  595. selImgBtn.classList.remove("is-active");
  596. imgDialog.style.height = "560px"
  597. footBox.style.display="none"
  598. tabTag = '1'
  599. }
  600. function newgroup() {
  601. newDialog.style.display = "block"
  602. }
  603. //确定新建分组
  604. function srueGroup() {
  605. newName=document.getElementById("new-group").value;
  606. if(newName == '') {
  607. alert('分组名不能为空!')
  608. return
  609. }
  610. $.ajax({
  611. url: "{!! yzWebUrl("setting.media.addTag") !!}", //请求接口的地址
  612. type: "POST", //请求的方法GET/POST
  613. data: { //需要传递的参数
  614. source_type:3,
  615. title:newName
  616. },
  617. async : false, //将ajax请求设置为同步请求
  618. success: function (res) { //请求成功后的操作
  619. console.log(res)
  620. if(res.result == 1) {
  621. alert('新建分组成功')
  622. getGroupList()
  623. getImgList(1,'')
  624. newDialog.style.display = "none"
  625. document.getElementById("new-group").value="";
  626. startNum.innerHTML = '0'
  627. imgObj = {}
  628. imgArr =[]
  629. }
  630. },
  631. error: function (err) { //请求失败后的操作
  632. console.log(err); //请求失败在控制台输出22
  633. }
  634. })
  635. }
  636. function cancleGroup() {
  637. newDialog.style.display = "none"
  638. document.getElementById("new-group").value="";
  639. }
  640. function onfocusClick() {
  641. console.log('聚焦了')
  642. netlink.style.border = '1px solid #29ba9c'
  643. tabTag = '1'
  644. }
  645. function onblurClick() {
  646. netlink.style.border = '1px solid #DCDFE6'
  647. }
  648. function getImgList(page,tag_id) {//默认请求全部视频
  649. $.ajax({
  650. url: "{!! yzWebUrl("upload.uploadV3.getVideo") !!}",
  651. type: "POST",
  652. data: {
  653. page:page,
  654. pageSize: 8,
  655. tag_id:tag_id,
  656. },
  657. async : false,
  658. success: function (res) {
  659. if(res.result == 1) {
  660. imgList = res.data.data
  661. total = res.data.total
  662. let str = ''
  663. imgList.forEach((item,index) => {
  664. str += ` <div class="img-source fl" id="sel-input">
  665. <video src=${item.url} class="video-box" />
  666. <div class="right-text">
  667. <p>${item.filename}</p>
  668. <p>${item.created_at}</p>
  669. </div>
  670. <span class="time">${Math.floor(item.timeline / 60)}:${Math.floor(item.timeline % 60) >= 10?Math.floor(item.timeline % 60):'0' + Math.floor(item.timeline % 60)}</span>
  671. <div class="img-mark" id=${item.id}>
  672. <input type="checkbox" class="sel-checkbox" srcs=${item.url} id=${item.id} attachments=${item.attachment} />
  673. </div>
  674. </div>`
  675. })
  676. if(imgList.length <= 0) {
  677. str = `<div id="none-data">暂无数据</div>`
  678. }
  679. $('#imgList').html(str)
  680. }
  681. },
  682. error: function (err) {
  683. console.log(err);
  684. }
  685. })
  686. };
  687. // 点击上传
  688. var file = document.getElementById('uploadfle')
  689. file.onchange = function () {
  690. var fileData = this.files[0]; //获取到一个FileList对象中的第一个文件( File 对象),是我们上传的文件
  691. let fd = new FormData();
  692. fd.append("file", fileData);
  693. $.ajax({
  694. url: "{!! yzWebUrl("upload.uploadV3.upload") !!}"+'&upload_type=video'+"&tag_id=" + groupId,
  695. type: "POST",
  696. contentType: false,
  697. // 告诉jQuery不要去设置Content-Type请求头
  698. processData: false,
  699. // 告诉jQuery不要去处理发送的数据
  700. data:fd ,
  701. async : false,
  702. success: function (res) {
  703. console.log(res)
  704. if(res.result == 1) {
  705. alert('视频上传成功!')
  706. getImgList(1,groupId)
  707. console.log(imgList,'11111111111111')
  708. imgArr = []
  709. imgObj ={}
  710. let str = ''
  711. imgList.forEach((item,index) => {
  712. str += `<div class="img-source fl" id="sel-input">
  713. <video src=${item.url} class="video-box" />
  714. <div class="right-text">
  715. <p>${item.filename}</p>
  716. <p>${item.created_at}</p>
  717. </div>
  718. <span class="time">${Math.floor(item.timeline / 60)}:${Math.floor(item.timeline % 60) >= 10?Math.floor(item.timeline % 60):'0' + Math.floor(item.timeline % 60)}</span>
  719. <div class="img-mark" id=${item.id}>
  720. <input type="checkbox" class="sel-checkbox" srcs=${item.url} id=${item.id} attachments=${item.attachment} />
  721. </div></div>`
  722. })
  723. $('#imgList').html(str)
  724. if(total == 0) {
  725. totalPage = 1;
  726. } else {
  727. var totalPage = Math.ceil(total/12)
  728. }
  729. var slp = new SimplePagination3(totalPage)
  730. slp.init({
  731. container: '.page-box',
  732. // maxShowBtnCount: 3,
  733. onPageChange: state => {
  734. page = state.pageNumber
  735. console.log(page)
  736. getImgList(page,groupId)
  737. startNum.innerHTML = '0'
  738. imgObj = {}
  739. imgArr =[]
  740. }
  741. })
  742. totalNum.innerHTML = total
  743. slectImg()
  744. // 上传成功默认选中
  745. console.log(document.getElementsByClassName('sel-checkbox')[0])
  746. var defaultSel = document.getElementsByClassName('sel-checkbox')[0]
  747. defaultSel.checked = true
  748. defaultSel.parentNode.classList.add('shows')
  749. // 可以勾选多个的时候执行
  750. if(tag== "more") {
  751. ids = defaultSel.attributes["id"].value
  752. let path = defaultSel.attributes["attachments"].value
  753. let paths = defaultSel.attributes["srcs"].value
  754. imgArr.push({"id":ids,"url":paths,"attachment":path})
  755. startNum.innerHTML = imgArr.length
  756. }
  757. // 只能勾选单个的时候执行
  758. if(tag== "single") {
  759. id = defaultSel.attributes["id"].value
  760. let path = defaultSel.attributes["attachments"].value
  761. let paths = defaultSel.attributes["srcs"].value
  762. imgObj.id = id
  763. imgObj.url = paths
  764. imgObj.attachment = path
  765. startNum.innerHTML = '1'
  766. }
  767. // let gid = groupId
  768. // var newNum = document.getElementById(gid)
  769. // console.log(document.getElementById(gid),'000000000000000000')
  770. let gid = getEle()
  771. console.log(gid)
  772. if(gid == '') {
  773. gid ='all'
  774. }
  775. var newNum = document.getElementById(gid)
  776. let num = Number(newNum.innerHTML)
  777. num += 1
  778. newNum.innerHTML = num
  779. file.value = ''
  780. }else {
  781. alert(res.msg)
  782. }
  783. },
  784. error: function (err) {
  785. console.log(err);
  786. }
  787. })
  788. }
  789. function getEle() {
  790. // console.log(groupId,'ididiidididididi')
  791. return groupId
  792. }
  793. function prevClick() {
  794. console.log(page)
  795. }
  796. function nextClick() {
  797. console.log(page)
  798. }
  799. (function() {
  800. getImgList(1,'');
  801. })();
  802. function getNteImg(url,tag_id) {
  803. $.ajax({
  804. url: "{!! yzWebUrl("upload.uploadV3.fetch") !!}", //请求接口的地址
  805. type: "POST", //请求的方法GET/POST
  806. data: { //需要传递的参数
  807. url:url,
  808. tag_id:tag_id
  809. },
  810. async : false, //将ajax请求设置为同步请求
  811. success: function (res) { //请求成功后的操作
  812. console.log(res)
  813. if(res.result == 1) {
  814. }
  815. },
  816. error: function (err) { //请求失败后的操作
  817. console.log(err); //请求失败在控制台输出22
  818. }
  819. })
  820. }
  821. function conversion() {
  822. netIMgLink = document.getElementById("net-img3").value;
  823. console.log(netIMgLink)
  824. var showNetImg = document.getElementById('show-net-img3')
  825. showNetImg.src = netIMgLink
  826. getNteImg(netIMgLink,0)//转入未分组,未分组的id是0
  827. document.getElementById("net-img3").value = '';
  828. alert('视频提取到未分组')
  829. }
  830. var selCheckbox = document.getElementsByClassName('sel-checkbox')
  831. function checkboxOnclick() {
  832. }
  833. var checkbox = document.getElementsByClassName('sel-checkbox')
  834. var imgMark = document.getElementsByClassName('img-mark')
  835. var imgObj = {}
  836. var imgArr = []
  837. var tag = 'single';//单个选择的标识
  838. // var tag = 'more';//多个选择的标识
  839. var id = null
  840. var ids = null
  841. function slectImg() {
  842. imgObj ={}
  843. if(tag == 'single' ) {
  844. for(var i = 0;i < checkbox.length;i++) {
  845. checkbox[i].onchange = function(e) {
  846. let checkedStatus = this.checked;
  847. if(checkedStatus == true) {
  848. id = this.attributes["id"].value
  849. var img = document.getElementById(id)
  850. img.classList.add("shows");
  851. let path = this.attributes["attachments"].value
  852. let paths = this.attributes["srcs"].value
  853. imgObj.id = id
  854. imgObj.url = paths
  855. imgObj.attachment = path
  856. startNum.innerHTML = '1'
  857. } else {
  858. imgObj ={}
  859. imgCount = 0
  860. var img = document.getElementById(id)
  861. img.classList.remove("shows");
  862. startNum.innerHTML = '0'
  863. }
  864. for(var i = 0;i < checkbox.length;i++) {
  865. checkbox[i].checked = false
  866. checkbox[i].parentNode.classList.remove("shows")
  867. if(id == checkbox[i].id && checkedStatus == true) {
  868. checkbox[i].checked = true
  869. var img = document.getElementById(id)
  870. img.classList.add("shows");
  871. }
  872. }
  873. }
  874. }
  875. }
  876. if(tag == 'more') {
  877. for(var i = 0;i < checkbox.length;i++) {
  878. checkbox[i].onchange = function(e) {
  879. let checkedStatus = this.checked;
  880. if(checkedStatus == true) {
  881. id = this.attributes["id"].value
  882. var img = document.getElementById(id)
  883. img.classList.add("shows");
  884. let path = this.attributes["attachments"].value
  885. let paths = this.attributes["srcs"].value
  886. imgArr.push({"id":id,"url":paths,"attachment":path})
  887. console.log(imgArr,'执行了吗')
  888. startNum.innerHTML = imgArr.length
  889. } else {
  890. ids = this.attributes["id"].value
  891. imgArr.forEach((item,index) => {
  892. if(item.id == ids) {
  893. imgArr.splice(index,1)
  894. }
  895. })
  896. var img = document.getElementById(ids)
  897. img.classList.remove("shows");
  898. startNum.innerHTML = imgArr.length
  899. }
  900. }
  901. }
  902. }
  903. }
  904. // (function() {
  905. slectImg()
  906. // })();
  907. class SimplePagination3 {
  908. constructor(totalPageCount) {
  909. if (!totalPageCount) return
  910. this.state = {
  911. pageNumber: 1,
  912. totalPageCount
  913. }
  914. }
  915. init(paramsObj) {
  916. let state = this.state
  917. state.container = paramsObj.container || 'body'
  918. state.maxShowBtnCount = paramsObj.maxShowBtnCount || 5
  919. state.pCName = paramsObj.pCName || 'page-li',
  920. state.activeCName = paramsObj.activeCName || 'page-active',
  921. state.dataNumberAttr = paramsObj.dataNumberAttr || 'data-number',
  922. state.prevCName = paramsObj.prevCName || 'page-prev',
  923. state.nextCName = paramsObj.nextCName || 'page-next',
  924. state.disbalePrevCName = paramsObj.disbalePrevCName || 'no-prev',
  925. state.disbaleNextCName = paramsObj.disbaleNextCName || 'no-next',
  926. state.pageNumberCName = paramsObj.pageNumberCName || 'page-number'
  927. state.swEvent = paramsObj.swEvent || 'click'
  928. state.onPageChange = paramsObj.onPageChange
  929. state.totalPageCount > state.maxShowBtnCount + 2 && (state.activePosition = Math.ceil(state.maxShowBtnCount / 2))
  930. this.renderPageDOM()
  931. }
  932. switchPage() {
  933. let state = this.state
  934. let pCNameList = this.selectorEle('.' + state.pCName, true)
  935. let pageNumber
  936. pCNameList.forEach(item => {
  937. item.addEventListener(state.swEvent, e => {
  938. const currentPageEle = e.target
  939. if (this.hasClass(currentPageEle, state.activeCName)) return
  940. let dataNumberAttr = currentPageEle.getAttribute(state.dataNumberAttr)
  941. if (dataNumberAttr) {
  942. // 点击 数字 按钮
  943. pageNumber = +dataNumberAttr
  944. } else if (this.hasClass(currentPageEle, state.prevCName)) {
  945. // 点击 上一页 按钮
  946. state.pageNumber > 1 && (pageNumber = state.pageNumber - 1)
  947. } else if (this.hasClass(currentPageEle, state.nextCName)) {
  948. // 点击 下一页 按钮
  949. state.pageNumber < state.totalPageCount && (pageNumber = state.pageNumber + 1)
  950. }
  951. pageNumber && this.gotoPage(pageNumber)
  952. })
  953. })
  954. }
  955. gotoPage(pageNumber) {
  956. let state = this.state
  957. let evaNumberLi = this.selectorEle('.' + state.pageNumberCName, true)
  958. let len = evaNumberLi.length
  959. if (!len || this.isIllegal(pageNumber)) return
  960. // 清除 active 样式
  961. this.removeClass(this.selectorEle(`.${state.pCName}.${state.activeCName}`), state.activeCName)
  962. if (state.activePosition) {
  963. let rEllipseSign = state.totalPageCount - (state.maxShowBtnCount - state.activePosition) - 1
  964. // 左边不需要出现省略符号占位
  965. if (pageNumber <= state.maxShowBtnCount && (pageNumber < rEllipseSign)) {
  966. if (+evaNumberLi[1].getAttribute(state.dataNumberAttr) > 2) {
  967. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  968. evaNumberLi[i].innerText = i + 1
  969. evaNumberLi[i].setAttribute(state.dataNumberAttr, i + 1)
  970. }
  971. }
  972. this.hiddenEllipse('.ellipsis-head')
  973. this.hiddenEllipse('.ellipsis-tail', false)
  974. this.addClass(evaNumberLi[pageNumber - 1], state.activeCName)
  975. }
  976. // 两边都需要出现省略符号占位
  977. if (pageNumber > state.maxShowBtnCount && pageNumber < rEllipseSign) {
  978. this.hiddenEllipse('.ellipsis-head', pageNumber === 2 && state.maxShowBtnCount === 1)
  979. this.hiddenEllipse('.ellipsis-tail', false)
  980. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  981. evaNumberLi[i].innerText = pageNumber + (i - state.activePosition)
  982. evaNumberLi[i].setAttribute(state.dataNumberAttr, pageNumber + (i - state.activePosition))
  983. }
  984. this.addClass(evaNumberLi[state.activePosition], state.activeCName)
  985. }
  986. // 右边不需要出现省略符号占位
  987. if (pageNumber >= rEllipseSign) {
  988. this.hiddenEllipse('.ellipsis-tail')
  989. this.hiddenEllipse('.ellipsis-head', false)
  990. if (+evaNumberLi[len - 2].getAttribute(state.dataNumberAttr) < state.totalPageCount - 1) {
  991. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  992. evaNumberLi[i].innerText = state.totalPageCount - (state.maxShowBtnCount - i) - 1
  993. evaNumberLi[i].setAttribute(state.dataNumberAttr, state.totalPageCount - (state.maxShowBtnCount - i) - 1)
  994. }
  995. }
  996. this.addClass(evaNumberLi[(state.maxShowBtnCount + 1) - (state.totalPageCount - pageNumber)], state.activeCName)
  997. }
  998. } else {
  999. // 不需要省略符号占位
  1000. this.addClass(evaNumberLi[pageNumber - 1], state.activeCName)
  1001. }
  1002. state.pageNumber = pageNumber
  1003. state.onPageChange && state.onPageChange(state)
  1004. // 判断 上一页 下一页 是否可使用
  1005. this.switchPrevNextAble()
  1006. }
  1007. switchPrevNextAble() {
  1008. let state = this.state
  1009. let prevBtn = this.selectorEle('.' + state.prevCName)
  1010. let nextBtn = this.selectorEle('.' + state.nextCName)
  1011. // 当前页已经是第一页,则禁止 上一页 按钮的可用性
  1012. state.pageNumber > 1
  1013. ? (this.hasClass(prevBtn, state.disbalePrevCName) && this.removeClass(prevBtn, state.disbalePrevCName))
  1014. : (!this.hasClass(prevBtn, state.disbalePrevCName) && this.addClass(prevBtn, state.disbalePrevCName))
  1015. // 当前页已经是最后一页,则禁止 下一页 按钮的可用性
  1016. state.pageNumber >= state.totalPageCount
  1017. ? (!this.hasClass(nextBtn, state.disbaleNextCName) && this.addClass(nextBtn, state.disbaleNextCName))
  1018. : (this.hasClass(nextBtn, state.disbaleNextCName) && this.removeClass(nextBtn, state.disbaleNextCName))
  1019. }
  1020. renderPageDOM() {
  1021. // 渲染页码DOM
  1022. let state = this.state
  1023. let pageContainer = this.selectorEle(state.container)
  1024. if (!pageContainer) return
  1025. let { totalPageCount, pCName, prevCName, disbalePrevCName, pageNumberCName,
  1026. activeCName, dataNumberAttr, maxShowBtnCount, nextCName, disbaleNextCName } = state
  1027. let paginationStr = `
  1028. <ul class="clearfix paginations">
  1029. <li class="${pCName} ${prevCName} ${disbalePrevCName}"><</li>
  1030. <li class="${pCName} ${pageNumberCName} ${activeCName}" ${dataNumberAttr}='1'>1</li>
  1031. `
  1032. if (totalPageCount - 2 > maxShowBtnCount) {
  1033. paginationStr += `
  1034. <li class="${pCName} number-ellipsis ellipsis-head" style="display: none;">...</li>`
  1035. for (let i = 2; i < maxShowBtnCount + 2; i++) {
  1036. paginationStr += `<li class="${pCName} ${pageNumberCName} ${i === 1 ? activeCName : ''}" ${dataNumberAttr}='${i}'>${i}</li>`
  1037. }
  1038. paginationStr += `
  1039. <li class="${pCName} number-ellipsis ellipsis-tail">...</li>
  1040. <li class="${pCName} ${pageNumberCName}" ${dataNumberAttr}='${totalPageCount}'>${totalPageCount}</li>
  1041. `
  1042. } else {
  1043. for (let i = 2; i <= totalPageCount; i++) {
  1044. paginationStr += `<li class="${pCName} ${pageNumberCName}" ${dataNumberAttr}='${i}'>${i}</li>`
  1045. }
  1046. }
  1047. paginationStr += `<li class="${pCName} ${nextCName}${totalPageCount === 1 ? ' ' + disbaleNextCName : ''}">></li></ul>`
  1048. pageContainer.innerHTML = paginationStr
  1049. // 切换页码
  1050. this.switchPage()
  1051. }
  1052. isIllegal(pageNumber) {
  1053. let state = this.state
  1054. return (
  1055. state.pageNumber === pageNumber || Math.ceil(pageNumber) !== pageNumber ||
  1056. pageNumber > state.totalPageCount || pageNumber < 1 ||
  1057. typeof pageNumber !== 'number' || pageNumber !== pageNumber
  1058. )
  1059. }
  1060. hiddenEllipse(selector, shouldHidden = true) {
  1061. this.selectorEle(selector).style.display = shouldHidden ? 'none' : ''
  1062. }
  1063. selectorEle(selector, all = false) {
  1064. return all ? document.querySelectorAll(selector) : document.querySelector(selector)
  1065. }
  1066. hasClass(eleObj, className) {
  1067. return eleObj.classList.contains(className);
  1068. }
  1069. addClass(eleObj, className) {
  1070. eleObj.classList.add(className);
  1071. }
  1072. removeClass(eleObj, className) {
  1073. if (this.hasClass(eleObj, className)) {
  1074. eleObj.classList.remove(className);
  1075. }
  1076. }
  1077. }
  1078. totalNum.innerHTML = total
  1079. var totalPage = Math.ceil(total/8)
  1080. var slp = new SimplePagination3(totalPage)
  1081. slp.init({
  1082. container: '.page-box',
  1083. onPageChange: state => {
  1084. page = state.pageNumber
  1085. console.log(page)
  1086. getImgList(page,groupId)
  1087. slectImg()
  1088. startNum.innerHTML = '0'
  1089. imgObj = {}
  1090. imgArr =[]
  1091. }
  1092. })
  1093. $('#group-item').on('click','.D-gro', function() {
  1094. groupId = $(this).attr('ids')
  1095. $(this).addClass('text-bg');
  1096. $(this).siblings('p').removeClass('text-bg');
  1097. getImgList(1,groupId)
  1098. if(total == 0) {
  1099. totalPage = 1;
  1100. } else {
  1101. var totalPage = Math.ceil(total/8)
  1102. }
  1103. startNum.innerHTML = '0'
  1104. imgObj = {}
  1105. imgArr =[]
  1106. var slp = new SimplePagination3(totalPage)
  1107. slp.init({
  1108. container: '.page-box',
  1109. onPageChange: state => {
  1110. page = state.pageNumber
  1111. console.log(page)
  1112. getImgList(page,groupId)
  1113. slectImg()
  1114. startNum.innerHTML = '0'
  1115. imgObj = {}
  1116. imgArr =[]
  1117. }
  1118. })
  1119. totalNum.innerHTML = total
  1120. slectImg()
  1121. console.log(groupId,'aaaaaaaaa')
  1122. });
  1123. // 点击确定函数,获取勾选视频的数据 单个选择获取的是imgObj 多个选择获取到的是imgArr tabTag='1'是提取网络视频
  1124. function determine() {
  1125. var markBox = document.getElementById('mark-box3')
  1126. // var imgDialog = document.getElementById('img-dialog3')
  1127. var netvideo = document.getElementById('net-img3')
  1128. // markBox.style.display = "none"
  1129. // imgDialog.style.display = "none"
  1130. console.log(imgObj)
  1131. console.log(imgArr)
  1132. if(tabTag == '1') {
  1133. videoLink = netvideo.value//获取输入的网络视频的绝对地址
  1134. }
  1135. tabTag = ''
  1136. }
  1137. function cancle() {
  1138. var markBox = document.getElementById('mark-box3')
  1139. // var imgDialog = document.getElementById('img-dialog3')
  1140. markBox.style.display = "none"
  1141. // imgDialog.style.display = "none"
  1142. tabTag = ''
  1143. }
  1144. function showVideoDialog2() {
  1145. $("#mark-box3").show()
  1146. }
  1147. // document.onclick = function() {
  1148. // newDialog.style.display = "none"
  1149. // }
  1150. </script>