documentaryReport.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847
  1. <template>
  2. <PageMain class="vh100">
  3. <el-tabs v-model="activeName" style="height: 100%" class="demo-tabs" @tab-click="handleClick">
  4. <el-tab-pane style="height: 100%" name="1" label="保险公司报表">
  5. <el-form v-model="recordForm" label-width="80">
  6. <el-row :gutter="20">
  7. <el-col :span="8">
  8. <el-form-item prop="a" label="保险公司">
  9. <el-cascader filterable clearable placeholder="请选择" v-model="recordForm.companyId"
  10. :options="companyList" :props="companyIdprops" style="width: 100%;" @change="handleCompanyChange" />
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="8">
  14. <el-form-item prop="time" label="创建时间">
  15. <el-date-picker v-model="recordForm.time" type="daterange" format="YYYY-MM-DD"
  16. value-format="YYYY-MM-DD" />
  17. </el-form-item>
  18. </el-col>
  19. <el-col :span="8">
  20. <el-form-item prop="time" label="开票时间">
  21. <el-date-picker v-model="recordForm.invoiceTime" type="daterange" format="YYYY-MM-DD"
  22. value-format="YYYY-MM-DD" />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="8">
  26. <el-form-item prop="time" label="结算时间">
  27. <el-date-picker v-model="recordForm.settlementTime" type="daterange" format="YYYY-MM-DD"
  28. value-format="YYYY-MM-DD" />
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="8">
  32. <el-form-item prop="status" label="结算状态">
  33. <el-select v-model="recordForm.status" clearable>
  34. <el-option v-for="item in settlement_status" :key="item.value" :value="item.value"
  35. :label="item.label"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="8">
  40. <el-form-item prop="invoiceRiskType" label="应收项" >
  41. <el-select v-model="recordForm.invoiceRiskType" clearable>
  42. <el-option value="2" label="车险"></el-option>
  43. <el-option value="4" label="非车险"></el-option>
  44. </el-select>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="8">
  48. <el-form-item prop="signingTime" label="签单时间" >
  49. <el-date-picker v-model="recordForm.signingTime" type="monthrange" format="YYYY-MM"
  50. value-format="YYYY-MM" />
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="24" style="height: 50px; display: flex; align-items: start; justify-content: flex-end">
  54. <el-button type="primary" @click="handleSearch(1)">查询</el-button>
  55. <el-button plain type="primary" @click="handleReset(1)">重置</el-button>
  56. </el-col>
  57. </el-row>
  58. </el-form>
  59. <el-table height="500px" :data="recordData" row-key="id"
  60. :summary-method="val => getSummaries(val, ['totalSettlementAmount'])" show-summary>
  61. <el-table-column prop="companyName" label="保险公司" width="300"></el-table-column>
  62. <el-table-column prop="totalReceivable" label="跟单费金额"></el-table-column>
  63. <el-table-column prop="totalReconciliationAmount" label="对账金额"></el-table-column>
  64. <el-table-column prop="year" label="年"></el-table-column>
  65. <el-table-column prop="month" label="月"></el-table-column>
  66. <el-table-column prop="totalInvoiced" label="已开票"></el-table-column>
  67. <el-table-column prop="totalSettlementAmount" label="已结算"></el-table-column>
  68. <el-table-column prop="totalUnSettlementAmount" label="未结算"></el-table-column>
  69. <el-table-column prop="totalUnInvoiced" label="未开票"></el-table-column>
  70. <el-table-column prop="invoiceRiskType" label="应收项">
  71. <template #default="scope">
  72. {{ scope.row.invoiceType == 2 ? '车险' : '非车险' }}
  73. </template>
  74. </el-table-column>
  75. <el-table-column prop="totalPaymentDifference" label="回款差额"></el-table-column>
  76. <el-table-column label="操作" fixed="right" width="120">
  77. <template #default="scope">
  78. <div class="flex a-c">
  79. <el-dropdown placement="bottom-start" trigger="click">
  80. <span class="el-dropdown-link">
  81. 查看明细
  82. </span>
  83. <template #dropdown>
  84. <el-dropdown-menu>
  85. <el-dropdown-item @click="handleSettlementDetail(scope.row)">结算明细</el-dropdown-item>
  86. <el-dropdown-item @click="handleInvoiceRecord(scope.row)">开票明细</el-dropdown-item>
  87. </el-dropdown-menu>
  88. </template>
  89. </el-dropdown>
  90. </div>
  91. </template>
  92. </el-table-column>
  93. </el-table>
  94. </el-tab-pane>
  95. <el-tab-pane style="height: 100%" name="2" label="结算记录">
  96. <el-form v-model="recordForm1" label-width="120">
  97. <el-row :gutter="20">
  98. <el-col :span="8">
  99. <el-form-item prop="settlementId" label="结算记录编号">
  100. <el-input v-model="recordForm1.settlementId"></el-input>
  101. </el-form-item>
  102. </el-col>
  103. <el-col :span="8">
  104. <el-form-item prop="a" label="保险公司">
  105. <el-cascader filterable clearable placeholder="请选择" v-model="recordForm1.partnerCompanyId"
  106. :options="companyList" :props="companyIdprops" style="width: 100%;" @change="handleCompanyChange" />
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="8">
  110. <el-form-item prop="invoiceParty" label="开票方">
  111. <el-select v-model="recordForm1.invoiceParty" clearable>
  112. <el-option v-for="item in optionObj['invoice_party']" :key="item.value" :value="item.value"
  113. :label="item.label"></el-option>
  114. </el-select>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="8">
  118. <el-form-item prop="invoiceRiskType" label="应收项">
  119. <el-select v-model="recordForm1.invoiceRiskType" clearable>
  120. <el-option v-for="item in optionObj['invoice_risk_type']" :key="item.value" :value="item.value"
  121. :label="item.label"></el-option>
  122. </el-select>
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="8">
  126. <el-form-item prop="status" label="结算状态">
  127. <el-select v-model="recordForm1.status" clearable>
  128. <el-option v-for="item in settlement_status" :key="item.value" :value="item.value"
  129. :label="item.label"></el-option>
  130. </el-select>
  131. </el-form-item>
  132. </el-col>
  133. <el-col :span="8">
  134. <el-form-item prop="settlementPerson" label="结算人">
  135. <el-input v-model="recordForm1.settlementPerson"></el-input>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="8">
  139. <el-form-item prop="settlementTime" label="结算时间">
  140. <el-date-picker v-model="recordForm1.settlementTime" type="daterange" format="YYYY-MM-DD"
  141. value-format="YYYY-MM-DD" />
  142. </el-form-item>
  143. </el-col>
  144. <el-col :span="8">
  145. <el-form-item prop="invoiceId" label="开票记录编号">
  146. <el-input v-model="recordForm1.invoiceId"></el-input>
  147. </el-form-item>
  148. </el-col>
  149. <el-col :span="8" style="display: flex; justify-content: flex-end">
  150. <el-button type="primary" @click="handleSearch(2)">查询</el-button>
  151. <el-button plain type="primary" @click="handleReset(2)">重置</el-button>
  152. <el-button type="primary" @click="handleExport(2)">导出结算记录</el-button>
  153. </el-col>
  154. </el-row>
  155. </el-form>
  156. <el-table height="calc(100% - 192px)" :data="recordData1" show-summary
  157. :summary-method="val => getSummaries(val, ['taxPoint', 'actualReceivedAmount', 'settlementPaymentDifference'])">
  158. <el-table-column prop="settlementId" label="结算记录编号" width="200"></el-table-column>
  159. <el-table-column prop="companyName" label="保险公司" width="200"></el-table-column>
  160. <el-table-column prop="invoiceParty" label="开票方" width="150"></el-table-column>
  161. <el-table-column prop="invoiceRiskTypeName" label="应收项" width="100"></el-table-column>
  162. <el-table-column prop="taxPoint" label="税点" width="100"></el-table-column>
  163. <el-table-column prop="actualReceivedAmount" label="实收金额" width="100"></el-table-column>
  164. <el-table-column prop="settlementPaymentDifference" label="回款差额" width="100"></el-table-column>
  165. <el-table-column prop="settlementPaymentReason" label="差额原因" width="100"></el-table-column>
  166. <el-table-column prop="receivePaymentDate" label="收款日期" width="150"></el-table-column>
  167. <el-table-column label="收款凭证" width="100">
  168. <template #default="scope">
  169. <el-button link type="primary" @click="view(scope.row)">查看凭证(1)</el-button>
  170. </template>
  171. </el-table-column>
  172. <el-table-column prop="createBy" label="结算人" width="100"></el-table-column>
  173. <el-table-column prop="createTime" label="结算时间" width="200"></el-table-column>
  174. <el-table-column prop="invoiceId" label="开票记录编号" width="200"></el-table-column>
  175. <el-table-column label="操作" width="160" fixed="right">
  176. <template #default="scope">
  177. <el-button link type="primary" @click="handleDetail(scope.row)">删除</el-button>
  178. <el-button link type="primary" @click="handleAssociateInvoice(scope.row)">关联发票</el-button>
  179. </template>
  180. </el-table-column>
  181. </el-table>
  182. <div class="pagination">
  183. <el-pagination v-model:current-page="pages" v-model:page-size="size" :page-sizes="[10, 20, 30, 40]"
  184. layout="total, sizes, prev, pager, next, jumper" :total="total1"
  185. @size-change="handleSizeChange($event, '2')"
  186. @current-change="handleCurrentChange($event, '2')"></el-pagination>
  187. </div>
  188. </el-tab-pane>
  189. <!-- <el-tab-pane style="height: 100%" name="3" label="车险结算明细">
  190. <el-form v-model="recordForm2" label-width="120">
  191. <el-row :gutter="20">
  192. <el-col :span="8">
  193. <el-form-item prop="invoiceId" label="开票记录编号">
  194. <el-input v-model="recordForm2.invoiceId"></el-input>
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="8">
  198. <el-form-item prop="partnerCompanyId" label="保险公司">
  199. <el-cascader filterable clearable placeholder="请选择" v-model="recordForm2.partnerCompanyId"
  200. :options="companyList" :props="companyIdprops" style="width: 100%;" @change="handleCompanyChange" />
  201. </el-form-item>
  202. </el-col>
  203. <el-col :span="8">
  204. <el-form-item prop="invoiceParty" label="开票方">
  205. <el-select v-model="recordForm2.invoiceParty">
  206. <el-option v-for="item in optionObj['invoice_party']" :key="item.value" :value="item.value"
  207. :label="item.label"></el-option>
  208. </el-select>
  209. </el-form-item>
  210. </el-col>
  211. <el-col :span="8">
  212. <el-form-item prop="settlementPerson" label="结算人">
  213. <el-input v-model="recordForm2.settlementPerson"></el-input>
  214. </el-form-item>
  215. </el-col>
  216. <el-col :span="8">
  217. <el-form-item prop="settlementTime" label="结算时间">
  218. <el-date-picker v-model="recordForm.settlementTime" type="daterange" format="YYYY-MM-DD"
  219. value-format="YYYY-MM-DD" />
  220. </el-form-item>
  221. </el-col>
  222. <el-col :span="8">
  223. <el-form-item prop="status" label="状态">
  224. <el-select v-model="recordForm.status">
  225. <el-option value="1" label="1"></el-option>
  226. </el-select>
  227. </el-form-item>
  228. </el-col>
  229. <el-col :span="24" style="height: 50px; display: flex; align-items: start; justify-content: flex-end">
  230. <el-button type="primary" @click="handleSearch(3)">查询</el-button>
  231. <el-button plain type="primary" @click="handleReset(3)">重置</el-button>
  232. <el-button type="primary" @click="handleExport(3)">导出明细</el-button>
  233. </el-col>
  234. </el-row>
  235. </el-form>
  236. <el-table height="calc(100% - 192px)" :data="recordData2">
  237. <el-table-column prop="id" label="开票记录编号" width="200"></el-table-column>
  238. <el-table-column prop="companyAllName" label="保险公司" width="100"></el-table-column>
  239. <el-table-column prop="partnerCompanyName" label="支公司" width="350" align="center"></el-table-column>
  240. <el-table-column prop="companyNameSimple" label="保险机构" width="150"></el-table-column>
  241. <el-table-column prop="invoiceNo" label="发票号" width="150"></el-table-column>
  242. <el-table-column prop="year" label="年份" width="150"></el-table-column>
  243. <el-table-column prop="month" label="月份" width="150"></el-table-column>
  244. <el-table-column prop="invoiceParty" label="开票方" width="150"></el-table-column>
  245. <el-table-column prop="remainSettlementAmount" label="未结算金额" width="100"></el-table-column>
  246. <el-table-column prop="accountsReceivable" label="应收项" width="100"></el-table-column>
  247. <el-table-column prop="receivableAmount" label="应收金额" width="120"></el-table-column>
  248. <el-table-column prop="paymentReason" label="差额原因" width="120"></el-table-column>
  249. <el-table-column prop="taxPoint" label="税点" width="120"></el-table-column>
  250. <el-table-column prop="receivableSupervisePremium" label="开票金额" width="120"></el-table-column>
  251. <el-table-column prop="settlementStatus" label="结算状态" width="120">
  252. </el-table-column>
  253. <el-table-column prop="settlementAmount" label="已结算金额" width="120"></el-table-column>
  254. <el-table-column prop="createBy" label="开票人" width="120"></el-table-column>
  255. <el-table-column prop="createTime" label="开票时间" width="150"></el-table-column>
  256. </el-table>
  257. <div class="pagination">
  258. <el-pagination v-model:current-page="pages" v-model:page-size="size" :page-sizes="[10, 20, 30, 40]"
  259. layout="total, sizes, prev, pager, next, jumper" :total="total2"
  260. @size-change="handleSizeChange($event, '3')"
  261. @current-change="handleCurrentChange($event, '3')"></el-pagination>
  262. </div>
  263. </el-tab-pane>
  264. <el-tab-pane style="height: 100%" name="4" label="非车结算明细">
  265. <el-form v-model="recordForm3" label-width="120">
  266. <el-row :gutter="20">
  267. <el-col :span="8">
  268. <el-form-item prop="invoiceId" label="开票记录编号">
  269. <el-input v-model="recordForm3.invoiceId"></el-input>
  270. </el-form-item>
  271. </el-col>
  272. <el-col :span="8">
  273. <el-form-item prop="companyId" label="保险公司">
  274. <el-cascader filterable clearable placeholder="请选择" v-model="recordForm3.companyId"
  275. :options="companyList" :props="companyIdprops" style="width: 100%;" @change="handleCompanyChange" />
  276. </el-form-item>
  277. </el-col>
  278. <el-col :span="8">
  279. <el-form-item prop="invoiceParty" label="开票方">
  280. <el-select v-model="recordForm3.invoiceParty">
  281. <el-option v-for="item in optionObj['invoice_party']" :key="item.value" :value="item.value"
  282. :label="item.label"></el-option>
  283. </el-select>
  284. </el-form-item>
  285. </el-col>
  286. <el-col :span="8">
  287. <el-form-item prop="settlementPerson" label="结算人">
  288. <el-input v-model="recordForm3.settlementPerson"></el-input>
  289. </el-form-item>
  290. </el-col>
  291. <el-col :span="8">
  292. <el-form-item prop="settlementTime" label="结算时间">
  293. <el-date-picker v-model="recordForm3.settlementTime" type="daterange" format="YYYY-MM-DD"
  294. value-format="YYYY-MM-DD" />
  295. </el-form-item>
  296. </el-col>
  297. <el-col :span="8">
  298. <el-form-item prop="status" label="状态">
  299. <el-select v-model="recordForm3.status">
  300. <el-option value="1" label="1"></el-option>
  301. </el-select>
  302. </el-form-item>
  303. </el-col>
  304. <el-col :span="24" style="height: 50px; display: flex; align-items: start; justify-content: flex-end">
  305. <el-button type="primary" @click="handleSearch(4)">查询</el-button>
  306. <el-button plain type="primary" @click="handleReset(4)">重置</el-button>
  307. <el-button type="primary" @click="handleExport(4)">导出明细</el-button>
  308. </el-col>
  309. </el-row>
  310. </el-form>
  311. <el-table height="calc(100% - 192px)" :data="recordData3">
  312. <el-table-column prop="invoiceId" label="开票记录编号" width="200"></el-table-column>
  313. <el-table-column prop="companyName" label="保险公司" width="200"></el-table-column>
  314. <el-table-column prop="invoiceParty" label="开票方" width="100"></el-table-column>
  315. <el-table-column prop="signingTime" label="签单时间" width="150"></el-table-column>
  316. <el-table-column prop="status" label="状态" width="100"></el-table-column>
  317. <el-table-column prop="licenseNo" label="车牌号" width="120"></el-table-column>
  318. <el-table-column prop="productName" label="险种" width="120"></el-table-column>
  319. <el-table-column prop="receivableSuperviseCosts" label="应收跟单费" width="100"></el-table-column>
  320. <el-table-column prop="jyPremium" label="非车险保费" width="100"></el-table-column>
  321. <el-table-column prop="jySuperviseCostsProportion" label="非车险跟单费比例" width="100"></el-table-column>
  322. <el-table-column prop="jyPolicyNo" label="非车险保单号" width="200"></el-table-column>
  323. <el-table-column prop="invoicePerson" label="开票人" width="100"></el-table-column>
  324. <el-table-column prop="invoiceTime" label="开票时间" width="150"></el-table-column>
  325. </el-table>
  326. <div class="pagination">
  327. <el-pagination v-model:current-page="pages" v-model:page-size="size" :page-sizes="[10, 20, 30, 40]"
  328. layout="total, sizes, prev, pager, next, jumper" :total="total3"
  329. @size-change="handleSizeChange($event, '4')"
  330. @current-change="handleCurrentChange($event, '4')"></el-pagination>
  331. </div>
  332. </el-tab-pane> -->
  333. </el-tabs>
  334. </PageMain>
  335. <el-dialog v-model="viewCredential" title="查看凭证" width="400">
  336. <div class="text-center text-[14px] text-[#999] pb-[20px]">点击图片放大预览</div>
  337. <el-image style="width: 100%; height: 300px" :src="CredentialList[0]" :zoom-rate="1.2" :max-scale="7"
  338. :min-scale="0.2" :preview-src-list="CredentialList" show-progress :initial-index="4" alt="凭证图片" fit="cover" />
  339. </el-dialog>
  340. </template>
  341. <script setup lang="ts">
  342. import { ElMessage, ElMessageBox } from 'element-plus'
  343. import api from '@/api'
  344. import { useRouter, useRoute } from 'vue-router'
  345. const router = useRouter()
  346. const route = useRoute()
  347. const activeName = ref('1')
  348. const handleClick = (e) => {
  349. activeName.value = e.props.name
  350. pages.value = 1
  351. size.value = 10
  352. switch (e.props.name) {
  353. case '1':
  354. initData1()
  355. break;
  356. case '2':
  357. initData2()
  358. break;
  359. case '3':
  360. initData3(['2'])
  361. break;
  362. case '4':
  363. initData3(['4'])
  364. break;
  365. }
  366. }
  367. const settlement_status = ref([
  368. {
  369. value: '0',
  370. label: '已开票未结清'
  371. },
  372. {
  373. value: '1',
  374. label: '已结清'
  375. },
  376. {
  377. value: '2',
  378. label: '未开票'
  379. },
  380. ])
  381. // 保险公司
  382. let companyList = ref([])
  383. const initCompany = () => {
  384. api.agreementApi.findTree({ name: "", systemCode: localStorage.getItem('login_system') }).then((res: any) => {
  385. if (res.code == 200) {
  386. companyList.value = res.data
  387. }
  388. })
  389. }
  390. const companyIdprops = {
  391. expandTrigger: 'hover' as const,
  392. value: 'id',
  393. label: 'name',
  394. checkStrictly: true,
  395. }
  396. // 保险公司选择器改变时触发
  397. const handleCompanyChange = (e) => {
  398. switch (activeName.value) {
  399. case '1':
  400. recordForm.value.companyId = e[e.length - 1] || ''
  401. break;
  402. case '2':
  403. recordForm1.value.companyId = e[e.length - 1] || ''
  404. break;
  405. case '3':
  406. recordForm2.value.companyId = e[e.length - 1] || ''
  407. break;
  408. case '4':
  409. recordForm3.value.companyId = e[e.length - 1] || ''
  410. break;
  411. }
  412. }
  413. // 分页
  414. let pages = ref(1)
  415. let size = ref(10)
  416. let total = ref(0)
  417. let total1 = ref(0)
  418. let total2 = ref(0)
  419. let total3 = ref(0)
  420. const handleSizeChange = (size, type) => {
  421. size.value = size
  422. switch (type) {
  423. case 2:
  424. initData2()
  425. break;
  426. case 3:
  427. initData3('2')
  428. break;
  429. case 4:
  430. initData3('4')
  431. break;
  432. }
  433. }
  434. const handleCurrentChange = (page, type) => {
  435. pages.value = page
  436. switch (type) {
  437. case 2:
  438. initData2()
  439. break;
  440. case 3:
  441. initData3('2')
  442. break;
  443. case 4:
  444. initData3('4')
  445. break;
  446. }
  447. }
  448. const getSummaries = (param, list) => {
  449. console.log(param)
  450. const { columns, data } = param
  451. const sums: (string | VNode)[] = []
  452. // 指定需要计算的字段列表(可根据需求添加字段名)
  453. const specifiedFields = list // 替换为您需要的字段名
  454. columns.forEach((column, index) => {
  455. if (index === 0) {
  456. sums[index] = h('div', { style: { textDecoration: 'underline' } }, [
  457. '',
  458. ])
  459. return
  460. }
  461. // 计算数字类型字段和指定字段
  462. const values = data.map((item) => {
  463. const val = item[column.property]
  464. // 排除空值
  465. if (val === '' || val === null || val === undefined) {
  466. return NaN
  467. }
  468. // 如果是数字类型,直接参与计算
  469. if (typeof val === 'number') {
  470. return val
  471. }
  472. // 如果字段在指定列表中,尝试转换为数字
  473. if (specifiedFields.includes(column.property)) {
  474. const num = Number(val)
  475. return Number.isNaN(num) ? NaN : num
  476. }
  477. // 其他情况不参与计算
  478. return NaN
  479. })
  480. if (!values.every((value) => Number.isNaN(value))) {
  481. const total = values.reduce((prev, curr) => {
  482. if (!Number.isNaN(curr)) {
  483. return prev + curr
  484. } else {
  485. return prev
  486. }
  487. }, 0)
  488. // 保留五位小数
  489. sums[index] = ` ${total.toFixed(5)}`
  490. } else {
  491. sums[index] = '-'
  492. }
  493. })
  494. return sums
  495. }
  496. // 结算记录
  497. let recordForm = ref({})
  498. let recordForm1 = ref({})
  499. let recordForm2 = ref({})
  500. let recordForm3 = ref({})
  501. let recordData = ref([])
  502. let recordData1 = ref([])
  503. let recordData2 = ref([])
  504. let recordData3 = ref([])
  505. const viewCredential = ref(false)//查看凭证弹窗
  506. const CredentialList = ref([])//凭证图片
  507. const view = (scope) => {
  508. CredentialList.value = scope.fileUrl.split(',')
  509. viewCredential.value = true
  510. }
  511. const initData1 = () => {
  512. api.settlementApi.followCompanySuperviseSettlementReport({
  513. companyId: recordForm.value.companyId,
  514. signingStartTime: recordForm.value.signingTime?.[0],
  515. signingEndTime: recordForm.value.signingTime?.[1],
  516. startTime: recordForm.value.time?.[0],
  517. endTime: recordForm.value.time?.[1],
  518. invoiceStartTime: recordForm.value.invoiceTime?.[0],
  519. invoiceEndTime: recordForm.value.invoiceTime?.[1],
  520. settlementStartTime: recordForm.value.settlementTime?.[0],
  521. settlementEndTime: recordForm.value.settlementTime?.[1],
  522. status: recordForm.value.status,
  523. invoiceType: recordForm.value.invoiceRiskType,
  524. invoiceTypes: ['2', '4'],
  525. agreementType: '2'
  526. }).then((res: any) => {
  527. if (res.code == 200) {
  528. recordData.value = res.data
  529. }
  530. })
  531. }
  532. const initData2 = () => {
  533. api.settlementApi.followSettlementExcel({
  534. agreementType: '2',
  535. settlementId: recordForm1.value.settlementId,
  536. partnerCompanyId: recordForm1.value.partnerCompanyId,
  537. invoiceParty: recordForm1.value.invoiceParty,
  538. invoiceRiskType: recordForm1.value.invoiceRiskType,
  539. status: recordForm1.value.status,
  540. settlementPerson: recordForm1.value.settlementPerson,
  541. invoiceId: recordForm1.value.invoiceId,
  542. settlementTimeStart: recordForm1.value.settlementTime?.[0],
  543. settlementTimeEnd: recordForm1.value.settlementTime?.[1],
  544. pages: pages.value,
  545. size: size.value,
  546. invoiceTypes: ['2', '4']
  547. }).then((res: any) => {
  548. if (res.code == 200) {
  549. recordData1.value = res.data.records
  550. total1.value = res.data.total
  551. }
  552. })
  553. }
  554. const initData3 = (invoiceTypes) => {
  555. let params = invoiceTypes.includes('2') ?
  556. {
  557. invoiceId: recordForm2.value.invoiceId,
  558. partnerCompanyId: recordForm2.value.partnerCompanyId,
  559. invoiceParty: recordForm2.value.invoiceParty,
  560. settlementPerson: recordForm2.value.settlementPerson,
  561. status: recordForm2.value.status,
  562. settlementTimeStart: recordForm2.value.settlementTime?.[0],
  563. settlementTimeEnd: recordForm2.value.settlementTime?.[1],
  564. pages: pages.value,
  565. size: size.value,
  566. invoiceTypes: invoiceTypes
  567. } :
  568. invoiceTypes.includes('4') ?
  569. {
  570. invoiceId: recordForm3.value.invoiceId,
  571. partnerCompanyId: recordForm3.value.partnerCompanyId,
  572. invoiceParty: recordForm3.value.invoiceParty,
  573. settlementPerson: recordForm3.value.settlementPerson,
  574. status: recordForm3.value.status,
  575. settlementTimeStart: recordForm3.value.settlementTime?.[0],
  576. settlementTimeEnd: recordForm3.value.settlementTime?.[1],
  577. pages: pages.value,
  578. size: size.value,
  579. invoiceTypes: invoiceTypes
  580. } :
  581. {}
  582. api.settlementApi.followSettlementDetailExcel({
  583. ...params
  584. }).then((res: any) => {
  585. if (res.code == 200) {
  586. recordData2.value = res.data.records
  587. recordData3.value = res.data.records
  588. total2.value = res.data.total
  589. }
  590. })
  591. }
  592. const handleAssociateInvoice = (row) => {
  593. router.push({
  594. path: '/receivable/documentary/documentaryRecord',
  595. query: {
  596. invoiceId: row.invoiceId
  597. }
  598. })
  599. }
  600. const handleSearch = (type) => {
  601. pages.value = 1
  602. size.value = 10
  603. switch (type) {
  604. case 1:
  605. initData1()
  606. break;
  607. case 2:
  608. initData2()
  609. break;
  610. }
  611. }
  612. const handleReset = (type) => {
  613. switch (type) {
  614. case 1:
  615. recordForm.value = {
  616. companyId: '',
  617. time: [],
  618. status: ''
  619. }
  620. break;
  621. case 2:
  622. recordForm1.value = {
  623. settlementId: '',
  624. companyId: '',
  625. invoiceParty: '',
  626. invoiceType: '',
  627. status: '',
  628. settlementPerson: '',
  629. settlementTime: [],
  630. invoiceId: ''
  631. }
  632. break;
  633. case 3:
  634. recordForm2.value = {
  635. invoiceId: '',
  636. companyId: '',
  637. invoiceParty: '',
  638. settlementPerson: '',
  639. settlementTime: [],
  640. status: ''
  641. }
  642. break;
  643. case 4:
  644. recordForm3.value = {
  645. invoiceId: '',
  646. companyId: '',
  647. invoiceParty: '',
  648. settlementPerson: '',
  649. settlementTime: [],
  650. status: ''
  651. }
  652. break;
  653. }
  654. }
  655. // 结算明细
  656. const handleSettlementDetail = (row) => {
  657. activeName.value = '2'
  658. recordForm1.value.partnerCompanyId = row.partnerCompanyId
  659. if (row.invoiceType == '2') {
  660. recordForm1.value.invoiceRiskType = '10'
  661. } else {
  662. recordForm1.value.invoiceRiskType = '20'
  663. }
  664. initData2()
  665. }
  666. // 开票明细
  667. const handleInvoiceRecord = (row) => {
  668. router.push({
  669. path: '/receivable/documentary/documentaryRecord',
  670. query: {
  671. partnerCompanyId: row.partnerCompanyId,
  672. invoiceType: row.invoiceType,
  673. }
  674. })
  675. }
  676. const handleExport = (type) => {
  677. switch (type) {
  678. case 2:
  679. exportOtherSettlementExcel()
  680. break;
  681. case 3:
  682. exportOtherSettlementDetailExcel()
  683. break;
  684. case 4:
  685. exportOtherSettlementDetailJyExcel()
  686. break;
  687. }
  688. }
  689. const exportOtherSettlementExcel = () => {
  690. api.settlementApi.exportOtherSettlementExcel({
  691. agreementType: '2',
  692. settlementId: recordForm1.value.settlementId,
  693. partnerCompanyId: recordForm1.value.partnerCompanyId,
  694. invoiceParty: recordForm1.value.invoiceParty,
  695. invoiceType: recordForm1.value.invoiceType,
  696. status: recordForm1.value.status,
  697. settlementPerson: recordForm1.value.settlementPerson,
  698. invoiceId: recordForm1.value.invoiceId,
  699. settlementTimeStart: recordForm1.value.settlementTime?.[0],
  700. settlementTimeEnd: recordForm1.value.settlementTime?.[1],
  701. invoiceTypes: ['2', '4']
  702. }).then((res: any) => {
  703. const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
  704. const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
  705. if ('download' in document.createElement('a')) {
  706. const elink = document.createElement('a');
  707. elink.download = fileName;
  708. elink.style.display = 'none';
  709. elink.href = URL.createObjectURL(blob);
  710. document.body.appendChild(elink);
  711. elink.click();
  712. URL.revokeObjectURL(elink.href);
  713. document.body.removeChild(elink);
  714. } else {
  715. navigator.msSaveBlob(blob, fileName);
  716. }
  717. })
  718. }
  719. const exportOtherSettlementDetailExcel = () => {
  720. api.settlementApi.exportOtherSettlementDetailExcel({
  721. }).then((res: any) => {
  722. const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
  723. const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
  724. if ('download' in document.createElement('a')) {
  725. const elink = document.createElement('a');
  726. elink.download = fileName;
  727. elink.style.display = 'none';
  728. elink.href = URL.createObjectURL(blob);
  729. document.body.appendChild(elink);
  730. elink.click();
  731. URL.revokeObjectURL(elink.href);
  732. document.body.removeChild(elink);
  733. } else {
  734. navigator.msSaveBlob(blob, fileName);
  735. }
  736. })
  737. }
  738. const exportOtherSettlementDetailJyExcel = () => {
  739. api.settlementApi.exportOtherSettlementDetailJyExcel({
  740. }).then((res: any) => {
  741. const blob = new Blob([res], { type: 'application/vnd.ms-excel' });
  742. const fileName = '跟单费应收结算报表明细' + new Date().getTime() + '.xlsx';
  743. if ('download' in document.createElement('a')) {
  744. const elink = document.createElement('a');
  745. elink.download = fileName;
  746. elink.style.display = 'none';
  747. elink.href = URL.createObjectURL(blob);
  748. document.body.appendChild(elink);
  749. elink.click();
  750. URL.revokeObjectURL(elink.href);
  751. document.body.removeChild(elink);
  752. } else {
  753. navigator.msSaveBlob(blob, fileName);
  754. }
  755. })
  756. }
  757. const handleDetail = (type) => {
  758. ElMessageBox.confirm(
  759. '确定删除该记录吗?',
  760. '删除',
  761. {
  762. confirmButtonText: '确定删除',
  763. type: 'error',
  764. center: true,
  765. confirmButtonClass: 'el-button--danger',
  766. }
  767. )
  768. .then(() => {
  769. api.settlementApi.deleteFollowSettlement(type.settlementId).then((res: any) => {
  770. if (res.code == 200) {
  771. ElMessage({
  772. message: '删除成功',
  773. type: 'success'
  774. })
  775. initData2()
  776. }
  777. })
  778. })
  779. .catch(() => {
  780. })
  781. }
  782. const optionObj = ref({})
  783. const initOption = () => {
  784. let list = ['invoice_risk_type', 'invoice_party']
  785. list.forEach(item => {
  786. api.additionalApi.dictDetails(item).then((res: any) => {
  787. if (res.code == 200) {
  788. if (res.data) {
  789. optionObj.value[item] = res.data
  790. }
  791. }
  792. })
  793. })
  794. }
  795. onMounted(() => {
  796. if (route.query.activeName) {
  797. activeName.value = route.query.activeName;
  798. }
  799. if (route.query.activeName == "2") {
  800. recordForm1.value.invoiceId = route.query.id
  801. initData2();
  802. } else if (route.query.activeName == "3") {
  803. recordForm2.value.invoiceId = route.query.id
  804. initData3(['2']);
  805. }
  806. initData1();
  807. initCompany();
  808. initOption();
  809. })
  810. </script>
  811. <style scoped lang="scss">
  812. .pagination {
  813. margin-top: 10px;
  814. display: flex;
  815. justify-content: flex-end;
  816. }
  817. :deep(.subTable .el-table__header-wrapper) {
  818. display: none;
  819. }
  820. :deep(.el-dropdown-link) {
  821. display: flex;
  822. align-items: center;
  823. margin-left: 15px;
  824. color: var(--el-color-primary);
  825. cursor: pointer;
  826. }
  827. </style>