accountsDialog.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. <template>
  2. <div>
  3. <el-form :model="form" ref="form" label-width="70px" class="demo-ruleForm">
  4. <el-row :gutter="20">
  5. <el-row>
  6. <el-col :span="12">
  7. <el-form-item label="科目编码:" prop="code">
  8. <el-input
  9. style="width: 100%"
  10. v-model="form.code"
  11. size="small"
  12. autocomplete="off"
  13. @input="numinput"
  14. clearable
  15. placeholder="请输入科目编码"
  16. >
  17. </el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="12">
  21. <el-form-item label="科目名称:" prop="cnName">
  22. <el-input style="width: 100%" v-model="form.cnName" size="small" autocomplete="off" clearable placeholder="请输入科目名称"> </el-input>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="12">
  26. <el-form-item label="方向:" prop="dc">
  27. <search-query
  28. :datalist="dcData"
  29. :selectValue="form.dc"
  30. :filterable="true"
  31. :clearable="true"
  32. :remote="true"
  33. :buttonIf="false"
  34. placeholder="请选择方向"
  35. @corpChange="corpChange($event, 'dc')"
  36. >
  37. </search-query>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="12">
  41. <el-form-item label="科目属性:" prop="property">
  42. <search-query
  43. :datalist="propertyData"
  44. :selectValue="form.property"
  45. :filterable="true"
  46. :clearable="true"
  47. :remote="true"
  48. :buttonIf="false"
  49. placeholder="请选择科目属性"
  50. :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictKey' }"
  51. @remoteMethod="propertyWorkDictsfun"
  52. @corpChange="corpChange($event, 'property')"
  53. @corpFocus="propertyWorkDictsfun"
  54. >
  55. </search-query>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12">
  59. <el-form-item label="上级科目:" prop="parentCode">
  60. <el-input
  61. style="width: 100%"
  62. v-model="form.parentCode"
  63. size="small"
  64. autocomplete="off"
  65. :disabled="true"
  66. clearable
  67. placeholder="无上级科目"
  68. >
  69. </el-input>
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="12">
  73. <el-form-item label="币种:" prop="curCode">
  74. <search-query
  75. :datalist="curData"
  76. :selectValue="form.curCode"
  77. :filterable="true"
  78. :clearable="true"
  79. :remote="true"
  80. :buttonIf="false"
  81. placeholder="请选择币种"
  82. :forParameter="{ key: 'id', label: 'code', value: 'code' }"
  83. @remoteMethod="getRateListfun"
  84. @corpChange="corpChange($event, 'curCode')"
  85. @corpFocus="getRateListfun"
  86. >
  87. </search-query>
  88. </el-form-item>
  89. </el-col>
  90. </el-row>
  91. <el-col :span="24" >
  92. <el-form-item label="辅助核算:" >
  93. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isItem" :disabled="!isDetail">项目</el-checkbox>
  94. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isCorp" :disabled="!isDetail">客户</el-checkbox>
  95. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isDept" :disabled="!isDetail">部门</el-checkbox>
  96. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isEmpl" :disabled="!isDetail">职员</el-checkbox>
  97. <!--<el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isStock">库存</el-checkbox>-->
  98. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isManual" style="margin-left: 50px"
  99. >允许手工凭证使用</el-checkbox
  100. >
  101. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isDc">应收/应付科目</el-checkbox>
  102. <el-checkbox size="medium" :true-label="1" :false-label="0" v-model="form.isArAp">预收/预付科目</el-checkbox>
  103. </el-form-item>
  104. </el-col>
  105. <el-row :gutter="20" v-if="form.isItem == 1 && isDetail">
  106. <el-col :span="12">
  107. <el-form-item label="项目大类:" prop="itemClassifyId">
  108. <search-query
  109. :datalist="itemClassifyList"
  110. :selectValue="form.itemClassifyId"
  111. :filterable="true"
  112. :clearable="false"
  113. :buttonIf="false"
  114. placeholder="请选择项目大类"
  115. :forParameter="{ key: 'id', label: 'code', value: 'id' }"
  116. @corpChange="corpChange($event, 'itemClassifyId')"
  117. >
  118. </search-query>
  119. </el-form-item>
  120. </el-col>
  121. </el-row>
  122. <el-row :gutter="20">
  123. <el-col :span="24">
  124. <span style="padding-left: 4em">本币期初</span>
  125. </el-col>
  126. <el-col :span="4">
  127. <el-form-item label="年初借方" prop="amountOpenDr" label-width="60px">
  128. <el-input-number
  129. style="width: 100%"
  130. v-model="form.amountOpenDr"
  131. size="small"
  132. autocomplete="off"
  133. :disabled="isCalc || !isDetail"
  134. clearable
  135. placeholder="请输入年初借方金额"
  136. :precision="2"
  137. :controls="false"
  138. value-on-clear="0"
  139. align="right"
  140. @change="amountChange(row, 'amountOpenDr')"
  141. >
  142. </el-input-number>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="4">
  146. <el-form-item label="年初贷方" prop="amountOpenCr" label-width="60px">
  147. <el-input-number
  148. style="width: 100%"
  149. v-model="form.amountOpenCr"
  150. size="small"
  151. autocomplete="off"
  152. :disabled="isCalc || !isDetail"
  153. clearable
  154. placeholder="请输入年初贷方金额"
  155. :precision="2"
  156. :controls="false"
  157. value-on-clear="0"
  158. align="right"
  159. @change="amountChange(row, 'amountOpenCr')"
  160. >
  161. </el-input-number>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :span="4">
  165. <el-form-item label="年初余额" prop="amountOpenBlc" label-width="60px">
  166. <el-input-number style="width: 100%;" v-model="form.amountOpenBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false" >
  167. </el-input-number>
  168. </el-form-item>
  169. </el-col>
  170. <el-col :span="4">
  171. <el-form-item label="本年借方" prop="amountDr" label-width="60px">
  172. <el-input-number
  173. style="width: 100%"
  174. v-model="form.amountDr"
  175. size="small"
  176. autocomplete="off"
  177. :disabled="isCalc || !isDetail"
  178. clearable
  179. placeholder="请输入本初借方金额"
  180. :precision="2"
  181. :controls="false"
  182. value-on-clear="0"
  183. align="right"
  184. @change="amountChange(row, 'amountDr')"
  185. >
  186. </el-input-number>
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="4">
  190. <el-form-item label="本年贷方" prop="amountCr" label-width="60px">
  191. <el-input-number
  192. style="width: 100%"
  193. v-model="form.amountCr"
  194. size="small"
  195. autocomplete="off"
  196. :disabled="isCalc || !isDetail"
  197. clearable
  198. placeholder="请输入本年贷方金额"
  199. :precision="2"
  200. :controls="false"
  201. value-on-clear="0"
  202. align="right"
  203. @change="amountChange(row, 'amountCr')"
  204. >
  205. </el-input-number>
  206. </el-form-item>
  207. </el-col>
  208. <el-col :span="4">
  209. <el-form-item label="当前余额" prop="amountBlc" label-width="60px">
  210. <el-input-number style="width: 100%" v-model="form.amountBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false">
  211. </el-input-number>
  212. </el-form-item>
  213. </el-col>
  214. </el-row>
  215. <el-row :gutter="20" v-if="form.curCode !== 'CNY'">
  216. <el-col :span="24">
  217. <span style="padding-left: 4em">外币期初</span>
  218. </el-col>
  219. <el-col :span="4">
  220. <el-form-item label="年初借方" prop="amountOpenDrUsd" label-width="60px">
  221. <el-input-number
  222. style="width: 100%"
  223. v-model="form.amountOpenDrUsd"
  224. size="small"
  225. autocomplete="off"
  226. :disabled="isCalc || !isDetail"
  227. clearable
  228. placeholder="请输入年初借方金额"
  229. :precision="2"
  230. :controls="false"
  231. value-on-clear="0"
  232. align="right"
  233. @change="amountChange(row, 'amountOpenDrUsd')"
  234. >
  235. </el-input-number>
  236. </el-form-item>
  237. </el-col>
  238. <el-col :span="4">
  239. <el-form-item label="年初贷方" prop="amountOpenCrUsd" label-width="60px">
  240. <el-input-number
  241. style="width: 100%"
  242. v-model="form.amountOpenCrUsd"
  243. size="small"
  244. autocomplete="off"
  245. :disabled="isCalc || !isDetail"
  246. clearable
  247. placeholder="请输入年初贷方金额"
  248. :precision="2"
  249. :controls="false"
  250. value-on-clear="0"
  251. align="right"
  252. @change="amountChange(row, 'amountOpenCrUsd')"
  253. >
  254. </el-input-number>
  255. </el-form-item>
  256. </el-col>
  257. <el-col :span="4">
  258. <el-form-item label="年初余额" prop="amountOpenUsdBlc" label-width="60px">
  259. <el-input-number style="width: 100%" v-model="form.amountOpenUsdBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false">
  260. </el-input-number>
  261. </el-form-item>
  262. </el-col>
  263. <el-col :span="4">
  264. <el-form-item label="本年借方" prop="amountDrUsd" label-width="60px">
  265. <el-input-number
  266. style="width: 100%"
  267. v-model="form.amountDrUsd"
  268. size="small"
  269. autocomplete="off"
  270. :disabled="isCalc || !isDetail"
  271. clearable
  272. placeholder="请输入本初借方金额"
  273. :precision="2"
  274. :controls="false"
  275. value-on-clear="0"
  276. align="right"
  277. @change="amountChange(row, 'amountDrUsd')"
  278. >
  279. </el-input-number>
  280. </el-form-item>
  281. </el-col>
  282. <el-col :span="4">
  283. <el-form-item label="本年贷方" prop="amountCrUsd" label-width="60px">
  284. <el-input-number
  285. style="width: 100%"
  286. v-model="form.amountCrUsd"
  287. size="small"
  288. autocomplete="off"
  289. :disabled="isCalc || !isDetail"
  290. clearable
  291. placeholder="请输入本年贷方金额"
  292. :precision="2"
  293. :controls="false"
  294. value-on-clear="0"
  295. align="right"
  296. @change="amountChange(row, 'amountCrUsd')"
  297. >
  298. </el-input-number>
  299. </el-form-item>
  300. </el-col>
  301. <el-col :span="4">
  302. <el-form-item label="当前余额" prop="amountUsdBlc" label-width="60px">
  303. <el-input-number style="width: 100%" v-model="form.amountUsdBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false">
  304. </el-input-number>
  305. </el-form-item>
  306. </el-col>
  307. </el-row>
  308. <el-row :gutter="20" v-if="form.isQuantity == 1">
  309. <el-col :span="24">
  310. <span style="padding-left: 4em">数量期初</span>
  311. </el-col>
  312. <el-col :span="4">
  313. <el-form-item label="年初借方" prop="quantityOpenDr" label-width="60px">
  314. <el-input-number
  315. style="width: 100%"
  316. v-model="form.quantityOpenDr"
  317. size="small"
  318. autocomplete="off"
  319. :disabled="isCalc || !isDetail"
  320. clearable
  321. placeholder="请输入年初借方金额"
  322. :precision="2"
  323. :controls="false"
  324. value-on-clear="0"
  325. @change="amountChange(row, 'quantityOpenDr')"
  326. >
  327. </el-input-number>
  328. </el-form-item>
  329. </el-col>
  330. <el-col :span="4">
  331. <el-form-item label="年初贷方" prop="quantityOpenCr" label-width="60px">
  332. <el-input-number
  333. style="width: 100%"
  334. v-model="form.quantityOpenCr"
  335. size="small"
  336. autocomplete="off"
  337. :disabled="isCalc || !isDetail"
  338. clearable
  339. placeholder="请输入年初贷方金额"
  340. :precision="2"
  341. :controls="false"
  342. value-on-clear="0"
  343. @change="amountChange(row, 'quantityOpenCr')"
  344. >
  345. </el-input-number>
  346. </el-form-item>
  347. </el-col>
  348. <el-col :span="4">
  349. <el-form-item label="年初余额" prop="quantityOpenBlc" label-width="60px">
  350. <el-input-number style="width: 100%" v-model="form.quantityOpenBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false">
  351. </el-input-number>
  352. </el-form-item>
  353. </el-col>
  354. <el-col :span="4">
  355. <el-form-item label="本年借方" prop="quantityDr" label-width="60px">
  356. <el-input-number
  357. style="width: 100%"
  358. v-model="form.quantityDr"
  359. size="small"
  360. autocomplete="off"
  361. :disabled="isCalc || !isDetail"
  362. clearable
  363. placeholder="请输入本初借方金额"
  364. :precision="2"
  365. :controls="false"
  366. value-on-clear="0"
  367. @change="amountChange(row, 'quantityDr')"
  368. >
  369. </el-input-number>
  370. </el-form-item>
  371. </el-col>
  372. <el-col :span="4">
  373. <el-form-item label="本年贷方" prop="quantityCr" label-width="60px">
  374. <el-input-number
  375. style="width: 100%"
  376. v-model="form.quantityCr"
  377. size="small"
  378. autocomplete="off"
  379. :disabled="isCalc || !isDetail"
  380. clearable
  381. placeholder="请输入本年贷方金额"
  382. :precision="2"
  383. :controls="false"
  384. value-on-clear="0"
  385. @change="amountChange(row, 'quantityCr')"
  386. >
  387. </el-input-number>
  388. </el-form-item>
  389. </el-col>
  390. <el-col :span="4">
  391. <el-form-item label="当前余额" prop="quantityBlc" label-width="60px">
  392. <el-input-number style="width: 100%" v-model="form.quantityBlc" size="small" autocomplete="off" :disabled="true" clearable placeholder="" :precision="2" :controls="false">
  393. </el-input-number>
  394. </el-form-item>
  395. </el-col>
  396. </el-row>
  397. </el-row>
  398. </el-form>
  399. </div>
  400. </template>
  401. <script>
  402. import SearchQuery from "@/components/iosbasic-data/searchquery.vue";
  403. import {getRateList} from "@/api/iosBasicData/rateManagement";
  404. import {getBunitsPage} from "@/api/iosBasicData/bunits";
  405. import {baccitemstypeList} from "@/api/iosBasicData/baccitemstype";
  406. import {getWorkDicts} from "@/api/system/dictbiz";
  407. import {regularInteger} from "@/util/regularJudgment";
  408. export default {
  409. components: {SearchQuery},
  410. props:{
  411. form:{
  412. type:Object,
  413. default:{}
  414. },
  415. itemClassifyList:{
  416. type: Object,
  417. default:[]
  418. },
  419. },
  420. data(){
  421. return {
  422. // 方向数据
  423. dcData:[
  424. {
  425. label:'借方',
  426. value:'D',
  427. },
  428. {
  429. label:'贷方',
  430. value:'C',
  431. }
  432. ],
  433. curData:[], // 币别数据
  434. unitNoData:[], // 单位
  435. propertyData:[], // 核算项目数据
  436. itemClassifyList:[], // 核算大类
  437. }
  438. },
  439. mounted() {
  440. },
  441. computed: {
  442. isCalc(){
  443. return this.form && (this.form.isCorp == 1 || this.form.isDept == 1 || this.form.isEmpl == 1 || this.form.isItem == 1 );
  444. },
  445. isDetail(){
  446. return this.form && this.form.isDetail == 1;
  447. },
  448. },
  449. methods:{
  450. // 科目代码只能输入整数数字
  451. numinput(val){
  452. this.$set(this.form,'code',regularInteger(val))
  453. },
  454. amountChange(row, fieldName){
  455. },
  456. // 金额计算
  457. countBlur(){
  458. this.$set(this.form,'price',this.form.price?Number(this.form.price):0) // 单价
  459. this.$set(this.form,'quantityOpenDr',this.form.quantityOpenDr?Number(this.form.quantityOpenDr):0) // 期初借方数量
  460. this.$set(this.form,'quantityOpenCr',this.form.quantityOpenCr?Number(this.form.quantityOpenCr):0) // 期初贷方数量
  461. this.$set(this.form,'quantityDr',this.form.quantityDr?Number(this.form.quantityDr):0) // 本期借方数量
  462. this.$set(this.form,'quantityCr',this.form.quantityCr?Number(this.form.quantityCr):0) // 本期贷方数量
  463. if (this.form.curCode == 'USD') {
  464. // 期初借方外币金额 = 单价 * 期初借方数量
  465. this.$set(this.form,'amountOpenDrUsd',Number(this.form.price) * Number(this.form.quantityOpenDr))
  466. // 期初贷方外币金额 = 单价 * 期初贷方数量
  467. this.$set(this.form,'amountOpenCrUsd',Number(this.form.price) * Number(this.form.quantityOpenCr))
  468. // 期初外币余额 = 期初贷方外币金额 - 期初借方外币金额
  469. this.$set(this.form,'amountOpenUsdBlc',Number(this.form.amountOpenCrUsd) - Number(this.form.amountOpenDrUsd))
  470. // 本期借方外币金额 = 单价 * 本期借方数量
  471. this.$set(this.form,'amountDrUsd',Number(this.form.price) * Number(this.form.quantityDr))
  472. // 本期贷方外币金额 = 单价 * 本期贷方数量
  473. this.$set(this.form,'amountCrUsd',Number(this.form.price) * Number(this.form.quantityCr))
  474. // 本期外币余额 = 本期贷方外币金额 - 本期借方外币金额
  475. this.$set(this.form,'amountUsdBlc',Number(this.form.amountCrUsd) - Number(this.form.amountDrUsd))
  476. }else {
  477. // 期初借方本币金额 = 单价 * 期初借方数量
  478. this.$set(this.form,'amountOpenDr',Number(this.form.price) * Number(this.form.quantityOpenDr))
  479. // 期初贷方本币金额 = 单价 * 期初贷方数量
  480. this.$set(this.form,'amountOpenCr',Number(this.form.price) * Number(this.form.quantityOpenCr))
  481. // 期初本币余额 = 期初贷方本币金额 - 期初借方本币金额
  482. this.$set(this.form,'amountOpenBlc',Number(this.form.amountOpenCr) - Number(this.form.amountOpenDr))
  483. // 本期借方本币金额 = 单价 * 本期借方数量
  484. this.$set(this.form,'amountDr',Number(this.form.price) * Number(this.form.quantityDr))
  485. // 本期贷方本币金额 = 单价 * 本期贷方数量
  486. this.$set(this.form,'amountCr',Number(this.form.price) * Number(this.form.quantityCr))
  487. // 本期本币余额 = 本期贷方本币金额 - 本期借方本币金额
  488. this.$set(this.form,'amountBlc',Number(this.form.amountCr) - Number(this.form.amountDr))
  489. }
  490. // 期初余额数量 = 期初贷方数量 - 期初借方数量
  491. this.$set(this.form,'quantityOpenBlc',Number(this.form.quantityOpenCr) - Number(this.form.quantityOpenDr))
  492. // 本期余额数量 = 本期贷方数量 - 本期借方数量
  493. this.$set(this.form,'quantityBlc',Number(this.form.quantityCr) - Number(this.form.quantityDr))
  494. },
  495. // 下拉回调
  496. corpChange(value,name){
  497. if (name === 'curCode') {
  498. for (let item of this.curData) {
  499. if (item.code == value) {
  500. this.$set(this.form,'curCode',item.code)
  501. this.$set(this.form,'exrate',item.exrate)
  502. }
  503. }
  504. }else if (name === 'itemClassifyId') {
  505. this.$set(this.form, name, value)
  506. let cl = this.itemClassifyList.find(item=>item.id == value)
  507. if(cl){
  508. this.$set(this.form, "itemClassify", cl.cnName)
  509. }
  510. console.log(this.form)
  511. }else {
  512. this.$set(this.form, name, value)
  513. }
  514. },
  515. // 获取币别数据
  516. getRateListfun(cnName){
  517. getRateList({current:1,size:10,cnName}).then(res=>{
  518. this.curData = res.data.data.records
  519. })
  520. },
  521. // 获取计算属性
  522. getBunitsPagefun(){
  523. getBunitsPage().then(res=>{
  524. this.unitNoData = res.data.data
  525. })
  526. },
  527. // 核算项目数据
  528. propertyWorkDictsfun(cnName){
  529. getWorkDicts('account_propertys').then((res) => {
  530. this.propertyData = res.data.data
  531. });
  532. },
  533. }
  534. }
  535. </script>
  536. <style scoped>
  537. ::v-deep.el-form-item {
  538. margin-bottom: 0;
  539. }
  540. .right-align .el-input__inner {
  541. text-align: right;
  542. }
  543. </style>