addnewbill_bak.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. <template>
  2. <div class="app-container">
  3. <!-- 汇票模块 -->
  4. <div
  5. v-for="(item, index) in form.contractDrafts"
  6. :key="item.id"
  7. class="form"
  8. style="margin: 20px;border: 1px solid #c0c0c0;padding: 10px;border-radius: 10px;"
  9. >
  10. <!-- 汇票名称 -->
  11. <el-form ref="form" :model="item" label-width="90px">
  12. <el-form-item label="汇票名称">
  13. <el-input
  14. v-model="item.name"
  15. class="ipwidth"
  16. placeholder="请填写汇票名称"
  17. style="width: 220px"
  18. />
  19. </el-form-item>
  20. <!-- 预计贴现日 -->
  21. <el-form-item label="预计贴现日">
  22. <el-date-picker
  23. v-model="item.expectDiscountDate"
  24. type="date"
  25. placeholder="选择日期"
  26. value-format="yyyy-MM-dd"
  27. @change="inputMoney(index, 4)"
  28. @input="inputMoney(index)"
  29. />
  30. </el-form-item>
  31. <!-- 出票日期 -->
  32. <el-form-item label="出票日期">
  33. <el-date-picker
  34. v-model="item.acceptDate"
  35. type="date"
  36. placeholder="选择日期"
  37. class="ipwidth"
  38. @change="change(index, 2)"
  39. />
  40. </el-form-item>
  41. <!-- 承兑日期 -->
  42. <el-form-item label="承兑日期">
  43. <el-date-picker
  44. v-model="item.issueDate"
  45. type="date"
  46. placeholder="选择日期"
  47. default-value
  48. value-format="yyyy-MM-dd"
  49. @change="inputMoney(index, 1)"
  50. @input="inputMoney(index)"
  51. />
  52. </el-form-item>
  53. <!-- 到期日期 -->
  54. <el-form-item label="到期日期">
  55. <el-date-picker
  56. v-model="item.expireDate"
  57. type="date"
  58. placeholder="选择日期"
  59. @change="change(index, 3)"
  60. />
  61. </el-form-item>
  62. </el-form>
  63. <!-- 汇票号码 -->
  64. <el-form ref="form" :model="form" label-width="100px">
  65. <el-form-item label="汇票号码">
  66. <el-input
  67. v-model="item.draftNo"
  68. class="ipwidth"
  69. placeholder="请填写汇票号码"
  70. style="width: 220px"
  71. />
  72. </el-form-item>
  73. <!-- 金额 -->
  74. <el-form-item label="金额">
  75. <el-input
  76. v-model="item.money"
  77. class="ipwidth"
  78. placeholder="请填写金额"
  79. style="width: 220px"
  80. @blur="getMoney(index)"
  81. @input="inputMoney(index)"
  82. />
  83. </el-form-item>
  84. <!-- 服务费 -->
  85. <el-form-item label="服务费">
  86. <el-input
  87. v-model="item.serviceMoney"
  88. class="ipwidth"
  89. placeholder="计算得出服务费"
  90. style="width: 220px"
  91. />
  92. </el-form-item>
  93. <!-- 最高贷款额度 -->
  94. <el-form-item label="最高贷款额度">
  95. <el-input
  96. v-model="item.loanLimit"
  97. class="ipwidth"
  98. placeholder="计算得出最高贷款额度"
  99. style="width: 220px"
  100. />
  101. </el-form-item>
  102. <el-form-item label="利息">
  103. <el-input
  104. v-model="item.interest"
  105. class="ipwidth"
  106. placeholder="计算得出利息"
  107. style="width: 220px"
  108. />
  109. </el-form-item>
  110. </el-form>
  111. <!-- 出票人 -->
  112. <el-form ref="form" :model="form" label-width="90px">
  113. <el-form-item label="出票人">
  114. <el-select v-model="form.drawersName" placeholder="请选择出票人">
  115. <el-option
  116. label="新增出票人"
  117. value=""
  118. style="color: darkorange"
  119. @click.native="addDrawer"
  120. />
  121. <el-option
  122. v-for="item in drawersName"
  123. :key="item.id"
  124. :label="item"
  125. :value="item"
  126. @click.native="getdrawersId(index,item)"
  127. />
  128. </el-select>
  129. </el-form-item>
  130. <!-- 承兑人 -->
  131. <el-form-item label="承兑人">
  132. <el-select v-model="form.acceptorName" filterable placeholder="请选择承兑人">
  133. <el-option
  134. v-for="val in acceptorName"
  135. :key="val"
  136. :label="val"
  137. :value="val"
  138. @click.native="getRate(index)"
  139. />
  140. </el-select>
  141. </el-form-item>
  142. <!-- 服务费率 -->
  143. <el-form-item label="服务费率">
  144. <el-input
  145. v-model="item.serviceRate"
  146. class="ipwidth"
  147. placeholder="服务费率"
  148. style="width: 220px"
  149. @input="inputMoney(index)"
  150. />
  151. </el-form-item>
  152. <!-- 利率 -->
  153. <el-form-item label="利率">
  154. <el-input
  155. v-model="item.interestRate"
  156. class="ipwidth"
  157. placeholder="利率"
  158. style="width: 220px"
  159. @input="inputMoney(index)"
  160. />
  161. </el-form-item>
  162. </el-form>
  163. <!-- 汇票附件上传 -->
  164. <div>
  165. <el-row>
  166. <el-col style="margin: 0 auto">
  167. <div class="titlesa">
  168. <span>附件</span>
  169. <span
  170. style="color: #d05c39"
  171. >*支持上传pdf、jpg/jpeg、png格式</span>
  172. </div>
  173. <div>
  174. <el-upload
  175. action="https://ht.9026.com/api/File"
  176. list-type="picture-card"
  177. :on-success="handlepicUrls"
  178. >
  179. <i class="el-icon-plus" />
  180. </el-upload>
  181. <el-dialog :visible.sync="dialogVisible">
  182. <img
  183. width="100%"
  184. :src="form.contractDrafts[0].picUrls"
  185. alt=""
  186. >
  187. </el-dialog>
  188. </div>
  189. </el-col>
  190. </el-row>
  191. <!-- 删除汇票 -->
  192. <el-button
  193. type="primary"
  194. style="width: 100px; height: 50px; margin-top: 50px"
  195. @click="deletedraft(index)"
  196. >删除汇票</el-button>
  197. </div>
  198. </div>
  199. <!-- 新增汇票 -->
  200. <div class="commit">
  201. <div class="addnew">
  202. <el-button type="primary" @click="adddraft">新增汇票</el-button>
  203. </div>
  204. <div class="addall">
  205. <el-button
  206. type="warning"
  207. style="width: 180px; height: 45px; font-size: 16px"
  208. @click="onSubmit"
  209. >确认上传
  210. </el-button>
  211. </div>
  212. </div>
  213. </div>
  214. </template>
  215. <script>
  216. import { maxLoanAmount, serviceCharge, interest } from '@/utils/calc'
  217. export default {
  218. data() {
  219. return {
  220. dialogVisible: false,
  221. disabled: false,
  222. drawersList: [],
  223. acceptorList: [],
  224. contractList: [],
  225. filesArray: [], // 汇票图片上传数组
  226. file: '',
  227. form: {
  228. // 承兑人列表
  229. acceptorName: [],
  230. // 出票人列表
  231. drawersName: [],
  232. /* 汇票的数据 */
  233. contractDrafts: [
  234. {
  235. name: '',
  236. draftNo: '',
  237. acceptorId: '',
  238. drawersId: '',
  239. money: '',
  240. acceptDate: '',
  241. loanLimit: '',
  242. serviceRate: '',
  243. serviceMoney: '',
  244. interestRate: '',
  245. interest: '',
  246. picUrls: [],
  247. expectDiscountDate: '',
  248. issueDate: '',
  249. expireDate:'',
  250. acceptDateTime: '',
  251. expectDiscountDateTime: '',
  252. contractId:59,
  253. limitTime:''
  254. }
  255. ]
  256. },
  257. pickerOptions: {
  258. disabledDate(time) {
  259. return time.getTime() > Date.now()
  260. },
  261. shortcuts: [
  262. {
  263. text: '今天',
  264. onClick(picker) {
  265. picker.$emit('pick', new Date())
  266. }
  267. },
  268. {
  269. text: '昨天',
  270. onClick(picker) {
  271. const date = new Date()
  272. date.setTime(date.getTime() - 3600 * 1000 * 24)
  273. picker.$emit('pick', date)
  274. }
  275. },
  276. {
  277. text: '一周前',
  278. onClick(picker) {
  279. const date = new Date()
  280. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
  281. picker.$emit('pick', date)
  282. }
  283. }
  284. ]
  285. }
  286. }
  287. },
  288. mounted() {
  289. // 获取合同id
  290. const id = this.$route.query.id
  291. this.$request({
  292. url: '/api/Acceptor/search',
  293. method: 'post',
  294. data: {
  295. pageIndex: 1,
  296. pageSize: 100
  297. }
  298. }).then((res) => {
  299. this.acceptorList = res.data.result
  300. this.acceptorName = Array.from(this.acceptorList, ({ name }) => name)
  301. })
  302. this.$request({
  303. url: '/api/Drawer/search',
  304. method: 'post',
  305. data: {
  306. pageIndex: 1,
  307. pageSize: 100
  308. }
  309. }).then((res) => {
  310. this.drawersList = res.data.result
  311. this.drawersName = Array.from(this.drawersList, ({ name }) => name)
  312. // 去除重复的出票人
  313. for (var i = 0; i < this.drawersName.length; i++) {
  314. // 首次遍历数组
  315. for (var j = i + 1; j < this.drawersName.length; j++) {
  316. // 再次遍历数组
  317. if (this.drawersName[i] === this.drawersName[j]) {
  318. // 判断连个值是否相等
  319. this.drawersName.splice(j, 1) // 相等删除后者
  320. j--
  321. }
  322. }
  323. }
  324. })
  325. /* 调用获取当前的时间 */
  326. this.loadTime()
  327. },
  328. methods: {
  329. inputMoney(index) {
  330. const { money, serviceRate, interestRate, expectDiscountDate, issueDate } = this.form.contractDrafts[index]
  331. this.form.contractDrafts[index].loanLimit = maxLoanAmount(money, serviceRate, interestRate, expectDiscountDate, issueDate)
  332. },
  333. /* 确实上传按钮 */
  334. onSubmit() {
  335. this.$request({
  336. url: 'api/Contract/addContractDraft',
  337. method: 'post',
  338. data: this.form.contractDrafts
  339. }).then((res) => {
  340. console.log(res)
  341. this.$message({
  342. message: '上传成功',
  343. type: 'success'
  344. })
  345. this.$router.go(-1)
  346. })
  347. },
  348. /* 默认时间 */
  349. loadTime() {
  350. const myDate = new Date()
  351. const wk = parseInt(Date.now() / 100000).toFixed(0) * 100000
  352. const yy = String(myDate.getFullYear())
  353. // let mm = myDate.getMonth() + 1
  354. const mm = String(
  355. myDate.getMonth() + 1 < 10
  356. ? '0' + (myDate.getMonth() + 1)
  357. : myDate.getMonth() + 1
  358. )
  359. const dd = String(
  360. myDate.getDate() < 10 ? '0' + myDate.getDate() : myDate.getDate()
  361. )
  362. const nowDate = yy + '-' + mm + '-' + dd
  363. this.form.contractDrafts.forEach((item) => {
  364. item.acceptDate = nowDate
  365. item.issueDate = nowDate
  366. item.expireDate = nowDate
  367. item.expectDiscountDate = nowDate
  368. item.expectDiscountDateTime = wk
  369. item.acceptDateTime = wk
  370. const nTime = item.acceptDateTime - item.expectDiscountDateTime
  371. item.limitTime = Math.floor(nTime / 86400000)
  372. })
  373. },
  374. /* 上传图片到浏览器成功回调 */
  375. handlepicUrls(res) {
  376. // 解构
  377. const { file } = res.data
  378. this.filesArray.push(file)
  379. this.form.contractDrafts[0].picUrls = this.filesArray
  380. },
  381. /* 获取服务率和利率,承兑人id */
  382. getRate(index) {
  383. const list = this.acceptorList.filter(
  384. (item) => item.name === this.form.acceptorName
  385. )
  386. console.log(list)
  387. this.form.contractDrafts[index].acceptorId=list[index].id
  388. this.form.contractDrafts[index].interestRate = list[index].interest
  389. this.form.contractDrafts[index].serviceRate = list[index].serviceRate
  390. },
  391. // 获取出票人id
  392. getdrawersId(index,name){
  393. const drawers=this.drawersList.filter((item)=>item.name===name)
  394. console.log(drawers)
  395. this.form.contractDrafts[index].drawersId=drawers[index].id
  396. console.log(drawers[index].id)
  397. },
  398. addDrawer() {
  399. this.$router.push({
  400. path: '/form/addTicketdrawer'
  401. })
  402. },
  403. // 新增汇票
  404. adddraft() {
  405. this.form.contractDrafts.push({
  406. name: '',
  407. draftNo: '',
  408. acceptorId: '',
  409. drawersId: '',
  410. money: '',
  411. acceptDate: '',
  412. loanLimit: '',
  413. serviceRate: '',
  414. serviceMoney: '',
  415. interestRate: '',
  416. interest: '',
  417. picUrls: [],
  418. expectDiscountDate: '',
  419. issueDate: '',
  420. expireDate: '',
  421. limitTime: ''
  422. })
  423. },
  424. // 删除汇票
  425. deletedraft(index) {
  426. const contractDraftsLength = this.form.contractDrafts.length
  427. if (contractDraftsLength > 1) {
  428. this.form.contractDrafts.splice(index, 1)
  429. } else {
  430. this.$message.error('至少一个')
  431. }
  432. },
  433. /* 计算时间段 */
  434. change(e, number) {},
  435. /* 获取金额 */
  436. getMoney(index) {
  437. this.getloanLimt(index)
  438. this.getSerMoney(index)
  439. this.getInterMoney(index)
  440. },
  441. /* 计算最高贷款额度 */
  442. getloanLimt(i) {
  443. if (
  444. this.form.contractDrafts[i].money &&
  445. this.form.contractDrafts[i].serviceRate &&
  446. this.form.contractDrafts[i].interestRate
  447. ) {
  448. this.form.contractDrafts[i].loanLimit = (
  449. ((this.form.contractDrafts[i].money /
  450. (this.form.contractDrafts[i].serviceRate +
  451. this.form.contractDrafts[i].interestRate)) *
  452. this.form.contractDrafts[i].limitTime) /
  453. 360 +
  454. 1
  455. ).toFixed(2)
  456. }
  457. },
  458. /* 计算服务费 */
  459. getSerMoney(i) {
  460. if (
  461. this.form.contractDrafts[i].money &&
  462. this.form.contractDrafts[i].serviceRate &&
  463. this.form.contractDrafts[i].interestRate
  464. ) {
  465. this.form.contractDrafts[i].serviceMoney = (
  466. ((((this.form.contractDrafts[i].money /
  467. (this.form.contractDrafts[i].serviceRate +
  468. this.form.contractDrafts[i].interestRate)) *
  469. this.form.contractDrafts[i].limitTime) /
  470. 360 +
  471. 1) *
  472. this.form.contractDrafts[i].serviceRate *
  473. this.form.contractDrafts[i].limitTime) /
  474. 360
  475. ).toFixed(2)
  476. }
  477. },
  478. /* 利息*/
  479. getInterMoney(i) {
  480. if (
  481. this.form.contractDrafts[i].money &&
  482. this.form.contractDrafts[i].serviceRate &&
  483. this.form.contractDrafts[i].interestRate
  484. ) {
  485. this.form.contractDrafts[i].interest = (
  486. ((((this.form.contractDrafts[i].money /
  487. (this.form.contractDrafts[i].serviceRate +
  488. this.form.contractDrafts[i].interestRate)) *
  489. this.form.contractDrafts[i].limitTime) /
  490. 360 +
  491. 1) *
  492. this.form.contractDrafts[i].interestRate *
  493. this.form.contractDrafts[i].limitTime) /
  494. 360
  495. ).toFixed(2)
  496. }
  497. }
  498. }
  499. }
  500. </script>
  501. <style lang="scss" scoped>
  502. .contract {
  503. display: flex;
  504. justify-content: space-between;
  505. margin-bottom: 20px;
  506. }
  507. .form {
  508. display: flex;
  509. justify-content: space-around;
  510. }
  511. .addnew {
  512. display: flex;
  513. justify-content: flex-end;
  514. }
  515. .addall {
  516. display: flex;
  517. justify-content: center;
  518. }
  519. .commit {
  520. margin: 20px 0;
  521. }
  522. </style>