index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. <template>
  2. <div class="porder pagePadding">
  3. <ex-table
  4. v-loading="loading"
  5. v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
  6. :table="table"
  7. :data="tableData"
  8. :columns="columns"
  9. :page="pageInfo"
  10. :size="size"
  11. @page-curr-change="handlePageChange"
  12. @page-size-change="handleSizeChange"
  13. @screen-reset="
  14. pageInfo.curr = 1;
  15. parmValue.page = 1;
  16. searchList();
  17. "
  18. @screen-submit="
  19. pageInfo.curr = 1;
  20. parmValue.page = 1;
  21. searchList();
  22. "
  23. >
  24. <template #table-header="{ selection }">
  25. <div style="width: 100%">
  26. <el-row style="padding: 0 0 10px 80px">
  27. <el-col :span="8" style="width: 470px">
  28. <el-select
  29. v-model="code"
  30. multiple
  31. filterable
  32. remote
  33. :multiple-limit="1"
  34. reserve-keyword
  35. :size="searchSize"
  36. style="width: 100%"
  37. placeholder="供应商名称"
  38. :remote-method="remoteMethod"
  39. :loading="selectLoading"
  40. @change="selectChange"
  41. >
  42. <el-option
  43. v-for="item in activeOptions"
  44. :key="item.code"
  45. :label="item.name + '--------' + item.contector"
  46. :value="item.code"
  47. />
  48. </el-select>
  49. </el-col>
  50. <el-col
  51. :span="3"
  52. style="width: 140px; float: right"
  53. v-if="powers.some((item) => item == '041')"
  54. >
  55. <el-button
  56. :size="searchSize"
  57. type="primary"
  58. class="fr"
  59. @click="setBilling(selection)"
  60. >
  61. 批量设置回票信息</el-button
  62. ></el-col
  63. >
  64. <el-col
  65. :span="3"
  66. style="width: 140px; float: right"
  67. v-if="powers.some((item) => item == '042')"
  68. >
  69. <el-button
  70. :size="searchSize"
  71. type="primary"
  72. style="float: right"
  73. @click="examBilling(selection)"
  74. >
  75. 批量审核回票信息
  76. </el-button>
  77. </el-col>
  78. </el-row>
  79. <el-row style="padding: 0 0 10px 0">
  80. <el-col :span="8" style="width: 120px">
  81. <el-select
  82. v-model="parmValue.send_status"
  83. clearable
  84. :size="searchSize"
  85. placeholder="发货状态"
  86. @change="
  87. pageInfo.curr = 1;
  88. parmValue.page = 1;
  89. searchList();
  90. "
  91. >
  92. <el-option
  93. v-for="item in send_status_list"
  94. :key="item.value"
  95. :label="item.label"
  96. :value="item.value"
  97. >
  98. </el-option>
  99. </el-select>
  100. </el-col>
  101. <el-col :span="8" style="width: 130px; padding-left: 10px">
  102. <el-select
  103. v-model="parmValue.payinfo"
  104. clearable
  105. :size="searchSize"
  106. placeholder="付款状态"
  107. @change="
  108. pageInfo.curr = 1;
  109. parmValue.page = 1;
  110. searchList();
  111. "
  112. >
  113. <el-option
  114. v-for="item in pay_status_list"
  115. :key="item.value"
  116. :label="item.label"
  117. :value="item.value"
  118. >
  119. </el-option>
  120. </el-select>
  121. </el-col>
  122. <el-col :span="8" style="width: 130px; padding-left: 10px">
  123. <el-select
  124. v-model="parmValue.invinfo"
  125. clearable
  126. :size="searchSize"
  127. placeholder="回票状态"
  128. @change="
  129. pageInfo.curr = 1;
  130. parmValue.page = 1;
  131. searchList();
  132. "
  133. >
  134. <el-option
  135. v-for="item in inv_status_list"
  136. :key="item.value"
  137. :label="item.label"
  138. :value="item.value"
  139. >
  140. </el-option>
  141. </el-select>
  142. </el-col>
  143. <el-col :span="8" style="width: 130px; padding-left: 10px">
  144. <el-select
  145. v-model="parmValue.th_status"
  146. clearable
  147. :size="searchSize"
  148. placeholder="退货状态"
  149. @change="
  150. pageInfo.curr = 1;
  151. parmValue.page = 1;
  152. searchList();
  153. "
  154. >
  155. <el-option
  156. v-for="item in th_status_list"
  157. :key="item.value"
  158. :label="item.label"
  159. :value="item.value"
  160. >
  161. </el-option>
  162. </el-select>
  163. </el-col>
  164. <el-col :span="8" style="width: 160px; padding: 0 0 0 10px">
  165. <el-select
  166. v-model="parmValue.inv_status"
  167. clearable
  168. :size="searchSize"
  169. placeholder="回票信息状态"
  170. @change="
  171. pageInfo.curr = 1;
  172. parmValue.page = 1;
  173. searchList();
  174. "
  175. >
  176. <el-option
  177. v-for="item in options"
  178. :key="item.value"
  179. :label="item.label"
  180. :value="item.value"
  181. >
  182. </el-option>
  183. </el-select>
  184. </el-col>
  185. <el-col
  186. :span="3"
  187. style="width: 140px; float: right"
  188. v-if="powers.some((item) => item == '050')"
  189. >
  190. <el-button
  191. :size="searchSize"
  192. type="primary"
  193. style="float: right"
  194. @click="statusConfirm(selection)"
  195. >
  196. 批量设置采购单无需对账状态
  197. </el-button>
  198. </el-col>
  199. </el-row>
  200. <el-row :gutter="10">
  201. <el-col :span="5" style="width: 390px">
  202. <el-input
  203. clearable
  204. style="width: 100%"
  205. :size="searchSize"
  206. placeholder="关键字"
  207. v-model="input"
  208. >
  209. <el-select
  210. v-model="selectK"
  211. slot="prepend"
  212. style="width: 125px"
  213. placeholder="请选择"
  214. >
  215. <el-option
  216. v-for="item in selectKlist"
  217. :key="item.code"
  218. :label="item.name"
  219. :value="item.code"
  220. ></el-option>
  221. </el-select>
  222. <el-button
  223. slot="append"
  224. icon="el-icon-search"
  225. @click.native="searchList"
  226. ></el-button>
  227. </el-input>
  228. </el-col>
  229. <el-col :span="3" style="width: 84px; float: right">
  230. <el-button
  231. type="primary"
  232. icon="el-icon-download"
  233. class="fr"
  234. v-if="powers.some((item) => item == '051')"
  235. @click="batchExport(selection)"
  236. :size="searchSize"
  237. style="margin-left: 10px"
  238. >导出</el-button
  239. >
  240. </el-col>
  241. <el-col :span="3" style="width: 66px; float: right">
  242. <el-button
  243. :size="searchSize"
  244. type="primary"
  245. class="fr"
  246. style="margin-left: 10px"
  247. @click="searchList"
  248. >
  249. 刷新
  250. </el-button>
  251. </el-col>
  252. <el-col :span="3" style="width: 66px; float: right">
  253. <el-button
  254. type="warning"
  255. class="fr"
  256. :size="searchSize"
  257. @click="restSearch"
  258. >
  259. 重置
  260. </el-button>
  261. </el-col>
  262. </el-row>
  263. </div>
  264. </template>
  265. <template #expand="{ scope }">
  266. <el-form
  267. label-position="left"
  268. size="mini"
  269. inline
  270. label-width="70px"
  271. class="demo-table-expand"
  272. >
  273. <el-row>
  274. <el-col :span="4">
  275. <el-form-item size="mini" label="商品编号">
  276. <span>{{ scope.row.goodNo }}</span>
  277. </el-form-item>
  278. </el-col>
  279. <el-col :span="8">
  280. <el-form-item size="mini" label="商品名称">
  281. <span>{{ scope.row.goodName }}</span>
  282. </el-form-item>
  283. </el-col>
  284. <el-col :span="12">
  285. <el-form-item size="mini" label="商品描述">
  286. <span>{{ scope.row.goodDesc }}</span>
  287. </el-form-item>
  288. </el-col>
  289. <el-col :span="4">
  290. <el-form-item size="mini" label="单位">
  291. <span>{{ scope.row.goodUnit }}</span>
  292. </el-form-item>
  293. </el-col>
  294. <el-col :span="4">
  295. <el-form-item size="mini" label="数量">
  296. <span>{{ scope.row.orderNum }}</span>
  297. </el-form-item>
  298. </el-col>
  299. <el-col :span="4">
  300. <el-form-item size="mini" label="含有工差">
  301. <span>{{ scope.row.isDiff }}</span>
  302. </el-form-item>
  303. </el-col>
  304. <el-col :span="4">
  305. <el-form-item size="mini" label="工期">
  306. <span>{{ scope.row.workDay }}</span>
  307. </el-form-item>
  308. </el-col>
  309. <el-col :span="4">
  310. <el-form-item size="mini" label="成本合计">
  311. <span>{{ scope.row.pay_price }}</span>
  312. </el-form-item>
  313. </el-col>
  314. <el-col :span="4">
  315. <el-form-item size="mini" label="税率">
  316. <span>{{ scope.row.taxPoint }}</span>
  317. </el-form-item>
  318. </el-col>
  319. <el-col :span="4">
  320. <el-form-item size="mini" label="成本裸价">
  321. <span>{{ scope.row.nakedPrice }}</span>
  322. </el-form-item>
  323. </el-col>
  324. <el-col :span="4">
  325. <el-form-item size="mini" label="加标费">
  326. <span>{{ scope.row.markPrice }}</span>
  327. </el-form-item>
  328. </el-col>
  329. <el-col :span="4">
  330. <el-form-item size="mini" label="包装费">
  331. <span>{{ scope.row.packPrice }}</span>
  332. </el-form-item>
  333. </el-col>
  334. <el-col :span="4">
  335. <el-form-item size="mini" label="证书费">
  336. <span>{{ scope.row.certPrice }}</span>
  337. </el-form-item>
  338. </el-col>
  339. <el-col :span="4">
  340. <el-form-item size="mini" label="开模费">
  341. <span>{{ scope.row.openPrice }}</span>
  342. </el-form-item>
  343. </el-col>
  344. <el-col :span="4">
  345. <el-form-item size="mini" label="物流费">
  346. <span>{{ scope.row.postPrice }}</span>
  347. </el-form-item>
  348. </el-col>
  349. <el-col :span="4">
  350. <el-form-item size="mini" label="工差">
  351. <span>{{ scope.row.diff_fee }}</span>
  352. </el-form-item>
  353. </el-col>
  354. <el-col :span="4">
  355. <el-form-item size="mini" label="商品类型">
  356. <span>{{ scope.row.goodType }}</span>
  357. </el-form-item>
  358. </el-col>
  359. <el-col :span="4">
  360. <el-form-item size="mini" label="商品品牌">
  361. <span>{{ scope.row.goodBank }}</span>
  362. </el-form-item>
  363. </el-col>
  364. <el-col :span="4">
  365. <el-form-item size="mini" label="商品型号">
  366. <span>{{ scope.row.goodModel }}</span>
  367. </el-form-item>
  368. </el-col>
  369. <el-col :span="4">
  370. <el-form-item size="mini" label="商品材质">
  371. <span>{{ scope.row.goodMaterial }}</span>
  372. </el-form-item>
  373. </el-col>
  374. <el-col :span="4">
  375. <el-form-item size="mini" label="商品颜色">
  376. <span>{{ scope.row.goodColor }}</span>
  377. </el-form-item>
  378. </el-col>
  379. <el-col :span="4">
  380. <el-form-item size="mini" label="金属种类">
  381. <span>{{ scope.row.goodCat }}</span>
  382. </el-form-item>
  383. </el-col>
  384. <el-col :span="4">
  385. <el-form-item size="mini" label="金属重量">
  386. <span>{{ scope.row.weight }}</span>
  387. </el-form-item>
  388. </el-col>
  389. <el-col :span="4">
  390. <el-form-item size="mini" label="金属价格">
  391. <span>{{ scope.row.price }}</span>
  392. </el-form-item>
  393. </el-col>
  394. </el-row>
  395. </el-form>
  396. </template>
  397. <template #inv_status="{ scope }">
  398. <el-tag
  399. size="mini"
  400. :type="
  401. scope.row.inv_status == '3'
  402. ? 'danger'
  403. : scope.row.inv_status == '2'
  404. ? 'success'
  405. : 'warning'
  406. "
  407. v-text="
  408. (options.find((item) => item.value == scope.row.inv_status) || {})
  409. .label || '--'
  410. "
  411. ></el-tag>
  412. </template>
  413. <template #th_info="{ scope }">
  414. <el-tag
  415. size="mini"
  416. :type="scope.row.th_info == '1' ? 'success' : 'danger'"
  417. v-text="
  418. (
  419. th_status_list.find((item) => item.value == scope.row.th_info) ||
  420. {}
  421. ).label || '--'
  422. "
  423. ></el-tag>
  424. </template>
  425. <template #send_info="{ scope }">
  426. <el-tag
  427. size="mini"
  428. :type="
  429. scope.row.send_info == '3'
  430. ? 'success'
  431. : scope.row.send_info == '2'
  432. ? 'warning'
  433. : 'danger'
  434. "
  435. v-text="
  436. (
  437. send_status_list.find(
  438. (item) => item.value == scope.row.send_info
  439. ) || {}
  440. ).label || '--'
  441. "
  442. ></el-tag>
  443. </template>
  444. <template #payinfo="{ scope }">
  445. <el-tag
  446. size="mini"
  447. :type="
  448. scope.row.payinfo == '3'
  449. ? 'success'
  450. : scope.row.payinfo == '2'
  451. ? 'warning'
  452. : 'danger'
  453. "
  454. v-text="
  455. (
  456. pay_status_list.find((item) => item.value == scope.row.payinfo) ||
  457. {}
  458. ).label || '--'
  459. "
  460. ></el-tag>
  461. </template>
  462. <template #invinfo="{ scope }">
  463. <el-tag
  464. size="mini"
  465. :type="
  466. scope.row.invinfo == '3'
  467. ? 'success'
  468. : scope.row.invinfo == '2'
  469. ? 'warning'
  470. : 'danger'
  471. "
  472. v-text="
  473. (
  474. inv_status_list.find((item) => item.value == scope.row.invinfo) ||
  475. {}
  476. ).label || '--'
  477. "
  478. ></el-tag>
  479. </template>
  480. </ex-table>
  481. <no-auth v-else></no-auth>
  482. <!-- 设置回票信息 -->
  483. <set-edit
  484. :tableData="selection"
  485. :show-model="showModel1"
  486. @refresh="searchList"
  487. @cancel="showModel1 = false"
  488. />
  489. <!-- 审核回票信息 -->
  490. <exam-edit
  491. :tableData="selection"
  492. :show-model="showModel2"
  493. @refresh="searchList"
  494. @cancel="showModel2 = false"
  495. />
  496. </div>
  497. </template>
  498. <script>
  499. import asyncRequest from "@/apis/service/purchase/porder";
  500. import ExTable from "@/components/ExTableNew.vue";
  501. import mixinPage from "@/mixins/elPaginationHandle";
  502. import { switchingTime, formatJson } from "@/utils/publicMethods";
  503. import resToken from "@/mixins/resToken";
  504. import setEdit from "./setEdit";
  505. import { mapGetters } from "vuex";
  506. import examEdit from "./examEdit";
  507. import {
  508. columns,
  509. selectKlist,
  510. options,
  511. th_status_list,
  512. send_status_list,
  513. pay_status_list,
  514. inv_status_list,
  515. tHeader,
  516. filterVal,
  517. } from "./tableVariable";
  518. export default {
  519. name: "porder",
  520. components: {
  521. ExTable,
  522. setEdit,
  523. examEdit,
  524. },
  525. mixins: [mixinPage, resToken],
  526. computed: {
  527. //组件SIZE设置
  528. ...mapGetters(["tablebtnSize", "searchSize", "size"]),
  529. powers() {
  530. let tran =
  531. this.$store.getters.btnList.find(
  532. (item) => item.menu_route == "porder"
  533. ) || {};
  534. if (tran && tran.action && tran.action.length > 0) {
  535. return tran.action;
  536. } else {
  537. return [];
  538. }
  539. },
  540. },
  541. data() {
  542. return {
  543. selectK: "1",
  544. input: "",
  545. //输入框搜索类型
  546. selectKlist: selectKlist,
  547. code: [],
  548. showModel1: false,
  549. showModel2: false,
  550. selectLoading: false,
  551. activeOptions: [],
  552. selection: [],
  553. //回票状态
  554. options: options,
  555. //退货状态
  556. th_status_list: th_status_list,
  557. //发货状态
  558. send_status_list: send_status_list,
  559. //付款状态
  560. pay_status_list: pay_status_list,
  561. //回票状态
  562. inv_status_list: inv_status_list,
  563. // 状态
  564. statusOptions: [
  565. { id: "0", label: "禁用" },
  566. { id: "1", label: "启用" },
  567. ],
  568. pickerOptions: {
  569. // disabledDate是一个函数,参数是当前选中的日期值,这个函数需要返回一个Boolean值,
  570. disabledDate(time) {
  571. let date = new Date().valueOf();
  572. const one = 1000 * 60 * 60 * 24;
  573. date = parseInt(date / one) * one;
  574. return time.getTime() <= date;
  575. },
  576. },
  577. loading: false,
  578. modelId: 0,
  579. parmValue: {
  580. name: "", // 账户
  581. code: "", // code
  582. sequenceNo: "",
  583. inv_company: "",
  584. inv_status: "",
  585. send_status: "",
  586. payinfo: "",
  587. invinfo: "",
  588. goodNo: "",
  589. th_status: "",
  590. page: 1, // 页码
  591. size: 15, // 每页显示条数
  592. },
  593. formValue: {
  594. name: "", // 账户
  595. page: 1, // 页码
  596. size: 100, // 每页显示条数
  597. },
  598. // 表格 - 数据
  599. tableData: [],
  600. // 表格 - 参数
  601. table: {
  602. stripe: true,
  603. border: true,
  604. _defaultHeader_: ["setcol"],
  605. },
  606. // 表格 - 分页
  607. pageInfo: {
  608. size: 15,
  609. curr: 1,
  610. total: 0,
  611. },
  612. // 表格 - 列参数
  613. columns: columns,
  614. };
  615. },
  616. mounted() {
  617. this.searchList();
  618. },
  619. methods: {
  620. async restSearch() {
  621. this.selectK = "1";
  622. this.input = "";
  623. this.code = [];
  624. this.parmValue.code = this.code.join(",");
  625. this.parmValue.sequenceNo = "";
  626. this.parmValue.page = 1;
  627. this.pageInfo.curr = 1;
  628. this.parmValue.inv_company = "";
  629. this.parmValue.inv_status = "";
  630. this.parmValue.goodNo = "";
  631. this.parmValue.send_status = "";
  632. this.parmValue.owner = "";
  633. await this.searchList();
  634. },
  635. async statusConfirm(selection) {
  636. if (selection && selection.length === 0) {
  637. this.$message.error("请选择采购单!");
  638. return;
  639. }
  640. await this.$confirm(`确定要将选中的采购单改为无需对账状态?`, {
  641. confirmButtonText: "确定",
  642. cancelButtonText: "取消",
  643. type: "warning",
  644. })
  645. .then(async () => {
  646. this.loading = true;
  647. let id = "";
  648. selection.forEach((v1, i1) => {
  649. id += i1 === 0 ? v1.id : "," + v1.id;
  650. });
  651. const model = {
  652. id: id,
  653. };
  654. const res = await asyncRequest.paymentunpay(model);
  655. if (res && res.code === 0) {
  656. this.loading = false;
  657. this.$notify.success({
  658. title: "无需对账状态修改成功!",
  659. message: "",
  660. });
  661. await this.searchList();
  662. } else if (res && res.code >= 100 && res.code <= 104) {
  663. await this.logout();
  664. } else {
  665. this.$message.warning(res.message);
  666. }
  667. })
  668. .catch(() => {
  669. console.log("取消");
  670. });
  671. },
  672. async searchList() {
  673. this.loading = true;
  674. this.parmValue.sequenceNo = this.selectK === "1" ? this.input : "";
  675. this.parmValue.inv_company = this.selectK === "2" ? this.input : "";
  676. this.parmValue.owner = this.selectK === "3" ? this.input : "";
  677. this.parmValue.goodNo = this.selectK === "4" ? this.input : "";
  678. const res = await asyncRequest.list(this.parmValue);
  679. if (res && res.code === 0 && res.data) {
  680. this.tableData = res.data.list;
  681. this.pageInfo.total = Number(res.data.count);
  682. this.formatGoodList();
  683. } else if (res && res.code >= 100 && res.code <= 104) {
  684. await this.logout();
  685. } else {
  686. this.tableData = [];
  687. this.pageInfo.total = 0;
  688. }
  689. this.loading = false;
  690. },
  691. async selectChange() {
  692. console.log(this.code);
  693. this.parmValue.code = this.code.join(",");
  694. this.formValue.page = 1;
  695. this.pageInfo.curr = 1;
  696. await this.searchList();
  697. },
  698. setBilling(selection) {
  699. this.selection = [];
  700. if (selection && selection.length === 0) {
  701. this.$message.error("请选择采购单");
  702. return;
  703. }
  704. this.selection = selection;
  705. this.showModel1 = true;
  706. this.showModel2 = false;
  707. console.log(selection);
  708. },
  709. examBilling(selection) {
  710. if (selection && selection.length === 0) {
  711. this.$message.error("请选择采购单");
  712. return;
  713. }
  714. let isok = true;
  715. selection.forEach((v1) => {
  716. if (v1.inv_status !== "1") {
  717. isok = false;
  718. }
  719. });
  720. if (!isok) {
  721. this.$message.error("只有待审核的采购单才能进行审核操作!");
  722. return;
  723. }
  724. this.selection = selection;
  725. console.log(selection);
  726. this.showModel1 = false;
  727. this.showModel2 = true;
  728. },
  729. formatGoodList() {
  730. this.tableData.map((v1) => {
  731. v1.purchasePrice = this.setNum(v1.purchasePrice);
  732. v1.totalPrice = this.setNum(v1.totalPrice);
  733. v1.pay_fee = this.setNum(v1.pay_fee);
  734. v1.wait_fee = this.setNum(v1.wait_fee);
  735. v1.price = this.setNum(v1.price);
  736. v1.nakedPrice = this.setNum(v1.nakedPrice);
  737. v1.markPrice = this.setNum(v1.markPrice);
  738. v1.packPrice = this.setNum(v1.packPrice);
  739. v1.certPrice = this.setNum(v1.certPrice);
  740. v1.openPrice = this.setNum(v1.openPrice);
  741. v1.craftPrice = this.setNum(v1.craftPrice);
  742. v1.postPrice = this.setNum(v1.postPrice);
  743. v1.weight = this.setNum(v1.weight);
  744. v1.diff_fee = this.setNum(v1.diff_fee);
  745. v1.price = this.setNum(v1.price);
  746. v1.inv_open_fee = this.setNum(v1.inv_open_fee);
  747. v1.inv_wait_fee = this.setNum(v1.inv_wait_fee);
  748. return v1;
  749. });
  750. },
  751. setNum(s) {
  752. return s ? parseFloat(s + "").toFixed(2) : "-";
  753. },
  754. async remoteMethod(query) {
  755. this.selectLoading = true;
  756. if (query !== "") {
  757. this.activeOptions = [];
  758. this.formValue.name = query;
  759. const res = await asyncRequest.supplierlist(this.formValue);
  760. if (res && res.code === 0 && res.data && res.data.list) {
  761. this.activeOptions = res.data.list;
  762. } else if (res && res.code >= 100 && res.code <= 104) {
  763. await this.logout();
  764. } else {
  765. this.$message.warning(res.message);
  766. }
  767. } else {
  768. this.activeOptions = [];
  769. }
  770. this.selectLoading = false;
  771. },
  772. setlable(list, type) {
  773. return (list.find((item) => item.value == type) || {}).label || "";
  774. },
  775. /**
  776. * 批量导出
  777. * @param {Array} selection 当前选择项
  778. */
  779. batchExport(selection) {
  780. if (!this.loading) {
  781. if (selection.length == 0) {
  782. this.$message.warning("请至少选择一条数据!");
  783. return;
  784. }
  785. this.loading = true;
  786. let data = [].concat(...selection);
  787. let list = [];
  788. data.forEach((v1) => {
  789. let model = Object.assign({}, v1);
  790. model.send_info = this.setlable(this.send_status_list, v1.send_info);
  791. model.th_info = this.setlable(this.th_status_list, v1.th_info);
  792. model.payinfo = this.setlable(this.pay_status_list, v1.payinfo);
  793. model.invinfo = this.setlable(this.inv_status_list, v1.invinfo);
  794. model.inv_status = this.setlable(this.options, v1.inv_status);
  795. list.push(model);
  796. });
  797. const xlsName = `采购单导出`;
  798. import("@/vendor/Export2Excel").then((excel) => {
  799. const data = formatJson(filterVal, list);
  800. excel.export_json_to_excel({
  801. header: tHeader,
  802. data,
  803. filename: `${xlsName}`,
  804. });
  805. this.$message.success("采购单导出成功!");
  806. setTimeout(() => {
  807. this.loading = false;
  808. }, 500);
  809. });
  810. }
  811. },
  812. },
  813. };
  814. </script>
  815. <style lang="scss" scoped>
  816. .porder {
  817. background: rgba(242, 242, 242, 1);
  818. min-height: 100%;
  819. width: 100%;
  820. height: 100%;
  821. // background-color: $bg;
  822. overflow: hidden;
  823. // position: absolute;
  824. z-index: 2;
  825. background: #fff;
  826. .change {
  827. .title {
  828. border-width: 0px;
  829. width: 100%;
  830. height: 100px;
  831. // display: flex;
  832. font-weight: 400;
  833. font-style: normal;
  834. font-size: 22px;
  835. text-align: left;
  836. padding: 0;
  837. padding: 60px 0 0 100px;
  838. width: 100%;
  839. box-sizing: border-box;
  840. }
  841. }
  842. }
  843. </style>