paymentRequestDetails.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. <template>
  2. <div class="borderless">
  3. <div class="customer-head">
  4. <div class="customer-back">
  5. <el-button v-if="!auditDisabled" type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
  6. @click="backToList">返回列表
  7. </el-button>
  8. <div v-if="!auditDisabled" class="upper_right_button">
  9. <el-button type="primary"
  10. size="small"
  11. v-if="viewDisabled"
  12. class="el-button--small-yh "
  13. :loading="buttonLoading"
  14. @click.stop="openEdit()">编辑
  15. </el-button>
  16. <el-dropdown style="padding: 0 8px;line-height: 0">
  17. <el-button
  18. type="warning"
  19. :disabled="viewDisabled"
  20. :loading="buttonLoading"
  21. size="small"
  22. >
  23. 审批处理<i class="el-icon-arrow-down el-icon--right"></i>
  24. </el-button>
  25. <el-dropdown-menu slot="dropdown">
  26. <el-dropdown-item
  27. :loading="buttonLoading"
  28. :disabled="checkDisabled || viewDisabled"
  29. @click.native="paymentCheck">{{form.checkStatus == '审批中'?'审批中':'审批提交'}}
  30. </el-dropdown-item>
  31. <el-dropdown-item
  32. :loading="buttonLoading"
  33. :disabled="!checkDisabled || viewDisabled"
  34. @click.native="checkScheduleDialog = true,checkId=form.id">审批进度
  35. </el-dropdown-item>
  36. <el-dropdown-item
  37. :disabled="!recallDisabled || viewDisabled"
  38. @click.native="cancelAudit">撤销审批
  39. </el-dropdown-item>
  40. </el-dropdown-menu>
  41. </el-dropdown>
  42. <el-button type="warning"
  43. size="small"
  44. :loading="buttonLoading"
  45. class="el-button--small-yh"
  46. :disabled="form.checkStatus !== '审批通过' || viewDisabled"
  47. @click.stop="settlement">结算
  48. </el-button>
  49. <el-button type="primary"
  50. size="small"
  51. :disabled="viewDisabled"
  52. :loading="buttonLoading"
  53. class="el-button--small-yh"
  54. @click.stop="confirmEdit">保存数据
  55. </el-button>
  56. </div>
  57. <div v-if="auditDisabled" class="upper_right_button">
  58. <el-button type="primary"
  59. size="small"
  60. class="el-button--small-yh"
  61. :loading="buttonLoading"
  62. @click.stop="checkScheduleDialog = true,checkId=detailData.check.srcBillId">
  63. 审批流程
  64. </el-button>
  65. <el-button type="primary"
  66. size="small"
  67. class="el-button--small-yh"
  68. :loading="buttonLoading"
  69. :disabled="buttonDisabled"
  70. @click.stop="openCheckDialog">
  71. 审批
  72. </el-button>
  73. </div>
  74. </div>
  75. </div>
  76. <div class="customer-main">
  77. <containerTitle title="基础信息"></containerTitle>
  78. <basic-container>
  79. <avue-form class="trading-form" ref="form" v-model="form" :option="option">
  80. <template slot="corpId">
  81. <crop-select
  82. v-model="form.corpId"
  83. corpType="KG"
  84. :disabled="checkDisabled || auditDisabled || viewDisabled"
  85. @getCorpData="returnBack"
  86. style="width: 100%"
  87. ></crop-select>
  88. </template>
  89. <template slot="belongToCorpId">
  90. <crop-select
  91. v-model="form.belongToCorpId"
  92. corpType="GS"
  93. :disabled="checkDisabled || auditDisabled || viewDisabled"
  94. style="width: 100%"
  95. ></crop-select>
  96. </template>
  97. <template slot="accountNo">
  98. <el-select v-model="form.accountNo"
  99. placeholder="请选择"
  100. @change="accountNoChange"
  101. :disabled="checkDisabled || auditDisabled || viewDisabled"
  102. clearable
  103. allow-create
  104. default-first-option
  105. filterable>
  106. <el-option v-for="(item,index) in form.bankList"
  107. :key="index"
  108. :label="item.accountNo"
  109. :value="item.accountNo"
  110. >
  111. </el-option>
  112. </el-select>
  113. </template>
  114. <template slot="remark">
  115. <el-input type="textarea"
  116. v-model="form.remark"
  117. :disabled="viewDisabled"
  118. size="small"
  119. rows="2"
  120. autocomplete="off"
  121. placeholder="">
  122. </el-input>
  123. </template>
  124. </avue-form>
  125. </basic-container>
  126. <containerTitle title="明细列表"></containerTitle>
  127. <basic-container>
  128. <avue-crud :option="itemOption"
  129. :data="dataList"
  130. ref="crud"
  131. v-model="itemForm"
  132. :page.sync="page"
  133. :cell-style="cellStyle"
  134. @search-reset="searchReset"
  135. @row-update="rowUpdate"
  136. @selection-change="selectionChange"
  137. @current-change="currentChange"
  138. @size-change="sizeChange"
  139. @saveColumn="saveColumn"
  140. @resetColumn="resetColumn"
  141. @refresh-change="refreshChange">
  142. <template slot-scope="scope" slot="menu">
  143. <el-button
  144. type="text"
  145. size="small"
  146. icon="el-icon-edit"
  147. :disabled="checkDisabled || auditDisabled || viewDisabled"
  148. @click="rowCell(scope.row,scope.index)"
  149. >{{ scope.row.$cellEdit ? '修改完成' : '修改' }}
  150. </el-button>
  151. <el-button
  152. type="text"
  153. size="small"
  154. icon="el-icon-delete"
  155. :disabled="checkDisabled || auditDisabled || viewDisabled"
  156. @click.stop="rowDel(scope.row,scope.index)"
  157. >删除
  158. </el-button>
  159. </template>
  160. <template slot="costType" slot-scope="{ row }">
  161. <breakdown-select
  162. v-if="row.$cellEdit"
  163. v-model="row.costType"
  164. :configuration="breakConfiguration">
  165. </breakdown-select>
  166. <span v-else>{{ row.itemName }}</span>
  167. </template>
  168. <template slot="price" slot-scope="{ row }">
  169. <el-input
  170. v-if="row.$cellEdit"
  171. v-model="row.price"
  172. placeholder="请输入"
  173. size="small"
  174. oninput='this.value=this.value.replace(/[^(\d.)]/g,"").replace(/^(\d+)\.(\d\d).*$/, "$1.$2")'
  175. ></el-input>
  176. <span v-else>{{ row.price }}</span>
  177. </template>
  178. <template slot="currency" slot-scope="{row,index}">
  179. <el-select v-if="row.$cellEdit"
  180. v-model="row.currency"
  181. size="small"
  182. @change="currencyChange(row)"
  183. clearable
  184. filterable>
  185. <el-option v-for="(item,index) in currencyDic"
  186. :key="index"
  187. :label="item.dictValue"
  188. :value="item.dictValue"></el-option>
  189. </el-select>
  190. <span v-else>{{ row.currency }}</span>
  191. </template>
  192. </avue-crud>
  193. </basic-container>
  194. </div>
  195. <el-dialog
  196. append-to-body
  197. title="审批进度"
  198. class="el-dialogDeep"
  199. :visible.sync="checkScheduleDialog"
  200. width="40%"
  201. :close-on-click-modal="false"
  202. :destroy-on-close="true"
  203. :close-on-press-escape="false"
  204. v-dialog-drag
  205. >
  206. <check-schedule
  207. :checkId="checkId"
  208. :batchNo="batchNo"
  209. @choceScheduleFun="choceScheduleFun"
  210. >
  211. </check-schedule>
  212. </el-dialog>
  213. <el-dialog
  214. append-to-body
  215. title="审批"
  216. class="el-dialogDeep"
  217. :visible.sync="checkDialog"
  218. width="50%"
  219. :close-on-click-modal="false"
  220. :destroy-on-close="true"
  221. :close-on-press-escape="false"
  222. v-dialog-drag
  223. >
  224. <check
  225. :checkData="checkData"
  226. :checkDetail="false"
  227. :idList="[]"
  228. @choceCheckFun="choceCheckFun"
  229. >
  230. </check>
  231. </el-dialog>
  232. </div>
  233. </template>
  234. <script>
  235. import itemOption from "./configuration/detailsPage.json";
  236. import { contrastObj,contrastList } from "@/util/contrastData";
  237. import { getDetails, paymentCheck,getlistBankBy,saveOrEdit, deleteDetail } from "@/api/financialManagement/paymentRequest";
  238. import checkSchedule from "../../../components/check/checkSchedule";
  239. import check from "@/components/check/check";
  240. import { cancelCheck } from "@/api/check/check";
  241. import option from "./configuration/mainList.json";
  242. export default {
  243. name: "paymentDetailsPage",
  244. props: {
  245. detailData: {
  246. type: Object
  247. }
  248. },
  249. components:{
  250. checkSchedule,
  251. check
  252. },
  253. data() {
  254. return {
  255. form:{},
  256. itemForm: {},
  257. checkData:{},
  258. itemOption: itemOption,
  259. viewDisabled:false,
  260. checkDisabled:false,
  261. auditDisabled:false,
  262. buttonDisabled:true,
  263. buttonLoading:false,
  264. checkScheduleDialog:false,
  265. recallDisabled:false,
  266. checkDialog:false,
  267. checkId:'',
  268. batchNo:'',
  269. parentId:0,
  270. id:"",
  271. dataList: [],
  272. currencyDic:[],
  273. page: {
  274. pageSize: 10,
  275. pagerCount: 5,
  276. total: 0,
  277. },
  278. breakConfiguration:{
  279. multipleChoices:false,
  280. multiple:false,
  281. disabled:false,
  282. searchShow:true,
  283. collapseTags:false,
  284. placeholder:'请点击右边按钮选择',
  285. dicData:[]
  286. },
  287. query:{},
  288. option: {
  289. menuBtn: false,
  290. labelWidth: 100,
  291. column: [
  292. {
  293. label: '系统号',
  294. prop: 'sysNo',
  295. span: 8,
  296. disabled: true
  297. },{
  298. label: '合同号',
  299. prop: 'srcOrderno',
  300. span: 8,
  301. rules: [
  302. {
  303. required: true,
  304. message: ' ',
  305. trigger: 'blur'
  306. }
  307. ]
  308. }, {
  309. label: '往来单位',
  310. prop: 'corpId',
  311. sort:true,
  312. span: 8,
  313. rules: [
  314. {
  315. required: false,
  316. message: ' ',
  317. trigger: 'blur'
  318. }
  319. ]
  320. },
  321. {
  322. label: '银行账号',
  323. prop: 'accountNo',
  324. type:"select",
  325. span: 8,
  326. rules: [
  327. {
  328. required: false,
  329. message: ' ',
  330. trigger: 'blur'
  331. }
  332. ]
  333. },
  334. {
  335. label: '开户银行',
  336. prop: 'accountBank',
  337. span: 8,
  338. rules: [
  339. {
  340. required: false,
  341. message: ' ',
  342. trigger: 'blur'
  343. }
  344. ]
  345. }, {
  346. label: '银行户头',
  347. prop: 'accountName',
  348. span: 8,
  349. rules: [
  350. {
  351. required: false,
  352. message: ' ',
  353. trigger: 'blur'
  354. }
  355. ]
  356. },
  357. {
  358. label: '人民币金额',
  359. prop: 'amount',
  360. span: 8,
  361. rules: [
  362. {
  363. pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  364. message: ' ',
  365. trigger: 'blur'
  366. }
  367. ]
  368. },
  369. {
  370. label: '外币金额',
  371. prop: 'foreignAmount',
  372. span: 8,
  373. rules: [
  374. {
  375. pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
  376. message: ' ',
  377. trigger: 'blur'
  378. }
  379. ]
  380. },
  381. {
  382. label: '所属公司',
  383. prop: 'belongToCorpId',
  384. sort:true,
  385. span: 8,
  386. rules: [
  387. {
  388. required: false,
  389. message: ' ',
  390. trigger: 'blur'
  391. }
  392. ]
  393. },
  394. {
  395. label: '申请人',
  396. prop: 'createUserName',
  397. span: 8,
  398. disabled:true,
  399. rules: [
  400. {
  401. required: false,
  402. message: ' ',
  403. trigger: 'blur'
  404. }
  405. ]
  406. }, {
  407. label: '申请日期',
  408. prop: 'createTime',
  409. span: 8,
  410. type:"date",
  411. disabled:true,
  412. rules: [
  413. {
  414. required: false,
  415. message: ' ',
  416. trigger: 'blur'
  417. }
  418. ]
  419. },
  420. {
  421. label: '备注',
  422. prop: 'remark',
  423. span:24,
  424. minRows: 2,
  425. rules: [
  426. {
  427. required: false,
  428. message: ' ',
  429. trigger: 'blur'
  430. }
  431. ]
  432. },
  433. ],
  434. },
  435. oldForm:{},
  436. oldDataList:[],
  437. }
  438. },
  439. async created() {
  440. this.itemOption = await this.getColumnData(this.getColumnName(62), itemOption);
  441. //是否需要根据 登录人所属公司 区分不用option
  442. //币别
  443. this.getWorkDicts("currency").then(res =>{
  444. this.currencyDic = res.data.data
  445. })
  446. if(this.detailData.view){
  447. this.viewDisabled = true
  448. this.option.disabled = true
  449. }
  450. if (this.detailData.id) {
  451. this.id = this.detailData.id;
  452. this.buttonLoading = true;
  453. getDetails(this.id).then(res => {
  454. this.afterEcho(res.data.data)
  455. }).finally(()=>{
  456. this.buttonLoading = false
  457. })
  458. }
  459. if(this.detailData.check){
  460. //待审批状态才可选择通过或者驳回
  461. if(this.detailData.check.auditStatus === "S"){
  462. this.buttonDisabled = false
  463. }
  464. this.auditDisabled = true
  465. this.buttonLoading = true;
  466. this.batchNo = this.detailData.check.batchNo
  467. getDetails(this.detailData.check.srcBillId).then(res => {
  468. this.afterEcho(res.data.data)
  469. }).finally(()=>{
  470. this.buttonLoading = false;
  471. })
  472. }
  473. },
  474. methods: {
  475. //选择客户
  476. returnBack(corpValue){
  477. getlistBankBy(corpValue.id).then(res =>{
  478. this.form.bankList = res.data
  479. })
  480. },
  481. //选择银行账号
  482. accountNoChange(value){
  483. this.form.bankList.forEach(item =>{
  484. if(item.accountNo == value){
  485. this.$set(this.form,"accountBank",item.accountBank)
  486. this.$set(this.form,"accountName",item.accountName)
  487. }
  488. })
  489. },
  490. //选择币别 带汇率
  491. currencyChange(row){
  492. if(row.currency === "CNY"){
  493. row.exchangeRate = 1
  494. }else if(row.currency === "USD"){
  495. row.exchangeRate = 6.384300
  496. }else{
  497. row.exchangeRate = 7.174900
  498. }
  499. },
  500. searchReset() {
  501. console.log('1')
  502. },
  503. selectionChange() {
  504. console.log('1')
  505. },
  506. currentChange() {
  507. console.log('1')
  508. },
  509. sizeChange() {
  510. console.log('1')
  511. },
  512. refreshChange() {
  513. console.log('1')
  514. },
  515. rowUpdate(row, index, done, loading) {
  516. done(row);
  517. },
  518. rowCell(row, index) {
  519. this.$refs.crud.rowCell(row, index)
  520. },
  521. rowDel(row,index){
  522. this.$confirm("确定删除数据?", {
  523. confirmButtonText: "确定",
  524. cancelButtonText: "取消",
  525. type: "warning"
  526. }).then(() => {
  527. if (row.id) {
  528. deleteDetail({ids: row.id}).then(res => {
  529. this.$message({
  530. type: 'success',
  531. message: '删除成功!'
  532. })
  533. this.dataList.splice(row.$index, 1);
  534. })
  535. } else {
  536. this.$message({
  537. type: "success",
  538. message: "删除成功!"
  539. });
  540. this.dataList.splice(row.$index, 1);
  541. }
  542. });
  543. },
  544. //打开审核
  545. openCheckDialog(){
  546. this.checkData = this.detailData.check
  547. this.checkDialog = true;
  548. },
  549. //关闭审核
  550. choceCheckFun(){
  551. this.checkDialog = false;
  552. },
  553. choceScheduleFun(){
  554. this.checkScheduleDialog = false
  555. },
  556. //审核
  557. paymentCheck(){
  558. if(this.verification()){
  559. this.$confirm("您确定提交此次申请吗?", {
  560. confirmButtonText: "确定",
  561. cancelButtonText: "取消",
  562. type: "warning"
  563. }).then(()=>{
  564. this.buttonLoading = true
  565. const params ={
  566. id : this.form.id,
  567. billType: this.form.billType,
  568. url:"/financialManagement/paymentRequest/index",
  569. pageStatus:"this.$store.getters.pqStatus",
  570. pageLabel:"付费申请",
  571. checkType: 'ffsq'
  572. }
  573. paymentCheck(params).then(res =>{
  574. if(res.data.success){
  575. this.$message.success("申请成功!");
  576. this.afterEcho(res.data.data)
  577. }
  578. }).finally(()=>{
  579. this.buttonLoading = false
  580. })
  581. })
  582. }
  583. },
  584. //撤销审核
  585. cancelAudit(){
  586. this.buttonLoading = true
  587. cancelCheck(this.form.id).then(res =>{
  588. if(res.data.success){
  589. this.$message.success("操作成功!")
  590. this.afterEcho(res.data.data)
  591. }
  592. }).finally(()=>{
  593. this.buttonLoading = false
  594. })
  595. },
  596. //结算
  597. settlement(){
  598. if(this.verification()){
  599. if(this.$store.getters.paySettle){
  600. this.$alert("结算页面已存在,请关闭结算页面再进行操作", "温馨提示", {
  601. confirmButtonText: "确定",
  602. type: 'warning',
  603. callback: action => {
  604. }
  605. });
  606. }else{
  607. //关闭一下存在的列表页 跳转
  608. this.$router.$avueRouter.closeTag('/financialManagement/paymentSettle/paymentSettle');
  609. this.$router.push({
  610. path: "/financialManagement/paymentSettle/paymentSettle",
  611. query: {params: this.form.id},
  612. });
  613. }
  614. }
  615. },
  616. confirmEdit(status){
  617. this.$refs["form"].validate((valid,done) => {
  618. done();
  619. if(valid){
  620. this.form.billNo = this.dataList.map(item =>{return item.billNo}).join(",")
  621. const params = {
  622. ...this.form,
  623. billType:"申请",
  624. itemsList:this.dataList
  625. }
  626. this.buttonLoading = true
  627. saveOrEdit(params).then(res =>{
  628. this.$message.success("操作成功!")
  629. this.afterEcho(res.data.data)
  630. }).finally(()=>{
  631. this.buttonLoading = false
  632. })
  633. if(status === true){
  634. this.$emit("goBack");
  635. }
  636. }
  637. })
  638. },
  639. //验证新旧数据
  640. verification(){
  641. if(contrastObj(this.form,this.oldForm) || contrastList(this.dataList,this.oldDataList)){
  642. this.$confirm("您已改动数据,是否先保存在进行操作!", {
  643. confirmButtonText: "保存",
  644. cancelButtonText: "取消",
  645. type: "warning"
  646. }).then(() => {
  647. this.confirmEdit()
  648. }).catch(()=>{
  649. return false; //取消改动数据
  650. })
  651. }else{
  652. return true; //没有动过数据
  653. }
  654. },
  655. afterEcho(data){
  656. this.form = data;
  657. this.oldForm = Object.assign({},data);
  658. this.checkDisabled = data.checkStatus === "录入"?false:true;
  659. this.recallDisabled = data.checkStatus === "审批提交"?true:false;
  660. this.option.column.forEach(item =>{
  661. if( item.prop == "remark" ){
  662. this.$set(item,"disabled",(this.auditDisabled || false))
  663. }else if( item.prop == "createUserName" || item.prop == "createTime" || item.prop == "sysNo"){
  664. this.$set(item,"disabled",true)
  665. }else{
  666. this.$set(item,"disabled",this.checkDisabled)
  667. }
  668. })
  669. if(data.itemsList){
  670. this.dataList = data.itemsList
  671. this.oldDataList = this.deepClone(data.itemsList)
  672. }
  673. },
  674. async openEdit() {
  675. //标签页保存key
  676. this.inDetailsKey(this.$route.name,this.detailData.lockData);
  677. //单据是否锁定
  678. if(!await this.checkLocks(this.detailData.lockData)){
  679. this.onLock(this.detailData.lockData); //上锁
  680. this.viewDisabled = false
  681. this.option = this.$options.data().option;
  682. }else{
  683. this.$message.warning('此单据已被锁定,请稍后再进行操作!')
  684. }
  685. },
  686. backToList() {
  687. //如果为审核页面 则直接返回
  688. if(this.viewDisabled || this.detailData.check || !this.detailData.lockData){
  689. this.$emit("goBack");
  690. return
  691. }
  692. if(contrastObj(this.form,this.oldForm) || contrastList(this.dataList,this.oldDataList)
  693. ){
  694. this.$confirm("是否保存当前页面?", "提示", {
  695. confirmButtonText: "保存",
  696. cancelButtonText: "取消",
  697. type: "warning",
  698. }).then(() => {
  699. this.editCustomer(true)
  700. }).catch(()=>{
  701. this.$emit("goBack");
  702. }).finally(()=>{
  703. if(this.form.id){
  704. this.unLock(this.detailData.lockData);
  705. this.leaveDetailsKey(this.$route.name);
  706. }
  707. })
  708. }else{
  709. this.$emit("goBack");
  710. if(this.form.id){
  711. this.unLock(this.detailData.lockData);
  712. this.leaveDetailsKey(this.$route.name);
  713. }
  714. }
  715. },
  716. //列保存触发
  717. async saveColumn() {
  718. const inSave = await this.saveColumnData(
  719. this.getColumnName(62),
  720. this.itemOption
  721. );
  722. if (inSave) {
  723. this.$message.success("保存成功");
  724. //关闭窗口
  725. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  726. }
  727. },
  728. async resetColumn() {
  729. const inSave = await this.delColumnData(
  730. this.getColumnName(62),
  731. itemOption
  732. );
  733. if (inSave) {
  734. this.$message.success("重置成功");
  735. this.itemOption = itemOption;
  736. //关闭窗口
  737. this.$refs.crud.$refs.dialogColumn.columnBox = false;
  738. }
  739. },
  740. cellStyle() {
  741. return "padding:0;height:40px;";
  742. },
  743. }
  744. }
  745. </script>
  746. <style lang="scss" scoped>
  747. ::v-deep .el-form-item {
  748. margin-bottom: 0;
  749. }
  750. .trading-form ::v-deep .el-form-item {
  751. margin-bottom: 8px !important;
  752. }
  753. .upper_right_button{
  754. display: flex;
  755. position: fixed;
  756. right: 12px;
  757. top: 47px;
  758. }
  759. </style>