detailsPage.vue 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350
  1. <template>
  2. <div class="borderless">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
  6. @click="backToList">返回列表
  7. </el-button>
  8. </div>
  9. <div v-if="!auditDisabled" class="upper_right_button">
  10. <el-button type="primary"
  11. size="small"
  12. v-if="viewDisabled"
  13. class="el-button--small-yh "
  14. :loading="buttonLoading"
  15. @click.stop="openEdit()">编辑
  16. </el-button>
  17. <el-dropdown style="padding: 0 6px;line-height: 0">
  18. <el-button
  19. type="primary"
  20. size="small"
  21. :loading="buttonLoading"
  22. :disabled="!form.id || viewDisabled"
  23. >
  24. 审核处理<i class="el-icon-arrow-down el-icon--right"></i>
  25. </el-button>
  26. <el-dropdown-menu slot="dropdown">
  27. <el-dropdown-item :loading="buttonLoading" @click.native="auditCheck">审核数据</el-dropdown-item>
  28. <el-dropdown-item v-if="false" @click.native="">审核进度</el-dropdown-item>
  29. <el-dropdown-item v-if="false">撤销审核</el-dropdown-item>
  30. </el-dropdown-menu>
  31. </el-dropdown>
  32. <el-dropdown style="padding: 0 6px;line-height: 0" v-if="false">
  33. <el-button
  34. type="warning"
  35. :loading="buttonLoading"
  36. :disabled="!form.id || viewDisabled"
  37. size="small"
  38. >
  39. 账单处理<i class="el-icon-arrow-down el-icon--right"></i>
  40. </el-button>
  41. <el-dropdown-menu slot="dropdown">
  42. <el-dropdown-item
  43. @click.native="applySettlement('收费')">生成账单
  44. </el-dropdown-item>
  45. <el-dropdown-item
  46. @click.native="applySettlement('申请')">申请退款
  47. </el-dropdown-item>
  48. <el-dropdown-item
  49. @click.native="openApplicationDialog">查看账单
  50. </el-dropdown-item>
  51. </el-dropdown-menu>
  52. </el-dropdown>
  53. <el-dropdown style="padding: 0 6px;line-height: 0">
  54. <el-button
  55. type="success"
  56. :loading="buttonLoading"
  57. :disabled="!form.id || viewDisabled"
  58. size="small"
  59. >
  60. 业务处理<i class="el-icon-arrow-down el-icon--right"></i>
  61. </el-button>
  62. <el-dropdown-menu slot="dropdown">
  63. <el-dropdown-item
  64. @click.native="createData()">创建单据
  65. </el-dropdown-item>
  66. <el-dropdown-item
  67. @click.native="copyData()">复制单据
  68. </el-dropdown-item>
  69. </el-dropdown-menu>
  70. </el-dropdown>
  71. <div>
  72. <el-button
  73. class="el-button--small-yh"
  74. type="primary"
  75. size="small"
  76. :disabled="disabled || viewDisabled"
  77. :loading="buttonLoading"
  78. @click="editCustomer"
  79. >保存数据
  80. </el-button>
  81. </div>
  82. </div>
  83. <div v-if="auditDisabled" class="upper_right_button">
  84. <el-button type="primary"
  85. size="small"
  86. class="el-button--small-yh"
  87. :loading="buttonLoading"
  88. @click.stop="checkScheduleDialog = true,checkId=detailData.check.srcBillId">
  89. 审批流程
  90. </el-button>
  91. <el-button type="primary"
  92. size="small"
  93. class="el-button--small-yh"
  94. :loading="buttonLoading"
  95. :disabled="buttonDisabled"
  96. @click.stop="checkDialog = true">
  97. 审批
  98. </el-button>
  99. </div>
  100. </div>
  101. <div class="customer-main">
  102. <el-form :model="form" ref="form" label-width="130px">
  103. <containerTitle title="基础信息"></containerTitle>
  104. <basic-container style="margin-bottom: 10px" :showBtn="true">
  105. <el-row>
  106. <el-col v-for="(item, index) in basicData.column" :span="item.span?item.span:8" :key="index">
  107. <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
  108. <el-date-picker v-if="item.type === 'datetime'" style="width: 100%;" v-model="form[item.prop]" :disabled="viewDisabled || takeDisabled" size="small" type="date" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
  109. <el-select v-else-if="item.type === 'select'" style="width: 100%" v-model="form[item.prop]" :disabled="viewDisabled || takeDisabled" size="small" placeholder="请选择" clearable filterable>
  110. <el-option
  111. v-for="(data, index) in item.dicData"
  112. :key="index"
  113. :label="data.label"
  114. :value="data.value"
  115. ></el-option>
  116. </el-select>
  117. <el-select v-else-if="item.prop === 'currency'" style="width: 100%" v-model="form[item.prop]" :disabled="viewDisabled || takeDisabled" size="small" placeholder="请选择" @change="currencyChange" clearable filterable>
  118. <el-option v-for="(item,index) in currencyDic" :key="index" :label="item.dictValue" :disabled="viewDisabled || takeDisabled" :value="item.dictValue"></el-option>
  119. </el-select>
  120. <crop-select
  121. v-else-if="item.prop === 'corpId'"
  122. v-model="form[item.prop]"
  123. corpType="KH"
  124. :disabled="viewDisabled || takeDisabled"
  125. style="width: 100%"
  126. ></crop-select>
  127. <crop-select
  128. v-else-if="item.prop === 'belongToCorpId'"
  129. v-model="form[item.prop]"
  130. :disabled="viewDisabled || takeDisabled"
  131. corpType="GS"
  132. ></crop-select>
  133. <user-com
  134. v-else-if="item.prop === 'salesName'"
  135. :disabled="viewDisabled || takeDisabled"
  136. v-model="form[item.prop]"
  137. style="width: 100%"
  138. ></user-com>
  139. <el-input type="age" v-else-if="item.type === 'unit'" v-model="form[item.prop]" @change="downPaymentChange" :disabled="viewDisabled|| takeDisabled " size="small" autocomplete="off" placeholder="请输入">
  140. <template slot="append">%</template>
  141. </el-input>
  142. <el-input type="textarea" v-else-if="(item.prop === 'orderRemark')" v-model="form[item.prop]" :disabled="viewDisabled" size="small" autocomplete="off" placeholder="请输入"></el-input>
  143. <el-input type="age" v-else v-model="form[item.prop]" size="small" :disabled="item.disabled?true:false || viewDisabled" autocomplete="off" placeholder="请输入"></el-input>
  144. </el-form-item>
  145. </el-col>
  146. </el-row>
  147. </basic-container>
  148. <!-- 销售明细-->
  149. <containerTitle title="销售明细"></containerTitle>
  150. <basic-container >
  151. <avue-crud
  152. :option="importInventory"
  153. v-model="importInventoryForm"
  154. :data="importInventoryData"
  155. ref="importInventory"
  156. @row-save="rowSaveList"
  157. @row-update="rowUpdateList"
  158. @row-del="rowDelList"
  159. @selection-change="productSelection"
  160. @saveColumn="saveColumn"
  161. @resetColumn="resetColumn"
  162. >
  163. <template slot-scope="{row}" slot="billNo">
  164. <span v-if="row.$cellEdit" class="required_fields">*</span>
  165. <el-input
  166. v-if="row.$cellEdit"
  167. v-model="row.billNo"
  168. style="width: 90%"
  169. placeholder=" "
  170. size="small"
  171. @change="bingOut(row)"
  172. ></el-input>
  173. <span v-else>{{ row.billNo }}</span>
  174. </template>
  175. <template slot-scope="{row}" slot="orgOrderNo">
  176. <span v-if="row.$cellEdit" class="required_fields">*</span>
  177. <el-select
  178. v-if="row.$cellEdit"
  179. style="width:90% !important;"
  180. v-model="row.orgOrderNo"
  181. placeholder=" "
  182. size="small"
  183. clearable
  184. filterable
  185. >
  186. <el-option
  187. v-for="(item,index) in contractDic"
  188. :key="index"
  189. :label="item.orderNo"
  190. :value="item.orderNo"
  191. ></el-option>
  192. </el-select>
  193. <span v-else>{{ row.orgOrderNo }}</span>
  194. </template>
  195. <template slot="price" slot-scope="{ row }">
  196. <el-input
  197. v-if="row.$cellEdit"
  198. v-model="row.price"
  199. placeholder="请输入"
  200. size="small"
  201. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
  202. ></el-input>
  203. <!-- @input="priceChange(row)"-->
  204. <span v-else>{{ row.price }}</span>
  205. </template>
  206. <template slot="orderQuantity" slot-scope="{ row }">
  207. <span v-if="row.$cellEdit" class="required_fields">*</span>
  208. <el-input
  209. v-if="row.$cellEdit"
  210. v-model="row.orderQuantity"
  211. style="width: 90%"
  212. placeholder="请输入"
  213. size="small"
  214. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
  215. ></el-input>
  216. <span v-else>{{ row.orderQuantity | roundNumbers}}</span>
  217. </template>
  218. <template slot="priceCategory" slot-scope="{row,index}">
  219. <span v-if="row.$cellEdit" class="required_fields">*</span>
  220. <goods-select
  221. style="width:90% !important;"
  222. v-if="row.$cellEdit"
  223. v-model="row.priceCategoryNames"
  224. @valueName="(value) => valueName(value,row)"
  225. :configuration="itemConfiguration"
  226. >
  227. </goods-select>
  228. <span v-else>{{ row.priceCategoryNames }}</span>
  229. </template>
  230. <template slot="invoiceWeight" slot-scope="{ row }">
  231. <span v-if="row.$cellEdit" class="required_fields">*</span>
  232. <el-input
  233. v-if="row.$cellEdit"
  234. v-model="row.invoiceWeight"
  235. style="width: 90%"
  236. placeholder="请输入"
  237. size="small"
  238. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, "$1.$2")'
  239. @change="totalChange(row.invoiceWeight)"
  240. ></el-input>
  241. <span v-else>{{ row.invoiceWeight }}</span>
  242. </template>
  243. <template slot="billWeight" slot-scope="{ row }">
  244. <el-input
  245. v-if="row.$cellEdit"
  246. v-model="row.billWeight"
  247. placeholder="请输入"
  248. style="width: 90%"
  249. size="small"
  250. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, "$1.$2")'
  251. @change="totalChange(row.billWeight)"
  252. ></el-input>
  253. <!-- @input="billWeightChange(row)"-->
  254. <span v-else>{{ row.billWeight }}</span>
  255. </template>
  256. <template slot="amount" slot-scope="{ row }">
  257. <el-input
  258. v-if="row.$cellEdit"
  259. v-model="row.amount"
  260. placeholder="请输入"
  261. size="small"
  262. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
  263. ></el-input>
  264. <span v-else>{{ row.amount }}</span>
  265. </template>
  266. <template slot="taxRate" slot-scope="{ row }">
  267. <el-input
  268. v-if="row.$cellEdit"
  269. v-model="row.taxRate"
  270. size="small"
  271. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, "$1.$2")'
  272. autocomplete="off"
  273. >
  274. <i slot="suffix" style="margin-top:3px;margin-right: 10px;display:inline-block">%</i>
  275. </el-input>
  276. <span v-else>{{ row.taxRate | isPercentage}}</span>
  277. </template>
  278. <template slot="actualQuantity" slot-scope="{ row }">
  279. <span>{{ row.actualQuantity | roundNumbers}}</span>
  280. </template>
  281. <template slot="menuLeft" slot-scope="{ row }">
  282. <el-button type="primary"
  283. icon="el-icon-plus"
  284. size="small"
  285. :disabled=" viewDisabled"
  286. :loading="buttonLoading"
  287. @click="newDetails"
  288. >录入明细</el-button>
  289. <el-button type="warning"
  290. size="small"
  291. :loading="buttonLoading"
  292. :disabled="selection.length < 1 || viewDisabled"
  293. @click="generateShipmentD"
  294. >生成发货单
  295. </el-button>
  296. <!-- <el-button type="info"
  297. size="small"
  298. :disabled="importInventoryData.length < 1"
  299. @click="payeeDialog = true"
  300. >收款记录
  301. </el-button>-->
  302. </template>
  303. <template slot-scope="{row,index}" slot="menu">
  304. <el-button
  305. type="text"
  306. size="small"
  307. icon="el-icon-edit"
  308. :disabled=" viewDisabled"
  309. @click="rowCell(row,index)"
  310. >{{ row.$cellEdit ? '修改完成' : '修改' }}
  311. </el-button>
  312. <el-button
  313. type="text"
  314. size="small"
  315. icon="el-icon-delete"
  316. :disabled="viewDisabled"
  317. @click="rowDelList(row,index)"
  318. >删除
  319. </el-button>
  320. </template>
  321. </avue-crud>
  322. </basic-container>
  323. <fee-info
  324. ref="feeInfo"
  325. @beforeFinance="beforeFinance"
  326. @afterFinance="afterFinance"
  327. :disabled=" viewDisabled"
  328. :orderFeesList="orderFeesList"
  329. :itemType="'采购'"
  330. :optionType="'JK'"
  331. feeUrl=""
  332. :corpId="form.corpId"
  333. />
  334. <upload-file
  335. ref="uploadFile"
  336. title="合同附件"
  337. :disabled=" viewDisabled"
  338. :orderFilesList="orderFilesList || viewDisabled"
  339. delUrl=""
  340. />
  341. </el-form>
  342. </div>
  343. <el-dialog
  344. title="收款记录"
  345. append-to-body
  346. class="el-dialogDeep"
  347. :visible.sync="payeeDialog"
  348. width="60%"
  349. :close-on-click-modal="false"
  350. :destroy-on-close="true"
  351. :close-on-press-escape="false"
  352. v-dialog-drag>
  353. <basic-container>
  354. <avue-crud :option="importInventory"
  355. :table-loading="payeeLoading"
  356. :data="payeeData"
  357. ref="applicationCrud"
  358. @refresh-change="payeeRefreshChange"
  359. :page.sync="payeePage"
  360. @on-load="payeeOnLoad"></avue-crud>
  361. </basic-container>
  362. <span slot="footer" class="dialog-footer">
  363. <el-button @click="payeeDialog = false ">关 闭</el-button>
  364. </span>
  365. </el-dialog>
  366. <el-dialog
  367. append-to-body
  368. class="el-dialogDeep"
  369. :visible.sync="applySettlementDialog"
  370. width="60%"
  371. :close-on-click-modal="false"
  372. :destroy-on-close="true"
  373. :close-on-press-escape="false"
  374. v-dialog-drag
  375. >
  376. <apply-payment
  377. :billUrl="billUrl"
  378. :billType="billType"
  379. :billData="billData"
  380. @choceFun="choceFun"
  381. >
  382. </apply-payment>
  383. </el-dialog>
  384. <el-dialog
  385. append-to-body
  386. title="账单"
  387. class="el-dialogDeep"
  388. :visible.sync="financialAccountDialog"
  389. width="70%"
  390. :close-on-click-modal="false"
  391. :destroy-on-close="true"
  392. :close-on-press-escape="false"
  393. v-dialog-drag
  394. >
  395. <financial-account
  396. :billId="form.id"
  397. :billType="billType"
  398. :billData="billData"
  399. :belongCompany="form.belongToCorpId"
  400. @choceFun="choceFun"
  401. >
  402. </financial-account>
  403. </el-dialog>
  404. <el-dialog
  405. title="收款记录"
  406. append-to-body
  407. class="el-dialogDeep"
  408. :visible.sync="applicationDialog"
  409. width="60%"
  410. :close-on-click-modal="false"
  411. :destroy-on-close="true"
  412. :close-on-press-escape="false"
  413. v-dialog-drag
  414. >
  415. <bill-application
  416. :billId="form.id"
  417. @choceApplication="choceApplication"
  418. >
  419. </bill-application>
  420. </el-dialog>
  421. <el-dialog
  422. append-to-body
  423. title="审批进度"
  424. class="el-dialogDeep"
  425. :visible.sync="checkScheduleDialog"
  426. width="40%"
  427. :close-on-click-modal="false"
  428. :destroy-on-close="true"
  429. :close-on-press-escape="false"
  430. v-dialog-drag
  431. >
  432. <check-schedule
  433. :checkId="form.id"
  434. :batchNo="batchNo"
  435. @choceScheduleFun="choceScheduleFun"
  436. >
  437. </check-schedule>
  438. </el-dialog>
  439. <el-dialog
  440. append-to-body
  441. title="审批"
  442. class="el-dialogDeep"
  443. :visible.sync="checkDialog"
  444. width="50%"
  445. :close-on-click-modal="false"
  446. :destroy-on-close="true"
  447. :close-on-press-escape="false"
  448. v-dialog-drag
  449. >
  450. <check
  451. :checkData="detailData.check"
  452. :checkDetail="false"
  453. :idList="[]"
  454. @choceCheckFun="choceCheckFun"
  455. >
  456. </check>
  457. </el-dialog>
  458. </div>
  459. </template>
  460. <script>
  461. import importInventory from './config/importInventory.json';
  462. import {detailSaleList,
  463. submitData,
  464. goodsListRemove,
  465. getOrgOrderNo
  466. } from "@/api/importTrade/salesContract"
  467. import feeInfo from "@/components/fee-info/main";
  468. import uploadFile from "@/components/upload-file/main";
  469. import { contrastObj,contrastList } from "@/util/contrastData";
  470. import _ from "lodash";
  471. import { isPercentage,roundNumbers } from "@/util/validate";
  472. //账单组件
  473. import financialAccount from "../../../components/finance/financialAccount";
  474. import ApplyPayment from "../../../components/finance/applyPayment";
  475. import billApplication from "@/components/bill/billApplication";
  476. import checkSchedule from "../../../components/check/checkSchedule";
  477. import check from "@/components/check/check";
  478. import { pleaseCheck } from "@/api/basicData/configuration"
  479. export default {
  480. name: "detailsPage",
  481. props: {
  482. detailData: {
  483. type: Object
  484. }
  485. },
  486. filters: {
  487. isPercentage(val) {
  488. return isPercentage(val);
  489. },
  490. roundNumbers(val){
  491. return roundNumbers(val);
  492. }
  493. },
  494. components: {
  495. ApplyPayment,
  496. feeInfo,
  497. financialAccount,
  498. uploadFile,
  499. billApplication,
  500. checkSchedule,
  501. check
  502. },
  503. data() {
  504. return {
  505. disabled: false,
  506. buttonLoading:false,
  507. dialogCommodity: false,
  508. applySettlementDialog:false,
  509. financialAccountDialog:false,
  510. applicationDialog:false,
  511. viewDisabled:false,
  512. takeDisabled:false,
  513. buttonDisabled:false,
  514. checkScheduleDialog:false,//审批窗口
  515. auditDisabled:false,//显示审批按钮还是正常按钮
  516. checkDialog:false,//审批窗口
  517. approverDisabled:false,//是否审批过了
  518. batchNo:'',//审批流程
  519. lockData:{},
  520. form: {},
  521. orderFeesList:[],
  522. orderFilesList:[],
  523. currencyDic:[],
  524. contractDic:[],
  525. selectKind:-1,
  526. billUrl:"",
  527. billType:"",
  528. billData:{},
  529. itemConfiguration:{
  530. multipleChoices:false,
  531. multiple:false,
  532. disabled:false,
  533. searchShow:true,
  534. collapseTags:false,
  535. placeholder:'请点击右边按钮选择',
  536. dicData:[]
  537. },
  538. // 基础信息
  539. basicData: {
  540. column: [
  541. {
  542. label: '系统号',
  543. prop: 'sysNo',
  544. disabled:true,
  545. rules: [
  546. {
  547. required: false,
  548. message: ' ',
  549. trigger: 'blur'
  550. }
  551. ]
  552. },
  553. {
  554. label: '客户名称',
  555. span:16,
  556. prop: 'corpId',
  557. rules: [
  558. {
  559. required: true,
  560. message: ' ',
  561. trigger: 'blur'
  562. }
  563. ]
  564. },
  565. {
  566. label: '合同号',
  567. prop: 'orderNo',
  568. rules: [
  569. {
  570. required: true,
  571. message: ' ',
  572. trigger: 'blur'
  573. }
  574. ]
  575. },
  576. {
  577. label: '所属公司',
  578. prop: 'belongToCorpId',
  579. span: 16,
  580. dicData: [],
  581. rules: [
  582. {
  583. required: true,
  584. message: ' ',
  585. trigger: 'blur'
  586. }
  587. ]
  588. },
  589. {
  590. label: '合同日期',
  591. prop: 'businesDate',
  592. type:'datetime',
  593. data: [],
  594. rules: [
  595. {
  596. required: false,
  597. message: ' ',
  598. trigger: 'blur'
  599. }
  600. ]
  601. },
  602. {
  603. label: '合同金额',
  604. prop: 'orderAmount',
  605. rules: [
  606. {
  607. pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  608. message: ' ',
  609. trigger: 'blur'
  610. }
  611. ]
  612. },
  613. {
  614. label: '合同重量(吨)',
  615. prop: 'contractWeight',
  616. rules: [
  617. {
  618. required: false,
  619. message: ' ',
  620. trigger: 'blur'
  621. }
  622. ]
  623. },
  624. {
  625. label: '销售单价',
  626. prop: 'salesPrice',
  627. rules: [
  628. {
  629. required: false,
  630. message: ' ',
  631. trigger: 'blur'
  632. }
  633. ]
  634. },
  635. {
  636. label: '币别',
  637. prop: 'currency',
  638. }, {
  639. label: '汇率',
  640. prop: 'exchangeRate',
  641. rules: [
  642. {
  643. required: false,
  644. message: ' ',
  645. trigger: 'blur'
  646. }
  647. ]
  648. },
  649. {
  650. label: '客户首付日期',
  651. prop: 'advanceCollectionDate',
  652. type: 'datetime',
  653. rules: [
  654. {
  655. required: false,
  656. message: ' ',
  657. trigger: 'blur'
  658. }
  659. ]
  660. },
  661. {
  662. label: '首付比例',
  663. type:"unit",
  664. prop: 'downPayment',
  665. rules: [
  666. {
  667. required: false,
  668. message: ' ',
  669. trigger: 'blur'
  670. }
  671. ]
  672. },
  673. {
  674. label: '首付金额',
  675. prop: 'advancePayment',
  676. rules: [
  677. {
  678. pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  679. message: ' ',
  680. trigger: 'blur'
  681. }
  682. ]
  683. },
  684. {
  685. label: '已收人民币金额',
  686. prop: 'settlmentAmount',
  687. disabled: true,
  688. },
  689. {
  690. label: '已收外币金额',
  691. prop: 'foreignSettlmentAmount',
  692. disabled: true,
  693. },
  694. {
  695. label: '计划交期',
  696. prop: 'plannedDeliveryDate',
  697. type: 'datetime',
  698. },
  699. {
  700. label: '已退人民币金额',
  701. prop: 'refundSettlmentAmount',
  702. disabled: true,
  703. },
  704. {
  705. label: '已退外币金额',
  706. prop: 'refundForeignSettlmentAmount',
  707. disabled: true,
  708. },
  709. {
  710. label: '业务员',
  711. prop: 'salesName',
  712. dicData: [],
  713. },
  714. {
  715. label: '发票重量',
  716. prop: 'invoiceWeight',
  717. disabled: true,
  718. },
  719. {
  720. label: '码单重量',
  721. prop: 'billWeight',
  722. disabled: true,
  723. },
  724. {
  725. label: '开票单位',
  726. prop: 'vbrk',
  727. },
  728. {
  729. label: '包装要求',
  730. prop: 'packageRemarks',
  731. rules: [
  732. {
  733. required: false,
  734. message: ' ',
  735. trigger: 'blur'
  736. }
  737. ]
  738. },
  739. {
  740. label: "备注",
  741. span: 24,
  742. prop: "orderRemark",
  743. mock: {
  744. type: 'county'
  745. }
  746. }
  747. ],
  748. },
  749. //收款记录
  750. payeeDialog:false,
  751. payeeLoading:false,
  752. payeeData:[],
  753. payeePage:{
  754. pageSize: 10,
  755. currentPage: 1,
  756. total: 0
  757. },
  758. // 导入库存配置
  759. importInventory: {},
  760. importInventoryForm: {},
  761. importInventoryData: [],
  762. selection: [],
  763. //新旧数据对比
  764. oldForm:{},
  765. oldInventoryData:[],
  766. oldFeesList:[],
  767. oldFilesList:[],
  768. }
  769. },
  770. async created() {
  771. this.importInventory = await this.getColumnData(this.getColumnName(39), importInventory);
  772. //币别
  773. this.getWorkDicts("currency").then(res =>{
  774. this.currencyDic = res.data.data
  775. if(!this.detailData.id){
  776. this.$set(this.form,"currency","USD")
  777. this.currencyChange("USD")
  778. }
  779. })
  780. if(this.detailData.view){
  781. this.viewDisabled = true
  782. }
  783. if (this.detailData.id) {
  784. this.buttonLoading = true;
  785. let id = this.detailData.id.replace(/\"/g, "")
  786. detailSaleList(id).then(res => {
  787. this.afterEcho(res.data.data)
  788. }).finally(()=>{
  789. this.buttonLoading = false
  790. })
  791. }else{
  792. //采购日期默认当天
  793. let date = new Date();
  794. let strDate = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
  795. this.$set(this.form,"businesDate",strDate)
  796. }
  797. if(this.detailData.check){
  798. //待审批状态才可选择通过或者驳回
  799. if(this.detailData.check.auditStatus === "S"){
  800. this.buttonDisabled = false
  801. }
  802. this.viewDisabled = true //查看审批不能编辑
  803. this.auditDisabled = true
  804. this.buttonLoading = true;
  805. this.batchNo = this.detailData.check.batchNo
  806. let id = this.detailData.check.srcBillId.replace(/\"/g, "")
  807. detailSaleList(id).then(res => {
  808. this.afterEcho(res.data.data)
  809. }).finally(()=>{
  810. this.buttonLoading = false;
  811. })
  812. }
  813. },
  814. methods: {
  815. valueName(value,row){
  816. this.$set(row,"priceCategory",value.id)
  817. },
  818. //首付比例 带出金额
  819. downPaymentChange(){
  820. if(this.form.orderAmount){
  821. this.$set(this.form,"advancePayment",_.multiply(this.form.orderAmount,(this.form.downPayment*0.01)).toFixed(2))
  822. }
  823. },
  824. //合计
  825. totalChange(){
  826. let invoiceList = this.importInventoryData.map(item => {
  827. if(item.invoiceWeight){
  828. return parseFloat(item.invoiceWeight);
  829. }else return 0
  830. });
  831. let billList = this.importInventoryData.map(item => {
  832. if(item.billWeight){
  833. return parseFloat(item.billWeight);
  834. }else return 0
  835. });
  836. this.$set(this.form,"invoiceWeight", invoiceList.reduce((n,m) => n + m))
  837. this.$set(this.form,"billWeight", billList.reduce((n,m) => n + m))
  838. },
  839. //带出汇率
  840. currencyChange(value){
  841. this.currencyDic.forEach(item =>{
  842. if(item.dictValue === value){
  843. this.$set(this.form,"exchangeRate",item.remark)
  844. }
  845. })
  846. },
  847. //单价
  848. priceChange(row) {
  849. if (row.price && row.billWeight) {
  850. row.amount = _.multiply(row.billWeight, row.price).toFixed(2);
  851. }
  852. },
  853. //数量
  854. billWeightChange(row) {
  855. if (row.price && row.billWeight) {
  856. row.amount = _.multiply(row.billWeight, row.price).toFixed(2);
  857. }
  858. },
  859. //提单号带出合同号
  860. bingOut(row){
  861. getOrgOrderNo(row.billNo).then(res =>{
  862. if(res.data.length != 0){
  863. this.contractDic = res.data;
  864. row.orgOrderNo = res.data[0].orderNo
  865. row.itemId = res.data[0].itemId;
  866. row.priceCategoryNames = res.data[0].itemName[0].cname
  867. row.priceCategory = res.data[0].itemName[0].id
  868. row.cntrNo = res.data[0].cntrNo
  869. }else{
  870. this.$message.warning("无此提单号记录!");
  871. this.contractDic = [];
  872. row.orgOrderNo = ''
  873. row.itemId = ''
  874. row.priceCategoryNames = ''
  875. row.priceCategory = ''
  876. }
  877. }).catch(()=>{
  878. row.orgOrderNo = ''
  879. })
  880. },
  881. //打开申请记录
  882. openApplicationDialog(){
  883. this.applicationDialog = true
  884. },
  885. //关闭申记录
  886. choceApplication(){
  887. this.applicationDialog = false
  888. },
  889. //生成账单数据
  890. beforeBillData(bool,type){
  891. this.billType = type
  892. this.billData = {
  893. srcOrderno:this.form.orderNo,
  894. itemType:"销售",
  895. optionType:'JK',
  896. billNoList: this.importInventoryData.map(item =>{return item.billNo}),
  897. amount:this.form.orderAmount,
  898. belongToCorpId:this.form.belongToCorpId,
  899. corpsName:this.form.corpName,
  900. corpId:this.form.corpId,
  901. price:this.form.salesPrice,
  902. accDate:this.form.businesDate,
  903. currency:this.form.currency,
  904. exchangeRate:this.form.exchangeRate,
  905. srcParentId:this.form.id,
  906. }
  907. if(type){ //申请货款
  908. this.billData.srcId = -1
  909. }
  910. },
  911. //费用明细回调验证
  912. beforeFinance(feesData,callback){
  913. let params = {}
  914. if(contrastObj(this.form,this.oldForm) || contrastList(this.importInventoryData,this.oldInventoryData)
  915. || contrastList(feesData,this.oldFeesList) || contrastList(this.orderFilesList,this.oldFilesList)
  916. ){
  917. this.$confirm("数据发生变化,请先提交保存?", {
  918. confirmButtonText: "保存",
  919. cancelButtonText: "取消",
  920. type: "warning"
  921. }).then(() => {
  922. this.editCustomer();
  923. }).finally(()=>{
  924. params.valid = false
  925. callback(params)
  926. })
  927. }else{
  928. params.valid = true
  929. params.parentId = this.form.id
  930. params.srcOrderno = this.form.orderNo
  931. callback(params)
  932. }
  933. },
  934. //生成账单之后需要更新明细列表的属性
  935. afterFinance(){
  936. detailSaleList(this.form.id).then(res => {
  937. this.afterEcho(res.data.data)
  938. })
  939. },
  940. //请核
  941. auditCheck(){
  942. if(this.verificationData()){
  943. this.$confirm("确定审核此订单?", {
  944. confirmButtonText: "确定",
  945. cancelButtonText: "取消",
  946. type: "warning"
  947. }).then(()=>{
  948. this.buttonLoading = true
  949. const data = {
  950. id : this.form.id,
  951. checkType: 'xsqh',
  952. url: '/salesManagement/salesContract/index',
  953. pageStatus:"this.$store.getters.entranceXsStatus",
  954. pageLabel:"销售订单",
  955. checkFlag: 2,
  956. }
  957. pleaseCheck(data).then(res=>{
  958. if(res.data.success){
  959. this.$message.success("操作成功!")
  960. this.viewDisabled = true
  961. this.approverDisabled = true
  962. }
  963. })
  964. }).finally(()=>{
  965. this.buttonLoading = false
  966. })
  967. }
  968. },
  969. //财务操作
  970. applySettlement(type){
  971. if(this.verificationData()){
  972. this.beforeBillData(true,type)
  973. this.financialAccountDialog = true;
  974. }
  975. },
  976. choceFun(){
  977. this.financialAccountDialog = false
  978. },
  979. //刷新
  980. payeeRefreshChange(){
  981. console.log(1)
  982. },
  983. //申请记录
  984. payeeOnLoad(){
  985. console.log(1)
  986. },
  987. //商品选中触发
  988. productSelection(selection){
  989. this.selection = selection
  990. },
  991. //生成发货单
  992. generateShipmentD(){
  993. if(this.verificationData()) {
  994. if (this.$store.getters.goStatus) {
  995. this.$alert("发货单页面已存在,请关闭发货单再进行操作", "温馨提示", {
  996. confirmButtonText: "确定",
  997. type: 'warning',
  998. callback: action => {
  999. }
  1000. });
  1001. } else {
  1002. const params = {
  1003. id:this.form.id,
  1004. orderItemIds:this.selection.map(i=>{return i.id})
  1005. }
  1006. this.$router.push({
  1007. path: "/importTrade/invoice/index",
  1008. query: {form: params},
  1009. });
  1010. this.$router.$avueRouter.closeTag('/importTrade/invoice/index');
  1011. }
  1012. }
  1013. },
  1014. //录入明细
  1015. newDetails(){
  1016. const params = {
  1017. price:this.form.salesPrice,
  1018. exRate:this.form.exchangeRate
  1019. }
  1020. this.$refs.importInventory.rowCellAdd(params);
  1021. },
  1022. //商品编辑
  1023. rowCell(row, index) {
  1024. this.$refs.importInventory.rowCell(row, index)
  1025. },
  1026. //新增明细保存触发
  1027. rowSaveList(row, done, loading){
  1028. done()
  1029. },
  1030. //修改明细触发
  1031. rowUpdateList(row, index, done, loading) {
  1032. done(row);
  1033. },
  1034. //关闭审核
  1035. choceCheckFun(){
  1036. this.checkDialog = false;
  1037. },
  1038. choceScheduleFun(){
  1039. this.checkScheduleDialog = false
  1040. },
  1041. //删除商品明细触发
  1042. rowDelList(row, index, donerowDel) {
  1043. this.$confirm("确定将选择数据删除?", {
  1044. confirmButtonText: "确定",
  1045. cancelButtonText: "取消",
  1046. type: "warning"
  1047. }).then(() => {
  1048. if (row.id){
  1049. goodsListRemove(row.id).then(res=>{
  1050. this.$message({
  1051. type: "success",
  1052. message: "操作成功!"
  1053. });
  1054. this.importInventoryData.splice(index, 1);
  1055. })
  1056. }else {
  1057. this.$message({
  1058. type: "success",
  1059. message: "操作成功!"
  1060. });
  1061. this.importInventoryData.splice(index, 1);
  1062. }
  1063. }).finally(()=>{
  1064. this.totalChange()
  1065. })
  1066. },
  1067. //修改
  1068. editCustomer(status) {
  1069. this.$refs["form"].validate((valid) => {
  1070. if (valid) {
  1071. let orderFeesList = this.$refs.feeInfo.submitData();
  1072. for (let i = 0; i < orderFeesList.length; i++) {
  1073. if (orderFeesList[i].corpId == null) {
  1074. return this.$message.error(`请输入第${i + 1}行的结算中心`);
  1075. }
  1076. if (orderFeesList[i].price == 0) {
  1077. return this.$message.error(`请正确输入第${i + 1}行的价格`);
  1078. }
  1079. if (orderFeesList[i].orderQuantity == 0) {
  1080. return this.$message.error(`请正确输入第${i + 1}行的件数`);
  1081. }
  1082. }
  1083. let orderUpLoadList = this.$refs.uploadFile.submitData();
  1084. for (let j = 0; j < this.importInventoryData.length; j++) {
  1085. if (this.importInventoryData[j].billNo === (null || "")) {
  1086. return this.$message.error(`请输入销售明细第${j + 1}行的提单号`);
  1087. }
  1088. if (this.importInventoryData[j].orgOrderNo === (null || "")) {
  1089. return this.$message.error(`请输入销售明细第${j + 1}行的合同号`);
  1090. }
  1091. if (this.importInventoryData[j].priceCategory === (null || "")) {
  1092. return this.$message.error(`请输入销售明细第${j + 1}行的货品物种`);
  1093. }
  1094. if (this.importInventoryData[j].orderQuantity === (null || "")) {
  1095. return this.$message.error(`请输入销售明细第${j + 1}行的件数`);
  1096. }
  1097. if (this.importInventoryData[j].invoiceWeight === (null || "")) {
  1098. return this.$message.error(`请输入销售明细第${j + 1}行的发票重量`);
  1099. }
  1100. }
  1101. this.buttonLoading = true;
  1102. if(this.importInventoryData.length !== 0){
  1103. //提单号
  1104. this.form.billNo =Array.from(new Set(this.importInventoryData.map(item =>{return item.billNo}))).join(",")
  1105. //发票金额合计 存入主表
  1106. let invoiceList = this.importInventoryData.map(item => {
  1107. if(item.amount){
  1108. return parseFloat(item.amount);
  1109. }else return 0
  1110. });
  1111. this.form.invoiceAmount = invoiceList.reduce((n,m) => n + m)
  1112. }
  1113. let submitDto = {
  1114. ...this.form,
  1115. orderItemsList: this.importInventoryData,
  1116. orderFeesList: orderFeesList,
  1117. orderUpLoadList:orderUpLoadList,
  1118. };
  1119. submitData(submitDto).then(res => {
  1120. if(res.data.success){
  1121. this.$message.success("操作成功!")
  1122. detailSaleList(res.data.data.id).then(res => {
  1123. this.afterEcho(res.data.data)
  1124. }).finally(()=>{
  1125. this.buttonLoading = false
  1126. })
  1127. }
  1128. })
  1129. if(status === true){
  1130. this.$emit("goBack");
  1131. }
  1132. } else {
  1133. return false;
  1134. }
  1135. });
  1136. },
  1137. afterEcho(data){
  1138. this.form = data;
  1139. this.oldForm = Object.assign({},data);
  1140. this.importInventoryData = data.orderItemsList
  1141. //销售明细列表如果存在已发数量或重量不为0 则此订单已发货 禁止编辑主要参数
  1142. this.takeDisabled = this.importInventoryData.map(item =>{if(item.actualQuantity != 0 || item.actualWeight != 0) return true}).some(item => {return item == true})
  1143. this.basicData.column.forEach(item =>{
  1144. if(item.prop == "advanceCollectionDate" || item.prop == "orderAmount" || item.prop == "salesPrice" || item.prop == "exchangeRate" || item.prop == "advancePayment" || item.prop == "orderNo" || item.prop == "contractWeight"){
  1145. item.disabled = this.takeDisabled
  1146. }
  1147. })
  1148. if(data.orderItemsList){
  1149. this.importInventoryData = data.orderItemsList
  1150. this.oldInventoryData = this.deepClone(data.orderItemsList)
  1151. }
  1152. if(data.orderFeesList){
  1153. this.orderFeesList = data.orderFeesList
  1154. this.oldFeesList = this.deepClone(data.orderFeesList)
  1155. }
  1156. if(data.orderFilesList){
  1157. this.orderFilesList = data.orderFilesList
  1158. this.oldFilesList = this.deepClone(data.orderFilesList)
  1159. }
  1160. if(this.detailData.status === 'copy'){
  1161. this.copyData()
  1162. }
  1163. },
  1164. //验证数据
  1165. verificationData(){
  1166. this.orderFeesList = this.$refs.feeInfo.submitData();
  1167. if(contrastObj(this.form,this.oldForm) || contrastList(this.importInventoryData,this.oldInventoryData)
  1168. || contrastList(this.orderFeesList,this.oldFeesList) || contrastList(this.orderFilesList,this.oldFilesList)
  1169. ){
  1170. this.$confirm("数据发生变化,请先提交保存!", "提示", {
  1171. confirmButtonText: "保存",
  1172. cancelButtonText: "取消",
  1173. type: "warning",
  1174. }).then(() => {
  1175. this.editCustomer()
  1176. }).catch(()=>{
  1177. return false
  1178. })
  1179. }else{
  1180. return true
  1181. }
  1182. },
  1183. createData(){
  1184. if(this.verificationData()){
  1185. this.$confirm("确定创建新的单据吗?", "提示", {
  1186. confirmButtonText: "保存",
  1187. cancelButtonText: "取消",
  1188. type: "warning",
  1189. }).then(() => {
  1190. this.form = {}
  1191. this.oldForm = {}
  1192. this.importInventoryData = []
  1193. this.oldInventoryData = []
  1194. this.orderFeesList = []
  1195. this.oldFeesList = []
  1196. this.orderFilesList = []
  1197. this.oldFilesList = []
  1198. })
  1199. }
  1200. },
  1201. //复制单据
  1202. copyData(){
  1203. if(this.verificationData()){
  1204. this.takeDisabled = false
  1205. this.basicData.column.forEach(item =>{
  1206. if(item.prop == "advanceCollectionDate" || item.prop == "orderAmount" || item.prop == "salesPrice" || item.prop == "exchangeRate" || item.prop == "advancePayment" || item.prop == "orderNo" || item.prop == "contractWeight"){
  1207. item.disabled = this.takeDisabled
  1208. }
  1209. })
  1210. delete this.form.id //删除id
  1211. this.$set(this.form,"sysNo","")//系统编号
  1212. this.$set(this.form,"orderNo","")//合同号
  1213. this.$set(this.form,"settlmentAmount","")//已付人民币
  1214. this.$set(this.form,"foreignSettlmentAmount","")//已付外币
  1215. this.$set(this.form,"refundSettlmentAmount","")//已退人民币
  1216. this.$set(this.form,"refundForeignSettlmentAmount","")//已退外币
  1217. this.importInventoryData.forEach(item =>{
  1218. delete item.id //删除id
  1219. item.actualQuantity = "" //已收件数
  1220. item.actualWeight = "" //已收发票
  1221. })
  1222. this.orderFeesList.forEach(item =>{
  1223. delete item.id //删除id
  1224. })
  1225. this.oldForm = {}
  1226. this.oldInventoryData = []
  1227. this.oldFeesList = []
  1228. this.oldFilesList = []
  1229. this.$message.success("复制成功!")
  1230. }
  1231. },
  1232. async openEdit() {
  1233. if(this.approverDisabled || this.form.status != 0){ //是否审批
  1234. this.$message.warning("此订单已提交审批,不可编辑!")
  1235. return
  1236. }
  1237. //标签页保存key
  1238. this.inDetailsKey(this.$route.name,this.detailData.lockData);
  1239. //单据是否锁定
  1240. if(!await this.checkLocks(this.detailData.lockData)){
  1241. this.onLock(this.detailData.lockData); //上锁
  1242. this.viewDisabled = false
  1243. }else{
  1244. this.$message.warning('此单据已被锁定,请稍后再进行操作!')
  1245. }
  1246. },
  1247. backToList() {
  1248. //如果单据已被锁定 并且编辑按钮存在 则直接返回
  1249. if(this.viewDisabled || !this.detailData.lockData){
  1250. this.$emit("goBack");
  1251. return
  1252. }
  1253. this.orderFeesList = this.$refs.feeInfo.submitData();
  1254. if(contrastObj(this.form,this.oldForm) || contrastList(this.importInventoryData,this.oldInventoryData)
  1255. || contrastList(this.orderFeesList,this.oldFeesList) || contrastList(this.orderFilesList,this.oldFilesList)
  1256. ){
  1257. this.$confirm("是否保存当前页面?", "提示", {
  1258. confirmButtonText: "保存",
  1259. cancelButtonText: "取消",
  1260. type: "warning",
  1261. }).then(() => {
  1262. this.editCustomer(true)
  1263. }).catch(()=>{
  1264. this.$emit("goBack");
  1265. }).finally(()=>{
  1266. if(this.form.id){
  1267. this.unLock(this.detailData.lockData);
  1268. this.leaveDetailsKey(this.$route.name);
  1269. }
  1270. })
  1271. }else{
  1272. this.$emit("goBack");
  1273. if(this.form.id){
  1274. this.unLock(this.detailData.lockData);
  1275. this.leaveDetailsKey(this.$route.name);
  1276. }
  1277. }
  1278. },
  1279. //列保存触发
  1280. async saveColumn() {
  1281. const inSave = await this.saveColumnData(
  1282. this.getColumnName(39),
  1283. this.importInventory
  1284. );
  1285. if (inSave) {
  1286. this.$message.success("保存成功");
  1287. //关闭窗口
  1288. this.$refs.importInventory.$refs.dialogColumn.columnBox = false;
  1289. }
  1290. },
  1291. async resetColumn() {
  1292. const inSave = await this.delColumnData(
  1293. this.getColumnName(39),
  1294. importInventory
  1295. );
  1296. if (inSave) {
  1297. this.$message.success("重置成功");
  1298. this.importInventory = importInventory;
  1299. //关闭窗口
  1300. this.$refs.importInventory.$refs.dialogColumn.columnBox = false;
  1301. }
  1302. },
  1303. },
  1304. }
  1305. </script>
  1306. <style scoped lang="scss">
  1307. .required_fields{
  1308. color: #F56C6C;
  1309. display:inline-block;
  1310. width: 7%
  1311. }
  1312. .upper_right_button{
  1313. display: flex;
  1314. position: fixed;
  1315. right: 12px;
  1316. top: 47px;
  1317. }
  1318. ::v-deep .el-form-item {
  1319. margin-bottom: 0;
  1320. }
  1321. ::v-deep .el-form-item__content{
  1322. line-height: 32px;
  1323. }
  1324. </style>