index.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. <template>
  2. <div class="airportInfo">
  3. <div class="variable">
  4. <StatisticsHeader
  5. :title="titleTop"
  6. :items="formItems"
  7. :data="formData"
  8. :eledata="eledata"
  9. with-setting
  10. :withSetting="false"
  11. :withExport="true"
  12. :set="set"
  13. :action="action"
  14. :asShow="asShow"
  15. @getFormData="getFormData"
  16. @export="tableToExcel"
  17. @upset="upset"
  18. />
  19. </div>
  20. <div class="echart">
  21. <Echarts
  22. :id="dataid"
  23. :option="tableData"
  24. v-if="picShow == true ? true : false"
  25. />
  26. <Tableformbrs
  27. :tableList="tableList"
  28. :action="action"
  29. v-if="!picShow"
  30. :set="set"
  31. />
  32. </div>
  33. </div>
  34. </template>
  35. <script>
  36. import Echarts from "../components/echart/index.vue";
  37. import Tableformbrs from "../components/echart/tableforms.vue";
  38. import StatisticsHeader from "../components/echart/statisticsHeader.vue";
  39. import { export_json_to_excel } from "@/utils/Export2Excel";
  40. import { Query } from "@/api/webApi";
  41. export default {
  42. name: "ChartsBar",
  43. data() {
  44. return {
  45. asShow: true,
  46. optiondata: [],
  47. picShow: true, //图片表格切换
  48. action: 1,
  49. dataid: "collection_ecahrt1",
  50. listqueryTemplateID: DATACONTENT_ID.modeFlightvolume,
  51. eledata: 1,
  52. set: "",
  53. isShow: Echarts,
  54. tableList: [],
  55. tableListcop: [],
  56. listname: "",
  57. listHeader: [],
  58. tableData: {
  59. time: [],
  60. data1: [],
  61. data2: [],
  62. kg: "",
  63. tyol: "",
  64. },
  65. formData: {
  66. airport: "",
  67. dateTime: "",
  68. },
  69. titleTop: "航班量统计",
  70. levelList: [
  71. {
  72. name: "加货重量统计",
  73. },
  74. {
  75. name: "航班量统计",
  76. },
  77. {
  78. name: "特货统计",
  79. },
  80. {
  81. name: "货量统计",
  82. },
  83. {
  84. name: "拉货统计",
  85. },
  86. {
  87. name: "国内进港保障时间统计",
  88. },
  89. ],
  90. formItems: [
  91. {
  92. prop: "fttp",
  93. inputType: "select",
  94. placeholder: "国内国际",
  95. requiredWarning: "请先选择国内国际",
  96. clearable: true,
  97. options: [
  98. {
  99. value: "国内离港",
  100. label: "国内出港",
  101. },
  102. {
  103. value: "国际离港",
  104. label: "国际出港",
  105. },
  106. {
  107. value: "国内进港",
  108. label: "国内进港",
  109. },
  110. {
  111. value: "国际进港",
  112. label: "国际进港",
  113. },
  114. {
  115. value: "国内进港-全部 ",
  116. label: "国内进港-全部 ",
  117. },
  118. {
  119. value: "国内离港-全部",
  120. label: "国内离港-全部",
  121. },
  122. ],
  123. },
  124. {
  125. prop: "kht",
  126. inputType: "select",
  127. placeholder: "客货类型",
  128. requiredWarning: "请先选择客货类型",
  129. clearable: true,
  130. options: [
  131. {
  132. value: "客机",
  133. label: "客机",
  134. },
  135. {
  136. value: "货机",
  137. label: "货机",
  138. },
  139. {
  140. value: "其它",
  141. label: "其它",
  142. },
  143. {
  144. value: "全部",
  145. label: "全部",
  146. },
  147. ],
  148. },
  149. {
  150. prop: "td",
  151. inputType: "select",
  152. placeholder: "统计维度",
  153. requiredWarning: "请先选择统计时间维度",
  154. clearable: true,
  155. options: [
  156. {
  157. value: "月",
  158. label: "月",
  159. },
  160. {
  161. value: "年",
  162. label: "年",
  163. },
  164. ],
  165. },
  166. {
  167. prop: "dateTime",
  168. inputType: "datePicker",
  169. clearable: true,
  170. width: "240px",
  171. options: [],
  172. },
  173. ],
  174. };
  175. },
  176. mounted() {
  177. // this.getQuery([]);
  178. },
  179. watch: {
  180. // 监听数据变化,重绘折线图
  181. option: {
  182. deep: true,
  183. handler(newVal) {},
  184. },
  185. },
  186. destroyed() {},
  187. methods: {
  188. getFormData(data) {
  189. this.tableData.time = [];
  190. this.tableData.data1 = [];
  191. this.tableData.data2 = [];
  192. let option = [
  193. {
  194. fttp: data.fttp,
  195. kht: data.kht,
  196. td: data.td,
  197. fd1: data.dateTime[0],
  198. fd2: data.dateTime[1],
  199. },
  200. ];
  201. this.getQuery(option, null);
  202. this.listname =
  203. "航班量统计" +
  204. data.fttp +
  205. data.kht +
  206. data.td +
  207. data.dateTime[0] +
  208. "--" +
  209. data.dateTime[1];
  210. this.listHeader = ["序号", "时间", "重量(吨)", "环比(%)"];
  211. },
  212. //获取表格数据
  213. async getQuery(data, dat) {
  214. try {
  215. const { code, returnData } = await Query({
  216. id: this.listqueryTemplateID,
  217. dataContent: data,
  218. });
  219. if (code == 0) {
  220. this.tableData.time = [];
  221. this.tableData.data1 = [];
  222. this.tableData.data2 = [];
  223. this.tableList = JSON.parse(JSON.stringify(returnData.listValues));
  224. this.tableListcop = JSON.parse(JSON.stringify(returnData.listValues));
  225. this.tableList.forEach((item, index) => {
  226. item.indexs = index + 1;
  227. });
  228. this.tableListcop.forEach((item, index) => {
  229. item.indexs = index + 1;
  230. });
  231. let objar = {
  232. indexs: "合计",
  233. weight: returnData.listValues[0].totalWeight,
  234. };
  235. this.tableListcop.push(objar);
  236. returnData.listValues.forEach((element) => {
  237. this.tableData.data2.push(
  238. element.flightNum ? element.flightNum : 0
  239. );
  240. this.tableData.time.push(element.dat);
  241. this.tableData.kg = "单位:班";
  242. this.tableData.data1 = [];
  243. });
  244. this.tableData.data1.push(0);
  245. for (let index = 0; index < this.tableData.data2.length; index++) {
  246. if (index > 0) {
  247. const element =
  248. (this.tableData.data2[index] -
  249. this.tableData.data2[index - 1]) /
  250. this.tableData.data2[index - 1];
  251. this.tableData.data1.push(
  252. element.toFixed(2) ? element.toFixed(2) : 0
  253. );
  254. this.tableData.data1.forEach((element) => {
  255. element = Number(element);
  256. if (typeof element !== "number") {
  257. element = 0;
  258. }
  259. });
  260. }
  261. }
  262. }
  263. } catch (error) {
  264. this.page--;
  265. }
  266. },
  267. //导出
  268. tableToExcel() {
  269. import("../../../utils/Export2Excel").then((excel) => {
  270. // 设置导出表格的头部
  271. const tHeader = this.listHeader;
  272. // 将要导出的数据进行一个过滤
  273. /**
  274. * 源数据导入到excel的数据每一条重新拼成一个数组,数组里的每个元素就是filterVal里的每个字段
  275. */
  276. const data = this.tableListcop.map((item, index) => {
  277. return [item.indexs, item.dat, item.flightNum, item.weightChain];
  278. });
  279. data[data.length - 1].indexs = "总计";
  280. // 调用我们封装好的方法进行导出Excel
  281. excel.export_json_to_excel({
  282. // 导出的头部
  283. header: tHeader,
  284. // 导出的内容
  285. data,
  286. // 导出的文件名称
  287. filename: this.listname,
  288. // 导出的表格宽度是否自动
  289. autoWidth: true,
  290. // 导出文件的后缀类型
  291. bookType: "xlsx",
  292. });
  293. });
  294. },
  295. upset(data) {
  296. this.picShow = data;
  297. },
  298. },
  299. components: {
  300. Echarts,
  301. StatisticsHeader,
  302. Tableformbrs,
  303. },
  304. };
  305. </script>
  306. <style lang="scss" scoped>
  307. .airportInfo {
  308. position: relative;
  309. .header {
  310. width: 103%;
  311. height: 36px;
  312. display: flex;
  313. align-items: center;
  314. justify-content: center;
  315. background: #f7f7f7;
  316. position: relative;
  317. left: -23px;
  318. > .nav {
  319. padding: 0 30px 0 30px;
  320. cursor: pointer;
  321. font-size: 16px;
  322. font-family: Microsoft YaHei;
  323. font-weight: 400;
  324. color: #101116;
  325. }
  326. > .navs {
  327. height: 100%;
  328. padding: 0 30px 0 30px;
  329. cursor: pointer;
  330. display: flex;
  331. align-items: center;
  332. font-size: 16px;
  333. font-family: Microsoft YaHei;
  334. font-weight: bold;
  335. color: #ac014d;
  336. border-bottom: 2px solid #ac014d;
  337. }
  338. }
  339. .variable {
  340. width: 100%;
  341. height: 64px;
  342. }
  343. .echart {
  344. width: 100%;
  345. height: 746px;
  346. position: absolute;
  347. background: #ffffff;
  348. box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.1);
  349. border-radius: 4px;
  350. }
  351. }
  352. </style>