Select.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. <template>
  2. <div class="my-all-select">
  3. <!-- 重要级别 -->
  4. <sg-mul-select class="my-select" v-model="selectParams.selectedLevel" :list="levelList" :label="label1"></sg-mul-select>
  5. <!-- 报警类型 -->
  6. <sg-mul-select class="my-select" v-model="selectParams.selectedType" :list="typeList" :label="label2"></sg-mul-select>
  7. <!-- 报警持续时间 -->
  8. <sg-select class="my-select" v-model="selectParams.selectedDurationTime" :list="startTimeList" :label="label4"></sg-select>
  9. <!-- 报警开始时间 -->
  10. <!-- <div class="my-select" v-if="clear==2">
  11. <history-date-picker></history-date-picker>
  12. </div> -->
  13. <div class="my-select">
  14. <div class="date-input" >
  15. <label>报警开始时间:</label>
  16. <input type="text" name="daterange" id="config-demo" class="form-control">
  17. <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
  18. </div>
  19. </div>
  20. <!-- 报警所在位置 -->
  21. <sg-tree-select class="my-select" v-model="selectParams.selectedPosition" :list="positionList" :label="label3" ></sg-tree-select>
  22. <!-- 搜索 -->
  23. <div class="my-select">
  24. <i-Input placeholder="输入设备/空间名称关键字查找" v-model="selectParams.keyword" clearable style="width:230px" @on-enter="onkeyup">
  25. <Icon type="ios-search" slot="suffix"/>
  26. </i-Input>
  27. </div>
  28. </div>
  29. </template>
  30. <script>
  31. import sgMulSelect from "../../common/sagacloudMulSelect.vue"
  32. import sgSelect from "../../common/sagacloudSelect.vue"
  33. import sgTreeSelect from "../../common/sagasloudTreeSelect.vue"
  34. // import {mapActions, mapMutations, mapGetters} from 'vuex'
  35. import axios from 'axios'
  36. import dataPickerConfig from '../../tools/dataPickerConfig.js'
  37. // import { log } from 'util'
  38. export default {
  39. components: {
  40. sgMulSelect,
  41. sgSelect,
  42. sgTreeSelect
  43. },
  44. mixins: [],
  45. props: {
  46. datePickerKey: {
  47. type: String,
  48. default: 'all'
  49. },
  50. dateLimitDays: {
  51. type: Number,
  52. default: Number.MAX_SAFE_INTEGER // js里的最大安全整数 9007199254740991
  53. }
  54. },
  55. data () {
  56. return {
  57. label1: "重要级别",
  58. label2: "报警类型",
  59. label3: "报警所在位置",
  60. label4: "报警持续时间",
  61. // 下拉框的默认值
  62. selectParams: {
  63. selectedLevel: [], // 全部
  64. selectedType: [],
  65. selectedPosition: {
  66. buildingId: [],
  67. floorId: [],
  68. spaceId: []
  69. },
  70. selectedDurationTime: "",
  71. selectedStartTime: {
  72. dStart: "", // 20181208
  73. dEnd: "" // 20181209
  74. },
  75. keyword: null
  76. },
  77. levelList: [
  78. {
  79. value: "S",
  80. text: "S级"
  81. },
  82. {
  83. value: "A",
  84. text: "A级"
  85. },
  86. {
  87. value: "B",
  88. text: "B级"
  89. },
  90. {
  91. value: "C",
  92. text: "C级"
  93. },
  94. {
  95. value: "D",
  96. text: "D级"
  97. }
  98. ],
  99. typeList: [
  100. {
  101. value: "1",
  102. text: "类型1"
  103. },
  104. {
  105. value: "2",
  106. text: "类型2"
  107. },
  108. {
  109. value: "3",
  110. text: "类型3"
  111. },
  112. {
  113. value: "4",
  114. text: "类型4"
  115. },
  116. {
  117. value: "5",
  118. text: "类型5"
  119. }
  120. ],
  121. positionList: [
  122. ],
  123. startTimeList: [
  124. {
  125. value: "5m",
  126. text: "不超过5分钟"
  127. },
  128. {
  129. text: "5分钟-2小时",
  130. value: "2h"
  131. },
  132. {
  133. text: "2-24小时",
  134. value: "24h"
  135. },
  136. {
  137. text: "超过24小时",
  138. value: "1d"
  139. }
  140. ],
  141. durationTimeList: [
  142. {
  143. value: "24h",
  144. text: "近24小时"
  145. },
  146. {
  147. value: "3d",
  148. text: "近3天"
  149. },
  150. {
  151. value: "7d",
  152. text: "近7天"
  153. },
  154. {
  155. value: "1m",
  156. text: "近一个月"
  157. },
  158. {
  159. value: "auto",
  160. text: "自定义"
  161. }
  162. ]
  163. }
  164. },
  165. computed: {
  166. },
  167. watch: {
  168. 'selectParams.selectedLevel': function (newVal, oldVal) {
  169. this.$emit('setSelectParams', this.selectParams)
  170. },
  171. 'selectParams.selectedPosition': function (newVal, oldVal) {
  172. this.$emit('setSelectParams', this.selectParams)
  173. },
  174. 'selectParams.selectedType': function (newVal, oldVal) {
  175. this.$emit('setSelectParams', this.selectParams)
  176. },
  177. 'selectParams.selectedDurationTime': function (newVal, oldVal) {
  178. this.$emit('setSelectParams', this.selectParams)
  179. },
  180. datePickerKey () {
  181. this.daterangepicker()
  182. },
  183. dateLimitDays () {
  184. this.daterangepicker()
  185. }
  186. },
  187. mounted () {
  188. this.$nextTick(() => {
  189. this.daterangepicker()
  190. })
  191. this.getRoomLists()
  192. },
  193. methods: {
  194. // 得到空间列表
  195. getRoomLists () {
  196. axios.get(`/alarm-system/alarm-system/alarm/buildingHierarchy?projectId=${this.$store.state.projId}&secret=${this.$store.state.secret}`).then(res => {
  197. let data = res.data
  198. if (data.Result == 'success') {
  199. this.positionList = data.Content
  200. this.positionList.forEach(i => {
  201. i.title = i.buildingName || i.spaceName || i.floorName
  202. i.value = i.buildingId || i.spaceId || i.floorId
  203. i.checked = false // 默认不选中
  204. i.expand = false // 默认不展开
  205. i.type = i.buildingId ? 'building' : i.floorId ? 'floor' : 'space'
  206. if (i.content) {
  207. i.children = []
  208. i.content.forEach(j => {
  209. j.title = j.spaceName || j.floorName
  210. j.value = j.spaceId || j.floorId
  211. j.checked = false // 默认不选中
  212. j.expand = false // 默认不展开
  213. j.type = j.floorId ? 'floor' : 'space'
  214. i.children.push(j)
  215. if (j.content) {
  216. j.children = []
  217. j.content.forEach(k => {
  218. k.title = k.spaceName
  219. k.value = k.spaceId
  220. k.checked = false // 默认不选中
  221. k.expand = false // 默认不展开
  222. k.type = 'space'
  223. j.children.push(k)
  224. })
  225. } else {
  226. i.children = []
  227. }
  228. })
  229. } else {
  230. i.children = []
  231. }
  232. })
  233. }
  234. })
  235. },
  236. // 回车搜索
  237. onkeyup () {
  238. this.$emit('setSelectParams', this.selectParams)
  239. },
  240. // 绑定控制开始时间的函数
  241. /* eslint-disable */
  242. daterangepicker () {
  243. $("#config-demo").val(dataPickerConfig[this.datePickerKey].view)
  244. console.log(dataPickerConfig[this.datePickerKey].view)
  245. let vm = this
  246. $("#config-demo").daterangepicker(
  247. {
  248. startDate: moment().startOf('hour'),
  249. endDate: moment().startOf('hour').add(32, 'hour'),
  250. timePicker: false,
  251. timePicker24Hour: false,
  252. linkedCalendars: false,
  253. autoUpdateInput: false,
  254. showDropdowns: true,
  255. autoApply: true,
  256. dateLimit: {
  257. days: this.dateLimitDays
  258. },
  259. ranges: {
  260. "清空选择": [moment().subtract(30, "days"), moment().subtract(0, "days")],
  261. "近 24 小时": [ moment().subtract(0, "days"), moment().subtract(0, "days")],
  262. "近 3 天": [
  263. moment().subtract(3, "days"),
  264. moment().subtract(0, "days")
  265. ],
  266. "近 7 天": [moment().subtract(7, "days"), moment()],
  267. "近 1 个月": [
  268. moment().subtract(30, "days"),
  269. moment().subtract(0, "days")
  270. ]
  271. },
  272. opens: "right",
  273. separator: "-",
  274. locale: {
  275. format: "YYYY-MM-DD",
  276. applyLabel: "应用",
  277. cancelLabel: "取消",
  278. resetLabel: "重置",
  279. customRangeLabel: "自定义",
  280. daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"],
  281. monthNames: [
  282. "一月",
  283. "二月",
  284. "三月",
  285. "四月",
  286. "五月",
  287. "六月",
  288. "七月",
  289. "八月",
  290. "九月",
  291. "十月",
  292. "十一月",
  293. "十二月"
  294. ]
  295. }
  296. },
  297. function (start, end, label) {
  298. let _start = this.startDate.format(this.locale.format)
  299. let _end = this.endDate.format(this.locale.format)
  300. if (!this.startDate) {
  301. this.element.val("")
  302. } else {
  303. if (_start == '1970-01-01' && _end == '1970-01-01') {
  304. this.element.val("全部")
  305. vm.selectParams.selectedStartTime.dStart = ''
  306. vm.selectParams.selectedStartTime.dEnd = ''
  307. } else {
  308. this.element.val(_start + this.locale.separator + _end)
  309. vm.selectParams.selectedStartTime.dStart = _start.split('-').join('') + '000000'
  310. vm.selectParams.selectedStartTime.dEnd = _start == _end ? _end.split('-').join('') + '595959' : _end.split('-').join('') + '000000'
  311. }
  312. console.log( vm.selectParams.selectedStartTime)
  313. vm.$emit('setSelectParams', vm.selectParams)
  314. }
  315. }
  316. )
  317. }
  318. }
  319. }
  320. </script>
  321. <style scoped lang="less" >
  322. .my-all-select {
  323. padding: 18px 0 20px 12px;
  324. background: #f4f5f8;
  325. display: flex;
  326. // justify-content: space-between;
  327. flex-wrap: wrap;
  328. .my-select {
  329. padding: 4px 8px;
  330. display: inline-block;
  331. .date-input {
  332. width: 362px;
  333. height: 34px;
  334. display: flex;
  335. background: #fff;
  336. border: 1px solid #ccc;
  337. position: relative;
  338. border-radius: 4px;
  339. &:hover,
  340. &:active,
  341. &:focus {
  342. outline: none;
  343. border-color: #2d8cf0;
  344. }
  345. > input {
  346. height: 30px;
  347. border: none;
  348. outline: none;
  349. font-size: 14px;
  350. &:focus {
  351. box-shadow: none;
  352. }
  353. }
  354. > label {
  355. width: 148px;
  356. height: 34px;
  357. padding-top: 4px;
  358. padding-left: 5px;
  359. }
  360. > i {
  361. position: absolute;
  362. bottom: 6px;
  363. right: 24px;
  364. top: auto;
  365. cursor: pointer;
  366. }
  367. .daterangepicker .ranges li.active {
  368. background: #728dee;
  369. border: 1px solid #728dee;
  370. }
  371. .daterangepicker td.active,
  372. .daterangepicker td.active:hover {
  373. background: #728dee;
  374. }
  375. }
  376. }
  377. }
  378. </style>
  379. <style lang="less">
  380. .my-all-select {
  381. .ivu-input {
  382. height: 34px;
  383. border: 1px solid #ccc;
  384. &:hover,
  385. &:active,
  386. &:focus {
  387. outline: none;
  388. border-color: #2d8cf0;
  389. }
  390. }
  391. }
  392. </style>