deduct.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. var businessT = require('../../../tools/business-tool.js')
  2. var sysT = require('../../../tools/sys-tool.js')
  3. var app = getApp()
  4. var childrenDeduct = 1000
  5. var education = [300, 400]
  6. var support = 2000
  7. var loans = 1000
  8. var renting = 1500
  9. var medicalRange = [15000, 80000]
  10. Page({
  11. /**
  12. * 页面的初始数据
  13. */
  14. data: {
  15. adapter: {
  16. suffix: '',
  17. },
  18. deduct: {
  19. show: '0.00',
  20. medical: 0,
  21. other:0
  22. },
  23. tips: {
  24. s: false,
  25. t: '',
  26. c: []
  27. },
  28. deductItem: [
  29. { t: '子女教育(3岁以上)', s: false, i: 0 },
  30. { t: '继续教育', s: false, i: 1 },
  31. { t: '赡养老人(≥60岁)', s: false, i: 2 },
  32. { t: '大病医疗', s: false, i: 3 },
  33. { t: '首套房贷利息', s: false, i: 4 },
  34. { t: '住房租金', s: false, i: 5 },
  35. { t: '子女人数', c: '1', v: '0', a: ['1', '2','3','4','5'], i: 6 },//6
  36. { t: '承担方', c: '自己承担', v: '0', a: ['自己承担', '夫妻双方均摊'], i: 7 },//7,
  37. { t: '类型', c: '职业资格教育', v: '0', a: ['职业资格教育', '学历(学位)继续教育'], i: 8 },//8,
  38. { t: '分摊人数', c: '1人', v: '0', a: ['1人', '2人', '3人或以上'], i: 9 },//9,
  39. { t: '分摊金额', c: '', p: '分摊金额≤1000元/人', i: 2 },//10
  40. { t: '支出费用', c: '', p: '', i: 3 },//11
  41. ]
  42. },
  43. tipsAction: businessT.action(function (sender) {
  44. if (sender.currentTarget.id == '2') {
  45. this.data.tips.t = '子女教育';
  46. this.data.tips.c = ['1、纳税人的子女接受全日制学历教育的相关支出,按照每个子女每月1000元的标准定额扣除。', '2、学历教育包括义务教育(小学、初中教育)、高中阶段教育(普通高中、中等职业、技工教育) 、高等教育(大学专科、大学本科、硕士研究生、博士研究生教育)。', '3、年满3岁至小学入学前处于学前教育阶段的子女,按本条第一款规定执行。']
  47. } else if (sender.currentTarget.id == '3') {
  48. this.data.tips.t = '继续教育';
  49. this.data.tips.c = ['1、纳税人在中国境内接受学历(学位)继续教育的支出,在学历(学位)教育期间按照每月400元定额扣除。', '2、同一学历(学位)继续教育的扣除期限不能超过48个月。', '3、纳税人接受技能人员职业资格继续教育、专业技术人员职业资格继续教育的支出。', '4、在取得相关证书的当年,按照3600元定额扣除。']
  50. } else if (sender.currentTarget.id == '4') {
  51. this.data.tips.t = '赡养老人';
  52. this.data.tips.c = ['被赡养人是指年满60岁(含)的父母,以及子女均已去世的年满60岁的祖父母、外祖父母。', '1、纳税人为独生子女的,按照每月2000元的标准定额扣除。', '2、纳税人为非独生子女的,由其与兄弟姐妹分摊每月2000元的扣除额度,每人分摊的额度不能超过每月1000元。可以由赡养人均摊或者约定分摊,也可以由被赡养人指定分摊。约定或者指定分摊的须签订书面分摊协议,指定分摊优先于约定分摊。具体分摊方式和额度在一个纳税年度内不能变更。']
  53. } else if (sender.currentTarget.id == '5') {
  54. this.data.tips.t = '大病医疗';
  55. this.data.tips.c = ['1、在一个纳税年度内,纳税人发生的与基本医保相关的医药费用支出。', '2、扣除医保报销后个人负担(指医保目录范围内的自付部分)累计超过15000元的部分,由纳税人在办理年度汇算清缴时,在80000元限额内据实扣除。']
  56. } else if (sender.currentTarget.id == '6') {
  57. this.data.tips.t = '首套房贷利息';
  58. this.data.tips.c = ['1、纳税人本人或者配偶单独或者共同使用商业银行或者住房公积金个人住房贷款为本人或者其配偶购买中国境内住房,发生的首套住房贷款利息支出,在实际发生贷款利息的年度,按照每月1000元的标准定额扣除,扣除期限最长不超过240个月。', '2、纳税人只能享受一次首套住房贷款的利息扣除。']
  59. } else if (sender.currentTarget.id == '7') {
  60. this.data.tips.t = '住房租金';
  61. this.data.tips.c = ['纳税人在主要工作城市没有自有住房而发生的住房租金支出,按照以下标准定额扣除:', '1、直辖市、省会(首府)城市、计划单列市以及国务院确定的其他城市,扣除标准为每月1500元。', '2、除第一项所列城市以外,市辖区户籍人口超过100万的城市,扣除标准为每月1100元;市辖区户籍人口不超过100万的城市,扣除标准为每月800元。']
  62. }
  63. this.data.tips.s = true;
  64. this.setData({
  65. tips: this.data.tips
  66. })
  67. }),
  68. dismissTipsView: businessT.action(function (sender) {
  69. this.data.tips.s = false;
  70. this.setData({
  71. tips: this.data.tips
  72. })
  73. }),
  74. // checkboxChange: function (e) {
  75. // console.log(e.detail.value.length,'checkbox发生change事件,携带value值为:', e.detail.value)
  76. // },
  77. switchChange: businessT.action(function (sender) {
  78. //console.log(sender.currentTarget.dataset.index)
  79. this.data.deductItem[sender.currentTarget.dataset.index].s = Boolean(sender.detail.value.length)
  80. if (sender.currentTarget.dataset.index == 4 && Boolean(sender.detail.value.length) ) {
  81. this.data.deductItem[5].s = false
  82. } else if (sender.currentTarget.dataset.index == 5 && Boolean(sender.detail.value.length) ) {
  83. this.data.deductItem[4].s = false
  84. }
  85. this.calculate()
  86. }),
  87. pickerChange: businessT.action(function (sender) {
  88. businessT.debugLog(sender)
  89. var index = sender.currentTarget.id
  90. this.data.deductItem[index].v = sender.detail.value
  91. this.data.deductItem[index].c = this.data.deductItem[index].a[sender.detail.value]
  92. this.calculate()
  93. }),
  94. inputAction: function (sender) {
  95. businessT.debugLog(sender)
  96. if (sender.currentTarget.id == 1) {
  97. this.data.deductItem[6].c = sender.detail.value
  98. } else if (sender.currentTarget.id == 2) {
  99. if (sender.detail.value > 1000) {
  100. sender.detail.value = 1000
  101. }
  102. this.data.deductItem[10].c = sender.detail.value
  103. } else if (sender.currentTarget.id == 3) {
  104. this.data.deductItem[11].c = sender.detail.value
  105. }
  106. this.calculate()
  107. },
  108. calculate: function() {
  109. var deduct = 0
  110. if (this.data.deductItem[0].s) {
  111. deduct = deduct + this.data.deductItem[6].c * childrenDeduct / (Number(this.data.deductItem[7].v) + 1)
  112. }
  113. if (this.data.deductItem[1].s) {
  114. deduct = deduct + education[this.data.deductItem[8].v]
  115. }
  116. if (this.data.deductItem[2].s) {
  117. if (this.data.deductItem[9].v == 2) {
  118. deduct = deduct + Number(this.data.deductItem[10].c)
  119. } else {
  120. deduct = deduct + support / (Number(this.data.deductItem[9].v) + 1)
  121. }
  122. }
  123. if (this.data.deductItem[3].s) {
  124. var medical = Number(this.data.deductItem[11].c)
  125. deduct = deduct + medical
  126. this.data.deduct.medical = medical
  127. }
  128. if (this.data.deductItem[4].s) {
  129. deduct = deduct + loans
  130. } else if (this.data.deductItem[5].s) {
  131. deduct = deduct + renting
  132. }
  133. this.data.deduct.other = deduct - this.data.deduct.medical
  134. this.data.deduct.show = Number(deduct).toFixed(2)
  135. this.setData({
  136. deductItem: this.data.deductItem,
  137. deduct: this.data.deduct
  138. })
  139. },
  140. comfirmAction: businessT.action(function (sender) {
  141. if (this.data.deductItem[0].s && Number(this.data.deductItem[6].c) == 0) {
  142. wx.showModal({
  143. content: '请输入子女人数',
  144. })
  145. return
  146. }
  147. if (this.data.deductItem[2].s && this.data.deductItem[9].v == 2 && Number(this.data.deductItem[10].c) == 0) {
  148. wx.showModal({
  149. content: '请输入分摊金额',
  150. })
  151. return
  152. }
  153. var a = Number(this.data.deductItem[11].c)
  154. if (this.data.deductItem[3].s && a == 0) {
  155. wx.showModal({
  156. content: '请输入大病医疗费用',
  157. })
  158. return
  159. }
  160. if (this.data.deductItem[3].s && (a > medicalRange[1] || a < medicalRange[0])) {
  161. wx.showModal({
  162. content: '请输入大病医疗费用范围内的金额',
  163. })
  164. return
  165. }
  166. var pages = getCurrentPages()
  167. pages[pages.length - 2].data.deduct.c = this.data.deduct.show
  168. pages[pages.length - 2].data.deductData.medical = this.data.deduct.medical
  169. pages[pages.length - 2].data.deductData.other = this.data.deduct.other
  170. wx.navigateBack({
  171. })
  172. }),
  173. /**
  174. * 生命周期函数--监听页面加载
  175. */
  176. onLoad: function (options) {
  177. this.data.adapter = {
  178. suffix: sysT.suffixOfClass()
  179. }
  180. this.data.deductItem[11].p = medicalRange[0] + '元-' + medicalRange[1] + '元'
  181. this.setData({
  182. adapter: this.data.adapter,
  183. deductItem: this.data.deductItem
  184. })
  185. },
  186. /**
  187. * 生命周期函数--监听页面初次渲染完成
  188. */
  189. onReady: function () {
  190. },
  191. /**
  192. * 生命周期函数--监听页面显示
  193. */
  194. onShow: function () {
  195. },
  196. /**
  197. * 生命周期函数--监听页面隐藏
  198. */
  199. onHide: function () {
  200. },
  201. /**
  202. * 生命周期函数--监听页面卸载
  203. */
  204. onUnload: function () {
  205. },
  206. /**
  207. * 页面相关事件处理函数--监听用户下拉动作
  208. */
  209. onPullDownRefresh: function () {
  210. },
  211. /**
  212. * 页面上拉触底事件的处理函数
  213. */
  214. onReachBottom: function () {
  215. },
  216. /**
  217. * 用户点击右上角分享
  218. */
  219. onShareAppMessage: function () {
  220. }
  221. })