detailsPage.vue 44 KB

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