documentaryReport.vue 31 KB

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