payMoney.vue 19 KB

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