Overview_LngSummary.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. <template>
  2. <div>
  3. <div>
  4. <span style="color: #ff9955; font-size: 25px">|</span
  5. ><span style="font-size: 20px">数据概览</span>
  6. <el-form
  7. style="margin-left: 20px"
  8. ref="queryForm"
  9. :inline="true"
  10. v-show="showSearch"
  11. label-width="68px"
  12. >
  13. <el-form-item>
  14. <el-button size="mini" @click="getData(0)">今天</el-button>
  15. <el-button size="mini" @click="getData(1)">昨天</el-button>
  16. <el-button size="mini" @click="getData(2)">本周</el-button>
  17. <el-button size="mini" @click="getData(3)">本月</el-button>
  18. <el-date-picker
  19. style="margin: 0px 10px"
  20. v-model="dateRangeCreatedDate"
  21. type="datetimerange"
  22. value-format="yyyy-MM-dd HH:mm:ss"
  23. size="mini"
  24. range-separator="至"
  25. start-placeholder="开始日期"
  26. end-placeholder="结束日期"
  27. >
  28. </el-date-picker>
  29. <el-button type="cyan" size="mini" @click="getData(4)"
  30. >查询</el-button
  31. >
  32. </el-form-item>
  33. </el-form>
  34. <el-row :gutter="10" class="panel-group">
  35. <el-col :xs="12" :sm="12" :lg="6">
  36. <div class="flex xiaoliang">
  37. <div style="line-height: 62px; font-size: 2vw">
  38. {{ form.zongliters }}
  39. </div>
  40. <div style="font-size: 2vw">总销量(L)</div>
  41. </div>
  42. </el-col>
  43. <el-col :xs="12" :sm="12" :lg="6">
  44. <div class="flex xiaoe">
  45. <div style="line-height: 62px; font-size: 2vw">
  46. {{ form.zongAmt }}
  47. </div>
  48. <div style="font-size: 2vw">总金额(元)</div>
  49. </div>
  50. </el-col>
  51. <el-col :xs="12" :sm="12" :lg="6">
  52. <div class="flex qiyou">
  53. <div style="font-size: 28px; margin-top: -20px">汽油</div>
  54. <div class="flex-qy" style="margin-top: 30px">
  55. <div class="flex-qy-sx" style="margin-right: 10px">
  56. <div style="font-size: 1.5vw">{{ form.qyliters }}</div>
  57. <div style="font-size: 1.5vw">升数(L)</div>
  58. </div>
  59. <div class="flex-qy-sx" style="margin-left: 10px">
  60. <div style="font-size: 1.5vw">{{ form.qyamt }}</div>
  61. <div style="font-size: 1.5vw">金额(元)</div>
  62. </div>
  63. </div>
  64. </div>
  65. </el-col>
  66. <el-col :xs="12" :sm="12" :lg="6">
  67. <div class="flex chaiyou">
  68. <div style="font-size: 28px; margin-top: -20px">柴油</div>
  69. <div class="flex-qy" style="margin-top: 30px">
  70. <div class="flex-qy-sx" style="margin-right: 10px">
  71. <div style="font-size: 1.5vw">{{ form.cyliters }}</div>
  72. <div style="font-size: 1.5vw">升数(L)</div>
  73. </div>
  74. <div class="flex-qy-sx" style="margin-left: 10px">
  75. <div style="font-size: 1.5vw">{{ form.cyamt }}</div>
  76. <div style="font-size: 1.5vw">金额(元)</div>
  77. </div>
  78. </div>
  79. </div>
  80. </el-col>
  81. </el-row>
  82. </div>
  83. <div style="width: 100%; height: 151px; background: #ffffff">
  84. <span style="color: #ff9955; font-size: 25px">|</span
  85. ><span style="font-size: 20px">收入概览</span>
  86. <el-row
  87. style="
  88. display: flex;
  89. align-items: center;
  90. justify-content: center;
  91. width: 100%;
  92. height: 100%;
  93. "
  94. >
  95. <el-col :xs="12" :sm="12" :lg="3">
  96. <div class="flex-sr">
  97. <div>
  98. <span class="sr-font">{{ form.wxAmt }}</span>
  99. </div>
  100. <div>微信(元)</div>
  101. </div>
  102. </el-col>
  103. <el-col :xs="12" :sm="12" :lg="3">
  104. <div class="flex-sr">
  105. <div>
  106. <span class="sr-font">{{ form.zfbAmt }}</span>
  107. </div>
  108. <div>支付宝(元)</div>
  109. </div>
  110. </el-col>
  111. <el-col :xs="12" :sm="12" :lg="3">
  112. <div class="flex-sr">
  113. <div>
  114. <span class="sr-font">{{ form.xjAmt }}</span>
  115. </div>
  116. <div>现金(元)</div>
  117. </div>
  118. </el-col>
  119. <el-col :xs="12" :sm="12" :lg="3">
  120. <div class="flex-sr">
  121. <div>
  122. <span class="sr-font">{{ form.posAmt }}</span>
  123. </div>
  124. <div>POS(元)</div>
  125. </div>
  126. </el-col>
  127. <el-col :xs="12" :sm="12" :lg="3">
  128. <div class="flex-sr">
  129. <div>
  130. <span class="sr-font">{{ form.didiAppAmt }}</span>
  131. </div>
  132. <div>滴滴APP(元)</div>
  133. </div>
  134. </el-col>
  135. <el-col :xs="12" :sm="12" :lg="3">
  136. <div class="flex-sr">
  137. <div>
  138. <span class="sr-font">{{ form.tyAppAmt }}</span>
  139. </div>
  140. <div>团油APP(元)</div>
  141. </div>
  142. </el-col>
  143. <el-col :xs="12" :sm="12" :lg="3">
  144. <div class="flex-sr">
  145. <div>
  146. <span class="sr-font">{{ form.otherAmt }}</span>
  147. </div>
  148. <div>其他(元)</div>
  149. </div>
  150. </el-col>
  151. </el-row>
  152. </div>
  153. <div style="width: 100%; height: 151px">
  154. <span style="color: #ff9955; font-size: 25px">|</span
  155. ><span style="font-size: 20px">今日数据</span>
  156. <el-row
  157. style="
  158. display: flex;
  159. align-items: center;
  160. justify-content: center;
  161. width: 100%;
  162. height: 100%;
  163. "
  164. >
  165. <el-col :xs="12" :sm="12" :lg="3">
  166. <div class="flex-sr">
  167. <div>
  168. <span class="sr-font">{{ infoFrom.czAmt }}</span>
  169. </div>
  170. <div>充值金额(元)</div>
  171. </div>
  172. </el-col>
  173. <el-col :xs="12" :sm="12" :lg="3">
  174. <div class="flex-sr">
  175. <div>
  176. <span class="sr-font">{{ infoFrom.xfAmt }}</span>
  177. </div>
  178. <div>消费金额(元)</div>
  179. </div>
  180. </el-col>
  181. <el-col :xs="12" :sm="12" :lg="3">
  182. <div class="flex-sr">
  183. <div>
  184. <span class="sr-font"> 0 </span>
  185. </div>
  186. <div>余额(元)</div>
  187. </div>
  188. </el-col>
  189. <el-col :xs="12" :sm="12" :lg="3">
  190. <div class="flex-sr">
  191. <div>
  192. <span class="sr-font">{{ infoFrom.jrhy }}</span>
  193. </div>
  194. <div>新增电子卡(个)</div>
  195. </div>
  196. </el-col>
  197. <el-col :xs="12" :sm="12" :lg="3">
  198. <div class="flex-sr">
  199. <div>
  200. <span class="sr-font"> 0 </span>
  201. </div>
  202. <div>电子卡总数(个)</div>
  203. </div>
  204. </el-col>
  205. <el-col :xs="12" :sm="12" :lg="3">
  206. <div class="flex-sr">
  207. <div><span>0</span></div>
  208. <div>营销费用(元)</div>
  209. </div>
  210. </el-col>
  211. <el-col :xs="12" :sm="12" :lg="3">
  212. <div class="flex-sr">
  213. <div><span>0</span></div>
  214. <div>营销产出比(%)</div>
  215. </div>
  216. </el-col>
  217. </el-row>
  218. </div>
  219. </div>
  220. </template>
  221. <script>
  222. import {
  223. listSum,
  224. listOilType,
  225. listViewData,
  226. listCZXFData,
  227. listHYData,
  228. listJRHYData,
  229. } from "@/api/dataSource/saleReport";
  230. export default {
  231. name: "Overview_LngSummary",
  232. data() {
  233. return {
  234. // 显示搜索条件
  235. showSearch: true,
  236. dateRangeCreatedDate: [],
  237. // 数据概览 和 收入概览
  238. form: {
  239. zongAmt: 0, // 总金额
  240. zongliters: 0, // 总销量
  241. qyamt: 0, // 汽油金额
  242. cyamt: 0, // 柴油金额
  243. qyliters: 0, // 汽油升数
  244. cyliters: 0,
  245. wxAmt: 0,
  246. zfbAmt: 0,
  247. xjAmt: 0,
  248. didiAppAmt: 0,
  249. tyAppAmt: 0,
  250. otherAmt: 0,
  251. memberAmt: 0,
  252. posAmt: 0,
  253. },
  254. // 今日数据
  255. infoFrom: {
  256. czAmt: 0,
  257. xfAmt: 0,
  258. yeAmt: 0,
  259. jrhy: 0,
  260. zonghy: 0,
  261. },
  262. // 表单校验
  263. rules: {},
  264. };
  265. },
  266. created() {
  267. this.getData(0);
  268. },
  269. methods: {
  270. /** 查询优惠劵管理列表 */
  271. getList(query) {
  272. listSum(query).then((response) => {
  273. if (response.data!=null ) {
  274. this.form.zongAmt = response.data.amt;
  275. this.form.zongliters = response.data.orderLiters;
  276. }
  277. });
  278. listOilType(query).then((response) => {
  279. if (response.hasOwnProperty("rows")) {
  280. for (let i in response.rows) {
  281. if (response.rows[i].oilType === "1") {
  282. this.form.qyamt = response.rows[i].amt;
  283. this.form.qyliters = response.rows[i].orderLiters;
  284. } else if (response.rows[i].oilType === "2") {
  285. this.form.cyamt = response.rows[i].amt;
  286. this.form.cyliters = response.rows[i].orderLiters;
  287. }
  288. }
  289. }
  290. });
  291. listViewData(query).then((response) => {
  292. if (response.data!=null ) {
  293. if (response.data.wxAmt) {
  294. this.form.wxAmt = response.data.wxAmt;
  295. } else {
  296. this.form.wxAmt = 0;
  297. }
  298. if (response.data.zfbAmt) {
  299. this.form.zfbAmt = response.data.zfbAmt;
  300. } else {
  301. this.form.zfbAmt = 0;
  302. }
  303. if (response.data.xjAmt) {
  304. this.form.xjAmt = response.data.xjAmt;
  305. } else {
  306. this.form.xjAmt = 0;
  307. }
  308. if (response.data.didiAppAmt) {
  309. this.form.didiAppAmt = response.data.didiAppAmt;
  310. } else {
  311. this.form.didiAppAmt = 0;
  312. }
  313. if (response.data.tyAppAmt) {
  314. this.form.tyAppAmt = response.data.tyAppAmt;
  315. } else {
  316. this.form.tyAppAmt = 0;
  317. }
  318. if (response.data.otherAmt) {
  319. this.form.otherAmt = response.data.otherAmt;
  320. } else {
  321. this.form.otherAmt = 0;
  322. }
  323. if (response.data.memberAmt) {
  324. this.form.memberAmt = response.data.memberAmt;
  325. } else {
  326. this.form.memberAmt = 0;
  327. }
  328. if (response.data.posAmt) {
  329. this.form.posAmt = response.data.posAmt;
  330. } else {
  331. this.form.posAmt = 0;
  332. }
  333. }
  334. });
  335. },
  336. //本日的数据
  337. getTodayList(query) {
  338. // 查询汇总充值金额
  339. listCZXFData(query).then((response) => {
  340. if (response.data!=null ) {
  341. if (response.data.czAmt) {
  342. this.infoFrom.czAmt = response.data.czAmt;
  343. } else {
  344. this.infoFrom.czAmt = 0;
  345. }
  346. if (response.data.xfAmt) {
  347. this.infoFrom.xfAmt = response.data.xfAmt;
  348. } else {
  349. this.infoFrom.xfAmt = 0;
  350. }
  351. }
  352. });
  353. // 汇总电子卡数据
  354. listHYData(query).then((response) => {
  355. if (response.data!=null ) {
  356. if (response.data.amt) {
  357. this.infoFrom.yeAmt = response.data.amt;
  358. } else {
  359. this.infoFrom.yeAmt = 0;
  360. }
  361. if (response.data.num) {
  362. this.infoFrom.zonghy = response.data.num;
  363. } else {
  364. this.infoFrom.zonghy = 0;
  365. }
  366. }
  367. });
  368. // 今日汇总数据
  369. listJRHYData(query).then((response) => {
  370. if (response.data!=null ) {
  371. if (response.data.num) {
  372. this.infoFrom.jrhy = response.data.num;
  373. } else {
  374. this.infoFrom.jrhy = 0;
  375. }
  376. }
  377. });
  378. },
  379. getData(type) {
  380. let day;
  381. this.reset()
  382. const query = {
  383. stationId: null,
  384. createdDate: null,
  385. stationName: null,
  386. beginTime: null,
  387. endTime: null,
  388. levelId: this.levelId
  389. };
  390. switch (type) {
  391. case 0: // 今日
  392. query.beginTime = this.dateCalculate();
  393. query.endTime = this.dateCalculate(1);
  394. this.getTodayList(query);
  395. break;
  396. case 1: // 昨天
  397. query.beginTime = this.dateCalculate(-1);
  398. query.endTime = this.dateCalculate();
  399. break;
  400. case 2: // 本周
  401. day = new Date().getDay();
  402. day = day === 0 ? 7 : day;
  403. day = -(day - 1);
  404. query.beginTime = this.dateCalculate(day);
  405. query.endTime = this.dateCalculate(1);
  406. break;
  407. case 3: // 本月
  408. day = new Date().getDay();
  409. let datetime =new Date();
  410. query.beginTime =datetime.getFullYear() +"-" + (new Date().getMonth() + 1) +
  411. "-01 00:00:00";
  412. //query.beginTime = this .dateCalculate(day);
  413. query.endTime = this.dateCalculate(1);
  414. break;
  415. case 4: // 指定日期
  416. query.beginTime = this.dateRangeCreatedDate[0];
  417. query.endTime = this.dateRangeCreatedDate[1];
  418. default:
  419. console.log("switch");
  420. }
  421. this.getList(query)
  422. },
  423. dateCalculate(num = 0, date = false) {
  424. if (!date) {
  425. date = new Date(); //没有传入值时,默认是当前日期
  426. date =
  427. date.getFullYear() +
  428. "-" +
  429. (date.getMonth() + 1) +
  430. "-" +
  431. date.getDate();
  432. }
  433. date += " 00:00:00"; //设置为当天凌晨12点
  434. date = date.replace(/-/g, '/');
  435. date = Date.parse(new Date(date)) / 1000; //转换为时间戳
  436. date += 86400 * num; //修改后的时间戳
  437. var newDate = new Date(parseInt(date) * 1000); //转换为时间
  438. return (
  439. newDate.getFullYear() +
  440. "-" +
  441. (newDate.getMonth() + 1) +
  442. "-" +
  443. newDate.getDate()
  444. );
  445. },
  446. // 表单重置
  447. reset() {
  448. this.form = {
  449. zongAmt: 0,
  450. zongliters: 0,
  451. qyamt: 0,
  452. cyamt: 0,
  453. qyliters: 0,
  454. cyliters: 0,
  455. wxAmt: 0,
  456. zfbAmt: 0,
  457. xjAmt: 0,
  458. didiAppAmt: 0,
  459. tyAppAmt: 0,
  460. otherAmt: 0,
  461. memberAmt: 0,
  462. posAmt: 0,
  463. };
  464. },
  465. },
  466. };
  467. </script>
  468. <style lang="scss" scoped>
  469. .flex {
  470. display: flex;
  471. align-items: center;
  472. justify-content: center;
  473. width: 100%;
  474. height: 170px;
  475. flex-direction: column;
  476. }
  477. .xiaoliang {
  478. background-image: url("../../assets/image/bj-1.png");
  479. background-size: 100% 100%;
  480. }
  481. .xiaoe {
  482. background-image: url("../../assets/image/bj-02.png");
  483. background-size: 100% 100%;
  484. }
  485. .qiyou {
  486. background-image: url("../../assets/image/bj-3.png");
  487. background-size: 100% 100%;
  488. }
  489. .chaiyou {
  490. background-image: url("../../assets/image/bj-4.png");
  491. background-size: 100% 100%;
  492. }
  493. .flex-qy {
  494. display: flex;
  495. align-items: center;
  496. justify-content: center;
  497. }
  498. .flex-qy-sx {
  499. display: flex;
  500. align-items: center;
  501. justify-content: center;
  502. flex-direction: column;
  503. }
  504. .panel-group {
  505. padding-left: 10px;
  506. }
  507. .flex-sr {
  508. display: flex;
  509. align-items: center;
  510. justify-content: center;
  511. width: 100%;
  512. flex-direction: column;
  513. }
  514. .sr-font {
  515. font-size: 20px;
  516. color: #f4a645;
  517. }
  518. </style>