customImg.blade.php 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631
  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. z-index: 9999;
  16. display: none;
  17. }
  18. .el-dialog__wrapper {
  19. padding: 20px;
  20. margin: 100px auto;
  21. width: 800px;
  22. height: 700px;
  23. background-color: #fff;
  24. border-radius: 5px;
  25. }
  26. @media (max-width: 991px) {
  27. .el-dialog__wrapper {
  28. width: 820px;
  29. overflow-y: auto;
  30. }
  31. }
  32. .eixt {
  33. padding-bottom: 10px;
  34. width: 100%;
  35. text-align: right;
  36. cursor: pointer;
  37. font-size: 16px;
  38. color: #909399;
  39. }
  40. .top-tab {
  41. height: 40px;
  42. border-bottom: 2px solid #e4e7ed;
  43. }
  44. .tab-title {
  45. position: relative;
  46. bottom: -2px;
  47. display: inline-block;
  48. height: 100%;
  49. line-height: 40px;
  50. font-size: 14px;
  51. font-weight: 500;
  52. margin-right: 20px;
  53. cursor: pointer;
  54. }
  55. .is-active {
  56. color: #29BA9C;
  57. border-bottom: 2px solid #29BA9C;
  58. }
  59. .upload-btn {
  60. position: relative;
  61. float: right;
  62. padding: 7px 15px;
  63. background-color: #29BA9C;
  64. font-size: 12px;
  65. border-radius: 3px;
  66. color: #fff;
  67. cursor: pointer;
  68. }
  69. .upload-btn input {
  70. height: 100%;
  71. position: absolute;
  72. right: 0;
  73. top: 0;
  74. opacity: 0;
  75. cursor: pointer;
  76. }
  77. .fl {
  78. float: left;
  79. }
  80. .scroll-box {
  81. width: 150px;
  82. overflow-y: auto;
  83. }
  84. .left-group {
  85. padding: 10px 0;
  86. }
  87. .D-gro {
  88. margin: 0;
  89. width: 148px;
  90. color: #666;
  91. font-size: 14px;
  92. white-space: nowrap;
  93. padding: 3px 0 3px 0px;
  94. cursor: pointer;
  95. }
  96. /*滚动条整体样式*/
  97. .scroll-box::-webkit-scrollbar {
  98. width: 2px;
  99. }
  100. /*滚动条滑块*/
  101. .scroll-box::-webkit-scrollbar-thumb {
  102. border-radius: 30px;
  103. background: #29BA9C;
  104. }
  105. /*滚动条轨道*/
  106. .scroll-box::-webkit-scrollbar-track {
  107. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0);
  108. border-radius: 30px;
  109. background: #f4f4f5;
  110. }
  111. .text-bg {
  112. background: #29BA9C;
  113. color: #fff;
  114. }
  115. .right {
  116. width: 610px;
  117. height: 475px;
  118. }
  119. .fr {
  120. float: right;
  121. }
  122. .img-source {
  123. position: relative;
  124. margin: 10px 0 0 10px;
  125. width: 7.3vw;
  126. height: 7.3vw;
  127. }
  128. .img-source img {
  129. width: 100%;
  130. height:100%;
  131. object-fit: contain;
  132. }
  133. img {
  134. border: 0;
  135. }
  136. .img-source p {
  137. margin-top: 15px;
  138. text-align: center;
  139. padding: 0 5px;
  140. width: 100%;
  141. text-overflow: ellipsis;
  142. white-space: nowrap;
  143. vertical-align: middle;
  144. overflow: hidden;
  145. }
  146. .img-mark {
  147. position: absolute;
  148. /* display: none; */
  149. visibility:hidden;
  150. width: 100%;
  151. height: 100%;
  152. top: 0px;
  153. left: 0px;
  154. background: rgba(41, 186, 156, 0.3);
  155. border: 1px solid rgb(41, 186, 156);
  156. }
  157. .img-source:hover .img-mark {
  158. visibility: visible;
  159. }
  160. .img-mark input {
  161. margin-left: 5px;
  162. }
  163. input[type="checkbox"] {
  164. zoom: 120%;
  165. }
  166. .img-source .sle-img {
  167. position: absolute;
  168. top: 5px;
  169. left: 5px;
  170. }
  171. .sel-checkbox {
  172. margin-left: 5px;
  173. }
  174. .foot {
  175. position: relative;
  176. margin-top: 15px;
  177. }
  178. .newdialog {
  179. padding: 10px;
  180. position: absolute;
  181. display: none;
  182. background-color: #fff;
  183. z-index: 2000;
  184. width: 230px;
  185. left: -10px;
  186. top: -136px;
  187. border-radius: 4px;
  188. border: 1px solid #ebebeb;
  189. }
  190. .clearfix::after {
  191. content: '';
  192. display: block;
  193. clear: both;
  194. }
  195. .newgroup {
  196. color: rgb(64, 158, 255);
  197. cursor: pointer;
  198. font-size: 14px;
  199. }
  200. .number {
  201. margin: 0 5px;
  202. background-color: #f4f4f5;
  203. color: #666;
  204. min-width: 30px;
  205. border-radius: 2px;
  206. }
  207. button {
  208. padding: 0;
  209. border: none;
  210. }
  211. .page,
  212. .btn-prev,
  213. .btn-next {
  214. display: inline-block;
  215. margin: 0 3px;
  216. width: 30px;
  217. height: 30px;
  218. line-height: 30px;
  219. font-size: 13px;
  220. text-align: center;
  221. color: #666;
  222. border-radius: 4px;
  223. background-color: #f4f4f5;
  224. cursor: pointer;
  225. }
  226. .btn-prev,
  227. .btn-next {
  228. font-weight: bold;
  229. border-radius: 4px;
  230. font-size: 16px;
  231. cursor: pointer!important;
  232. }
  233. .page-active {
  234. background-color: #29BA9C;
  235. color: #FFF;
  236. }
  237. .foot-btn {
  238. margin-top: 15px;
  239. font-size: 14px;
  240. }
  241. .bule-text {
  242. color: rgb(64, 158, 255);
  243. }
  244. .sure-cancel {
  245. margin-left: 180px;
  246. }
  247. .footbtn {
  248. width: 100px;
  249. height: 40px;
  250. border-radius: 4px;
  251. }
  252. .srue {
  253. margin-right: 20px;
  254. color: #fff;
  255. background-color: #29ba9c;
  256. }
  257. .triangle {
  258. position: absolute;
  259. left: 15%;
  260. bottom: -16px;
  261. width: 0;
  262. height: 0;
  263. border-width: 8px;
  264. border-style: solid;
  265. border-color: #fff transparent transparent transparent;
  266. }
  267. .please-inp {
  268. margin-bottom: 10px;
  269. color: #666;
  270. font-size: 14px;
  271. }
  272. .group-inp {
  273. width: 100%;
  274. height: 30px;
  275. border: 1px solid #DCDFE6;
  276. }
  277. .dio-btn {
  278. margin-top: 15px;
  279. text-align: center;
  280. }
  281. .new-group {
  282. width: 50px;
  283. height: 30px;
  284. margin: 0 10px;
  285. border-radius: 4px;
  286. }
  287. .new-group-sure {
  288. background-color: #54c8b0;
  289. color: #fff;
  290. }
  291. .new-group-cancel {
  292. border: 1px solid #DCDFE6;
  293. color: #666;
  294. }
  295. #sel-img {
  296. display: block;
  297. }
  298. #collect-img {
  299. display: none;
  300. }
  301. .new-img {
  302. margin-top: 20px;
  303. width: 150px;
  304. height: 150px;
  305. line-height: 150px;
  306. text-align: center;
  307. color: #999;
  308. line-height: 150px;
  309. text-align: center;
  310. margin: 20px auto;
  311. object-fit: cover;
  312. }
  313. .new-img img {
  314. width: 100%;
  315. height: 100%;
  316. display: block;
  317. border: none;
  318. }
  319. .newlink-box {
  320. text-align: center;
  321. }
  322. .netlink {
  323. padding: 0 10px;
  324. width: 450px;
  325. height: 40px;
  326. border-radius: 4px;
  327. border: 1px solid #DCDFE6;
  328. }
  329. .conversion {
  330. text-align: center;
  331. }
  332. .conversion-btn {
  333. margin: 30px auto;
  334. width: 100px;
  335. display: inline-block;
  336. cursor: pointer;
  337. background: #FFF;
  338. border: 1px solid #DCDFE6;
  339. color: #666;
  340. text-align: center;
  341. box-sizing: border-box;
  342. padding: 12px 20px;
  343. font-size: 14px;
  344. border-radius: 4px;
  345. }
  346. /* 提示信息 */
  347. .success-tip {
  348. position: fixed;
  349. left: 50%;
  350. top: 60px;
  351. transform: translate(-50%);
  352. padding: 10px;
  353. background-color: #f0f9eb;
  354. border-radius: 10px;
  355. color: #67c23a;
  356. font-size: 14px;
  357. display: none;
  358. }
  359. #none-data {
  360. margin-top: 10px;
  361. width: 100%;
  362. text-align: center;
  363. }
  364. #pageNum {
  365. display: inline-block;
  366. }
  367. .shows {
  368. visibility: visible;
  369. }
  370. .nones {
  371. visibility: hidden;
  372. }
  373. .paginations {
  374. font-size: 0;
  375. text-align: center;
  376. }
  377. .paginations .page-li {
  378. display: inline-block;
  379. font-size: 15px;
  380. line-height: 1;
  381. -ms-user-select: none;
  382. -moz-user-select: none;
  383. -webkit-user-select: none;
  384. user-select: none;
  385. }
  386. .paginations .page-li.page-active {
  387. cursor: default;
  388. color: #fff;
  389. border-color: #29BA9C;
  390. background-color: #29BA9C;
  391. }
  392. .paginations .page-li.number-ellipsis {
  393. border: none;
  394. cursor: default;
  395. }
  396. .paginations .page-number {
  397. margin: 0 5px;
  398. padding: 5px 12px;
  399. text-align: center;
  400. border-radius: 2px;
  401. background-color: #f4f4f5;
  402. cursor: pointer;
  403. }
  404. .paginations .page-prev {
  405. padding: 5px 12px;
  406. margin-right: 8px;
  407. background-color: #f4f4f5;
  408. border-radius: 2px;
  409. cursor: pointer;
  410. }
  411. .paginations .page-next {
  412. padding: 5px 12px;
  413. margin-left: 8px;
  414. background-color: #f4f4f5;
  415. border-radius: 2px;
  416. cursor: pointer;
  417. }
  418. .paginations .number-ellipsis {
  419. display: inline-block;
  420. font-size: 15px;
  421. padding: 8px 14px;
  422. }
  423. .paginations .number-ellipsis.page-hidden {
  424. display: none;
  425. }
  426. #page-go {
  427. margin-top: 10px;
  428. text-align: center;
  429. }
  430. /* 多图上传 */
  431. .multi-img-details{margin-top:.5em;position: relative;}
  432. .multi-img-details .multi-item{max-width: 150px!important; position: absolute!important;left: 0!important;top: 0!important; margin-right: 18px;}
  433. .multi-img-details .multi-item .img_box{width: 150px!important;height: 150px!important;}
  434. .multi-img-details .multi-item img{width: 100%!important; height: 100%!important;}
  435. .multi-img-details .multi-item em{position:absolute; top: 0; right: -14px;}
  436. #img-dialog.el-dialog__wrapper {
  437. padding: 20px!important;
  438. margin: 100px auto!important;
  439. width: 820px!important;
  440. height: 77.8vh!important;
  441. background-color: #fff!important;
  442. border-radius: 5px!important;
  443. box-sizing: border-box;
  444. }
  445. </style>
  446. <div class="mark" id="mark-box">
  447. <div class="el-dialog__wrapper" id="img-dialog" style="display: block;">
  448. <!-- 右上角的X -->
  449. <div class="eixt" onclick="closeImgDialog()"><i class="el-icon-close"></i></div>
  450. <!-- 顶部切换项 -->
  451. <div class="top-tab">
  452. <span class="tab-title is-active" onclick="handlSelect()" id="sel-img-btn">选取图片</span>
  453. <span class="tab-title" onclick="newWorkImg()" id="net-img-btn">提取网络图片</span>
  454. <div class="upload-btn">点击上传<input type="file" accept="image/*" title="" id="uploadfle" /></div>
  455. </div>
  456. <!-- 选取图片start -->
  457. <div id="sel-img">
  458. <div style="display:flex">
  459. <div class="scroll-box" style="flex-shrink: 0;">
  460. <div class="left-group fl bor-right" id="group-item">
  461. </div>
  462. </div>
  463. <div>
  464. <div class="el-date-editor el-input el-input--prefix el-input--suffix el-date-editor--month" style="margin:20px 0 0 10px;">
  465. <input type="month" autocomplete="off" name="imageFilterTime" placeholder="选择月" class="el-input__inner" onchange="getImgList(1,'')">
  466. <!-- <span class="el-input__prefix"><i class="el-input__icon el-icon-date"></i></span> -->
  467. <span class="el-input__suffix">
  468. <span class="el-input__suffix-inner">
  469. <i class="el-input__icon"></i>
  470. </span>
  471. </span>
  472. </div>
  473. <div id="imgList"></div>
  474. </div>
  475. </div>
  476. </div>
  477. <!-- 选取图片end -->
  478. <div>
  479. <div class="foot clearfix" id="foot-box">
  480. <span class="newgroup fl" onclick="newgroup()">新建分组</span>
  481. <!-- 新建分组弹窗 -->
  482. <div class="newdialog" id="new-dialog">
  483. <p class="please-inp">请输入分组名</p>
  484. <input class="group-inp" id="new-group" type="text" >
  485. <div class="dio-btn">
  486. <button class="new-group new-group-sure" onclick="srueGroup()" type="button">确定</button>
  487. <button class="new-group new-group-cancel" onclick="cancleGroup()" type="button">取消</button>
  488. </div>
  489. <div class="triangle"></div>
  490. </div>
  491. <div class="fr">
  492. <div class="page-box">
  493. </div>
  494. </div>
  495. </div>
  496. </div>
  497. <!-- 提取网络图片start -->
  498. <div id="collect-img">
  499. <div class="new-img" style="display:none">
  500. <img id="show-net-img" >
  501. </div>
  502. <p style="margin-top:5px;text-align: center; color:#666">输入图片链接</p>
  503. <div class="newlink-box">
  504. <input type="text" class="netlink" id="net-img" placeholder="图片链接" onfocus="onfocusClick()" onblur="onblurClick()">
  505. </div>
  506. <div class="conversion">
  507. <button class="conversion-btn" onclick="conversion()" type="button">转化</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()" type="button">确定</button>
  520. <button class="footbtn cancel" onclick="cancle()" type="button">取消</button>
  521. </div>
  522. </div>
  523. </div>
  524. </div>
  525. <script>
  526. var input_image_name = ""
  527. var byte_type = ""
  528. var imgDialog = document.getElementById('img-dialog') //获取整个弹窗的id
  529. var selImg = document.getElementById('sel-img')
  530. var collectImg = document.getElementById('collect-img')
  531. var selImgBtn = document.getElementById('sel-img-btn')
  532. var netImgBtn = document.getElementById('net-img-btn')
  533. var newDialog = document.getElementById('new-dialog')
  534. var netlink = document.getElementsByClassName('netlink')[0]
  535. var footBox = document.getElementById('foot-box')
  536. var startNum = document.getElementById('startNum')
  537. var totalNum = document.getElementById('totalNum')
  538. var checkbox = document.getElementsByClassName('sel-checkbox')
  539. var imgMark = document.getElementsByClassName('img-mark')
  540. var imgObj = {}
  541. var imgArr = [] //选中的图片
  542. var tag = 'single';//单个选择的标识
  543. // var tag = 'more';//多个选择的标识
  544. var id = null;
  545. var ids = null;
  546. var groupData = [];//分组列表的数据
  547. var newName = '';//新建分组的名字
  548. var netIMgLink = '';//网络的图片链接
  549. var groupId = '';//分组id
  550. var imgList = [];
  551. var total = null;
  552. var last_page = 0;
  553. var more_img_arr = [];//当前显示的图片链接(不包括删除)
  554. //拖放变量初始化配置
  555. var item_w,item_h,col_len,few_len,box_w,difNum;
  556. var box_h = [];
  557. var delete_num = [];//删除数量
  558. var arrIndex = []; //展示的图片下标
  559. var srcArr =[];//存所有图片链接(包括删除)
  560. var current_element_num = 0;
  561. //已保存的图片加拖放属性
  562. $(document).ready(function() {
  563. for(let i=0;i<$('.multi-img-details').length;i++) {
  564. // 循环每个多图上传
  565. let arr = [];
  566. let num_arr = [];
  567. let count = $('.multi-img-details').eq(i).children('.multi-item').length;//item数量
  568. if($('.multi-img-details').eq(i).children('.multi-item').length > 0) {
  569. $('.multi-img-details').eq(i).children('.multi-item').each(function(index){
  570. $(this).addClass("items");
  571. $(this).addClass(`${i}-element${index}`);
  572. let val = $(this).find("input").val();
  573. arr.push(val);
  574. num_arr.push(index);
  575. })
  576. }
  577. delete_num.push(0);
  578. more_img_arr.push(arr);
  579. srcArr.push(JSON.parse(JSON.stringify(arr))); // 深拷贝
  580. arrIndex.push(num_arr);
  581. info(count,i);
  582. redraw(0,i);
  583. tuofang(i);
  584. }
  585. })
  586. function selcetImg(str) {
  587. imgDialog.css("display", "block");
  588. }
  589. function getGroupList() {
  590. var str = ''
  591. $.ajax({
  592. url: '{!! yzWebUrl("setting.media.tags") !!}', //请求接口的地址
  593. type: "POST", //请求的方法GET/POST
  594. data: { //需要传递的参数
  595. source_type: 1,
  596. },
  597. async : false, //将ajax请求设置为同步请求
  598. success: function (res) { //请求成功后的操作
  599. if(res.result == 1) {
  600. groupData = res.data
  601. groupData.forEach((item,index) => {
  602. 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>`
  603. })
  604. $('#group-item').html(str);
  605. $('#group-item').find('p:first').addClass('text-bg');//选取第一个默认元素添加背景
  606. }
  607. },
  608. error: function (err) { //请求失败后的操作
  609. console.log(err); //请求失败在控制台输出22
  610. }
  611. })
  612. }
  613. getGroupList()//调用 不可去掉
  614. function handlSelect() {
  615. selImg.style.display = 'block';
  616. collectImg.style.display = 'none';
  617. selImgBtn.classList.add("is-active")
  618. netImgBtn.classList.remove("is-active");
  619. imgDialog.style.height = "700px"
  620. footBox.style.display="block"
  621. }
  622. function newWorkImg() {
  623. selImg.style.display = 'none';
  624. collectImg.style.display = 'block';
  625. netImgBtn.classList.add("is-active")
  626. selImgBtn.classList.remove("is-active");
  627. imgDialog.style.height = "560px"
  628. footBox.style.display="none"
  629. }
  630. function newgroup() {
  631. newDialog.style.display = "block"
  632. }
  633. //确定新建分组
  634. function srueGroup() {
  635. newName=document.getElementById("new-group").value;
  636. if(newName == '') {
  637. alert('分组名不能为空!')
  638. return
  639. }
  640. $.ajax({
  641. url: "{!! yzWebUrl("setting.media.addTag") !!}", //请求接口的地址
  642. type: "POST", //请求的方法GET/POST
  643. data: { //需要传递的参数
  644. source_type:1,
  645. title:newName
  646. },
  647. async : false, //将ajax请求设置为同步请求
  648. success: function (res) { //请求成功后的操作
  649. if(res.result == 1) {
  650. alert('新建分组成功')
  651. getGroupList()
  652. getImgList(1,'')
  653. newDialog.style.display = "none"
  654. document.getElementById("new-group").value="";
  655. startNum.innerHTML = '0'
  656. imgObj = {}
  657. imgArr =[]
  658. }
  659. },
  660. error: function (err) { //请求失败后的操作
  661. console.log(err); //请求失败在控制台输出22
  662. }
  663. })
  664. }
  665. function cancleGroup() {
  666. newDialog.style.display = "none"
  667. document.getElementById("new-group").value="";
  668. }
  669. function onfocusClick() {
  670. netlink.style.border = '1px solid #29ba9c'
  671. }
  672. function onblurClick() {
  673. netlink.style.border = '1px solid #DCDFE6'
  674. }
  675. function getImgList(page,tag_id) {//默认请求全部图片
  676. let filterTime=$("input[name='imageFilterTime']").val();
  677. console.log(filterTime);
  678. if(filterTime){
  679. filterTime={
  680. year:parseInt(filterTime.split("-")[0]),
  681. month:parseInt(filterTime.split("-")[1])
  682. }
  683. }else {
  684. filterTime={
  685. year:null,
  686. month:null
  687. };
  688. }
  689. $.ajax({
  690. url: '{!! yzWebUrl("upload.uploadV3.getImage") !!}',
  691. type: "POST",
  692. data: {
  693. page:page,
  694. pageSize: 12,
  695. tag_id:tag_id,
  696. date:filterTime
  697. },
  698. async : false,
  699. success: function (res) {
  700. if(res.result == 1) {
  701. imgList = res.data.data;
  702. // console.log(imgList,'11111111111111')
  703. total = res.data.total;
  704. last_page = res.data.last_page || 1;
  705. let str = ''
  706. imgList.forEach((item,index) => {
  707. str += ` <div class="img-source fl" id="sel-input"><img src="${item.url}" alt="">
  708. <!--<p>${item.filename}</p>-->
  709. <div class="img-mark" id=${item.id}>
  710. <input type="checkbox" class="sel-checkbox" srcs=${item.url} id=${item.id} attachments=${item.attachment}>
  711. </div>
  712. </div>`
  713. })
  714. if(imgList.length <= 0) {
  715. str = `<div id="none-data">暂无数据</div>`
  716. }
  717. $('#imgList').html(str)
  718. }
  719. },
  720. error: function (err) {
  721. console.log(err);
  722. }
  723. })
  724. };
  725. (function() {
  726. getImgList(1,'');
  727. })();
  728. var file = document.getElementById('uploadfle')
  729. // 点击上传
  730. file.onchange = function () {
  731. console.log(this.files,"this.files")
  732. // var fileData = this.files[0]; //获取到一个FileList对象中的第一个文件( File 对象),是我们上传的文件
  733. uploadImage(this.files, 0);
  734. }
  735. function uploadImage(files, index) {
  736. let fileData = files[index];
  737. let fd = new FormData();
  738. fd.append("file", fileData);
  739. $.ajax({
  740. url: "{!! yzWebUrl("upload.uploadV3.upload") !!}"+'&upload_type=image'+"&tag_id=" + groupId,
  741. type: "POST",
  742. contentType: false,
  743. // 告诉jQuery不要去设置Content-Type请求头
  744. processData: false,
  745. // 告诉jQuery不要去处理发送的数据
  746. data: fd ,
  747. async : false,
  748. success: function (res) {
  749. if(res.result == 1) {
  750. // alert('图片上传成功!')
  751. if(index < files.length-1) {
  752. // 多图采用递归上传
  753. index++;
  754. uploadImage(files, index);
  755. return
  756. }
  757. getImgList(1, groupId)
  758. imgArr = []
  759. imgObj ={}
  760. // 已经在getImgList方法里面执行;没必要再执行一次
  761. // let str = ''
  762. // imgList.forEach((item,index) => {
  763. // str += ` <div class="img-source fl" id="sel-input"><img src="${item.url}" alt="">
  764. // <!--<p>${item.filename}</p>-->
  765. // <div class="img-mark" id=${item.id}>
  766. // <input type="checkbox" class="sel-checkbox" srcs=${item.url} id=${item.id} attachments=${item.attachment}>
  767. // </div>
  768. // </div>`
  769. // })
  770. // $('#imgList').html(str)
  771. // if(total == 0) {
  772. // totalPage = 1;
  773. // }
  774. var slp = new SimplePagination(last_page)
  775. slp.init({
  776. container: '.page-box',
  777. // maxShowBtnCount: 3,
  778. onPageChange: state => {
  779. page = state.pageNumber
  780. // console.log(page)
  781. getImgList(page,groupId)
  782. slectImg()
  783. startNum.innerHTML = '0'
  784. imgObj = {}
  785. imgArr =[]
  786. }
  787. })
  788. totalNum.innerHTML = total
  789. slectImg()
  790. // 上传成功默认选中
  791. // console.log(document.getElementsByClassName('sel-checkbox')[0])
  792. // 可以勾选多个的时候执行
  793. if(tag== "more") {
  794. let defaultSels = document.getElementsByClassName('sel-checkbox')
  795. for(let i = 0; i < files.length; i++) {
  796. defaultSels[i].checked = true;
  797. defaultSels[i].parentNode.classList.add('shows');
  798. ids = defaultSels[i].attributes["id"].value;
  799. let path = defaultSels[i].attributes["attachments"].value;
  800. let paths = defaultSels[i].attributes["srcs"].value;
  801. imgArr.push({"id":ids,"url":paths,"attachment":path});
  802. }
  803. startNum.innerHTML = imgArr.length
  804. }
  805. // 只能勾选单个的时候执行
  806. if(tag== "single") {
  807. let defaultSel = document.getElementsByClassName('sel-checkbox')[0]
  808. defaultSel.checked = true
  809. defaultSel.parentNode.classList.add('shows')
  810. id = defaultSel.attributes["id"].value
  811. let path = defaultSel.attributes["attachments"].value
  812. let paths = defaultSel.attributes["srcs"].value
  813. imgObj.id = id
  814. imgObj.url = paths
  815. imgObj.attachment = path
  816. startNum.innerHTML = '1'
  817. }
  818. let gid = getEle()
  819. // console.log(gid)
  820. if(gid == '') {
  821. gid ='all'
  822. }
  823. var newNum = document.getElementById(gid)
  824. let num = Number(newNum.innerHTML)
  825. num += 1
  826. newNum.innerHTML = num
  827. file.value = ''
  828. } else {
  829. alert(res.msg)
  830. }
  831. },
  832. error: function (err) {
  833. console.log(err);
  834. }
  835. })
  836. }
  837. function getEle() {
  838. return groupId
  839. }
  840. function getNteImg(url,tag_id) {
  841. $.ajax({
  842. url: "{!! yzWebUrl("upload.uploadV3.fetch") !!}", //请求接口的地址
  843. type: "POST", //请求的方法GET/POST
  844. data: { //需要传递的参数
  845. url:url,
  846. tag_id:tag_id
  847. },
  848. async : false, //将ajax请求设置为同步请求
  849. success: function (res) { //请求成功后的操作
  850. if(res.result == 1) {
  851. }
  852. },
  853. error: function (err) { //请求失败后的操作
  854. console.log(err); //请求失败在控制台输出22
  855. }
  856. })
  857. }
  858. function conversion() {
  859. document.querySelector(".new-img").style.display="block";
  860. netIMgLink = document.getElementById("net-img").value;
  861. // console.log(netIMgLink)
  862. var showNetImg = document.getElementById('show-net-img')
  863. showNetImg.src = netIMgLink
  864. getNteImg(netIMgLink,0)//转入未分组,未分组的id是0
  865. document.getElementById("net-img").value = '';
  866. alert('图片提取到未分组')
  867. }
  868. function slectImg() {
  869. imgObj ={}
  870. if(tag == 'single' ) {
  871. for (let index = 0; index < imgMark.length; index++) {
  872. const imgMarkEl = imgMark[index];
  873. imgMarkEl.onclick=function(){
  874. id=imgMarkEl.id;
  875. const checkEl= this.querySelector("input[type=checkbox]");
  876. let checkedStatus=checkEl.checked= !checkEl.checked;
  877. if(checkedStatus == true) {
  878. id = checkEl.attributes["id"].value
  879. var img = document.getElementById(id);
  880. img.classList.add("shows");
  881. let path = checkEl.attributes["attachments"].value
  882. let paths = checkEl.attributes["srcs"].value
  883. imgObj.id = id
  884. imgObj.url = paths
  885. imgObj.attachment = path
  886. startNum.innerHTML = '1'
  887. imgArr.push({"id":id,"url":paths,"attachment":path})
  888. } else {
  889. imgObj ={}
  890. imgCount = 0
  891. var img = document.getElementById(id)
  892. img.classList.remove("shows");
  893. startNum.innerHTML = '0'
  894. }
  895. imgArr.forEach((item,index) => {
  896. if(item.id == id) {
  897. imgArr.splice(index,1)
  898. }
  899. })
  900. for(var i = 0;i < checkbox.length;i++) {
  901. checkbox[i].checked = false
  902. checkbox[i].parentNode.classList.remove("shows")
  903. if(id == checkbox[i].id && checkedStatus == true) {
  904. checkbox[i].checked = true
  905. var img = document.getElementById(id)
  906. img.classList.add("shows");
  907. }
  908. }
  909. }
  910. }
  911. for(var i = 0;i < checkbox.length;i++) {
  912. checkbox[i].change = function(e) {
  913. let checkedStatus = this.checked;
  914. if(checkedStatus == true) {
  915. id = this.attributes["id"].value
  916. var img = document.getElementById(id);
  917. img.classList.add("shows");
  918. let path = this.attributes["attachments"].value
  919. let paths = this.attributes["srcs"].value
  920. imgObj.id = id
  921. imgObj.url = paths
  922. imgObj.attachment = path
  923. startNum.innerHTML = '1'
  924. } else {
  925. imgObj ={}
  926. imgCount = 0
  927. var img = document.getElementById(id)
  928. img.classList.remove("shows");
  929. startNum.innerHTML = '0'
  930. }
  931. for(var i = 0;i < checkbox.length;i++) {
  932. checkbox[i].checked = false
  933. checkbox[i].parentNode.classList.remove("shows")
  934. if(id == checkbox[i].id && checkedStatus == true) {
  935. checkbox[i].checked = true
  936. img.classList.add("shows");
  937. }
  938. }
  939. }
  940. }
  941. }
  942. if(tag == 'more') {
  943. for (let index = 0; index < imgMark.length; index++) {
  944. const imgMarkEl = imgMark[index];
  945. imgMarkEl.onclick=function(){
  946. id=imgMarkEl.id;
  947. const checkEl= this.querySelector("input[type=checkbox]");
  948. let checkedStatus= checkEl.checked= !checkEl.checked;
  949. if(checkedStatus == true) {
  950. id = checkEl.attributes["id"].value
  951. var img = document.getElementById(id)
  952. img.classList.add("shows");
  953. let path = checkEl.attributes["attachments"].value
  954. let paths = checkEl.attributes["srcs"].value
  955. imgArr.push({"id":id,"url":paths,"attachment":path})
  956. // console.log(imgArr,'执行了吗');
  957. startNum.innerHTML = imgArr.length;
  958. } else {
  959. ids = checkEl.attributes["id"].value
  960. imgArr.forEach((item,index) => {
  961. if(item.id == ids) {
  962. imgArr.splice(index,1)
  963. }
  964. })
  965. var img = document.getElementById(ids)
  966. img.classList.remove("shows");
  967. startNum.innerHTML = imgArr.length
  968. }
  969. }
  970. }
  971. // console.log(imgArr,22);
  972. for(var i = 0;i < checkbox.length;i++) {
  973. checkbox[i].onchange = function(e) {
  974. e.stopPropagation();
  975. // console.log(i);
  976. let checkedStatus = this.checked;
  977. if(checkedStatus == true) {
  978. id = this.attributes["id"].value
  979. var img = document.getElementById(id)
  980. img.classList.add("shows");
  981. let path = this.attributes["attachments"].value
  982. let paths = this.attributes["srcs"].value
  983. imgArr.push({"id":id,"url":paths,"attachment":path})
  984. // console.log(imgArr,'执行了吗');
  985. startNum.innerHTML = imgArr.length;
  986. } else {
  987. ids = this.attributes["id"].value
  988. imgArr.forEach((item,index) => {
  989. if(item.id == ids) {
  990. imgArr.splice(index,1)
  991. }
  992. })
  993. var img = document.getElementById(ids)
  994. img.classList.remove("shows");
  995. startNum.innerHTML = imgArr.length
  996. }
  997. }
  998. }
  999. }
  1000. }
  1001. // (function() {
  1002. slectImg() //调用 不可去掉
  1003. // })();
  1004. class SimplePagination {
  1005. constructor(totalPageCount) {
  1006. if (!totalPageCount) return
  1007. this.state = {
  1008. pageNumber: 1,
  1009. totalPageCount
  1010. }
  1011. }
  1012. init(paramsObj) {
  1013. let state = this.state
  1014. state.container = paramsObj.container || 'body'
  1015. state.maxShowBtnCount = paramsObj.maxShowBtnCount || 5
  1016. state.pCName = paramsObj.pCName || 'page-li',
  1017. state.activeCName = paramsObj.activeCName || 'page-active',
  1018. state.dataNumberAttr = paramsObj.dataNumberAttr || 'data-number',
  1019. state.prevCName = paramsObj.prevCName || 'page-prev',
  1020. state.nextCName = paramsObj.nextCName || 'page-next',
  1021. state.disbalePrevCName = paramsObj.disbalePrevCName || 'no-prev',
  1022. state.disbaleNextCName = paramsObj.disbaleNextCName || 'no-next',
  1023. state.pageNumberCName = paramsObj.pageNumberCName || 'page-number'
  1024. state.swEvent = paramsObj.swEvent || 'click'
  1025. state.onPageChange = paramsObj.onPageChange
  1026. state.totalPageCount > state.maxShowBtnCount + 2 && (state.activePosition = Math.ceil(state.maxShowBtnCount / 2))
  1027. this.renderPageDOM()
  1028. }
  1029. switchPage() {
  1030. let state = this.state
  1031. let pCNameList = this.selectorEle('.' + state.pCName, true)
  1032. let pageNumber
  1033. pCNameList.forEach(item => {
  1034. item.addEventListener(state.swEvent, e => {
  1035. const currentPageEle = e.target
  1036. if (this.hasClass(currentPageEle, state.activeCName)) return
  1037. let dataNumberAttr = currentPageEle.getAttribute(state.dataNumberAttr)
  1038. if (dataNumberAttr) {
  1039. // 点击 数字 按钮
  1040. pageNumber = +dataNumberAttr
  1041. } else if (this.hasClass(currentPageEle, state.prevCName)) {
  1042. // 点击 上一页 按钮
  1043. state.pageNumber > 1 && (pageNumber = state.pageNumber - 1)
  1044. } else if (this.hasClass(currentPageEle, state.nextCName)) {
  1045. // 点击 下一页 按钮
  1046. state.pageNumber < state.totalPageCount && (pageNumber = state.pageNumber + 1)
  1047. }
  1048. pageNumber && this.gotoPage(pageNumber)
  1049. })
  1050. })
  1051. }
  1052. gotoPage(pageNumber) {
  1053. let state = this.state
  1054. let evaNumberLi = this.selectorEle('.' + state.pageNumberCName, true)
  1055. let len = evaNumberLi.length
  1056. if (!len || this.isIllegal(pageNumber)) return
  1057. // 清除 active 样式
  1058. this.removeClass(this.selectorEle(`.${state.pCName}.${state.activeCName}`), state.activeCName)
  1059. if (state.activePosition) {
  1060. let rEllipseSign = state.totalPageCount - (state.maxShowBtnCount - state.activePosition) - 1
  1061. // 左边不需要出现省略符号占位
  1062. if (pageNumber <= state.maxShowBtnCount && (pageNumber < rEllipseSign)) {
  1063. if (+evaNumberLi[1].getAttribute(state.dataNumberAttr) > 2) {
  1064. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  1065. evaNumberLi[i].innerText = i + 1
  1066. evaNumberLi[i].setAttribute(state.dataNumberAttr, i + 1)
  1067. }
  1068. }
  1069. this.hiddenEllipse('.ellipsis-head')
  1070. this.hiddenEllipse('.ellipsis-tail', false)
  1071. this.addClass(evaNumberLi[pageNumber - 1], state.activeCName)
  1072. }
  1073. // 两边都需要出现省略符号占位
  1074. if (pageNumber > state.maxShowBtnCount && pageNumber < rEllipseSign) {
  1075. this.hiddenEllipse('.ellipsis-head', pageNumber === 2 && state.maxShowBtnCount === 1)
  1076. this.hiddenEllipse('.ellipsis-tail', false)
  1077. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  1078. evaNumberLi[i].innerText = pageNumber + (i - state.activePosition)
  1079. evaNumberLi[i].setAttribute(state.dataNumberAttr, pageNumber + (i - state.activePosition))
  1080. }
  1081. this.addClass(evaNumberLi[state.activePosition], state.activeCName)
  1082. }
  1083. // 右边不需要出现省略符号占位
  1084. if (pageNumber >= rEllipseSign) {
  1085. this.hiddenEllipse('.ellipsis-tail')
  1086. this.hiddenEllipse('.ellipsis-head', false)
  1087. if (+evaNumberLi[len - 2].getAttribute(state.dataNumberAttr) < state.totalPageCount - 1) {
  1088. for (let i = 1; i < state.maxShowBtnCount + 1; i++) {
  1089. evaNumberLi[i].innerText = state.totalPageCount - (state.maxShowBtnCount - i) - 1
  1090. evaNumberLi[i].setAttribute(state.dataNumberAttr, state.totalPageCount - (state.maxShowBtnCount - i) - 1)
  1091. }
  1092. }
  1093. this.addClass(evaNumberLi[(state.maxShowBtnCount + 1) - (state.totalPageCount - pageNumber)], state.activeCName)
  1094. }
  1095. } else {
  1096. // 不需要省略符号占位
  1097. this.addClass(evaNumberLi[pageNumber - 1], state.activeCName)
  1098. }
  1099. state.pageNumber = pageNumber
  1100. state.onPageChange && state.onPageChange(state)
  1101. // 判断 上一页 下一页 是否可使用
  1102. this.switchPrevNextAble()
  1103. }
  1104. switchPrevNextAble() {
  1105. let state = this.state
  1106. let prevBtn = this.selectorEle('.' + state.prevCName)
  1107. let nextBtn = this.selectorEle('.' + state.nextCName)
  1108. // 当前页已经是第一页,则禁止 上一页 按钮的可用性
  1109. state.pageNumber > 1
  1110. ? (this.hasClass(prevBtn, state.disbalePrevCName) && this.removeClass(prevBtn, state.disbalePrevCName))
  1111. : (!this.hasClass(prevBtn, state.disbalePrevCName) && this.addClass(prevBtn, state.disbalePrevCName))
  1112. // 当前页已经是最后一页,则禁止 下一页 按钮的可用性
  1113. state.pageNumber >= state.totalPageCount
  1114. ? (!this.hasClass(nextBtn, state.disbaleNextCName) && this.addClass(nextBtn, state.disbaleNextCName))
  1115. : (this.hasClass(nextBtn, state.disbaleNextCName) && this.removeClass(nextBtn, state.disbaleNextCName))
  1116. }
  1117. renderPageDOM() {
  1118. // 渲染页码DOM
  1119. let state = this.state
  1120. let pageContainer = this.selectorEle(state.container)
  1121. if (!pageContainer) return
  1122. let { totalPageCount, pCName, prevCName, disbalePrevCName, pageNumberCName,
  1123. activeCName, dataNumberAttr, maxShowBtnCount, nextCName, disbaleNextCName } = state
  1124. let paginationStr = `
  1125. <ul class="clearfix paginations">
  1126. <li class="${pCName} ${prevCName} ${disbalePrevCName}"><</li>
  1127. <li class="${pCName} ${pageNumberCName} ${activeCName}" ${dataNumberAttr}='1'>1</li>
  1128. `
  1129. if (totalPageCount - 2 > maxShowBtnCount) {
  1130. paginationStr += `
  1131. <li class="${pCName} number-ellipsis ellipsis-head" style="display: none;">...</li>`
  1132. for (let i = 2; i < maxShowBtnCount + 2; i++) {
  1133. paginationStr += `<li class="${pCName} ${pageNumberCName} ${i === 1 ? activeCName : ''}" ${dataNumberAttr}='${i}'>${i}</li>`
  1134. }
  1135. paginationStr += `
  1136. <li class="${pCName} number-ellipsis ellipsis-tail">...</li>
  1137. <li class="${pCName} ${pageNumberCName}" ${dataNumberAttr}='${totalPageCount}'>${totalPageCount}</li>
  1138. `
  1139. } else {
  1140. for (let i = 2; i <= totalPageCount; i++) {
  1141. paginationStr += `<li class="${pCName} ${pageNumberCName}" ${dataNumberAttr}='${i}'>${i}</li>`
  1142. }
  1143. }
  1144. paginationStr += `<li class="${pCName} ${nextCName}${totalPageCount === 1 ? ' ' + disbaleNextCName : ''}">></li></ul>`
  1145. pageContainer.innerHTML = paginationStr
  1146. // 切换页码
  1147. this.switchPage()
  1148. }
  1149. isIllegal(pageNumber) {
  1150. let state = this.state
  1151. return (
  1152. state.pageNumber === pageNumber || Math.ceil(pageNumber) !== pageNumber ||
  1153. pageNumber > state.totalPageCount || pageNumber < 1 ||
  1154. typeof pageNumber !== 'number' || pageNumber !== pageNumber
  1155. )
  1156. }
  1157. hiddenEllipse(selector, shouldHidden = true) {
  1158. this.selectorEle(selector).style.display = shouldHidden ? 'none' : ''
  1159. }
  1160. selectorEle(selector, all = false) {
  1161. return all ? document.querySelectorAll(selector) : document.querySelector(selector)
  1162. }
  1163. hasClass(eleObj, className) {
  1164. return eleObj.classList.contains(className);
  1165. }
  1166. addClass(eleObj, className) {
  1167. eleObj.classList.add(className);
  1168. }
  1169. removeClass(eleObj, className) {
  1170. if (this.hasClass(eleObj, className)) {
  1171. eleObj.classList.remove(className);
  1172. }
  1173. }
  1174. }
  1175. totalNum.innerHTML = total
  1176. var slp = new SimplePagination(last_page)
  1177. slp.init({
  1178. container: '.page-box',
  1179. onPageChange: state => {
  1180. page = state.pageNumber
  1181. // console.log(page)
  1182. getImgList(page,groupId)
  1183. slectImg()
  1184. startNum.innerHTML = '0'
  1185. imgObj = {}
  1186. imgArr =[]
  1187. }
  1188. })
  1189. $('#group-item').on('click','.D-gro', function() {
  1190. groupId = $(this).attr('ids')
  1191. $(this).addClass('text-bg');
  1192. $(this).siblings('p').removeClass('text-bg');
  1193. getImgList(1,groupId)
  1194. // if(total == 0) {
  1195. // totalPage = 1;
  1196. // }
  1197. startNum.innerHTML = '0'
  1198. imgObj = {}
  1199. imgArr =[]
  1200. var slp = new SimplePagination(last_page)
  1201. slp.init({
  1202. container: '.page-box',
  1203. onPageChange: state => {
  1204. page = state.pageNumber
  1205. // console.log(page)
  1206. getImgList(page,groupId)
  1207. slectImg()
  1208. startNum.innerHTML = '0'
  1209. imgObj = {}
  1210. imgArr =[]
  1211. }
  1212. })
  1213. totalNum.innerHTML = total
  1214. slectImg()
  1215. });
  1216. // 点击确定函数,获取勾选图片的数据 单个选择获取的是imgObj 多个选择获取到的是imgArr 添加图片
  1217. function determine() {
  1218. // var markBox = document.getElementById('mark-box')
  1219. // var imgDialog = document.getElementById('img-dialog')
  1220. // markBox.style.display = "none"
  1221. // imgDialog.style.display = "none"
  1222. $("#imgList .img-mark").each(function() {
  1223. $(this).removeClass("shows");
  1224. $(this).children(".sel-checkbox").prop("checked",false);
  1225. })
  1226. $("#mark-box").hide();
  1227. if(tag == 'more') {
  1228. difNum = more_img_arr[current_element_num].length;
  1229. for(let i=0;i<imgArr.length;i++) {
  1230. let html = `
  1231. <div class="multi-item items ${current_element_num}-element${difNum+i+delete_num[current_element_num]}">
  1232. <div class="img_box">
  1233. <img onerror="this.src='{{static_url('./resource/images/nopic.jpg')}}'; this.title='图片未找到'" src="${imgArr[i].url}" class="img-responsive img-thumbnail">
  1234. </div>
  1235. <input type="hidden" name="${byte_type}[]" value="${imgArr[i].attachment}">
  1236. <em class="close" title="删除这张图片" onclick="deleteMultiImage2(this,${current_element_num})">×</em>
  1237. </div>
  1238. `
  1239. $(input_image_name).parent().parent().next().append(html);
  1240. arrIndex[current_element_num].push(difNum+i+delete_num[current_element_num]);
  1241. srcArr[current_element_num].push(imgArr[i].attachment);
  1242. more_img_arr[current_element_num].push(imgArr[i].attachment);
  1243. }
  1244. let count = arrIndex[current_element_num].length;
  1245. info(count, current_element_num);
  1246. redraw(0, current_element_num);
  1247. tuofang(current_element_num);
  1248. }else {
  1249. var ipt = $(input_image_name).parent().prev();
  1250. ipt.val(imgObj.attachment);
  1251. ipt.attr("filename",imgObj.filename);
  1252. ipt.attr("url",imgObj.url);
  1253. var img = ipt.parent().next().children();
  1254. img.get(0).src = imgObj.url
  1255. }
  1256. imgArr=[];
  1257. }
  1258. // 初始值
  1259. function info(count, index){
  1260. let curr = -1;
  1261. if(index !== '' && index !== undefined && index !== null) {
  1262. curr = index;
  1263. }else {
  1264. curr = current_element_num;
  1265. }
  1266. box_w = $(`.input-group`).width();//取总宽度
  1267. if(item_w===undefined || item_w===null){
  1268. item_w = $(".multi-item").outerWidth(true);//每个item占的横向位置
  1269. item_h = $(".img_box").outerHeight(true);//每个item占的横向位置
  1270. };
  1271. col_len = Math.floor(box_w/item_w);//共分多少列
  1272. few_len = Math.ceil(count/col_len);//共分多少行
  1273. box_h[index] = item_h*few_len;
  1274. $(`.multi-img-details`).eq(curr).height(box_h[index]+"px");
  1275. }
  1276. //调用绘制
  1277. function redraw(slidetime,index){
  1278. let curr = -1;
  1279. if(index !== '' && index !== undefined && index !== null) {
  1280. curr = index;
  1281. }else {
  1282. curr = current_element_num;
  1283. }
  1284. for(var i=0;i < more_img_arr[curr].length;i++){
  1285. this.computat(i,`${curr}-element${arrIndex[curr][i]}`,slidetime);
  1286. }
  1287. }
  1288. //绘制/移动
  1289. function draw(dom,col,few,slidetime){
  1290. dom.css({
  1291. "transition-duration": slidetime+"ms",
  1292. "transform":"translate("+col+"px,"+few+"px)",
  1293. });
  1294. }
  1295. //计算位置
  1296. function computat(index,domid,slidetime){
  1297. var item = $("."+domid);
  1298. item.attr({
  1299. "item":index,
  1300. });
  1301. var col_aliquot=index%col_len;
  1302. var row_aliquot=Math.floor(index/col_len);
  1303. var index_col = item_w*(col_aliquot);
  1304. var index_few = item_h*row_aliquot;
  1305. draw(item,index_col,index_few,slidetime);
  1306. item.attr({
  1307. "col":index_col,
  1308. "few":index_few
  1309. })
  1310. }
  1311. // 排序图片值
  1312. function sortImg(curr){
  1313. for(let i = 0;i<arrIndex[curr].length;i++){
  1314. $('.multi-img-details').eq(curr).children('.items').eq(i).find("input").val(srcArr[curr][arrIndex[curr][i]]);
  1315. }
  1316. }
  1317. //取消
  1318. function cancle() {
  1319. var markBox = document.getElementById('mark-box');
  1320. markBox.style.display = "none";
  1321. $("#imgList .img-mark").each(function() {
  1322. $(this).removeClass("shows");
  1323. $(this).children(".sel-checkbox").prop("checked",false);
  1324. })
  1325. imgArr=[];
  1326. }
  1327. //关闭选择图片
  1328. function closeImgDialog() {
  1329. $("#imgList .img-mark").each(function() {
  1330. $(this).removeClass("shows");
  1331. $(this).children(".sel-checkbox").prop("checked",false);
  1332. })
  1333. $("#mark-box").hide();
  1334. imgArr=[];
  1335. }
  1336. //打开选择图片
  1337. function showImageDialog2(el,type,b_type,num) {
  1338. $("#mark-box").show();
  1339. input_image_name = el
  1340. tag = type || 'single'
  1341. byte_type = b_type
  1342. current_element_num = num || 0;
  1343. var file = document.getElementById('uploadfle')
  1344. if(tag== "more") {
  1345. // 多图上传
  1346. file.setAttribute('multiple', true);
  1347. }else {
  1348. file.removeAttribute('multiple');
  1349. }
  1350. slectImg();
  1351. }
  1352. //删除图片
  1353. function deleteMultiImage2(elm,index){
  1354. let curr = -1;
  1355. if(index !== '' && index !== undefined && index !== null) {
  1356. curr = index;
  1357. }else {
  1358. curr = current_element_num;
  1359. }
  1360. delete_num[current_element_num]++;//已经删除的个数
  1361. let itemi = parseInt($(elm).parent().attr("item"));
  1362. let arr2 = [];
  1363. for(var i=0;i<arrIndex[curr].length;i++){
  1364. if(i==itemi){
  1365. arrIndex[curr][i]=null;
  1366. }else if(arrIndex[curr][i]!=null){
  1367. arr2.push(arrIndex[curr][i]);
  1368. };
  1369. }
  1370. new Promise(function(resolve) {
  1371. $(elm).parent().remove();
  1372. more_img_arr[curr].splice(itemi,1);
  1373. arrIndex[curr] = arr2;
  1374. redraw(200,curr);
  1375. resolve();
  1376. }).then(function() {
  1377. // sortImg()
  1378. });
  1379. //调整高度
  1380. let count = arr2.length;//item数量
  1381. info(count, curr);
  1382. }
  1383. //拖动排序
  1384. function tuofang(index){
  1385. let curr = -1;
  1386. if(index !== '' && index !== undefined && index !== null) {
  1387. curr = index;
  1388. }else {
  1389. curr = current_element_num;
  1390. }
  1391. var stsrtcol,stsrtfew,//初始位置
  1392. mobiexident,mobieyident,//移动标识
  1393. startindex;//当前点击元素的item值
  1394. var isdrag=false;//是否可以拖动
  1395. var ischange=false;//是否有改动
  1396. var dom;//按下后移动的对象
  1397. $(".multi-img-details").eq(curr).on({
  1398. mousedown:function(e){
  1399. e.preventDefault();
  1400. startindex=parseInt($(this).attr("item"));
  1401. $(this).css({"opacity":"0.8","z-index":"10"});
  1402. var startx=e.pageX;
  1403. var starty=e.pageY;
  1404. dom =e.currentTarget;
  1405. isdrag=true;
  1406. stsrtcol=parseInt($(this).attr("col"));
  1407. stsrtfew=parseInt($(this).attr("few"));
  1408. $(this).off("mousemove").off("mouseup").off("mouseleave").on({
  1409. mousemove:function(e){
  1410. if(isdrag){
  1411. var movex=e.pageX;
  1412. var movey=e.pageY;
  1413. var mobiex=stsrtcol+movex-startx;
  1414. var mobiey=stsrtfew+movey-starty;
  1415. if(mobiex>box_w-item_w){
  1416. mobiex=box_w-item_w;
  1417. }else if(mobiex < 0){
  1418. mobiex=0;
  1419. }
  1420. if(mobiey>box_h[curr]-item_h){
  1421. mobiey=box_h[curr]-item_h;
  1422. }else if(mobiey < 0){
  1423. mobiey=0;
  1424. }
  1425. if(Math.abs(movex-startx)>10||Math.abs(movey-starty)>10){
  1426. ischange=true;
  1427. mobiexident=Math.abs(Math.ceil((mobiex-item_w/2)/item_w));
  1428. mobieyident=Math.abs(Math.ceil((mobiey-item_h/2)/item_h));
  1429. draw($(this),mobiex,mobiey,0);
  1430. }
  1431. }
  1432. },
  1433. mouseup:function(e){
  1434. if(isdrag){
  1435. isdrag=false;
  1436. $(this).css({"opacity":"1","z-index":""});
  1437. draw($(this),stsrtcol,stsrtfew,0);
  1438. if(ischange){
  1439. ischange=false;
  1440. let toposion = mobieyident*col_len+mobiexident;
  1441. let difference=toposion-startindex;
  1442. if(difference > 1){//往后
  1443. let changesitem=arrIndex[curr].splice(startindex,1)[0];
  1444. arrIndex[curr].splice(toposion-1,0,changesitem);
  1445. redraw(200, curr);
  1446. sortImg(curr);
  1447. }else if(difference < 0){//往前
  1448. var changesitem=arrIndex[curr].splice(startindex,1)[0];
  1449. arrIndex[curr].splice(toposion,0,changesitem);
  1450. redraw(200, curr);
  1451. sortImg(curr);
  1452. }
  1453. }
  1454. }
  1455. },
  1456. mouseleave:function(e){
  1457. if(isdrag){
  1458. isdrag=false;
  1459. $(this).css({"opacity":"1","z-index":""});
  1460. draw($(this),stsrtcol,stsrtfew,0);
  1461. }
  1462. },
  1463. })
  1464. },
  1465. },".items")
  1466. }
  1467. function deleteImage2(elm){
  1468. $(elm).prev().attr("src", '{{static_url("resource/images/nopic.jpg")}}');
  1469. $(elm).parent().prev().find("input").val("");
  1470. }
  1471. </script>