ExpenseComponent.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  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
  115. label="暂估值"
  116. prop="tentativeEstimates"
  117. :rules="[
  118. {
  119. required: true,
  120. message: '暂估值不能为空',
  121. trigger: 'blur',
  122. },
  123. ]"
  124. >
  125. <!-- { pattern: /^[1-9]\d*$/ , message: '暂估值不能小于等于0', trigger: 'blur'} -->
  126. <el-input-number
  127. v-model="formData.tentativeEstimates"
  128. :min="0"
  129. :max="99999999999999999"
  130. label=""
  131. ></el-input-number>
  132. </el-form-item>
  133. </el-col>
  134. </el-row>
  135. <el-row v-if="type == 1">
  136. <el-col :span="12">
  137. <el-form-item label="账户简称" prop="ssd">
  138. <el-input
  139. v-model="formData.simpleName"
  140. placeholder="请输入账户简称"
  141. ></el-input>
  142. </el-form-item>
  143. </el-col>
  144. </el-row>
  145. <el-row v-if="type == 2">
  146. <el-col :span="12">
  147. <el-form-item label="账户性质" prop="accountQuality">
  148. <el-select
  149. v-model="formData.accountQuality"
  150. placeholder="请选择账户性质"
  151. >
  152. <el-option
  153. v-for="item in dictionariesData"
  154. :key="item.value + 'bb'"
  155. :label="item.label"
  156. :value="item.value"
  157. ></el-option>
  158. </el-select>
  159. </el-form-item>
  160. </el-col>
  161. <el-col :span="12">
  162. <el-form-item label="银行卡号" prop="bankCardNum">
  163. <el-input
  164. v-model="formData.bankCardNum"
  165. autocomplete="off"
  166. ></el-input>
  167. </el-form-item>
  168. </el-col>
  169. </el-row>
  170. <el-row v-if="type == 2">
  171. <el-col :span="12">
  172. <el-form-item label="开户行" prop="bank">
  173. <el-input v-model="formData.bank" autocomplete="off"></el-input>
  174. </el-form-item>
  175. </el-col>
  176. <el-col v-if="formData.outerFlag == 0" :span="12">
  177. <el-form-item label="开户行名称" prop="bankName">
  178. <el-input
  179. v-model="formData.bankName"
  180. autocomplete="off"
  181. ></el-input>
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. <el-row v-if="formData.outerFlag == 0 && type == 2">
  186. <el-col :span="12">
  187. <el-form-item label="开户行号" prop="bankNum">
  188. <el-input
  189. v-model="formData.bankNum"
  190. autocomplete="off"
  191. ></el-input>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="12">
  195. <el-form-item label="证书有效期" prop="certExpirationDate">
  196. <el-date-picker
  197. v-model="formData.certExpirationDate"
  198. size="small"
  199. type="daterange"
  200. range-separator="至"
  201. start-placeholder="开始日期"
  202. end-placeholder="结束日期"
  203. value-format="yyyy-MM-dd"
  204. @change="setDateInterval($event)"
  205. >
  206. </el-date-picker>
  207. </el-form-item>
  208. </el-col>
  209. </el-row>
  210. <el-row v-if="formData.outerFlag == 0 && type == 2">
  211. <el-col :span="12">
  212. <el-form-item label="单日转账笔数限制" prop="dayStrokeNum">
  213. <el-input-number
  214. v-model="formData.dayStrokeNum"
  215. :min="0"
  216. :max="99999999999999999"
  217. label=""
  218. ></el-input-number>
  219. </el-form-item>
  220. </el-col>
  221. <el-col :span="12">
  222. <el-form-item label="对私单日限额" prop="priDayLines">
  223. <el-input-number
  224. v-model="formData.priDayLines"
  225. :min="0"
  226. :max="99999999999999999"
  227. label=""
  228. ></el-input-number>
  229. </el-form-item>
  230. </el-col>
  231. </el-row>
  232. <el-row v-if="formData.outerFlag == 0 && type == 2">
  233. <el-col :span="12">
  234. <el-form-item label="对私单笔限额" prop="priSingleLines">
  235. <el-input-number
  236. v-model="formData.priSingleLines"
  237. :min="0"
  238. :max="99999999999999999"
  239. label=""
  240. ></el-input-number>
  241. </el-form-item>
  242. </el-col>
  243. <el-col :span="12">
  244. <el-form-item label="对私年额度" prop="priYearLines">
  245. <el-input-number
  246. v-model="formData.priYearLines"
  247. :min="0"
  248. :max="99999999999999999"
  249. label=""
  250. ></el-input-number>
  251. </el-form-item>
  252. </el-col>
  253. </el-row>
  254. <el-row v-if="formData.outerFlag == 0 && type == 2">
  255. <el-col :span="12">
  256. <el-form-item label="对公单日限额" prop="pubDayLines">
  257. <el-input-number
  258. v-model="formData.pubDayLines"
  259. :min="0"
  260. :max="99999999999999999"
  261. label=""
  262. ></el-input-number>
  263. </el-form-item>
  264. </el-col>
  265. <el-col :span="12">
  266. <el-form-item label="对公单笔限额" prop="pubSingleLines">
  267. <el-input-number
  268. v-model="formData.pubSingleLines"
  269. :min="0"
  270. :max="99999999999999999"
  271. label=""
  272. ></el-input-number>
  273. </el-form-item>
  274. </el-col>
  275. </el-row>
  276. <el-row v-if="formData.outerFlag == 0 && type == 2">
  277. <el-col :span="12">
  278. <el-form-item label="余额" prop="balance">
  279. <el-input-number
  280. v-model="formData.balance"
  281. :min="0"
  282. :max="99999999999999999"
  283. label=""
  284. ></el-input-number>
  285. </el-form-item>
  286. </el-col>
  287. <el-col :span="12">
  288. <el-form-item label="对公年额度" prop="pubYearLines">
  289. <el-input-number
  290. v-model="formData.pubYearLines"
  291. :min="0"
  292. :max="99999999999999999"
  293. label=""
  294. ></el-input-number>
  295. </el-form-item>
  296. </el-col>
  297. </el-row>
  298. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  299. <el-col :span="12">
  300. <el-form-item label="单日转账笔数剩余" prop="dayStrokeNumExcess">
  301. <el-input-number
  302. v-model="formData.dayStrokeNumExcess"
  303. :min="0"
  304. :max="99999999999999999"
  305. label=""
  306. ></el-input-number>
  307. </el-form-item>
  308. </el-col>
  309. <el-col :span="12">
  310. <el-form-item label="对私单日限额剩余" prop="priDayLinesExcess">
  311. <el-input-number
  312. v-model="formData.priDayLinesExcess"
  313. :min="0"
  314. :max="99999999999999999"
  315. label=""
  316. ></el-input-number>
  317. </el-form-item>
  318. </el-col>
  319. </el-row>
  320. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  321. <el-col :span="12">
  322. <el-form-item label="对私年剩余额度" prop="priYearExcess">
  323. <el-input-number
  324. v-model="formData.priYearExcess"
  325. :min="0"
  326. :max="99999999999999999"
  327. label=""
  328. ></el-input-number>
  329. </el-form-item>
  330. </el-col>
  331. <el-col :span="12">
  332. <el-form-item label="对公单日限额剩余" prop="pubDayLinesExcess">
  333. <el-input-number
  334. v-model="formData.pubDayLinesExcess"
  335. :min="0"
  336. :max="99999999999999999"
  337. label=""
  338. ></el-input-number>
  339. </el-form-item>
  340. </el-col>
  341. </el-row>
  342. <el-row v-if="formData.outerFlag == 0 && formDataId && type == 2">
  343. <el-col :span="12">
  344. <el-form-item label="对公年剩余额度" prop="pubYearExcess">
  345. <el-input-number
  346. v-model="formData.pubYearExcess"
  347. :min="0"
  348. :max="99999999999999999"
  349. label=""
  350. ></el-input-number>
  351. </el-form-item>
  352. </el-col>
  353. <el-col :span="12">
  354. <el-form-item label="支出金额" prop="spend">
  355. <el-input-number
  356. v-model="formData.spend"
  357. :min="0"
  358. :max="99999999999999999"
  359. label=""
  360. ></el-input-number>
  361. </el-form-item>
  362. </el-col>
  363. </el-row>
  364. </el-form>
  365. <div slot="footer" class="dialog-footer">
  366. <el-button @click="resetForm()" size="small">取 消</el-button>
  367. <el-button type="primary" @click="submitForm('formData')" size="small"
  368. >确 定</el-button
  369. >
  370. </div>
  371. </el-dialog>
  372. </div>
  373. </template>
  374. <script>
  375. export default {
  376. name: "ExpenseComponent",
  377. props: {
  378. type: {
  379. type: Number,
  380. default: 1,
  381. },
  382. dialogFormVisible: {
  383. type: Boolean,
  384. default: false,
  385. },
  386. title: {
  387. type: String,
  388. default: "新增",
  389. },
  390. nature_businessData: {
  391. //一般纳税数据字典
  392. type: Array,
  393. default: [],
  394. },
  395. formDataId: {
  396. type: String,
  397. default: "",
  398. },
  399. formData: {
  400. type: Object,
  401. default: {},
  402. },
  403. },
  404. data() {
  405. return {
  406. dictionariesData: [], //账户性质数据字典
  407. externalRules: {
  408. //账户表单规则
  409. outerFlag: [
  410. { required: true, message: "请选择账户类别", trigger: "change" },
  411. ],
  412. accountName: [
  413. { required: true, message: "户名不能为空", trigger: "blur" },
  414. ],
  415. },
  416. interiorRules: {
  417. //卡表单规则
  418. accountName: [
  419. { required: true, message: "户名不能为空", trigger: "blur" },
  420. ],
  421. accountQuality: [
  422. { required: true, message: "请选择账户性质", trigger: "change" },
  423. ],
  424. bankCardNum: [
  425. { required: true, message: "银行卡号不能为空", trigger: "blur" },
  426. ],
  427. bank: [{ required: true, message: "开户行不能为空", trigger: "blur" }],
  428. bankName: [
  429. { required: true, message: "开户行名称不能为空", trigger: "blur" },
  430. ],
  431. bankNum: [
  432. { required: true, message: "开户行号不能为空", trigger: "blur" },
  433. ],
  434. certExpirationDate: [
  435. {
  436. required: true,
  437. message: "请选择证书有效期",
  438. trigger: "change",
  439. },
  440. ],
  441. },
  442. };
  443. },
  444. watch: {
  445. dialogFormVisible(status) {
  446. !status
  447. ? this.$nextTick(() => {
  448. this.$refs.formData.clearValidate();
  449. })
  450. : "";
  451. },
  452. },
  453. created() {
  454. this.business("account_quality");
  455. },
  456. mounted() {},
  457. methods: {
  458. cleanForm() {
  459. this.$refs.formData.resetFields();
  460. },
  461. //账户类别change事件
  462. outChange(e) {
  463. this.$nextTick(() => {
  464. this.$refs.formData.clearValidate();
  465. });
  466. this.$emit("outChange", e);
  467. },
  468. //证书有效期change事件
  469. setDateInterval(e) {
  470. this.$emit("setDateInterval", e);
  471. },
  472. //数据字典
  473. business(typeName) {
  474. this.$api.dict.findByLableName(typeName).then((res) => {
  475. if (typeName == "account_quality") {
  476. this.dictionariesData = res.data;
  477. } else {
  478. this[typeName + "Data"] = res.data;
  479. }
  480. });
  481. },
  482. //提交
  483. submitForm(formData) {
  484. this.$refs[formData].validate((valid) => {
  485. if (valid) {
  486. this.$emit("submitForm");
  487. } else {
  488. return false;
  489. }
  490. });
  491. },
  492. //弹框取消重置
  493. resetForm() {
  494. this.$emit("resetForm");
  495. },
  496. },
  497. };
  498. </script>
  499. <style scoped>
  500. .dialog >>> .el-dialog__body {
  501. overflow-y: scroll;
  502. max-height: 500px;
  503. }
  504. .el-input-number,
  505. .el-date-editor {
  506. width: 100% !important;
  507. }
  508. </style>