data-item.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <view class="data">
  3. <view class="data-screen" @click="openScreen" style="padding-right:40rpx">
  4. <image class="screen-img" src="@/static/image/sx.png" alt="">
  5. <text>筛选</text>
  6. </view>
  7. <view class="echarts">
  8. <dataQuery v-if="service.length" :service="service" :serviceTime="serviceTime" />
  9. <view v-if="monthQuery" class="query-screen">
  10. <view>
  11. 报表时间选择
  12. </view>
  13. <div style="margin: 20px 0;">
  14. <uni-data-select v-model="dataValue" :localdata="datasList"
  15. @change="dataValueChange"></uni-data-select>
  16. </div>
  17. <uni-data-select v-model="queryParams.id" :localdata="dataItem"></uni-data-select>
  18. <view class="month">
  19. <view :class="monthCurrent===item.current?'month-select':'month-item'" v-for="item in monthList"
  20. :key="item.current" @click="monthChange(item.current)">
  21. {{item.name}}
  22. </view>
  23. </view>
  24. <uni-datetime-picker v-model="range" type="daterange" start-placeholder="起始时间" end-placeholder="终止时间"
  25. @change="handelDate" return-type="timestamp" />
  26. <view class="month-btn">
  27. <u-button class="reset" style="width:200rpx" @click="reset">重置</u-button>
  28. <u-button type="primary" style="width:200rpx" @click="handelQuery">确认</u-button>
  29. </view>
  30. </view>
  31. <view class="modal" v-if="monthQuery"></view>
  32. <u-empty v-if="!service.length" class="empty" icon="../../static/data.png" text="暂无数据">
  33. </u-empty>
  34. </view>
  35. </view>
  36. </template>
  37. <script>
  38. import dataQuery from '../../components/ecahrts/dataQuery.vue'
  39. export default {
  40. components: {
  41. dataQuery
  42. },
  43. data() {
  44. return {
  45. // 查询参数
  46. queryParams: {
  47. id: null,
  48. startTime: null,
  49. endTime: null,
  50. valueType: 0,
  51. },
  52. // 日期选择
  53. range: [],
  54. // 时间选择
  55. monthList: [{
  56. name: '近一周',
  57. current: 0
  58. },
  59. {
  60. name: '近1个月',
  61. current: 1
  62. },
  63. {
  64. name: '近3个月',
  65. current: 2
  66. },
  67. {
  68. name: '近6个月',
  69. current: 3
  70. }
  71. ],
  72. monthCurrent: 0,
  73. monthQuery: false,
  74. // 图表数据
  75. service: [],
  76. serviceTime: [],
  77. // 数据组数据
  78. datasList: [],
  79. dataValue: null,
  80. // 数据项数据
  81. dataItem: []
  82. }
  83. },
  84. mounted() {
  85. this.getUserData()
  86. },
  87. methods: {
  88. // 打开筛选
  89. openScreen() {
  90. this.monthQuery = !this.monthQuery
  91. },
  92. // 切换时间
  93. monthChange(current) {
  94. this.monthCurrent = current
  95. },
  96. //获取当前登录人所有数据组
  97. getUserData() {
  98. uni.$http.get('/itemGroup/getAllItemGroup').then(res => {
  99. const data = res.data
  100. if (data.code === 200) {
  101. this.datasList = data.data.map(item => {
  102. return {
  103. text: item.groupName,
  104. value: item.id
  105. }
  106. })
  107. }
  108. })
  109. },
  110. //通过id获取数据组
  111. getDataListById(id) {
  112. uni.$http.get('/itemGroup/getItemGroupById/' + id).then(res => {
  113. const data = res.data
  114. if (data.code === 200) {
  115. this.dataItem = data.data.itemList.map(item => {
  116. return {
  117. text: item.itemName,
  118. value: item.id
  119. }
  120. })
  121. }
  122. })
  123. },
  124. //确认按钮查询
  125. handelQuery() {
  126. uni.$http.get('/itemGroup/itemDataQuery', this.queryParams).then(res => {
  127. const data = res.data
  128. if (data.code === 200) {
  129. const {
  130. valueList,
  131. valueTimeList
  132. } = data.data
  133. const service = [{
  134. name: "TOYOTA",
  135. data: valueList
  136. }]
  137. this.service = service
  138. this.serviceTime = valueTimeList
  139. }
  140. })
  141. this.monthQuery = false
  142. },
  143. //选择日期
  144. handelDate(date) {
  145. this.queryParams.startTime = this.resolvingDate(date[0])
  146. this.queryParams.endTime = this.resolvingDate(date[1])
  147. },
  148. resolvingDate(date) {
  149. if (!date) {
  150. return;
  151. }
  152. //date是传入的时间
  153. let d = new Date(date);
  154. let month = (d.getMonth() + 1) < 10 ? '0' + (d.getMonth() + 1) : (d.getMonth() + 1);
  155. let day = d.getDate() < 10 ? '0' + d.getDate() : d.getDate();
  156. let hours = d.getHours() < 10 ? '0' + d.getHours() : d.getHours();
  157. let min = d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes();
  158. let sec = d.getSeconds() < 10 ? '0' + d.getSeconds() : d.getSeconds();
  159. let times;
  160. times = d.getFullYear() + '-' + month + '-' + day + ' ' + hours + ':' + min + ':' + sec;
  161. return times
  162. },
  163. //重置按钮
  164. reset() {
  165. this.queryParams = {
  166. id: null,
  167. startTime: null,
  168. endTime: null,
  169. valueType: 0
  170. }
  171. },
  172. //选择数据组
  173. dataValueChange(val) {
  174. this.getDataListById(val)
  175. }
  176. }
  177. }
  178. </script>
  179. <style lang="scss" scoped>
  180. .data {
  181. margin-top: 40rpx;
  182. .data-screen {
  183. text-align: right;
  184. .screen-img {
  185. width: 40rpx;
  186. height: 40rpx;
  187. }
  188. }
  189. }
  190. .echarts {
  191. position: relative;
  192. .query-screen {
  193. width: 96vw;
  194. padding: 0 20rpx;
  195. background: #ffffff;
  196. position: absolute;
  197. top: 0;
  198. z-index: 999;
  199. .month {
  200. display: flex;
  201. justify-content: space-between;
  202. align-items: center;
  203. font-size: 28rpx;
  204. margin: 40rpx 0;
  205. .month-item {
  206. padding: 10rpx 20rpx;
  207. background: #ECECEC;
  208. color: #000000;
  209. border-radius: 12rpx;
  210. }
  211. .month-select {
  212. padding: 10rpx 20rpx;
  213. border-radius: 12rpx;
  214. background: #289BFF;
  215. color: #ffffff;
  216. }
  217. }
  218. .month-btn {
  219. display: flex;
  220. justify-content: space-around;
  221. margin-top: 40rpx;
  222. margin-bottom: 40rpx;
  223. .reset {
  224. background: #EAF4FF;
  225. color: #469DED;
  226. border: 1px solid #A3B8CB;
  227. }
  228. }
  229. }
  230. }
  231. .modal {
  232. width: 100%;
  233. height: 76vh;
  234. background: rgba(0, 0, 0, 0.5);
  235. position: absolute;
  236. top: 0;
  237. }
  238. </style>