detail.vue 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434
  1. <template>
  2. <div class="borderless" v-loading="pageLoading">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button
  6. type="danger"
  7. style="border: none;background: none;color: red"
  8. icon="el-icon-arrow-left"
  9. @click="backToList"
  10. :loading="btnLoading"
  11. >返回列表</el-button>
  12. </div>
  13. <div class="add-customer-btn">
  14. <el-button
  15. type="primary"
  16. size="small"
  17. class="el-button--small-yh"
  18. @click.stop="openEdit"
  19. v-if="form.id && disabled"
  20. >编 辑</el-button>
  21. <el-button
  22. type="primary"
  23. size="small"
  24. class="el-button--small-yh"
  25. style="margin-right: 8px;"
  26. @click="dealerSubmit"
  27. :disabled="disabled"
  28. :loading="btnLoading"
  29. v-if="form.id"
  30. >
  31. {{ form.status == 0? '确认订单': form.status == 3? '撤销订单': '' }}
  32. </el-button>
  33. <el-dropdown style="margin-right: 8px;">
  34. <el-button type="warning" size="small">账单处理<i class="el-icon-arrow-down el-icon--right"></i></el-button>
  35. <el-dropdown-menu slot="dropdown">
  36. <el-dropdown-item
  37. @click.native="applySettlement('申请')"
  38. :disabled="disabled">申请货款
  39. </el-dropdown-item>
  40. </el-dropdown-menu>
  41. </el-dropdown>
  42. <el-button
  43. type="success"
  44. :disabled="!form.id"
  45. size="small"
  46. @click="copyDoc"
  47. :loading="btnLoading"
  48. >
  49. 复制单据
  50. </el-button>
  51. <el-button
  52. type="primary"
  53. @click="editCustomer"
  54. size="small"
  55. :loading="btnLoading"
  56. :disabled="disabled"
  57. >保存数据
  58. </el-button>
  59. </div>
  60. </div>
  61. <div class="customer-main">
  62. <containerTitle title="基础信息"/>
  63. <basic-container :showBtn="true">
  64. <avue-form
  65. ref="form"
  66. class="trading-form"
  67. v-model="form"
  68. :option="option"
  69. >
  70. <template slot="corpId">
  71. <crop-select
  72. v-model="form.corpId"
  73. @getCorpData="getCorpData"
  74. corpType="GYS"
  75. :disabled="disabled || confirmDisabled"
  76. ></crop-select>
  77. </template>
  78. <template slot="storageId">
  79. <warehouse-select
  80. v-model="form.storageId"
  81. :configuration="configurationWarehouse"
  82. :disabled="disabled || confirmDisabled"/>
  83. </template>
  84. </avue-form>
  85. </basic-container>
  86. <containerTitle title="商品信息"/>
  87. <basic-container>
  88. <avue-crud
  89. ref="crud"
  90. :data="dataList"
  91. :option="tableOption"
  92. :page.sync="goodPage"
  93. :table-loading="goodLoading"
  94. @current-change="currentChange"
  95. @size-change="sizeChange"
  96. :cell-style="cellStyle"
  97. @saveColumn="saveColumn"
  98. @resetColumn="resetColumn"
  99. >
  100. <template slot="headerSerial" slot-scope="{column}">
  101. <el-button
  102. type="primary"
  103. icon="el-icon-circle-plus-outline"
  104. circle
  105. size="mini"
  106. :disabled="disabled || confirmDisabled"
  107. @click="$refs.crud.rowCellAdd()"></el-button>
  108. </template>
  109. <template slot="menuLeft">
  110. <el-button
  111. type="primary"
  112. icon="el-icon-plus"
  113. size="small"
  114. @click.stop="newDetails"
  115. :disabled="disabled || confirmDisabled"
  116. >录入明细</el-button>
  117. <el-button
  118. type="info"
  119. icon="el-icon-printer"
  120. size="small"
  121. @click.stop="openReport()"
  122. >报表打印</el-button>
  123. <el-button
  124. type="primary"
  125. size="small"
  126. icon="el-icon-download"
  127. @click="downloadHandle"
  128. >下载模板</el-button>
  129. <el-upload
  130. :action="baseURL"
  131. :headers="headers"
  132. :disabled="disabled || confirmDisabled"
  133. :on-progress="uploading"
  134. :show-file-list=false
  135. accept=".xls,.xlsx"
  136. multiple
  137. :on-success="importTemplate"
  138. :on-error="uploadError"
  139. style="float: right"
  140. >
  141. <el-button
  142. type="primary"
  143. size="small"
  144. icon="el-icon-upload"
  145. >导 入</el-button>
  146. </el-upload>
  147. </template>
  148. <template slot="menu" slot-scope="{ row, index }">
  149. <el-button
  150. size="small"
  151. icon="el-icon-edit"
  152. type="text"
  153. @click="rowCell(row, index)"
  154. :disabled="disabled || confirmDisabled"
  155. >{{ row.$cellEdit ? "保存" : "修改" }}</el-button
  156. >
  157. <el-button
  158. size="small"
  159. icon="el-icon-delete"
  160. type="text"
  161. @click="rowDel(row, index)"
  162. :disabled="disabled || confirmDisabled"
  163. >删除</el-button
  164. >
  165. </template>
  166. <template slot="code" slot-scope="{ row, index }">
  167. <span v-if="row.$cellEdit" style="display:flex">
  168. <el-select
  169. v-model="row.code"
  170. placeholder="请选择"
  171. filterable
  172. size="small"
  173. style="width:60%"
  174. @change="codeChange(row, index)"
  175. :disabled="!form.storageId"
  176. >
  177. <el-option
  178. v-for="item in goodsoptions"
  179. :key="item.id"
  180. :label="item.code"
  181. :value="item.code"
  182. >
  183. </el-option>
  184. </el-select>
  185. <el-button
  186. icon="el-icon-search"
  187. size="small"
  188. @click="rePick(row, index)"
  189. ></el-button>
  190. </span>
  191. <span v-else> {{ row.code }}</span>
  192. </template>
  193. <template slot="cname" slot-scope="{ row, index }">
  194. <span v-if="row.$cellEdit" style="display:flex">
  195. <el-select
  196. v-model="row.itemId"
  197. placeholder="请选择"
  198. size="small"
  199. style="width:60%"
  200. filterable
  201. @change="cnameChange(row, index)"
  202. :disabled="!form.lotNo"
  203. >
  204. <el-option
  205. v-for="item in goodsoptions"
  206. :key="item.id"
  207. :label="item.cname"
  208. :value="item.id"
  209. >
  210. </el-option>
  211. </el-select>
  212. <el-button
  213. icon="el-icon-search"
  214. size="small"
  215. @click="rePick(row, index)"
  216. ></el-button>
  217. </span>
  218. <span v-else> {{ row.cname }}</span>
  219. </template>
  220. <template slot="batch" slot-scope="{row, index}">
  221. <span>{{ row.batch == 0? '否': '是' }}</span>
  222. </template>
  223. <template slot="orderQuantity" slot-scope="{ row, index }">
  224. <el-input-number
  225. v-if="row.$cellEdit"
  226. v-model="row.orderQuantity"
  227. size="small"
  228. :controls="false"
  229. :precision="0"
  230. @input="amountChange(row)"
  231. style="width: 100%"
  232. :disabled="!form.lotNo"
  233. />
  234. <span v-else>{{ row.orderQuantity | IntegerFormat }}</span>
  235. </template>
  236. <template slot="price" slot-scope="{ row, index }">
  237. <el-input-number
  238. v-if="row.$cellEdit"
  239. v-model="row.price"
  240. size="small"
  241. :controls="false"
  242. :precision="2"
  243. @input="amountChange(row)"
  244. style="width: 100%"
  245. :disabled="!form.lotNo"
  246. ></el-input-number>
  247. <span v-else>{{ row.price }}</span>
  248. </template>
  249. <!-- 单位-->
  250. <template slot="unit" slot-scope="{ row, index }">
  251. <el-select
  252. v-if="row.$cellEdit"
  253. v-model="row.unit"
  254. size="small"
  255. :disabled="!form.lotNo"
  256. clearable
  257. filterable
  258. >
  259. <el-option
  260. v-for="(item, index) in unitOption"
  261. :key="index"
  262. :label="item.dictValue"
  263. :value="item.dictValue"
  264. />
  265. </el-select>
  266. <span v-else>{{ row.unit }}</span>
  267. </template>
  268. <template slot="amount" slot-scope="{ row, index }">
  269. <span>{{ row.amount | decimalFormat }}</span>
  270. </template>
  271. <template slot="storageQuantity" slot-scope="{ row, index }">
  272. <span>{{ row.storageQuantity | IntegerFormat }}</span>
  273. </template>
  274. <template slot="newJob" slot-scope="{ row, index }">
  275. <span style="color: #1e9fff;cursor: pointer" @click="openHistory(row)">{{ row.newJob }}</span>
  276. </template>
  277. <template slot="remarks" slot-scope="{ row, index }">
  278. <el-input
  279. v-if="row.$cellEdit"
  280. v-model="row.remarks"
  281. size="small"
  282. :disabled="!form.storageId"
  283. />
  284. <span v-else>{{ row.remarks }}</span>
  285. </template>
  286. </avue-crud>
  287. </basic-container>
  288. <containerTitle title="详细信息"/>
  289. <basic-container :showBtn="true">
  290. <avue-form
  291. ref="form1"
  292. class="trading-form"
  293. v-model="form"
  294. :option="detailOption"
  295. ></avue-form>
  296. </basic-container>
  297. <containerTitle title="附件管理"></containerTitle>
  298. <c-upload
  299. :data="uploadData"
  300. deleteUrl="/api/blade-client/corpsbank/update"
  301. :enumerationValue="84"
  302. :disabled="disabled || confirmDisabled"
  303. />
  304. </div>
  305. <el-dialog
  306. title="导入商品"
  307. append-to-body
  308. class="el-dialogDeep"
  309. :visible.sync="dialogVisible"
  310. width="80%"
  311. :close-on-click-modal="false"
  312. :destroy-on-close="true"
  313. :close-on-press-escape="false"
  314. @close="closeGoods"
  315. top="5vh"
  316. v-dialog-drag
  317. >
  318. <span>
  319. <el-row>
  320. <el-col :span="4">
  321. <div>
  322. <el-scrollbar>
  323. <basic-container>
  324. <avue-tree
  325. :option="treeOption"
  326. @node-click="nodeClick"
  327. :style="treeStyle"
  328. />
  329. </basic-container>
  330. </el-scrollbar>
  331. </div>
  332. </el-col>
  333. <el-col :span="20">
  334. <avue-crud
  335. :option="goodsOption"
  336. :table-loading="loading"
  337. :data="goodsList"
  338. ref="goodsCrud"
  339. :search.sync="search"
  340. @search-change="searchChange"
  341. @selection-change="selectionChange"
  342. @row-click="rowClick"
  343. :page.sync="page"
  344. @on-load="onLoad"
  345. @saveColumn="saveGoodsColumn"
  346. @resetColumn="resetGoodsColumn"
  347. :cell-style="cellStyle"
  348. >
  349. <template slot="menuLeft">
  350. <el-tabs v-model="activeName" @tab-click="tabHandle">
  351. <el-tab-pane label="查询结果" name="searchList"></el-tab-pane>
  352. <el-tab-pane label="已选定数据" name="importStaging"></el-tab-pane>
  353. </el-tabs>
  354. </template>
  355. <template slot-scope="scope" slot="menu">
  356. <el-button
  357. type="text"
  358. icon="el-icon-edit"
  359. size="small"
  360. @click.stop="importStagList(scope.row,scope.index)"
  361. v-if="activeName=='searchList'"
  362. :disabled="goodsListSave.findIndex(item => item.id == scope.row.id) !== -1"
  363. >选择
  364. </el-button>
  365. <el-button
  366. type="text"
  367. icon="el-icon-delete"
  368. size="small"
  369. @click.stop="removeStagList(scope.row,scope.index)"
  370. v-else
  371. >移除
  372. </el-button>
  373. </template>
  374. </avue-crud>
  375. </el-col>
  376. </el-row>
  377. </span>
  378. <span slot="footer" class="dialog-footer">
  379. <el-button @click="dialogVisible = false">取 消</el-button>
  380. <el-button
  381. type="primary"
  382. @click="importGoods"
  383. :disabled="selectionList.length == 0 && goodsListSave.length == 0"
  384. >导入</el-button
  385. >
  386. </span>
  387. </el-dialog>
  388. <!-- 账单-->
  389. <el-dialog
  390. append-to-body
  391. title="账单"
  392. class="el-dialogDeep"
  393. :visible.sync="financialAccountDialog"
  394. width="70%"
  395. :close-on-click-modal="false"
  396. :destroy-on-close="true"
  397. :close-on-press-escape="false"
  398. v-dialog-drag
  399. >
  400. <financial-account
  401. :billType="billType"
  402. :billData="{}"
  403. :arrList="applyPaymentList"
  404. :belongCompany="form.belongToCorpId"
  405. :checkData="checkData"
  406. @choceFun="choceFun"
  407. @submit="feeSubmit"
  408. />
  409. </el-dialog>
  410. <!-- 历史记录-->
  411. <view-history
  412. v-if="historyVisible"
  413. ref="history"
  414. :params="historyParams"
  415. @closeDialog="closeDialog"
  416. />
  417. </div>
  418. </template>
  419. <script>
  420. import tableOption from "./config/customerContact.json";
  421. import goodsOption from "./config/commodity.json";
  422. import {getDeptLazyTree,
  423. getGoods,} from "@/api/basicData/customerInquiry";
  424. import {selectGoodsNum} from "@/api/basicData/inventoryAccount"; // 库存查询
  425. import {getUserInfo} from "@/api/system/user"; //登录用户信息
  426. import {dataDetail, removeGoods, typeSave, dealerSubmit, historyPrice, itemDetail} from "@/api/dealer/purchase";
  427. import {
  428. isDiscount,
  429. isPercentage,
  430. micrometerFormat,
  431. IntegerFormat
  432. } from "@/util/validate";
  433. import reportDialog from "@/components/report-dialog/main";
  434. import financialAccount from "../../../components/finance/financialAccount";
  435. import checkSchedule from "@/components/check/checkSchedule";
  436. import billApplication from "@/components/bill/billApplication";
  437. import { customerList as feeList } from "@/api/basicData/basicFeesDesc";
  438. import {getDetail} from "@/api/basicData/inventoryAccount";
  439. import { getToken } from "@/util/auth";
  440. import { getCurrentDate } from "@/util/date";
  441. import viewHistory from '../componet/history';
  442. import { contrastObj, contrastList } from "@/util/contrastData";
  443. export default {
  444. name: "detail",
  445. props: {
  446. detailData: {
  447. type: Object
  448. }
  449. },
  450. components: {
  451. reportDialog,
  452. billApplication,
  453. financialAccount,
  454. checkSchedule,
  455. viewHistory,
  456. },
  457. data() {
  458. return {
  459. pageLoading: false,
  460. btnLoading: false,
  461. disabled: false,
  462. confirmDisabled: false, // 确认禁用
  463. form: {},
  464. option: {
  465. menuBtn: false,
  466. labelWidth: 100,
  467. column: [
  468. {
  469. label: "供应商",
  470. prop: "corpId",
  471. rules: [
  472. {
  473. required: true,
  474. message: " ",
  475. trigger: "change"
  476. }
  477. ],
  478. span: 16,
  479. slot: true,
  480. },
  481. {
  482. label: "业务时间",
  483. prop: "businesDate",
  484. span: 8,
  485. type: "date",
  486. format: "yyyy-MM-dd",
  487. valueFormat: "yyyy-MM-dd 00:00:00",
  488. rules: [
  489. {
  490. required: true,
  491. message: "",
  492. trigger: "blur"
  493. }
  494. ]
  495. },
  496. {
  497. label: "批次号",
  498. prop: "lotNo",
  499. rules: [
  500. {
  501. required: true,
  502. message: " ",
  503. trigger: "blur"
  504. }
  505. ],
  506. span: 8,
  507. slot: true
  508. },
  509. {
  510. label: "收货仓库",
  511. prop: "storageId",
  512. span: 8,
  513. rules: [
  514. {
  515. required: true,
  516. message: " ",
  517. trigger: "change"
  518. }
  519. ],
  520. },
  521. {
  522. label: "电话",
  523. prop: "corpTel",
  524. span: 8
  525. },
  526. {
  527. label: "地址",
  528. prop: "arrivalAddress",
  529. span: 8
  530. },
  531. {
  532. label: "备注",
  533. prop: "orderRemark",
  534. type: "textarea",
  535. minRows: 2,
  536. span: 24
  537. },
  538. ],
  539. },
  540. detailOption: {
  541. menuBtn: false,
  542. labelWidth: 100,
  543. column: [
  544. {
  545. label: "系统号",
  546. prop: "sysNo",
  547. span: 8,
  548. disabled: true
  549. },
  550. {
  551. label: "打印时间",
  552. prop: "printTime",
  553. span: 8,
  554. disabled: true
  555. },
  556. {
  557. label: "打印次数",
  558. prop: "printNumber",
  559. span: 8,
  560. disabled: true
  561. },
  562. {
  563. label: "客户欠款",
  564. prop: "corpDebt",
  565. span: 8,
  566. disabled: true
  567. },
  568. {
  569. label: "总数量",
  570. prop: "orderQuantity",
  571. span: 8,
  572. disabled: true
  573. },
  574. {
  575. label: "应付金额",
  576. prop: "debitAmount",
  577. span: 8,
  578. disabled: true
  579. },
  580. {
  581. label: "总金额",
  582. prop: "amount",
  583. span: 8,
  584. disabled: true
  585. },
  586. {
  587. label: "制单人",
  588. prop: "createUserName",
  589. span: 8,
  590. disabled: true,
  591. },
  592. ]
  593. },
  594. // 仓库配置
  595. configurationWarehouse: {
  596. multipleChoices: false,
  597. multiple: false,
  598. collapseTags: false,
  599. placeholder: "请点击右边按钮选择",
  600. dicData: [],
  601. },
  602. dataList: [],
  603. tableOption: {},
  604. dialogVisible: false,
  605. selectionList: [],
  606. treeDeptId: null,
  607. reData: null,
  608. treeOption: {
  609. nodeKey: "id",
  610. lazy: true,
  611. treeLoad: function(node, resolve) {
  612. const parentId = node.level === 0 ? 0 : node.data.id;
  613. getDeptLazyTree(parentId).then(res => {
  614. resolve(
  615. res.data.data.map(item => {
  616. return {
  617. ...item,
  618. leaf: !item.hasChildren
  619. };
  620. })
  621. );
  622. });
  623. },
  624. addBtn: false,
  625. menu: false,
  626. size: "small",
  627. props: {
  628. label: "title",
  629. value: "value",
  630. children: "children"
  631. }
  632. },
  633. page: {
  634. pageSize: 10,
  635. currentPage: 1,
  636. total: 0
  637. },
  638. search: {},
  639. goodsList: [],
  640. loading: false,
  641. goodsOption: {},
  642. treeStyle: "height:" + (window.innerHeight - 315) + "px",
  643. goodsoptions: [],
  644. uploadData: [],
  645. goodData: [], // 存储所有商品信息
  646. activeName: 'searchList',
  647. // 商品列表数据合计
  648. goodsListShow: [],
  649. // 商品列表暂存
  650. goodsListSave: [],
  651. pageList: {
  652. pageSize: 10,
  653. currentPage: 1,
  654. total: 0
  655. },
  656. applyPaymentList: [],
  657. billType:"收费", //账单类型
  658. billData:{}, //账单需要数据
  659. checkData:{
  660. url:"/financialManagement/paymentRequest/index",
  661. pageStatus:"this.$store.getters.pqStatus",
  662. pageLabel:"付费申请",
  663. checkType: 'ffsq'
  664. },
  665. applySettlementDialog:false,//生成账单组件
  666. financialAccountDialog:false,
  667. feesOption: [],
  668. unitOption: [],
  669. baseURL: '/api/blade-purchase-sales/orderitems/importDealerOrder',
  670. headers: { "Blade-Auth": 'Bearer ' + getToken()},
  671. historyVisible: false,
  672. historyParams: {},
  673. goodPage: {
  674. pageSize: 10,
  675. currentPage: 1,
  676. total: 0
  677. },
  678. goodLoading: false,
  679. oldForm: {},
  680. oldDataList: [],
  681. oldUploadData: [],
  682. }
  683. },
  684. async created() {
  685. this.tableOption = await this.getColumnData(
  686. this.getColumnName(82),
  687. tableOption
  688. );
  689. this.goodsOption = await this.getColumnData(
  690. this.getColumnName(83),
  691. goodsOption
  692. );
  693. this.getWorkDicts('unit').then(res => {
  694. this.unitOption = res.data.data;
  695. })
  696. getGoods(1, 10).then(res => {
  697. if (res.data.data.total > 0) {
  698. this.goodsoptions = res.data.data.records;
  699. if (Math.ceil(res.data.data.total / 10) > 1) {
  700. for (let i = 2; i <= Math.ceil(res.data.data.total / 10); i++) {
  701. getGoods(i, 10).then(e => {
  702. this.goodsoptions = this.goodsoptions.concat(e.data.data.records);
  703. });
  704. }
  705. }
  706. }
  707. });
  708. getUserInfo().then(res => {
  709. this.$set(this.form, 'createUserName', res.data.data.realName)
  710. this.$set(this.form, 'createUser', res.data.data.id)
  711. })
  712. feeList().then(res => {
  713. this.feesOption = res.data.data.records
  714. });
  715. this.$set(this.form, 'businesDate', getCurrentDate());
  716. this.$set(this.form, 'status', 0);
  717. if (this.detailData.query) {
  718. this.disabled = true;
  719. this.option.column.map(e => {
  720. this.$set(e, 'disabled', true)
  721. })
  722. this.queryData(this.detailData.id);
  723. } else {
  724. this.dataList = [
  725. {
  726. code: null,
  727. cname: null,
  728. typeno: null,
  729. brandItem: null,
  730. specsOne: null,
  731. specsTwo: null,
  732. unit: null,
  733. storageQuantity: 0,
  734. orderQuantity: 0,
  735. size: null,
  736. price: 0,
  737. amount: 0,
  738. $cellEdit: true
  739. }
  740. ]
  741. }
  742. },
  743. filters: {
  744. IntegerFormat(num) {
  745. return IntegerFormat(num);
  746. },
  747. decimalFormat(num) {
  748. return num ? Number(num).toFixed(2) : "0.00";
  749. }
  750. },
  751. methods: {
  752. // 查询
  753. queryData(id) {
  754. this.pageLoading = true;
  755. dataDetail(id).then(res => {
  756. this.form = res.data.data;
  757. this.getItemDetail();
  758. this.form.amount = Number(this.form.amount).toFixed(2);
  759. this.confirmDisabled = this.form.status == 3? true: false;
  760. if (this.confirmDisabled) {
  761. // this.option.column.map(e => {
  762. // this.$set(e, 'disabled', true)
  763. // })
  764. }
  765. this.goodData = this.form.orderItemsList? this.form.orderItemsList: [];
  766. this.uploadData = this.form.orderFilesList? this.form.orderFilesList: [];
  767. delete this.form.orderItemsList;
  768. delete this.form.orderFilesList;
  769. this.oldForm = {...this.form};
  770. // this.oldDataList = [...this.dataList];
  771. this.oldUploadData = [...this.uploadData];
  772. }).finally(() => {
  773. this.pageLoading = false;
  774. })
  775. },
  776. cellStyle() {
  777. return "padding:0;height:40px;";
  778. },
  779. openEdit() {
  780. this.disabled = false;
  781. this.option.column.map(e => {
  782. if (this.confirmDisabled) {
  783. if (e.prop == 'businesDate' || e.prop == 'lotNo') {
  784. this.$set(e, 'disabled', true)
  785. } else {
  786. this.$set(e, 'disabled', false)
  787. }
  788. } else {
  789. this.$set(e, 'disabled', false)
  790. }
  791. })
  792. },
  793. copyDoc() {
  794. this.$emit("copyOrder", this.form.id);
  795. },
  796. getCorpData(row) {},
  797. //修改提交触发
  798. editCustomer(status) {
  799. this.$refs["form"].validate((valid, done) => {
  800. done();
  801. if (valid) {
  802. // 总金额计算
  803. let amount = 0;
  804. this.dataList.forEach(item => {
  805. amount = Number(amount) + Number(item.amount)
  806. })
  807. this.$set(this.form, 'debitAmount', amount.toFixed(2));
  808. this.$set(this.form, 'amount', amount.toFixed(2));
  809. this.form.billType = 'CG';
  810. this.$set(this.form, 'itemsVOList', this.dataList);
  811. this.$set(this.form, 'orderFilesList', this.uploadData);
  812. this.btnLoading = true;
  813. typeSave(this.form).then(res => {
  814. this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
  815. this.queryData(res.data.data);
  816. }).finally(() => {
  817. this.btnLoading = false;
  818. })
  819. }
  820. })
  821. },
  822. //返回列表
  823. backToList() {
  824. this.$emit("goBack");
  825. },
  826. async saveColumn() {
  827. const inSave = await this.saveColumnData(
  828. this.getColumnName(82),
  829. this.tableOption
  830. );
  831. if (inSave) {
  832. this.$message.success("保存成功");
  833. //关闭窗口
  834. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  835. this.$nextTick(() => {
  836. this.$refs.crud.doLayout()
  837. })
  838. }
  839. },
  840. async resetColumn() {
  841. this.tableOption = tableOption;
  842. const inSave = await this.delColumnData(
  843. this.getColumnName(82),
  844. tableOption
  845. );
  846. if (inSave) {
  847. this.$nextTick(() => {
  848. this.$refs.crud.doLayout()
  849. })
  850. this.$message.success("重置成功");
  851. //关闭窗口
  852. setTimeout(() => {
  853. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  854. }, 1000);
  855. }
  856. },
  857. //商品明细导入
  858. newDetails() {
  859. this.$refs["form"].validate((valid) => {
  860. if (valid) {
  861. this.dialogVisible = !this.dialogVisible;
  862. }
  863. })
  864. // if (!this.form.corpId) {
  865. // return this.$message.error("请选择客户名称");
  866. // }
  867. },
  868. importGoods() {
  869. let form = {};
  870. if (this.reData) {
  871. if (this.selectionList.length != 1) {
  872. return this.$message.error("重新选择的时候只能选择一条数据");
  873. } else {
  874. this.selectionList.forEach(e => {
  875. this.dataList.forEach(async (item, index) => {
  876. if (index == this.reData.index) {
  877. let historyData = await this.getHistoryData(e, 1); // 获得最新数据
  878. if (historyData.length > 0) {
  879. e.newJob = historyData[0].price;
  880. e.newDate = historyData[0].businesDate;
  881. } else {
  882. e.newJob = null;
  883. e.newDate = null;
  884. }
  885. form = await this.getStockInfo({
  886. tradeType: 'JXS',
  887. goodsId: e.id,
  888. storageId: this.form.storageId,
  889. lotNo: e.batch == 1? this.form.lotNo: null
  890. })
  891. item.storageQuantity = form.stock;
  892. item.purchaseAmount = form.purchaseAmount;
  893. item.itemId = e.id;
  894. item.code = e.code;
  895. item.cname = e.cname;
  896. item.corpId = e.corpId;
  897. item.corpName = e.corpName;
  898. item.brandItem = e.brandItem;
  899. item.specsOne = e.specsOne;
  900. item.specsTwo = e.specsTwo;
  901. item.typeno = e.typeno;
  902. item.unit = e.unit;
  903. item.size = e.size;
  904. item.lotNo = e.batch == 1? this.form.lotNo: null;
  905. item.priceCategory = e.goodsTypeName;
  906. item.newJob = e.newJob;
  907. item.newDate = e.newDate;
  908. item.$cellEdit = true;
  909. }
  910. });
  911. });
  912. }
  913. } else {
  914. if (this.goodsListSave.length > 0) { // 暂存的有数据
  915. this.goodsListSave.forEach(async e => {
  916. let historyData = await this.getHistoryData(e, 1); // 获得最新数据
  917. if (historyData.length > 0) {
  918. e.newJob = historyData[0].price;
  919. e.newDate = historyData[0].businesDate;
  920. } else {
  921. e.newJob = null;
  922. e.newDate = null;
  923. }
  924. form = await this.getStockInfo({
  925. tradeType: 'JXS',
  926. goodsId: e.id,
  927. storageId: this.form.storageId,
  928. lotNo: e.batch == 1? this.form.lotNo: null
  929. })
  930. e.storageQuantity = form.stock;
  931. e.purchaseAmount = form.purchaseAmount;
  932. this.dataList.push({
  933. itemId: e.id,
  934. code: e.code,
  935. cname: e.cname,
  936. brandItem: e.brandItem,
  937. specsOne: e.specsOne,
  938. specsTwo: e.specsTwo,
  939. typeno: e.typeno,
  940. corpId: e.corpId,
  941. corpName: e.corpName,
  942. unit: e.unit,
  943. size: e.size,
  944. price: 0,
  945. amount: 0,
  946. orderQuantity: 0,
  947. storageQuantity: e.storageQuantity,
  948. purchaseAmount: e.purchaseAmount,
  949. newJob: e.newJob,
  950. newDate: e.newDate,
  951. lotNo: e.batch == 1? this.form.lotNo: null,
  952. $cellEdit: true
  953. });
  954. });
  955. } else {
  956. this.selectionList.forEach(async e => {
  957. let historyData = await this.getHistoryData(e, 1); // 获得最新数据
  958. if (historyData.length > 0) {
  959. e.newJob = historyData[0].price;
  960. e.newDate = historyData[0].businesDate;
  961. } else {
  962. e.newJob = null;
  963. e.newDate = null;
  964. }
  965. form = await this.getStockInfo({
  966. tradeType: 'JXS',
  967. goodsId: e.id,
  968. storageId: this.form.storageId,
  969. lotNo: e.batch == 1? this.form.lotNo: null
  970. })
  971. e.storageQuantity = form.stock;
  972. e.purchaseAmount = form.purchaseAmount;
  973. this.dataList.push({
  974. itemId: e.id,
  975. code: e.code,
  976. cname: e.cname,
  977. brandItem: e.brandItem,
  978. specsOne: e.specsOne,
  979. specsTwo: e.specsTwo,
  980. typeno: e.typeno,
  981. corpId: e.corpId,
  982. corpName: e.corpName,
  983. unit: e.unit,
  984. size: e.size,
  985. price: 0,
  986. amount: 0,
  987. orderQuantity: 0,
  988. storageQuantity: e.storageQuantity,
  989. purchaseAmount: e.purchaseAmount,
  990. newJob: e.newJob,
  991. newDate: e.newDate,
  992. lotNo: e.batch == 1? this.form.lotNo: null,
  993. $cellEdit: true
  994. });
  995. });
  996. }
  997. }
  998. this.dialogVisible = false;
  999. },
  1000. closeGoods() {
  1001. this.selectionList = [];
  1002. this.treeDeptId = "";
  1003. this.reData = null;
  1004. this.activeName = 'searchList';
  1005. this.goodsListSave = [];
  1006. },
  1007. nodeClick(data) {
  1008. this.treeDeptId = data.id;
  1009. this.page.currentPage = 1;
  1010. this.onLoad(this.page);
  1011. },
  1012. //费用查询
  1013. onLoad(page, params = {}) {
  1014. let obj = this.deepClone(Object.assign(params, this.search));
  1015. this.loading = true;
  1016. getGoods(page.currentPage, page.pageSize, this.treeDeptId, obj)
  1017. .then(res => {
  1018. const data = res.data.data;
  1019. this.page.total = data.total;
  1020. this.goodsList = data.records;
  1021. if (this.page.total) {
  1022. this.goodsOption.height = window.innerHeight - 350;
  1023. }
  1024. })
  1025. .finally(() => {
  1026. this.loading = false;
  1027. });
  1028. },
  1029. searchChange(params, done) {
  1030. this.search = this.deepClone(params);
  1031. this.onLoad(this.page, params);
  1032. done();
  1033. },
  1034. selectionChange(list) {
  1035. this.selectionList = list;
  1036. },
  1037. rowClick(row) {
  1038. this.$refs.goodsCrud.toggleSelection([this.goodsList[row.$index]]);
  1039. },
  1040. async saveGoodsColumn() {
  1041. const inSave = await this.saveColumnData(
  1042. this.getColumnName(83),
  1043. this.goodsOption
  1044. );
  1045. if (inSave) {
  1046. this.$message.success("保存成功");
  1047. //关闭窗口
  1048. this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
  1049. this.$nextTick(() => {
  1050. this.$refs.goodsCrud.doLayout()
  1051. })
  1052. }
  1053. },
  1054. async resetGoodsColumn() {
  1055. this.goodsOption = goodsOption;
  1056. const inSave = await this.delColumnData(
  1057. this.getColumnName(83),
  1058. goodsOption
  1059. );
  1060. if (inSave) {
  1061. this.$nextTick(() => {
  1062. this.$refs.goodsCrud.doLayout()
  1063. })
  1064. this.$message.success("重置成功");
  1065. //关闭窗口
  1066. setTimeout(() => {
  1067. this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
  1068. }, 1000);
  1069. }
  1070. },
  1071. openReport() {},
  1072. rowCell(row, index) {
  1073. if (row.$cellEdit == true) {
  1074. this.$set(row, "$cellEdit", false);
  1075. } else {
  1076. this.$set(row, "$cellEdit", true);
  1077. }
  1078. },
  1079. rowDel(row, index) {
  1080. this.$confirm("确定删除数据?", {
  1081. confirmButtonText: "确定",
  1082. cancelButtonText: "取消",
  1083. type: "warning"
  1084. }).then(() => {
  1085. if (row.id) {
  1086. removeGoods(row.id).then(res => {
  1087. this.$message({
  1088. type: 'success',
  1089. message: '删除成功!'
  1090. })
  1091. this.dataList.splice(row.$index, 1);
  1092. })
  1093. } else {
  1094. this.$message({
  1095. type: "success",
  1096. message: "删除成功!"
  1097. });
  1098. this.dataList.splice(row.$index, 1);
  1099. }
  1100. });
  1101. },
  1102. codeChange(row) {
  1103. let form = {};
  1104. this.goodsoptions.forEach(async e => {
  1105. if (e.code == row.code) {
  1106. let historyData = await this.getHistoryData(e, 1); // 获得最新数据
  1107. if (historyData.length > 0) {
  1108. e.newJob = historyData[0].price;
  1109. e.newDate = historyData[0].businesDate;
  1110. } else {
  1111. e.newJob = null;
  1112. e.newDate = null;
  1113. }
  1114. form = await this.getStockInfo({
  1115. tradeType: 'JXS',
  1116. goodsId: e.id,
  1117. storageId: this.form.storageId,
  1118. lotNo: e.batch == 1? this.form.lotNo: null
  1119. })
  1120. e.storageQuantity = form.stock;
  1121. e.purchaseAmount = form.purchaseAmount;
  1122. row.itemId = e.id;
  1123. row.cname = e.cname;
  1124. row.code = e.code;
  1125. row.corpId = e.corpId;
  1126. row.corpName = e.corpName;
  1127. row.brandItem = e.brandItem;
  1128. row.specsOne = e.specsOne;
  1129. row.specsTwo = e.specsTwo;
  1130. row.typeno = e.typeno;
  1131. row.unit = e.unit;
  1132. row.size = e.size;
  1133. row.priceCategory = e.goodsTypeName;
  1134. row.storageQuantity = e.storageQuantity;
  1135. row.purchaseAmount = e.purchaseAmount;
  1136. row.lotNo = e.batch == 1? this.form.lotNo: null;
  1137. row.newJob = e.newJob;
  1138. row.newDate = e.newDate;
  1139. // row.amount = 0;
  1140. }
  1141. });
  1142. },
  1143. cnameChange(row) {
  1144. let form = {};
  1145. this.goodsoptions.forEach(async e => {
  1146. if (e.id == row.itemId) {
  1147. let historyData = await this.getHistoryData(e, 1); // 获得最新数据
  1148. if (historyData.length > 0) {
  1149. e.newJob = historyData[0].price;
  1150. e.newDate = historyData[0].businesDate;
  1151. } else {
  1152. e.newJob = null;
  1153. e.newDate = null;
  1154. }
  1155. form = await this.getStockInfo({
  1156. tradeType: 'JXS',
  1157. goodsId: e.id,
  1158. storageId: this.form.storageId,
  1159. lotNo: e.batch == 1? this.form.lotNo: null
  1160. })
  1161. e.storageQuantity = form.stock;
  1162. e.purchaseAmount = form.purchaseAmount;
  1163. row.cname = e.cname;
  1164. row.code = e.code;
  1165. row.corpId = e.corpId;
  1166. row.corpName = e.corpName;
  1167. row.brandItem = e.brandItem;
  1168. row.specsOne = e.specsOne;
  1169. row.specsTwo = e.specsTwo;
  1170. row.typeno = e.typeno;
  1171. row.unit = e.unit;
  1172. row.size = e.size;
  1173. row.priceCategory = e.goodsTypeName;
  1174. row.storageQuantity = e.storageQuantity;
  1175. row.purchaseAmount = e.purchaseAmount;
  1176. row.lotNo = e.batch == 1? this.form.lotNo: null;
  1177. row.newJob = e.newJob;
  1178. row.newDate = e.newDate;
  1179. // row.amount = 0;
  1180. }
  1181. });
  1182. },
  1183. rePick(row, index) {
  1184. this.reData = {
  1185. ...row,
  1186. index: index
  1187. };
  1188. this.newDetails();
  1189. },
  1190. // 商品信息价格计算
  1191. amountChange(row) {
  1192. if (!row.orderQuantity) {
  1193. row.orderQuantity = 0;
  1194. }
  1195. if (!row.price) {
  1196. row.price = 0;
  1197. }
  1198. row.amount = Number(row.price) * Number(row.orderQuantity)
  1199. },
  1200. // 标签页切换
  1201. tabHandle(data) {
  1202. if (data.name == 'searchList') {
  1203. this.goodsListShow = this.goodsList;
  1204. this.page.total = this.pageList.total
  1205. } else if (data.name == 'importStaging') {
  1206. this.goodsListShow = this.goodsListSave;
  1207. this.page.total = 0
  1208. }
  1209. },
  1210. removeStagList(row, index) {
  1211. this.goodsListSave.splice(row.$index, 1)
  1212. },
  1213. importStagList(row, index) {
  1214. this.goodsListSave.push(row);
  1215. },
  1216. // 生成结算
  1217. applySettlement(type) {
  1218. this.beforeBillData(true,type)
  1219. this.financialAccountDialog = true;
  1220. },
  1221. //生成账单 拿到主表信息
  1222. beforeBillData(bool,type) {
  1223. this.billType = type;
  1224. this.applyPaymentList = [];
  1225. this.goodData.map(e => {
  1226. if (e.submitPay != 1) {
  1227. const form = {
  1228. srcOrderno:this.form.orderNo,
  1229. srcParentId: this.form.id,
  1230. itemType:"采购",
  1231. corpsName:this.form.corpsName,
  1232. corpId:this.form.corpId,
  1233. currency: 'CNY',
  1234. exchangeRate: '1',
  1235. taxRate: '0',
  1236. accDate: this.form.businesDate,
  1237. srcType: 1,
  1238. // chargeMember: this.form.chargeMember,
  1239. parentId: this.form.id,
  1240. tradeType: 'JXS',
  1241. optionType: 'JXS',
  1242. amount: e.amount,
  1243. costType: this.feesOption.find(item => item.cname == '货款')? this.feesOption.find(item => item.cname == '货款').id: null,
  1244. srcFeesId: e.id,
  1245. goodName: e.cname,
  1246. price: e.price,
  1247. quantity: e.orderQuantity,
  1248. unit:e.unit,
  1249. }
  1250. this.applyPaymentList.push(form);
  1251. }
  1252. })
  1253. },
  1254. //关闭账单
  1255. choceFun(){
  1256. this.financialAccountDialog = false
  1257. },
  1258. feeSubmit() {
  1259. this.queryData(this.form.id);
  1260. },
  1261. // 获得库存信息
  1262. async getStockInfo(data) {
  1263. //tradeType JXS
  1264. //goodsId
  1265. //storageId
  1266. //lotNo 批次号
  1267. let form = {};
  1268. await getDetail(data).then(res => {
  1269. const a = res.data.data? res.data.data: {
  1270. stock: 0,
  1271. balanceAmount: 0,
  1272. balanceQuantity: 0,
  1273. };
  1274. this.$set(form, 'purchaseAmount', a.balanceQuantity == 0? 0: (Number(a.balanceAmount) / Number(a.balanceQuantity)).toFixed(2));
  1275. this.$set(form, 'stock', a.balanceQuantity);
  1276. })
  1277. return form;
  1278. },
  1279. // 确认或者取消订单
  1280. dealerSubmit() {
  1281. if (this.verification()) {
  1282. let dealer;
  1283. if (this.form.status == 0) {
  1284. dealer = 1;
  1285. } else if (this.form.status == 3) {
  1286. dealer = 2;
  1287. }
  1288. this.btnLoading = true;
  1289. dealerSubmit({
  1290. id: this.form.id,
  1291. dealer
  1292. }).then(res => {
  1293. if (res.data.code == 200) {
  1294. this.$message.success('操作成功')
  1295. this.queryData(this.form.id)
  1296. } else {
  1297. this.$message.error(res.data.msg)
  1298. }
  1299. }).finally(() => {
  1300. this.btnLoading = false;
  1301. })
  1302. }
  1303. },
  1304. // 下载模板
  1305. downloadHandle() {
  1306. this.$confirm('是否下载模板文件?', '提示', {
  1307. confirmButtonText: '确定',
  1308. cancelButtonText: '取消',
  1309. type: 'warning'
  1310. }).then(() => {
  1311. window.open(
  1312. `/api/blade-purchase-sales/orderitems/exportDealerOrder?${
  1313. this.website.tokenHeader
  1314. }=${getToken()}`
  1315. );
  1316. }).catch(() => {
  1317. this.$message({
  1318. type: 'info',
  1319. message: '已取消'
  1320. });
  1321. })
  1322. },
  1323. //文件上传时
  1324. uploading(event, file, fileList) {
  1325. this.openFullScreen(false, '文件正在解析中');
  1326. },
  1327. importTemplate(res, file) {
  1328. this.openFullScreen(true)
  1329. res.data.forEach(item => {
  1330. })
  1331. this.dataList = this.dataList.concat(res.data)
  1332. },
  1333. uploadError(err, file, fileList) {
  1334. this.openFullScreen(true)
  1335. this.$message.error(JSON.parse(err.message).msg)
  1336. },
  1337. //遮罩层
  1338. openFullScreen(res, text) {
  1339. const loading = this.$loading({
  1340. lock: true,
  1341. text: text,
  1342. spinner: 'el-icon-loading',
  1343. background: 'rgba(0, 0, 0, 0.7)'
  1344. });
  1345. if (res === true) loading.close();
  1346. },
  1347. // 获得历史数据
  1348. async getHistoryData(row, typeId = null) {
  1349. let data;
  1350. const params = {
  1351. typeId,
  1352. tradeType: 'JXS',
  1353. billType: 'CG',
  1354. itemId: row.id
  1355. }
  1356. await historyPrice(params).then(res => {
  1357. data = res.data.data? res.data.data: [];
  1358. })
  1359. return data;
  1360. },
  1361. openHistory(row) {
  1362. this.historyParams = {
  1363. tradeType: 'JXS',
  1364. billType: 'CG',
  1365. itemId: row.itemId
  1366. }
  1367. this.historyVisible = true;
  1368. this.$nextTick(() => {
  1369. this.$refs.history.init();
  1370. })
  1371. },
  1372. closeDialog() {
  1373. this.historyVisible = false;
  1374. },
  1375. // 商品明细分页处理
  1376. currentChange(val) {
  1377. this.goodPage.currentPage = val;
  1378. this.getItemDetail();
  1379. },
  1380. sizeChange(val) {
  1381. this.goodPage.currentPage = 1;
  1382. this.goodPage.pageSize = val;
  1383. this.getItemDetail();
  1384. },
  1385. getItemDetail() {
  1386. const data = {
  1387. pid: this.form.id,
  1388. };
  1389. this.goodLoading = true;
  1390. itemDetail(this.goodPage.currentPage, this.goodPage.pageSize, data).then(res => {
  1391. this.dataList = res.data.data.records;
  1392. this.goodPage.total = res.data.data.total;
  1393. this.oldDataList = [...this.dataList];
  1394. }).finally(() => {
  1395. this.goodLoading = false;
  1396. })
  1397. },
  1398. // 验证新旧值对比
  1399. verification() {
  1400. console.log(contrastList(this.dataList, this.oldDataList))
  1401. if (contrastObj(this.form, this.oldForm) ||
  1402. contrastList(this.dataList, this.oldDataList) ||
  1403. contrastList(this.uploadData, this.oldUploadData)) {
  1404. this.$confirm("数据发生变化未有提交记录, 是否提交?", "提示", {
  1405. confirmButtonText: "确定",
  1406. cancelButtonText: "取消",
  1407. type: "warning"
  1408. }).then(() => {
  1409. this.editCustomer();
  1410. }).catch(() => {
  1411. return false; //取消改动数据
  1412. })
  1413. } else {
  1414. return true;
  1415. }
  1416. },
  1417. },
  1418. }
  1419. </script>
  1420. <style lang="scss" scoped>
  1421. .trading-form ::v-deep .el-form-item {
  1422. margin-bottom: 8px !important;
  1423. }
  1424. ::v-deep .el-form-item__error {
  1425. display: none !important;
  1426. }
  1427. ::v-deep .select-component {
  1428. display: flex !important;
  1429. }
  1430. </style>