billEdit.vue 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324
  1. <template>
  2. <div class="app-container zap-main">
  3. <header-bar :list="headerList"></header-bar>
  4. <el-row class="zap-margin-top">
  5. <div class="zap-title">基本信息</div>
  6. <el-row class="zap-form">
  7. <el-form ref="form" :model="form" :rules="rules" label-width="auto">
  8. <el-row>
  9. <el-col :span="12">
  10. <el-form-item label="账款类型" prop="wplIsInput">
  11. <el-radio-group class="zap-form-input--large" v-model="type" prop="type" :disabled="true">
  12. <el-radio-button label="00" v-if="type == '00'">应付账款</el-radio-button>
  13. <el-radio-button label="01" v-if="type == '01'">应收账款</el-radio-button>
  14. </el-radio-group>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :span="12">
  18. <el-form-item label="账款名称" prop="zbiName">
  19. <el-input class="zap-form-input--large" v-model="form.zbiName" clearable placeholder="请输入账款名称" maxlength="20" />
  20. </el-form-item>
  21. </el-col>
  22. </el-row>
  23. <el-col :span="12">
  24. <el-form-item label="应付方" prop="zbiPayerId">
  25. <el-input class="zap-form-input--large" v-model="form.payerName" maxlength="20" :disabled="true" v-if="
  26. company.scyId != form.zbiPayerId &&
  27. company.scyId != form.zbiPayeeId
  28. " />
  29. <el-select v-model="form.zbiPayerId" :disabled="true" filterable remote v-if="
  30. (type == '00' && company.scyId == form.zbiPayerId) ||
  31. (type == '00' && company.scyId == form.zbiPayeeId)
  32. ">
  33. <el-option :label="company.scyName" :value="company.scyId">
  34. </el-option>
  35. </el-select>
  36. <el-select
  37. class="zap-form-input--large"
  38. v-model="form.zbiPayerId"
  39. filterable
  40. clearable
  41. remote
  42. v-if="
  43. (type == '01' && company.scyId == form.zbiPayerId) ||
  44. (type == '01' && company.scyId == form.zbiPayeeId)
  45. ">
  46. <el-option v-for="(item, index) in companyRelList" :key="index" :label="
  47. item.launchScyId == company.scyId
  48. ? item.receiveScyName
  49. : item.launchScyName
  50. " :value="
  51. item.launchScyId == company.scyId
  52. ? item.receiveScyId
  53. : item.launchScyId
  54. ">
  55. </el-option>
  56. </el-select>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item label="应收方" prop="zbiPayeeId">
  61. <el-input class="zap-form-input--large" v-model="form.payeeName" maxlength="20" :disabled="true" v-if="
  62. company.scyId != form.zbiPayerId &&
  63. company.scyId != form.zbiPayeeId
  64. " />
  65. <el-select v-model="form.zbiPayeeId" :disabled="true" filterable remote v-if="
  66. (type == '01' && company.scyId == form.zbiPayerId) ||
  67. (type == '01' && company.scyId == form.zbiPayeeId)
  68. ">
  69. <el-option :label="company.scyName" :value="company.scyId">
  70. </el-option>
  71. </el-select>
  72. <el-select
  73. class="zap-form-input--large"
  74. v-model="form.zbiPayeeId"
  75. filterable
  76. clearable
  77. remote
  78. v-if="
  79. (type == '00' && company.scyId == form.zbiPayerId) ||
  80. (type == '00' && company.scyId == form.zbiPayeeId)
  81. ">
  82. <el-option v-for="(item, index) in companyRelList" :key="index" :label="
  83. item.launchScyId == company.scyId
  84. ? item.receiveScyName
  85. : item.launchScyName
  86. " :value="
  87. item.launchScyId == company.scyId
  88. ? item.receiveScyId
  89. : item.launchScyId
  90. ">
  91. </el-option>
  92. </el-select>
  93. </el-form-item>
  94. </el-col>
  95. <el-col :span="12">
  96. <el-form-item label="贸易日期" prop="zbiDate" size="large">
  97. <el-date-picker
  98. class="zap-form-input--large"
  99. v-model="form.zbiDate"
  100. clearable
  101. value-format="yyyy-MM-dd"
  102. type="date"
  103. placeholder="选择日期"
  104. :picker-options="pickerOptionsStart">
  105. </el-date-picker>
  106. </el-form-item>
  107. </el-col>
  108. <el-col :span="12">
  109. <el-form-item :label="
  110. type == '00'
  111. ? '预计付款日期'
  112. : type == '01'
  113. ? '预计收款日期'
  114. : '预计收/付款日期'
  115. " prop="zbiPayDate" size="large">
  116. <el-date-picker
  117. class="zap-form-input--large"
  118. v-model="form.zbiPayDate"
  119. clearable
  120. value-format="yyyy-MM-dd"
  121. type="date"
  122. placeholder="选择日期"
  123. :picker-options="pickerOptionsEnd">
  124. </el-date-picker>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="12">
  128. <el-form-item label="账款金额" size="large">
  129. <el-input class="zap-form-input--large" :disabled="true" :value="allAmount()" maxlength="20">
  130. <template slot="append">元</template>
  131. </el-input>
  132. </el-form-item>
  133. </el-col>
  134. <el-col :span="12">
  135. <el-form-item label="账款金额大写" size="large">
  136. <el-input class="zap-form-input--large" :disabled="true" :value="smallToBig(allAmount())">
  137. </el-input>
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="12">
  141. <el-form-item label="贸易合同编号" prop="zbiContractNo" size="large">
  142. <el-input class="zap-form-input--large" v-model="form.zbiContractNo" clearable placeholder="请输入贸易合同编号" maxlength="20" />
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="12">
  146. <el-form-item label="贸易商品/服务" size="large">
  147. <el-input class="zap-form-input--large" v-model="form.zbiService" clearable placeholder="请输入贸易商品/服务" maxlength="20" />
  148. </el-form-item>
  149. </el-col>
  150. <el-col :span="12">
  151. <el-form-item label="配送企业" size="large">
  152. <el-input class="zap-form-input--large" v-model="form.zbiDistributor" clearable placeholder="请输入配送企业" maxlength="20" />
  153. </el-form-item>
  154. </el-col>
  155. <el-col :span="12">
  156. <el-form-item label="配送订单号" size="large">
  157. <el-input class="zap-form-input--large" v-model="form.zbiOrderNo" clearable placeholder="请输入配送订单号" maxlength="20" />
  158. </el-form-item>
  159. </el-col>
  160. <el-row>
  161. <el-form-item label="备注">
  162. <el-input
  163. class="zap-form__textarea"
  164. v-model="form.zbiRemark"
  165. placeholder="请输入备注"
  166. :autosize="{ minRows: 2, maxRows: 4 }"
  167. maxlength="100"
  168. type="textarea" />
  169. </el-form-item>
  170. </el-row>
  171. </el-form>
  172. </el-row>
  173. </el-row>
  174. <el-row class="zap-margin-top">
  175. <div class="zap-title">发票列表</div>
  176. <div class="zap-form" style="padding-bottom: 20px;">
  177. <el-form ref="invoice" label-width="auto" :inline="true">
  178. <el-row type="flex" align="middle" justify="center">
  179. <el-col>
  180. <el-form-item label="合计:">{{
  181. handleInput(allAmount())
  182. }}</el-form-item>
  183. <el-form-item label="大写:">{{
  184. smallToBig(allAmount())
  185. }}</el-form-item>
  186. </el-col>
  187. <el-col>
  188. <el-form-item style="float: right">
  189. <el-button type="danger" @click="delInvoice">删除</el-button>
  190. </el-form-item>
  191. <el-form-item style="float: right">
  192. <el-button type="success" @click="openUpload()">上传/修改</el-button>
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. </el-form>
  197. <el-table
  198. :data="fileList"
  199. @selection-change="handleInvoiceSelectionChange"
  200. row-key="ziiId"
  201. default-expand-all
  202. :row-class-name="tableRowClassName"
  203. border
  204. stripe>
  205. <el-table-column type="selection" width="50" align="center" />
  206. <el-table-column label="发票代码" align="center" prop="ziiNo" maxlength="10" />
  207. <el-table-column label="发票号码" align="center" prop="ziiNumber" maxlength="10" />
  208. <el-table-column label="开票日期" align="center" prop="ziiDate" />
  209. <el-table-column label="购方识别号" align="center" prop="ziiPurchaserNo" />
  210. <el-table-column label="销方识别号" align="center" prop="ziiSellerNo" />
  211. <el-table-column label="合计金额" align="center" prop="ziiTotalAmount" />
  212. <el-table-column label="价税合计" align="center" prop="ziiAmount" />
  213. <el-table-column label="校验结果" align="center" prop="ziiCheckStt" :formatter="checkSttFormat" />
  214. <el-table-column label="附件" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
  215. <template slot-scope="scope">
  216. <el-button size="mini" type="text" @click="invoicePictureCardPreview(scope.row)">详情</el-button>
  217. </template>
  218. </el-table-column>
  219. </el-table>
  220. <!-- 上传附件 -->
  221. <el-dialog title="上传发票" :visible.sync="uploadOpen" width="500px" append-to-body>
  222. <el-upload
  223. class="upload-demo"
  224. drag
  225. ref="upload"
  226. :file-list="fileList"
  227. :auto-upload="true"
  228. :http-request="httpRequest"
  229. :before-remove="beforeRemove"
  230. :on-remove="invoiceRemove"
  231. :before-upload="beforeAvatarUpload"
  232. accept=".jpg,.jpeg,.png"
  233. action=""
  234. multiple>
  235. <i class="el-icon-upload"></i>
  236. <div class="el-upload__text">
  237. 将文件拖到此处,或<em>点击选择文件</em>
  238. </div>
  239. <div class="el-upload__tip">
  240. 按住Ctrl可同时多选,单个文件不能超过2mb
  241. </div>
  242. <div class="el-upload__tip">
  243. 严禁上传包含色情、暴力、反动等相关违法信息的文件。
  244. </div>
  245. </el-upload>
  246. <!-- <el-button type="primary" @click="submitUpload()"
  247. >点击上传</el-button
  248. > -->
  249. <el-button type="primary" @click="toCheck()">完成去验真</el-button>
  250. </el-dialog>
  251. <!-- 发票验真 -->
  252. <invoice-verification
  253. :open="open"
  254. :fileList="fileList"
  255. :invoice="invoice"
  256. :checkSttOptions="checkSttOptions"
  257. @openUploadInvoice="openUploadInvoice"
  258. @handleCheckAllChange="handleCheckAllChange"
  259. @changeInvoice="changeInvoice"
  260. @delInvoice="delInvoice"
  261. @toCheckAgian="toCheckAgian"
  262. @submitCheck="submitCheck"
  263. @invoicePictureCardPreview="invoicePictureCardPreview"
  264. @queryDouble="queryDouble"
  265. @close="open = false"
  266. ></invoice-verification>
  267. </div>
  268. </el-row>
  269. <el-row class="zap-margin-top">
  270. <div class="zap-title">贸易合同</div>
  271. <div class="zap-form" style="padding-bottom: 20px;">
  272. <el-form ref="contract" label-width="auto" :inline="true">
  273. </el-form>
  274. <el-upload
  275. :file-list="contractList"
  276. :auto-upload="true"
  277. :http-request="httpRequestContract"
  278. action=""
  279. ref="contractUpload"
  280. list-type="picture-card"
  281. accept=".jpg,.jpeg,.png"
  282. :before-upload="beforeUpload"
  283. :on-preview="invoicePictureCardPreview"
  284. :before-remove="beforeRemove"
  285. :on-remove="handleRemoveContract">
  286. <!-- 触发文件选择框的内容 -->
  287. <div slot="trigger" class="zap-contract-add__upload">
  288. <i class="el-icon-upload"></i>
  289. <div class="zap-upload__text">上传文件</div>
  290. </div>
  291. <div slot="tip" class="zap-contract-add__tip">
  292. 支持格式:JPG/PNG </br>
  293. 单个文件不能超过2MB
  294. </div>
  295. </el-upload>
  296. </div>
  297. </el-row>
  298. <el-row class="zap-margin-top">
  299. <div class="zap-title">物流附件</div>
  300. <div class="zap-form" style="padding-bottom: 20px;">
  301. <el-form ref="logistics" label-width="auto" :inline="true">
  302. </el-form>
  303. <el-upload
  304. :file-list="logisticsList"
  305. :auto-upload="true"
  306. :http-request="httpRequestLogistics"
  307. action=""
  308. ref="logisticsUpload"
  309. list-type="picture-card"
  310. accept=".jpg,.jpeg,.png"
  311. :before-upload="beforeUpload"
  312. :on-preview="invoicePictureCardPreview"
  313. :before-remove="beforeRemove"
  314. :on-remove="handleRemoveLogistics">
  315. <!-- 触发文件选择框的内容 -->
  316. <div slot="trigger" class="zap-contract-add__upload">
  317. <i class="el-icon-upload"></i>
  318. <div class="zap-upload__text">上传文件</div>
  319. </div>
  320. <div slot="tip" class="zap-contract-add__tip">
  321. 支持格式:JPG/PNG </br>
  322. 单个文件不能超过2MB
  323. </div>
  324. </el-upload>
  325. </div>
  326. </el-row>
  327. <el-row class="zap-margin-top">
  328. <div class="zap-title">其他附件</div>
  329. <div class="zap-form" style="padding-bottom: 20px;">
  330. <el-form ref="other" label-width="auto" :inline="true">
  331. </el-form>
  332. <el-upload
  333. :file-list="otherList"
  334. :auto-upload="true"
  335. :http-request="httpRequestOther"
  336. action=""
  337. ref="otherUpload"
  338. list-type="picture-card"
  339. accept=".jpg,.jpeg,.png"
  340. :before-upload="beforeUpload"
  341. :on-preview="invoicePictureCardPreview"
  342. :before-remove="beforeRemove"
  343. :on-remove="handleRemoveOther">
  344. <!-- 触发文件选择框的内容 -->
  345. <div slot="trigger" class="zap-contract-add__upload">
  346. <i class="el-icon-upload"></i>
  347. <div class="zap-upload__text">上传文件</div>
  348. </div>
  349. <div slot="tip" class="zap-contract-add__tip">
  350. 支持格式:JPG/PNG </br>
  351. 单个文件不能超过2MB
  352. </div>
  353. </el-upload>
  354. </div>
  355. </el-row>
  356. <!-- 查看图片 -->
  357. <el-dialog :visible.sync="invoiceVisible">
  358. <img width="100%" :src="invoiceImageUrl" alt="" />
  359. </el-dialog>
  360. <el-row type="flex" justify="center" align="middle" style="height: 82px;">
  361. <el-button type="primary" @click="submit()">提交</el-button>
  362. </el-row>
  363. </div>
  364. </template>
  365. <script>
  366. import {
  367. getBill,
  368. getInvoice,
  369. addBill,
  370. getInvoiceText,
  371. invoiceVerification,
  372. delInvoice,
  373. uploadBillFile,
  374. getFile,
  375. delFile,
  376. commitBill,
  377. getAmount,
  378. queryDouble,
  379. } from "@/api/service/bill/bill";
  380. import {
  381. getOwnCompany,
  382. companyRelList
  383. } from "@/api/common/company";
  384. import {
  385. amtformat
  386. } from "@/utils/amtCommon";
  387. import {
  388. getToken
  389. } from "@/utils/auth";
  390. import InvoiceVerification from "@/components/InvoiceVerification"
  391. export default {
  392. name: "billEdit",
  393. components: {
  394. InvoiceVerification
  395. },
  396. data() {
  397. return {
  398. // 选中数组
  399. ids: [],
  400. // 非单个禁用
  401. single: true,
  402. // 非多个禁用
  403. multiple: true,
  404. // 是否显示弹出层
  405. open: false,
  406. uploadOpen: false,
  407. // 查询参数
  408. queryParams: {},
  409. // 表单参数
  410. form: {},
  411. // 表单校验
  412. rules: {
  413. zbiName: [{
  414. required: true,
  415. message: "账款名称不能为空",
  416. trigger: ["blur", "change"],
  417. },
  418. {
  419. pattern: /^[\u4E00-\u9FA5A-Za-z0-9]+$/,
  420. message: "账款名称只能包含中文、英文、数字",
  421. trigger: ["blur", "change"],
  422. },
  423. ],
  424. zbiPayerId: [{
  425. required: true,
  426. message: "应付方不能为空",
  427. trigger: ["blur", "change"],
  428. }, ],
  429. zbiDate: [{
  430. required: true,
  431. message: "贸易日期不能为空",
  432. trigger: ["blur", "change"],
  433. }, ],
  434. zbiPayDate: [{
  435. required: true,
  436. message: "预计收/付款日期不能为空",
  437. trigger: ["blur", "change"],
  438. }, ],
  439. zbiPayeeId: [{
  440. required: true,
  441. message: "应收方不能为空",
  442. trigger: ["blur", "change"],
  443. }, ],
  444. zbiAmount: [{
  445. required: true,
  446. message: "贸易金额不能为空",
  447. trigger: ["blur", "change"],
  448. },
  449. {
  450. pattern: /^(?:0|[1-9]\d{0,13})(?:\.\d{1,2})?$/,
  451. message: "请输入正确的金额",
  452. trigger: ["blur", "change"],
  453. },
  454. ],
  455. zbiContractNo: [{
  456. required: true,
  457. message: "合同编号不能为空",
  458. trigger: ["blur", "change"],
  459. },
  460. {
  461. pattern: /^[a-zA-Z0-9]+$/,
  462. message: "请输入数字或英文",
  463. trigger: ["blur", "change"],
  464. },
  465. ],
  466. },
  467. //类型
  468. type: "00",
  469. //贸易合同
  470. contractList: [],
  471. //物流附件
  472. logisticsList: [],
  473. //其他附件
  474. otherList: [],
  475. //发票列表
  476. fileList: [],
  477. //全选状态
  478. checkAll: false,
  479. //全选状态
  480. isIndeterminate: false,
  481. //选中值
  482. checkedInvoice: [],
  483. //发票对象
  484. invoice: {},
  485. //合计金额
  486. totalPrice: 0,
  487. //验证结果
  488. checkSttOptions: [],
  489. //图片路径
  490. invoiceImageUrl: null,
  491. //图片显示
  492. invoiceVisible: false,
  493. //等待框
  494. fullscreenLoading: false,
  495. //链属企业
  496. companyRelList: [],
  497. //链属企业
  498. company: {},
  499. pickerOptionsStart: {
  500. disabledDate: (time) => {
  501. if (this.form.zbiPayDate) {
  502. return (
  503. time.getTime() >
  504. new Date(this.form.zbiPayDate).getTime() -
  505. 14 * 24 * 60 * 60 * 1000
  506. );
  507. }
  508. },
  509. },
  510. pickerOptionsEnd: {
  511. disabledDate: (time) => {
  512. if (this.form.zbiDate) {
  513. return (
  514. time.getTime() <
  515. new Date(this.form.zbiDate).getTime() + 13 * 24 * 60 * 60 * 1000
  516. );
  517. }
  518. },
  519. },
  520. };
  521. },
  522. computed: {
  523. headerList() {
  524. return [{
  525. icon: require('../../../assets/images/components/headerBar/icon_creater.png'),
  526. label: '创建人:',
  527. value: this.form.createUser
  528. },
  529. {
  530. icon: require('../../../assets/images/components/headerBar/icon_calendar.png'),
  531. label: '创建日期:',
  532. value: this.parseTime(new Date(this.form.createTime))
  533. },
  534. {
  535. icon: require('../../../assets/images/components/headerBar/icon_list.png'),
  536. label: '编号:',
  537. value: this.form.zbiNumber
  538. },
  539. ]
  540. }
  541. },
  542. created() {
  543. const zbiId = this.$route.params && this.$route.params.zbiId;
  544. this.fullscreenLoading = true;
  545. getOwnCompany().then((response) => {
  546. this.company = response.data;
  547. });
  548. this.getCompanyRel();
  549. this.getDetail(zbiId);
  550. getInvoice(zbiId).then((response) => {
  551. response.data.forEach((element) => {
  552. element.url = element.url + "/" + getToken();
  553. });
  554. this.fileList = response.data;
  555. this.invoice = this.fileList[0] ? this.fileList[0] : {};
  556. this.ids = [];
  557. });
  558. getFile("0", zbiId).then((response) => {
  559. response.data.forEach((element) => {
  560. element.url = element.url + "/" + getToken();
  561. });
  562. this.contractList = response.data;
  563. });
  564. //查询物流
  565. getFile("1", zbiId).then((response) => {
  566. response.data.forEach((element) => {
  567. element.url = element.url + "/" + getToken();
  568. });
  569. this.logisticsList = response.data;
  570. });
  571. //查询其他附件
  572. getFile("2", zbiId).then((response) => {
  573. response.data.forEach((element) => {
  574. element.url = element.url + "/" + getToken();
  575. });
  576. this.otherList = response.data;
  577. });
  578. this.getDicts("zc_invoice_checkStt").then((response) => {
  579. this.checkSttOptions = response.data;
  580. });
  581. },
  582. activated() {},
  583. methods: {
  584. //查询往来账款详情
  585. getDetail(zbiId) {
  586. const loading = this.$loading({
  587. lock: true,
  588. text: "Loading",
  589. spinner: "el-icon-loading",
  590. background: "rgba(0, 0, 0, 0.7)",
  591. });
  592. getBill(zbiId)
  593. .then((response) => {
  594. this.form = response.data;
  595. if (this.form.zbiPayerId == this.company.scyId) {
  596. this.type = "00";
  597. } else {
  598. this.type = "01";
  599. }
  600. loading.close();
  601. })
  602. .catch(() => {
  603. loading.close();
  604. });
  605. },
  606. //切换账款类型
  607. changePayer(val) {
  608. if (val == "00") {
  609. this.form.zbiPayerId = this.company.scyId;
  610. this.form.zbiPayeeId = null;
  611. } else if (val == "01") {
  612. this.form.zbiPayerId = null;
  613. this.form.zbiPayeeId = this.company.scyId;
  614. }
  615. },
  616. //查询链属企业
  617. getCompanyRel(val) {
  618. this.queryParams.companyName = val;
  619. companyRelList(this.queryParams).then((response) => {
  620. this.companyRelList = response.data;
  621. });
  622. },
  623. //全选
  624. handleCheckAllChange(val) {
  625. this.checkedInvoice = val ? this.fileList : [];
  626. this.ids = val ? this.fileList.map((item) => item.id) : [];
  627. this.isIndeterminate = false;
  628. },
  629. // 多选框选中数据
  630. handleInvoiceSelectionChange(selection) {
  631. this.ids = selection.map((item) => item.id);
  632. this.single = selection.length !== 1;
  633. this.multiple = !selection.length;
  634. },
  635. //发票上传窗口
  636. openUpload() {
  637. this.open = true;
  638. },
  639. //上传
  640. submitUpload() {
  641. this.$refs.upload.submit();
  642. },
  643. //上传发票窗口
  644. openUploadInvoice() {
  645. this.uploadOpen = true;
  646. },
  647. //判重验证
  648. queryDouble() {
  649. const loading = this.$loading({
  650. lock: true,
  651. text: "Loading",
  652. spinner: "el-icon-loading",
  653. background: "rgba(0, 0, 0, 0.7)",
  654. });
  655. if (
  656. this.invoice &&
  657. this.invoice.ziiCheckStt != "1"
  658. ) {
  659. queryDouble(this.invoice).then((response) => {
  660. this.fileList.forEach((file) => {
  661. if (response.id == file.id) {
  662. file.ziiCheckStt = response.ziiCheckStt;
  663. file.zbiName = response.zbiName;
  664. }
  665. });
  666. // this.invoice = this.fileList[0] ? this.fileList[0] : {};
  667. loading.close();
  668. }).catch((response) => {
  669. loading.close();
  670. });
  671. } else {
  672. loading.close();
  673. }
  674. },
  675. //去验真
  676. toCheck() {
  677. this.uploadOpen = false;
  678. const loading = this.$loading({
  679. lock: true,
  680. text: "Loading",
  681. spinner: "el-icon-loading",
  682. background: "rgba(0, 0, 0, 0.7)",
  683. });
  684. let fd = new FormData(); // FormData 对象
  685. fd.append("fileList", JSON.stringify(this.fileList)); // 文件对象
  686. invoiceVerification(fd)
  687. .then((response) => {
  688. response.forEach((element) => {
  689. this.fileList.forEach((file) => {
  690. if (element.id == file.id) {
  691. file.ziiCheckStt = element.ziiCheckStt;
  692. file.zbiName = element.zbiName;
  693. }
  694. });
  695. });
  696. this.invoice = this.fileList[0] ? this.fileList[0] : {};
  697. loading.close();
  698. })
  699. .catch(() => {
  700. loading.close();
  701. });
  702. },
  703. //重新验真
  704. toCheckAgian() {
  705. const loading = this.$loading({
  706. lock: true,
  707. text: "Loading",
  708. spinner: "el-icon-loading",
  709. background: "rgba(0, 0, 0, 0.7)",
  710. });
  711. let checkList = this.checkedInvoice.filter((element) => {
  712. return element.ziiCheckStt == "0";
  713. });
  714. let fd = new FormData(); // FormData 对象
  715. fd.append("fileList", JSON.stringify(checkList)); // 文件对象
  716. invoiceVerification(fd)
  717. .then((response) => {
  718. response.forEach((element) => {
  719. this.fileList.forEach((file) => {
  720. if (element.id == file.id) {
  721. file.ziiCheckStt = element.ziiCheckStt;
  722. file.zbiName = element.zbiName;
  723. }
  724. });
  725. });
  726. loading.close();
  727. })
  728. .catch(() => {
  729. loading.close();
  730. });
  731. },
  732. //表格置灰
  733. tableRowClassName({
  734. row,
  735. rowIndex
  736. }) {
  737. if (row.ziiCheckStt != "1") {
  738. return "warning-row";
  739. }
  740. return "";
  741. },
  742. //切换发票
  743. changeInvoice(item) {
  744. this.invoice = item;
  745. },
  746. //手动上传发票触发
  747. httpRequest(param) {
  748. const loading = this.$loading({
  749. lock: true,
  750. text: "Loading",
  751. spinner: "el-icon-loading",
  752. background: "rgba(0, 0, 0, 0.7)",
  753. });
  754. let fileObj = param.file; // 相当于input里取得的files
  755. let fd = new FormData(); // FormData 对象
  756. fd.append("file", fileObj); // 文件对象
  757. fd.append("zbiId", this.form.zbiId); //文件类型
  758. getInvoiceText(fd)
  759. .then((response) => {
  760. response.data.url = response.data.url + "/" + getToken();
  761. var flag = true;
  762. this.fileList.forEach((element) => {
  763. if (element.ziiNo == response.data.ziiNo) {
  764. flag = false;
  765. }
  766. });
  767. if (flag) {
  768. this.fileList.push(response.data);
  769. } else {
  770. let uid = fileObj.uid; // 关键作用代码,去除文件列表失败文件
  771. let idx = this.$refs.upload.uploadFiles.findIndex(
  772. (item) => item.uid === uid
  773. ); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)
  774. this.$refs.upload.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件
  775. this.$message.error("检测发票重复上传,请检查后重试");
  776. }
  777. loading.close();
  778. })
  779. .catch(() => {
  780. let uid = fileObj.uid; // 关键作用代码,去除文件列表失败文件
  781. let idx = this.$refs.upload.uploadFiles.findIndex(
  782. (item) => item.uid === uid
  783. ); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)
  784. this.$refs.upload.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件
  785. loading.close();
  786. });
  787. },
  788. beforeUpload(files) {
  789. var testmsg = files.name.substring(files.name.lastIndexOf(".") + 1);
  790. const extension = testmsg === "jpg";
  791. const extension2 = testmsg === "jpeg";
  792. const extension3 = testmsg === "png";
  793. if (!extension && !extension2 && !extension3) {
  794. this.$message.warning(`请选择图片格式文件`);
  795. }
  796. return extension || extension2 || extension3;
  797. },
  798. //上传前校验
  799. beforeAvatarUpload(file) {
  800. const isJPG = file.type === "image/jpeg" || file.type === "image/png";
  801. const isLt2M = file.size / 1024 / 1024 < 2;
  802. if (!isJPG) {
  803. this.$message.error("上传图片只能是 JPG/PNG 格式");
  804. }
  805. if (!isLt2M) {
  806. this.$message.error("上传图片大小不能超过 2MB");
  807. }
  808. return isJPG && isLt2M;
  809. },
  810. //上传合同
  811. submitUploadContract() {
  812. this.$refs.contractUpload.submit();
  813. },
  814. //上传物流
  815. submitUploadLogistics() {
  816. this.$refs.logisticsUpload.submit();
  817. },
  818. //上传其他
  819. submitUploadOther() {
  820. this.$refs.otherUpload.submit();
  821. },
  822. //手动上传合同触发
  823. httpRequestContract(param) {
  824. const loading = this.$loading({
  825. lock: true,
  826. text: "Loading",
  827. spinner: "el-icon-loading",
  828. background: "rgba(0, 0, 0, 0.7)",
  829. });
  830. let fileObj = param.file; // 相当于input里取得的files
  831. let fd = new FormData(); // FormData 对象
  832. fd.append("file", fileObj); // 文件对象
  833. fd.append("zbiId", this.form.zbiId); //文件类型
  834. fd.append("type", "0"); //文件类型
  835. uploadBillFile(fd)
  836. .then((response) => {
  837. response.data.url = response.data.url + "/" + getToken();
  838. this.contractList.push(response.data);
  839. loading.close();
  840. })
  841. .catch(() => {
  842. let uid = fileObj.uid; // 关键作用代码,去除文件列表失败文件
  843. let idx = this.$refs.contractUpload.uploadFiles.findIndex(
  844. (item) => item.uid === uid
  845. ); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)
  846. this.$refs.contractUpload.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件
  847. loading.close();
  848. });
  849. },
  850. //手动上传物流触发
  851. httpRequestLogistics(param) {
  852. const loading = this.$loading({
  853. lock: true,
  854. text: "Loading",
  855. spinner: "el-icon-loading",
  856. background: "rgba(0, 0, 0, 0.7)",
  857. });
  858. let fileObj = param.file; // 相当于input里取得的files
  859. let fd = new FormData(); // FormData 对象
  860. fd.append("file", fileObj); // 文件对象
  861. fd.append("zbiId", this.form.zbiId); //文件类型
  862. fd.append("type", "1"); //文件类型
  863. uploadBillFile(fd)
  864. .then((response) => {
  865. response.data.url = response.data.url + "/" + getToken();
  866. this.logisticsList.push(response.data);
  867. loading.close();
  868. })
  869. .catch(() => {
  870. let uid = fileObj.uid; // 关键作用代码,去除文件列表失败文件
  871. let idx = this.$refs.logisticsUpload.uploadFiles.findIndex(
  872. (item) => item.uid === uid
  873. ); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)
  874. this.$refs.logisticsUpload.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件
  875. loading.close();
  876. });
  877. },
  878. //手动上传其他触发
  879. httpRequestOther(param) {
  880. const loading = this.$loading({
  881. lock: true,
  882. text: "Loading",
  883. spinner: "el-icon-loading",
  884. background: "rgba(0, 0, 0, 0.7)",
  885. });
  886. let fileObj = param.file; // 相当于input里取得的files
  887. let fd = new FormData(); // FormData 对象
  888. fd.append("file", fileObj); // 文件对象
  889. fd.append("zbiId", this.form.zbiId); //文件类型
  890. fd.append("type", "2"); //文件类型
  891. uploadBillFile(fd)
  892. .then((response) => {
  893. response.data.url = response.data.url + "/" + getToken();
  894. this.otherList.push(response.data);
  895. loading.close();
  896. })
  897. .catch(() => {
  898. let uid = fileObj.uid; // 关键作用代码,去除文件列表失败文件
  899. let idx = this.$refs.otherUpload.uploadFiles.findIndex(
  900. (item) => item.uid === uid
  901. ); // 关键作用代码,去除文件列表失败文件(uploadFiles为el-upload中的ref值)
  902. this.$refs.otherUpload.uploadFiles.splice(idx, 1); // 关键作用代码,去除文件列表失败文件
  903. loading.close();
  904. });
  905. },
  906. //删除图片
  907. beforeRemove(file, fileList) {
  908. let a = true;
  909. if (file && file.status === "success") {
  910. a = this.$confirm(`确定移除 ${file.name}?`);
  911. }
  912. return a;
  913. },
  914. //删除贸易合同
  915. handleRemoveContract(file, fileList) {
  916. var self = this;
  917. // if (self.contractList) {
  918. // const loading = this.$loading({
  919. // lock: true,
  920. // text: 'Loading',
  921. // spinner: 'el-icon-loading',
  922. // background: 'rgba(0, 0, 0, 0.7)'
  923. // });
  924. // delFile(file.id).then(function () {
  925. self.contractList = self.contractList.reduce((total, current) => {
  926. current.id !== file.id && total.push(current);
  927. return total;
  928. }, []);
  929. // loading.close();
  930. // }).catch(() => {
  931. // loading.close();
  932. // });
  933. // }
  934. },
  935. //删除物流附件
  936. handleRemoveLogistics(file, fileList) {
  937. // var self = this
  938. // if (this.logisticsList) {
  939. // const loading = this.$loading({
  940. // lock: true,
  941. // text: 'Loading',
  942. // spinner: 'el-icon-loading',
  943. // background: 'rgba(0, 0, 0, 0.7)'
  944. // });
  945. // delFile(file.id).then(function () {
  946. self.logisticsList = self.logisticsList.reduce((total, current) => {
  947. current.id !== file.id && total.push(current);
  948. return total;
  949. }, []);
  950. // loading.close();
  951. // }).catch(() => {
  952. // loading.close();
  953. // });
  954. // }
  955. },
  956. //删除其他附件
  957. handleRemoveOther(file, fileList) {
  958. // var self = this
  959. // if (this.otherList) {
  960. // const loading = this.$loading({
  961. // lock: true,
  962. // text: 'Loading',
  963. // spinner: 'el-icon-loading',
  964. // background: 'rgba(0, 0, 0, 0.7)'
  965. // });
  966. // delFile(file.id).then(function () {
  967. self.otherList = self.otherList.reduce((total, current) => {
  968. current.id !== file.id && total.push(current);
  969. return total;
  970. }, []);
  971. // loading.close();
  972. // }).catch(() => {
  973. // loading.close();
  974. // });
  975. // }
  976. },
  977. //删除附件
  978. delFile(row) {
  979. var self = this;
  980. const ids = row.id || this.ids;
  981. self.fullscreenLoading = true;
  982. delFile(ids).then(function () {
  983. self.fullscreenLoading = false;
  984. });
  985. },
  986. //查看图片
  987. invoicePictureCardPreview(file) {
  988. this.invoiceImageUrl = file.url;
  989. this.invoiceVisible = true;
  990. },
  991. //删除发票
  992. invoiceRemove(file, fileList) {
  993. var self = this;
  994. if (file && file.status === "success") {
  995. this.fileList = this.fileList.filter((item) => {
  996. if (item.uid !== file.uid) {
  997. return item;
  998. } else {
  999. // const loading = this.$loading({
  1000. // lock: true,
  1001. // text: 'Loading',
  1002. // spinner: 'el-icon-loading',
  1003. // background: 'rgba(0, 0, 0, 0.7)'
  1004. // });
  1005. // delFile(item.id)
  1006. // .then(function () {
  1007. // loading.close();
  1008. // this.msgSuccess("删除成功");
  1009. // })
  1010. // .catch(() => {
  1011. // loading.close();
  1012. // });
  1013. }
  1014. });
  1015. }
  1016. },
  1017. //删除发票
  1018. delInvoice(row) {
  1019. var self = this;
  1020. const ids = row.id ? [row.id] : this.ids;
  1021. if (ids && ids.length != 0) {
  1022. this.$confirm("是否确认删除此数据项?", "警告", {
  1023. confirmButtonText: "确定",
  1024. cancelButtonText: "取消",
  1025. type: "warning",
  1026. })
  1027. // .then(function () {
  1028. // self.fullscreenLoading = true;
  1029. // return delFile(ids);
  1030. // })
  1031. .then(() => {
  1032. // self.fullscreenLoading = false;
  1033. ids.forEach((element) => {
  1034. self.fileList = self.fileList.reduce((total, current) => {
  1035. current.id !== element && total.push(current);
  1036. return total;
  1037. }, []);
  1038. });
  1039. this.msgSuccess("删除成功");
  1040. });
  1041. }
  1042. },
  1043. //确认发票
  1044. submitCheck() {
  1045. this.open = false;
  1046. },
  1047. //发票合计
  1048. allAmount() {
  1049. var strarr = [0.0];
  1050. for (let i in this.fileList) {
  1051. if (this.fileList[i]["ziiCheckStt"] == "1" && !!(this.fileList[i]["ziiAmount"])) {
  1052. strarr.push(this.fileList[i]["ziiAmount"]);
  1053. }
  1054. }
  1055. return (Math.round(eval(strarr.join("+")) * 100) / 100).toFixed(2); //结果
  1056. // return this.handleInput(eval(strarr.join("+"))); //结果
  1057. },
  1058. // 结束
  1059. submit() {
  1060. this.$refs["form"].validate((valid) => {
  1061. if (valid) {
  1062. this.form.zbiAmount = this.allAmount();
  1063. this.form.fileList = this.fileList;
  1064. this.form.contractList = this.contractList;
  1065. this.form.logisticsList = this.logisticsList;
  1066. this.form.otherList = this.otherList;
  1067. const loading = this.$loading({
  1068. lock: true,
  1069. text: "Loading",
  1070. spinner: "el-icon-loading",
  1071. background: "rgba(0, 0, 0, 0.7)",
  1072. });
  1073. commitBill(this.form)
  1074. .then((response) => {
  1075. loading.close();
  1076. this.msgSuccess("修改账款成功");
  1077. this.$store.dispatch("tagsView/delView", this.$route);
  1078. this.$router.go(-1);
  1079. })
  1080. .catch(() => {
  1081. loading.close();
  1082. });
  1083. } else {
  1084. this.$message({
  1085. message: "账款基本信息未完善,请检查确认",
  1086. type: "warning",
  1087. });
  1088. }
  1089. });
  1090. },
  1091. //校验结果字典
  1092. checkSttFormat(row, column) {
  1093. return this.selectDictLabel(this.checkSttOptions, row.ziiCheckStt);
  1094. },
  1095. /* 金额展示 */
  1096. handleInput(str) {
  1097. return amtformat(str, 2, ".", ",");
  1098. },
  1099. /* // 将数字金额转换为大写金额 */
  1100. smallToBig(money) {
  1101. // 将数字金额转换为大写金额
  1102. var cnNums = new Array(
  1103. "零",
  1104. "壹",
  1105. "贰",
  1106. "叁",
  1107. "肆",
  1108. "伍",
  1109. "陆",
  1110. "柒",
  1111. "捌",
  1112. "玖"
  1113. ); //汉字的数字
  1114. var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
  1115. var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
  1116. var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
  1117. var cnInteger = "整"; //整数金额时后面跟的字符
  1118. var cnIntLast = "元"; //整数完以后的单位
  1119. //最大处理的数字
  1120. var maxNum = 999999999999999.9999;
  1121. var integerNum; //金额整数部分
  1122. var decimalNum; //金额小数部分
  1123. //输出的中文金额字符串
  1124. var chineseStr = "";
  1125. var parts; //分离金额后用的数组,预定义
  1126. if (money == "" || money == null || money == undefined) {
  1127. return "零元零角零分";
  1128. }
  1129. money = parseFloat(money);
  1130. if (money >= maxNum) {
  1131. //超出最大处理数字
  1132. return "超出最大处理数字";
  1133. }
  1134. if (money == 0) {
  1135. chineseStr = cnNums[0] + cnIntLast + cnInteger;
  1136. return chineseStr;
  1137. }
  1138. //四舍五入保留两位小数,转换为字符串
  1139. money = Math.round(money * 100).toString();
  1140. integerNum = money.substr(0, money.length - 2);
  1141. decimalNum = money.substr(money.length - 2);
  1142. //获取整型部分转换
  1143. if (parseInt(integerNum, 10) > 0) {
  1144. var zeroCount = 0;
  1145. var IntLen = integerNum.length;
  1146. for (var i = 0; i < IntLen; i++) {
  1147. var n = integerNum.substr(i, 1);
  1148. var p = IntLen - i - 1;
  1149. var q = p / 4;
  1150. var m = p % 4;
  1151. if (n == "0") {
  1152. zeroCount++;
  1153. } else {
  1154. if (zeroCount > 0) {
  1155. chineseStr += cnNums[0];
  1156. }
  1157. //归零
  1158. zeroCount = 0;
  1159. chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
  1160. }
  1161. if (m == 0 && zeroCount < 4) {
  1162. chineseStr += cnIntUnits[q];
  1163. }
  1164. }
  1165. chineseStr += cnIntLast;
  1166. }
  1167. //小数部分
  1168. if (decimalNum != "") {
  1169. var decLen = decimalNum.length;
  1170. for (var i = 0; i < decLen; i++) {
  1171. var n = decimalNum.substr(i, 1);
  1172. if (n != "0") {
  1173. chineseStr += cnNums[Number(n)] + cnDecUnits[i];
  1174. }
  1175. }
  1176. }
  1177. if (chineseStr == "") {
  1178. chineseStr += cnNums[0] + cnIntLast + cnInteger;
  1179. } else if (decimalNum == "" || /^0*$/.test(decimalNum)) {
  1180. chineseStr += cnInteger;
  1181. }
  1182. return chineseStr;
  1183. },
  1184. },
  1185. };
  1186. </script>
  1187. <style>
  1188. .el-table .warning-row {
  1189. background: rgb(223, 223, 223);
  1190. }
  1191. </style><style lang="scss" scoped>
  1192. .zap-title {
  1193. padding: 25px;
  1194. font-size: 16px;
  1195. color: #333333;
  1196. background-color: #ffffff;
  1197. }
  1198. ::v-deep .el-radio-button__inner {
  1199. display: flex;
  1200. align-items: center;
  1201. justify-content: center;
  1202. width: 100px;
  1203. height: 35px;
  1204. padding: 0;
  1205. border: 1px solid #e0e0e0;
  1206. }
  1207. ::v-deep .el-radio-button:first-child .el-radio-button__inner {
  1208. margin-right: 20px;
  1209. border-radius: 17px;
  1210. }
  1211. ::v-deep .el-radio-button:last-child .el-radio-button__inner {
  1212. border-radius: 17px;
  1213. }
  1214. ::v-deep .el-radio-button__orig-radio:checked+.el-radio-button__inner {
  1215. color: #4280f2;
  1216. background: #ecf2fe;
  1217. border-color: #b3ccfa;
  1218. box-shadow: none;
  1219. }
  1220. .zap-form {
  1221. padding: 0 25px;
  1222. background-color: #ffffff;
  1223. }
  1224. .zap-table ::v-deep .el-form-item__content {
  1225. width: 100%;
  1226. }
  1227. .zap-contract-add__upload {
  1228. display: flex;
  1229. flex-direction: column;
  1230. justify-content: center;
  1231. align-items: center;
  1232. width: 148px;
  1233. height: 148px;
  1234. border: dashed 1px #e0e0e0;
  1235. background-color: #f4f5f6;
  1236. }
  1237. ::v-deep .el-upload--picture-card {
  1238. border: none;
  1239. }
  1240. ::v-deep .el-icon-upload {
  1241. font-size: 32px;
  1242. color: #02c464;
  1243. }
  1244. .zap-upload__text {
  1245. line-height: 1;
  1246. margin-top: 12px;
  1247. font-size: 12px;
  1248. color: #333333;
  1249. }
  1250. .zap-contract-add__tip {
  1251. width: 140px;
  1252. margin-top: 15px;
  1253. line-height: 19px;
  1254. font-size: 12px;
  1255. color: #999999;
  1256. }
  1257. // 设置缩略图模版。
  1258. .zap-contract-add__thumbnail {
  1259. position: relative;
  1260. width: 140px;
  1261. height: 140px;
  1262. cursor: pointer;
  1263. }
  1264. .zap-contract-add__thumbnail {
  1265. display: flex;
  1266. flex-direction: column;
  1267. align-items: center;
  1268. justify-content: center;
  1269. }
  1270. .zap-contract-add__fileimg {
  1271. width: 56px;
  1272. }
  1273. .zap-contractadd__filename {
  1274. margin-top: 12px;
  1275. line-height: 19px;
  1276. font-size: 14px;
  1277. color: #333333;
  1278. overflow: hidden; // 超出的文本隐藏
  1279. text-overflow: ellipsis; // 溢出用省略号显示
  1280. display: -webkit-box; // 将对象作为弹性伸缩盒子模型显示。
  1281. -webkit-line-clamp: 2; // 这个属性不是css的规范属性,需要组合上面两个属性,表示显示的行数。
  1282. -webkit-box-orient: vertical; // 从上到下垂直排列子元素(设置伸缩盒子的子元素排列方式)
  1283. }
  1284. .zap-contract-add__delete {
  1285. position: absolute;
  1286. top: 0;
  1287. right: 10px;
  1288. }
  1289. ::v-deep .el-icon-error {
  1290. font-size: 20px;
  1291. color: #f41d27;
  1292. }
  1293. .zap-contract-add__buttons {
  1294. padding: 30px;
  1295. text-align: center;
  1296. }
  1297. </style>