index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. <template>
  2. <div>
  3. <basic-container class="page-crad">
  4. <avue-crud ref="crud"
  5. :option="option"
  6. :data="dataList"
  7. :page.sync="page"
  8. :search.sync="search"
  9. :cell-style="cellStyle"
  10. @search-change="searchChange"
  11. @current-change="currentChange"
  12. @size-change="sizeChange"
  13. @refresh-change="refreshChange"
  14. @on-load="onLoad"
  15. :table-loading="loading"
  16. @saveColumn="saveColumn"
  17. @resetColumn="resetColumn"
  18. @search-criteria-switch="searchCriteriaSwitch">
  19. <template slot="menuLeft">
  20. <el-button type="info" size="small" @click="outExport">导出</el-button>
  21. </template>
  22. <template slot="corpNameSearch" slot-scope="scope">
  23. <crop-select v-model="search.corpId" corpType="KH"/>
  24. </template>
  25. <template slot="monthSearch" slot-scope="scope">
  26. <el-input-number
  27. v-model="search.month"
  28. :min="1"
  29. :max="12"
  30. placeholder="请输入 月"
  31. :controls="false"
  32. style="width: 100%;"></el-input-number>
  33. </template>
  34. </avue-crud>
  35. </basic-container>
  36. </div>
  37. </template>
  38. <script>
  39. import {getToken} from "@/util/auth";
  40. import {getList} from "@/api/budgetAnalysis"
  41. export default {
  42. name: "index",
  43. data() {
  44. return {
  45. UConfiguration: {
  46. multipleChoices: false,
  47. multiple: false,
  48. disabled: false,
  49. searchShow: true,
  50. collapseTags: false,
  51. placeholder: '请点击右边按钮选择',
  52. dicData: []
  53. },
  54. form: {},
  55. search: {},
  56. dataList: [],
  57. loading: false,
  58. detailData: {},
  59. page: {
  60. pageSize: 20,
  61. currentPage: 1,
  62. total: 0,
  63. pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
  64. },
  65. option: {},
  66. optionBack: {
  67. searchShow: true,
  68. searchMenuPosition: "right",
  69. searchSpan: 8,
  70. searchMenuSpan: 16,
  71. border: true,
  72. index: true,
  73. addBtn: false,
  74. viewBtn: false,
  75. editBtn: false,
  76. delBtn: false,
  77. searchIcon: true,
  78. menu: false,
  79. summaryText: "合计",
  80. showSummary: true,
  81. sumColumnList: [{
  82. name: "keter",
  83. type: "sum",
  84. decimals: 2
  85. }, {
  86. name: "keterOrdQuantity",
  87. type: "sum",
  88. decimals: 2
  89. }, {
  90. name: "keterDeliverQuantity",
  91. type: "sum",
  92. decimals: 2
  93. }, {
  94. name: "xcentway",
  95. type: "sum",
  96. decimals: 2
  97. }, {
  98. name: "xcentwayOrdQuantity",
  99. type: "sum",
  100. decimals: 2
  101. }, {
  102. name: "xcentwayDeliverQuantity",
  103. type: "sum",
  104. decimals: 2
  105. }, {
  106. name: "luxxan",
  107. type: "sum",
  108. decimals: 2
  109. }, {
  110. name: "luxxanOrdQuantity",
  111. type: "sum",
  112. decimals: 2
  113. }, {
  114. name: "luxxanDeliverQuantity",
  115. type: "sum",
  116. decimals: 2
  117. }, {
  118. name: "drivemaster",
  119. type: "sum",
  120. decimals: 2
  121. }, {
  122. name: "drivemasterOrdQuantity",
  123. type: "sum",
  124. decimals: 2
  125. }, {
  126. name: "drivemasterDeliverQuantity",
  127. type: "sum",
  128. decimals: 2
  129. }, {
  130. name: "quantitySummary",
  131. type: "sum",
  132. decimals: 2
  133. }, {
  134. name: "orderSummary",
  135. type: "sum",
  136. decimals: 2
  137. }, {
  138. name: "deliverySummary",
  139. type: "sum",
  140. decimals: 2
  141. }],
  142. column: [
  143. {
  144. label: "年度",
  145. prop: "year",
  146. overHidden: true,
  147. type: "year",
  148. valueFormat: "yyyy",
  149. search: true
  150. }, {
  151. label: "月",
  152. prop: "month",
  153. overHidden: true,
  154. search: true
  155. }, {
  156. label: "客户名称",
  157. prop: "corpName",
  158. overHidden: true,
  159. search: true
  160. }, {
  161. label: "登马计划",
  162. prop: "drivemaster",
  163. overHidden: true
  164. }, {
  165. label: "订单",
  166. prop: "drivemasterOrdQuantity",
  167. overHidden: true
  168. }, {
  169. label: "发货",
  170. prop: "drivemasterDeliverQuantity",
  171. overHidden: true
  172. }, {
  173. label: "欧记计划",
  174. prop: "keter",
  175. overHidden: true
  176. }, {
  177. label: "订单",
  178. prop: "keterOrdQuantity",
  179. overHidden: true
  180. }, {
  181. label: "发货",
  182. prop: "keterDeliverQuantity",
  183. overHidden: true
  184. }, {
  185. label: "爱特路计划",
  186. prop: "xcentway",
  187. width: 100,
  188. overHidden: true
  189. }, {
  190. label: "订单",
  191. prop: "xcentwayOrdQuantity",
  192. overHidden: true
  193. }, {
  194. label: "发货",
  195. prop: "xcentwayDeliverQuantity",
  196. overHidden: true
  197. }, {
  198. label: "路迈计划",
  199. prop: "luxxan",
  200. overHidden: true
  201. }, {
  202. label: "订单",
  203. prop: "luxxanOrdQuantity",
  204. overHidden: true
  205. }, {
  206. label: "发货",
  207. prop: "luxxanDeliverQuantity",
  208. overHidden: true
  209. }, {
  210. label: "订单完成率(%)",
  211. prop: "orderCompletionRate",
  212. width: 160,
  213. overHidden: true
  214. }, {
  215. label: "发货完成率(%)",
  216. prop: "deliveryCompletionRate",
  217. width: 160,
  218. overHidden: true
  219. }, {
  220. label: "计划汇总",
  221. prop: "quantitySummary",
  222. width: 160,
  223. overHidden: true
  224. }, {
  225. label: "订单汇总",
  226. prop: "orderSummary",
  227. width: 160,
  228. overHidden: true
  229. }, {
  230. label: "发货汇总",
  231. prop: "deliverySummary",
  232. width: 160,
  233. overHidden: true
  234. }
  235. // , {
  236. // label: "统计方式",
  237. // prop: "showAll",
  238. // searchSpan: 8,
  239. // searchOrder: 0,
  240. // overHidden: true,
  241. // type: "select",
  242. // clearable: false,
  243. // search: true,
  244. // hide: true,
  245. // showColumn: false,
  246. // dicData: [{
  247. // label: '年',
  248. // value: 0
  249. // }, {
  250. // label: '季度',
  251. // value: 1
  252. // }, {
  253. // label: '月',
  254. // value: 2
  255. // }],
  256. // searchValue: 0
  257. // }
  258. ]
  259. }
  260. };
  261. },
  262. async created() {
  263. this.option = await this.getColumnData(this.getColumnName(258), this.optionBack);
  264. },
  265. methods: {
  266. cellStyle() {
  267. return "padding:0;height:40px;";
  268. },
  269. searchCriteriaSwitch(type) {
  270. if (type) {
  271. this.option.height = this.option.height - 46;
  272. } else {
  273. this.option.height = this.option.height + 46;
  274. }
  275. this.$refs.crud.getTableHeight();
  276. },
  277. //点击搜索按钮触发
  278. searchChange(params, done) {
  279. this.page.currentPage = 1;
  280. this.onLoad(this.page, params);
  281. done();
  282. },
  283. refreshChange() {
  284. this.onLoad(this.page, this.search);
  285. },
  286. currentChange(val) {
  287. this.page.currentPage = val;
  288. },
  289. sizeChange(val) {
  290. this.page.currentPage = 1;
  291. this.page.pageSize = val;
  292. },
  293. onLoad(page, params = {}) {
  294. let data = this.deepClone(Object.assign({}, params, this.search));
  295. this.loading = true;
  296. getList(
  297. page.currentPage,
  298. page.pageSize,
  299. Object.assign(data)
  300. ).then(res => {
  301. this.dataList = res.data.data.records ? res.data.data.records : [];
  302. this.page.total = res.data.data.total;
  303. if (this.page.total) {
  304. this.option.height = window.innerHeight - 210;
  305. }
  306. }).finally(() => {
  307. this.loading = false;
  308. });
  309. },
  310. //列保存触发
  311. async saveColumn() {
  312. const inSave = await this.saveColumnData(this.getColumnName(258), this.option);
  313. if (inSave) {
  314. this.$message.success("保存成功");
  315. //关闭窗口
  316. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  317. }
  318. },
  319. async resetColumn() {
  320. this.option = this.optionBack;
  321. const inSave = await this.delColumnData(this.getColumnName(258), this.optionBack);
  322. if (inSave) {
  323. this.$message.success("重置成功");
  324. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  325. }
  326. },
  327. editOpen(row) {
  328. },
  329. outExport() {
  330. let config = {params: {...this.search}}
  331. if (config.params) {
  332. for (const propName of Object.keys(config.params)) {
  333. const value = config.params[propName];
  334. if (value !== null && typeof (value) !== "undefined") {
  335. if (value instanceof Array) {
  336. for (const key of Object.keys(value)) {
  337. let params = propName + '[' + key + ']';
  338. config.params[params] = value[key]
  339. }
  340. delete config.params[propName]
  341. }
  342. }
  343. }
  344. }
  345. const routeData = this.$router.resolve({
  346. path: '/api/blade-box-tube/annualItem/annualBudgetProfitExcel', //跳转目标窗口的地址
  347. query: {
  348. ...config.params //括号内是要传递给新窗口的参数
  349. }
  350. })
  351. window.open(routeData.href.slice(1, routeData.href.length) + '&' + `${this.website.tokenHeader}=${getToken()}`);
  352. }
  353. }
  354. };
  355. </script>
  356. <style scoped>
  357. .page-crad ::v-deep .basic-container__card {
  358. height: 94.2vh;
  359. }
  360. ::v-deep .el-table__expanded-cell[class*="cell"] {
  361. padding: 0px;
  362. }
  363. .itemTable ::v-deep .el-table {
  364. width: 100%;
  365. }
  366. </style>