ReimbursementComponent.vue 151 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713
  1. <template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
  2. <div>
  3. <div v-if="inputForm.sourceType === '5'">
  4. <el-divider content-position="left"><i class="el-icon-document"></i>
  5. 采购详情
  6. </el-divider>
  7. <el-row :gutter="15">
  8. <vxe-table border show-footer show-overflow :footer-method="footerMethod555" ref="preTable"
  9. class="vxe-table-element" :data="inputForm.preList" style="margin-left: 5em" highlight-current-row>
  10. <vxe-table-column field="purchaser" title="采购人" :edit-render="{}" show-overflow="title"
  11. :rules="[{ required: true, message: '请选择采购人', trigger: 'blur' }]"></vxe-table-column>
  12. <vxe-table-column field="procurementOffice" title="采购部门" :edit-render="{}"
  13. show-overflow="title"></vxe-table-column>
  14. <vxe-table-column field="procurementType" title="采购类型" :edit-render="{}" show-overflow="title"
  15. :rules="[{ required: true, message: '请选择采购类型', trigger: 'blur' }]"></vxe-table-column>
  16. <vxe-table-column field="tradeName" title="商品名称" :edit-render="{}" show-overflow="title"
  17. :rules="[{ required: true, message: '请填写商品名称', trigger: 'blur' }]"></vxe-table-column>
  18. <vxe-table-column field="tradePrice" title="商品单价(元)" :edit-render="{}" show-overflow="title"
  19. :rules="[{ required: true, message: '请输入商品单价', trigger: 'blur' }]"></vxe-table-column>
  20. <vxe-table-column field="tradeNumber" title="商品数量" :edit-render="{}"
  21. show-overflow="title"></vxe-table-column>
  22. <vxe-table-column field="priceSum" title="商品总价" :edit-render="{}"
  23. show-overflow="title"></vxe-table-column>
  24. <vxe-table-column field="company" title="单位" :edit-render="{}"
  25. show-overflow="title"></vxe-table-column>
  26. <vxe-table-column field="remarks" title="备注" :edit-render="{}"
  27. show-overflow="title"></vxe-table-column>
  28. <vxe-table-column title="操作">
  29. <template #default="scope">
  30. <el-button size="default" type="primary" :disabled="false"
  31. @click="seeFileInfo(scope.$rowIndex)">文件详情</el-button>
  32. </template>
  33. </vxe-table-column>
  34. </vxe-table>
  35. </el-row>
  36. </div>
  37. <div v-if="tenantFlag === 'pg' && inputForm.sourceType === '1'">
  38. <el-divider content-position="left"><i class="el-icon-document"></i>
  39. 项目报销详情
  40. <el-button style="margin-left: 20px" type="primary"
  41. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'" size="default"
  42. @click="insertEvent('detail')" plain>
  43. 新增报销单
  44. </el-button>
  45. </el-divider>
  46. <el-row :gutter="15">
  47. <el-col :span="24">
  48. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
  49. :key="detailKey" class="vxe-table-element" :data="inputForm.detailInfos"
  50. style="margin-left: 5em" @cell-click="" @edit-closed="" highlight-current-row
  51. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  52. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  53. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  54. <vxe-column title="报销单" type="expand" width="80">
  55. <template #default="{ row, rowIndex }">
  56. <span>{{ rowIndex + 1 }}</span>
  57. </template>
  58. <template #content="{ row, rowIndex }">
  59. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  60. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  61. :ref="row.uniqueId + 'Upload'">
  62. </InvoiceReimbursementUpLoadComponent>
  63. </template>
  64. </vxe-column>
  65. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  66. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  67. <template #edit="scope">
  68. <el-input v-model="scope.row.userName"
  69. @focus="userPullListForm(scope.$rowIndex)"></el-input>
  70. </template>
  71. </vxe-table-column>
  72. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  73. <template #edit="scope">
  74. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  75. </template>
  76. </vxe-table-column>
  77. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}"
  78. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  79. <template #edit="scope">
  80. <el-input v-model="scope.row.typeName"
  81. @focus="typePullForm(scope.$rowIndex, scope.row.deptId)"></el-input>
  82. </template>
  83. </vxe-table-column>
  84. <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title"
  85. :rules="[{ required: true, message: '请选择报销项目', trigger: 'blur' }]">
  86. <template #edit="scope">
  87. <el-input v-model="scope.row.projectName"
  88. @focus="openProgramPageFormPg(scope.$rowIndex, scope.row)"></el-input>
  89. </template>
  90. </vxe-table-column>
  91. <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}" show-overflow="title">
  92. <template #edit="scope">
  93. <el-input :readonly="true" v-model="scope.row.reportNumber"></el-input>
  94. </template>
  95. </vxe-table-column>
  96. <vxe-colgroup title="费用" align="center">
  97. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  98. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  99. <template #edit="scope">
  100. <el-input maxlength="15" v-model="scope.row.number"
  101. @input="handleOrdinaryNumberInput(scope.row, 1)"
  102. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  103. </template>
  104. </vxe-table-column>
  105. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  106. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  107. <template #edit="scope">
  108. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  109. @input="handleOrdinaryNumberInput(scope.row, 2)"
  110. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  111. </template>
  112. </vxe-table-column>
  113. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  114. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  115. <template #header="{ column }">
  116. <span class="star-icon"></span>
  117. <span>汇总</span>
  118. </template>
  119. <template #edit="scope">
  120. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  121. </template>
  122. </vxe-table-column>
  123. </vxe-colgroup>
  124. <vxe-colgroup title="票据张数" align="center">
  125. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  126. </vxe-table-column>
  127. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  128. show-overflow="title">
  129. <template #edit="scope">
  130. <el-input v-model="scope.row.ordinaryReceiptNumber"
  131. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  132. </template>
  133. </vxe-table-column>
  134. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  135. </vxe-table-column>
  136. </vxe-colgroup>
  137. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  138. <template #edit="scope">
  139. <el-input v-model="scope.row.content"></el-input>
  140. </template>
  141. </vxe-table-column>
  142. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  143. <template #edit="scope">
  144. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  145. maxlength="10"></el-input>
  146. </template>
  147. </vxe-table-column>
  148. <vxe-table-column title="操作" width="180">
  149. <template #default="scope">
  150. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  151. type="primary">新增</el-button>
  152. <el-button size="default" type="danger"
  153. @click="removeEvent(scope.row, scope.$rowIndex, 'detail')">删除</el-button>
  154. </template>
  155. </vxe-table-column>
  156. </vxe-table>
  157. </el-col>
  158. </el-row>
  159. </div>
  160. <div v-else-if="tenantFlag === 'cw' && inputForm.sourceType === '1'">
  161. <el-divider content-position="left"><i class="el-icon-document"></i>
  162. 项目报销详情
  163. <el-button style="margin-left: 20px" type="primary"
  164. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'" size="default"
  165. @click="insertEvent('detail')" plain>
  166. 新增报销单
  167. </el-button>
  168. </el-divider>
  169. <el-row :gutter="15">
  170. <el-col :span="24">
  171. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
  172. :key="detailKey" class="vxe-table-element" :data="inputForm.detailInfos"
  173. style="margin-left: 5em" @cell-click="" @edit-closed="" highlight-current-row
  174. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  175. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  176. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  177. <vxe-column title="报销单" type="expand" width="80">
  178. <template #default="{ row, rowIndex }">
  179. <span>{{ rowIndex + 1 }}</span>
  180. </template>
  181. <template #content="{ row, rowIndex }">
  182. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  183. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  184. :ref="row.uniqueId + 'Upload'">
  185. </InvoiceReimbursementUpLoadComponent>
  186. </template>
  187. </vxe-column>
  188. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  189. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  190. <template #edit="scope">
  191. <el-input v-model="scope.row.userName"
  192. @focus="userPullListForm(scope.$rowIndex)"></el-input>
  193. </template>
  194. </vxe-table-column>
  195. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  196. <template #edit="scope">
  197. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  198. </template>
  199. </vxe-table-column>
  200. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}"
  201. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  202. <template #edit="scope">
  203. <el-input v-model="scope.row.typeName"
  204. @focus="typePullFormProject(scope.$rowIndex, scope.row.deptId)"></el-input>
  205. </template>
  206. </vxe-table-column>
  207. <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title"
  208. :rules="[{ required: true, message: '请选择报销项目', trigger: 'blur' }]">
  209. <template #edit="scope">
  210. <el-input v-model="scope.row.projectName"
  211. @focus="openProgramPageFormCwProject(scope.$rowIndex, scope.row)"></el-input>
  212. </template>
  213. </vxe-table-column>
  214. <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}" show-overflow="title">
  215. <template v-slot:edit="scope">
  216. <el-input :readonly="true" v-model="scope.row.reportNumber"
  217. @focus="openReportNoPageFormCwProject(scope.$rowIndex, scope.row)"></el-input>
  218. </template>
  219. </vxe-table-column>
  220. <vxe-colgroup title="费用" align="center">
  221. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  222. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  223. <template #edit="scope">
  224. <el-input maxlength="15" v-model="scope.row.number"
  225. @input="handleOrdinaryNumberInput(scope.row, 1)"
  226. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input> </template>
  227. </vxe-table-column>
  228. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  229. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  230. <template #edit="scope">
  231. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  232. @input="handleOrdinaryNumberInput(scope.row, 2)"
  233. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  234. </template>
  235. </vxe-table-column>
  236. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  237. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  238. <template #header="{ column }">
  239. <span class="star-icon"></span>
  240. <span>汇总</span>
  241. </template>
  242. <template #edit="scope">
  243. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  244. </template>
  245. </vxe-table-column>
  246. </vxe-colgroup>
  247. <vxe-colgroup title="票据张数" align="center">
  248. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  249. </vxe-table-column>
  250. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  251. show-overflow="title">
  252. <template #edit="scope">
  253. <el-input v-model="scope.row.ordinaryReceiptNumber"
  254. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  255. </template>
  256. </vxe-table-column>
  257. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  258. </vxe-table-column>
  259. </vxe-colgroup>
  260. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  261. <template #edit="scope">
  262. <el-input v-model="scope.row.content"></el-input>
  263. </template>
  264. </vxe-table-column>
  265. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  266. <template #edit="scope">
  267. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  268. maxlength="10"></el-input>
  269. </template>
  270. </vxe-table-column>
  271. <vxe-table-column title="操作" width="180">
  272. <template #default="scope">
  273. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  274. type="primary">新增</el-button>
  275. <el-button size="default" type="danger"
  276. @click="removeEvent(scope.row, scope.$rowIndex, 'detail')">删除</el-button>
  277. </template>
  278. </vxe-table-column>
  279. </vxe-table>
  280. </el-col>
  281. </el-row>
  282. </div>
  283. <div v-else-if="tenantFlag !== 'pg' && inputForm.sourceType === '1'">
  284. <el-divider content-position="left"><i class="el-icon-document"></i>
  285. 项目报销详情
  286. <el-button size="default" style="margin-left: 20px" type="primary"
  287. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  288. @click="insertEvent('detail')" plain>
  289. 新增报销单
  290. </el-button>
  291. </el-divider>
  292. <el-row :gutter="15">
  293. <el-col :span="24">
  294. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTable"
  295. class="vxe-table-element" :data="inputForm.detailInfos" style="margin-left: 5em"
  296. :key="detailKey" highlight-current-row
  297. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  298. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  299. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  300. <vxe-column title="报销单" type="expand" width="80">
  301. <template #default="{ row, rowIndex }">
  302. <span>{{ rowIndex + 1 }}</span>
  303. </template>
  304. <template #content="{ row, rowIndex }">
  305. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  306. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  307. :ref="row.uniqueId + 'Upload'">
  308. </InvoiceReimbursementUpLoadComponent>
  309. </template>
  310. </vxe-column>
  311. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  312. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  313. <template #edit="scope">
  314. <el-input v-model="scope.row.userName"
  315. @focus="userPullListForm(scope.$rowIndex)"></el-input>
  316. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  317. </template>
  318. </vxe-table-column>
  319. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  320. <template #edit="scope">
  321. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  322. </template>
  323. </vxe-table-column>
  324. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  325. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  326. <template #edit="scope">
  327. <el-input v-model="scope.row.typeName"
  328. @focus="typePullForm(scope.$rowIndex, scope.row.deptId)"></el-input>
  329. </template>
  330. </vxe-table-column>
  331. <vxe-table-column field="projectName" title="报销详情" :edit-render="{}" show-overflow="title"
  332. :rules="[{ required: true, message: '请填写报销详情', trigger: 'blur' }]">
  333. <template #edit="scope">
  334. <el-input v-model="scope.row.projectName"
  335. @focus="openProgramPageForm(scope.$rowIndex, scope.row)"></el-input>
  336. </template>
  337. </vxe-table-column>
  338. <vxe-colgroup title="费用" align="center">
  339. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  340. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  341. <template #edit="scope">
  342. <el-input maxlength="15" v-model="scope.row.number"
  343. @input="handleOrdinaryNumberInput(scope.row, 1)"
  344. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  345. </template>
  346. </vxe-table-column>
  347. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  348. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  349. <template #edit="scope">
  350. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  351. @input="handleOrdinaryNumberInput(scope.row, 2)"
  352. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  353. </template>
  354. </vxe-table-column>
  355. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  356. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  357. <template #header="{ column }">
  358. <span class="star-icon"></span>
  359. <span>汇总</span>
  360. </template>
  361. <template #edit="scope">
  362. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  363. </template>
  364. </vxe-table-column>
  365. </vxe-colgroup>
  366. <vxe-colgroup title="票据张数" align="center">
  367. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  368. </vxe-table-column>
  369. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  370. show-overflow="title">
  371. <template #edit="scope">
  372. <el-input v-model="scope.row.ordinaryReceiptNumber"
  373. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  374. </template>
  375. </vxe-table-column>
  376. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  377. </vxe-table-column>
  378. </vxe-colgroup>
  379. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  380. <template #edit="scope">
  381. <el-input v-model="scope.row.content"></el-input>
  382. </template>
  383. </vxe-table-column>
  384. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  385. <template #edit="scope">
  386. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  387. maxlength="10"></el-input>
  388. </template>
  389. </vxe-table-column>
  390. <vxe-table-column title="操作" width="180">
  391. <template #default="scope">
  392. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  393. type="primary">新增</el-button>
  394. <el-button size="default" type="danger"
  395. @click="removeEvent(scope.row, scope.$rowIndex, 'detail')">删除</el-button>
  396. </template>
  397. </vxe-table-column>
  398. </vxe-table>
  399. </el-col>
  400. </el-row>
  401. </div>
  402. <div v-if="inputForm.sourceType === '2'">
  403. <el-divider content-position="left"><i class="el-icon-document"></i>
  404. 合同报销详情
  405. <el-button size="default" style="margin-left: 20px" type="primary"
  406. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  407. @click="insertEvent('contract_detail')" plain>
  408. 新增报销单
  409. </el-button>
  410. </el-divider>
  411. <el-row :gutter="15">
  412. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableContract"
  413. :key="detailKeyContract" class="vxe-table-element" :data="inputForm.detailInfoContracts"
  414. style="margin-left: 5em" highlight-current-row
  415. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  416. :edit-rules="validRules">
  417. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  418. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  419. <template #edit="scope">
  420. <el-input v-model="scope.row.userName"
  421. @focus="userPullListForm2(scope.$rowIndex)"></el-input>
  422. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  423. </template>
  424. </vxe-table-column>
  425. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  426. <template #edit="scope">
  427. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  428. </template>
  429. </vxe-table-column>
  430. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  431. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  432. <template #edit="scope">
  433. <el-input v-model="scope.row.typeName"
  434. @focus="typePullForm2(scope.$rowIndex, scope.row.deptId)"></el-input>
  435. </template>
  436. </vxe-table-column>
  437. <vxe-table-column field="contractName" title="报销合同" :edit-render="{}" show-overflow="title"
  438. :rules="[{ required: true, message: '请选择报销合同', trigger: 'blur' }]">
  439. <template #edit="scope">
  440. <el-input v-model="scope.row.contractName"
  441. @focus="openContractForm(scope.$rowIndex, scope.row)"></el-input>
  442. </template>
  443. </vxe-table-column>
  444. <vxe-colgroup title="费用" align="center">
  445. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  446. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  447. <template #edit="scope">
  448. <el-input maxlength="15" v-model="scope.row.number"
  449. @input="handleOrdinaryNumberInput(scope.row, 1)"
  450. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  451. </template>
  452. </vxe-table-column>
  453. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}" show-overflow="title"
  454. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  455. <template #edit="scope">
  456. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  457. @input="handleOrdinaryNumberInput(scope.row, 2)"
  458. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  459. </template>
  460. </vxe-table-column>
  461. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  462. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  463. <template #header="{ column }">
  464. <span class="star-icon"></span>
  465. <span>汇总</span>
  466. </template>
  467. <template #edit="scope">
  468. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  469. </template>
  470. </vxe-table-column>
  471. </vxe-colgroup>
  472. <vxe-colgroup title="票据张数" align="center">
  473. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  474. </vxe-table-column>
  475. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  476. show-overflow="title">
  477. <template #edit="scope">
  478. <el-input v-model="scope.row.ordinaryReceiptNumber"
  479. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  480. </template>
  481. </vxe-table-column>
  482. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  483. </vxe-table-column>
  484. </vxe-colgroup>
  485. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  486. <template #edit="scope">
  487. <el-input v-model="scope.row.content"></el-input>
  488. </template>
  489. </vxe-table-column>
  490. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  491. <template #edit="scope">
  492. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  493. maxlength="10"></el-input>
  494. </template>
  495. </vxe-table-column>
  496. <vxe-table-column title="操作" width="100">
  497. <template #default="scope">
  498. <el-button size="default" type="danger"
  499. @click="removeEvent(scope.row, scope.$rowIndex, 'contract_detail')">删除</el-button>
  500. </template>
  501. </vxe-table-column>
  502. </vxe-table>
  503. </el-row>
  504. </div>
  505. <div v-if="inputForm.sourceType === '3' && tenantFlag === 'cw'">
  506. <el-divider content-position="left"><i class="el-icon-document"></i>
  507. 报告报销详情
  508. <el-button size="default" style="margin-left: 20px" type="primary"
  509. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  510. @click="insertEvent('report_detail')" plain>
  511. 新增报销单
  512. </el-button>
  513. </el-divider>
  514. <el-row :gutter="15">
  515. <el-col :span="24">
  516. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableReport"
  517. class="vxe-table-element" :data="inputForm.detailInfoReports" style="margin-left: 5em"
  518. :key="detailKeyReport" highlight-current-row
  519. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  520. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  521. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  522. <vxe-column title="报销单" type="expand" width="80">
  523. <template #default="{ row, rowIndex }">
  524. <span>{{ rowIndex + 1 }}</span>
  525. </template>
  526. <template #content="{ row, rowIndex }">
  527. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  528. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  529. :ref="row.uniqueId + 'Upload'">
  530. </InvoiceReimbursementUpLoadComponent>
  531. </template>
  532. </vxe-column>
  533. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  534. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  535. <template #edit="scope">
  536. <el-input v-model="scope.row.userName"
  537. @focus="userPullListForm(scope.$rowIndex)"></el-input>
  538. </template>
  539. </vxe-table-column>
  540. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  541. <template #edit="scope">
  542. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  543. </template>
  544. </vxe-table-column>
  545. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}"
  546. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  547. <template #edit="scope">
  548. <el-input v-model="scope.row.typeName"
  549. @focus="typePullFormCw(scope.$rowIndex, scope.row.deptId)"></el-input>
  550. </template>
  551. </vxe-table-column>
  552. <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title"
  553. :rules="[{ required: true, message: '请选择报销项目', trigger: 'blur' }]">
  554. <template #edit="scope">
  555. <el-input v-model="scope.row.projectName"
  556. @focus="openProgramPageFormCw(scope.$rowIndex, scope.row)"></el-input>
  557. </template>
  558. </vxe-table-column>
  559. <vxe-table-column field="reportNumber" title="报告号" :edit-render="{}" show-overflow="title">
  560. <template v-slot:edit="scope">
  561. <el-input :readonly="true" v-model="scope.row.reportNumber"
  562. @focus="openReportNoPageForm(scope.$rowIndex, scope.row)"></el-input>
  563. </template>
  564. </vxe-table-column>
  565. <vxe-colgroup title="费用" align="center">
  566. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  567. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  568. <template #edit="scope">
  569. <el-input maxlength="15" v-model="scope.row.number"
  570. @input="handleOrdinaryNumberInput(scope.row, 1)"
  571. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  572. </template>
  573. </vxe-table-column>
  574. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  575. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  576. <template #edit="scope">
  577. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  578. @input="handleOrdinaryNumberInput(scope.row, 2)"
  579. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  580. </template>
  581. </vxe-table-column>
  582. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  583. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  584. <template #header="{ column }">
  585. <span class="star-icon"></span>
  586. <span>汇总</span>
  587. </template>
  588. <template #edit="scope">
  589. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  590. </template>
  591. </vxe-table-column>
  592. </vxe-colgroup>
  593. <vxe-colgroup title="票据张数" align="center">
  594. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  595. </vxe-table-column>
  596. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  597. show-overflow="title">
  598. <template #edit="scope">
  599. <el-input v-model="scope.row.ordinaryReceiptNumber"
  600. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  601. </template>
  602. </vxe-table-column>
  603. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  604. </vxe-table-column>
  605. </vxe-colgroup>
  606. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  607. <template #edit="scope">
  608. <el-input v-model="scope.row.content"></el-input>
  609. </template>
  610. </vxe-table-column>
  611. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  612. <template #edit="scope">
  613. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  614. maxlength="10"></el-input>
  615. </template>
  616. </vxe-table-column>
  617. <vxe-table-column title="操作" width="180">
  618. <template #default="scope">
  619. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  620. type="primary">新增</el-button>
  621. <el-button size="default" type="danger"
  622. @click="removeEvent(scope.row, scope.$rowIndex, 'report_detail')">删除</el-button>
  623. </template>
  624. </vxe-table-column>
  625. </vxe-table>
  626. </el-col>
  627. </el-row>
  628. </div>
  629. <div v-else-if="inputForm.sourceType === '3' && tenantFlag !== 'cw'">
  630. <el-divider content-position="left"><i class="el-icon-document"></i>
  631. 报告报销详情
  632. <el-button size="default" style="margin-left: 20px" type="primary"
  633. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  634. @click="insertEvent('report_detail')" plain>
  635. 新增报销单
  636. </el-button>
  637. </el-divider>
  638. <el-row :gutter="15">
  639. <el-col :span="24">
  640. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableReport"
  641. class="vxe-table-element" :data="inputForm.detailInfoReports" style="margin-left: 5em"
  642. :key="detailKeyReport" highlight-current-row
  643. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  644. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  645. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  646. <vxe-column title="报销单" type="expand" width="80">
  647. <template #default="{ row, rowIndex }">
  648. <span>{{ rowIndex + 1 }}</span>
  649. </template>
  650. <template #content="{ row, rowIndex }">
  651. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  652. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  653. :ref="row.uniqueId + 'Upload'">
  654. </InvoiceReimbursementUpLoadComponent>
  655. </template>
  656. </vxe-column>
  657. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  658. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  659. <template #edit="scope">
  660. <el-input v-model="scope.row.userName"
  661. @focus="userPullListForm3(scope.$rowIndex)"></el-input>
  662. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  663. </template>
  664. </vxe-table-column>
  665. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  666. <template #edit="scope">
  667. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  668. </template>
  669. </vxe-table-column>
  670. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  671. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  672. <template #edit="scope">
  673. <el-input v-model="scope.row.typeName"
  674. @focus="typePullForm3(scope.$rowIndex, scope.row.deptId)"></el-input>
  675. </template>
  676. </vxe-table-column>
  677. <vxe-table-column field="projectName" title="报销详情" :edit-render="{}" show-overflow="title"
  678. :rules="[{ required: true, message: '请填写报销详情', trigger: 'blur' }]">
  679. <template #edit="scope">
  680. <el-input v-model="scope.row.projectName"
  681. @focus="openProgramPageForm3(scope.$rowIndex, scope.row)"></el-input>
  682. </template>
  683. </vxe-table-column>
  684. <vxe-colgroup title="费用" align="center">
  685. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  686. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  687. <template #edit="scope">
  688. <el-input maxlength="15" v-model="scope.row.number"
  689. @input="handleOrdinaryNumberInput(scope.row, 1)"
  690. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  691. </template>
  692. </vxe-table-column>
  693. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  694. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  695. <template #edit="scope">
  696. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  697. @input="handleOrdinaryNumberInput(scope.row, 2)"
  698. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  699. </template>
  700. </vxe-table-column>
  701. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  702. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  703. <template #header="{ column }">
  704. <span class="star-icon"></span>
  705. <span>汇总</span>
  706. </template>
  707. <template #edit="scope">
  708. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  709. </template>
  710. </vxe-table-column>
  711. </vxe-colgroup>
  712. <vxe-colgroup title="票据张数" align="center">
  713. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  714. </vxe-table-column>
  715. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  716. show-overflow="title">
  717. <template #edit="scope">
  718. <el-input v-model="scope.row.ordinaryReceiptNumber"
  719. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  720. </template>
  721. </vxe-table-column>
  722. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  723. </vxe-table-column>
  724. </vxe-colgroup>
  725. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  726. <template #edit="scope">
  727. <el-input v-model="scope.row.content"></el-input>
  728. </template>
  729. </vxe-table-column>
  730. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  731. <template #edit="scope">
  732. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  733. maxlength="10"></el-input>
  734. </template>
  735. </vxe-table-column>
  736. <vxe-table-column title="操作" width="180">
  737. <template #default="scope">
  738. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  739. type="primary">新增</el-button>
  740. <el-button size="default" type="danger"
  741. @click="removeEvent(scope.row, scope.$rowIndex, 'report_detail')">删除</el-button>
  742. </template>
  743. </vxe-table-column>
  744. </vxe-table>
  745. </el-col>
  746. </el-row>
  747. </div>
  748. <div v-if="inputForm.sourceType === '4'">
  749. <el-divider content-position="left"><i class="el-icon-document"></i>
  750. 其他报销详情
  751. <el-button size="default" style="margin-left: 20px" type="primary"
  752. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  753. @click="insertEvent('others')" plain>
  754. 新增报销单
  755. </el-button>
  756. </el-divider>
  757. <el-row :gutter="15">
  758. <el-col :span="24">
  759. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableOthers"
  760. class="vxe-table-element" :data="inputForm.detailInfoOthers" style="margin-left: 5em"
  761. :key="detailKeyOthers" highlight-current-row
  762. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  763. :edit-rules="validRules" :row-config="{ keyField: 'uniqueId' }"
  764. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  765. <vxe-column title="报销单" type="expand" width="80">
  766. <template #default="{ row, rowIndex }">
  767. <span>{{ rowIndex + 1 }}</span>
  768. </template>
  769. <template #content="{ row, rowIndex }">
  770. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  771. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  772. :ref="row.uniqueId + 'Upload'">
  773. </InvoiceReimbursementUpLoadComponent>
  774. </template>
  775. </vxe-column>
  776. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  777. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  778. <template #edit="scope">
  779. <el-input v-model="scope.row.userName"
  780. @focus="userPullListForm4(scope.$rowIndex)"></el-input>
  781. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  782. </template>
  783. </vxe-table-column>
  784. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  785. <template #edit="scope">
  786. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  787. </template>
  788. </vxe-table-column>
  789. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  790. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  791. <template #edit="scope">
  792. <el-input v-model="scope.row.typeName"
  793. @focus="typePullForm4(scope.$rowIndex, scope.row.deptId)"></el-input>
  794. </template>
  795. </vxe-table-column>
  796. <vxe-table-column field="projectName" title="报销详情" :edit-render="{}" show-overflow="title"
  797. :rules="[{ required: true, message: '请填写报销详情', trigger: 'blur' }]">
  798. <template #edit="scope">
  799. <el-input v-model="scope.row.projectName"
  800. @focus="openProgramPageForm4(scope.$rowIndex, scope.row)"></el-input>
  801. </template>
  802. </vxe-table-column>
  803. <vxe-colgroup title="费用" align="center">
  804. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  805. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  806. <template #edit="scope">
  807. <el-input maxlength="15" v-model="scope.row.number"
  808. @input="handleOrdinaryNumberInput(scope.row, 1)"
  809. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  810. </template>
  811. </vxe-table-column>
  812. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  813. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  814. <template #edit="scope">
  815. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  816. @input="handleOrdinaryNumberInput(scope.row, 2)"
  817. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  818. </template>
  819. </vxe-table-column>
  820. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  821. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  822. <template #header="{ column }">
  823. <span class="star-icon"></span>
  824. <span>汇总</span>
  825. </template>
  826. <template #edit="scope">
  827. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  828. </template>
  829. </vxe-table-column>
  830. </vxe-colgroup>
  831. <vxe-colgroup title="票据张数" align="center">
  832. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  833. </vxe-table-column>
  834. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  835. show-overflow="title">
  836. <template #edit="scope">
  837. <el-input v-model="scope.row.ordinaryReceiptNumber"
  838. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  839. </template>
  840. </vxe-table-column>
  841. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  842. </vxe-table-column>
  843. </vxe-colgroup>
  844. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  845. <template #edit="scope">
  846. <el-input v-model="scope.row.content"></el-input>
  847. </template>
  848. </vxe-table-column>
  849. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  850. <template #edit="scope">
  851. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  852. maxlength="10"></el-input>
  853. </template>
  854. </vxe-table-column>
  855. <vxe-table-column title="操作" width="180">
  856. <template #default="scope">
  857. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  858. type="primary">新增</el-button>
  859. <el-button size="default" type="danger"
  860. @click="removeEvent(scope.row, scope.$rowIndex, 'others')">删除</el-button>
  861. </template>
  862. </vxe-table-column>
  863. </vxe-table>
  864. </el-col>
  865. </el-row>
  866. </div>
  867. <div v-if="inputForm.sourceType === '5'">
  868. <el-divider content-position="left"><i class="el-icon-document"></i>
  869. 采购报销详情
  870. <el-button size="default" style="margin-left: 20px" type="primary"
  871. :disabled="method === 'view' || this.formReadOnly" @click="insertEvent('procured')" plain>
  872. 新增报销单
  873. </el-button>
  874. </el-divider>
  875. <el-row :gutter="15">
  876. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableProcured"
  877. class="vxe-table-element" :data="inputForm.detailInfoProcured" style="margin-left: 5em"
  878. :key="detailKeyProcured" highlight-current-row
  879. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  880. :edit-rules="validRules">
  881. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  882. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  883. <template #edit="scope">
  884. <el-input v-model="scope.row.userName"
  885. @focus="userPullListForm5(scope.$rowIndex)"></el-input>
  886. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  887. </template>
  888. </vxe-table-column>
  889. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  890. <template #edit="scope">
  891. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  892. </template>
  893. </vxe-table-column>
  894. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  895. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  896. <template #edit="scope">
  897. <el-input v-model="scope.row.typeName"
  898. @focus="typePullForm5(scope.$rowIndex, scope.row.deptId)"></el-input>
  899. </template>
  900. </vxe-table-column>
  901. <vxe-table-column field="projectName" title="报销项目" :edit-render="{}" show-overflow="title"
  902. :rules="[{ required: true, message: '请选择报销项目', trigger: 'blur' }]">
  903. <template #edit="scope">
  904. <el-input v-model="scope.row.projectName"
  905. @focus="openProgramPageForm5(scope.$rowIndex, scope.row)"></el-input>
  906. </template>
  907. </vxe-table-column>
  908. <vxe-colgroup title="费用" align="center">
  909. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  910. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  911. <template #edit="scope">
  912. <el-input maxlength="15" v-model="scope.row.number"
  913. @input="handleOrdinaryNumberInput(scope.row, 1)"
  914. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  915. </template>
  916. </vxe-table-column>
  917. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}" show-overflow="title"
  918. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  919. <template #edit="scope">
  920. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  921. @input="handleOrdinaryNumberInput(scope.row, 2)"
  922. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  923. </template>
  924. </vxe-table-column>
  925. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  926. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  927. <template #header="{ column }">
  928. <span class="star-icon"></span>
  929. <span>汇总</span>
  930. </template>
  931. <template #edit="scope">
  932. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  933. </template>
  934. </vxe-table-column>
  935. </vxe-colgroup>
  936. <vxe-colgroup title="票据张数" align="center">
  937. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  938. </vxe-table-column>
  939. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  940. show-overflow="title">
  941. <template #edit="scope">
  942. <el-input v-model="scope.row.ordinaryReceiptNumber"
  943. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  944. </template>
  945. </vxe-table-column>
  946. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  947. </vxe-table-column>
  948. </vxe-colgroup>
  949. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  950. <template #edit="scope">
  951. <el-input v-model="scope.row.content"></el-input>
  952. </template>
  953. </vxe-table-column>
  954. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  955. <template #edit="scope">
  956. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  957. maxlength="10"></el-input>
  958. </template>
  959. </vxe-table-column>
  960. <vxe-table-column title="操作" width="100">
  961. <template #default="scope">
  962. <el-button size="default" type="danger"
  963. @click="removeEvent(scope.row, scope.$rowIndex, 'procured')">删除</el-button>
  964. </template>
  965. </vxe-table-column>
  966. </vxe-table>
  967. </el-row>
  968. </div>
  969. <div v-if="inputForm.sourceType === '8'">
  970. <el-divider content-position="left"><i class="el-icon-document"></i>
  971. 中审项目报销详情
  972. <el-button size="default" style="margin-left: 20px" type="primary"
  973. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  974. @click="insertEvent('zs_project_detail')" plain>
  975. 新增报销单
  976. </el-button>
  977. </el-divider>
  978. <el-row :gutter="15">
  979. <el-col :span="24">
  980. <vxe-table border show-footer show-overflow :footer-method="footerMethod" ref="detailTableProject"
  981. class="vxe-table-element" :data="inputForm.detailInfoProject" style="margin-left: 5em"
  982. :key="detailKeyProject" highlight-current-row
  983. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }"
  984. :edit-rules="validRules" :tooltip-config="{
  985. enterable: true
  986. }" :row-config="{ keyField: 'uniqueId' }"
  987. :expand-config="{ expandAll: false, accordion: false, toggleMethod: handleExpand, expandRowKeys: handleDefaultExpand() }">
  988. <vxe-column title="报销单" type="expand" width="80">
  989. <template #default="{ row, rowIndex }">
  990. <span>{{ rowIndex + 1 }}</span>
  991. </template>
  992. <template #content="{ row, rowIndex }">
  993. <InvoiceReimbursementUpLoadComponent @changeConfirmList="changeConfirmList"
  994. @handleCount="handleCount" @handleUploadSuccess="handleUploadSuccess"
  995. :ref="row.uniqueId + 'Upload'">
  996. </InvoiceReimbursementUpLoadComponent>
  997. </template>
  998. </vxe-column>
  999. <vxe-table-column field="userName" title="报销人" :edit-render="{}" show-overflow="title"
  1000. :rules="[{ required: true, message: '请选择报销人', trigger: 'blur' }]">
  1001. <template #edit="scope">
  1002. <el-input v-model="scope.row.userName"
  1003. @focus="userPullListForm8(scope.$rowIndex)"></el-input>
  1004. <!-- <UserSelectV2 :limit='1' :userName="scope.row.userName" @getValue='(value, label) => {scope.row.userName = label}'></UserSelectV2>-->
  1005. </template>
  1006. </vxe-table-column>
  1007. <vxe-table-column field="deptName" title="报销部门" :edit-render="{}" show-overflow="title">
  1008. <template #edit="scope">
  1009. <el-input :disabled='true' v-model="scope.row.deptName"></el-input>
  1010. </template>
  1011. </vxe-table-column>
  1012. <vxe-table-column field="typeName" title="报销类别" :edit-render="{}" show-overflow="title"
  1013. :rules="[{ required: true, message: '请选择报销类别', trigger: 'blur' }]">
  1014. <template #edit="scope">
  1015. <el-input v-model="scope.row.typeName"
  1016. @focus="typePullForm8(scope.$rowIndex, scope.row.deptId)"></el-input>
  1017. </template>
  1018. </vxe-table-column>
  1019. <vxe-table-column field="projectName" title="报销详情" :edit-render="{}" show-overflow="title"
  1020. :rules="[{ required: true, message: '请填写报销详情', trigger: 'blur' }]">
  1021. <template #edit="scope">
  1022. <el-input v-model="scope.row.projectName"
  1023. @focus="openProgramPageForm8(scope.$rowIndex, scope.row)"></el-input>
  1024. </template>
  1025. </vxe-table-column>
  1026. <vxe-colgroup title="发票号和立项号至少填写一项" header-align="center">
  1027. <vxe-table-column field="invoiceNumber" title="发票号" :edit-render="{}" show-overflow="title">
  1028. <template #header>
  1029. <i class="vxe-cell--required-icon"></i>发票号
  1030. </template>
  1031. <template #edit="scope">
  1032. <el-input v-model="scope.row.invoiceNumber"></el-input>
  1033. </template>
  1034. </vxe-table-column>
  1035. <vxe-table-column field="projectApprovalNumber" title="立项号" :edit-render="{}"
  1036. show-overflow="title">
  1037. <template #header>
  1038. <i class="vxe-cell--required-icon"></i>立项号
  1039. </template>
  1040. <template #edit="scope">
  1041. <el-input v-model="scope.row.projectApprovalNumber"></el-input>
  1042. </template>
  1043. </vxe-table-column>
  1044. </vxe-colgroup>
  1045. <vxe-colgroup title="费用" align="center">
  1046. <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
  1047. :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  1048. <template #edit="scope">
  1049. <el-input maxlength="15" v-model="scope.row.number"
  1050. @input="handleOrdinaryNumberInput(scope.row, 1)"
  1051. @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
  1052. </template>
  1053. </vxe-table-column>
  1054. <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
  1055. show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
  1056. <template #edit="scope">
  1057. <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
  1058. @input="handleOrdinaryNumberInput(scope.row, 2)"
  1059. @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
  1060. </template>
  1061. </vxe-table-column>
  1062. <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
  1063. :rules="[{ required: true, message: '请输入费用汇总', trigger: 'blur' }]">
  1064. <template #header="{ column }">
  1065. <span class="star-icon"></span>
  1066. <span>汇总</span>
  1067. </template>
  1068. <template #edit="scope">
  1069. <el-input maxlength="15" v-model="scope.row.numberCount"></el-input>
  1070. </template>
  1071. </vxe-table-column>
  1072. </vxe-colgroup>
  1073. <vxe-colgroup title="票据张数" align="center">
  1074. <vxe-table-column field="receiptNumber" title="数电发票" show-overflow="title">
  1075. </vxe-table-column>
  1076. <vxe-table-column field="ordinaryReceiptNumber" title="非数电发票" :edit-render="{}"
  1077. show-overflow="title">
  1078. <template #edit="scope">
  1079. <el-input v-model="scope.row.ordinaryReceiptNumber"
  1080. @input="handleReceiptNumberInput(scope.row)" maxlength="10"></el-input>
  1081. </template>
  1082. </vxe-table-column>
  1083. <vxe-table-column field="receiptNumberCount" title="汇总" show-overflow="title">
  1084. </vxe-table-column>
  1085. </vxe-colgroup>
  1086. <vxe-table-column field="content" title="内容" :edit-render="{}" show-overflow="title">
  1087. <template #edit="scope">
  1088. <el-input v-model="scope.row.content"></el-input>
  1089. </template>
  1090. </vxe-table-column>
  1091. <vxe-table-column field="days" title="出差天数" :edit-render="{}" show-overflow="title">
  1092. <template #edit="scope">
  1093. <el-input v-model="scope.row.days" oninput="value=value.replace(/\D|^0/g,'')"
  1094. maxlength="10"></el-input>
  1095. </template>
  1096. </vxe-table-column>
  1097. <vxe-table-column title="操作" width="180">
  1098. <template #default="scope">
  1099. <el-button size="default" @click="uploadFile(scope.row, scope.$rowIndex,)"
  1100. type="primary">新增</el-button>
  1101. <el-button size="default" type="danger"
  1102. @click="removeEvent(scope.row, scope.$rowIndex, 'zs_project_detail')">删除</el-button>
  1103. </template>
  1104. </vxe-table-column>
  1105. </vxe-table>
  1106. </el-col>
  1107. </el-row>
  1108. </div>
  1109. <div v-if="inputForm.reimbursementType === '0'">
  1110. <el-divider content-position="left"><i class="el-icon-document"></i>
  1111. 专用发票信息
  1112. <el-button size="default" style="margin-left: 10px" type="primary"
  1113. :disabled="method === 'view' || status === 'audit' || status === 'taskFormDetail'"
  1114. @click="insertEvent('amount')" plain>
  1115. 新增报销单
  1116. </el-button>
  1117. </el-divider>
  1118. <el-row :gutter="15">
  1119. <el-col :span="24">
  1120. <vxe-table border show-overflow ref="amountTable" class="vxe-table-element"
  1121. :data="inputForm.amountInfos" style="margin-left: 5em" :key="amountKey" highlight-current-row
  1122. :edit-config="{ trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '_' }">
  1123. <vxe-table-column field="code" title="发票代码" :edit-render="{}" show-overflow="title">
  1124. <template #edit="scope">
  1125. <el-input oninput="value=value.replace(/\D|^/g,'')" maxlength="20"
  1126. v-model="scope.row.code"></el-input>
  1127. </template>
  1128. </vxe-table-column>
  1129. <vxe-table-column field="number" title="发票号" :edit-render="{}" show-overflow="title">
  1130. <template #edit="scope">
  1131. <el-input oninput="value=value.replace(/\D|^/g,'')" maxlength="8"
  1132. @change="isExict(scope.row)" v-model="scope.row.number"></el-input>
  1133. </template>
  1134. </vxe-table-column>
  1135. <vxe-table-column field="amount" title="金额" :edit-render="{}" show-overflow="title">
  1136. <template #edit="scope">
  1137. <el-input maxlength="15" v-model="scope.row.amount"
  1138. @input="scope.row.amount = twoDecimalPlaces(scope.row.amount)"
  1139. @change="countAmount(scope.row)"></el-input>
  1140. </template>
  1141. </vxe-table-column>
  1142. <vxe-table-column field="taxAmount" title="税额" :edit-render="{}" show-overflow="title">
  1143. <template #edit="scope">
  1144. <el-input maxlength="15" v-model="scope.row.taxAmount"
  1145. @input="scope.row.taxAmount = twoDecimalPlaces(scope.row.taxAmount)"
  1146. @change="countAmount(scope.row)"></el-input>
  1147. </template>
  1148. </vxe-table-column>
  1149. <vxe-table-column field="count" title="价税合计" :edit-render="{}" show-overflow="title">
  1150. <template #edit="scope">
  1151. <el-input disabled="true" v-model="scope.row.count"></el-input>
  1152. </template>
  1153. </vxe-table-column>
  1154. <vxe-table-column title="操作" width="100">
  1155. <template #default="scope">
  1156. <el-button size="default" type="danger"
  1157. @click="removeEvent(scope.row, scope.$rowIndex, 'amount')">删除</el-button>
  1158. </template>
  1159. </vxe-table-column>
  1160. </vxe-table>
  1161. </el-col>
  1162. </el-row>
  1163. </div>
  1164. <ProgramPageForm ref="programPageForm" @getProgram="getProgramPg"></ProgramPageForm>
  1165. <CwProgramPageForm2 ref="cwProgramPageFormCw" @getProgram="getProgramCw"></CwProgramPageForm2>
  1166. <CwProgramPageForm ref="cwProgramPageForm" @getProgram="getProgram"></CwProgramPageForm>
  1167. <CwProgramPageForm ref="cwProgramPageForm3" @getProgram="getProgram3"></CwProgramPageForm>
  1168. <CwProgramPageForm ref="cwProgramPageFormCwProject" @getProgram="getProgramCwProject"></CwProgramPageForm>
  1169. <CwProgramPageForm ref="cwProgramPageForm4" @getProgram="getProgram4"></CwProgramPageForm>
  1170. <CwProgramPageForm ref="cwProgramPageForm5" @getProgram="getProgram5"></CwProgramPageForm>
  1171. <CwProgramPageForm ref="cwProgramPageForm8" @getProgram="getProgram8"></CwProgramPageForm>
  1172. <!-- <ReimbursementTypePullForm ref="reimbursementTypePullForm" @getProgramForType="getProgramForType"></ReimbursementTypePullForm>-->
  1173. <CwReimbursementTypePullFormZs ref="cwReimbursementTypePullForm" @getProgramForType="getProgramForType">
  1174. </CwReimbursementTypePullFormZs>
  1175. <CwReimbursementTypePullFormCw ref="cwReimbursementTypePullFormCw" @getProgramForType="getProgramForTypeCw">
  1176. </CwReimbursementTypePullFormCw>
  1177. <CwReimbursementTypePullFormCw ref="cwReimbursementTypePullFormCwProject"
  1178. @getProgramForType="getProgramForTypeCwProject">
  1179. </CwReimbursementTypePullFormCw>
  1180. <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm2" @getProgramForType="getProgramForType2">
  1181. </CwReimbursementTypePullForm>
  1182. <CwReimbursementTypePullFormZs ref="cwReimbursementTypePullForm3" @getProgramForType="getProgramForType3">
  1183. </CwReimbursementTypePullFormZs>
  1184. <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm4" @getProgramForType="getProgramForType4">
  1185. </CwReimbursementTypePullForm>
  1186. <CwReimbursementTypePullForm ref="cwReimbursementTypePullForm5" @getProgramForType="getProgramForType5">
  1187. </CwReimbursementTypePullForm>
  1188. <CwReimbursementTypePullFormZs ref="cwReimbursementTypePullForm8" @getProgramForType="getProgramForType8">
  1189. </CwReimbursementTypePullFormZs>
  1190. <UserPullForm ref="userPullForm" @getProgramForUser="getProgramForUser"></UserPullForm>
  1191. <UserPullForm ref="userPullForm2" @getProgramForUser="getProgramForUser2"></UserPullForm>
  1192. <UserPullForm ref="userPullForm3" @getProgramForUser="getProgramForUser3"></UserPullForm>
  1193. <UserPullForm ref="userPullForm4" @getProgramForUser="getProgramForUser4"></UserPullForm>
  1194. <UserPullForm ref="userPullForm5" @getProgramForUser="getProgramForUser5"></UserPullForm>
  1195. <UserPullForm ref="userPullForm8" @getProgramForUser="getProgramForUser8"></UserPullForm>
  1196. <WorkContractChooseCom ref="workContractChooseCom" @getContract="getContract"></WorkContractChooseCom>
  1197. <ReportNoChooseRadio ref="reportNoChooseRadio" @getWorkClientRadioChoose="getWorkClientChoose2">
  1198. </ReportNoChooseRadio>
  1199. <ReportNoChooseRadio ref="reportNoChooseRadioCwProject"
  1200. @getWorkClientRadioChoose="getWorkClientChooseCwProject">
  1201. </ReportNoChooseRadio>
  1202. </div>
  1203. </template>
  1204. <script>
  1205. import ReportNoChooseRadio from '@/views/cw/reimbursementApproval/info/ReportNoChooseRadio'
  1206. import ReimbursementService from '@/api/zs/reimbursement/ReimbursementService'
  1207. import ReimbursementTypeService from '@/api/zs/reimbursement/ReimbursementTypeService'
  1208. import InvoiceReimbursementUpLoadComponent from '@/views/common/NewDigitalInvoiceUploadComponent'
  1209. import ReimbursementApprovalTypeService from '@/api/cw/reimbursementApproval/ReimbursementApprovalTypeService'
  1210. import UpLoadComponent from '@/views/common/NewUpLoadComponent'
  1211. import XEUtils from 'xe-utils'
  1212. import CwReimbursementTypePullFormZs from '@/views/zs/reimbursement/info/CwReimbursementTypePullFormZs'
  1213. import CwProgramPageForm from '@/views/cw/reimbursementApproval/info/CwProgramPageForm'
  1214. import CwProgramPageForm2 from '@/views/cw/reimbursementApproval/info/CwProgramPageForm2'
  1215. import CwReimbursementTypePullForm from '@/views/zs/reimbursement/info/CwReimbursementTypePullForm'
  1216. // 会计
  1217. import CwReimbursementTypePullFormCw from '@/views/cw/reimbursementApproval/info/CwReimbursementTypePullForm'
  1218. import UserPullForm from '@/views/finance/invoice/UserPullForm'
  1219. import CommonApi from '@/api/cw/common/CommonApi'
  1220. import WorkContractChooseCom from '@/views/cw/projectRecords/WorkContractChooseCom'
  1221. import processService from '@/api/flowable/processService'
  1222. import userService from '@/api/sys/UserService'
  1223. import ProgramPageForm from '@/views/finance/invoice/ProgramPageForm'
  1224. export default {
  1225. props: {
  1226. businessId: {
  1227. type: String,
  1228. default: ''
  1229. },
  1230. formReadOnly: {
  1231. type: Boolean,
  1232. default: false
  1233. },
  1234. },
  1235. data() {
  1236. return {
  1237. status: "",
  1238. companyName: "",
  1239. isConfirm: "2",
  1240. uploadFlag: "",
  1241. tenantFlag: "",
  1242. tableData: [],
  1243. tableRef: null,
  1244. currentNodeName: "",
  1245. confirmStatusList: [],
  1246. validRules: {
  1247. userName: [
  1248. { required: true, message: '报销人不能为空' }
  1249. ],
  1250. deptName: [
  1251. { required: true, message: '报销部门不能为空' }
  1252. ],
  1253. reimbursementType: [
  1254. { required: true, message: '报销类型不能为空' }
  1255. ],
  1256. typeName: [
  1257. { required: true, message: '报销类别不能为空' }
  1258. ],
  1259. projectName: [
  1260. { required: true, message: '报销项目不能为空' }
  1261. ],
  1262. contractName: [
  1263. { required: true, message: '报销合同不能为空' }
  1264. ],
  1265. reportNumber: [
  1266. { required: true, message: '报告号不能为空' }
  1267. ],
  1268. numberCount: [
  1269. { required: true, message: '费用汇总不能为空' }
  1270. ],
  1271. },
  1272. amountInfoRules: {
  1273. code: [
  1274. { required: true, message: '发票代码不能为空' }
  1275. ],
  1276. number: [
  1277. { required: true, message: '发票号不能为空' }
  1278. ],
  1279. amount: [
  1280. { required: true, message: '金额不能为空' }
  1281. ],
  1282. taxAmount: [
  1283. { required: true, message: '税额不能为空' }
  1284. ]
  1285. },
  1286. invoiceReimbursementRules: {
  1287. invoiceType: [
  1288. { required: true, message: '发票类型不能为空' }
  1289. ],
  1290. invoiceProjectName: [
  1291. { required: true, message: '发票项目名不能为空' }
  1292. ],
  1293. number: [
  1294. { required: true, message: '发票号不能为空' }
  1295. ],
  1296. invoiceDate: [
  1297. { required: true, message: '开票日期不能为空' }
  1298. ],
  1299. invoiceUnit: [
  1300. { required: true, message: '开票单位不能为空' }
  1301. ],
  1302. buyerName: [
  1303. { required: true, message: '购买方名称不能为空' }
  1304. ],
  1305. amount: [
  1306. { required: true, message: '金额不能为空' }
  1307. ],
  1308. taxAmount: [
  1309. { required: true, message: '税额不能为空' }
  1310. ]
  1311. },
  1312. title: '',
  1313. method: '',
  1314. visible: false,
  1315. loading: false,
  1316. indexRow: '',
  1317. detailKey: '',
  1318. detailKeyContract: '',
  1319. detailKeyReport: '',
  1320. detailKeyProject: "",
  1321. detailKeyOthers: '',
  1322. detailKeyProcured: '',
  1323. inputForm: {
  1324. reimbursementType: '1',
  1325. userId: '',
  1326. createById: '',
  1327. userName: '',
  1328. no: '',
  1329. department: '',
  1330. reimDate: '',
  1331. remarks: '',
  1332. detailInfos: [],
  1333. detailInfoContracts: [],
  1334. detailInfoReports: [],
  1335. detailInfoOthers: [],
  1336. detailInfoProject: [],
  1337. detailInfoProcured: [],
  1338. amountInfos: [],
  1339. invoiceReimbursements: [],
  1340. invoiceReimbursementFiles: [], // 电子发票附件信息
  1341. files: [], // 附件信息
  1342. procInsId: '',
  1343. sourceType: '',
  1344. preList: [],
  1345. purchaseNo: '',
  1346. tradeTotalPrice: '',
  1347. purchaseId: '',
  1348. procDefId: '',
  1349. procDefKey: '',
  1350. formTitle: '',
  1351. departmentName: '',
  1352. paymentStatus: ''
  1353. },
  1354. amountKey: '',
  1355. invoiceReimbursementKey: '',
  1356. isZj: false,
  1357. isZjbry: false,
  1358. isDgsbxBmzr: false,
  1359. payment: '',
  1360. }
  1361. },
  1362. ReimbursementService: null,
  1363. reimbursementTypeService: null,
  1364. reimbursementApprovalTypeService: null,
  1365. commonApi: null,
  1366. created() {
  1367. this.reimbursementService = new ReimbursementService()
  1368. this.reimbursementTypeService = new ReimbursementTypeService()
  1369. this.reimbursementApprovalTypeService = new ReimbursementApprovalTypeService()
  1370. this.commonApi = new CommonApi()
  1371. },
  1372. components: {
  1373. InvoiceReimbursementUpLoadComponent,
  1374. UpLoadComponent,
  1375. CwProgramPageForm,
  1376. CwProgramPageForm2,
  1377. CwReimbursementTypePullForm,
  1378. CwReimbursementTypePullFormZs,
  1379. UserPullForm,
  1380. ReportNoChooseRadio,
  1381. WorkContractChooseCom,
  1382. ProgramPageForm,
  1383. CwReimbursementTypePullFormCw
  1384. },
  1385. computed: {
  1386. name() {
  1387. return this.$store.state.user.name
  1388. },
  1389. officeName() {
  1390. return this.$store.state.user.office.name
  1391. },
  1392. userId() {
  1393. return this.$store.state.user.id
  1394. }
  1395. },
  1396. methods: {
  1397. initComponent(uploadFlag, tenantFlag, companyName, inputForm, isConfirm, status) {
  1398. if (this.commonJS.isNotEmpty(tenantFlag)) {
  1399. this.tenantFlag = tenantFlag
  1400. }
  1401. if (this.commonJS.isNotEmpty(uploadFlag)) {
  1402. this.uploadFlag = uploadFlag
  1403. }
  1404. if (this.commonJS.isNotEmpty(companyName)) {
  1405. this.companyName = companyName
  1406. }
  1407. if (this.commonJS.isNotEmpty(inputForm)) {
  1408. this.inputForm = inputForm
  1409. }
  1410. if (this.commonJS.isNotEmpty(isConfirm)) {
  1411. this.isConfirm = isConfirm
  1412. }
  1413. if (this.commonJS.isNotEmpty(status)) {
  1414. this.status = status
  1415. }
  1416. },
  1417. // 删除
  1418. removeEvent(row, rowIndex, type) {
  1419. this.handleTableInfo(this.inputForm.sourceType)
  1420. this.inputForm.invoiceReimbursementFiles = this.inputForm.invoiceReimbursementFiles.filter(item => item.remarks != row.uniqueId)
  1421. if (type === 'detail') {
  1422. this.$refs.detailTable.remove(row)
  1423. this.inputForm.detailInfos.splice(rowIndex, 1)
  1424. }
  1425. if (type === 'amount') {
  1426. this.$refs.amountTable.remove(row)
  1427. this.inputForm.amountInfos.splice(rowIndex, 1)
  1428. }
  1429. if (type === 'invoiceReimbursement') {
  1430. this.$refs.invoiceReimbursementTable.remove(row)
  1431. this.inputForm.invoiceReimbursements.splice(rowIndex, 1)
  1432. }
  1433. if (type === 'contract_detail') {
  1434. this.$refs.detailTableContract.remove(row)
  1435. this.inputForm.detailInfoContracts.splice(rowIndex, 1)
  1436. }
  1437. if (type === 'report_detail') {
  1438. this.$refs.detailTableReport.remove(row)
  1439. this.inputForm.detailInfoReports.splice(rowIndex, 1)
  1440. }
  1441. if (type === 'zs_project_detail') {
  1442. this.$refs.detailTableProject.remove(row)
  1443. this.inputForm.detailInfoProject.splice(rowIndex, 1)
  1444. }
  1445. if (type === 'others') {
  1446. this.$refs.detailTableOthers.remove(row)
  1447. this.inputForm.detailInfoOthers.splice(rowIndex, 1)
  1448. }
  1449. if (type === 'procured') {
  1450. this.$refs.detailTableProcured.remove(row)
  1451. this.inputForm.detailInfoProcured.splice(rowIndex, 1)
  1452. }
  1453. },
  1454. generateRandomId() {
  1455. let id = '';
  1456. for (let i = 0; i < 16; i++) {
  1457. id += Math.floor(Math.random() * 10); // 生成 0-9 的随机数
  1458. }
  1459. return id;
  1460. },
  1461. // 新增
  1462. async insertEvent(type) {
  1463. if (type === 'detail') {
  1464. let d = {
  1465. uniqueId: this.generateRandomId(),
  1466. userName: this.$store.state.user.name,
  1467. deptName: this.$store.state.user.office.name,
  1468. userId: this.$store.state.user.id,
  1469. deptId: this.$store.state.user.office.id
  1470. }
  1471. if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
  1472. this.inputForm.detailInfos = []
  1473. }
  1474. this.$refs.detailTable.insertAt(d)
  1475. this.inputForm.detailInfos.push(d)
  1476. this.detailKey = Math.random()
  1477. }
  1478. if (type === 'amount') {
  1479. let d = {}
  1480. if (this.commonJS.isEmpty(this.inputForm.amountInfos)) {
  1481. this.inputForm.amountInfos = []
  1482. }
  1483. this.$refs.amountTable.insertAt(d)
  1484. this.inputForm.amountInfos.push(d)
  1485. this.amountKey = Math.random()
  1486. }
  1487. if (type === 'invoiceReimbursement') {
  1488. let d = {}
  1489. if (this.commonJS.isEmpty(this.inputForm.invoiceReimbursements)) {
  1490. this.inputForm.invoiceReimbursements = []
  1491. }
  1492. this.$refs.invoiceReimbursementTable.insertAt(d)
  1493. this.inputForm.invoiceReimbursements.push(d)
  1494. this.invoiceReimbursementKey = Math.random()
  1495. }
  1496. if (type === 'contract_detail') {
  1497. let d = {
  1498. userName: this.$store.state.user.name,
  1499. deptName: this.$store.state.user.office.name,
  1500. userId: this.$store.state.user.id,
  1501. deptId: this.$store.state.user.office.id
  1502. }
  1503. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts)) {
  1504. this.inputForm.detailInfoContracts = []
  1505. }
  1506. this.$refs.detailTableContract.insertAt(d)
  1507. this.inputForm.detailInfoContracts.push(d)
  1508. this.detailKeyContract = Math.random()
  1509. }
  1510. if (type === 'report_detail') {
  1511. let d = {
  1512. uniqueId: this.generateRandomId(),
  1513. userName: this.$store.state.user.name,
  1514. deptName: this.$store.state.user.office.name,
  1515. userId: this.$store.state.user.id,
  1516. deptId: this.$store.state.user.office.id
  1517. }
  1518. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports)) {
  1519. this.inputForm.detailInfoReports = []
  1520. }
  1521. this.$refs.detailTableReport.insertAt(d)
  1522. this.inputForm.detailInfoReports.push(d)
  1523. this.detailKeyReport = Math.random()
  1524. }
  1525. if (type === 'zs_project_detail') {
  1526. let d = {
  1527. uniqueId: this.generateRandomId(),
  1528. userName: this.$store.state.user.name,
  1529. deptName: this.$store.state.user.office.name,
  1530. userId: this.$store.state.user.id,
  1531. deptId: this.$store.state.user.office.id
  1532. }
  1533. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject)) {
  1534. this.inputForm.detailInfoProject = []
  1535. }
  1536. this.$refs.detailTableProject.insertAt(d)
  1537. this.inputForm.detailInfoProject.push(d)
  1538. this.detailKeyProject = Math.random()
  1539. }
  1540. if (type === 'others') {
  1541. let d = {
  1542. uniqueId: this.generateRandomId(),
  1543. userName: this.$store.state.user.name,
  1544. deptName: this.$store.state.user.office.name,
  1545. userId: this.$store.state.user.id,
  1546. deptId: this.$store.state.user.office.id
  1547. }
  1548. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers)) {
  1549. this.inputForm.detailInfoOthers = []
  1550. }
  1551. this.$refs.detailTableOthers.insertAt(d)
  1552. this.inputForm.detailInfoOthers.push(d)
  1553. this.detailKeyOthers = Math.random()
  1554. }
  1555. if (type === 'procured') {
  1556. let d = {
  1557. userName: this.$store.state.user.name,
  1558. deptName: this.$store.state.user.office.name,
  1559. userId: this.$store.state.user.id,
  1560. deptId: this.$store.state.user.office.id
  1561. }
  1562. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured)) {
  1563. this.inputForm.detailInfoProcured = []
  1564. }
  1565. this.$refs.detailTableProcured.insertAt(d)
  1566. this.inputForm.detailInfoProcured.push(d)
  1567. this.detailKeyProcured = Math.random()
  1568. }
  1569. },
  1570. insertInvoiceReimbursementEvent(type, value) {
  1571. if (type === 'invoiceReimbursement') {
  1572. if (this.commonJS.isEmpty(this.inputForm.invoiceReimbursements)) {
  1573. this.inputForm.invoiceReimbursements = []
  1574. }
  1575. this.$refs.invoiceReimbursementTable.insertAt(value)
  1576. this.inputForm.invoiceReimbursements.push(value)
  1577. this.invoiceReimbursementKey = Math.random()
  1578. }
  1579. },
  1580. footerMethod({ columns, data }) {
  1581. const footerData = [
  1582. columns.map((column, columnIndex) => {
  1583. if (columnIndex === 0) {
  1584. return '汇总'
  1585. }
  1586. if (['numberCount'].includes(column.property)) {
  1587. // eslint-disable-next-line no-undef
  1588. return XEUtils.sum(data, column.property)
  1589. }
  1590. if (['receiptNumberCount'].includes(column.property)) {
  1591. // eslint-disable-next-line no-undef
  1592. return XEUtils.sum(data, column.property)
  1593. }
  1594. return null
  1595. })
  1596. ]
  1597. return footerData
  1598. },
  1599. twoDecimalPlaces(num) {
  1600. num = parseFloat(num).toFixed(2);
  1601. // 解决精度问题
  1602. let str = num.toString()
  1603. str = str.replace(/\s+/g, "");
  1604. var len1 = str.substr(0, 1)
  1605. var len2 = str.substr(1, 1)
  1606. // eslint-disable-next-line eqeqeq
  1607. if (str.length > 1 && len1 == 0 && len2 != '.') {
  1608. str = str.substr(1, 1)
  1609. }
  1610. // eslint-disable-next-line eqeqeq
  1611. if (len1 == '.') {
  1612. str = ''
  1613. }
  1614. // eslint-disable-next-line eqeqeq
  1615. if (str.indexOf('.') != -1) {
  1616. var str_ = str.substr(str.indexOf('.') + 1)
  1617. // eslint-disable-next-line eqeqeq
  1618. if (str_.indexOf('.') != -1) {
  1619. str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
  1620. }
  1621. if (str_.length > 2) {
  1622. this.$message.warning(`金额小数点后只能输入两位,请正确输入!`)
  1623. return (str = '')
  1624. }
  1625. }
  1626. // eslint-disable-next-line no-useless-escape
  1627. str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
  1628. return str
  1629. },
  1630. isExict(row) {
  1631. this.reimbursementService.checkNumber(row.number).then((data) => {
  1632. if (data) {
  1633. this.$message.error('该发票号已存在')
  1634. row.number = ''
  1635. }
  1636. })
  1637. if (this.commonJS.isNotEmpty(this.inputForm.reimbursementType) && "1" === this.inputForm.reimbursementType) {
  1638. var invoiceReimbursements = this.inputForm.invoiceReimbursements;
  1639. //创建判断值,若行信息存在相同的发票号,则进行数据检查调整,若不存在发票号,则新增行,并将信息写入
  1640. if (!invoiceReimbursements) {
  1641. invoiceReimbursements = [];
  1642. }
  1643. var count = 0;
  1644. for (var i = 0; i < invoiceReimbursements.length; i++) {
  1645. var item = invoiceReimbursements[i];
  1646. if (item.number === row.number) {
  1647. count++;
  1648. if (count === 2) {
  1649. this.$message.error('数电发票号:' + row.number + ' 已存在')
  1650. row.number = ''
  1651. throw new Error('数电发票号:' + row.number + ' 已存在')
  1652. }
  1653. }
  1654. }
  1655. }
  1656. // this.reimbursementService.checkNumber(row.number).then(({data}) => {
  1657. // if (data) {
  1658. // this.$message.error('该发票号已存在')
  1659. // row.number = ''
  1660. // }
  1661. // })
  1662. },
  1663. countAmount(row) {
  1664. let amount
  1665. let taxAmount
  1666. let count = 0
  1667. if (!this.commonJS.isEmpty(row.amount)) {
  1668. amount = parseFloat(row.amount)
  1669. count = count + amount
  1670. }
  1671. if (!this.commonJS.isEmpty(row.taxAmount)) {
  1672. taxAmount = parseFloat(row.taxAmount)
  1673. count = count + taxAmount
  1674. }
  1675. row.count = parseFloat(count).toFixed(2)
  1676. },
  1677. openReportNoPageFormCwProject(rowIndex, row) {
  1678. if (this.commonJS.isEmpty(row.projectName)) {
  1679. this.$message.error('请选择报销项目')
  1680. return
  1681. }
  1682. this.indexRow = rowIndex
  1683. this.$refs.reportNoChooseRadioCwProject.init(this.inputForm.detailInfos[rowIndex].projectId)
  1684. },
  1685. // 选择报告号
  1686. openReportNoPageForm(rowIndex, row) {
  1687. if (this.commonJS.isEmpty(row.projectName)) {
  1688. this.$message.error('请选择报销项目')
  1689. return
  1690. }
  1691. this.indexRow = rowIndex
  1692. this.$refs.reportNoChooseRadio.init(this.inputForm.detailInfoReports[rowIndex].projectId)
  1693. },
  1694. openProgramPageFormCwProject(rowIndex, row) {
  1695. if (this.commonJS.isEmpty(row.typeName)) {
  1696. this.$message.error('请选择报销类型')
  1697. return
  1698. }
  1699. this.indexRow = rowIndex
  1700. this.reimbursementApprovalTypeService.findById(row.typeId).then((data) => {
  1701. let i = data.sort.toString()
  1702. i = i.substring(0, 1)
  1703. // 非业务报销
  1704. if (i !== '1') {
  1705. this.$refs.cwProgramPageFormCwProject.init('2', false)
  1706. } else {
  1707. // 打开单选组件
  1708. this.$refs.cwProgramPageFormCwProject.init('1', false)
  1709. }
  1710. })
  1711. },
  1712. openProgramPageFormCw(rowIndex, row) {
  1713. if (this.commonJS.isEmpty(row.typeName)) {
  1714. this.$message.error('请选择报销类型')
  1715. return
  1716. }
  1717. this.indexRow = rowIndex
  1718. this.reimbursementApprovalTypeService.findById(row.typeId).then((data) => {
  1719. let i = data.sort.toString()
  1720. i = i.substring(0, 1)
  1721. // 非业务报销
  1722. if (i !== '1') {
  1723. this.$refs.cwProgramPageFormCw.init('2', false)
  1724. } else {
  1725. // 打开单选组件
  1726. this.$refs.cwProgramPageFormCw.init('1', false)
  1727. }
  1728. })
  1729. },
  1730. openProgramPageFormPg(rowIndex, row) {
  1731. if (this.commonJS.isEmpty(row.typeName)) {
  1732. this.$message.error('请选择报销类型')
  1733. return
  1734. }
  1735. this.indexRow = rowIndex
  1736. this.reimbursementApprovalTypeService.findById(row.typeId).then((data) => {
  1737. let i = data.sort.toString()
  1738. i = i.substring(0, 1)
  1739. // 非业务报销
  1740. if (i !== '1') {
  1741. this.$refs.programPageForm.init('2', false)
  1742. } else {
  1743. // 打开单选组件
  1744. this.$refs.programPageForm.init('1', true)
  1745. }
  1746. })
  1747. },
  1748. openProgramPageForm3(rowIndex, row) {
  1749. if (this.commonJS.isEmpty(row.typeName)) {
  1750. this.$message.error('请选择报销类型')
  1751. return
  1752. }
  1753. this.indexRow = rowIndex
  1754. this.$refs.cwProgramPageForm3.init('2', false)
  1755. },
  1756. openProgramPageForm4(rowIndex, row) {
  1757. if (this.commonJS.isEmpty(row.typeName)) {
  1758. this.$message.error('请选择报销类型')
  1759. return
  1760. }
  1761. this.indexRow = rowIndex
  1762. this.$refs.cwProgramPageForm4.init('2', false)
  1763. },
  1764. openProgramPageForm8(rowIndex, row) {
  1765. if (this.commonJS.isEmpty(row.typeName)) {
  1766. this.$message.error('请选择报销类型')
  1767. return
  1768. }
  1769. this.indexRow = rowIndex
  1770. this.$refs.cwProgramPageForm8.init('2', false)
  1771. },
  1772. openProgramPageForm5(rowIndex, row) {
  1773. if (this.commonJS.isEmpty(row.typeName)) {
  1774. this.$message.error('请选择报销类型')
  1775. return
  1776. }
  1777. this.indexRow = rowIndex
  1778. this.$refs.cwProgramPageForm5.init('2', false)
  1779. },
  1780. openContractForm(rowIndex, row) {
  1781. this.$refs.workContractChooseCom.init(rowIndex)
  1782. },
  1783. getProgramPg(rows) {
  1784. if (this.commonJS.isNotEmpty(rows)) {
  1785. this.inputForm.detailInfos[this.indexRow].projectId = rows.map(item => { return item.id }).join(',')
  1786. this.inputForm.detailInfos[this.indexRow].projectName = rows.map(item => { return item.name }).join(',')
  1787. this.inputForm.detailInfos[this.indexRow].reportNumber = rows.map(item => { return item.reportNo }).join(',')
  1788. }
  1789. this.indexRow = ''
  1790. this.$forceUpdate()
  1791. },
  1792. getProgram(rows) {
  1793. this.inputForm.detailInfos[this.indexRow].projectId = rows[0].id
  1794. this.inputForm.detailInfos[this.indexRow].projectName = rows[0].projectName
  1795. this.inputForm.detailInfos[this.indexRow].reportNumber = rows[0].reportNumber
  1796. this.indexRow = ''
  1797. this.$forceUpdate()
  1798. },
  1799. getProgramCw(rows) {
  1800. this.inputForm.detailInfoReports[this.indexRow].projectId = rows.id
  1801. this.inputForm.detailInfoReports[this.indexRow].projectName = rows.projectName
  1802. this.inputForm.detailInfoReports[this.indexRow].reportNumber = rows.reportNumber
  1803. this.indexRow = ''
  1804. this.$forceUpdate()
  1805. },
  1806. getProgram3(rows) {
  1807. this.inputForm.detailInfoReports[this.indexRow].projectId = rows[0].id
  1808. this.inputForm.detailInfoReports[this.indexRow].projectName = rows[0].projectName
  1809. this.inputForm.detailInfoReports[this.indexRow].reportNumber = rows[0].reportNumber
  1810. this.indexRow = ''
  1811. this.$forceUpdate()
  1812. },
  1813. getProgramCwProject(rows) {
  1814. this.inputForm.detailInfos[this.indexRow].projectId = rows[0].id
  1815. this.inputForm.detailInfos[this.indexRow].projectName = rows[0].projectName
  1816. this.inputForm.detailInfos[this.indexRow].reportNumber = rows[0].reportNumber
  1817. this.indexRow = ''
  1818. this.$forceUpdate()
  1819. },
  1820. getProgram4(rows) {
  1821. this.inputForm.detailInfoOthers[this.indexRow].projectId = rows[0].id
  1822. this.inputForm.detailInfoOthers[this.indexRow].projectName = rows[0].projectName
  1823. this.inputForm.detailInfoOthers[this.indexRow].reportNumber = rows[0].reportNumber
  1824. this.indexRow = ''
  1825. this.$forceUpdate()
  1826. },
  1827. getProgram8(rows) {
  1828. this.inputForm.detailInfoProject[this.indexRow].projectId = rows[0].id
  1829. this.inputForm.detailInfoProject[this.indexRow].projectName = rows[0].projectName
  1830. this.inputForm.detailInfoProject[this.indexRow].reportNumber = rows[0].reportNumber
  1831. this.indexRow = ''
  1832. this.$forceUpdate()
  1833. },
  1834. getProgram5(rows) {
  1835. this.inputForm.detailInfoProcured[this.indexRow].projectId = rows[0].id
  1836. this.inputForm.detailInfoProcured[this.indexRow].projectName = rows[0].projectName
  1837. this.inputForm.detailInfoProcured[this.indexRow].reportNumber = rows[0].reportNumber
  1838. this.indexRow = ''
  1839. this.$forceUpdate()
  1840. },
  1841. // 报销类型下拉弹窗
  1842. typePullForm(rowIndex, deptName) {
  1843. this.indexRow = rowIndex
  1844. // this.$refs.reimbursementTypePullForm.init()
  1845. this.$refs.cwReimbursementTypePullForm.init('2', deptName)
  1846. //this.$refs.cwReimbursementTypePullForm.init('1', deptName)
  1847. },
  1848. // 报销类型下拉弹窗
  1849. typePullFormCw(rowIndex, deptName) {
  1850. this.indexRow = rowIndex
  1851. // this.$refs.reimbursementTypePullForm.init()
  1852. this.$refs.cwReimbursementTypePullFormCw.init('1', deptName)
  1853. },
  1854. typePullFormProject(rowIndex, deptName) {
  1855. this.indexRow = rowIndex
  1856. // this.$refs.reimbursementTypePullForm.init()
  1857. this.$refs.cwReimbursementTypePullFormCwProject.init('1', deptName)
  1858. },
  1859. typePullForm2(rowIndex, deptName) {
  1860. this.indexRow = rowIndex
  1861. // this.$refs.reimbursementTypePullForm.init()
  1862. this.$refs.cwReimbursementTypePullForm2.init('2', deptName)
  1863. },
  1864. typePullForm3(rowIndex, deptName) {
  1865. this.indexRow = rowIndex
  1866. // this.$refs.reimbursementTypePullForm.init()
  1867. this.$refs.cwReimbursementTypePullForm3.init('1', deptName)
  1868. },
  1869. typePullForm4(rowIndex, deptName) {
  1870. this.indexRow = rowIndex
  1871. // this.$refs.reimbursementTypePullForm.init()
  1872. this.$refs.cwReimbursementTypePullForm4.init('2', deptName)
  1873. },
  1874. typePullForm8(rowIndex, deptName) {
  1875. this.indexRow = rowIndex
  1876. // this.$refs.reimbursementTypePullForm.init()
  1877. this.$refs.cwReimbursementTypePullForm8.init('2', deptName)
  1878. },
  1879. typePullForm5(rowIndex, deptName) {
  1880. this.indexRow = rowIndex
  1881. // this.$refs.reimbursementTypePullForm.init()
  1882. this.$refs.cwReimbursementTypePullForm5.init('2', deptName)
  1883. },
  1884. // 报销内容详情
  1885. getProgramForType(rows) {
  1886. this.inputForm.detailInfos[this.indexRow].typeId = rows.id
  1887. this.inputForm.detailInfos[this.indexRow].typeName = rows.name
  1888. this.indexRow = ''
  1889. this.$forceUpdate()
  1890. },
  1891. getProgramForTypeCw(rows) {
  1892. this.inputForm.detailInfoReports[this.indexRow].typeId = rows.id
  1893. this.inputForm.detailInfoReports[this.indexRow].typeName = rows.name
  1894. this.indexRow = ''
  1895. this.$forceUpdate()
  1896. },
  1897. getProgramForTypeCwProject(rows) {
  1898. this.inputForm.detailInfos[this.indexRow].typeId = rows.id
  1899. this.inputForm.detailInfos[this.indexRow].typeName = rows.name
  1900. this.indexRow = ''
  1901. this.$forceUpdate()
  1902. },
  1903. getProgramForType2(rows) {
  1904. this.inputForm.detailInfoContracts[this.indexRow].typeId = rows.id
  1905. this.inputForm.detailInfoContracts[this.indexRow].typeName = rows.name
  1906. this.indexRow = ''
  1907. this.$forceUpdate()
  1908. },
  1909. getProgramForType3(rows) {
  1910. this.inputForm.detailInfoReports[this.indexRow].typeId = rows.id
  1911. this.inputForm.detailInfoReports[this.indexRow].typeName = rows.name
  1912. this.indexRow = ''
  1913. this.$forceUpdate()
  1914. },
  1915. getProgramForType4(rows) {
  1916. this.inputForm.detailInfoOthers[this.indexRow].typeId = rows.id
  1917. this.inputForm.detailInfoOthers[this.indexRow].typeName = rows.name
  1918. this.indexRow = ''
  1919. this.$forceUpdate()
  1920. },
  1921. getProgramForType5(rows) {
  1922. this.inputForm.detailInfoProcured[this.indexRow].typeId = rows.id
  1923. this.inputForm.detailInfoProcured[this.indexRow].typeName = rows.name
  1924. this.indexRow = ''
  1925. this.$forceUpdate()
  1926. },
  1927. getProgramForType8(rows) {
  1928. this.inputForm.detailInfoProject[this.indexRow].typeId = rows.id
  1929. this.inputForm.detailInfoProject[this.indexRow].typeName = rows.name
  1930. this.indexRow = ''
  1931. this.$forceUpdate()
  1932. },
  1933. // 报销人下拉弹窗
  1934. userPullListForm(rowIndex) {
  1935. this.indexRow = rowIndex
  1936. this.$refs.userPullForm.init()
  1937. },
  1938. userPullListForm2(rowIndex) {
  1939. this.indexRow = rowIndex
  1940. this.$refs.userPullForm2.init()
  1941. },
  1942. userPullListForm3(rowIndex) {
  1943. this.indexRow = rowIndex
  1944. this.$refs.userPullForm3.init()
  1945. },
  1946. userPullListForm4(rowIndex) {
  1947. this.indexRow = rowIndex
  1948. this.$refs.userPullForm4.init()
  1949. },
  1950. userPullListForm8(rowIndex) {
  1951. this.indexRow = rowIndex
  1952. this.$refs.userPullForm8.init()
  1953. },
  1954. userPullListForm5(rowIndex) {
  1955. this.indexRow = rowIndex
  1956. this.$refs.userPullForm5.init()
  1957. },
  1958. getProgramForUser(rows) {
  1959. this.inputForm.detailInfos[this.indexRow].userId = rows[0].id
  1960. this.inputForm.detailInfos[this.indexRow].userName = rows[0].name
  1961. this.inputForm.detailInfos[this.indexRow].deptId = rows[0].parentId
  1962. this.inputForm.detailInfos[this.indexRow].deptName = rows[0].officeName
  1963. this.indexRow = ''
  1964. this.$forceUpdate()
  1965. },
  1966. getProgramForUser2(rows) {
  1967. this.inputForm.detailInfoContracts[this.indexRow].userId = rows[0].id
  1968. this.inputForm.detailInfoContracts[this.indexRow].userName = rows[0].name
  1969. this.inputForm.detailInfoContracts[this.indexRow].deptId = rows[0].parentId
  1970. this.inputForm.detailInfoContracts[this.indexRow].deptName = rows[0].officeName
  1971. this.indexRow = ''
  1972. this.$forceUpdate()
  1973. },
  1974. getProgramForUser3(rows) {
  1975. this.inputForm.detailInfoReports[this.indexRow].userId = rows[0].id
  1976. this.inputForm.detailInfoReports[this.indexRow].userName = rows[0].name
  1977. this.inputForm.detailInfoReports[this.indexRow].deptId = rows[0].parentId
  1978. this.inputForm.detailInfoReports[this.indexRow].deptName = rows[0].officeName
  1979. this.indexRow = ''
  1980. this.$forceUpdate()
  1981. },
  1982. getProgramForUser4(rows) {
  1983. this.inputForm.detailInfoOthers[this.indexRow].userId = rows[0].id
  1984. this.inputForm.detailInfoOthers[this.indexRow].userName = rows[0].name
  1985. this.inputForm.detailInfoOthers[this.indexRow].deptId = rows[0].parentId
  1986. this.inputForm.detailInfoOthers[this.indexRow].deptName = rows[0].officeName
  1987. this.indexRow = ''
  1988. this.$forceUpdate()
  1989. },
  1990. getProgramForUser5(rows) {
  1991. this.inputForm.detailInfoProcured[this.indexRow].userId = rows[0].id
  1992. this.inputForm.detailInfoProcured[this.indexRow].userName = rows[0].name
  1993. this.inputForm.detailInfoProcured[this.indexRow].deptId = rows[0].parentId
  1994. this.inputForm.detailInfoProcured[this.indexRow].deptName = rows[0].officeName
  1995. this.indexRow = ''
  1996. this.$forceUpdate()
  1997. },
  1998. getProgramForUser8(rows) {
  1999. this.inputForm.detailInfoProject[this.indexRow].userId = rows[0].id
  2000. this.inputForm.detailInfoProject[this.indexRow].userName = rows[0].name
  2001. this.inputForm.detailInfoProject[this.indexRow].deptId = rows[0].parentId
  2002. this.inputForm.detailInfoProject[this.indexRow].deptName = rows[0].officeName
  2003. this.indexRow = ''
  2004. this.$forceUpdate()
  2005. },
  2006. getWorkClientChooseCwProject(list) {
  2007. this.inputForm.detailInfos[this.indexRow].reportNumber = list.reportNo
  2008. this.indexRow = ''
  2009. this.$forceUpdate()
  2010. },
  2011. getWorkClientChoose2(list) {
  2012. this.inputForm.detailInfoReports[this.indexRow].reportNumber = list.reportNo
  2013. this.indexRow = ''
  2014. this.$forceUpdate()
  2015. },
  2016. getContract(row, rowIndex) {
  2017. this.inputForm.detailInfoContracts[rowIndex].contractId = row.id
  2018. this.inputForm.detailInfoContracts[rowIndex].contractName = row.contractName
  2019. this.$forceUpdate()
  2020. },
  2021. changeSourceType(value) {
  2022. this.inputForm.detailInfos = []
  2023. this.inputForm.detailInfoContracts = []
  2024. this.inputForm.detailInfoReports = []
  2025. this.inputForm.detailInfoOthers = []
  2026. this.inputForm.detailInfoProcured = []
  2027. this.inputForm.detailInfoProject = []
  2028. this.inputForm.purchaseNo = ''
  2029. this.inputForm.preList = ''
  2030. this.inputForm.purchaseId = ''
  2031. this.detailKey = Math.random()
  2032. this.detailKeyContract = Math.random()
  2033. this.detailKeyReport = Math.random()
  2034. this.detailKeyOthers = Math.random()
  2035. this.detailKeyProcured = Math.random()
  2036. this.detailKeyProject = Math.random()
  2037. },
  2038. submitCheck() {
  2039. if (this.commonJS.isEmpty(this.inputForm.sourceType)) {
  2040. this.$message.error('请填写报销类型')
  2041. this.loading = false
  2042. throw new Error('请填写报销类型')
  2043. } else {
  2044. if (this.inputForm.sourceType === '1') {
  2045. if (this.commonJS.isEmpty(this.inputForm.detailInfos)) {
  2046. this.$message.error('至少填写一条报销详情信息')
  2047. this.loading = false
  2048. throw new Error('至少填写一条报销详情信息')
  2049. } else {
  2050. let i = this.inputForm.detailInfos.length
  2051. for (let j = 0; j < i; j++) {
  2052. let k = j + 1
  2053. if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].userName)) {
  2054. this.$message.error('报销详情第' + k + '行请选择报销人')
  2055. this.loading = false
  2056. throw new Error('报销详情第' + k + '行请选择报销人')
  2057. }
  2058. if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].typeName)) {
  2059. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2060. this.loading = false
  2061. throw new Error('报销详情第' + k + '行请选择报销类型')
  2062. }
  2063. if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].projectName)) {
  2064. this.$message.error('报销详情第' + k + '行请填写报销详情')
  2065. this.loading = false
  2066. throw new Error('报销详情第' + k + '行请填写报销详情')
  2067. }
  2068. if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].numberCount)) {
  2069. this.$message.error('报销详情第' + k + '行请输入费用')
  2070. this.loading = false
  2071. throw new Error('报销详情第' + k + '行请输入费用')
  2072. }
  2073. }
  2074. }
  2075. } else if (this.inputForm.sourceType === '2') {
  2076. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts)) {
  2077. this.$message.error('至少填写一条报销详情信息')
  2078. this.loading = false
  2079. throw new Error('至少填写一条报销详情信息')
  2080. } else {
  2081. let i = this.inputForm.detailInfoContracts.length
  2082. for (let j = 0; j < i; j++) {
  2083. let k = j + 1
  2084. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts[j].userName)) {
  2085. this.$message.error('报销详情第' + k + '行请选择报销人')
  2086. this.loading = false
  2087. throw new Error('报销详情第' + k + '行请选择报销人')
  2088. }
  2089. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts[j].typeName)) {
  2090. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2091. this.loading = false
  2092. throw new Error('报销详情第' + k + '行请选择报销类型')
  2093. }
  2094. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts[j].contractName)) {
  2095. this.$message.error('报销详情第' + k + '行请选择报销合同')
  2096. this.loading = false
  2097. throw new Error('报销详情第' + k + '行请选择报销合同')
  2098. }
  2099. if (this.commonJS.isEmpty(this.inputForm.detailInfoContracts[j].numberCount)) {
  2100. this.$message.error('报销详情第' + k + '行请输入费用')
  2101. this.loading = false
  2102. throw new Error('报销详情第' + k + '行请输入费用')
  2103. }
  2104. }
  2105. }
  2106. } else if (this.inputForm.sourceType === '3') {
  2107. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports)) {
  2108. this.$message.error('至少填写一条报销详情信息')
  2109. this.loading = false
  2110. throw new Error('至少填写一条报销详情信息')
  2111. } else {
  2112. let i = this.inputForm.detailInfoReports.length
  2113. for (let j = 0; j < i; j++) {
  2114. let k = j + 1
  2115. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports[j].userName)) {
  2116. this.$message.error('报销详情第' + k + '行请选择报销人')
  2117. this.loading = false
  2118. throw new Error('报销详情第' + k + '行请选择报销人')
  2119. }
  2120. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports[j].typeName)) {
  2121. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2122. this.loading = false
  2123. throw new Error('报销详情第' + k + '行请选择报销类型')
  2124. }
  2125. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports[j].projectName)) {
  2126. this.$message.error('报销详情第' + k + '行请填写报销详情')
  2127. this.loading = false
  2128. throw new Error('报销详情第' + k + '行请填写报销详情')
  2129. }
  2130. if (this.commonJS.isEmpty(this.inputForm.detailInfoReports[j].numberCount)) {
  2131. this.$message.error('报销详情第' + k + '行请输入费用')
  2132. this.loading = false
  2133. throw new Error('报销详情第' + k + '行请输入费用')
  2134. }
  2135. }
  2136. }
  2137. } else if (this.inputForm.sourceType === '4') {
  2138. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers)) {
  2139. this.$message.error('至少填写一条报销详情信息')
  2140. this.loading = false
  2141. throw new Error('至少填写一条报销详情信息')
  2142. } else {
  2143. let i = this.inputForm.detailInfoOthers.length
  2144. for (let j = 0; j < i; j++) {
  2145. let k = j + 1
  2146. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers[j].userName)) {
  2147. this.$message.error('报销详情第' + k + '行请选择报销人')
  2148. this.loading = false
  2149. throw new Error('报销详情第' + k + '行请选择报销人')
  2150. }
  2151. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers[j].typeName)) {
  2152. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2153. this.loading = false
  2154. throw new Error('报销详情第' + k + '行请选择报销类型')
  2155. }
  2156. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers[j].projectName)) {
  2157. this.$message.error('报销详情第' + k + '行请填写报销详情')
  2158. this.loading = false
  2159. throw new Error('报销详情第' + k + '行请填写报销详情')
  2160. }
  2161. if (this.commonJS.isEmpty(this.inputForm.detailInfoOthers[j].numberCount)) {
  2162. this.$message.error('报销详情第' + k + '行请输入费用')
  2163. this.loading = false
  2164. throw new Error('报销详情第' + k + '行请输入费用')
  2165. }
  2166. }
  2167. }
  2168. } else if (this.inputForm.sourceType === '8') {
  2169. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject)) {
  2170. this.$message.error('至少填写一条报销详情信息')
  2171. this.loading = false
  2172. throw new Error('至少填写一条报销详情信息')
  2173. } else {
  2174. let i = this.inputForm.detailInfoProject.length
  2175. for (let j = 0; j < i; j++) {
  2176. let k = j + 1
  2177. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].userName)) {
  2178. this.$message.error('报销详情第' + k + '行请选择报销人')
  2179. this.loading = false
  2180. throw new Error('报销详情第' + k + '行请选择报销人')
  2181. }
  2182. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].typeName)) {
  2183. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2184. this.loading = false
  2185. throw new Error('报销详情第' + k + '行请选择报销类型')
  2186. }
  2187. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].projectName)) {
  2188. this.$message.error('报销详情第' + k + '行请填写报销详情')
  2189. this.loading = false
  2190. throw new Error('报销详情第' + k + '行请填写报销详情')
  2191. }
  2192. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].numberCount)) {
  2193. this.$message.error('报销详情第' + k + '行请输入费用')
  2194. this.loading = false
  2195. throw new Error('报销详情第' + k + '行请输入费用')
  2196. }
  2197. if (this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].projectApprovalNumber) && this.commonJS.isEmpty(this.inputForm.detailInfoProject[j].invoiceNumber)) {
  2198. this.$message.error('报销详情第' + k + '行发票号或者立项号至少填写一项')
  2199. this.loading = false
  2200. throw new Error('报销详情第' + k + '行发票号或者立项号至少填写一项')
  2201. }
  2202. }
  2203. }
  2204. } else if (this.inputForm.sourceType === '5') {
  2205. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured)) {
  2206. this.$message.error('至少填写一条报销详情信息')
  2207. this.loading = false
  2208. throw new Error('至少填写一条报销详情信息')
  2209. } else {
  2210. let i = this.inputForm.detailInfoProcured.length
  2211. for (let j = 0; j < i; j++) {
  2212. let k = j + 1
  2213. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].userName)) {
  2214. this.$message.error('报销详情第' + k + '行请选择报销人')
  2215. this.loading = false
  2216. throw new Error('报销详情第' + k + '行请选择报销人')
  2217. }
  2218. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].typeName)) {
  2219. this.$message.error('报销详情第' + k + '行请选择报销类型')
  2220. this.loading = false
  2221. throw new Error('报销详情第' + k + '行请选择报销类型')
  2222. }
  2223. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].projectName)) {
  2224. this.$message.error('报销详情第' + k + '行请选择报销项目')
  2225. this.loading = false
  2226. throw new Error('报销详情第' + k + '行请选择报销项目')
  2227. }
  2228. if (this.commonJS.isEmpty(this.inputForm.detailInfoProcured[j].numberCount)) {
  2229. this.$message.error('报销详情第' + k + '行请输入费用')
  2230. this.loading = false
  2231. throw new Error('报销详情第' + k + '行请输入费用')
  2232. }
  2233. }
  2234. }
  2235. }
  2236. }
  2237. },
  2238. openPurForm() {
  2239. this.$refs.purchaseChooseForm.init()
  2240. },
  2241. startPur(id) {
  2242. this.materialManagementService.findById(id).then((data) => {
  2243. this.inputForm.preList = data.detailInfos
  2244. this.inputForm.purchaseNo = data.purchaseNo
  2245. let i = this.inputForm.preList.length
  2246. for (let j = 0; j < i; j++) {
  2247. if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradePrice)) {
  2248. if (this.commonJS.isNotEmpty(this.inputForm.preList[j].tradeNumber)) {
  2249. this.inputForm.preList[j].priceSum = this.inputForm.preList[j].tradePrice * this.inputForm.preList[j].tradeNumber
  2250. }
  2251. }
  2252. }
  2253. })
  2254. this.$forceUpdate()
  2255. },
  2256. getPurChoose(row) {
  2257. this.inputForm.purchaseId = row.id
  2258. this.startPur(row.id)
  2259. },
  2260. footerMethod555({ columns, data }) {
  2261. const footerData = [
  2262. columns.map((column, columnIndex) => {
  2263. if (columnIndex === 0) {
  2264. return '商品总价'
  2265. }
  2266. if (['priceSum'].includes(column.property)) {
  2267. // eslint-disable-next-line no-undef
  2268. this.inputForm.tradeTotalPrice = XEUtils.sum(data, column.property)
  2269. return XEUtils.sum(data, column.property)
  2270. }
  2271. return null
  2272. })
  2273. ]
  2274. return footerData
  2275. },
  2276. seeFileInfo(index) {
  2277. if (this.commonJS.isEmpty(this.inputForm.preList[index].fileInfoLost)) {
  2278. this.inputForm.preList[index].fileInfoLost = []
  2279. }
  2280. this.$refs.materialManagementDialog.newUpload('view', this.inputForm.preList[index].fileInfoLost, null, null, null, null, null, false, index)
  2281. },
  2282. invoiceReimbursementDisposeData: function (data, file) {
  2283. var invoiceReimbursements = this.inputForm.invoiceReimbursements;
  2284. //创建判断值,若行信息存在相同的发票号,则进行数据检查调整,若不存在发票号,则新增行,并将信息写入
  2285. var includeFlag = false;
  2286. if (!invoiceReimbursements) {
  2287. invoiceReimbursements = [];
  2288. }
  2289. //将购买方的名称中括号全部转换成英文进行比较
  2290. var buyerInformationBuyerName = data.BuyerInformationBuyerName.replace(/(/g, '(').replace(/)/g, ')')
  2291. buyerInformationBuyerName = buyerInformationBuyerName.replace(/\s+/g, '');
  2292. if ("中审众环会计师事务所(特殊普通合伙)江苏分所" !== buyerInformationBuyerName) {
  2293. //删除上传的附件信息
  2294. this.$refs.invoiceReimbursementUpLoadComponent.parentDeleteById(file)
  2295. //进行提醒
  2296. this.$message.warning("仅可上传中审众环会计师事务所(特殊普通合伙)江苏分所的报销数电发票")
  2297. } else {
  2298. this.reimbursementService.getEffectiveDataByInvoiceNumber(data.InvoiceNumber, this.inputForm.id).then((decide) => {
  2299. if (!decide.success) {
  2300. //删除上传的附件信息
  2301. this.$refs.invoiceReimbursementUpLoadComponent.parentDeleteById(file)
  2302. //进行提醒
  2303. this.$message.warning(decide.message)
  2304. } else {
  2305. invoiceReimbursements.forEach(item => {
  2306. if (item.number === data.InvoiceNumber) {
  2307. includeFlag = true;
  2308. item.invoiceType = data.InherentLabelGeneralOrSpecialVATLabelCode;
  2309. item.invoiceProjectName = data.IssuItemInformationItemName;
  2310. item.number = data.InvoiceNumber;
  2311. item.invoiceDate = data.IssueTime;
  2312. item.invoiceUnit = data.SellerInformationSellerName;
  2313. item.amount = data.BasicInformationTotalAmWithoutTax;
  2314. item.taxAmount = data.BasicInformationTotalTaxAm;
  2315. item.count = data.BasicInformationTotalTaxincludedAmount;
  2316. item.buyerName = data.BuyerInformationBuyerName;
  2317. }
  2318. })
  2319. //列表中未查到相同发票号
  2320. if (!includeFlag) {
  2321. let value = {
  2322. invoiceType: data.InherentLabelGeneralOrSpecialVATLabelCode,
  2323. invoiceProjectName: data.IssuItemInformationItemName,
  2324. number: data.InvoiceNumber,
  2325. invoiceDate: data.IssueTime,
  2326. invoiceUnit: data.SellerInformationSellerName,
  2327. amount: data.BasicInformationTotalAmWithoutTax,
  2328. taxAmount: data.BasicInformationTotalTaxAm,
  2329. count: data.BasicInformationTotalTaxincludedAmount,
  2330. buyerName: data.BuyerInformationBuyerName,
  2331. remarks: ''
  2332. }
  2333. this.insertInvoiceReimbursementEvent('invoiceReimbursement', value)
  2334. }
  2335. }
  2336. }).catch(() => {
  2337. this.$refs.inputForm.resetFields()
  2338. this.loading = false
  2339. })
  2340. }
  2341. },
  2342. invoiceReimbursementDispose: function (data) {
  2343. var invoiceReimbursements = this.inputForm.invoiceReimbursements;
  2344. //创建判断值,若行信息存在相同的发票号,则进行数据检查调整,若不存在发票号,则新增行,并将信息写入
  2345. var includeFlag = false;
  2346. if (!invoiceReimbursements) {
  2347. invoiceReimbursements = [];
  2348. }
  2349. invoiceReimbursements.forEach(item => {
  2350. if (item.number === data.InvoiceNumber) {
  2351. includeFlag = true;
  2352. }
  2353. })
  2354. return includeFlag;
  2355. },
  2356. deleteInvoiceReimbursementDisposeData: function (data) {
  2357. var invoiceReimbursements = this.inputForm.invoiceReimbursements;
  2358. //创建判断值,若行信息存在相同的发票号,则进行数据检查调整,若不存在发票号,则新增行,并将信息写入
  2359. if (!invoiceReimbursements) {
  2360. invoiceReimbursements = [];
  2361. }
  2362. for (var i = 0; i < invoiceReimbursements.length; i++) {
  2363. var item = invoiceReimbursements[i];
  2364. if (item.number === data.InvoiceNumber) {
  2365. this.removeEvent(item, i, 'invoiceReimbursement')
  2366. }
  2367. if (this.inputForm.id && item.number) {
  2368. //根据电子发票号和报销表id去删除数据库中存在的数据
  2369. this.reimbursementService.deleteByIdAndNumber(this.inputForm.id, data.InvoiceNumber).then((data) => {
  2370. if (!data.success) {
  2371. this.$message.error(data.message)
  2372. }
  2373. })
  2374. }
  2375. }
  2376. },
  2377. footerMethod1111({ columns, data }) {
  2378. const footerData = [
  2379. columns.map((column, columnIndex) => {
  2380. if (columnIndex === 0) {
  2381. return '汇总'
  2382. }
  2383. if (['amount'].includes(column.property)) {
  2384. // eslint-disable-next-line no-undef
  2385. return XEUtils.sum(data, column.property)
  2386. }
  2387. if (['taxAmount'].includes(column.property)) {
  2388. // eslint-disable-next-line no-undef
  2389. return XEUtils.sum(data, column.property)
  2390. }
  2391. if (['count'].includes(column.property)) {
  2392. // eslint-disable-next-line no-undef
  2393. return XEUtils.sum(data, column.property)
  2394. }
  2395. return null
  2396. })
  2397. ]
  2398. return footerData
  2399. },
  2400. changeConfirmList(row) {
  2401. // 如果 confirmStatusList 中存在这个 row.id,则移除
  2402. const index = this.confirmStatusList.findIndex(item => item === row.id);
  2403. if (index !== -1) {
  2404. this.confirmStatusList.splice(index, 1);
  2405. row.confirmStatus = "0"
  2406. } else {
  2407. this.confirmStatusList.push(row.id);
  2408. row.confirmStatus = "1"
  2409. }
  2410. },
  2411. async changeStatusApi() {
  2412. if (this.inputForm.invoiceReimbursementFiles.length == 0) {
  2413. return
  2414. }
  2415. let invoiceStatusIds = this.inputForm.invoiceReimbursementFiles.map(item => {
  2416. return item.id
  2417. }).join(",")
  2418. await this.reimbursementService.saveConfirmStatus({
  2419. invoiceId: invoiceStatusIds,
  2420. status: "1",
  2421. reimbursementId: this.inputForm.id
  2422. })
  2423. },
  2424. handleExpand({ expanded, column, columnIndex, row, rowIndex }) {
  2425. this.handleTableInfo(this.inputForm.sourceType)
  2426. let tempUniqueId = ""
  2427. if (this.tableData[0].uniqueId) {
  2428. tempUniqueId = this.tableData[0].uniqueId
  2429. }
  2430. this.inputForm.invoiceReimbursementFiles.forEach(item => {
  2431. if (!item.remarks) {
  2432. item.remarks = tempUniqueId
  2433. }
  2434. })
  2435. if (expanded == true) {
  2436. setTimeout(() => {
  2437. this.$refs[row.uniqueId + "Upload"].clearUpload()
  2438. let files = JSON.parse(JSON.stringify(this.inputForm.invoiceReimbursementFiles))
  2439. this.$refs[row.uniqueId + "Upload"].newUpload(this.method, files, this.uploadFlag, 300, '数电发票信息', null, null, null, this.companyName, row.uniqueId)
  2440. this.$refs[row.uniqueId + "Upload"].isConfirm = this.isConfirm
  2441. }, 100)
  2442. }
  2443. else {
  2444. let files = this.$refs[row.uniqueId + "Upload"].getDataList()
  2445. this.inputForm.invoiceReimbursementFiles = this.inputForm.invoiceReimbursementFiles.filter(item => {
  2446. return item.remarks != row.uniqueId
  2447. })
  2448. this.inputForm.invoiceReimbursementFiles.push(...files)
  2449. }
  2450. return true
  2451. },
  2452. handleChangeType(value) {
  2453. },
  2454. // 触发上传按钮
  2455. async uploadFile(row, index) {
  2456. this.handleTableInfo(this.inputForm.sourceType)
  2457. await this.tableRef.clearEdit()
  2458. let tempIndex = this.tableRef.getRowExpandRecords().findIndex(item => {
  2459. return row.id == item.id
  2460. })
  2461. if (tempIndex == -1) {
  2462. this.tableRef.setRowExpand(this.tableData[index], true)
  2463. }
  2464. setTimeout(() => {
  2465. this.$refs[row.uniqueId + "Upload"].$el.querySelector('.upload-btn').click();
  2466. }, 100)
  2467. },
  2468. handleTableInfo(value) {
  2469. if (value === '1') {
  2470. this.tableRef = this.$refs.detailTable
  2471. this.tableData = this.inputForm.detailInfos
  2472. } else if (value == "3") {
  2473. this.tableRef = this.$refs.detailTableReport
  2474. this.tableData = this.inputForm.detailInfoReports
  2475. } else if (value == "4") {
  2476. this.tableRef = this.$refs.detailTableOthers
  2477. this.tableData = this.inputForm.detailInfoOthers
  2478. } else if (value == "8") {
  2479. this.tableRef = this.$refs.detailTableProject
  2480. this.tableData = this.inputForm.detailInfoProject
  2481. }
  2482. },
  2483. handleCount(files, uniqueId) {
  2484. this.handleTableInfo(this.inputForm.sourceType)
  2485. let total = 0
  2486. files.forEach((item) => {
  2487. total += Number(item.count)
  2488. });
  2489. let obj = this.tableData.find(item => {
  2490. return item.uniqueId == uniqueId
  2491. })
  2492. obj.number = total
  2493. obj.numberCount = Number(obj.number || 0) + Number(obj.ordinaryNumber || 0)
  2494. },
  2495. handleUploadSuccess(files, uniqueId) {
  2496. this.handleTableInfo(this.inputForm.sourceType)
  2497. let row = this.tableData.find(item => {
  2498. return item.uniqueId == uniqueId
  2499. })
  2500. this.inputForm.invoiceReimbursementFiles = this.inputForm.invoiceReimbursementFiles.filter(item => {
  2501. return item.remarks != row.uniqueId
  2502. })
  2503. this.inputForm.invoiceReimbursementFiles.push(...files)
  2504. this.tableRef.updateFooter(this.tableData)
  2505. row.receiptNumber = files.length
  2506. this.handleReceiptNumberInput(row)
  2507. // this.handleNumberInput(row)
  2508. },
  2509. handleCheckAmount() {
  2510. let countFlag = false
  2511. let countIndex = 0
  2512. this.handleTableInfo(this.inputForm.sourceType)
  2513. this.tableData.forEach((element, index) => {
  2514. let files = this.inputForm.invoiceReimbursementFiles.filter(item => {
  2515. return item.remarks == element.uniqueId
  2516. })
  2517. let count = 0
  2518. files.forEach((item) => {
  2519. if (this.commonJS.isNotEmpty(item.count)) {
  2520. count += Number(item.count)
  2521. }
  2522. });
  2523. if (count != element.number) {
  2524. countFlag = true
  2525. countIndex = index
  2526. }
  2527. })
  2528. if (countFlag) {
  2529. this.$message.warning(`第${countIndex + 1}行报销费用与发票金额不一致`);
  2530. this.loading = false
  2531. throw new Error(`第${countIndex + 1}行报销费用与发票金额不一致`);
  2532. } else {
  2533. this.loading = false
  2534. }
  2535. },
  2536. handleDefaultExpand() {
  2537. this.handleTableInfo(this.inputForm.sourceType)
  2538. let arr = []
  2539. this.tableData.forEach((item, index) => {
  2540. let tempIndex = this.inputForm.invoiceReimbursementFiles.findIndex(temp => {
  2541. return temp.remarks == item.uniqueId
  2542. })
  2543. if (tempIndex !== -1) {
  2544. arr.push(item.uniqueId)
  2545. }
  2546. })
  2547. return arr
  2548. },
  2549. handleOrdinaryNumberInput(row, index) {
  2550. console.log(row);
  2551. console.log(row);
  2552. console.log(row);
  2553. console.log(row);
  2554. let value = 0
  2555. if (index == 1) {
  2556. value = row.number
  2557. } else {
  2558. value = row.ordinaryNumber
  2559. }
  2560. const regex = /^(?:[1-9]\d*|0)?(?:\.\d{0,2})?$/;
  2561. // 如果是非数字,直接删除
  2562. if (!regex.test(value)) {
  2563. if (index == 1) {
  2564. row.number = value.slice(0, -1);
  2565. } else {
  2566. row.ordinaryNumber = value.slice(0, -1);
  2567. }
  2568. this.$message.warning('确保输入数字格式且小数点后只能输入两位')
  2569. return;
  2570. } else {
  2571. if (index == 1) {
  2572. let numberCount = 0
  2573. this.inputForm.invoiceReimbursementFiles.forEach(item => {
  2574. if (item.remarks == row.uniqueId) {
  2575. numberCount += parseFloat(item.count || 0)
  2576. }
  2577. })
  2578. if (numberCount > 0 && row.number > numberCount) {
  2579. row.number = value.slice(0, -1);
  2580. this.$message.warning('输入结果不可大于发票费用总和')
  2581. return
  2582. }
  2583. }
  2584. row.numberCount = parseFloat(Number(row.number || 0) + Number(row.ordinaryNumber || 0)).toFixed(2)
  2585. this.handleTableInfo(this.inputForm.sourceType)
  2586. this.tableRef.updateFooter(this.tableData)
  2587. }
  2588. },
  2589. handleNumberInput(row, index) {
  2590. let value = 0
  2591. if (index == 1) {
  2592. value = row.number
  2593. } else {
  2594. value = row.ordinaryNumber
  2595. }
  2596. const regex = /^(?:[1-9]\d*|0)?(?:\.\d{0,2})?$/;
  2597. // 如果是非数字,直接删除
  2598. if (!regex.test(value)) {
  2599. row.ordinaryNumber = value.slice(0, -1);
  2600. return;
  2601. }
  2602. row.numberCount = parseFloat(Number(row.number || 0) + Number(row.ordinaryNumber || 0)).toFixed(2)
  2603. this.handleTableInfo(this.inputForm.sourceType)
  2604. this.tableRef.updateFooter(this.tableData)
  2605. },
  2606. handleReceiptNumberInput(row) {
  2607. if (this.commonJS.isNotEmpty(row.receiptNumber)) {
  2608. row.receiptNumber = String(row.receiptNumber).replace(/\D|^0/g, '')
  2609. }
  2610. if (this.commonJS.isNotEmpty(row.ordinaryReceiptNumber)) {
  2611. row.ordinaryReceiptNumber = String(row.ordinaryReceiptNumber).replace(/\D|^0/g, '')
  2612. }
  2613. row.receiptNumberCount = Number(row.receiptNumber || 0) + Number(row.ordinaryReceiptNumber || 0)
  2614. this.handleTableInfo(this.inputForm.sourceType)
  2615. this.tableRef.updateFooter(this.tableData)
  2616. },
  2617. handleGetData() {
  2618. return this.inputForm
  2619. }
  2620. }
  2621. }
  2622. </script>
  2623. <style scoped>
  2624. .star-icon::before {
  2625. content: "*";
  2626. color: #f56c6c;
  2627. font-weight: bold;
  2628. margin-right: 5px;
  2629. }
  2630. /deep/ .el-input-number .el-input__inner {
  2631. text-align: left;
  2632. }
  2633. .bold-red>>>.el-input__inner {
  2634. -webkit-text-fill-color: #ff0000 !important;
  2635. font-weight: bolder;
  2636. text-align: left;
  2637. }
  2638. </style>