queryform.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. import miment from 'miment'
  2. import {getData} from '@/api/bigscreen'
  3. export default {
  4. data() {
  5. return {
  6. // form select-input key
  7. selectInput: {
  8. keyname: '',
  9. keyword: ''
  10. },
  11. //日期时间快捷选项
  12. datetimeRangePickerOptions: {
  13. shortcuts: [{
  14. text: '今天',
  15. onClick(picker) {
  16. const end = new Date();
  17. const start = new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0));
  18. picker.$emit('pick', [start, end]);
  19. }
  20. }, {
  21. text: '昨天',
  22. onClick(picker) {
  23. const start = new Date(new Date(new Date().getTime() - 24 * 60 * 60 * 1000).setHours(0, 0, 0, 0));
  24. const end = new Date(new Date(new Date().getTime() - 24 * 60 * 60 * 1000).setHours(23, 59, 59, 999));
  25. picker.$emit('pick', [start, end]);
  26. }
  27. }, {
  28. text: '最近一周',
  29. onClick(picker) {
  30. const end = new Date();
  31. const start = new Date();
  32. start.setTime(miment().add(-1, 'ww').stamp());
  33. picker.$emit('pick', [start, end]);
  34. }
  35. }, {
  36. text: '最近一个月',
  37. onClick(picker) {
  38. const end = new Date();
  39. const start = new Date();
  40. start.setTime(miment().add(-1, 'MM').stamp());
  41. picker.$emit('pick', [start, end]);
  42. }
  43. }, {
  44. text: '最近三个月',
  45. onClick(picker) {
  46. const end = new Date();
  47. const start = new Date();
  48. start.setTime(miment().add(-3, 'MM').stamp());
  49. picker.$emit('pick', [start, end]);
  50. }
  51. }],
  52. // disabledDate(time){
  53. // return time.getTime() > Date.now()
  54. // }
  55. },
  56. }
  57. },
  58. computed: {},
  59. created() {
  60. },
  61. mounted() {
  62. },
  63. destroyed() {
  64. },
  65. methods: {
  66. // 搜索重置搜索页码
  67. search() {
  68. this.params.currentPage = 1;
  69. this.queryByPage();
  70. },
  71. // 把selectInput中的值赋到params查询对象中
  72. parseParamsBySelectInput(keyname, keyword) {
  73. if (this.params === undefined || this.params === null) {
  74. console.warn('query form must bind to params object in vue data')
  75. return
  76. }
  77. // if (!this.params.hasOwnProperty(keyname)) {
  78. // console.warn('params has no field:' + keyname)
  79. // return
  80. // }
  81. if (keyword !== undefined) {
  82. this.params[keyname] = keyword.trim()
  83. }
  84. },
  85. resetForm(data) {
  86. let formKeys = Object.keys(data)
  87. for (let k of formKeys) {
  88. data[k] = null
  89. }
  90. },
  91. handlerInputchange(val) {
  92. this.parseParamsBySelectInput(this.selectInput.keyname, val)
  93. },
  94. // 查询echarts 数据
  95. queryEchartsData(params) {
  96. return new Promise(async (resolve) => {
  97. const {code, data} = await getData(params);
  98. if (code != 200) return
  99. const analysisData = this.analysisChartsData(params, data);
  100. resolve(analysisData)
  101. })
  102. },
  103. // 解析不同图标的数据
  104. analysisChartsData(params, data) {
  105. // widget-barchart 柱线图、widget-linechart 折线图、 widget-barlinechart 柱线图
  106. // widget-piechart 饼图、widget-funnel 漏斗图
  107. // widget-gauge 仪表盘
  108. // widget-text 文本框
  109. // widge-table 表格(数据不要转)
  110. const chartType = params.chartType
  111. if (
  112. chartType == "widget-barchart" ||
  113. chartType == "widget-linechart" ||
  114. chartType == "widget-barlinechart"
  115. ) {
  116. return this.barOrLineChartFn(params.chartProperties, data);
  117. } else if (
  118. chartType == "widget-piechart" ||
  119. chartType == "widget-funnel"
  120. ) {
  121. return this.piechartFn(params.chartProperties, data);
  122. } else if (chartType == "widget-gauge") {
  123. return this.gaugeFn(params.chartProperties, data);
  124. } else if (chartType == "widget-text") {
  125. return this.widgettext(params.chartProperties, data)
  126. } else {
  127. return data
  128. }
  129. },
  130. // 柱状图、折线图、折柱图
  131. barOrLineChartFn(chartProperties, data) {
  132. const ananysicData = {};
  133. const xAxisList = [];
  134. const series = [];
  135. for (const key in chartProperties) {
  136. const obj = {};
  137. const seriesData = [];
  138. const value = chartProperties[key];
  139. obj["type"] = value;
  140. for (let i = 0; i < data.length; i++) {
  141. if (value.startsWith("xAxis")) {
  142. // 代表为x轴
  143. xAxisList[i] = data[i][key];
  144. } else {
  145. // 其他的均为series展示数据
  146. seriesData[i] = data[i][key];
  147. }
  148. }
  149. obj["data"] = seriesData;
  150. if (!obj["type"].startsWith("xAxis")) {
  151. series.push(obj);
  152. }
  153. }
  154. ananysicData["xAxis"] = xAxisList;
  155. ananysicData["series"] = series;
  156. return ananysicData;
  157. },
  158. // 饼图、漏斗图
  159. piechartFn(chartProperties, data) {
  160. const ananysicData = [];
  161. for (let i = 0; i < data.length; i++) {
  162. const obj = {};
  163. for (const key in chartProperties) {
  164. const value = chartProperties[key];
  165. if (value === "name") {
  166. obj["name"] = data[i][key];
  167. } else {
  168. obj["value"] = data[i][key];
  169. }
  170. }
  171. ananysicData.push(obj);
  172. }
  173. return ananysicData;
  174. },
  175. gaugeFn(chartProperties, data) {
  176. const ananysicData = [];
  177. for (let i = 0; i < data.length; i++) {
  178. const obj = {};
  179. for (const key in chartProperties) {
  180. const value = chartProperties[key];
  181. if (value === "name") {
  182. obj["name"] = data[i][key];
  183. } else {
  184. obj["value"] = data[i][key];
  185. }
  186. }
  187. if (!obj["unit"]) {
  188. obj["unit"] = "%";
  189. }
  190. ananysicData.push(obj);
  191. }
  192. return ananysicData[0];
  193. },
  194. widgettext(chartProperties, data) {
  195. const ananysicData = [];
  196. for (let i = 0; i < data.length; i++) {
  197. const obj = {};
  198. for (const key in chartProperties) {
  199. const value = chartProperties[key];
  200. if (value === "name") {
  201. } else {
  202. obj["value"] = data[i][key];
  203. }
  204. }
  205. ananysicData.push(obj);
  206. }
  207. return ananysicData;
  208. },
  209. },
  210. watch: {
  211. 'selectInput.keyname'(newVal, oldVal) {
  212. this.resetForm(this.params)
  213. this.params.currentPage = 1
  214. this.params.pageSize = 10
  215. this.parseParamsBySelectInput(newVal, this.selectInput.keyword)
  216. },
  217. 'selectInput.keyword'(newVal, oldVal) {
  218. if (!this.selectInput.keyname) return
  219. this.parseParamsBySelectInput(this.selectInput.keyname, newVal)
  220. }
  221. // 'selectInput.keyword'(newVal, oldVal) {
  222. // this.parseParamsBySelectInput(this.selectInput.keyname, newVal)
  223. // }
  224. }
  225. }