payMoney.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. <template>
  2. <div>
  3. <div
  4. class="dialogTableTitle flex a-center jlr"
  5. style="
  6. display: flex;
  7. justify-content: space-between;
  8. align-items: center;
  9. margin: 10px 0;
  10. "
  11. >
  12. <div>
  13. <el-button
  14. type="primary"
  15. :disabled="browseStatus"
  16. @click.prevent="addpayment()"
  17. size="small"
  18. >新行
  19. </el-button>
  20. <el-button
  21. type="primary"
  22. size="small"
  23. @click="saveForm"
  24. :disabled="browseStatus"
  25. >保 存</el-button
  26. >
  27. <el-button
  28. type="danger"
  29. size="small"
  30. @click.prevent="handleSelect"
  31. :disabled="browseStatus"
  32. >作业费协议</el-button
  33. >
  34. </div>
  35. </div>
  36. <el-table
  37. :data="warehouseCrList"
  38. ref="table"
  39. tooltip-effect="dark"
  40. border
  41. stripe
  42. show-summary
  43. :summary-method="warehouseDrSummaries"
  44. >
  45. <el-table-column type="selection" width="55" align="center" />
  46. <el-table-column label="序号" type="index" width="80"> </el-table-column>
  47. <el-table-column
  48. prop="fCorpid"
  49. header-align="center"
  50. align="center"
  51. width="180px"
  52. label="客户名称"
  53. >
  54. <template slot-scope="scope">
  55. <el-select
  56. v-model="scope.row.fCorpid"
  57. filterable
  58. clearable
  59. placeholder="客户名称"
  60. :disabled="browseStatus"
  61. >
  62. <el-option
  63. v-for="(item, index) in fMblnoOptions"
  64. :key="index.fId"
  65. :label="item.fName"
  66. :value="item.fId"
  67. ></el-option>
  68. </el-select>
  69. </template>
  70. </el-table-column>
  71. <el-table-column
  72. prop="fFeeid"
  73. header-align="center"
  74. align="center"
  75. width="180px"
  76. label="费用名称"
  77. >
  78. <template slot-scope="scope">
  79. <el-select
  80. v-model="scope.row.fFeeid"
  81. clearable
  82. placeholder="费用名称"
  83. :disabled="browseStatus"
  84. >
  85. <el-option
  86. v-for="(item, index) in fCNameOptions"
  87. :key="index.fId"
  88. :label="item.fName"
  89. :value="item.fId"
  90. ></el-option>
  91. </el-select>
  92. </template>
  93. </el-table-column>
  94. <el-table-column
  95. prop="fBusinessType"
  96. header-align="center"
  97. align="center"
  98. width="180px"
  99. label="作业类型"
  100. >
  101. <template slot-scope="scope">
  102. <el-select
  103. style="width: 80%"
  104. v-model="scope.row.fBusinessType"
  105. filterable
  106. disabled
  107. >
  108. <el-option
  109. v-for="(item, index) in businessTypeOption"
  110. :key="index.dictValue"
  111. :label="item.dictLabel"
  112. :value="item.dictValue"
  113. ></el-option>
  114. </el-select>
  115. </template>
  116. </el-table-column>
  117. <el-table-column
  118. prop="fFeeUnitid"
  119. header-align="center"
  120. align="center"
  121. width="180px"
  122. label="计价单位"
  123. >
  124. <template slot-scope="scope">
  125. <el-select
  126. v-model="scope.row.fFeeUnitid"
  127. placeholder="请选择计价单位"
  128. clearable
  129. :disabled="browseStatus"
  130. @change="changeFeeUnit(scope.row)"
  131. >
  132. <el-option
  133. v-for="(item, index) in fFeetUnitOptions"
  134. :key="index.dictValue"
  135. :label="item.dictLabel"
  136. :value="item.dictValue"
  137. />
  138. </el-select>
  139. </template>
  140. </el-table-column>
  141. <el-table-column
  142. prop="fQty"
  143. header-align="center"
  144. align="center"
  145. width="150px"
  146. label="数量"
  147. >
  148. <template slot-scope="scope">
  149. <el-input
  150. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, "$1$2.$3")'
  151. v-model="scope.row.fQty"
  152. :disabled="browseStatus"
  153. @change="changeContractAmt(scope.row)"
  154. placeholder="数量"
  155. show-word-limit
  156. />
  157. </template>
  158. </el-table-column>
  159. <el-table-column
  160. prop="fUnitprice"
  161. header-align="center"
  162. align="center"
  163. width="150px"
  164. label="单价"
  165. >
  166. <template slot-scope="scope">
  167. <el-input
  168. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'
  169. v-model="scope.row.fUnitprice"
  170. :disabled="browseStatus || scope.row.fSrcTypeId !== 0"
  171. @change="changeContractAmt(scope.row)"
  172. placeholder="单价"
  173. show-word-limit
  174. />
  175. </template>
  176. </el-table-column>
  177. <el-table-column
  178. prop="fAmount"
  179. header-align="center"
  180. align="center"
  181. width="150px"
  182. label="金额"
  183. >
  184. <template slot-scope="scope">
  185. <el-input
  186. disabled
  187. oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'
  188. v-model="scope.row.fAmount"
  189. placeholder="金额"
  190. show-word-limit
  191. />
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. prop="fStltypeid"
  196. header-align="center"
  197. align="center"
  198. width="130px"
  199. label="结算方式"
  200. >
  201. <template slot-scope="scope">
  202. <el-select
  203. v-model="scope.row.fStltypeid"
  204. placeholder="请选择结算表票结、月结"
  205. :disabled="browseStatus"
  206. >
  207. <el-option
  208. v-for="(item, index) in fStltypeOptions"
  209. :key="index.dictValue"
  210. :label="item.dictLabel"
  211. :value="item.dictValue"
  212. ></el-option>
  213. </el-select>
  214. </template>
  215. </el-table-column>
  216. <el-table-column
  217. prop="fCurrency"
  218. header-align="center"
  219. align="center"
  220. width="150px"
  221. label="币别"
  222. >
  223. <template slot-scope="scope">
  224. <el-input
  225. v-model="scope.row.fCurrency"
  226. :disabled="browseStatus"
  227. placeholder="币别"
  228. show-word-limit
  229. />
  230. </template>
  231. </el-table-column>
  232. <el-table-column
  233. prop="fExrate"
  234. header-align="center"
  235. align="center"
  236. width="150px"
  237. label="汇率"
  238. >
  239. <template slot-scope="scope">
  240. <el-input
  241. v-model="scope.row.fExrate"
  242. :disabled="browseStatus"
  243. placeholder="汇率"
  244. show-word-limit
  245. />
  246. </template>
  247. </el-table-column>
  248. <el-table-column
  249. prop="fTaxrate"
  250. header-align="center"
  251. align="center"
  252. width="150px"
  253. label="税率"
  254. >
  255. <template slot-scope="scope">
  256. <el-input
  257. v-model="scope.row.fTaxrate"
  258. :disabled="browseStatus"
  259. placeholder="税率"
  260. show-word-limit
  261. />
  262. </template>
  263. </el-table-column>
  264. <el-table-column
  265. prop="fMblno"
  266. header-align="center"
  267. align="center"
  268. width="130px"
  269. label="提单号"
  270. >
  271. <template slot-scope="scope">
  272. <el-input
  273. v-model="scope.row.fMblno"
  274. :disabled="browseStatus"
  275. placeholder="提单号"
  276. show-word-limit
  277. />
  278. </template>
  279. </el-table-column>
  280. <el-table-column
  281. prop="fProductName"
  282. header-align="center"
  283. align="center"
  284. width="140px"
  285. label="品名"
  286. >
  287. <template slot-scope="scope">
  288. <el-input
  289. v-model="scope.row.fProductName"
  290. :disabled="browseStatus"
  291. placeholder="品名"
  292. show-word-limit
  293. />
  294. </template>
  295. </el-table-column>
  296. <el-table-column
  297. prop="fMarks"
  298. header-align="center"
  299. align="center"
  300. width="130px"
  301. label="品牌"
  302. >
  303. <template slot-scope="scope">
  304. <el-input
  305. v-model="scope.row.fMarks"
  306. :disabled="browseStatus"
  307. placeholder="品牌"
  308. show-word-limit
  309. />
  310. </template>
  311. </el-table-column>
  312. <el-table-column
  313. prop="fSrcTypeId"
  314. header-align="center"
  315. align="center"
  316. width="130px"
  317. label="来源"
  318. >
  319. <template slot-scope="scope">
  320. <span v-if="scope.row.fSrcTypeId === 0">录入</span>
  321. <span v-if="scope.row.fSrcTypeId !== 0">协议</span>
  322. </template>
  323. </el-table-column>
  324. <el-table-column
  325. prop="remarks"
  326. header-align="center"
  327. align="center"
  328. width="150px"
  329. label="备注"
  330. >
  331. <template slot-scope="scope">
  332. <el-input
  333. v-model="scope.row.remarks"
  334. :disabled="browseStatus"
  335. placeholder="备注"
  336. show-word-limit
  337. />
  338. </template>
  339. </el-table-column>
  340. <el-table-column
  341. header-align="center"
  342. align="center"
  343. width="200px"
  344. label="操作"
  345. >
  346. <template slot-scope="scope">
  347. <!-- <el-button size="small">审核费用</el-button> -->
  348. <el-button
  349. @click.native.prevent="deleteRow(scope.$index, warehouseCrList)"
  350. size="small"
  351. :disabled="browseStatus"
  352. >移除</el-button
  353. >
  354. </template>
  355. </el-table-column>
  356. </el-table>
  357. <!-- 选择作业费协议数据 -->
  358. <el-dialog
  359. v-dialogDrag
  360. title="作业费协议"
  361. :close-on-click-modal="false"
  362. :modal="false"
  363. style="box-shadow: 0 1px 3px rgba(0, 0, 0, 0) !important"
  364. :visible.sync="warehousingagreements"
  365. width="70%"
  366. >
  367. <template slot="作业费协议">
  368. <div class="avue-crud__dialog__header">
  369. <span class="el-dialog__title">
  370. <span
  371. style="
  372. display: inline-block;
  373. width: 3px;
  374. height: 20px;
  375. margin-right: 5px;
  376. float: left;
  377. margin-top: 2px;
  378. "
  379. ></span>
  380. </span>
  381. </div>
  382. </template>
  383. <el-menu
  384. :default-active="activeIndex"
  385. v-if="Navigation === true"
  386. class="el-menu-demo"
  387. mode="horizontal"
  388. @select="handleSelect"
  389. >
  390. <el-menu-item index="1">车队作业费</el-menu-item>
  391. <el-menu-item index="2">劳务作业费</el-menu-item>
  392. </el-menu>
  393. <el-table
  394. :data="tasklegList"
  395. ref="table"
  396. tooltip-effect="dark"
  397. width="100%"
  398. border
  399. stripe
  400. @selection-change="whgenlegSelectionChange"
  401. >
  402. <el-table-column type="selection" width="55"> </el-table-column>
  403. <el-table-column label="行号" type="index" width="80">
  404. </el-table-column>
  405. <el-table-column
  406. prop="fCorpname"
  407. header-align="center"
  408. align="center"
  409. label="客户名称"
  410. />
  411. <el-table-column
  412. prop="fName"
  413. header-align="center"
  414. align="center"
  415. label="费用名称"
  416. />
  417. <el-table-column
  418. prop="fFeeUnitid"
  419. header-align="center"
  420. align="center"
  421. width="180px"
  422. label="计价单位"
  423. >
  424. <template slot-scope="scope">
  425. <el-select
  426. v-model="scope.row.fFeeUnitid"
  427. placeholder="请选择计价单位"
  428. @change="changeFeeUnit(scope.row)"
  429. disabled
  430. clearable
  431. >
  432. <el-option
  433. v-for="(dict, index) in fFeetUnitOptions"
  434. :key="index.dictValue"
  435. :label="dict.dictLabel"
  436. :value="dict.dictValue"
  437. />
  438. </el-select>
  439. </template>
  440. </el-table-column>
  441. <el-table-column
  442. prop="fPrice"
  443. header-align="center"
  444. align="center"
  445. label="单价"
  446. />
  447. </el-table>
  448. <pagination
  449. v-show="whgenlegTotal > 0"
  450. :total="whgenlegTotal"
  451. :page.sync="pageNum"
  452. :limit.sync="pageSize"
  453. @pagination="getWhgenlegList"
  454. />
  455. <div slot="footer" class="dialog-footer">
  456. <el-button type="primary" @click="zhgenlegData">导 入</el-button>
  457. <el-button
  458. @click="
  459. warehousingagreements = false;
  460. Navigation = false;
  461. "
  462. >取 消</el-button
  463. >
  464. </div>
  465. </el-dialog>
  466. </div>
  467. </template>
  468. <script>
  469. import { operationAgreement } from "@/api/agreement/agreement";
  470. export default {
  471. props: {
  472. browseStatus: {
  473. type: Boolean,
  474. default: false,
  475. },
  476. warehouseCrList: {
  477. type: Array,
  478. default: [],
  479. },
  480. businessTypeOption: {
  481. type: Array,
  482. default: [],
  483. },
  484. fMblnoOptions: {
  485. type: Array,
  486. default: [],
  487. },
  488. fCNameOptions: {
  489. type: Array,
  490. default: [],
  491. },
  492. fFeetUnitOptions: {
  493. type: Array,
  494. default: [],
  495. },
  496. fStltypeOptions: {
  497. type: Array,
  498. default: [],
  499. },
  500. fGrossweight: {
  501. type: Number,
  502. default: null,
  503. },
  504. fQty: {
  505. type: Number,
  506. default: null,
  507. },
  508. fNetweight: {
  509. type: Number,
  510. default: null,
  511. },
  512. fCntqty: {
  513. type: Number,
  514. default: null,
  515. },
  516. form: {
  517. type: Object,
  518. default: null,
  519. },
  520. },
  521. data() {
  522. return {
  523. warehousingagreements: false,
  524. dialogWhgenlegList: [],
  525. whgenlegTotal: 0,
  526. Navigation: false,
  527. tasklegList: [],
  528. dialogWhgenlegList: [],
  529. pageNum: 1,
  530. pageSize: 10,
  531. };
  532. },
  533. methods: {
  534. saveForm() {
  535. this.$emit("chiSave");
  536. },
  537. addpayment() {
  538. this.$emit("chiAdd");
  539. },
  540. // 付款合计
  541. warehouseDrSummaries(param) {
  542. const { columns, data } = param;
  543. const sums = [];
  544. columns.forEach((column, index) => {
  545. if (index === 0) {
  546. sums[index] = "合计";
  547. return;
  548. }
  549. const values = data.map((item) => Number(item[column.property]));
  550. if (
  551. column.property === "fUnitprice" ||
  552. column.property === "fAmount" ||
  553. column.property === "fQty"
  554. ) {
  555. sums[index] = values.reduce((prev, curr) => {
  556. const value = Number(curr);
  557. if (!isNaN(value)) {
  558. return prev + curr;
  559. } else {
  560. return prev;
  561. }
  562. }, 0);
  563. sums[index] = sums[index].toFixed(2);
  564. }
  565. });
  566. return sums;
  567. },
  568. deleteRow(index, rows) {
  569. rows.splice(index, 1);
  570. },
  571. // 变更计价单位
  572. changeFeeUnit(row) {
  573. if (!row.fFeeUnitid) {
  574. return false;
  575. }
  576. if (row.fFeeUnitid === "2") {
  577. this.$set(row, "fQty", (this.fGrossweight / 1000).toFixed(2));
  578. } else if (row.fFeeUnitid === "1") {
  579. this.$set(row, "fQty", this.fQty.toFixed(2));
  580. } else if (row.fFeeUnitid === "3") {
  581. this.$set(row, "fQty", (this.fNetweight / 1000).toFixed(2));
  582. } else if (row.fFeeUnitid === "7") {
  583. this.$set(row, "fQty", this.fCntqty);
  584. } else {
  585. this.$set(row, "fQty", 0);
  586. }
  587. if (row.fUnitprice) {
  588. this.$set(
  589. row,
  590. "fAmount",
  591. parseFloat(Number(row.fUnitprice) * Number(row.fQty)).toFixed(2)
  592. );
  593. }
  594. },
  595. // 数量计算
  596. changeContractAmt(row) {
  597. let fQty = 0;
  598. let fUnitprice = 0;
  599. if (row.fUnitprice) {
  600. fUnitprice = row.fUnitprice;
  601. }
  602. if (row.fQty) {
  603. fQty = row.fQty;
  604. }
  605. this.$set(row, "fAmount", Number(fUnitprice) * Number(fQty)).toFixed(2);
  606. },
  607. handleSelect() {
  608. if (!this.form.fCorpid) {
  609. this.$message({
  610. message: "请维护客户",
  611. type: "warning",
  612. });
  613. } else if (this.form.fProductName == undefined) {
  614. this.$message({
  615. message: "请维护入库明细品名",
  616. type: "warning",
  617. });
  618. } else {
  619. this.dialogWhgenlegList = [];
  620. this.whgenlegTotal = 0;
  621. this.warehousingagreements = true;
  622. this.getWhgenlegList();
  623. }
  624. },
  625. // 查询作业费信息
  626. getWhgenlegList() {
  627. let data = {};
  628. this.Navigation = false;
  629. data = {
  630. pageNum: 1,
  631. pageSize: 10,
  632. fTaskType: key,
  633. fFleet: this.form.fFleet,
  634. };
  635. operationAgreement(data).then((response) => {
  636. response.rows.map((e) => {
  637. if (e.fFeeUnitid) {
  638. e.fFeeUnitid = e.fFeeUnitid.toString();
  639. }
  640. });
  641. this.tasklegList = response.rows;
  642. this.whgenlegTotal = response.total;
  643. });
  644. },
  645. // 库存总账多选框
  646. whgenlegSelectionChange(selection) {
  647. this.dialogWhgenlegList = selection;
  648. },
  649. //导入收付款信息明细
  650. zhgenlegData() {
  651. if (this.dialogWhgenlegList.length === 0) {
  652. this.$message({
  653. message: "请选择需要导入的数据",
  654. type: "warning",
  655. });
  656. } else {
  657. this.dialogWhgenlegList.map((e) => {
  658. let qty = 1;
  659. if (e.fFeeUnitid == 1) {
  660. qty = this.fQty;
  661. } else if (e.fFeeUnitid == 2) {
  662. qty = (this.fGrossweight / 1000).toFixed(2);
  663. } else if (e.fFeeUnitid == 3) {
  664. qty = (this.fNetweight / 1000).toFixed(2);
  665. } else if (e.fFeeUnitid == 7) {
  666. qty = this.fCntqty;
  667. }
  668. let fAmount = 0;
  669. fAmount = e.fPrice * qty;
  670. this.warehouseCrList.push({
  671. fQty: qty,
  672. fCorpid: e.fCorpid,
  673. fFeeid: e.feeId,
  674. fFeeUnitid: e.fFeeUnitid,
  675. fUnitprice: e.fPrice,
  676. fCurrency: "RMB",
  677. fExrate: 1,
  678. fAmount: fAmount,
  679. fTaxrate: this.fTaxrate,
  680. fMblno: this.form.fMblno,
  681. fProductName: this.form.fProductName,
  682. fMarks: this.form.fMarks,
  683. fBusinessType: this.form.fBusinessType,
  684. fSrcTypeId: e.fId,
  685. });
  686. });
  687. this.warehousingagreements = false;
  688. }
  689. },
  690. },
  691. watch: {
  692. browseStatus(val) {
  693. this.browseStatus = val;
  694. },
  695. warehouseCrList(val) {
  696. this.warehouseCrList = val;
  697. },
  698. },
  699. };
  700. </script>
  701. <style scoped lang="scss">
  702. </style>