financeManager.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869
  1. <template>
  2. <div class="m-container">
  3. <h2>
  4. <div class="squrt"></div>财务管理
  5. </h2>
  6. <div class="m-core">
  7. <div class="newBand"
  8. @click="onOrderExport"
  9. v-permission="{child: 'export/routeOrderList', parent: '/financeManager'}">报表导出</div>
  10. <div class="newBand"
  11. v-permission="{child: 'routeOrder/add', parent: '/financeManager'}"
  12. @click="()=>{routeOrderStatus = true;isAdd=true}">添加订单</div>
  13. <div class="newBand"
  14. v-permission="{child: 'adapay/exportBill', parent: '/financeManager'}"
  15. @click="onAdaPayExport">汇付订单导出</div>
  16. <!-- 搜索类型 -->
  17. <el-form :inline="true"
  18. class="searchForm"
  19. v-model.trim="searchForm">
  20. <el-form-item>
  21. <el-input placeholder="学生编号/姓名/手机号"
  22. type="text"
  23. v-model.trim="searchForm.search"></el-input>
  24. </el-form-item>
  25. <el-form-item>
  26. <el-input placeholder="交易流水号"
  27. type="text"
  28. v-model.trim="searchForm.transNo"></el-input>
  29. </el-form-item>
  30. <el-form-item>
  31. <el-input placeholder="订单号"
  32. type="text"
  33. v-model.trim="searchForm.orderNo"></el-input>
  34. </el-form-item>
  35. <el-form-item>
  36. <el-input placeholder="收款账户"
  37. type="text"
  38. v-model.trim="searchForm.merNos"></el-input>
  39. </el-form-item>
  40. <el-form-item>
  41. <el-input placeholder="余额支付大于等于"
  42. type="number"
  43. @mousewheel.native.prevent
  44. v-model.trim="searchForm.balancePaymentAmount"></el-input>
  45. </el-form-item>
  46. <el-form-item>
  47. <el-input placeholder="现金支付大于等于"
  48. type="number"
  49. @mousewheel.native.prevent
  50. v-model.trim="searchForm.actualAmount"></el-input>
  51. </el-form-item>
  52. <el-form-item>
  53. <el-input placeholder="余额支付小于等于"
  54. type="number"
  55. @mousewheel.native.prevent
  56. v-model.trim="searchForm.lessBalancePaymentAmount"></el-input>
  57. </el-form-item>
  58. <el-form-item>
  59. <el-input placeholder="现金支付小于等于"
  60. type="number"
  61. @mousewheel.native.prevent
  62. v-model.trim="searchForm.lessActualAmount"></el-input>
  63. </el-form-item>
  64. <el-form-item prop="routingOrganId">
  65. <el-select class="multiple"
  66. v-model.trim="searchForm.routingOrganId"
  67. filterable
  68. clearable
  69. @clear="onClear('routingOrganId')"
  70. placeholder="请选择分部">
  71. <el-option v-for="(item,index) in organList"
  72. :key="index"
  73. :label="item.name"
  74. :value="item.id"></el-option>
  75. </el-select>
  76. </el-form-item>
  77. <el-form-item>
  78. <el-date-picker v-model.trim="orderDate"
  79. style="width:410px;"
  80. type="daterange"
  81. value-format="yyyy-MM-dd"
  82. @change="searchOrderDate"
  83. :picker-options="{
  84. firstDayOfWeek: 1
  85. }"
  86. range-separator="至"
  87. start-placeholder="订单开始日期"
  88. end-placeholder="订单结束日期"></el-date-picker>
  89. </el-form-item>
  90. <el-form-item>
  91. <el-select v-model.trim="searchForm.paymentType"
  92. clearable
  93. filterable
  94. @clear="onClear('paymentType')"
  95. placeholder="交易类型">
  96. <el-option v-for="(item, index) in orderStatus"
  97. :key="index"
  98. :label="item.label"
  99. :value="item.value"></el-option>
  100. </el-select>
  101. </el-form-item>
  102. <el-form-item>
  103. <el-select v-model.trim="searchForm.paymentStatus"
  104. clearable
  105. filterable
  106. @clear="onClear('paymentStatus')"
  107. placeholder="交易状态">
  108. <el-option v-for="(item, index) in dealStatus"
  109. :key="index"
  110. :label="item.label"
  111. :value="item.value"></el-option>
  112. </el-select>
  113. </el-form-item>
  114. <el-form-item>
  115. <el-button @click="search"
  116. type="danger">搜索</el-button>
  117. <el-button @click="onReSet"
  118. type="primary">重置</el-button>
  119. </el-form-item>
  120. </el-form>
  121. <!-- 列表 -->
  122. <div style="font-size: 14px; color: #F85043; padding-bottom: 10px;">
  123. 营收金额:{{ totalRevenueAmount|moneyFormat }}元
  124. <i style="width: 10px; display: inline-block"></i>
  125. 实收金额:{{ totalActualAmount|moneyFormat }}元
  126. <i style="width: 10px; display: inline-block"></i>
  127. 预收金额:{{ totalAdvanceAmount |moneyFormat}}元
  128. <i style="width: 10px; display: inline-block"></i>
  129. 预收余额:{{ totalUserBalance |moneyFormat}}元
  130. </div>
  131. <div class="tableWrap">
  132. <el-table :data="tableList"
  133. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  134. <el-table-column align="center"
  135. prop="transNo"
  136. label="交易流水号"></el-table-column>
  137. <el-table-column align="center"
  138. prop="orderNo"
  139. label="订单号"></el-table-column>
  140. <el-table-column align="center"
  141. width="150"
  142. prop="createTime"
  143. label="订单日期">
  144. <template slot-scope="scope">{{ scope.row.createTime | dateForMinFormat }}</template>
  145. </el-table-column>
  146. <el-table-column align="center"
  147. width="100px"
  148. label="交易类型">
  149. <template slot-scope="scope">{{ scope.row.type | orderType }}</template>
  150. </el-table-column>
  151. <el-table-column align="center"
  152. prop="expectAmount"
  153. label="应付金额">
  154. <template slot-scope="scope">
  155. <div>
  156. {{scope.row.expectAmount | moneyFormat}}
  157. </div>
  158. </template>
  159. </el-table-column>
  160. <el-table-column align="center"
  161. prop="balancePaymentAmount"
  162. label="余额支付">
  163. <template slot-scope="scope">
  164. <div>
  165. {{scope.row.balancePaymentAmount | moneyFormat}}
  166. </div>
  167. </template>
  168. </el-table-column>
  169. <el-table-column align="center"
  170. prop="actualAmount"
  171. label="现金支付">
  172. <template slot-scope="scope">
  173. <div>
  174. {{scope.row.actualAmount | moneyFormat}}
  175. </div>
  176. </template>
  177. </el-table-column>
  178. <el-table-column align="center"
  179. prop="routeAmount"
  180. label="分润金额">
  181. <template slot-scope="scope">
  182. <div>
  183. {{scope.row.routeAmount | moneyFormat}}
  184. </div>
  185. </template>
  186. </el-table-column>
  187. <el-table-column align="center"
  188. prop="routeBalanceAmount"
  189. label="分润余额">
  190. <template slot-scope="scope">
  191. <div>
  192. {{scope.row.routeBalanceAmount | moneyFormat}}
  193. </div>
  194. </template>
  195. </el-table-column>
  196. <el-table-column align="center"
  197. label="学员姓名">
  198. <template slot-scope="scope">
  199. <div>
  200. <div v-if="scope.row.type!=='OUTORDER'">
  201. {{ scope.row.user.username }}
  202. <span v-if="scope.row.user.username && scope.row.user.phone">/</span>
  203. {{ scope.row.user.phone }}
  204. </div>
  205. </div>
  206. </template>
  207. </el-table-column>
  208. <el-table-column align="center"
  209. prop="paymentChannel"
  210. label="交易方式">
  211. <template slot-scope="scope">{{ scope.row.paymentChannel | paymentChannelStatus }}</template>
  212. </el-table-column>
  213. <el-table-column align="center"
  214. label="收款账户">
  215. <template slot-scope="scope">{{ scope.row.merNo }}</template>
  216. </el-table-column>
  217. <el-table-column align="center"
  218. label="交易状态">
  219. <template slot-scope="scope">{{ scope.row.status | dealStatus }}</template>
  220. </el-table-column>
  221. <el-table-column align="center"
  222. label="备注">
  223. <template slot-scope="scope">{{ scope.row.memo ? scope.row.memo : '-' }}</template>
  224. </el-table-column>
  225. <el-table-column align="center"
  226. fixed="right"
  227. width="150px"
  228. label="操作">
  229. <template slot-scope="scope">
  230. <div v-if="scope.row.groupType == 'OUTORDER'">
  231. <el-button type="text"
  232. @click='lookOrderInfo(scope.row)'>查看</el-button>
  233. <el-button type="text"
  234. @click="removeOrderInfo(scope.row)">删除</el-button>
  235. </div>
  236. </template>
  237. </el-table-column>
  238. </el-table>
  239. <pagination :total="pageInfo.total"
  240. :page.sync="pageInfo.page"
  241. :limit.sync="pageInfo.limit"
  242. :page-sizes="pageInfo.page_size"
  243. @pagination="getList" />
  244. </div>
  245. <el-dialog :title="isAdd?'添加订单':'查看'"
  246. destroy-on-close
  247. :visible.sync="routeOrderStatus"
  248. @close="onFormClose('ruleForm')"
  249. width="600px">
  250. <el-form :model="form"
  251. :rules="rules"
  252. ref="ruleForm">
  253. <el-form-item label="所属分部"
  254. prop="organId"
  255. :label-width="formLabelWidth">
  256. <el-select v-model.trim="form.organId"
  257. :disabled="!isAdd"
  258. @change="changeOrgin"
  259. style="width: 100% !important;">
  260. <el-option v-for="(item,index) in organList"
  261. :key="index"
  262. :label="item.name"
  263. :value="item.id"></el-option>
  264. </el-select>
  265. </el-form-item>
  266. <el-form-item label="所属学校"
  267. prop="schoolId"
  268. :label-width="formLabelWidth">
  269. <el-select v-model="form.schoolId"
  270. :disabled="!isAdd"
  271. @change="checkSchool"
  272. style="width: 100% !important;">
  273. <el-option v-for="(item,index) in cooperationList"
  274. :key="index"
  275. :label="item.name"
  276. :value="item.id"></el-option>
  277. </el-select>
  278. </el-form-item>
  279. <!-- <el-form-item label="金额(元)"
  280. prop="actualAmount"
  281. :label-width="formLabelWidth">
  282. <el-input v-model="form.actualAmount"
  283. type="number"
  284. @mousewheel.native.prevent
  285. v-number
  286. placeholder="请输入金额"></el-input>
  287. </el-form-item> -->
  288. <el-form-item label="交易流水号"
  289. prop="transNo"
  290. :label-width="formLabelWidth">
  291. <el-input placeholder="请输入交易流水号"
  292. type="text"
  293. :disabled="!isAdd"
  294. v-model.trim="form.transNo"></el-input>
  295. </el-form-item>
  296. <el-form-item label="收款账户"
  297. prop="merNo"
  298. :label-width="formLabelWidth">
  299. <el-input placeholder="请输入收款账户"
  300. type="text"
  301. :disabled="!isAdd"
  302. v-model.trim="form.merNo"></el-input>
  303. </el-form-item>
  304. <el-form-item label="交易日期"
  305. prop="payTime"
  306. :label-width="formLabelWidth">
  307. <el-date-picker style="width: 100%;"
  308. :disabled="!isAdd"
  309. v-model="form.payTime"
  310. type="datetime"
  311. format="yyyy-MM-dd HH:mm:ss"
  312. value-format="yyyy-MM-dd HH:mm:ss"
  313. placeholder="选择交易日期">
  314. </el-date-picker>
  315. </el-form-item>
  316. <el-form-item label="销售金额"
  317. prop="goodsAmount"
  318. :label-width="formLabelWidth">
  319. <el-input v-model="form.goodsAmount"
  320. @mousewheel.native.prevent
  321. type="number"
  322. :disabled="!isAdd"
  323. placeholder="请输入销售金额" />
  324. </el-form-item>
  325. <el-form-item label="服务金额"
  326. prop="serviceAmount"
  327. :label-width="formLabelWidth">
  328. <el-input type="number"
  329. @mousewheel.native.prevent
  330. :disabled="!isAdd"
  331. v-model="form.serviceAmount"
  332. placeholder="请输入服务金额" />
  333. </el-form-item>
  334. <div v-if="form.goodsAmount">
  335. <div v-for="(goodsList, index) in form.goodsList"
  336. :key="index">
  337. <el-form-item :label="'商品名称' + (index + 1)"
  338. :label-width="formLabelWidth"
  339. class="setWidth"
  340. :prop="'goodsList.' + index + '.id'"
  341. :rules="[{ required: true, message: '请选择商品', trigger: 'change' }]">
  342. <el-select v-model.trim="goodsList.id"
  343. :disabled="!isAdd"
  344. @change="checkgoods"
  345. placeholder="请选择商品">
  346. <el-option v-for="(item,index) in shopList"
  347. :key="index"
  348. :label="item.name"
  349. :value="item.id"></el-option>
  350. </el-select>
  351. </el-form-item>
  352. <el-form-item class="setWidth"
  353. style="margin-right: 10px"
  354. :prop="'goodsList.' + index + '.number'"
  355. :rules="validAmount">
  356. <!-- <el-input-number style="width: 160px;" v-model="goodsList.number" placeholder="商品数量"></el-input-number> -->
  357. <el-input type="age"
  358. style="width: 160px;"
  359. :disabled="!isAdd"
  360. clearable
  361. placeholder="请输入商品数量"
  362. @mousewheel.native.prevent
  363. v-model.number="goodsList.number"></el-input>
  364. </el-form-item>
  365. <el-button icon="el-icon-minus"
  366. :disabled="!isAdd"
  367. v-if="form.goodsList.length > 1"
  368. circle
  369. @click.prevent="removeGoodsList(goodsList)"></el-button>
  370. <el-button icon="el-icon-plus"
  371. :disabled="!isAdd"
  372. @click.prevent="addGoodsList"
  373. circle
  374. style="margin-left: 5px;"></el-button>
  375. </div>
  376. </div>
  377. <el-form-item label="备注"
  378. :label-width="formLabelWidth">
  379. <el-input placeholder="请输入备注"
  380. :disabled="!isAdd"
  381. v-model.trim="form.memo"
  382. type="textarea"
  383. :rows="2"></el-input>
  384. </el-form-item>
  385. </el-form>
  386. <span slot="footer"
  387. class="dialog-footer">
  388. <el-button @click="routeOrderStatus = false">取 消</el-button>
  389. <el-button v-if="!isAdd"
  390. @click="routeOrderStatus = false"
  391. type="primary">确 定</el-button>
  392. <el-button v-else
  393. @click="onOrderSubmit('ruleForm')"
  394. type="primary">确 定</el-button>
  395. </span>
  396. </el-dialog>
  397. </div>
  398. </div>
  399. </template>
  400. <script>
  401. import pagination from "@/components/Pagination/index";
  402. import { routeOrderFinance, routeOrderAdd, getOrderInfo, orderDelete } from "@/api/orderManager";
  403. import { goodsQuery } from '@/api/businessManager'
  404. import { getEmployeeOrgan, getAddress, getCooperation } from "@/api/buildTeam";
  405. // import store from '@/store'
  406. import { orderStatus, dealStatus } from "@/utils/searchArray";
  407. import cleanDeep from 'clean-deep'
  408. import axios from "axios";
  409. import qs from "qs";
  410. import { getToken } from "@/utils/auth";
  411. import load from "@/utils/loading";
  412. let validAmount = (rule, value, callback) => {
  413. if (!value) {
  414. callback(new Error("请输入商品数量"));
  415. } else if (value < 0) {
  416. callback(new Error("输入商品数量必须大于0"));
  417. } else if (value > 999) {
  418. callback(new Error("输入商品数量必须小于999"));
  419. } else {
  420. callback();
  421. }
  422. };
  423. export default {
  424. components: { pagination },
  425. name: "incomeTwo",
  426. data () {
  427. return {
  428. orderStatus: orderStatus,
  429. dealStatus: dealStatus,
  430. orderDate: null,
  431. searchForm: {
  432. search: null,
  433. orderStartDate: null,
  434. orderEndDate: null,
  435. paymentStatus: "SUCCESS",
  436. paymentType: null,
  437. routingOrganId: null,
  438. actualAmount: null,
  439. balancePaymentAmount: null,
  440. orderNo: null,
  441. transNo: null,
  442. merNos: null,
  443. lessBalancePaymentAmount: null,
  444. lessActualAmount: null
  445. },
  446. tableList: [],
  447. organList: [],
  448. shopList: [],
  449. cooperationList: [],
  450. pageInfo: {
  451. // 分页规则
  452. limit: 10, // 限制显示条数
  453. page: 1, // 当前页
  454. total: 0, // 总条数
  455. page_size: [10, 20, 40, 50] // 选择限制显示条数
  456. },
  457. totalUserBalance: 0,
  458. totalActualAmount: 0,
  459. totalAdvanceAmount: 0,
  460. totalRevenueAmount: 0,
  461. formLabelWidth: "100px",
  462. routeOrderStatus: false,
  463. isAdd: true,
  464. form: {
  465. organId: null,
  466. transNo: null,
  467. type: "OTHER",
  468. merNo: null,
  469. actualAmount: null,
  470. memo: null,
  471. payTime: null,
  472. serviceAmount: null,
  473. goodsAmount: null,
  474. schoolId: null,
  475. goodsList: [{
  476. id: null,
  477. number: null
  478. }]
  479. },
  480. validAmount: [
  481. { required: true, validator: validAmount, trigger: 'blur' },
  482. { type: 'number', message: '商品数量必须为数字' }],
  483. rules: {
  484. organId: [
  485. { required: true, message: "请选择所属分部", trigger: "change" }
  486. ],
  487. // schoolId: [
  488. // { required: true, message: "请选择学校", trigger: "change" }
  489. // ],
  490. actualAmount: [
  491. { required: true, message: "请输入金额", trigger: "blur" }
  492. ],
  493. transNo: [
  494. { required: true, message: "请输入交易流水号", trigger: "blur" }
  495. ],
  496. merNo: [
  497. { required: true, message: "请输入收款账户", trigger: "blur" }
  498. ],
  499. payTime: [
  500. { required: true, message: "选择交易日期", trigger: "change" }
  501. ],
  502. }
  503. }
  504. },
  505. mounted () {
  506. getEmployeeOrgan().then(res => {
  507. if (res.code == 200) {
  508. this.organList = res.data;
  509. }
  510. });
  511. goodsQuery({ status: 1, rows: 99999 }).then(res => {
  512. if (res.code === 200) {
  513. this.shopList = res.data.rows
  514. }
  515. })
  516. var now = new Date();
  517. var startDate = new Date(
  518. Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())
  519. )
  520. .toISOString()
  521. .slice(0, 10);
  522. var endDate = new Date(
  523. Date.UTC(now.getFullYear(), now.getMonth(), now.getDate())
  524. )
  525. .toISOString()
  526. .slice(0, 10);
  527. this.orderDate = [];
  528. this.orderDate.push(startDate);
  529. this.orderDate.push(endDate);
  530. this.getList();
  531. },
  532. methods: {
  533. onClear (type) {
  534. if (type == "paymentType") {
  535. this.searchForm.paymentType = null;
  536. } else if (type == "paymentStatus") {
  537. this.searchForm.paymentStatus = null;
  538. } else if (type == "routingOrganId") {
  539. this.searchForm.routingOrganId = null;
  540. }
  541. },
  542. onOrderSubmit (formName) { // 添加订单
  543. this.$refs[formName].validate(valid => {
  544. if (valid) {
  545. if (!this.form.goodsAmount && !this.form.serviceAmount) {
  546. this.$message.error('请输入销售收入或服务收入')
  547. return
  548. }
  549. if (!this.form.goodsAmount) {
  550. this.form.goodsList = null
  551. }
  552. this.form.goodies = {}
  553. for (let i in this.form.goodsList) {
  554. this.form.goodies[this.form.goodsList[i]['id']] = this.form.goodsList[i]['number']
  555. }
  556. routeOrderAdd(this.form).then(res => {
  557. if (res.code == 200) {
  558. this.$message.success("添加成功");
  559. this.routeOrderStatus = false;
  560. this.getList();
  561. } else {
  562. this.$message.error(res.msg);
  563. }
  564. })
  565. } else {
  566. return;
  567. }
  568. });
  569. },
  570. onFormClose (formName) {
  571. this.form = {
  572. organId: null,
  573. transNo: null,
  574. type: "OTHER",
  575. merNo: null,
  576. actualAmount: null,
  577. memo: null,
  578. payTime: null,
  579. goodsList: [{
  580. id: null,
  581. number: null
  582. }]
  583. }
  584. // 关闭弹窗重置验证
  585. this.$refs[formName].resetFields();
  586. },
  587. onOrderExport () {
  588. // 报表导出
  589. let url = "/api-web/export/routeOrderList";
  590. let searchForm = this.searchForm;
  591. let data = {
  592. orderType: 3,
  593. search: searchForm.search,
  594. orderNo: searchForm.orderNo,
  595. transNo: searchForm.transNo,
  596. merNos: searchForm.merNos,
  597. actualAmount: searchForm.actualAmount,
  598. balancePaymentAmount: searchForm.balancePaymentAmount,
  599. paymentStatus: searchForm.paymentStatus,
  600. paymentType: searchForm.paymentType,
  601. organId: searchForm.organId,
  602. lessBalancePaymentAmount: searchForm.lessBalancePaymentAmount,
  603. lessActualAmount: searchForm.lessActualAmount
  604. };
  605. if (this.orderDate && this.orderDate.length > 0) {
  606. data.orderStartDate = this.orderDate[0];
  607. data.orderEndDate = this.orderDate[1];
  608. } else {
  609. data.orderStartDate = null;
  610. data.orderEndDate = null;
  611. }
  612. const options = {
  613. method: "POST",
  614. headers: {
  615. Authorization: getToken()
  616. },
  617. data: qs.stringify(cleanDeep(data)),
  618. url,
  619. responseType: "blob"
  620. };
  621. this.$confirm("您确定导出报表", "提示", {
  622. confirmButtonText: "确定",
  623. cancelButtonText: "取消",
  624. type: "warning"
  625. })
  626. .then(() => {
  627. load.startLoading();
  628. axios(options).then(res => {
  629. let blob = new Blob([res.data], {
  630. // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
  631. type: "application/vnd.ms-excel;charset=utf-8"
  632. //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
  633. });
  634. let objectUrl = URL.createObjectURL(blob);
  635. let link = document.createElement("a");
  636. let nowTime = new Date();
  637. let ymd =
  638. nowTime.getFullYear() +
  639. "" +
  640. (nowTime.getMonth() + 1) +
  641. "" +
  642. nowTime.getDate() +
  643. "" +
  644. nowTime.getHours() +
  645. "" +
  646. nowTime.getMinutes();
  647. let fname = "报表导出" + new Date().getTime(); //下载文件的名字
  648. link.href = objectUrl;
  649. link.setAttribute("download", fname);
  650. document.body.appendChild(link);
  651. link.click();
  652. load.endLoading();
  653. });
  654. })
  655. .catch(() => { });
  656. },
  657. onAdaPayExport () {
  658. // 报表导出
  659. let url = "/api-web/adapay/exportBill";
  660. let data = {};
  661. if (this.orderDate && this.orderDate.length > 0) {
  662. data.startTime = this.orderDate[0];
  663. data.endTime = this.orderDate[1];
  664. } else {
  665. this.$message.error('请选择开始日期和结束日期')
  666. return
  667. }
  668. const options = {
  669. method: "get",
  670. headers: {
  671. Authorization: getToken()
  672. },
  673. params: data,
  674. url,
  675. responseType: "blob"
  676. };
  677. this.$confirm("您确定导出汇付订单", "提示", {
  678. confirmButtonText: "确定",
  679. cancelButtonText: "取消",
  680. type: "warning"
  681. })
  682. .then(() => {
  683. load.startLoading();
  684. axios(options).then(res => {
  685. let blob = new Blob([res.data], {
  686. // type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
  687. type: "application/vnd.ms-excel;charset=utf-8"
  688. //word文档为application/msword,pdf文档为application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
  689. });
  690. let objectUrl = URL.createObjectURL(blob);
  691. let link = document.createElement("a");
  692. let fname = "汇付订单" + new Date().getTime(); //下载文件的名字
  693. link.href = objectUrl;
  694. link.setAttribute("download", fname);
  695. document.body.appendChild(link);
  696. link.click();
  697. load.endLoading();
  698. });
  699. })
  700. .catch(() => { });
  701. },
  702. search () {
  703. this.pageInfo.page = 1;
  704. this.getList();
  705. },
  706. getList () {
  707. let params = JSON.parse(JSON.stringify(this.searchForm));
  708. params.rows = this.pageInfo.limit;
  709. params.page = this.pageInfo.page;
  710. params.orderNo = params.orderNo ? params.orderNo : null;
  711. params.transNo = params.transNo ? params.transNo : null;
  712. params.merNos = params.merNos ? params.merNos : null;
  713. params.actualAmount = params.actualAmount ? params.actualAmount : null;
  714. params.balancePaymentAmount = params.balancePaymentAmount
  715. ? params.balancePaymentAmount
  716. : null;
  717. if (this.orderDate && this.orderDate.length > 0) {
  718. params.orderStartDate = this.orderDate[0];
  719. params.orderEndDate = this.orderDate[1];
  720. } else {
  721. params.orderStartDate = null;
  722. params.orderEndDate = null;
  723. }
  724. routeOrderFinance(cleanDeep(params)).then(res => {
  725. let result = res.data;
  726. if (res.code == 200) {
  727. this.tableList = result.rows;
  728. this.pageInfo.total = result.total;
  729. this.totalUserBalance = result.totalUserBalance
  730. ? result.totalUserBalance
  731. : 0;
  732. this.totalActualAmount = result.totalActualAmount
  733. ? result.totalActualAmount
  734. : 0;
  735. this.totalAdvanceAmount = result.totalAdvanceAmount
  736. ? result.totalAdvanceAmount
  737. : 0;
  738. this.totalRevenueAmount = result.totalRevenueAmount
  739. ? result.totalRevenueAmount
  740. : 0;
  741. }
  742. });
  743. },
  744. searchOrderDate (value) {
  745. if (value) {
  746. this.searchForm.orderStartDate = value[0];
  747. this.searchForm.orderEndDate = value[1];
  748. } else {
  749. this.searchForm.orderStartDate = null;
  750. this.searchForm.orderEndDate = null;
  751. }
  752. },
  753. onReSet () {
  754. // 重置搜索
  755. this.orderDate = null;
  756. this.searchForm = {
  757. search: null,
  758. orderStartDate: null,
  759. orderEndDate: null,
  760. paymentStatus: null,
  761. paymentType: null,
  762. routingOrganId: null,
  763. actualAmount: null,
  764. balancePaymentAmount: null,
  765. orderNo: null,
  766. transNo: null,
  767. merNos: null,
  768. lessBalancePaymentAmount: null,
  769. lessActualAmount: null
  770. };
  771. this.getList();
  772. },
  773. removeGoodsList (item) {
  774. const index = this.form.goodsList.indexOf(item)
  775. if (index !== -1) {
  776. this.form.goodsList.splice(index, 1)
  777. }
  778. },
  779. addGoodsList () {
  780. this.form.goodsList.push({
  781. id: null,
  782. number: null
  783. })
  784. },
  785. changeOrgin (val) {
  786. this.$set(this.form, 'schoolId', null)
  787. if (val) {
  788. getCooperation({ rows: 9999, organId: val }).then(res => {
  789. if (res.code === 200) {
  790. this.cooperationList = res.data.rows
  791. }
  792. })
  793. }
  794. },
  795. checkSchool (val) {
  796. console.log(val)
  797. },
  798. checkgoods (val) {
  799. for (let i = 0; i <= this.form.goodsList.length - 1; i++) {
  800. if (i != this.form.goodsList.length - 1 && this.form.goodsList[i].id === val) {
  801. this.form.goodsList[this.form.goodsList.length - 1].id = ''
  802. }
  803. }
  804. },
  805. lookOrderInfo (row) {
  806. //orderNo
  807. this.isAdd = false
  808. getOrderInfo({ orderId: row.id }).then(res => {
  809. if (res.code === 200) {
  810. let orderInfo = res.data.studentPaymentOrder;
  811. this.changeOrgin(parseInt(orderInfo.organId))
  812. this.form = {
  813. organId: orderInfo.organId,
  814. transNo: orderInfo.transNo,
  815. type: "OTHER",
  816. merNo: orderInfo.merNos,
  817. actualAmount: orderInfo.actualAmount,
  818. memo: orderInfo.memo,
  819. payTime: orderInfo.payTime,
  820. serviceAmount: res.data.serviceAmount,
  821. goodsAmount: res.data.goodsAmount,
  822. schoolId: parseInt(orderInfo.musicGroupId) || ' ',
  823. goodsList: res.data.sellOrders.map(item => { return { id: item.goodsId, number: item.num } })
  824. },
  825. this.routeOrderStatus = true
  826. }
  827. })
  828. },
  829. removeOrderInfo (row) {
  830. this.$confirm("确定删除?", "提示", {
  831. confirmButtonText: "确定",
  832. cancelButtonText: "取消",
  833. type: "warning"
  834. })
  835. .then(() => {
  836. orderDelete({ orderId: row.id }).then(res => {
  837. if (res.code === 200) {
  838. this.$message.success('删除成功')
  839. this.getList()
  840. // this.routeOrderStatus = false;
  841. }
  842. })
  843. })
  844. .catch();
  845. // orderDelete
  846. }
  847. }
  848. };
  849. </script>
  850. <style lang="scss">
  851. .newBand {
  852. display: inline-block;
  853. }
  854. /deep/.el-input-number.is-controls-right .el-input__inner {
  855. text-align: left;
  856. }
  857. .setWidth {
  858. display: inline-block;
  859. }
  860. </style>