billDetail.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <template>
  2. <div class="app-container">
  3. <el-container>
  4. <el-container>
  5. <el-aside
  6. style="
  7. background-color: white;
  8. line-height: 0px;
  9. width: 300px;
  10. height: 400px;
  11. "
  12. >
  13. <el-steps
  14. :active="active"
  15. direction="vertical"
  16. process-status="finish"
  17. finish-status="success"
  18. >
  19. <el-step title="基本信息"></el-step>
  20. <el-step title="发票列表"></el-step>
  21. <el-step title="合同附件"></el-step>
  22. <el-step title="物流附件"></el-step>
  23. <el-step title="其他附件"></el-step>
  24. </el-steps>
  25. </el-aside>
  26. <el-main>
  27. <el-form ref="bill" label-width="auto" :inline="true" style="margin-bottom:50px">
  28. <el-form-item label="创建人:" style="float: right">{{ form.createUser }}</el-form-item>
  29. <el-form-item label="创建时间:" style="float: right">{{ parseTime(new Date(form.createTime)) }}</el-form-item>
  30. <el-form-item label="编号:" style="float: right">{{ form.zbiNumber }}</el-form-item>
  31. </el-form>
  32. <!-- 基本信息 -->
  33. <div v-if="active == 0">
  34. <el-divider content-position="left">基本信息</el-divider>
  35. <el-form
  36. ref="form"
  37. :model="form"
  38. label-width="auto"
  39. label-position="top"
  40. :inline="true"
  41. :disabled="true"
  42. >
  43. <el-form-item
  44. label="账款类型"
  45. prop="wplIsInput"
  46. style="width: 300px"
  47. >
  48. <el-radio-group v-model="type" prop="type">
  49. <el-radio-button label="00"
  50. v-if="type == '00'"
  51. >应付账款</el-radio-button
  52. >
  53. <el-radio-button label="01"
  54. v-if="type == '01'"
  55. >应收账款</el-radio-button
  56. >
  57. </el-radio-group>
  58. </el-form-item>
  59. <el-form-item label="账款名称" prop="zbiName">
  60. <el-input
  61. v-model="form.zbiName"
  62. maxlength="20"
  63. style="width: 300px"
  64. />
  65. </el-form-item>
  66. <el-form-item label="应付方" prop="zbiPayerId">
  67. <el-select style="width: 300px" v-model="form.zbiPayerId" :disabled="true"
  68. v-if="type == '00'">
  69. <el-option :label="company.scyName" :value="company.scyId">
  70. </el-option>
  71. </el-select>
  72. <el-select style="width: 300px" v-model="form.zbiPayerId" filterable clearable remote
  73. v-if="type == '01'">
  74. <el-option v-for="(item,index) in companyRelList" :key="index" :label="item.launchScyId == company.scyId ? item.receiveScyName : item.launchScyName" :value="item.launchScyId == company.scyId ? item.receiveScyId : item.launchScyId">
  75. </el-option>
  76. </el-select>
  77. </el-form-item>
  78. <el-form-item label="贸易日期" prop="zbiDate">
  79. <el-date-picker
  80. style="width: 300px"
  81. v-model="form.zbiDate"
  82. value-format="yyyy-MM-dd"
  83. type="date"
  84. >
  85. </el-date-picker>
  86. </el-form-item>
  87. <el-form-item
  88. :label="
  89. type == '00'
  90. ? '预计付款日期'
  91. : type == '01'
  92. ? '预计收款日期'
  93. : '预计收/付款日期'
  94. "
  95. prop="zbiPayDate"
  96. >
  97. <el-date-picker
  98. style="width: 300px"
  99. v-model="form.zbiPayDate"
  100. value-format="yyyy-MM-dd"
  101. type="date"
  102. >
  103. </el-date-picker>
  104. </el-form-item>
  105. <el-form-item label="应收方" prop="zbiPayeeId">
  106. <el-select style="width: 300px" v-model="form.zbiPayeeId" :disabled="true"
  107. v-if="type == '01'">
  108. <el-option :label="company.scyName" :value="company.scyId">
  109. </el-option>
  110. </el-select>
  111. <el-select style="width: 300px" v-model="form.zbiPayeeId" filterable clearable remote
  112. v-if="type == '00'">
  113. <el-option v-for="(item,index) in companyRelList" :key="index" :label="item.launchScyId == company.scyId ? item.receiveScyName : item.launchScyName" :value="item.launchScyId == company.scyId ? item.receiveScyId : item.launchScyId">
  114. </el-option>
  115. </el-select>
  116. </el-form-item>
  117. <el-form-item label="金额" prop="zbiAmount">
  118. <el-input
  119. v-model="form.zbiAmount"
  120. maxlength="20"
  121. style="width: 300px"
  122. >
  123. <template slot="append">元</template>
  124. </el-input>
  125. </el-form-item>
  126. <el-form-item label="合同编号" prop="zbiContractNo">
  127. <el-input
  128. v-model="form.zbiContractNo"
  129. maxlength="20"
  130. style="width: 300px"
  131. />
  132. </el-form-item>
  133. <el-form-item label="账款服务">
  134. <el-input
  135. v-model="form.zbiService"
  136. maxlength="20"
  137. style="width: 300px"
  138. />
  139. </el-form-item>
  140. <el-form-item label="配送订单">
  141. <el-input
  142. v-model="form.zbiOrderNo"
  143. maxlength="20"
  144. style="width: 300px"
  145. />
  146. </el-form-item>
  147. <el-form-item label="配送企业">
  148. <el-input
  149. v-model="form.zbiDistributor"
  150. maxlength="20"
  151. style="width: 300px"
  152. />
  153. </el-form-item>
  154. <el-form-item label="备注">
  155. <el-input
  156. v-model="form.zbiRemark"
  157. :autosize="{ minRows: 2, maxRows: 4 }"
  158. maxlength="100"
  159. type="textarea"
  160. style="width: 615px"
  161. />
  162. </el-form-item>
  163. </el-form>
  164. </div>
  165. <!-- 发票列表 -->
  166. <div v-if="active == 1">
  167. <el-divider content-position="left">发票列表</el-divider>
  168. <el-form ref="invoice" label-width="auto" :inline="true">
  169. <el-form-item label="合计:">{{ allAmount() }}</el-form-item>
  170. <el-form-item label="大写:">{{ smallToBig(allAmount()) }}</el-form-item>
  171. </el-form>
  172. <el-table
  173. stripe
  174. :data="fileList"
  175. row-key="ziiId"
  176. default-expand-all
  177. border
  178. >
  179. <el-table-column
  180. type="index"
  181. width="50"
  182. align="center"
  183. />
  184. <el-table-column
  185. label="发票代码"
  186. align="center"
  187. prop="ziiNo"
  188. maxlength="10"
  189. />
  190. <el-table-column
  191. label="发票号码"
  192. align="center"
  193. prop="ziiNumber"
  194. maxlength="10"
  195. />
  196. <el-table-column label="开票日期" align="center" prop="ziiDate" />
  197. <el-table-column
  198. label="购方识别号"
  199. align="center"
  200. prop="ziiPurchaserNo"
  201. />
  202. <el-table-column
  203. label="销方识别号"
  204. align="center"
  205. prop="ziiSellerNo"
  206. />
  207. <el-table-column
  208. label="合计金额"
  209. align="center"
  210. prop="ziiTotalAmount"
  211. />
  212. <el-table-column
  213. label="价税合计"
  214. align="center"
  215. prop="ziiAmount"
  216. />
  217. <el-table-column
  218. label="校验结果"
  219. align="center"
  220. prop="ziiCheckStt"
  221. :formatter="checkSttFormat"
  222. />
  223. <el-table-column
  224. label="附件"
  225. align="center"
  226. class-name="small-padding fixed-width"
  227. fixed="right"
  228. width="200"
  229. >
  230. <template slot-scope="scope">
  231. <el-button
  232. size="mini"
  233. type="text"
  234. @click="invoicePictureCardPreview(scope.row)"
  235. >详情</el-button
  236. >
  237. </template>
  238. </el-table-column>
  239. </el-table>
  240. </div>
  241. <!-- 合同附件 -->
  242. <div v-if="active == 2">
  243. <el-divider content-position="left">合同附件</el-divider>
  244. <el-upload
  245. :disabled="true"
  246. :file-list="contractList"
  247. :auto-upload="false"
  248. action=""
  249. ref="contractUpload"
  250. list-type="picture-card"
  251. :on-preview="invoicePictureCardPreview">
  252. </el-upload>
  253. </div>
  254. <!-- 物流附件 -->
  255. <div v-if="active == 3">
  256. <el-divider content-position="left">物流附件</el-divider>
  257. <el-upload
  258. :disabled="true"
  259. :file-list="logisticsList"
  260. :auto-upload="false"
  261. action=""
  262. ref="logisticsUpload"
  263. list-type="picture-card"
  264. :on-preview="invoicePictureCardPreview">
  265. </el-upload>
  266. </div>
  267. <!-- 其他附件 -->
  268. <div v-if="active == 4">
  269. <el-divider content-position="left">其他附件</el-divider>
  270. <el-upload
  271. :disabled="true"
  272. :file-list="otherList"
  273. :auto-upload="false"
  274. action=""
  275. ref="otherUpload"
  276. list-type="picture-card"
  277. :on-preview="invoicePictureCardPreview">
  278. </el-upload>
  279. </div>
  280. </el-main>
  281. </el-container>
  282. </el-container>
  283. <!-- 查看图片 -->
  284. <el-dialog :visible.sync="invoiceVisible">
  285. <img width="100%" :src="invoiceImageUrl" alt="" />
  286. </el-dialog>
  287. <div style="text-align: center">
  288. <el-button type="primary" @click="back()" v-if="active != 0"
  289. >查看上一步</el-button
  290. >
  291. <el-button type="primary" @click="next()" v-if="active != 4"
  292. v-loading.fullscreen.lock="fullscreenLoading"
  293. >查看下一步</el-button
  294. >
  295. <el-button type="primary" @click="submit()" v-if="active == 4"
  296. >关闭</el-button
  297. >
  298. </div>
  299. </div>
  300. </template>
  301. <script>
  302. import {
  303. getBill,
  304. getInvoice,
  305. getFile,
  306. commitBill
  307. } from "@/api/service/bill/bill";
  308. import {
  309. getOwnCompany,
  310. companyRelList
  311. } from "@/api/common/company";
  312. import { amtformat } from "@/utils/amtCommon"
  313. export default {
  314. name: "BillDetail",
  315. components: {},
  316. data() {
  317. return {
  318. // 查询参数
  319. queryParams: {},
  320. // 表单参数
  321. form: {
  322. },
  323. //进度
  324. active: 0,
  325. //类型
  326. type: "00",
  327. //合同附件
  328. contractList: [],
  329. //物流附件
  330. logisticsList: [],
  331. //其他附件
  332. otherList: [],
  333. //发票列表
  334. fileList: [],
  335. //合计金额
  336. totalPrice: 0,
  337. //验证结果
  338. checkSttOptions: [],
  339. //图片路径
  340. invoiceImageUrl: null,
  341. //图片显示
  342. invoiceVisible: false,
  343. //等待框
  344. fullscreenLoading: false,
  345. //链属企业
  346. companyRelList:[],
  347. //链属企业
  348. company:{},
  349. };
  350. },
  351. created() {
  352. //进度
  353. this.active = 0;
  354. const zbiId = this.$route.params && this.$route.params.zbiId;
  355. this.fullscreenLoading = true
  356. getOwnCompany().then((response) => {
  357. console.log(response);
  358. this.company = response.data;
  359. });
  360. this.getCompanyRel()
  361. this.getDetail(zbiId)
  362. this.getDicts("zc_invoice_checkStt").then((response) => {
  363. this.checkSttOptions = response.data;
  364. });
  365. },
  366. activated() {},
  367. methods: {
  368. //查询往来账款详情
  369. getDetail(zbiId){
  370. getBill(zbiId).then((response) => {
  371. console.log(response);
  372. this.form = response.data;
  373. this.fullscreenLoading = false
  374. });
  375. },
  376. //查询链属企业
  377. getCompanyRel(val){
  378. this.queryParams.companyName = val
  379. companyRelList(this.queryParams).then((response) => {
  380. console.log(response);
  381. this.companyRelList = response.data;
  382. });
  383. },
  384. //查看图片
  385. invoicePictureCardPreview(file) {
  386. console.log(file)
  387. this.invoiceImageUrl = file.url;
  388. this.invoiceVisible = true;
  389. },
  390. //发票合计
  391. allAmount() {
  392. var strarr = [0.00];
  393. for (let i in this.fileList) {
  394. strarr.push(this.fileList[i]["ziiAmount"]);
  395. }
  396. return Math.floor(eval(strarr.join("+")) * 100) / 100; //结果
  397. // return this.handleInput(eval(strarr.join("+"))); //结果
  398. },
  399. // 下一步
  400. next() {
  401. this.fullscreenLoading = true
  402. if (this.active == 0) {
  403. this.getInvoiceList();
  404. this.active++;
  405. } else if(this.active == 1) {
  406. //查询合同
  407. getFile("0",this.form.zbiId).then((response) => {
  408. this.contractList = response.data;
  409. this.fullscreenLoading = false
  410. }).catch(() => {
  411. this.fullscreenLoading = false
  412. })
  413. this.active++;
  414. } else if(this.active == 2) {
  415. //查询物流
  416. getFile("1",this.form.zbiId).then((response) => {
  417. this.logisticsList = response.data;
  418. this.fullscreenLoading = false
  419. }).catch(() => {
  420. this.fullscreenLoading = false
  421. })
  422. this.active++;
  423. } else if(this.active == 3) {
  424. //查询其他附件
  425. getFile("2",this.form.zbiId).then((response) => {
  426. this.otherList = response.data;
  427. this.fullscreenLoading = false
  428. }).catch(() => {
  429. this.fullscreenLoading = false
  430. })
  431. this.active++;
  432. } else {
  433. this.fullscreenLoading = false
  434. this.active++;
  435. }
  436. },
  437. //查询合同
  438. getInvoiceList(){
  439. getInvoice(this.form.zbiId).then((response) => {
  440. console.log(response);
  441. this.fileList = response.data;
  442. this.fullscreenLoading = false
  443. }).catch(() => {
  444. this.fullscreenLoading = false
  445. });
  446. },
  447. // 上一步
  448. back() {
  449. this.active--;
  450. },
  451. // 结束
  452. submit() {
  453. commitBill(this.form.zbiId).then((response) => {
  454. this.$store.dispatch("tagsView/delView", this.$route);
  455. this.$router.go(-1);
  456. });
  457. },
  458. //校验结果字典
  459. checkSttFormat(row, column) {
  460. return this.selectDictLabel(this.checkSttOptions, row.ziiCheckStt);
  461. },
  462. /* 金额展示 */
  463. handleInput(str) {
  464. return amtformat(str,2, ".", ",");
  465. },
  466. /* // 将数字金额转换为大写金额 */
  467. smallToBig(money) {
  468. // 将数字金额转换为大写金额
  469. var cnNums = new Array(
  470. "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" ); //汉字的数字
  471. var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
  472. var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
  473. var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
  474. var cnInteger = "整"; //整数金额时后面跟的字符
  475. var cnIntLast = "元"; //整数完以后的单位
  476. //最大处理的数字
  477. var maxNum = 999999999999999.9999;
  478. var integerNum; //金额整数部分
  479. var decimalNum; //金额小数部分
  480. //输出的中文金额字符串
  481. var chineseStr = "";
  482. var parts; //分离金额后用的数组,预定义
  483. if (money == "" || money == null || money == undefined) {
  484. return "零元零角零分";
  485. }
  486. money = parseFloat(money);
  487. if (money >= maxNum) {
  488. //超出最大处理数字
  489. return "超出最大处理数字";
  490. }
  491. if (money == 0) {
  492. chineseStr = cnNums[0] + cnIntLast + cnInteger;
  493. return chineseStr;
  494. }
  495. //四舍五入保留两位小数,转换为字符串
  496. money = Math.round(money * 100).toString();
  497. integerNum = money.substr(0, money.length - 2);
  498. decimalNum = money.substr(money.length - 2);
  499. //获取整型部分转换
  500. if (parseInt(integerNum, 10) > 0) {
  501. var zeroCount = 0;
  502. var IntLen = integerNum.length;
  503. for (var i = 0; i < IntLen; i++) {
  504. var n = integerNum.substr(i, 1);
  505. var p = IntLen - i - 1;
  506. var q = p / 4;
  507. var m = p % 4;
  508. if (n == "0") {
  509. zeroCount++;
  510. } else {
  511. if (zeroCount > 0) {
  512. chineseStr += cnNums[0];
  513. }
  514. //归零
  515. zeroCount = 0;
  516. chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
  517. }
  518. if (m == 0 && zeroCount < 4) {
  519. chineseStr += cnIntUnits[q];
  520. }
  521. }
  522. chineseStr += cnIntLast;
  523. }
  524. //小数部分
  525. if (decimalNum != "") {
  526. var decLen = decimalNum.length;
  527. for (var i = 0; i < decLen; i++) {
  528. var n = decimalNum.substr(i, 1);
  529. if (n != "0") {
  530. chineseStr += cnNums[Number(n)] + cnDecUnits[i];
  531. }
  532. }
  533. }
  534. if (chineseStr == "") {
  535. chineseStr += cnNums[0] + cnIntLast + cnInteger;
  536. } else if (decimalNum == "" || /^0*$/.test(decimalNum)) {
  537. chineseStr += cnInteger;
  538. }
  539. return chineseStr;
  540. },
  541. },
  542. };
  543. </script>