TimeSelectorContent.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905
  1. <template>
  2. <div class="selector-content" v-if="selectorType === 'card'" key="s-content">
  3. 暂不提供时间选择的card组件
  4. </div>
  5. <div
  6. class="selector-content"
  7. v-else-if="selectorType === 'line'"
  8. key="s-content"
  9. >
  10. <div class="select-group-container">
  11. <div
  12. v-for="(item, index) in timeSelectList"
  13. :key="index"
  14. class="j-button-item bgc"
  15. :class="{
  16. active: item.selected
  17. }"
  18. @click="clickTimeButton(item)"
  19. >
  20. {{ item.name }}
  21. </div>
  22. </div>
  23. <div
  24. v-if="showExactConf"
  25. class="date-time-container"
  26. :class="{ active: showActive }"
  27. >
  28. <div v-if="isDateRange">
  29. <el-date-picker
  30. v-model="dateTimeRangeState"
  31. class="date-picker-range"
  32. type="daterange"
  33. prefix-icon="none"
  34. :editable="false"
  35. align="left"
  36. range-separator="—"
  37. :start-placeholder="dateTimePickerState.startPlaceHolder"
  38. :end-placeholder="dateTimePickerState.endPlaceHolder"
  39. :append-to-body="false"
  40. :placement="placement"
  41. :unlink-panels="unlinkPanels"
  42. @change="onDateRangeChange"
  43. >
  44. </el-date-picker>
  45. </div>
  46. <div v-else>
  47. <el-date-picker
  48. v-model="dateTimePickerState.start"
  49. class="date-time-item left"
  50. :type="dateTimePickerConf.type"
  51. :editable="dateTimePickerConf.editable"
  52. :align="dateTimePickerConf.align"
  53. :prefix-icon="dateTimePickerConf.prefixIcon"
  54. :format="dateTimePickerConf.format"
  55. :placeholder="dateTimePickerState.startPlaceHolder"
  56. :picker-options="startPickerOptions"
  57. :append-to-body="false"
  58. :placement="placement"
  59. @change="startDatePickerChange"
  60. @focus="showConfirmHandle"
  61. >
  62. </el-date-picker>
  63. <el-date-picker
  64. v-model="dateTimePickerState.end"
  65. class="date-time-item right"
  66. :type="dateTimePickerConf.type"
  67. :editable="dateTimePickerConf.editable"
  68. :align="dateTimePickerConf.align"
  69. :prefix-icon="dateTimePickerConf.prefixIcon"
  70. :format="dateTimePickerConf.format"
  71. :placeholder="dateTimePickerState.endPlaceHolder"
  72. :picker-options="endPickerOptions"
  73. :append-to-body="false"
  74. :placement="placement"
  75. @change="endDatePickerChange"
  76. @focus="showConfirmHandle"
  77. >
  78. </el-date-picker>
  79. </div>
  80. <el-button
  81. class="confirm-btn"
  82. v-if="showConfirmButton && showConBtn"
  83. @click="confirmHandle"
  84. >确定</el-button
  85. >
  86. </div>
  87. </div>
  88. </template>
  89. <script>
  90. import { DatePicker } from 'element-ui'
  91. import { dateFormatter } from '@/utils/'
  92. import moment from 'moment'
  93. import 'moment/locale/zh-cn'
  94. import { uniqWith } from 'lodash'
  95. moment.locale('zh-cn')
  96. const timeSelectMap = {
  97. default: [
  98. {
  99. name: '全部',
  100. value: 'all',
  101. selected: true
  102. },
  103. {
  104. name: '最近7天',
  105. value: 'lately7',
  106. selected: false
  107. },
  108. {
  109. name: '最近30天',
  110. value: 'lately30',
  111. selected: false
  112. },
  113. {
  114. name: '去年',
  115. value: 'lastYear',
  116. selected: false
  117. }
  118. ],
  119. sub: [
  120. {
  121. name: '全部',
  122. value: 'all',
  123. selected: true
  124. },
  125. {
  126. name: '今天',
  127. value: 'today',
  128. selected: false
  129. },
  130. {
  131. name: '昨天',
  132. value: 'yesterday',
  133. selected: false
  134. },
  135. {
  136. name: '最近7天',
  137. value: 'lately7',
  138. selected: false
  139. },
  140. {
  141. name: '最近30天',
  142. value: 'lately30',
  143. selected: false
  144. }
  145. ],
  146. more: [
  147. {
  148. name: '近3个月',
  149. value: 'lately90',
  150. selected: true
  151. },
  152. {
  153. name: '近半年',
  154. value: 'lately180',
  155. selected: false
  156. },
  157. {
  158. name: '今年全年',
  159. value: 'thisYear',
  160. selected: false
  161. },
  162. {
  163. name: '去年至今',
  164. value: 'sinceLastYear',
  165. selected: false
  166. },
  167. {
  168. name: '前年至今',
  169. value: 'sinceYearBeforeLast',
  170. selected: false
  171. }
  172. ],
  173. allAndlately90: [
  174. {
  175. name: '全部',
  176. value: 'all',
  177. selected: true
  178. },
  179. {
  180. name: '最近3个月',
  181. value: 'lately90',
  182. selected: false
  183. }
  184. ],
  185. bidSearch: [
  186. {
  187. name: '最近7天',
  188. value: 'lately7',
  189. selected: false
  190. },
  191. {
  192. name: '最近30天',
  193. value: 'lately30',
  194. selected: false
  195. },
  196. {
  197. name: '最近1年',
  198. value: 'sinceLastYear',
  199. selected: true
  200. },
  201. {
  202. name: '最近3年',
  203. value: 'sinceLastThreeYear',
  204. selected: false
  205. },
  206. {
  207. name: '最近5年',
  208. value: 'sinceLastFiveYear',
  209. selected: false
  210. }
  211. ],
  212. // 最近3天最近7天最近30天近3个月
  213. supplySearch: [
  214. {
  215. name: '全部',
  216. value: 'all',
  217. selected: true
  218. },
  219. {
  220. name: '今天',
  221. value: 'today',
  222. selected: false
  223. },
  224. {
  225. name: '最近3天',
  226. value: 'lately3',
  227. selected: false
  228. },
  229. {
  230. name: '最近7天',
  231. value: 'lately7',
  232. selected: false
  233. },
  234. {
  235. name: '最近30天',
  236. value: 'lately30',
  237. selected: false
  238. },
  239. {
  240. name: '最近3个月',
  241. value: 'lately90',
  242. selected: false
  243. }
  244. ],
  245. expire: [
  246. {
  247. name: '全部',
  248. value: 'all',
  249. selected: true
  250. },
  251. {
  252. name: '本月到期',
  253. value: '1',
  254. selected: false
  255. },
  256. {
  257. name: '1-3个月到期',
  258. value: '1-3',
  259. selected: false
  260. },
  261. {
  262. name: '3-6个月到期',
  263. value: '3-6',
  264. selected: false
  265. },
  266. {
  267. name: '6-12个月到期',
  268. value: '6-12',
  269. selected: false
  270. },
  271. {
  272. name: '12个月后到期',
  273. value: '12',
  274. selected: false
  275. }
  276. ],
  277. bidPushTime: [
  278. {
  279. name: '全部',
  280. value: 'all',
  281. selected: true
  282. },
  283. {
  284. name: '最近7天',
  285. value: 'lately7',
  286. selected: false
  287. },
  288. {
  289. name: '最近30天',
  290. value: 'lately30',
  291. selected: false
  292. },
  293. {
  294. name: '最近1年',
  295. value: 'sinceLastYear',
  296. selected: false
  297. },
  298. {
  299. name: '最近3年',
  300. value: 'sinceLastThreeYear',
  301. selected: false
  302. },
  303. {
  304. name: '最近5年',
  305. value: 'sinceLastFiveYear',
  306. selected: false
  307. }
  308. ],
  309. collectTime: [
  310. {
  311. name: '全部',
  312. value: 'all',
  313. selected: true
  314. },
  315. {
  316. name: '今天',
  317. value: 'today',
  318. selected: false
  319. },
  320. {
  321. name: '昨天',
  322. value: 'yesterday',
  323. selected: false
  324. },
  325. {
  326. name: '最近7天',
  327. value: 'lately7',
  328. selected: false
  329. },
  330. {
  331. name: '最近30天',
  332. value: 'lately30',
  333. selected: false
  334. }
  335. ]
  336. }
  337. function getTimeSelectList(map) {
  338. let arr = []
  339. for (const key in map) {
  340. const item = map[key]
  341. if (Array.isArray(item)) {
  342. arr = arr.concat(item)
  343. }
  344. }
  345. // 数组去重
  346. const uniqed = uniqWith(arr, function (a, b) {
  347. return a.value === b.value
  348. })
  349. return uniqed
  350. }
  351. // const timeSelectListAll = getTimeSelectList(timeSelectMap)
  352. export default {
  353. name: 'time-selector-content',
  354. components: {
  355. [DatePicker.name]: DatePicker
  356. },
  357. props: {
  358. beforeChange: Function,
  359. selectorType: {
  360. type: String,
  361. default: 'card' // card/line
  362. },
  363. selectorTime: {
  364. type: String,
  365. default: 'default' // default/sub/more/bidSearch
  366. },
  367. options: {
  368. type: Array,
  369. default: () => []
  370. },
  371. defaultSelectedKey: {
  372. type: String,
  373. default: 'all' // all/lately30/lately90...
  374. },
  375. showExact: {
  376. type: Boolean,
  377. default: true
  378. },
  379. // 自定义组件可以搬选返回
  380. exactCanHalf: {
  381. type: Boolean,
  382. default: false
  383. },
  384. // 是否展示确认按钮
  385. showConfirmButton: {
  386. type: Boolean,
  387. default: false
  388. },
  389. startPlaceholder: {
  390. type: String,
  391. default: ''
  392. },
  393. endPlaceholder: {
  394. type: String,
  395. default: ''
  396. },
  397. // 显示类型是否为日期范围(一个弹框内选择开始日期结束日期)
  398. isDateRange: {
  399. type: Boolean,
  400. default: false
  401. },
  402. placement: {
  403. type: String,
  404. default: 'bottom-start'
  405. },
  406. // 在范围选择器里取消两个日期面板之间的联动
  407. unlinkPanels: {
  408. type: Boolean,
  409. default: true
  410. }
  411. },
  412. data() {
  413. return {
  414. debug: false,
  415. timeSelectList: [],
  416. dateTimePickerConf: {
  417. type: 'date',
  418. editable: false,
  419. align: 'center',
  420. prefixIcon: 'clear-icon',
  421. format: 'yyyy-MM-dd'
  422. },
  423. dateTimePickerState: {
  424. start: '',
  425. end: '',
  426. startPlaceHolder: this.startPlaceholder, // 开始日期
  427. endPlaceHolder: this.endPlaceholder // 结束日期
  428. },
  429. startPickerOptions: {
  430. disabledDate: (time) => {
  431. const { end } = this.dateTimePickerState
  432. if (end) {
  433. return time.getTime() > +new Date(end)
  434. }
  435. }
  436. },
  437. endPickerOptions: {
  438. disabledDate: (time) => {
  439. const { start } = this.dateTimePickerState
  440. if (start) {
  441. return time.getTime() < +new Date(start)
  442. }
  443. }
  444. },
  445. showConBtn: false,
  446. dateTimeRangeState: []
  447. }
  448. },
  449. computed: {
  450. showExactConf() {
  451. // 如果传了options,则默认不展示exact
  452. if (this.options.length) {
  453. return this.options.includes('exact')
  454. } else {
  455. return this.showExact
  456. }
  457. },
  458. state() {
  459. return this.getState()
  460. },
  461. showActive() {
  462. let result = false
  463. if (this.showConfirmButton) {
  464. result =
  465. this.state.exact === 'exact' &&
  466. (this.dateTimePickerState.start || this.dateTimePickerState.end) &&
  467. !this.showConBtn
  468. } else {
  469. result = this.state.exact === 'exact'
  470. }
  471. return result
  472. }
  473. },
  474. created() {
  475. this.timeSelectList = this.calcTimeSelectList()
  476. this.calcLastTime()
  477. },
  478. methods: {
  479. dateFormatter,
  480. onDateRangeChange(value) {
  481. this.dateTimeRangeState = value
  482. this.dateTimePickerState.start = value[0]
  483. this.dateTimePickerState.end = value[1]
  484. this.setTimeSelectListState()
  485. this.onChange()
  486. },
  487. calcTimeSelectList() {
  488. let timeSelectList = []
  489. const propTimeSelectList = timeSelectMap[this.selectorTime]
  490. if (this.options.length) {
  491. timeSelectList = this.options
  492. .map((item) => {
  493. const conf = propTimeSelectList.find((t) => {
  494. return t.value === item
  495. })
  496. return conf
  497. })
  498. .filter((v) => !!v)
  499. } else {
  500. timeSelectList = propTimeSelectList
  501. }
  502. return timeSelectList
  503. },
  504. calcLastTime() {
  505. if (this.selectorTime === 'more') {
  506. const renameList = [
  507. 'thisYear', // 今年全年
  508. 'sinceLastYear', // 去年至今
  509. 'sinceYearBeforeLast' // 前年至今
  510. ]
  511. const thisYear = new Date().getFullYear()
  512. this.timeSelectList.forEach((item) => {
  513. if (renameList.indexOf(item.value) !== -1) {
  514. if (item.value === renameList[0]) {
  515. item.name = `${thisYear}年全年`
  516. } else if (item.value === renameList[1]) {
  517. item.name = `${thisYear - 1}年至今`
  518. } else if (item.value === renameList[2]) {
  519. item.name = `${thisYear - 2}年至今`
  520. }
  521. }
  522. })
  523. }
  524. },
  525. setState(data) {
  526. // {
  527. // start: 1620230400000, // 2021-5-6
  528. // end: 1620489600000, // 2021-5-9
  529. // exact: 'all'
  530. // }
  531. if (!data || Object.keys(data).length === 0) {
  532. this.setTimeSelectListState(this.defaultSelectedKey)
  533. } else {
  534. switch (data.exact) {
  535. case 'all':
  536. case 'today':
  537. case 'yesterday':
  538. case 'lately3':
  539. case 'lately7':
  540. case 'lately30':
  541. case 'lately90':
  542. case 'lately180':
  543. case 'thisYear':
  544. case 'sinceLastYear':
  545. case 'sinceLastThreeYear':
  546. case 'sinceLastFiveYear':
  547. case 'sinceYearBeforeLast':
  548. case 'lastYear': {
  549. this.setTimeSelectListState(data.exact)
  550. this.clearDateTimePicker()
  551. break
  552. }
  553. case 'exact': {
  554. if (!this.exactCanHalf && !this.showConfirmButton) {
  555. if (!data.start || !data.end) break
  556. }
  557. this.timeSelectList.forEach((v) => (v.selected = false))
  558. this.dateTimePickerState.start = data.start
  559. ? new Date(data.start)
  560. : null
  561. this.dateTimePickerState.end = data.end ? new Date(data.end) : null
  562. this.dateTimeRangeState = [data.start, data.end]
  563. break
  564. }
  565. default: {
  566. console.warn('exact值为空')
  567. }
  568. }
  569. }
  570. },
  571. getState() {
  572. // timeState.exact: all/lately7/lately30/lastYear/exact5种状态
  573. // 为true时候表示精确筛选,从时间选择器中获取值(其他为根据当前时间计算出的值)
  574. const timeState = {
  575. start: 0,
  576. end: 0,
  577. exact: 'exact'
  578. }
  579. const durations = {
  580. hour1: 60 * 60 * 1000,
  581. day1: 60 * 60 * 1000 * 24 * 1,
  582. day3: 60 * 60 * 1000 * 24 * 3,
  583. day7: 60 * 60 * 1000 * 24 * 7,
  584. day30: 60 * 60 * 1000 * 24 * 30
  585. }
  586. const selectButton = this.timeSelectList.find((item) => item.selected)
  587. if (selectButton) {
  588. timeState.exact = selectButton.value
  589. Object.assign(timeState, this.calcNotExactTime(timeState.exact))
  590. } else {
  591. timeState.exact = 'exact'
  592. if (this.dateTimePickerState.start) {
  593. timeState.start = this.dateTimePickerState.start.getTime()
  594. }
  595. if (this.dateTimePickerState.end) {
  596. // 结束时间为当天23:59:59
  597. timeState.end =
  598. this.dateTimePickerState.end.getTime() + (durations.day1 - 1000)
  599. }
  600. // 什么都未选择的情况
  601. if (!timeState.start && !timeState.end) {
  602. timeState.exact = ''
  603. }
  604. }
  605. return timeState
  606. },
  607. onChange() {
  608. const state = this.getState()
  609. if (this.debug) {
  610. state.startFormatted = this.dateFormatter(state.start)
  611. state.endFormatted = this.dateFormatter(state.end)
  612. console.table({
  613. start: state.startFormatted,
  614. end: state.endFormatted
  615. })
  616. }
  617. this.$emit('onChange', state)
  618. },
  619. setTimeSelectListState(value, callback) {
  620. this.timeSelectList.forEach((item) => {
  621. item.selected = item.value === value
  622. callback && callback(item)
  623. })
  624. },
  625. clearDateTimePicker() {
  626. this.dateTimePickerState.start = ''
  627. this.dateTimePickerState.end = ''
  628. this.dateTimeRangeState = []
  629. },
  630. // 计算lately7/lately30/lastYear等的开始和结束时间
  631. // endTime传入一个时间戳
  632. calcNotExactTime(exact = 'lately7', endTime = Date.now()) {
  633. const t = {
  634. start: 0,
  635. end: +new Date(endTime)
  636. }
  637. const durations = {
  638. hour1: 60 * 60 * 1000,
  639. day1: 60 * 60 * 1000 * 24 * 1,
  640. day3: 60 * 60 * 1000 * 24 * 3,
  641. day7: 60 * 60 * 1000 * 24 * 7,
  642. day30: 60 * 60 * 1000 * 24 * 30
  643. }
  644. switch (exact) {
  645. case 'today': {
  646. t.start = moment().startOf('day').format('x')
  647. t.end = moment().endOf('day').format('x')
  648. break
  649. }
  650. case 'yesterday': {
  651. t.start = moment().startOf('day').format('x') - durations.day1
  652. t.end = moment().endOf('day').format('x') - durations.day1
  653. break
  654. }
  655. case 'lately3': {
  656. t.start = t.end - durations.day3
  657. break
  658. }
  659. case 'lately7': {
  660. t.start = t.end - durations.day7
  661. break
  662. }
  663. case 'lately30': {
  664. t.start = t.end - durations.day30
  665. break
  666. }
  667. case 'lately90': {
  668. // 近90天
  669. t.start = t.end - durations.day30 * 3
  670. break
  671. }
  672. case 'lately180': {
  673. // 180天
  674. t.start = t.end - durations.day30 * 6
  675. break
  676. }
  677. case 'thisYear': {
  678. // 今年全年
  679. const year = new Date(t.end).getFullYear()
  680. t.start = +new Date(`${year}`)
  681. t.end = +new Date(`${year + 1}`) - durations.hour1 * 8 - 1
  682. break
  683. }
  684. case 'lastYear': {
  685. // 去年全年
  686. const year = new Date(t.end).getFullYear()
  687. const lastYear = year - 1
  688. t.start = +new Date(`${lastYear}`)
  689. t.end = +new Date(`${year}`) - durations.hour1 * 8 - 1
  690. break
  691. }
  692. case 'sinceLastYear': {
  693. // 去年至今
  694. const year = new Date(t.end).getFullYear()
  695. const lastYear = year - 1
  696. t.start = +new Date(`${lastYear}`)
  697. break
  698. }
  699. case 'sinceLastThreeYear': {
  700. // 去年至今
  701. const year = new Date(t.end).getFullYear()
  702. const lastYear = year - 3
  703. t.start = +new Date(`${lastYear}`)
  704. break
  705. }
  706. case 'sinceLastFiveYear': {
  707. // 去年至今
  708. const year = new Date(t.end).getFullYear()
  709. const lastYear = year - 5
  710. t.start = +new Date(`${lastYear}`)
  711. break
  712. }
  713. case 'sinceYearBeforeLast': {
  714. // 前年至今
  715. const year = new Date(t.end).getFullYear()
  716. t.start = +new Date(`${year - 2}`)
  717. break
  718. }
  719. default: {
  720. t.start = 0
  721. t.end = 0
  722. break
  723. }
  724. }
  725. return t
  726. },
  727. clickTimeButton(item) {
  728. const beforeChange = this.beforeChange
  729. if (beforeChange) {
  730. const pass = beforeChange(item)
  731. if (pass) {
  732. this.changeSelectItem(item)
  733. }
  734. } else {
  735. this.changeSelectItem(item)
  736. }
  737. },
  738. changeSelectItem(item) {
  739. if (item.selected) return
  740. this.timeSelectList.forEach((v) => (v.selected = false))
  741. item.selected = true
  742. this.dateTimeRangeState = []
  743. this.dateTimePickerState.start = ''
  744. this.dateTimePickerState.end = ''
  745. this.onChange()
  746. },
  747. startDatePickerChange(start) {
  748. const { end } = this.dateTimePickerState
  749. if (!this.exactCanHalf && !this.showConfirmButton) {
  750. if (start && end) {
  751. // start和end都有值
  752. this.setTimeSelectListState()
  753. this.onChange()
  754. } else if (!start && !end) {
  755. // start和end都没值
  756. this.setTimeSelectListState(this.defaultSelectedKey)
  757. this.onChange()
  758. }
  759. }
  760. if (this.showConfirmButton) {
  761. this.showConBtn = true
  762. }
  763. },
  764. endDatePickerChange(end) {
  765. const { start } = this.dateTimePickerState
  766. if (!this.exactCanHalf && !this.showConfirmButton) {
  767. if (start && end) {
  768. // start和end都有值
  769. this.setTimeSelectListState()
  770. this.onChange()
  771. } else if (!start && !end) {
  772. // start和end都没值
  773. this.setTimeSelectListState(this.defaultSelectedKey)
  774. this.onChange()
  775. }
  776. }
  777. if (this.showConfirmButton) {
  778. this.showConBtn = true
  779. }
  780. },
  781. // 展示确定按钮
  782. showConfirmHandle() {
  783. this.showConBtn = true
  784. },
  785. // 确定操作
  786. confirmHandle() {
  787. this.setTimeSelectListState()
  788. this.onChange()
  789. this.showConBtn = false
  790. }
  791. }
  792. }
  793. </script>
  794. <style lang="scss" scoped>
  795. .selector-content,
  796. .select-group-container {
  797. display: flex;
  798. align-items: center;
  799. }
  800. .selector-content {
  801. flex-wrap: wrap;
  802. }
  803. .select-group-container {
  804. margin-right: 24px;
  805. }
  806. .date-time-container {
  807. display: flex;
  808. padding: 6px;
  809. background-color: #f4f5f7;
  810. border-radius: 4px;
  811. &.active {
  812. background-color: #2cb7ca;
  813. .date-time-item {
  814. &.left::after {
  815. background-color: #e0e0e0;
  816. }
  817. }
  818. }
  819. .clear-icon {
  820. display: none;
  821. }
  822. .date-time-item {
  823. position: relative;
  824. width: 160px;
  825. height: 28px;
  826. line-height: 28px;
  827. text-align: center;
  828. &.left {
  829. margin-right: 30px;
  830. &::after {
  831. content: '';
  832. position: absolute;
  833. width: 12px;
  834. height: 2px;
  835. top: 50%;
  836. right: -10px;
  837. transform: translate(100%, -50%);
  838. background-color: #1d1d1d;
  839. }
  840. }
  841. ::v-deep {
  842. .el-input__inner {
  843. padding: 0;
  844. height: 100%;
  845. text-align: center;
  846. cursor: pointer;
  847. }
  848. .el-input__suffix {
  849. display: flex;
  850. align-items: center;
  851. }
  852. }
  853. }
  854. }
  855. .confirm-btn {
  856. width: 48px;
  857. height: 24px;
  858. border-radius: 2px;
  859. font-size: 14px;
  860. text-align: center;
  861. color: #fff;
  862. background: #2abed1;
  863. padding: 0;
  864. line-height: 22px;
  865. margin-left: 8px;
  866. border: none;
  867. }
  868. ::v-deep {
  869. .date-picker-range {
  870. width: 268px;
  871. height: 24px;
  872. padding: 0;
  873. line-height: 24px;
  874. border: 0;
  875. .el-input__icon {
  876. display: none;
  877. }
  878. .el-range-separator {
  879. width: 8px;
  880. height: 1px;
  881. margin: 0 5px;
  882. font-size: 0;
  883. line-height: 24px;
  884. background: #e0e0e0;
  885. }
  886. .el-range-input {
  887. width: 104px !important;
  888. height: 24px;
  889. padding: 0 12px;
  890. text-align: left;
  891. border: 1px solid #e0e0e0;
  892. border-radius: 4px;
  893. box-sizing: border-box;
  894. }
  895. }
  896. }
  897. </style>