Kind.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. <template>
  2. <div class="selector" >
  3. <a class="show-filter" @click="show_filter = !show_filter">
  4. <span v-text="show_filter?'收起筛选 ':'展开筛选 '"></span>
  5. <i :class="show_filter?'fa fa-angle-up':'fa fa-angle-down'"></i>
  6. </a>
  7. <div v-show="show_filter">
  8. <div class="sl-wrap" v-if="good_list.total > 0">
  9. <div class="sl-key f14">类目:</div>
  10. <div class="sl-value">
  11. <span v-for="(kind_temp, index) in kind_exp_arr">
  12. <div class="sl-filter" @click="click_kind_exp(kind_temp.ki_id, index)">
  13. <a class="text-num" v-text="kind_temp.ki_name_cn"></a>
  14. <span><i class="fa fa-close"></i></span>
  15. </div>
  16. </span>
  17. <ul :class="show_kind">
  18. <li><a class="f14" @click="restore('kind')">全部</a></li>
  19. <li v-for="(item, index) in list_kind">
  20. <a v-text="item.ki_name_cn" class="f14" @click="click_kind(item.ki_id, index)" :title="item.ki_name_cn"></a>
  21. </li>
  22. </ul>
  23. </div>
  24. <div class="sl-clear"></div>
  25. <div class="sl-ext">
  26. <a @click="click_kind_more" v-if="list_kind.length>17">
  27. <span v-text="kind_open?'更多':'收起'"></span>
  28. <i class="fa fa-angle-down ng-scope" v-if="kind_open"></i>
  29. <i class="fa fa-angle-up ng-scope" v-if="!kind_open"></i>
  30. </a>
  31. </div>
  32. </div>
  33. <div class="sl-wrap" v-if="good_list.total > 0 && !list_data_brands">
  34. <div class="sl-key f14">品牌:</div>
  35. <div class="sl-value" >
  36. <span v-for="(brand_temp, index) in brand_exp_arr" >
  37. <div class="sl-filter" @click="click_brand_exp(brand_temp.br_id, index)">
  38. <a class="text-num" v-text="brand_temp.br_name_cn"></a>
  39. <span><i class="fa fa-close"></i></span>
  40. </div>
  41. </span>
  42. <ul :class="show_brand">
  43. <li><a class="f14" @click="restore('brand')">全部</a></li>
  44. <li v-for="(item, index) in list_brand">
  45. <a v-text="item.br_name_cn" class="f14" @click="click_brand(item.br_id, index)" :title="item.br_name_cn"></a>
  46. </li>
  47. </ul>
  48. </div>
  49. <div class="sl-clear"></div>
  50. <div class="sl-ext" v-if="list_brand.length>17">
  51. <a @click="click_brand_more">
  52. <span v-text="brand_open?'更多':'收起'"></span>
  53. <i class="fa fa-angle-down ng-scope" v-if="brand_open"></i>
  54. <i class="fa fa-angle-up ng-scope" v-if="!brand_open"></i>
  55. </a>
  56. </div>
  57. </div>
  58. <div class="sl-wrap" v-if="list_store_type.length != 'undefined' && list_store_type.length > 0" style="height: 40px">
  59. <div class="sl-key f14">货源:</div>
  60. <div class="sl-value">
  61. <ul class="list-inline" >
  62. <li><a class="f14" @click="restore('store')">全部</a></li>
  63. <li>
  64. <div class="f14" style="color: #999;" v-if="!getType(list_store_type,store_type_co)&&!co_click_flag">寄售</div>
  65. <a class="f14" v-if="getType(list_store_type,store_type_co)&&!co_click_flag" @click="click_store_type('CONSIGNMENT')">寄售</a>
  66. <span v-if="co_click_flag" @click="cancel_store_type('CONSIGNMENT')">
  67. <div class="sl-filter">
  68. <a class="text-num" >寄售</a>
  69. <span><i class="fa fa-close"></i></span>
  70. </div>
  71. </span>
  72. </li>
  73. <li>
  74. <div class="f14" style="color: #999;" v-if="!getType(list_store_type,store_type_di)&&!di_click_flag">经销</div>
  75. <a class="f14" v-if="getType(list_store_type,store_type_di)&&!di_click_flag" @click="click_store_type('DISTRIBUTION')">经销</a>
  76. <span v-if="di_click_flag" @click="cancel_store_type('DISTRIBUTION')">
  77. <div class="sl-filter">
  78. <a class="text-num" >经销</a>
  79. <span><i class="fa fa-close"></i></span>
  80. </div>
  81. </span>
  82. </li>
  83. <li>
  84. <div class="f14" style="color: #999;" v-if="!getType(list_store_type,store_type_or)&&!or_click_flag">原厂</div>
  85. <a class="f14" v-if="getType(list_store_type,store_type_or)&&!or_click_flag" @click="click_store_type('ORIGINAL_FACTORY')">原厂</a>
  86. <span v-if="or_click_flag" @click="cancel_store_type('ORIGINAL_FACTORY')">
  87. <div class="sl-filter">
  88. <a class="text-num" >原厂</a>
  89. <span><i class="fa fa-close"></i></span>
  90. </div>
  91. </span>
  92. </li>
  93. <li>
  94. <div class="f14" style="color: #999;" v-if="!getType(list_store_type,store_type_ag)&&!ag_click_flag">代理</div>
  95. <a class="f14" v-if="getType(list_store_type,store_type_ag)&&!ag_click_flag" @click="click_store_type('AGENCY')">代理</a>
  96. <span v-if="ag_click_flag" @click="cancel_store_type('AGENCY')">
  97. <div class="sl-filter" >
  98. <a class="text-num" >代理</a>
  99. <span><i class="fa fa-close"></i></span>
  100. </div>
  101. </span>
  102. </li>
  103. </ul>
  104. </div>
  105. </div>
  106. <div class="sl-wrap" v-if="list_crname.length != 'undefined' && list_crname.length > 0" style="height: 40px">
  107. <div class="sl-key f14">仓库:</div>
  108. <div class="sl-value">
  109. <ul class="list-inline" >
  110. <li><a class="f14" @click="restore('crname')">全部</a></li>
  111. <li>
  112. <a v-if="!crnameInArr(list_crname_temp, {'cr_name':'RMB'})&&!crname_click_flag.rmb_click_flag" class="f14" @click="click_crname('RMB')">大陆</a>
  113. <div style="color: #999;" v-if="crnameInArr(list_crname_temp, {'cr_name':'RMB'})&&!crname_click_flag.rmb_click_flag" class="f14">大陆</div>
  114. <span v-if="crname_click_flag.rmb_click_flag" @click="cancel_crname('RMB')">
  115. <div class="sl-filter">
  116. <a class="text-num" >大陆</a>
  117. <span><i class="fa fa-close"></i></span>
  118. </div>
  119. </span>
  120. </li>
  121. <li>
  122. <a v-if="!crnameInArr(list_crname_temp, {'cr_name':'USD'})&&!crname_click_flag.usd_click_flag" class="f14" @click="click_crname('USD')">香港</a>
  123. <div style="color: #999;" v-if="crnameInArr(list_crname_temp, {'cr_name':'USD'})&&!crname_click_flag.usd_click_flag" class="f14">香港</div>
  124. <span v-if="crname_click_flag.usd_click_flag" @click="cancel_crname('USD')">
  125. <div class="sl-filter">
  126. <a class="text-num" >香港</a>
  127. <span><i class="fa fa-close"></i></span>
  128. </div>
  129. </span>
  130. </li>
  131. </ul>
  132. </div>
  133. </div>
  134. <div class="sl-wrap" v-if="list_crname.length != 'undefined' && list_crname.length > 0" style="height: 40px">
  135. <div class="sl-key f14">货币:</div>
  136. <div class="sl-value">
  137. <ul class="list-inline" >
  138. <li><a class="f14" @click="restore('crname')">全部</a></li>
  139. <li>
  140. <a v-if="!crnameInArr(list_crname_temp, {'cr_name':'RMB'})&&!crname_click_flag.rmb_click_flag" class="f14" @click="click_crname('RMB')">人民币</a>
  141. <div style="color: #999;" v-if="crnameInArr(list_crname_temp, {'cr_name':'RMB'})&&!crname_click_flag.rmb_click_flag" class="f14">人民币</div>
  142. <span v-if="crname_click_flag.rmb_click_flag" @click="cancel_crname('RMB')">
  143. <div class="sl-filter">
  144. <a class="text-num" >人民币</a>
  145. <span><i class="fa fa-close"></i></span>
  146. </div>
  147. </span>
  148. </li>
  149. <li>
  150. <a v-if="!crnameInArr(list_crname_temp, {'cr_name':'USD'})&&!crname_click_flag.usd_click_flag" class="f14" @click="click_crname('USD')">美元</a>
  151. <div style="color: #999;" v-if="crnameInArr(list_crname_temp, {'cr_name':'USD'})&&!crname_click_flag.usd_click_flag" class="f14">美元</div>
  152. <span v-if="crname_click_flag.usd_click_flag" @click="cancel_crname('USD')">
  153. <div class="sl-filter">
  154. <a class="text-num" >美元</a>
  155. <span><i class="fa fa-close"></i></span>
  156. </div>
  157. </span>
  158. </li>
  159. </ul>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. </template>
  165. <script>
  166. export default {
  167. data () {
  168. return {
  169. show_filter: true,
  170. kind_open: true,
  171. brand_open: true,
  172. show_kind: 'list-inline',
  173. show_brand: 'list-inline',
  174. store_type_co: {store_type: 'CONSIGNMENT'},
  175. store_type_ag: {store_type: 'AGENCY'},
  176. store_type_di: {store_type: 'DISTRIBUTION'},
  177. store_type_or: {store_type: 'ORIGINAL_FACTORY'},
  178. filter: {},
  179. kind_arr: [],
  180. brand_arr: [],
  181. type_arr: [],
  182. crname_arr: [],
  183. kind_exp_arr: [],
  184. brand_exp_arr: [],
  185. co_click_flag: false,
  186. ag_click_flag: false,
  187. di_click_flag: false,
  188. or_click_flag: false,
  189. crname_click_flag: {
  190. rmb_click_flag: false,
  191. usd_click_flag: false
  192. }
  193. }
  194. },
  195. computed: {
  196. list_kinds () {
  197. return this.$store.state.searchData.searchKinds.kinds
  198. },
  199. list_kind () {
  200. return this.list_kinds.data
  201. },
  202. list_brands () {
  203. return this.$store.state.searchData.searchBrands.brands
  204. },
  205. list_brand () {
  206. return this.list_brands.data
  207. },
  208. list_store_types () {
  209. return this.$store.state.searchData.searchStoreType.store_type
  210. },
  211. list_store_type () {
  212. return this.list_store_types.data
  213. },
  214. list_crnames () {
  215. return this.$store.state.searchData.searchCrname.crname
  216. },
  217. list_crname () {
  218. return this.list_crnames.data
  219. },
  220. list_crname_temp () {
  221. let arr = this.list_crnames.data
  222. if (!(JSON.stringify(arr).indexOf(JSON.stringify({cr_name: 'RMB-USD'})) === -1)) {
  223. return [{cr_name: 'RMB'}, {cr_name: 'USD'}]
  224. } else {
  225. return arr
  226. }
  227. },
  228. good_lists () {
  229. return this.$store.state.searchData.searchList.lists
  230. },
  231. good_list () {
  232. return this.good_lists.data
  233. },
  234. list_data_brands () {
  235. return this.good_list.brands
  236. }
  237. },
  238. methods: {
  239. click_kind_more: function (event) {
  240. if (this.kind_open) {
  241. this.show_kind = 'list-inline2'
  242. } else {
  243. this.show_kind = 'list-inline'
  244. }
  245. this.kind_open = !this.kind_open
  246. },
  247. click_brand_more: function (event) {
  248. if (this.brand_open) {
  249. this.show_brand = 'list-inline2'
  250. } else {
  251. this.show_brand = 'list-inline'
  252. }
  253. this.brand_open = !this.brand_open
  254. },
  255. getType: function (arr, obj) {
  256. return !(JSON.stringify(arr).indexOf(JSON.stringify(obj)) === -1)
  257. },
  258. click_kind: function (id, index) {
  259. this.kind_arr.push(id)
  260. this.$emit('kindFilterEvent', this.kind_arr)
  261. this.kind_exp_arr.push(this.list_kind[index])
  262. this.list_kind.splice(index, index + 1)
  263. },
  264. click_brand: function (id, index) {
  265. this.brand_arr.push(id)
  266. this.$emit('brandFilterEvent', this.brand_arr)
  267. this.brand_exp_arr.push(this.list_brand[index])
  268. this.list_brand.splice(index, index + 1)
  269. },
  270. click_store_type: function (type) {
  271. this.type_arr.push(type)
  272. this.$emit('typeFilterEvent', this.type_arr)
  273. if (type === 'CONSIGNMENT') {
  274. this.co_click_flag = true
  275. } else if (type === 'AGENCY') {
  276. this.ag_click_flag = true
  277. } else if (type === 'DISTRIBUTION') {
  278. this.di_click_flag = true
  279. } else if (type === 'ORIGINAL_FACTORY') {
  280. this.or_click_flag = true
  281. }
  282. },
  283. cancel_store_type: function (type) {
  284. if (type === 'CONSIGNMENT') {
  285. this.co_click_flag = false
  286. } else if (type === 'AGENCY') {
  287. this.ag_click_flag = false
  288. } else if (type === 'DISTRIBUTION') {
  289. this.di_click_flag = false
  290. } else if (type === 'ORIGINAL_FACTORY') {
  291. this.or_click_flag = false
  292. }
  293. let idx = this.getIndex(this.type_arr, type)
  294. this.type_arr.splice(idx, idx + 1)
  295. this.$emit('typeFilterEvent', this.type_arr)
  296. },
  297. click_crname: function (name) {
  298. this.crname_arr.push(name)
  299. if (this.getIndex(this.crname_arr, 'RMB-USD') === -1) {
  300. this.crname_arr.push('RMB-USD')
  301. }
  302. if (name === 'RMB') {
  303. this.crname_click_flag.rmb_click_flag = true
  304. } else if (name === 'USD') {
  305. this.crname_click_flag.usd_click_flag = true
  306. }
  307. this.$emit('crnameFilterEvent', this.crname_arr)
  308. this.$emit('crnameFlagEvent', this.crname_click_flag)
  309. },
  310. cancel_crname: function (name) {
  311. let idx = this.getIndex(this.crname_arr, name)
  312. this.crname_arr.splice(idx, idx + 1)
  313. if (this.crname_arr.length === 1) {
  314. this.crname_arr = []
  315. }
  316. if (name === 'RMB') {
  317. this.crname_click_flag.rmb_click_flag = false
  318. } else if (name === 'USD') {
  319. this.crname_click_flag.usd_click_flag = false
  320. }
  321. this.$emit('crnameFilterEvent', this.crname_arr)
  322. this.$emit('crnameFlagEvent', this.crname_click_flag)
  323. },
  324. click_kind_exp: function (id, index) {
  325. let idx = this.getIndex(this.kind_arr, id)
  326. this.kind_arr.splice(idx, idx + 1)
  327. this.$emit('kindFilterEvent', this.kind_arr)
  328. this.kind_exp_arr.splice(index, index + 1)
  329. },
  330. click_brand_exp: function (id, index) {
  331. let idx = this.getIndex(this.brand_arr, id)
  332. this.brand_arr.splice(idx, idx + 1)
  333. this.$emit('brandFilterEvent', this.brand_arr)
  334. this.brand_exp_arr.splice(index, index + 1)
  335. },
  336. restore: function (name) {
  337. if (name === 'kind') {
  338. this.list_kind.concat(this.kind_exp_arr)
  339. this.kind_exp_arr = []
  340. this.kind_arr = []
  341. this.$emit('kindFilterEvent', this.kind_arr)
  342. } else if (name === 'brand') {
  343. this.list_brand.concat(this.brand_exp_arr)
  344. this.brand_exp_arr = []
  345. this.brand_arr = []
  346. this.$emit('brandFilterEvent', this.brand_arr)
  347. } else if (name === 'store') {
  348. this.list_store_type.concat(this.type_arr)
  349. this.type_arr = []
  350. this.$emit('typeFilterEvent', this.type_arr)
  351. this.co_click_flag = false
  352. this.ag_click_flag = false
  353. this.di_click_flag = false
  354. this.or_click_flag = false
  355. } else if (name === 'crname') {
  356. this.list_crname.concat(this.crname_arr)
  357. this.crname_arr = []
  358. this.$emit('crnameFilterEvent', this.crname_arr)
  359. this.rmb_click_flag = false
  360. this.usd_click_flag = false
  361. }
  362. },
  363. getIndex: function (arr, obj) {
  364. for (let i = 0; i < arr.length; i++) {
  365. if (arr[i] === obj) {
  366. return i
  367. }
  368. }
  369. return -1
  370. },
  371. crnameInArr: function (arr, obj) {
  372. return (JSON.stringify(arr).indexOf(JSON.stringify(obj)) === -1)
  373. }
  374. }
  375. }
  376. </script>
  377. <style scoped>
  378. .show-filter{
  379. position: relative;
  380. left: 1100px;
  381. top: -10px;
  382. color: #888;
  383. border: 1px solid #aaa;
  384. padding: 3px 8px;
  385. background: rgba(238, 238, 238, 0.34);
  386. }
  387. #searchResult .selector >div{
  388. margin-bottom: 20px;
  389. }
  390. #searchResult .selector .sl-wrap {
  391. position: relative;
  392. padding: 5px 5px;
  393. font-size: 12px;
  394. line-height: 30px;
  395. border: 1px solid #e5e5e5;
  396. }
  397. #searchResult .selector .sl-wrap .sl-key {
  398. float: left;
  399. width: 100px;
  400. }
  401. .f14 {
  402. font-size: 14px;
  403. }
  404. #searchResult .selector .sl-wrap .sl-value {
  405. margin-left: 110px;
  406. margin-right: 50px;
  407. }
  408. #searchResult .selector .sl-wrap .sl-value span >.sl-filter {
  409. display: inline-block;
  410. position: relative;
  411. line-height: 22px;
  412. padding-left: 10px;
  413. padding-right: 30px;
  414. border: 1px solid #ccc;
  415. cursor: pointer;
  416. height: 22px;
  417. margin-right: 10px;
  418. }
  419. #searchResult .selector .sl-wrap .sl-value span >.sl-filter a{
  420. color: #666;
  421. text-decoration: none;
  422. }
  423. #searchResult .selector .sl-wrap .sl-value span >.sl-filter span{
  424. display: inline-block;
  425. position: absolute;
  426. right: 0;
  427. top: 0;
  428. height: 100%;
  429. width: 20px;
  430. text-align: center;
  431. background: #ccc;
  432. color: #fff;
  433. }
  434. #searchResult .selector .sl-wrap .sl-value span >.sl-filter:hover {
  435. border: 1px solid #f50;
  436. }
  437. #searchResult .selector .sl-wrap .sl-value span >.sl-filter:hover a{
  438. color: #f50;
  439. }
  440. #searchResult .selector .sl-wrap .sl-value span >.sl-filter:hover span{
  441. background: #f50;
  442. }
  443. #searchResult .selector .sl-wrap .sl-clear {
  444. clear: both;
  445. }
  446. #searchResult .selector .sl-wrap .sl-ext {
  447. width: 40px;
  448. top: 5px;
  449. position: absolute;
  450. right: 0;
  451. }
  452. .list-inline {
  453. height: 60px;
  454. overflow: hidden;
  455. margin-bottom: 0;
  456. padding-left: 0;
  457. margin-left: -5px;
  458. list-style: none;
  459. }
  460. .list-inline2 {
  461. height: 100%;
  462. overflow: hidden;
  463. margin-bottom: 0;
  464. padding-left: 0;
  465. margin-left: -5px;
  466. list-style: none;
  467. }
  468. #searchResult .selector .sl-wrap .sl-value ul >li {
  469. display: inline-block;
  470. padding-right: 5px;
  471. padding-left: 5px;
  472. margin-right: 20px;
  473. width: 10%;
  474. height: 23px;
  475. line-height: 23px;
  476. overflow: hidden;
  477. text-overflow: ellipsis;
  478. white-space: nowrap;
  479. }
  480. #searchResult .selector .sl-wrap .sl-value ul a{
  481. color: #1162a4;
  482. }
  483. #searchResult .selector .sl-wrap .sl-value ul a:hover{
  484. text-decoration: none;
  485. color: #f50;
  486. }
  487. .sl-ext a{
  488. color: black;
  489. }
  490. .sl-ext a:hover{
  491. color: #5078cb;
  492. text-decoration: none;
  493. }
  494. </style>