ExpenseComponent.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. <template>
  2. <div>
  3. <!-- 新增弹出框 -->
  4. <el-dialog
  5. class="dialog"
  6. :title="title"
  7. :close-on-click-modal="false"
  8. :before-close="resetForm"
  9. :visible.sync="dialogFormVisible"
  10. width="60%"
  11. >
  12. <el-form
  13. :model="formData"
  14. :rules="type == 1 ? externalRules : interiorRules"
  15. ref="formData"
  16. label-width="130px"
  17. size="small"
  18. class="frame"
  19. >
  20. <el-row v-if="type == 1">
  21. <el-col :span="12">
  22. <el-form-item label="账户类别" prop="outerFlag">
  23. <el-select
  24. v-model="formData.outerFlag"
  25. placeholder="请选择账户类别"
  26. @change="outChange"
  27. >
  28. <el-option label="内部账户" value="0"></el-option>
  29. <el-option label="外部账户" value="1"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="12">
  34. <el-form-item label="户名" prop="accountName">
  35. <el-input
  36. v-model="formData.accountName"
  37. autocomplete="off"
  38. ></el-input>
  39. </el-form-item>
  40. </el-col>
  41. </el-row>
  42. <el-row v-if="type == 1 && formData.outerFlag == 0">
  43. <el-col :span="12">
  44. <el-form-item label="营业性质" prop="businessQuality">
  45. <el-select
  46. v-model="formData.businessQuality"
  47. placeholder="请选择营业性质"
  48. >
  49. <el-option
  50. v-for="(item, index) in nature_businessData"
  51. :key="index + 'yyxz'"
  52. :label="item.label"
  53. :value="item.value"
  54. ></el-option>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12">
  59. <el-form-item label="成立日期" prop="establishTime">
  60. <el-date-picker
  61. v-model="formData.establishTime"
  62. type="date"
  63. value-format="yyyy-MM-dd"
  64. placeholder="选择日期"
  65. >
  66. </el-date-picker>
  67. </el-form-item>
  68. </el-col>
  69. </el-row>
  70. <el-row v-if="type == 1 && formData.outerFlag == 0">
  71. <el-col :span="12">
  72. <el-form-item label="所属地" prop="owned">
  73. <el-input v-model="formData.owned" autocomplete="off"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="12">
  77. <el-form-item label="法人" prop="juridicalPerson">
  78. <el-input
  79. v-model="formData.juridicalPerson"
  80. autocomplete="off"
  81. ></el-input>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row v-if="type == 1 && formData.outerFlag == 0">
  86. <el-col :span="12">
  87. <el-form-item label="开票员" prop="biller">
  88. <el-input v-model="formData.biller" autocomplete="off"></el-input>
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="12">
  92. <el-form-item label="开票额度" prop="invoicingAmount">
  93. <el-input-number
  94. v-model="formData.invoicingAmount"
  95. :min="0"
  96. :max="99999999999999999"
  97. label=""
  98. ></el-input-number>
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 1">
  103. <el-col :span="12">
  104. <el-form-item label="剩余开票额度" prop="ssd">
  105. <el-input-number
  106. v-model="formData.invoicingAmountExcess"
  107. :min="0"
  108. :max="99999999999999999"
  109. label=""
  110. ></el-input-number>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="12">
  114. <el-form-item label="暂估值" prop="tentativeEstimates"
  115. :rules="[{
  116. required: true,
  117. message: '暂估值不能为空',
  118. trigger: 'blur',
  119. },
  120. ]">
  121. <!-- { pattern: /^[1-9]\d*$/ , message: '暂估值不能小于等于0', trigger: 'blur'} -->
  122. <el-input-number
  123. v-model="formData.tentativeEstimates"
  124. :min="0"
  125. :max="99999999999999999"
  126. label=""
  127. ></el-input-number>
  128. </el-form-item>
  129. </el-col>
  130. </el-row>
  131. <el-row v-if="type == 2">
  132. <el-col :span="12">
  133. <el-form-item label="账户性质" prop="accountQuality">
  134. <el-select
  135. v-model="formData.accountQuality"
  136. placeholder="请选择账户性质"
  137. >
  138. <el-option
  139. v-for="item in dictionariesData"
  140. :key="item.value + 'bb'"
  141. :label="item.label"
  142. :value="item.value"
  143. ></el-option>
  144. </el-select>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="12">
  148. <el-form-item label="银行卡号" prop="bankCardNum">
  149. <el-input
  150. v-model="formData.bankCardNum"
  151. autocomplete="off"
  152. ></el-input>
  153. </el-form-item>
  154. </el-col>
  155. </el-row>
  156. <el-row v-if="type == 2">
  157. <el-col :span="12">
  158. <el-form-item label="开户行" prop="bank">
  159. <el-input v-model="formData.bank" autocomplete="off"></el-input>
  160. </el-form-item>
  161. </el-col>
  162. <el-col v-if="formData.outerFlag == 0" :span="12">
  163. <el-form-item label="开户行名称" prop="bankName">
  164. <el-input
  165. v-model="formData.bankName"
  166. autocomplete="off"
  167. ></el-input>
  168. </el-form-item>
  169. </el-col>
  170. </el-row>
  171. <el-row v-if="formData.outerFlag == 0 && type == 2">
  172. <el-col :span="12">
  173. <el-form-item label="开户行号" prop="bankNum">
  174. <el-input
  175. v-model="formData.bankNum"
  176. autocomplete="off"
  177. ></el-input>
  178. </el-form-item>
  179. </el-col>
  180. <el-col :span="12">
  181. <el-form-item label="证书有效期" prop="certExpirationDate">
  182. <el-date-picker
  183. v-model="formData.certExpirationDate"
  184. size="small"
  185. type="daterange"
  186. range-separator="至"
  187. start-placeholder="开始日期"
  188. end-placeholder="结束日期"
  189. value-format="yyyy-MM-dd"
  190. @change="setDateInterval($event)"
  191. >
  192. </el-date-picker>
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. <el-row v-if="formData.outerFlag == 0 && type == 2">
  197. <el-col :span="12">
  198. <el-form-item label="结算卡" prop="clearingProfit">
  199. <el-input-number
  200. v-model="formData.clearingProfit"
  201. :min="0"
  202. :max="99999999999999999"
  203. label=""
  204. ></el-input-number>
  205. </el-form-item>
  206. </el-col>
  207. <el-col :span="12">
  208. <el-form-item label="单日转账笔数限制" prop="dayStrokeNum">
  209. <el-input-number
  210. v-model="formData.dayStrokeNum"
  211. :min="0"
  212. :max="99999999999999999"
  213. label=""
  214. ></el-input-number>
  215. </el-form-item>
  216. </el-col>
  217. </el-row>
  218. <el-row v-if="formData.outerFlag == 0 && type == 2">
  219. <el-col :span="12">
  220. <el-form-item label="外部过账金额" prop="exteriorProfit">
  221. <el-input-number
  222. v-model="formData.exteriorProfit"
  223. :min="0"
  224. :max="99999999999999999"
  225. label=""
  226. ></el-input-number>
  227. </el-form-item>
  228. </el-col>
  229. <el-col :span="12">
  230. <el-form-item label="财税公司利润" prop="fiscalProfit">
  231. <el-input-number
  232. v-model="formData.fiscalProfit"
  233. :min="0"
  234. :max="99999999999999999"
  235. label=""
  236. ></el-input-number>
  237. </el-form-item>
  238. </el-col>
  239. </el-row>
  240. <el-row v-if="formData.outerFlag == 0 && type == 2">
  241. <el-col :span="12">
  242. <el-form-item label="保险公司回款" prop="insuranceProfit">
  243. <el-input-number
  244. v-model="formData.insuranceProfit"
  245. :min="0"
  246. :max="99999999999999999"
  247. label=""
  248. ></el-input-number>
  249. </el-form-item>
  250. </el-col>
  251. <el-col :span="12">
  252. <el-form-item label="其他利润" prop="otherProfit">
  253. <el-input-number
  254. v-model="formData.otherProfit"
  255. :min="0"
  256. :max="99999999999999999"
  257. label=""
  258. ></el-input-number>
  259. </el-form-item>
  260. </el-col>
  261. </el-row>
  262. <el-row v-if="formData.outerFlag == 0 && type == 2">
  263. <el-col :span="12">
  264. <el-form-item label="园区利润" prop="parkProfit">
  265. <el-input-number
  266. v-model="formData.parkProfit"
  267. :min="0"
  268. :max="99999999999999999"
  269. label=""
  270. ></el-input-number>
  271. </el-form-item>
  272. </el-col>
  273. <el-col :span="12">
  274. <el-form-item label="对私单日限额" prop="priDayLines">
  275. <el-input-number
  276. v-model="formData.priDayLines"
  277. :min="0"
  278. :max="99999999999999999"
  279. label=""
  280. ></el-input-number>
  281. </el-form-item>
  282. </el-col>
  283. </el-row>
  284. <el-row v-if="formData.outerFlag == 0 && type == 2">
  285. <el-col :span="12">
  286. <el-form-item label="对私单笔限额" prop="priSingleLines">
  287. <el-input-number
  288. v-model="formData.priSingleLines"
  289. :min="0"
  290. :max="99999999999999999"
  291. label=""
  292. ></el-input-number>
  293. </el-form-item>
  294. </el-col>
  295. <el-col :span="12">
  296. <el-form-item label="对私年额度" prop="priYearLines">
  297. <el-input-number
  298. v-model="formData.priYearLines"
  299. :min="0"
  300. :max="99999999999999999"
  301. label=""
  302. ></el-input-number>
  303. </el-form-item>
  304. </el-col>
  305. </el-row>
  306. <el-row v-if="formData.outerFlag == 0 && type == 2">
  307. <el-col :span="12">
  308. <el-form-item label="对公单日限额" prop="pubDayLines">
  309. <el-input-number
  310. v-model="formData.pubDayLines"
  311. :min="0"
  312. :max="99999999999999999"
  313. label=""
  314. ></el-input-number>
  315. </el-form-item>
  316. </el-col>
  317. <el-col :span="12">
  318. <el-form-item label="对公单笔限额" prop="pubSingleLines">
  319. <el-input-number
  320. v-model="formData.pubSingleLines"
  321. :min="0"
  322. :max="99999999999999999"
  323. label=""
  324. ></el-input-number>
  325. </el-form-item>
  326. </el-col>
  327. </el-row>
  328. <el-row v-if="formData.outerFlag == 0 && type == 2">
  329. <el-col :span="12">
  330. <el-form-item label="对公年额度" prop="pubYearLines">
  331. <el-input-number
  332. v-model="formData.pubYearLines"
  333. :min="0"
  334. :max="99999999999999999"
  335. label=""
  336. ></el-input-number>
  337. </el-form-item>
  338. </el-col>
  339. <el-col :span="12">
  340. <el-form-item label="天勤利润" prop="tianqinProfit">
  341. <el-input-number
  342. v-model="formData.tianqinProfit"
  343. :min="0"
  344. :max="99999999999999999"
  345. label=""
  346. ></el-input-number>
  347. </el-form-item>
  348. </el-col>
  349. </el-row>
  350. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  351. <el-col :span="12">
  352. <el-form-item label="单日转账笔数剩余" prop="dayStrokeNumExcess">
  353. <el-input-number
  354. v-model="formData.dayStrokeNumExcess"
  355. :min="0"
  356. :max="99999999999999999"
  357. label=""
  358. ></el-input-number>
  359. </el-form-item>
  360. </el-col>
  361. <el-col :span="12">
  362. <el-form-item label="对私单日限额剩余" prop="priDayLinesExcess">
  363. <el-input-number
  364. v-model="formData.priDayLinesExcess"
  365. :min="0"
  366. :max="99999999999999999"
  367. label=""
  368. ></el-input-number>
  369. </el-form-item>
  370. </el-col>
  371. </el-row>
  372. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  373. <el-col :span="12">
  374. <el-form-item label="对私年剩余额度" prop="priYearExcess">
  375. <el-input-number
  376. v-model="formData.priYearExcess"
  377. :min="0"
  378. :max="99999999999999999"
  379. label=""
  380. ></el-input-number>
  381. </el-form-item>
  382. </el-col>
  383. <el-col :span="12">
  384. <el-form-item label="对公单日限额剩余" prop="pubDayLinesExcess">
  385. <el-input-number
  386. v-model="formData.pubDayLinesExcess"
  387. :min="0"
  388. :max="99999999999999999"
  389. label=""
  390. ></el-input-number>
  391. </el-form-item>
  392. </el-col>
  393. </el-row>
  394. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  395. <el-col :span="12">
  396. <el-form-item label="对公年剩余额度" prop="pubYearExcess">
  397. <el-input-number
  398. v-model="formData.pubYearExcess"
  399. :min="0"
  400. :max="99999999999999999"
  401. label=""
  402. ></el-input-number>
  403. </el-form-item>
  404. </el-col>
  405. <el-col :span="12">
  406. <el-form-item label="支出金额" prop="spend">
  407. <el-input-number
  408. v-model="formData.spend"
  409. :min="0"
  410. :max="99999999999999999"
  411. label=""
  412. ></el-input-number>
  413. </el-form-item>
  414. </el-col>
  415. </el-row>
  416. <el-row v-if="formData.outerFlag == 0 && type == 2">
  417. <el-col :span="12">
  418. <el-form-item label="余额" prop="balance">
  419. <el-input-number
  420. v-model="formData.balance"
  421. :min="0"
  422. :max="99999999999999999"
  423. label=""
  424. ></el-input-number>
  425. </el-form-item>
  426. </el-col>
  427. </el-row>
  428. </el-form>
  429. <div slot="footer" class="dialog-footer">
  430. <el-button @click="resetForm()" size="small">取 消</el-button>
  431. <el-button type="primary" @click="submitForm('formData')" size="small"
  432. >确 定</el-button
  433. >
  434. </div>
  435. </el-dialog>
  436. </div>
  437. </template>
  438. <script>
  439. export default {
  440. name: "ExpenseComponent",
  441. props: {
  442. type: {
  443. type: Number,
  444. default: 1,
  445. },
  446. dialogFormVisible: {
  447. type: Boolean,
  448. default: false,
  449. },
  450. title: {
  451. type: String,
  452. default: "新增",
  453. },
  454. nature_businessData: {
  455. //一般纳税数据字典
  456. type: Array,
  457. default: [],
  458. },
  459. formDataId: {
  460. type: String,
  461. default: "",
  462. },
  463. formData: {
  464. type: Object,
  465. default: {
  466. outerFlag: "0", //账户类别
  467. accountName: "", //户名
  468. businessQuality: "0", //营业性质
  469. establishTime: "", //成立日期
  470. invoicingAmount: 0, //开票额度
  471. // invoicingAmountExcess:0,//剩余开票额度
  472. juridicalPerson: "", //法人
  473. owned: "", //所属地
  474. accountQuality: "", //账户性质
  475. bankCardNum: "", //银行卡号
  476. bank: "", //开户行
  477. bankName: "", //开户行名称
  478. bankNum: "", //开户行号
  479. certExpirationDate: "", //证书有效期
  480. clearingProfit: "", //结算卡
  481. dayStrokeNum: "", //单日转账笔数限制
  482. exteriorProfit: "", //外部过账金额
  483. fiscalProfit: "", //财税公司利润
  484. insuranceProfit: "", //保险公司回款
  485. otherProfit: "", //其他利润
  486. parkProfit: "", //园区利润
  487. priDayLines: "", //对私单日限额
  488. priSingleLines: "", //对私单笔限额
  489. priYearExcess: "", //对私年剩余额度
  490. priYearLines: "", //对私年额度
  491. pubDayLines: "", //对公单日限额
  492. pubSingleLines: "", //对公单笔限额
  493. pubYearExcess: "", //对公年剩余额度
  494. pubYearLines: "", //对公年额度
  495. tianqinProfit: "", //天勤利润
  496. dayStrokeNumExcess: "", //单日转账笔数剩余
  497. priDayLinesExcess: "", //对私单日限额剩余
  498. pubDayLinesExcess: "", //对公单日限额剩余
  499. spend: "", // 支出金额
  500. },
  501. },
  502. },
  503. data() {
  504. return {
  505. dictionariesData: [], //账户性质数据字典
  506. externalRules: {
  507. //账户表单规则
  508. outerFlag: [
  509. { required: true, message: "请选择账户类别", trigger: "change" },
  510. ],
  511. accountName: [
  512. { required: true, message: "户名不能为空", trigger: "blur" },
  513. ],
  514. businessQuality: [
  515. { required: true, message: "请选择营业性质", trigger: "change" },
  516. ],
  517. owned: [
  518. { required: true, message: "所属地不能为空", trigger: "change" },
  519. ],
  520. juridicalPerson: [
  521. { required: true, message: "法人不能为空", trigger: "change" },
  522. ],
  523. establishTime: [
  524. {
  525. required: true,
  526. message: "请选择成立日期",
  527. trigger: "change",
  528. },
  529. ],
  530. biller: [
  531. {
  532. required: true,
  533. message: "开票员不能为空",
  534. trigger: "blur",
  535. },
  536. ],
  537. },
  538. interiorRules: {
  539. //卡表单规则
  540. accountName: [
  541. { required: true, message: "户名不能为空", trigger: "blur" },
  542. ],
  543. accountQuality: [
  544. { required: true, message: "请选择账户性质", trigger: "change" },
  545. ],
  546. bankCardNum: [
  547. { required: true, message: "银行卡号不能为空", trigger: "blur" },
  548. ],
  549. bank: [{ required: true, message: "开户行不能为空", trigger: "blur" }],
  550. bankName: [
  551. { required: true, message: "开户行名称不能为空", trigger: "blur" },
  552. ],
  553. bankNum: [
  554. { required: true, message: "开户行号不能为空", trigger: "blur" },
  555. ],
  556. certExpirationDate: [
  557. {
  558. required: true,
  559. message: "请选择证书有效期",
  560. trigger: "change",
  561. },
  562. ],
  563. },
  564. };
  565. },
  566. watch: {
  567. dialogFormVisible(status) {
  568. !status
  569. ? this.$nextTick(() => {
  570. this.$refs.formData.clearValidate();
  571. })
  572. : "";
  573. },
  574. },
  575. created() {
  576. this.business("account_quality");
  577. },
  578. mounted() {},
  579. methods: {
  580. addYear() {
  581. this.$emit("addYear");
  582. },
  583. removeYear() {
  584. this.$emit("removeYear");
  585. },
  586. outChange(e) {
  587. this.$nextTick(() => {
  588. this.$refs.formData.clearValidate();
  589. });
  590. this.$emit("outChange", e);
  591. },
  592. setDateInterval(e) {
  593. this.$emit("setDateInterval", e);
  594. },
  595. //数据字典
  596. business(typeName) {
  597. this.$api.dict.findByLableName(typeName).then((res) => {
  598. if (typeName == "account_quality") {
  599. this.dictionariesData = res.data;
  600. } else {
  601. this[typeName + "Data"] = res.data;
  602. }
  603. });
  604. },
  605. //提交
  606. submitForm(formData) {
  607. this.$refs[formData].validate((valid) => {
  608. if (valid) {
  609. this.$emit("submitForm");
  610. } else {
  611. return false;
  612. }
  613. });
  614. },
  615. //弹框取消重置
  616. resetForm() {
  617. this.$emit("resetForm");
  618. },
  619. },
  620. };
  621. </script>
  622. <style scoped>
  623. /deep/ .el-dialog__body {
  624. overflow-y: scroll;
  625. max-height: 500px;
  626. }
  627. .el-input-number,
  628. .el-date-editor {
  629. width: 100% !important;
  630. }
  631. </style>