conditions_order.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. // 选中的地区集合
  2. var selectProvince = [] ;//20181217
  3. var selectArea = []
  4. var selectAreaCity = []
  5. var selectAreaNow = null
  6. var selectAreaArr = []
  7. var keyAllArr = []
  8. //毫秒值
  9. var msecs = 1000;
  10. // var beforeDelKeyIndex = null
  11. /* 切换市区显示 */
  12. function toggleDialog(f) {
  13. if(f) {
  14. $(".dialog").show()
  15. }else {
  16. $(".dialog").hide()
  17. }
  18. }
  19. /* 添加市Span */
  20. function showMoreCity (arr) {
  21. var box = $('.dialog>.select-area-box')
  22. var tempHTML = ''
  23. box.html(tempHTML)
  24. // console.log('--arr--', arr)
  25. arr.forEach(function (value) {
  26. // console.log('--value--', value.name)
  27. var are = value.name;
  28. //已选地区,展开省市时需选中
  29. var clazz = "";
  30. if(selectArea.length>0){
  31. if((are=="全省" && selectAreaNow && $.inArray(selectAreaNow,selectProvince)!=-1) || $.inArray(are,selectArea)!=-1){
  32. clazz = "select";
  33. selectAreaCity.push(are);
  34. }
  35. }
  36. tempHTML += '<span class="select-area '+clazz+'">' + are + '</span>'
  37. })
  38. box.html(tempHTML)
  39. }
  40. /* 省地区选中 */
  41. $(document).on('click','span.select-area', function () {
  42. var dom = $(this)
  43. var t = dom.text()
  44. if(t === '全国'){
  45. selectProvince = [];
  46. selectArea.forEach(function (value) {
  47. delAddBox(value)
  48. })
  49. return addDelBox(t,'#area-del')
  50. }
  51. /* 判断来源 */
  52. var f = dom.parent().parent().hasClass('dialog')
  53. if(f) {
  54. // console.log(t)
  55. if(t === '全省') {
  56. // console.log($(this))
  57. selectAreaCity = [t]
  58. $(this).nextAll().removeClass('select')
  59. } else {
  60. var tempI = selectAreaCity.indexOf('全省')
  61. if(tempI !== -1) {
  62. selectAreaCity.splice(tempI,1)
  63. }
  64. if(selectAreaCity.indexOf(t) !== -1) {
  65. selectAreaCity.splice(selectAreaCity.indexOf(t),1)
  66. } else {
  67. selectAreaCity.push(t)
  68. }
  69. $(this).parent().children('.select-area:eq(0)').removeClass('select')
  70. }
  71. dom.toggleClass('select')
  72. return true
  73. } else {
  74. if(t !== selectAreaNow) {
  75. selectAreaCity = []
  76. }
  77. delAddBox('全国')
  78. selectAreaNow = t
  79. }
  80. /* 展开市级 */
  81. dom.siblings().removeClass('click')
  82. var area = null
  83. chinaMapJSON.some(function (value) {
  84. var f = value.name.indexOf(t) !== -1
  85. if (f) {
  86. area = value
  87. }
  88. return f
  89. })
  90. //console.log("t:"+t)
  91. if(area.ProRemark !== '直辖市'&& area.ProRemark!='特别行政区'&& t!='台湾') {
  92. var top = ["安徽", "北京", "重庆", "福建", "广东", "广西", "贵州", "甘肃", "河北", "湖北", "黑江", "海南", "河南", "湖南", "吉林", "江苏", "江西"]
  93. if(top.indexOf(t) !== -1) {
  94. $(".dialog").addClass('top')
  95. } else {
  96. $(".dialog").removeClass('top')
  97. }
  98. dom.addClass('click')
  99. toggleDialog(true)
  100. var tempA = [{name: '全省'}].concat(area.city)
  101. selectAreaArr = area.city.map(function (v) {
  102. // return v.name.replace(/市$/g,'')
  103. return v.name
  104. })
  105. // console.log(area.city);
  106. showMoreCity(tempA)
  107. } else {
  108. addDelBox(t,'#area-del')
  109. toggleDialog(false)
  110. selectProvince.push(t);
  111. }
  112. })
  113. /* 删除地区标签 */
  114. $(document).on('click','.delete-close>i',function () {
  115. var dom = $(this).parent()
  116. var arr = dom.attr('data-arr')
  117. var index = dom.index()
  118. var f = arr === "inputDel_0"
  119. if(f) {
  120. // beforeDelKeyIndex = dom.parent().index('#inputDel_0 .column')
  121. index = window[arr].indexOf(dom.find('.key span').text())
  122. // console.log(index)
  123. window[arr].splice(index,1)
  124. keyAllArr.splice(index,1)
  125. dom.remove()
  126. } else {
  127. window[arr].splice(index,1)
  128. var i = selectProvince.indexOf(dom.text());
  129. if (i != -1){
  130. selectProvince.splice(i,1);
  131. }
  132. dom.remove()
  133. //20181228
  134. if(arr == "selectArea" && $("#area-del").children().length==0){
  135. resetAreaLT();
  136. }
  137. }
  138. //20181227
  139. if (arr && arr.indexOf("inputDel")>-1){
  140. if($("div[data-arr='"+arr+"']").length==0){
  141. $("div[id='"+arr+"']").siblings(".user-input").find("input").show();
  142. $("div[id='"+arr+"']").siblings(".add-input-w-").hide();
  143. }
  144. }
  145. })
  146. /*移除delBox*/
  147. function removeDelBox(select) {
  148. $("#area-del").find("div[data-arr='selectArea'][data-val='全国']").remove();
  149. if(select=="全国"){
  150. if(!Array.isArray(window['selectArea'])) {
  151. window['selectArea'] = []
  152. }
  153. $("#area-del").html("");
  154. }else if (select=="全省"){
  155. $("#area-del").find("div[data-arr='selectArea'][data-parent='"+select+"']").remove();
  156. window['selectArea'].splice()
  157. }else{
  158. }
  159. }
  160. /* 添加可删除标签 */
  161. function addDelBox(str,box,arr,template){
  162. // console.log('--template,arr--', template,arr)
  163. arr = arr || 'selectArea'
  164. var tempKey = arr ? 'data-arr="'+arr+'"' : ''
  165. template = template || '<div '+tempKey+' class="delete-close" >'+str+'<i class="iconfont icon-guanbi"></i></div>'
  166. var tempArr = window[arr]
  167. if(!Array.isArray(tempArr)) {
  168. window[arr] = []
  169. tempArr = window[arr]
  170. }
  171. if(tempArr.indexOf(str) === -1) {
  172. var pDom = $(box)
  173. var tempHTML = pDom.html() + template
  174. pDom.html(tempHTML)
  175. tempArr.push(str)
  176. }
  177. //20181228
  178. if(box == "#area-del" && $(box).children().length>0){
  179. $(box).parent().prev().css("padding-top","20px");
  180. }
  181. }
  182. /* 确定选中 */
  183. function areaSelect (f) {
  184. if(f) {
  185. // console.log(selectAreaCity);
  186. var sf = selectAreaCity.indexOf('全省') !== -1
  187. if(sf) {
  188. if (selectProvince.indexOf(selectAreaNow) ==-1 ){
  189. selectProvince.push(selectAreaNow)
  190. }
  191. selectAreaCity = [selectAreaNow]
  192. // console.log('s1',selectArea)
  193. selectAreaArr.forEach(function (value) {
  194. var tempI = selectArea.indexOf(value)
  195. // console.log(value,tempI)
  196. if(tempI !== -1) {
  197. delAddBox(value)
  198. }
  199. })
  200. addDelBox(selectAreaNow,'#area-del')
  201. } else {
  202. delAddBox(selectAreaNow)
  203. selectAreaCity.forEach(function (value) {
  204. addDelBox(value,'#area-del')
  205. })
  206. }
  207. } else {
  208. selectAreaCity = []
  209. }
  210. $("span.select-area").removeClass('click')
  211. selectAreaNow = null
  212. toggleDialog(false)
  213. //20181228
  214. if(selectArea.length == 0){
  215. resetAreaLT();
  216. }
  217. }
  218. /* 删除box */
  219. function delAddBox(n) {
  220. $('#area-del .delete-close').each(function () {
  221. if($(this).text() === n) {
  222. var i = selectProvince.indexOf(n);
  223. if (i != -1){
  224. selectProvince.splice(i,1);
  225. }
  226. $(this).remove()
  227. }
  228. })
  229. selectArea = []
  230. $('#area-del .delete-close').each(function () {
  231. selectArea.push($(this).text())
  232. })
  233. }
  234. /* 输入事件 */
  235. $(".user-input input").on('input',function () {
  236. var dom = $(this)
  237. var f = $.trim(dom.val()).length> 0
  238. if(f) {
  239. dom.next().show()
  240. } else {
  241. dom.next().hide()
  242. }
  243. })
  244. /* 生成子标签 */
  245. function createCKey(title,arr,clazz) {
  246. if(arr.length === 0) {
  247. return ''
  248. }
  249. var all = arr.map(function (value) {
  250. return '<span>'+value+'</span>'
  251. }).join('')
  252. return '<div class="text-box float-box '+clazz+'"><div class="title">'+title+':</div><div class="title-other float-box">'+all+'</div></div>'
  253. }
  254. /* 添加关键词标签 */
  255. function createKeyBox(t) {
  256. var appArr = appendArr
  257. var exArr = excludeArr
  258. var key = t
  259. var all = createCKey('关键词',[key],"key") + createCKey('附加词',appArr,"app") + createCKey('排除词',exArr,"ex")
  260. var template = '<div data-index="'+keyAllArr.length+'" data-arr="inputDel_0" class="delete-close">'+all+' <i class="iconfont icon-guanbi"></i> </div>'
  261. return template
  262. }
  263. function fixLeft(){
  264. var one = $("#inputDel_0 .column:eq(0)")
  265. var two = $("#inputDel_0 .column:eq(1)")
  266. var three = $("#inputDel_0 .column:eq(2)")
  267. // console.log(one.children('div').length,two.children('div').length,three.children('div').length)
  268. if(one.children('div').length === 0) {
  269. two.css('margin-left','0')
  270. }else {
  271. two.css('margin-left','8px')
  272. }
  273. if(two.children('div').length === 0) {
  274. two.css('margin-left','8px')
  275. if(one.children('div').length === 0){
  276. three.css('margin-left','0')
  277. }else {
  278. three.css('margin-left','8px')
  279. }
  280. }else {
  281. three.css('margin-left','8px')
  282. }
  283. if(three.children('div').length === 0) {
  284. three.css('margin-left','8px')
  285. }
  286. }
  287. $("#inputDel_0 .column").on('DOMNodeRemoved','div',function(){
  288. // console.log('-----------------------')
  289. setTimeout(function(){
  290. fixLeft()
  291. },80)
  292. })
  293. /* 添加可删除Input标签 */
  294. function addDelInput(t,type) {
  295. var d = document.createElement('div')
  296. var text = $(t).prev().val()
  297. if(!text){
  298. return;
  299. }
  300. $(d).html(text)
  301. text = $(d).text()
  302. text = text.replace(/(^\s*)|(\s*$)/g, "");
  303. // console.log('--text--', text)
  304. var box = 'inputDel_' + type
  305. var template = null
  306. var arr = box
  307. switch (type) {
  308. case 0: {
  309. template = createKeyBox(text)
  310. var LArr = [$("#inputDel_0 .column:eq(0)>div").length,$("#inputDel_0 .column:eq(1)>div").length,$("#inputDel_0 .column:eq(2)>div").length]
  311. var tempI = LArr.indexOf(Math.min(LArr[0],LArr[1],LArr[2]))
  312. box += ' .column:eq('+(tempI)+')'
  313. var tempArr = keyAllArr.map(function(v){return v.name})
  314. if(tempArr.indexOf(text) === -1) {
  315. keyAllArr.push({
  316. name: text,
  317. append: appendArr,
  318. exclude: excludeArr
  319. })
  320. }
  321. appendArr = []
  322. excludeArr = []
  323. $(".add-input-w input.sm").remove()
  324. $(".add-input-w").css("display","none");
  325. $("#addKeyword").css("display","block");
  326. setTimeout(function(){
  327. fixLeft()
  328. },80)
  329. break
  330. }
  331. case 1:{
  332. $("#addBuyer").css("display","block");
  333. break
  334. }
  335. case 2:{
  336. $("#addWinner").css("display","block");
  337. break
  338. }
  339. }
  340. $(t).prev().val('')
  341. $(t).prev().hide();
  342. $(t).hide()
  343. addDelBox(text,'#'+box,arr,template)
  344. }
  345. /* 采购单位、中标单位 input-blur -- 添加可删除Input标签 -- 20190103*/
  346. function addDelInputB(t,type) {
  347. setTimeout(() => {
  348. dataNode.buyerSearchListShow = false
  349. dataNode.winnerSearchListShow = false
  350. $('.buyer-search-list').hide()
  351. $('.winner-search-list').hide()
  352. var d = document.createElement('div');
  353. var text = $(t).val();
  354. if(!text){
  355. return;
  356. }
  357. $(d).html(text);
  358. text = $(d).text();
  359. text = text.replace(/(^\s*)|(\s*$)/g, "")
  360. var box = 'inputDel_' + type;
  361. var arr = box;
  362. switch (type) {
  363. case 1:{
  364. $("#addBuyer").show(msecs);
  365. break
  366. }
  367. case 2:{
  368. $("#addWinner").show(msecs);
  369. break
  370. }
  371. }
  372. $(t).val('');
  373. $(t).hide();
  374. addDelBox(text,'#'+box,arr,null);
  375. }, 500);
  376. }
  377. /* 添加排除/附加词 */
  378. var excludeArr = []
  379. var appendArr = []
  380. function addOtherInput(t,f) {
  381. if($("#keyInput").val()==""){
  382. return false;
  383. }
  384. var temp = f ? '请输入附加词' : '请输入排除词'
  385. var input = document.createElement('input')
  386. input.className = 'sm'
  387. input.placeholder = temp
  388. input.maxLength = 20;
  389. // console.log('--$(input)--', $(input))
  390. if(f){
  391. var l = appendArr.length
  392. $(input).on('input',function () {
  393. var val = $.trim($(this).val()).replace(/\s/g,"");
  394. if(val){
  395. appendArr[l] = val
  396. }else {
  397. appendArr.splice(l,1)
  398. }
  399. })
  400. }else {
  401. var l = excludeArr.length
  402. $(input).on('input',function () {
  403. var val = $.trim($(this).val()).replace(/\s/g,"");
  404. if(val){
  405. excludeArr[l] = val
  406. }else{
  407. excludeArr.splice(l,1)
  408. }
  409. })
  410. }
  411. $(t).before(input)
  412. $(input).focus();
  413. }
  414. /* 关键词标签点击修改 */
  415. var nowSpan = null
  416. var dataIndex = 0;
  417. var textBoxClass = "";
  418. $(document).on('click','#inputDel_0 .title-other>span',function (e) {
  419. var par = $(this).parent().parent();
  420. dataIndex = par.parent().attr("data-index");
  421. if(par.hasClass("key")){
  422. textBoxClass = "key";
  423. }else if(par.hasClass("app")){
  424. textBoxClass = "app";
  425. }else if(par.hasClass("ex")){
  426. textBoxClass = "ex";
  427. }
  428. var xy = $(this).offset()
  429. // console.log('--xy--', xy)
  430. var x = xy.top + 30
  431. var maxY = $(document).width() - 600
  432. var y = maxY < xy.left ? maxY : xy.left
  433. nowSpan = $(this)
  434. // console.log('--$(this).offset()--', xy)
  435. var text = $(this).text()
  436. $('.edit-user-input').children('.up-icon').css({
  437. left: xy.left - y + 'px'
  438. })
  439. $('.edit-user-input').css({
  440. top: x + 'px',
  441. left: y + 'px'
  442. }).show().children('input').val(text)
  443. // console.log('--text--', text)
  444. })
  445. /* 修改关键词标签文字 */
  446. $(".edit-user-input").click(function (e) {
  447. e.stopPropagation()
  448. e.preventDefault()
  449. })
  450. $('.conditions-box').click(function () {
  451. hideEdit()
  452. })
  453. function hideEdit () {
  454. $('.edit-user-input').hide()
  455. $(".edit-user-input input").val('')
  456. }
  457. function editInput(t,f){
  458. var dom = $(t)
  459. var text = $(t).siblings('input.sm').val()
  460. if(f) {
  461. nowSpan.text(text)
  462. } else {
  463. nowSpan.remove()
  464. }
  465. hideEdit()
  466. editKeywordBox();
  467. }
  468. /*删除关键词时,删除box;全部删除附加词或者排除词时,删除子box 20181227*/
  469. function editKeywordBox() {
  470. var par = $("div[data-arr='inputDel_0'][data-index="+dataIndex+"]");
  471. var son = par.children("."+textBoxClass).find("div:eq(1)");
  472. var htm = son.html();
  473. if(!htm){
  474. if(textBoxClass=="key"){
  475. par.remove();
  476. $("div[id='inputDel_0']").siblings(".user-input").find("input").show();
  477. $("div[id='inputDel_0']").siblings(".add-input-w-").css("display","none");
  478. }else{
  479. son.parent().remove();
  480. }
  481. }
  482. }
  483. /*重置,区域-左侧标签居上距离 20181228*/
  484. function resetAreaLT() {
  485. $("#area-del").parent().prev().css("padding-top","8px");
  486. }