reimbursementIsNoTicketForm.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :close-on-click-modal="false"
  5. v-dialogDrag
  6. :visible.sync="visible">
  7. <el-form size="small" :model="inputForm" ref="inputForm" @keyup.enter.native="doSubmit()"
  8. label-width="120px" v-loading="loading" :class="method==='view'?'readonly':''" :disabled="method==='view'" @submit.native.prevent>
  9. <el-row :gutter="15">
  10. <el-col :span="12">
  11. <el-form-item prop="userId" :rules=" [{required: true, message: '人员不能为空', trigger: 'blur'}]" label="人员">
  12. <SelectUserTree
  13. ref="companyTree"
  14. :props="{
  15. value: 'id', // ID字段名
  16. label: 'name', // 显示名称
  17. children: 'children' // 子级字段名
  18. }"
  19. :url="`/sys/user/treeUserDataAllOffice?type=2`"
  20. :value="inputForm.userId"
  21. :clearable="true"
  22. :accordion="true"
  23. :disabled="method==='edit'"
  24. @getValue="(value) => {inputForm.userId=value}"/>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="12">
  28. <el-form-item label="年份" prop="year" :rules="[{required: true, message: '年份不能为空', trigger: 'blur'}]">
  29. <el-select v-model="inputForm.year" @change="selectYear(inputForm.year)" style="width:100%" placeholder="请选择">
  30. <el-option
  31. v-for="year in yearList"
  32. :key="year.id"
  33. :label="year.year"
  34. :value="year.year">
  35. </el-option>
  36. </el-select>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12" v-if="method !== 'read'">
  40. <el-form-item label="报销类型" prop="reimbursementType"
  41. :rules="[
  42. {required: true, message:'报销类型不能为空', trigger:'blur'}
  43. ]">
  44. <el-radio-group v-model="inputForm.reimbursementType">
  45. <el-radio v-for="item in $dictUtils.getDictList('reimbursement_type')" @change="selectReimbursementType(inputForm.reimbursementType)" :label="item.value" :key="item.id">{{item.label}}</el-radio>
  46. </el-radio-group>
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="12" v-if="method !== 'read'">
  50. <el-form-item label="实发类型" prop="reimbursementFsalary"
  51. :rules="[
  52. {required: true, message:'请选择实发类型', trigger:'blur'}
  53. ]">
  54. <el-radio-group v-model="inputForm.reimbursementFsalary">
  55. <el-radio v-for="item in $dictUtils.getDictList('reimbursement_fsalary')" :label="item.value" :key="item.id">{{item.label}}</el-radio>
  56. </el-radio-group>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12" v-if="this.show">
  60. <el-form-item label="报销天数" prop="reimbursementDay" :rules="[{required: true, max: 10, message:'报销天数不能为空且只可为整数', trigger:'blur'}]">
  61. <el-input v-model="inputForm.reimbursementDay" class="bg-grey" size="small" placeholder="报销天数" style="width: 100%;" @keyup.native="inputForm.reimbursementDay = checkInputs(inputForm.reimbursementDay)"></el-input>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="12" v-if="this.show">
  65. <el-form-item label="剩余报销天数" prop="surplusReimbursementDay" :rules="[{ max: 10, trigger:'blur'}]">
  66. <el-input v-model="inputForm.surplusReimbursementDay" class="bg-grey" size="small" placeholder="剩余报销天数" style="width: 100%;" :disabled="true"></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="12">
  70. <el-form-item label="报销金额" prop="reimbursementAmount":rules="[{required: true, max: 10, message:'报销金额不可为空', max: 10,trigger:'blur'}]">
  71. <el-input id="reimbursementAmount" v-model="inputForm.reimbursementAmount" class="bg-grey" size="small" placeholder="报销金额" style="width: 100%;" v-bind:disabled="this.show" @keyup.native="inputForm.reimbursementAmount = checkReimbursementAmount(inputForm.reimbursementAmount)">
  72.   </el-input>
  73. </el-form-item>
  74. </el-col>
  75. <el-col :span="12" v-if="this.show">
  76. <el-form-item label="日报销额度" prop="reimbursementQuotaDay":rules="[{max: 10,trigger:'blur'}]">
  77. <el-input v-model="inputForm.reimbursementQuotaDay" class="bg-grey" size="small" placeholder="日报销额度" style="width: 100%;" :disabled="true">
  78.   </el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="12">
  82. <el-form-item label="年报销额度" prop="reimbursementQuota":rules="[{max: 10,trigger:'blur'}]">
  83. <el-input v-model="inputForm.reimbursementQuota" class="bg-grey" size="small" placeholder="年报销额度" style="width: 100%;" :disabled="true">
  84.   </el-input>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="12">
  88. <el-form-item label="剩余可报额度" prop="remainReimbursementAmount" :rules="[{max: 10, trigger:'blur'}]">
  89. <el-input v-model="inputForm.remainReimbursementAmount" class="bg-grey" size="small" placeholder="剩余可报额度" style="width: 100%;" :disabled="true">
  90.   </el-input>
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="24">
  94. <el-form-item label="备注" prop="remarks" :rules="[{max: 255, trigger:'blur'}]">
  95. <el-input type="textarea" v-model="inputForm.remarks" oninput="if(value.length>255)value=value.slice(0,254)" placeholder="备注" > </el-input>
  96. </el-form-item>
  97. </el-col>
  98. </el-row>
  99. </el-form>
  100. <span slot="footer" class="dialog-footer">
  101. <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
  102. <el-button size="small" type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
  103. </span>
  104. </el-dialog>
  105. </template>
  106. <script>
  107. import SelectUserTree from './treeReimbursementBuinessUserSelect'
  108. import ReimbursementBusiness from '@/api/reimbursementSys/accountant/reimbursementBusinessTwoService'
  109. export default {
  110. data () {
  111. return {
  112. show: false,
  113. visible: false,
  114. loading: false,
  115. title: '',
  116. method: '',
  117. yearList: [],
  118. inputForm: {
  119. id: '',
  120. userId: '', // 人员id
  121. year: '', // 年份
  122. reimbursementType: '', // 报销类型
  123. reimbursementFsalary: '', // 实发类型
  124. reimbursementQuota: '', // 年报销额度
  125. reimbursementAmount: '', // 报销金额
  126. reimbursementQuotaDay: '', // 日报销额度
  127. canReimbursementAmount: '', // 业务可报销额度
  128. surplusReimbursementAmount: '', // 业务剩余可报销额度
  129. reimbursementDay: '', // 报销天数
  130. surplusReimbursementDay: '', // 剩余报销天数
  131. oldSurplusReimbursementDay: '', // 剩余报销天数(比较数据)
  132. remarks: '' // 备注
  133. }
  134. }
  135. },
  136. ReimbursementBusiness: null,
  137. created () {
  138. this.reimbursementBusiness = new ReimbursementBusiness()
  139. },
  140. mounted () {
  141. },
  142. components: {
  143. SelectUserTree
  144. },
  145. provide () {
  146. return {
  147. say: this.say
  148. }
  149. },
  150. methods: {
  151. checkInputs: function (num) {
  152. let str = num.toString()
  153. var len1 = str.substr(0, 1)
  154. var len2 = str.substr(1, 1)
  155. // eslint-disable-next-line eqeqeq
  156. if (str.length > 1 && len1 == 0 && len2 != '.') {
  157. str = str.substr(1, 1)
  158. }
  159. // eslint-disable-next-line eqeqeq
  160. if (len1 == '.') {
  161. str = ''
  162. }
  163. // eslint-disable-next-line no-useless-escape
  164. str = str.replace(/[^\d^]+/g, '') // 保留数字
  165. // 获取日报销额度
  166. let reimbursementQuotaDayNumber = this.inputForm.reimbursementQuotaDay
  167. if (reimbursementQuotaDayNumber) {
  168. var oldSurplusReimbursementDay = this.inputForm.oldSurplusReimbursementDay
  169. this.inputForm.reimbursementAmount = (str * reimbursementQuotaDayNumber).toString()
  170. this.inputForm.surplusReimbursementDay = (oldSurplusReimbursementDay - str).toString()
  171. }
  172. return str
  173. },
  174. checkReimbursementAmount: function (num) {
  175. let str = num.toString()
  176. var len1 = str.substr(0, 1)
  177. var len2 = str.substr(1, 1)
  178. // eslint-disable-next-line eqeqeq
  179. if (str.length > 1 && len1 == 0 && len2 != '.') {
  180. str = str.substr(1, 1)
  181. }
  182. // eslint-disable-next-line eqeqeq
  183. if (len1 == '.') {
  184. str = ''
  185. }
  186. // eslint-disable-next-line eqeqeq
  187. if (str.indexOf('.') != -1) {
  188. var str_ = str.substr(str.indexOf('.') + 1)
  189. // eslint-disable-next-line eqeqeq
  190. if (str_.indexOf('.') != -1) {
  191. str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
  192. }
  193. if (str_.length > 2) {
  194. this.$message.warning(`金额小数点后只能输入两位,请正确输入!`)
  195. return (str = '')
  196. }
  197. }
  198. // eslint-disable-next-line no-useless-escape
  199. str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
  200. return str
  201. },
  202. say (userId) {
  203. // 根据用户id查询年份信息
  204. this.reimbursementBusiness.yearList({userId: userId, current: 1, size: -1}).then(({data}) => {
  205. this.yearList = data.records
  206. if (this.yearList.length > 0) {
  207. this.inputForm.year = this.yearList[0].year
  208. this.inputForm.reimbursementQuotaDay = this.yearList[0].reimbursementQuotaDay
  209. this.inputForm.reimbursementQuota = this.yearList[0].reimbursementQuota
  210. this.inputForm.remainReimbursementAmount = this.yearList[0].remainReimbursementAmount
  211. this.inputForm.surplusReimbursementDay = this.yearList[0].surplusReimbursementDay
  212. this.inputForm.oldSurplusReimbursementDay = this.yearList[0].surplusReimbursementDay
  213. // 获取日报销额度
  214. let reimbursementQuotaDayNumber = this.inputForm.reimbursementQuotaDay
  215. let reimbursementDayNumber = this.inputForm.reimbursementDay
  216. if (reimbursementQuotaDayNumber && reimbursementDayNumber) {
  217. var oldSurplusReimbursementDay = this.inputForm.oldSurplusReimbursementDay
  218. this.inputForm.reimbursementAmount = (reimbursementDayNumber * reimbursementQuotaDayNumber).toString()
  219. this.inputForm.surplusReimbursementDay = (oldSurplusReimbursementDay - reimbursementDayNumber).toString()
  220. }
  221. } else {
  222. this.inputForm.year = ''
  223. this.inputForm.reimbursementQuotaDay = ''
  224. this.inputForm.reimbursementQuota = ''
  225. this.inputForm.remainReimbursementAmount = ''
  226. this.inputForm.surplusReimbursementDay = ''
  227. this.inputForm.oldSurplusReimbursementDay = ''
  228. }
  229. })
  230. },
  231. selectReimbursementType (reimbursementType) {
  232. if (reimbursementType === '1') {
  233. // reimbursementAmount.isdisabled = true
  234. this.show = true
  235. } else {
  236. this.show = false
  237. }
  238. },
  239. selectYear (year) {
  240. for (var yearKey in this.yearList) {
  241. if (this.yearList[yearKey].year === year) {
  242. this.inputForm.reimbursementQuotaDay = this.yearList[yearKey].reimbursementQuotaDay
  243. this.inputForm.reimbursementQuota = this.yearList[yearKey].reimbursementQuota
  244. this.inputForm.remainReimbursementAmount = this.yearList[yearKey].remainReimbursementAmount
  245. // 获取日报销额度
  246. let reimbursementQuotaDayNumber = this.inputForm.reimbursementQuotaDay
  247. let reimbursementDayNumber = this.inputForm.reimbursementDay
  248. if (reimbursementQuotaDayNumber && reimbursementDayNumber) {
  249. this.inputForm.reimbursementAmount = (reimbursementDayNumber * reimbursementQuotaDayNumber).toString()
  250. }
  251. }
  252. }
  253. },
  254. init (method, obj) {
  255. this.method = method
  256. this.inputForm.businessCodeId = obj.businessCodeId
  257. this.inputForm.businessCode = obj.businessCode
  258. if (method === 'addBusinessInfo') {
  259. this.title = `新建报销信息`
  260. } else if (method === 'edit') {
  261. this.title = '修改人员信息'
  262. } else if (method === 'view') {
  263. this.title = '查看人员信息'
  264. }
  265. this.visible = true
  266. this.$nextTick(() => {
  267. this.inputForm.id = obj.id
  268. this.$refs['inputForm'].resetFields()
  269. if (method === 'edit' || method === 'view') { // 修改或者查看
  270. this.inputForm.id = obj
  271. this.loading = true
  272. this.reimbursementBusiness.queryById(this.inputForm.id).then(({data}) => {
  273. this.inputForm = this.recover(this.inputForm, data)
  274. this.selectReimbursementType(this.inputForm.reimbursementType)
  275. this.loading = false
  276. })
  277. }
  278. if (method === 'addBusinessInfo') { // 修改或者查看
  279. this.inputForm.businessCodeId = obj.businessCodeId
  280. this.loading = true
  281. this.reimbursementBusiness.getBusinessById(this.inputForm.businessCodeId).then(({data}) => {
  282. this.inputForm = this.recover(this.inputForm, data)
  283. this.selectReimbursementType(this.inputForm.reimbursementType)
  284. this.loading = false
  285. })
  286. }
  287. })
  288. },
  289. // 表单提交
  290. doSubmit () {
  291. this.$refs['inputForm'].validate((valid) => {
  292. if (valid) {
  293. this.loading = true
  294. this.inputForm.officeType = 2
  295. this.reimbursementBusiness.save(this.inputForm).then(({data}) => {
  296. this.loading = false
  297. this.visible = false
  298. this.$message.success(data)
  299. this.$emit('refreshDataList')
  300. }).catch(() => {
  301. this.loading = false
  302. })
  303. }
  304. })
  305. }
  306. }
  307. }
  308. </script>