index.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  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. for (let i = 0; i < 10; i++) {
  229. if (!this.tableList[i]) {
  230. this.tableList.push({});
  231. }
  232. }
  233. this.tableListcop.forEach((item, index) => {
  234. item.indexs = index + 1;
  235. });
  236. let objar = {
  237. indexs: "合计",
  238. flightNum: returnData.listValues[0].totalFlightNum,
  239. };
  240. this.tableListcop.push(objar);
  241. returnData.listValues.forEach((element) => {
  242. this.tableData.data2.push(
  243. element.flightNum ? element.flightNum : 0
  244. );
  245. this.tableData.time.push(element.dat);
  246. this.tableData.kg = "单位:班";
  247. this.tableData.data1 = [];
  248. });
  249. this.tableData.data1.push(0);
  250. for (let index = 0; index < this.tableData.data2.length; index++) {
  251. if (index > 0) {
  252. const element =
  253. (this.tableData.data2[index] -
  254. this.tableData.data2[index - 1]) /
  255. this.tableData.data2[index - 1];
  256. this.tableData.data1.push(
  257. element.toFixed(2) ? element.toFixed(2) : 0
  258. );
  259. this.tableData.data1.forEach((element) => {
  260. element = Number(element);
  261. if (typeof element !== "number") {
  262. element = 0;
  263. }
  264. });
  265. }
  266. }
  267. }
  268. } catch (error) {
  269. this.page--;
  270. }
  271. },
  272. //导出
  273. tableToExcel() {
  274. import("../../../utils/Export2Excel").then((excel) => {
  275. // 设置导出表格的头部
  276. const tHeader = this.listHeader;
  277. // 将要导出的数据进行一个过滤
  278. /**
  279. * 源数据导入到excel的数据每一条重新拼成一个数组,数组里的每个元素就是filterVal里的每个字段
  280. */
  281. const data = this.tableListcop.map((item, index, arr) => {
  282. return [item.indexs, item.dat, item.flightNum, index < arr.length - 1 ? `${item.flightChain ?? 0}%` : ''];
  283. });
  284. // 调用我们封装好的方法进行导出Excel
  285. excel.export_json_to_excel({
  286. // 导出的头部
  287. header: tHeader,
  288. // 导出的内容
  289. data,
  290. // 导出的文件名称
  291. filename: this.listname,
  292. // 导出的表格宽度是否自动
  293. autoWidth: true,
  294. // 导出文件的后缀类型
  295. bookType: "xlsx",
  296. });
  297. });
  298. },
  299. upset(data) {
  300. this.picShow = data;
  301. },
  302. },
  303. components: {
  304. Echarts,
  305. StatisticsHeader,
  306. Tableformbrs,
  307. },
  308. };
  309. </script>
  310. <style lang="scss" scoped>
  311. .airportInfo {
  312. position: relative;
  313. .header {
  314. width: 103%;
  315. height: 36px;
  316. display: flex;
  317. align-items: center;
  318. justify-content: center;
  319. background: #f7f7f7;
  320. position: relative;
  321. left: -23px;
  322. > .nav {
  323. padding: 0 30px 0 30px;
  324. cursor: pointer;
  325. font-size: 16px;
  326. font-family: Microsoft YaHei;
  327. font-weight: 400;
  328. color: #101116;
  329. }
  330. > .navs {
  331. height: 100%;
  332. padding: 0 30px 0 30px;
  333. cursor: pointer;
  334. display: flex;
  335. align-items: center;
  336. font-size: 16px;
  337. font-family: Microsoft YaHei;
  338. font-weight: bold;
  339. color: #ac014d;
  340. border-bottom: 2px solid #ac014d;
  341. }
  342. }
  343. .variable {
  344. width: 100%;
  345. height: 52px;
  346. }
  347. .echart {
  348. width: 100%;
  349. height: 746px;
  350. position: absolute;
  351. background: #ffffff;
  352. box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.1);
  353. border-radius: 4px;
  354. }
  355. }
  356. </style>