detailsPage.vue 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112
  1. <template>
  2. <div>
  3. <el-breadcrumb separator="/" style="display: flex; align-items: center; margin-bottom: 10px">
  4. <el-breadcrumb-item>
  5. <el-button icon="el-icon-arrow-left" plain size="mini" type="danger" @click="backToList">
  6. 返回列表
  7. </el-button>
  8. </el-breadcrumb-item>
  9. </el-breadcrumb>
  10. <h1 style="text-align: center; margin-top: -42px">付费管理</h1>
  11. <el-form ref="queryForm" :inline="true" :model="queryParams" :rules="rules" label-width="68px">
  12. <el-row :gutter="15">
  13. <el-col :span="6">
  14. <el-form-item label="供应商" label-width="120px" prop="fCorpid">
  15. <el-select v-model="queryParams.fCorpid" :disabled="searchCriteriaDisabled" clearable filterable
  16. placeholder="请选择供应商" @change="fCorpidChange(queryParams.fCorpid)"
  17. >
  18. <el-option
  19. v-for="item in vendorList"
  20. :key="item.fId"
  21. :label="item.fName"
  22. :value="item.fId"
  23. >
  24. </el-option>
  25. </el-select>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="6">
  29. <el-form-item label="开票日期起" label-width="120px" prop="kpTimeStart">
  30. <el-date-picker
  31. v-model="queryParams.kpTimeStart"
  32. :disabled="searchCriteriaDisabled"
  33. format="yyyy-MM-dd"
  34. placeholder="选择销售日期起"
  35. type="date"
  36. value-format="yyyy-MM-dd 00:00:00"
  37. >
  38. </el-date-picker>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="6">
  42. <el-form-item label="开票日期止" label-width="120px" prop="kpTimeTerminate">
  43. <el-date-picker
  44. v-model="queryParams.kpTimeTerminate"
  45. :disabled="searchCriteriaDisabled"
  46. format="yyyy-MM-dd"
  47. placeholder="选择销售日期起"
  48. type="date"
  49. value-format="yyyy-MM-dd 23:59:59"
  50. >
  51. </el-date-picker>
  52. </el-form-item>
  53. </el-col>
  54. </el-row>
  55. <el-row :gutter="15">
  56. <el-col :span="6">
  57. <el-form-item label="开票公司" label-width="120px" prop="kpCoId">
  58. <el-select v-model="queryParams.kpCoId" :disabled="searchCriteriaDisabled" clearable filterable
  59. placeholder="请选择项目" @change="kpCoIdChange(queryParams.kpCoId)"
  60. >
  61. <el-option
  62. v-for="item in fCorpBankList"
  63. :key="item.accountTitle"
  64. :label="item.accountTitle"
  65. :value="item.accountTitle"
  66. >
  67. </el-option>
  68. </el-select>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="6">
  72. <el-form-item label="收款银行名称" label-width="120px" prop="cdbName">
  73. <el-input v-model="queryParams.skCdbName" :disabled="dataDisabled" style="width: 217px;"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="6">
  77. <el-form-item label="收款银行账号" label-width="120px" prop="cdbNo">
  78. <el-input v-model="queryParams.skCdbNo" :disabled="dataDisabled" style="width: 217px;"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. </el-row>
  82. <el-row :gutter="15">
  83. <el-col :span="6">
  84. <el-form-item label="付款公司" label-width="120px" prop="ttCoId">
  85. <el-select v-model="queryParams.ttCoId" :disabled="dataDisabled" clearable filterable
  86. placeholder="请选择收款公司" @change="ttCoIdChange(queryParams.ttCoId)"
  87. >
  88. <el-option
  89. v-for="item in ttCoList"
  90. :key="item.fId"
  91. :label="item.fName"
  92. :value="item.fId"
  93. >
  94. </el-option>
  95. </el-select>
  96. </el-form-item>
  97. </el-col>
  98. <el-col :span="6">
  99. <el-form-item label="开户名称" label-width="120px" prop="accountTitle">
  100. <el-select v-model="queryParams.accountTitle" :disabled="dataDisabled" clearable filterable
  101. placeholder="请选择收款公司" @change="accountTitleChange(queryParams.accountTitle)">
  102. <el-option
  103. v-for="item in BankList"
  104. :key="item.accountTitle"
  105. :label="item.accountTitle"
  106. :value="item.accountTitle"
  107. >
  108. </el-option>
  109. </el-select>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="6">
  113. <el-form-item label="银行名称" label-width="120px" prop="cdbName">
  114. <el-input v-model="queryParams.cdbName" :disabled="dataDisabled" style="width: 217px;"></el-input>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="6">
  118. <el-form-item label="银行账号" label-width="120px" prop="cdbNo">
  119. <el-input v-model="queryParams.cdbNo" :disabled="dataDisabled" style="width: 217px;"></el-input>
  120. </el-form-item>
  121. </el-col>
  122. </el-row>
  123. <el-row :gutter="15">
  124. <el-col :span="6">
  125. <el-form-item label="付款类型" label-width="120px" prop="remark">
  126. <el-select v-model="queryParams.payTypes" :disabled="dataDisabled" placeholder="请选择"
  127. @change="$set(queryParams, 'chequeNo', null)"
  128. >
  129. <el-option
  130. v-for="item in payTypeList"
  131. :key="item.dictSort"
  132. :label="item.dictLabel"
  133. :value="item.dictSort"
  134. >
  135. </el-option>
  136. </el-select>
  137. </el-form-item>
  138. </el-col>
  139. <el-col :span="6">
  140. <el-form-item label="支票号" label-width="120px" prop="remark">
  141. <el-input v-model="queryParams.chequeNo" :disabled="dataDisabled || queryParams.payTypes != 1"
  142. placeholder="请输入内容"
  143. ></el-input>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :span="12">
  147. <el-form-item label="备注" label-width="120px" prop="remark">
  148. <el-input v-model="queryParams.remark" :disabled="dataDisabled" style="width: 640px;"></el-input>
  149. </el-form-item>
  150. </el-col>
  151. </el-row>
  152. <el-form-item>
  153. <el-button :disabled="queryParams.kpType == 2 || queryParams.payType == 2" icon="el-icon-edit" size="mini"
  154. type="success" @click="amend"
  155. >修改
  156. </el-button>
  157. <el-button :disabled="dataDisabled" icon="el-icon-plus" size="mini" type="primary" @click="handleQuery">筛选
  158. </el-button>
  159. <el-button :disabled="dataDisabled" icon="el-icon-check" plain size="mini" type="primary" @click="submit">保存
  160. </el-button>
  161. <el-button v-if="!queryParams.id || queryParams.auditType == 1 || queryParams.auditType == 4" icon="el-icon-lollipop"
  162. size="mini" type="primary" @click="billings(1)"
  163. >付费
  164. </el-button>
  165. <el-button v-else :disabled="queryParams.auditType != 2" icon="el-icon-ice-cream-round" size="mini"
  166. type="primary" @click="approvalRevocation"
  167. >撤销付费
  168. </el-button>
  169. <el-button type="info" @click="printFunction" size="mini">打印</el-button>
  170. <!-- <el-button v-else :disabled="queryParams.auditType != 2" size="mini" icon="el-icon-ice-cream-round" type="primary" @click="billings(2)">撤销付费</el-button>-->
  171. <!-- <el-button @click="check(queryParams, 1)">审批进度</el-button>-->
  172. <el-button size="mini" type="primary" @click="addOrUpdateHandle">查看审批流</el-button>
  173. <el-button v-hasPermi="['basicdata:area:export']" size="mini" type="danger" @click="approvalRevocation">
  174. 撤销审批
  175. </el-button>
  176. <!-- <el-button v-if="queryParams.auditType == 2" size="mini" @click="immediateApproval">审批</el-button>-->
  177. <el-button v-if="audit" size="mini" @click="immediateApproval">审批</el-button>
  178. </el-form-item>
  179. </el-form>
  180. <el-table :data="xsckXzDataList" show-summary :summary-method="getSummaries" style="width: 100%">
  181. <el-table-column align="center" label="发票号" prop="invoiceNo"/>
  182. <el-table-column align="center" label="开票公司" prop="fSbuName"/>
  183. <el-table-column align="center" label="项目名称" prop="fGoodsName"/>
  184. <el-table-column align="center" label="金额" prop="sumMoney"/>
  185. <el-table-column align="center" label="付款金额" prop="proceeds" width="140px">
  186. <template slot-scope="{ row }">
  187. <el-input-number v-model="row.proceeds" :disabled="datasDisabled" :max="row.proceeds" :min="0" :precision="2"
  188. :step="1"
  189. controls-position="right"
  190. size="mini"
  191. ></el-input-number>
  192. </template>
  193. </el-table-column>
  194. <el-table-column align="center" label="备注" prop="remark"/>
  195. <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
  196. <template slot-scope="scope">
  197. <el-button
  198. :disabled="queryParams.auditType == 2 || queryParams.auditType == 3"
  199. icon="el-icon-delete"
  200. size="mini"
  201. type="text"
  202. @click="handleDelete(scope.row, scope)"
  203. >删除
  204. </el-button>
  205. </template>
  206. </el-table-column>
  207. </el-table>
  208. <el-dialog
  209. :before-close="handleClose"
  210. :visible.sync="dialogVisible"
  211. title="导入明细"
  212. width="80%"
  213. >
  214. <el-table v-loading="loading" show-summary :data="tableData" show-summary style="width: 100%" @selection-change="selectL">
  215. <el-table-column type="selection" width="55"/>
  216. <el-table-column align="center" label="系统单号" prop="sysNo"/>
  217. <el-table-column align="center" label="开票日期" prop="kpTime" width="180">
  218. <template slot-scope="scope">
  219. <span>{{ parseTime(scope.row.kpTime, '{y}-{m}-{d}') }}</span>
  220. </template>
  221. </el-table-column>
  222. <el-table-column align="center" label="供应商" prop="fCorpidName"/>
  223. <el-table-column align="center" label="项目名称" prop="fGoodsName"/>
  224. <el-table-column align="center" label="金额合计" prop="sumMoney"/>
  225. <el-table-column align="center" label="发票号" prop="invoiceNo"/>
  226. <el-table-column align="center" label="开票公司" prop="fSbuName"/>
  227. <el-table-column align="center" label="发票类型" prop="invoiceType"/>
  228. <el-table-column align="center" label="制单人" prop="createBy"/>
  229. <el-table-column align="center" label="制单日期" prop="createTime">
  230. <template slot-scope="scope">
  231. <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
  232. </template>
  233. </el-table-column>
  234. <el-table-column align="center" label="备注" prop="remark"/>
  235. <el-table-column align="center" label="收款金额" prop="proceeds"/>
  236. </el-table>
  237. <el-pagination
  238. :current-page="pageNum"
  239. :page-size="pageSize"
  240. :page-sizes="[10, 20, 30, 40, 50, 100, 200]"
  241. :total="total"
  242. layout="total, sizes, prev, pager, next, jumper"
  243. @size-change="handleSizeChange"
  244. @current-change="handleCurrentChange"
  245. >
  246. </el-pagination>
  247. <span slot="footer" class="dialog-footer">
  248. <el-button @click="dialogVisible = false">取 消</el-button>
  249. <el-button type="primary" @click="xsckClick">确 定</el-button>
  250. </span>
  251. </el-dialog>
  252. <div slot="footer" class="dialog-footer">
  253. <add-or-update
  254. v-if="addOrUpdateVisible"
  255. ref="addOrUpdate"
  256. @refreshDataList="getDataList"
  257. ></add-or-update>
  258. <approval-comments
  259. v-if="addOrUpdateVisib"
  260. ref="ApprovalComments"
  261. @refreshDataList="returnData"
  262. ></approval-comments>
  263. </div>
  264. <!-- 打印 -->
  265. <el-dialog
  266. :title="`打印`"
  267. :visible.sync="printTheDialogBox"
  268. :fullscreen="true"
  269. style="padding: 0;margin:0"
  270. width="70%"
  271. >
  272. <div ref="print">
  273. <table class="table table-striped table-bordered" align="center" valign="center">
  274. <tr>
  275. <td colspan="6"></td>
  276. <td colspan="2">打印次数:{{ printData.printQuantity + 1 }}</td>
  277. <td colspan="3">打印日期:{{ printData.fPrintTime }}</td>
  278. </tr>
  279. <tr>
  280. <td style="font-size: 24px;font-weight:bold" class="column" colspan="12">付费</td>
  281. </tr>
  282. <tr>
  283. <td class="column" rowspan="4">收款方</td>
  284. <td class="column" colspan="2">供应商</td>
  285. <td class="column" colspan="2">{{ printData.fCorpid }}</td>
  286. <td class="column" rowspan="4">付款方</td>
  287. <td class="column" colspan="2">付款公司</td>
  288. <td class="column" colspan="3">{{ printData.ttCoId }}</td>
  289. </tr>
  290. <tr>
  291. <td class="column" colspan="2">开票公司</td>
  292. <td class="column" colspan="2">{{ printData.kpCoId }}</td>
  293. <td class="column" colspan="2">开户名称</td>
  294. <td class="column" colspan="3">{{ printData.accountTitle }}</td>
  295. </tr>
  296. <tr>
  297. <td class="column" colspan="2">银行名称</td>
  298. <td class="column" colspan="2">{{ printData.skCdbName }}</td>
  299. <td class="column" colspan="2">银行名称</td>
  300. <td class="column" colspan="3">{{ printData.cdbName }}</td>
  301. </tr>
  302. <tr>
  303. <td class="column" colspan="2">银行账号</td>
  304. <td class="column" colspan="2">{{ printData.skCdbNo }}</td>
  305. <td class="column" colspan="2">银行账号</td>
  306. <td class="column" colspan="3">{{ printData.cdbNo }}</td>
  307. </tr>
  308. <tr>
  309. <td class="column">付款类型</td>
  310. <td class="column" colspan="2">{{ printData.payTypes }}</td>
  311. <td class="column">支票号</td>
  312. <td class="column" >{{ printData.chequeNo }}</td>
  313. <td class="column">备注</td>
  314. <td class="column" colspan="4">{{ printData.remark }}</td>
  315. </tr>
  316. <tr>
  317. <td class="column">序号</td>
  318. <td class="column">发票号</td>
  319. <td class="column" colspan="3">开票公司</td>
  320. <!-- <td class="column" colspan="3">项目名称</td>-->
  321. <!-- <td class="column">金额</td>-->
  322. <td class="column">付款金额</td>
  323. <td class="column" colspan="6">备注</td>
  324. </tr>
  325. <!-- feeDoList -->
  326. <tr v-for="(item,index) in xsckXzprintDataList" :key="index">
  327. <td class="column">{{ Number(index) + 1 }}</td>
  328. <td class="column">{{ item.invoiceNo }}</td>
  329. <td class="column" colspan="3">{{ item.fSbuName }}</td>
  330. <!-- <td class="column" colspan="3">{{ item.fGoodsName }}</td>-->
  331. <!-- <td class="column">{{ item.sumMoney }}</td>-->
  332. <td class="column">{{ item.proceeds }}</td>
  333. <td class="column" colspan="6">{{ item.remark }}</td>
  334. </tr>
  335. <tr>
  336. <td class="column">付费日期</td>
  337. <td class="column" colspan="3">{{ printData.createTime }}</td>
  338. <td class="column">合计金额(小写)</td>
  339. <td class="column" colspan="2">{{ printData.sumMoney }}</td>
  340. <td class="column">合计金额(大写)</td>
  341. <td class="column" colspan="3">{{ printData.sumMoneyZh }}</td>
  342. </tr>
  343. </table>
  344. <table class="table table-striped table-bordered" align="center" valign="center">
  345. <tr>
  346. <td class="column" style="width: 15%;border: none">提交人:{{ printData.createBy }}</td>
  347. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  348. <td class="column" style="width: 15%;border: none">财务主管:{{ printData.firstLevelReviewerName }}</td>
  349. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  350. <td class="column" style="width: 15%;border: none">财务经理:{{ printData.secondaryReviewerName }}</td>
  351. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  352. <td class="column" style="text-align: left;border: none;width: 15%">总经理:</td>
  353. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  354. </tr>
  355. <tr>
  356. <td class="column" style="width: 15%;border: none"></td>
  357. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  358. <td class="column" style="width: 15%;border: none"></td>
  359. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  360. <td class="column" style="width: 15%;border: none"></td>
  361. <td class="column" colspan="2" style="text-align: left;border: none;width: 10%"></td>
  362. <td class="column" style="text-align: left;border: none;width: 10%"></td>
  363. <td class="column" style="text-align: left;border: none;width: 15%">领款人:</td>
  364. <td class="column" style="text-align: left;border: none;width: 10%"></td>
  365. </tr>
  366. </table>
  367. </div>
  368. <span slot="footer" class="dialog-footer">
  369. <el-button @click="printTheDialogBox = false">取 消</el-button>
  370. <el-button type="primary" @click="confirmPrinting">打印</el-button>
  371. </span>
  372. </el-dialog>
  373. </div>
  374. </template>
  375. <script>
  376. import { company, queryItem } from '@/api/purchaseIssue/index'
  377. import { addPayment, getPayment, payForIt, quashBilling, updatePayment } from '@/api/invoice/payment'
  378. import { listInvoice } from '@/api/invoice/invoice'
  379. import { getCorps } from '@/api/basicdata/corps'
  380. import { getListBankByUserId } from '@/api/system/bank'
  381. import { delPaymentDetails, paymentConfirmPrinting } from '../../../api/invoice/payment'
  382. import ApprovalComments from '@/views/startApproval'
  383. import AddOrUpdate from '@/views/viewApproval'
  384. import { parseTime } from '../../../utils/ruoyi'
  385. import { revocation } from '@/api/finance/payment'
  386. import Cookies from 'js-cookie'
  387. import { getApproved } from '../../../api/finance/applyForInvoice/chargeInvoice'
  388. import Global from "@/layout/components/global.js";
  389. export default {
  390. name: 'Fees',
  391. components: {
  392. ApprovalComments,
  393. AddOrUpdate
  394. },
  395. props: {
  396. detailData: {
  397. type: Object
  398. }
  399. },
  400. data() {
  401. return {
  402. printData: {},
  403. xsckXzprintDataList: [],
  404. printTheDialogBox: false,
  405. addOrUpdateVisible: false,
  406. addOrUpdateVisib: false,
  407. queryParams: {
  408. type: 2
  409. },
  410. pageSize: 10,
  411. pageNum: 1,
  412. total: 0,
  413. loading: true,
  414. searchCriteriaDisabled: true,
  415. dataDisabled: true,
  416. datasDisabled: true,
  417. dialogVisible: false,
  418. audit: false,
  419. tableData: [],
  420. xsckXzDataList: [],
  421. listSelect: [],
  422. listSelectId: [],
  423. fCorpList: [],
  424. fSbuList: [],
  425. ttCoList: [],
  426. fGoodsList: [],
  427. vendorList: [],
  428. fCorpMap: {},
  429. fSbuMap: {},
  430. ttCoMap: {},
  431. fGoodsMap: {},
  432. vendorMap: {},
  433. payTypeList: [],
  434. invoiceTypeList: [],
  435. BankList: [],
  436. fCorpBankList: [],
  437. rules: {
  438. fCorpid: [
  439. { required: true, message: ' ', trigger: 'change' }
  440. ],
  441. kpTimeStart: [
  442. { required: true, message: ' ', trigger: 'change' }
  443. ],
  444. kpTimeTerminate: [
  445. { required: true, message: ' ', trigger: 'change' }
  446. ]
  447. }
  448. }
  449. },
  450. created() {
  451. if (this.detailData.audit) {
  452. this.audit = true
  453. }
  454. this.getDicts('invoice_type').then(response => {
  455. this.invoiceTypeList = response.data
  456. })
  457. this.getDicts('pay_type').then(response => {
  458. this.payTypeList = response.data
  459. })
  460. company(3).then(res => {
  461. this.fCorpList = res.data
  462. for (var index in res.data) {
  463. this.fCorpMap[res.data[index].fId] = res.data[index].fName
  464. }
  465. })
  466. // 开票公司
  467. company(2).then(res => {
  468. this.fSbuList = res.data
  469. for (var index in res.data) {
  470. this.fSbuMap[res.data[index].fId] = res.data[index].fName
  471. }
  472. })
  473. // 供应商
  474. company(1).then(res => {
  475. this.vendorList = res.data
  476. for (var index in res.data) {
  477. this.vendorMap[res.data[index].fId] = res.data[index].fName
  478. }
  479. })
  480. // 收款公司
  481. company(6).then(res => {
  482. this.ttCoList = res.data
  483. for (var index in res.data) {
  484. this.ttCoMap[res.data[index].fId] = res.data[index].fName
  485. }
  486. })
  487. // 项目名称
  488. queryItem().then(res => {
  489. this.fGoodsList = res.data
  490. for (var index in res.data) {
  491. this.fGoodsMap[res.data[index].fId] = res.data[index].projectName
  492. }
  493. })
  494. if (this.detailData.id != null) {
  495. getPayment(this.detailData.id).then(res => {
  496. this.queryParams = res.data
  497. this.xsckXzDataList = res.data.invoicePaymentDetailList
  498. this.xsckXzDataList.forEach(data => {
  499. data.fSbuName = this.fSbuMap[data.fSbu]
  500. data.fGoodsName = this.fGoodsMap[data.fGoodsid]
  501. })
  502. })
  503. } else {
  504. this.searchCriteriaDisabled = false
  505. this.dataDisabled = false
  506. this.datasDisabled = false
  507. }
  508. },
  509. methods: {
  510. parseTime,
  511. getSummaries(param) {
  512. const { columns, data } = param;
  513. const sums = [];
  514. columns.forEach((column, index) => {
  515. if (index === 0) {
  516. sums[index] = '合计';
  517. return;
  518. }
  519. const values = data.map(item => Number(item[column.property]));
  520. if (column.property === 'sumMoney' || column.property === 'proceeds') {
  521. sums[index] = values.reduce((prev, curr) => {
  522. const value = Number(curr);
  523. if (!isNaN(value)) {
  524. return (Number(prev) + Number(curr)).toFixed(2);
  525. } else {
  526. return Number(prev).toFixed(2);
  527. }
  528. }, 0);
  529. sums[index];
  530. }
  531. });
  532. return sums
  533. },
  534. // 撤销审批
  535. approvalRevocation() {
  536. let data = {
  537. id: this.queryParams.id,
  538. actId: 580,
  539. billId: this.queryParams.id
  540. }
  541. revocation(data).then((data) => {
  542. if (data.code === 200) {
  543. this.$message.success('撤销成功')
  544. this.mainTable = false
  545. this.open = false
  546. this.queryParams.auditType = 4
  547. this.queryParams.payType = 1
  548. // this.getList();
  549. }
  550. })
  551. },
  552. // 查看审批流
  553. addOrUpdateHandle() {
  554. // if (this.queryParams.fId == null || this.queryParams.fId == '') {
  555. // this.$message({
  556. // message: '当前数据没有审批',
  557. // type: 'warning'
  558. // });
  559. // return;
  560. // }
  561. this.addOrUpdateVisible = true
  562. this.addOrUpdateVisib = false
  563. this.$nextTick(() => {
  564. this.$refs.addOrUpdate.init(this.queryParams.id, 580)
  565. })
  566. },
  567. getDataList() {
  568. this.addOrUpdateVisible = false
  569. },
  570. returnData() {
  571. this.addOrUpdateVisib = false
  572. this.open = false
  573. // this.homepaGe()
  574. this.backToList()
  575. },
  576. homepaGe() {
  577. let view = {
  578. fullPath: '/finance/charge',
  579. hash: '',
  580. matched: Array(2),
  581. meta: Object,
  582. name: 'Charge',
  583. params: Object,
  584. path: '/finance/charge',
  585. query: Object,
  586. title: '付费'
  587. }
  588. this.$router.push({ path: '/index' })
  589. this.$store
  590. .dispatch('tagsView/delView', view)
  591. .then(({ visitedViews }) => {
  592. if (this.isActive(view)) {
  593. this.toLastView(visitedViews, view)
  594. }
  595. })
  596. Global.$emit('removeCache', 'closeSelectedTag', view)
  597. },
  598. // 查看按钮
  599. check(row, res) {
  600. this.notChange = true
  601. this.doNot = true
  602. getPayment(row.id).then((response) => {
  603. this.dataId = response.data.tFee.fId
  604. // 审批通过,撤销审批通过付费允许点击
  605. if (response.data.tFee.fAuditType == 2) {
  606. console.log('审批通过,撤销审批通过付费允许点击')
  607. console.log(response.data.tFee.fAuditType)
  608. this.isApproved = false
  609. }
  610. this.Operator = response.data.tFee.createBy
  611. this.approve = false
  612. if (response.data.tFee.fAuditType == 1) {
  613. console.log('fAuditType')
  614. this.isCancelAPayment = true
  615. } else {
  616. this.isCancelAPayment = false
  617. }
  618. this.increase_s = response.data.feeDoList
  619. this.fWbuOptions = response.data.feesList
  620. this.queryParams = response.data.tFee
  621. this.fWbuOptions = response.data.feesList
  622. this.fMblnoOptions = response.data.corps
  623. this.mainTable = true
  624. this.mainTable = true
  625. this.title = '付费列表'
  626. this.tablefilter = true
  627. if (res == 1) {
  628. this.notChange = true
  629. if (this.Operator == this.Lander) {
  630. this.tablefilter = false
  631. this.reset()
  632. this.pass = {
  633. fAmtdr: 0, //应收合计
  634. fAmtcr: 0, //应付合计
  635. fMblno: '', //提单号
  636. fName: '', //货权方
  637. fFeesName: '', //结算单位
  638. fCorpid: '' //结算单位ID
  639. }
  640. getPayment(row.id).then((response) => {
  641. this.increase_s = response.data.feeDoList
  642. this.fWbuOptions = response.data.feesList
  643. this.queryParams = response.data.tFee
  644. this.fWbuOptions = response.data.feesList
  645. this.fMblnoOptions = response.data.corps
  646. this.mainTable = true
  647. })
  648. } else {
  649. this.notChange = true
  650. // this.$message.error('未知异常,请联系管理员')
  651. }
  652. }
  653. })
  654. },
  655. immediateApproval() {
  656. this.addOrUpdateVisib = true
  657. this.$nextTick(() => {
  658. // this.approval.billId,
  659. this.$refs.ApprovalComments.init(
  660. this.queryParams.id,
  661. 580
  662. )
  663. // this.approval.actId
  664. })
  665. },
  666. billings(kpType) {
  667. if (this.queryParams.id == null) {
  668. this.$message({
  669. message: '请先保存数据',
  670. type: 'warning'
  671. })
  672. } else if (this.xsckXzDataList.length == 0) {
  673. this.$message({
  674. message: '请添加单据',
  675. type: 'warning'
  676. })
  677. } else {
  678. if (kpType == 1) {
  679. payForIt(this.queryParams).then(res => {
  680. this.queryParams.payType = 2
  681. this.queryParams.auditType = 2
  682. this.$message({
  683. message: '收费成功',
  684. type: 'success'
  685. })
  686. this.dataDisabled = true
  687. })
  688. } else {
  689. quashBilling(this.queryParams).then(res => {
  690. this.queryParams.payType = 1
  691. this.$message({
  692. message: '撤销收费成功',
  693. type: 'success'
  694. })
  695. this.dataDisabled = true
  696. })
  697. }
  698. }
  699. },
  700. handleDelete(row, scope) {
  701. const fIds = row.fId || this.ids
  702. this.$confirm('是否确认删除?', '警告', {
  703. confirmButtonText: '确定',
  704. cancelButtonText: '取消',
  705. type: 'warning'
  706. }).then(_ => {
  707. console.log(row.id,123)
  708. if (row.id) {
  709. delPaymentDetails(row.id).then((res) => {
  710. if (res.code == 200) {
  711. this.msgSuccess('删除成功')
  712. this.$message({
  713. message: '删除成功',
  714. type: 'success'
  715. })
  716. this.xsckXzDataList.splice(scope.$index, 1)
  717. // getPayment(this.detailData.id).then(res => {
  718. // this.queryParams = res.data
  719. // this.xsckXzDataList = res.data.invoicePaymentDetailList
  720. // })
  721. } else {
  722. this.$message.error(res.msg)
  723. }
  724. // this.getList()
  725. })
  726. } else {
  727. this.xsckXzDataList.splice(scope.$index, 1)
  728. }
  729. })
  730. },
  731. ttCoIdChange(id) {
  732. if (id) {
  733. getListBankByUserId(id).then(res => {
  734. this.BankList = res.data
  735. })
  736. } else {
  737. this.BankList = [];
  738. this.$set(this.queryParams, 'cdbName', null)
  739. this.$set(this.queryParams, 'cdbNo', null)
  740. this.$set(this.queryParams, 'accountTitle', null)
  741. }
  742. },
  743. accountTitleChange(accountTitle) {
  744. this.BankList.forEach(data => {
  745. if (data.accountTitle == accountTitle) {
  746. this.$set(this.queryParams, 'cdbName', data.cdbName)
  747. this.$set(this.queryParams, 'cdbNo', data.cdbNo)
  748. // this.$set(this.queryParams, 'accountTitle', data.accountTitle)
  749. }
  750. })
  751. },
  752. fCorpidChange(fCorpid) {
  753. if (fCorpid) {
  754. getListBankByUserId(fCorpid).then(res => {
  755. this.fCorpBankList = res.data
  756. })
  757. } else {
  758. this.fCorpBankList = [];
  759. this.$set(this.queryParams, 'skCdbName', null)
  760. this.$set(this.queryParams, 'skCdbNo', null)
  761. this.$set(this.queryParams, 'kpCoId', null)
  762. }
  763. },
  764. kpCoIdChange(kpCoId) {
  765. this.fCorpBankList.forEach(data => {
  766. if (data.accountTitle == kpCoId) {
  767. console.log(data.kpCoId)
  768. console.log(data.cdbName)
  769. this.$set(this.queryParams, 'skCdbName', data.cdbName)
  770. this.$set(this.queryParams, 'skCdbNo', data.cdbNo)
  771. // this.$set(this.queryParams, 'accountTitle', data.accountTitle)
  772. }
  773. })
  774. },
  775. submit() {
  776. this.$refs['queryForm'].validate((valid) => {
  777. if (valid) {
  778. if (this.queryParams.id == null) {
  779. this.xsckXzDataList.forEach(data => {
  780. console.log(data, 1)
  781. console.log(data.payType, 2)
  782. console.log(data.chequeNo, 3)
  783. })
  784. this.queryParams.invoicePaymentDetailList = this.xsckXzDataList
  785. addPayment(this.queryParams).then(res => {
  786. this.queryParams = res.data
  787. this.dataDisabled = true
  788. this.searchCriteriaDisabled = true
  789. this.datasDisabled = true
  790. this.queryParams.auditType = 1
  791. this.$message({
  792. message: '保存成功',
  793. type: 'success'
  794. })
  795. })
  796. } else {
  797. this.xsckXzDataList.forEach(data => {
  798. console.log(data, 1)
  799. console.log(data.payType, 2)
  800. console.log(data.chequeNo, 3)
  801. })
  802. updatePayment(this.queryParams).then(res => {
  803. this.queryParams = res.data
  804. this.dataDisabled = true
  805. this.searchCriteriaDisabled = true
  806. this.datasDisabled = true
  807. this.queryParams.auditType = 1
  808. this.$message({
  809. message: '修改成功',
  810. type: 'success'
  811. })
  812. })
  813. }
  814. }
  815. })
  816. },
  817. handleSizeChange(val) {
  818. this.pageSize = val
  819. this.handleQuery()
  820. },
  821. handleCurrentChange(val) {
  822. this.pageNum = val
  823. this.handleQuery()
  824. },
  825. handleQuery() {
  826. this.$refs['queryForm'].validate((valid) => {
  827. if (valid) {
  828. this.loading = true
  829. var rest = {}
  830. if (this.queryParams.kpTimeStart != null && this.queryParams.kpTimeTerminate != null) {
  831. var timeInterval = []
  832. timeInterval[0] = this.queryParams.kpTimeStart
  833. timeInterval[1] = this.queryParams.kpTimeTerminate
  834. rest.timeInterval = timeInterval
  835. }
  836. rest.pageSize = this.pageSize
  837. rest.pageNum = this.pageNum
  838. rest.fCorpid = this.queryParams.fCorpid
  839. rest.fSbu = this.queryParams.fSbu
  840. rest.type = 2
  841. rest.kpType = 2
  842. listInvoice(rest).then((res) => {
  843. this.tableData = res.rows
  844. this.tableData.forEach(data => {
  845. // 客户
  846. data.fCorpidName = this.vendorMap[data.fCorpid]
  847. // 项目
  848. data.fGoodsName = this.fGoodsMap[data.fGoodsid]
  849. // 开票
  850. data.fSbuName = this.fSbuMap[data.fSbu]
  851. // 发票类型
  852. this.invoiceTypeList.forEach(datas => {
  853. if (datas.dictSort == data.invoiceType) {
  854. data.invoiceType = datas.dictLabel
  855. }
  856. })
  857. })
  858. this.total = res.total
  859. this.dialogVisible = true
  860. this.loading = false
  861. })
  862. }
  863. })
  864. },
  865. amend() {
  866. this.dataDisabled = false
  867. if (this.xsckXzDataList.length != 0 && (this.queryParams.fCorpid || this.queryParams.fGoodsid || this.queryParams.fSbu || this.queryParams.timeIntervalStart || this.queryParams.timeIntervalTerminate)) {
  868. this.searchCriteriaDisabled = true
  869. } else {
  870. this.searchCriteriaDisabled = false
  871. }
  872. this.datasDisabled = false
  873. },
  874. xsckClick() {
  875. for (let i = 0; i < this.xsckXzDataList.length; i++) {
  876. for (let j = 0; j < this.listSelect.length; j++) {
  877. if (this.xsckXzDataList[i].invoiceId == this.listSelect[j].id) {
  878. var a = j + 1
  879. this.$message({
  880. message: `选中的第${a}条数据重复`,
  881. type: 'warning'
  882. })
  883. return
  884. }
  885. }
  886. }
  887. for (var select of this.listSelect) {
  888. select.invoiceId = select.id
  889. select.proceeds = select.sumMoney - select.proceeds
  890. select.id = null
  891. this.xsckXzDataList.push(select)
  892. }
  893. this.listSelect = []
  894. this.dialogVisible = false
  895. },
  896. handleClose(done) {
  897. this.$confirm('确认关闭?')
  898. .then(_ => {
  899. done()
  900. })
  901. .catch(_ => {
  902. })
  903. },
  904. backToList() {
  905. this.tableData = []
  906. this.xsckXzDataList = []
  907. this.listSelect = []
  908. this.listSelectId = []
  909. this.fCorpList = []
  910. this.fSbuList = []
  911. this.fGoodsList = []
  912. this.$emit('goBack')
  913. },
  914. // 选中添加/不选中删除
  915. selectL(selection, row) {
  916. this.listSelect = selection
  917. this.listSelectId = selection.map(item => item.id)
  918. },
  919. // 打印
  920. printFunction() {
  921. let data = {
  922. id: this.queryParams.id,
  923. actId: 580
  924. }
  925. data.actId = 580
  926. getApproved(data).then(res => {
  927. var approval = res.data.pop()
  928. if (approval == null) {
  929. this.$message.warning('未审核或未通过审核')
  930. return
  931. }
  932. if (approval.auditStatus != 'A') {
  933. this.$message.warning('未审核或未通过审核')
  934. return
  935. }
  936. getPayment(this.detailData.id).then(res => {
  937. this.printData = res.data
  938. this.xsckXzprintDataList = res.data.invoicePaymentDetailList
  939. this.printData.fCorpid = this.vendorMap[this.printData.fCorpid]
  940. // 收款公司
  941. this.printData.ttCoId = this.ttCoMap[this.printData.ttCoId]
  942. for (let payType of this.payTypeList) {
  943. if (this.printData.payTypes == payType.dictSort) {
  944. this.printData.payTypes = payType.dictLabel
  945. }
  946. }
  947. this.printData.createTime = this.printData.createTime.slice(0, 10)
  948. let printDate = new Date();
  949. this.printData.fPrintTime = printDate.toLocaleString();
  950. this.xsckXzprintDataList.forEach(data => {
  951. data.fSbuName = this.fSbuMap[data.fSbu]
  952. data.fGoodsName = this.fGoodsMap[data.fGoodsid]
  953. })
  954. this.printTheDialogBox = true;
  955. })
  956. })
  957. },
  958. // 确认打印
  959. confirmPrinting() {
  960. // 添加打印次数
  961. let data = {
  962. id : this.printData.id + '',
  963. printTime : this.printData.fPrintTime
  964. };
  965. paymentConfirmPrinting(data).then(res => {
  966. if (res.code === 200) {
  967. this.$print(this.$refs.print)
  968. } else {
  969. this.$message.error('修改打印此处出错');
  970. }
  971. })
  972. }
  973. }
  974. }
  975. </script>
  976. <style scoped>
  977. ::v-deep.el-form-item {
  978. margin-bottom: 6px;
  979. }
  980. .tabSetting {
  981. display: flex;
  982. justify-content: flex-end;
  983. }
  984. .listStyle {
  985. display: flex;
  986. border-top: 1px solid #dcdfe6;
  987. border-left: 1px solid #dcdfe6;
  988. border-right: 1px solid #dcdfe6;
  989. }
  990. .listStyle:last-child {
  991. border-bottom: 1px solid #dcdfe6;
  992. }
  993. .progress {
  994. display: flex;
  995. align-items: center;
  996. padding: 2px;
  997. background-color: rgba(0, 0, 0, 0.05);
  998. height: 100%;
  999. }
  1000. .avue-crud__dialog__header {
  1001. display: -webkit-box;
  1002. display: -ms-flexbox;
  1003. display: flex;
  1004. -webkit-box-align: center;
  1005. -ms-flex-align: center;
  1006. align-items: center;
  1007. -webkit-box-pack: justify;
  1008. -ms-flex-pack: justify;
  1009. justify-content: space-between;
  1010. }
  1011. .el-dialog__title {
  1012. color: rgba(0, 0, 0, 0.85);
  1013. font-weight: 500;
  1014. word-wrap: break-word;
  1015. }
  1016. .avue-crud__dialog__menu {
  1017. padding-right: 20px;
  1018. float: left;
  1019. }
  1020. .avue-crud__dialog__menu i {
  1021. color: #909399;
  1022. font-size: 15px;
  1023. }
  1024. .el-icon-full-screen {
  1025. cursor: pointer;
  1026. }
  1027. .el-icon-full-screen:before {
  1028. content: "\e719";
  1029. }
  1030. </style>
  1031. <style lang="scss">
  1032. .el-dialog__body{
  1033. padding: 0 20px 30px 20px;
  1034. }
  1035. .table {
  1036. border-collapse: collapse;
  1037. border-spacing: 0;
  1038. background-color: transparent;
  1039. display: table;
  1040. width: 100%;
  1041. max-width: 100%;
  1042. margin: 0 auto;
  1043. }
  1044. .table td {
  1045. text-align: center;
  1046. vertical-align: middle;
  1047. font-size: 14px;
  1048. color: #000000;
  1049. padding: 8px 12px;
  1050. }
  1051. .column {
  1052. border: 1px solid #000;
  1053. }
  1054. .app-container >>> .el-form-item {
  1055. margin-bottom: 0;
  1056. }
  1057. </style>