makerfundApply.vue 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220
  1. <template>
  2. <!-- 创客资金申请表单 -->
  3. <div class="makerfundApply">
  4. <div class="vfpHeader">
  5. <div class="titleOne">创客资金申请</div>
  6. <el-button type="primary" @click="$router.back()">返回</el-button>
  7. </div>
  8. <hr>
  9. <!-- 项目名称、类型开始 -->
  10. <div class="Apply1">
  11. <div class="inpInterval">项目名称</div>
  12. <el-select v-model="selects.projectName" style="width: 30%;" placeholder="请选择">
  13. <el-option
  14. v-for="item in projectFilter"
  15. :key="item.id"
  16. :label="item.title"
  17. :value="item.id">
  18. </el-option>
  19. </el-select>
  20. </div>
  21. <div class="Apply1">
  22. <div class="inpInterval">项目类型</div>
  23. <el-select v-model="selects.projectType" placeholder="请选择">
  24. <el-option
  25. v-for="item in projectType"
  26. :key="item.id"
  27. :label="item.name"
  28. :value="item.name">
  29. </el-option>
  30. </el-select>
  31. </div>
  32. <!-- 项目名称、类型结束 -->
  33. <div class="tabTit">
  34. <div>
  35. <p>经费支出类别(单位:元)</p>
  36. </div>
  37. </div>
  38. <hr>
  39. <div class="moneyBlock" v-for="(item,index) in directFundBlock" :key="index"> <!-- 直接经费 -->
  40. <div class="howMoneyFlex">
  41. <div class="howMoney">
  42. <div class="inpInterval">直接经费</div>
  43. <el-select v-model="item.directFundData" @change="directFundDataSelectChange(item.directFundData)" placeholder="请选择">
  44. <el-option
  45. v-for="item in item.directFundSelects"
  46. :key="item.value"
  47. :label="item.label"
  48. :value="item.value">
  49. </el-option>
  50. </el-select>
  51. </div>
  52. <div class="howMoney">
  53. <div class="inpInterval twoStyle">预算</div>
  54. <el-input v-model="item.budget" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  55. </div>
  56. <div class="howMoney">
  57. <div class="inpInterval twoStyle">已支付</div>
  58. <el-input v-model="item.usedFund" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  59. </div>
  60. <div class="howMoney">
  61. <div class="inpInterval twoStyle">本次申请</div>
  62. <el-input v-model="item.apply" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  63. </div>
  64. <div class="howMoney">
  65. <div class="inpInterval twoStyle">余额</div>
  66. <el-input disabled :value="item.budget - item.usedFund -item.apply" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  67. </div>
  68. <el-button v-show="index!=0" type="primary" style="font-size: 16px;height: 40px;line-height: 0;" @click="delDerData(index)">删除</el-button>
  69. </div>
  70. <div class="howMoney" >
  71. <div class="inpInterval" style="position: relative;top:-20px">事由</div>
  72. <el-input
  73. type="textarea"
  74. :rows="3"
  75. class="textArea"
  76. resize="none"
  77. style="width:800px"
  78. placeholder="请输入内容"
  79. v-model="item.reason">
  80. </el-input>
  81. </div>
  82. </div>
  83. <div>
  84. <div class="addMoneyBtn" @click="addDirectFund">
  85. <div class="jia">+</div>添加
  86. </div>
  87. </div>
  88. <div> <!-- 间接经费 -->
  89. <div class="moneyBlock" v-for="(item,i) in indirectFundBlock" :key="i">
  90. <div class="howMoneyFlex">
  91. <div class="howMoney">
  92. <div class="inpInterval">间接经费</div>
  93. <el-select v-model="item.indirectFundData" placeholder="请选择">
  94. <el-option
  95. v-for="item in item.indirectFundSelects"
  96. :key="item.value"
  97. :label="item.label"
  98. :value="item.value">
  99. </el-option>
  100. </el-select>
  101. </div>
  102. <div class="howMoney">
  103. <div class="inpInterval twoStyle">预算</div>
  104. <el-input v-model="item.budget" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  105. </div>
  106. <div class="howMoney">
  107. <div class="inpInterval twoStyle">已支付</div>
  108. <el-input v-model="item.usedFund" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  109. </div>
  110. <div class="howMoney">
  111. <div class="inpInterval twoStyle">本次申请</div>
  112. <el-input v-model="item.apply" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  113. </div>
  114. <div class="howMoney">
  115. <div class="inpInterval twoStyle">余额</div>
  116. <el-input disabled :value="item.budget - item.usedFund -item.apply" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  117. </div>
  118. <el-button v-show="i!=0" type="primary" style="font-size: 16px;height: 40px;line-height: 0;" @click="delInDerData(i)">删除</el-button>
  119. </div>
  120. <div class="howMoney">
  121. <div class="inpInterval" style="position: relative;top:-20px">事由</div>
  122. <el-input
  123. type="textarea"
  124. :rows="3"
  125. class="textArea"
  126. resize="none"
  127. style="width:800px"
  128. placeholder="请输入内容"
  129. v-model="item.reason">
  130. </el-input>
  131. </div>
  132. </div>
  133. </div>
  134. <div>
  135. <div class="addMoneyBtn" @click="addIndirectFund">
  136. <div class="jia">+</div>添加
  137. </div>
  138. </div>
  139. <!-- 其他经费 -->
  140. <div class="moneyBlock">
  141. <!-- <div class="howMoneyFlex">
  142. <div class="howMoney">
  143. <div class="inpInterval" >其他</div>
  144. <el-input v-model="residue.elseReason" placeholder="请输入内容"></el-input>
  145. </div>
  146. <div class="howMoney">
  147. <div class="inpInterval twoStyle">预算</div>
  148. <el-input v-model="residue.budget" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  149. </div>
  150. <div class="howMoney">
  151. <div class="inpInterval twoStyle">已支付</div>
  152. <el-input v-model="residue.usedFund" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  153. </div>
  154. <div class="howMoney">
  155. <div class="inpInterval twoStyle">余额</div>
  156. <el-input disabled :value="residue.budget - residue.usedFund" type="number" class="inputNumber howMoneyInp" placeholder="金额"></el-input>
  157. </div>
  158. </div> -->
  159. <div class="howMoney">
  160. <div class="inpInterval" style="position: relative;top:-20px">备注</div>
  161. <el-input
  162. type="textarea"
  163. :rows="3"
  164. resize="none"
  165. class="textArea"
  166. style="width:800px"
  167. placeholder="请输入内容"
  168. v-model="residue.reason">
  169. </el-input>
  170. </div>
  171. </div>
  172. <div> <!-- 附件上传 -->
  173. <div class="tabTit">
  174. <div><p>附件上传</p></div>
  175. </div>
  176. <hr>
  177. <el-progress v-show="progress.show" :percentage="progress.value" :format="ProgressFormat"></el-progress>
  178. <div style="display: flex;flex-wrap: wrap;width: 100%;margin-bottom: 45px;">
  179. <el-upload
  180. action="https://jsonplaceholder.typicode.com/posts/"
  181. list-type="picture-card"
  182. style="position: relative;margin-left: 10px;"
  183. disabled
  184. :on-remove="handleRemove">
  185. <BeUpload @getFile="getFile" :progress="progress" style="position: absolute;left: 0;width: 147px;height: 100%;opacity: 0;" class="uploadPic" :navName="'上传封面'" :accept="accept"></BeUpload>
  186. <i class="el-icon-plus"></i>
  187. </el-upload>
  188. <el-upload
  189. action="https://jsonplaceholder.typicode.com/posts/"
  190. list-type="picture-card"
  191. class="delUpload"
  192. style="position: relative;"
  193. v-show="file[0]"
  194. disabled
  195. v-for="(item,index) in this.file" :key="index"
  196. >
  197. <span class="delUploadBtnSty" @click="delUploadBtn(index)">×</span>
  198. <img style="position: absolute;left: -1px;top:-1px;width: 149px;height: 101%;border-radius: 5px;" :src="dialogImageUrl" alt="">
  199. <div style="position: absolute;left: -20%;bottom: -30px;width: 200px;height: 30px;color: #000;line-height: 30px;display: flex;justify-content: center;">{{ item.fileName }}</div>
  200. <!-- <img v-if="imageUrl" :src="imageUrl" class="avatar"> -->
  201. </el-upload>
  202. </div>
  203. </div>
  204. <div class="baseBtn">
  205. <div class="blockWidth">
  206. <el-button type="primary" @click="createFrom">生成表单</el-button>
  207. <el-button type="primary" @click="uploadData">提交</el-button>
  208. </div>
  209. </div>
  210. <!-- 提交对话框开始 -->
  211. <el-dialog
  212. title="提示"
  213. :visible.sync="submitHint"
  214. width="600px"
  215. class="projectApplicationfundAddDialog"
  216. :before-close="init">
  217. <div class="addDialogLogo">LOGO</div>
  218. <div class="deleteContent">确定提交?</div>
  219. <span slot="footer" class="dialog-footer">
  220. <el-button type="primary" @click="submitAll" class="AllDialogBtn">确认提交</el-button>
  221. <el-button @click="init" class="AllDialogBtn" size="small">取消</el-button>
  222. </span>
  223. </el-dialog>
  224. <!-- 提交对话框结束 -->
  225. <!-- 生成表单对话框开始 -->
  226. <el-dialog
  227. title="表单"
  228. :visible.sync="createFromDialog"
  229. width="60%"
  230. style="top: -150px;"
  231. class="createFromDialogSty"
  232. :before-close="init">
  233. <div class="addDialogLogo">LOGO</div>
  234. <div class="deleteContent">
  235. <table class="tableStyle" width="100%" border="1">
  236. <caption style="height: 40px;font-size: 22px;">学校创客专项资金使用申请表(单位:元)</caption>
  237. <caption style="height: 30px;text-align: left;">
  238. <div style="display: flex;">
  239. <div style="margin-right: 10px;"> 项目类型:</div>
  240. <el-checkbox-group v-model="checkList">
  241. <el-checkbox label="创客空间"></el-checkbox>
  242. <el-checkbox label="创客实践室"></el-checkbox>
  243. <el-checkbox label="个人创客"></el-checkbox>
  244. <el-checkbox label="活动创客"></el-checkbox>
  245. </el-checkbox-group>
  246. </div>
  247. </caption>
  248. <caption style="height: 30px;text-align: left;">项目名称:{{ selects.projectName }}</caption>
  249. <tr>
  250. <td>序号</td>
  251. <td>经济支出类别(A)</td>
  252. <td>预算</td>
  253. <td>已支付</td>
  254. <td>本次申请</td>
  255. <td>余额</td>
  256. <td style="width: 20%;">事由</td>
  257. </tr>
  258. <tr>
  259. <td>01</td>
  260. <td style="text-align: left;">一.经费支出</td>
  261. <td>0</td>
  262. <td>0</td>
  263. <td>0</td>
  264. <td>0</td>
  265. <td style="width: 20%;"></td>
  266. </tr>
  267. <tr>
  268. <td>02</td>
  269. <td style="text-align: left;">(一)直接费用</td>
  270. <td>{{ IndirectFunding.budget }}</td>
  271. <td>{{ IndirectFunding.expended }}</td>
  272. <td>{{IndirectFunding.application}}</td>
  273. <td>{{ IndirectFunding.surplus }}</td>
  274. <td style="width: 20%;"></td>
  275. </tr>
  276. <tr>
  277. <td>03</td>
  278. <td style="text-align: left;">小型仪器设备费</td>
  279. <td>{{ directData.facility==0?'':directData.facility }}</td>
  280. <td>{{ usedDirectData.facility==0?'':usedDirectData.facility }}</td>
  281. <td></td>
  282. <td>0</td>
  283. <td style="width: 20%;">{{ directDataReason.reason }}</td>
  284. </tr>
  285. <tr>
  286. <td>04</td>
  287. <td style="text-align: left;">材料费</td>
  288. <td>{{ directData.cl==0?'':directData.cl }}</td>
  289. <td>{{ usedDirectData.cl==0?'':usedDirectData.cl }}</td>
  290. <td></td>
  291. <td>0</td>
  292. <td style="width: 20%;">{{ directDataReason.reason1 }}</td>
  293. </tr>
  294. <tr>
  295. <td>05</td>
  296. <td style="text-align: left;">测试化验加工费</td>
  297. <td>{{ directData.jg==0?'':directData.jg }}</td>
  298. <td>{{ usedDirectData.jg==0?'':usedDirectData.jg }}</td>
  299. <td></td>
  300. <td>0</td>
  301. <td style="width: 20%;">{{ directDataReason.reason2 }}</td>
  302. </tr>
  303. <tr>
  304. <td>06</td>
  305. <td style="text-align: left;">项目协作费</td>
  306. <td>{{ directData.xz==0?'':directData.xz }}</td>
  307. <td>{{ usedDirectData.xz==0?'':usedDirectData.xz }}</td>
  308. <td></td>
  309. <td>0</td>
  310. <td style="width: 20%;">{{ directDataReason.reason3 }}</td>
  311. </tr>
  312. <tr>
  313. <td>07</td>
  314. <td style="text-align: left;">其他支出</td>
  315. <td>{{ directData.qt==0?'':directData.qt }}</td>
  316. <td>{{ usedDirectData.qt==0?'':usedDirectData.qt }}</td>
  317. <td></td>
  318. <td>0</td>
  319. <td style="width: 20%;">{{ directDataReason.reason4 }}</td>
  320. </tr>
  321. <tr>
  322. <td>08</td>
  323. <td style="text-align: left;">(二)间接费用</td>
  324. <td>0</td>
  325. <td>0</td>
  326. <td>0</td>
  327. <td>0</td>
  328. <td style="width: 20%;"></td>
  329. </tr>
  330. <tr>
  331. <td>03</td>
  332. <td style="text-align: left;">项目成果鉴定费</td>
  333. <td>{{ indirectData.facility==0?'':indirectData.facility }}</td>
  334. <td>{{ usedInDirectData.facility==0?'':usedInDirectData.facility }}</td>
  335. <td></td>
  336. <td>0</td>
  337. <td style="width: 20%;">{{ indirectDataReason.reason }}</td>
  338. </tr>
  339. <tr>
  340. <td>04</td>
  341. <td style="text-align: left;">参展参赛费</td>
  342. <td>{{ indirectData.cl==0?'':indirectData.cl }}</td>
  343. <td>{{ usedInDirectData.cl==0?'':usedInDirectData.cl }}</td>
  344. <td></td>
  345. <td>0</td>
  346. <td style="width: 20%;">{{ indirectDataReason.reason1 }}</td>
  347. </tr>
  348. <tr>
  349. <td>05</td>
  350. <td style="text-align: left;">创客交流活动费</td>
  351. <td>{{ indirectData.jg==0?'':indirectData.jg }}</td>
  352. <td>{{ usedInDirectData.jg==0?'':usedInDirectData.jg }}</td>
  353. <td></td>
  354. <td>0</td>
  355. <td style="width: 20%;">{{ indirectDataReason.reason2 }}</td>
  356. </tr>
  357. <tr>
  358. <td>06</td>
  359. <td style="text-align: left;">知识产权事务费</td>
  360. <td>{{ indirectData.xz==0?'':indirectData.xz }}</td>
  361. <td>{{ usedInDirectData.xz==0?'':usedInDirectData.xz }}</td>
  362. <td></td>
  363. <td>0</td>
  364. <td style="width: 20%;">{{ indirectDataReason.reason3 }}</td>
  365. </tr>
  366. <tr>
  367. <td>07</td>
  368. <td style="text-align: left;">其他支出</td>
  369. <td>{{ indirectData.qt==0?'':indirectData.qt }}</td>
  370. <td>{{ usedInDirectData.qt==0?'':usedInDirectData.qt }}</td>
  371. <td></td>
  372. <td>0</td>
  373. <td style="width: 20%;">{{ indirectDataReason.reason4 }}</td>
  374. </tr>
  375. <!-- <tr v-for="(item,index) in items" :key="index">
  376. <td>{{ index+1 }}</td>
  377. <td style="text-align: left;">{{ item.fromSort }}</td>
  378. <td>{{ item.fromBudget }}</td>
  379. <td>{{ item.fromUsed }}</td>
  380. <td>{{ item.fromApp }}</td>
  381. <td>{{ item.fromBalance }}</td>
  382. <td style="width: 20%;">{{ item.fromReason }}</td>
  383. </tr> -->
  384. <tr>
  385. <td style="height: 80px;">备注</td>
  386. <td colspan="6" style="text-align:left;">{{ residue.reason }}</td>
  387. </tr>
  388. </table>
  389. </div>
  390. <span slot="footer" class="dialog-footer">
  391. <el-button type="primary" @click="submitCreateFrom" class="AllDialogBtn">确认</el-button>
  392. <el-button @click="createFromDialog = false" class="AllDialogBtn" size="small">取消</el-button>
  393. </span>
  394. </el-dialog>
  395. <!-- 生成表单对话框结束 -->
  396. </div>
  397. </template>
  398. <script>
  399. import BeUpload from "../../components/tool/beUpload.vue";
  400. export default {
  401. components: {
  402. BeUpload,
  403. },
  404. data() {
  405. return {
  406. // items:[
  407. // {num:'01',fromSort:'一.经费支出',fromBudget:'0',fromUsed:'0',fromApp:'0',fromBalance:'0',fromReason:''},
  408. // {num:'02',fromSort:'(一)直接费用',fromBudget:'0',fromUsed:'0',fromApp:'0',fromBalance:'0',fromReason:''},
  409. // {num:'03',fromSort:'小型仪器设备费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  410. // {num:'04',fromSort:'材料费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  411. // {num:'05',fromSort:'测试化验加工费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  412. // {num:'06',fromSort:'项目协作费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  413. // {num:'07',fromSort:'其他支出',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  414. // {num:'08',fromSort:'(二)间接费用',fromBudget:'0',fromUsed:'0',fromApp:'0',fromBalance:'0',fromReason:''},
  415. // {num:'09',fromSort:'项目成果鉴定费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  416. // {num:'10',fromSort:'参展参赛费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  417. // {num:'11',fromSort:'创客交流活动费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  418. // {num:'12',fromSort:'知识产权事务费',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  419. // {num:'13',fromSort:'其他支出',fromBudget:'',fromUsed:'',fromApp:'',fromBalance:'0',fromReason:''},
  420. // ],
  421. checkList: [],
  422. accept:"*",
  423. submitHint:false, //提交按钮
  424. createFromDialog:false, //生成表单
  425. dialogImageUrl:require('../../assets/img/zzpic426.jpg'),
  426. disabled: false,
  427. file:[],
  428. selects:{
  429. projectName:'',
  430. projectType:''
  431. },
  432. progress:{ //进度条
  433. value:0,
  434. show:false
  435. },
  436. projectFilter:[], //项目名称
  437. projectType:[ //项目类型
  438. {
  439. id:1,
  440. name:'个人创客'
  441. },
  442. {
  443. id:2,
  444. name:'创客活动'
  445. }
  446. ],
  447. directFundBlock:[ //直接经费
  448. {
  449. directFundData:'',
  450. directFundSelects:[
  451. {
  452. value:1,
  453. label:'小型仪器设备费'
  454. },
  455. {
  456. value:2,
  457. label:'材料费'
  458. },
  459. {
  460. value:3,
  461. label:'测试化验加工费'
  462. },
  463. {
  464. value:4,
  465. label:'项目协作费'
  466. },
  467. {
  468. value:5,
  469. label:'其他支出'
  470. },
  471. ],
  472. budget:'', //预算
  473. usedFund:'', //已使用
  474. apply:'', //本次申请
  475. reason:'' //理由
  476. }
  477. ],
  478. newDirectFundBlock:{ //添加直接经费
  479. directFundData:'',
  480. directFundSelects:[
  481. {
  482. value:1,
  483. label:'小型仪器设备费'
  484. },
  485. {
  486. value:2,
  487. label:'材料费'
  488. },
  489. {
  490. value:3,
  491. label:'测试化验加工费'
  492. },
  493. {
  494. value:4,
  495. label:'项目协作费'
  496. },
  497. {
  498. value:5,
  499. label:'其他支出'
  500. },
  501. ],
  502. budget:'', //预算
  503. usedFund:'', //已使用
  504. apply:'', //本次申请
  505. reason:'' //理由
  506. },
  507. indirectFundBlock:[ //间接经费
  508. {
  509. indirectFundData:'',
  510. indirectFundSelects:[
  511. {
  512. value:1,
  513. label:'项目成功鉴定费'
  514. },
  515. {
  516. value:2,
  517. label:'参展参赛费'
  518. },
  519. {
  520. value:3,
  521. label:'创客交流活动费'
  522. },
  523. {
  524. value:4,
  525. label:'知识产权事务费'
  526. },
  527. {
  528. value:5,
  529. label:'其他支出'
  530. },
  531. ],
  532. budget:'', //预算
  533. usedFund:'', //已使用
  534. apply:'', //本次申请
  535. reason:'' //理由
  536. }
  537. ],
  538. newIndirectFundBlock:{ //添加间接经费
  539. indirectFundData:'',
  540. indirectFundSelects:[
  541. {
  542. value:1,
  543. label:'项目成功鉴定费'
  544. },
  545. {
  546. value:2,
  547. label:'参展参赛费'
  548. },
  549. {
  550. value:3,
  551. label:'创客交流活动费'
  552. },
  553. {
  554. value:4,
  555. label:'知识产权事务费'
  556. },
  557. {
  558. value:5,
  559. label:'其他支出'
  560. },
  561. ],
  562. budget:'', //预算
  563. usedFund:'', //已使用
  564. apply:'', //本次申请
  565. reason:'' //理由
  566. },
  567. residue:{ //其他
  568. elseReason:'',
  569. budget:'',
  570. usedFund:'',
  571. reason:'',
  572. }
  573. ,
  574. directData:{ //直接经费预算
  575. facility:0,
  576. cl:0,
  577. jg:0,
  578. xz:0,
  579. qt:0,
  580. },
  581. directDataReason:{
  582. reason:'',
  583. reason1:'',
  584. reason2:'',
  585. reason3:'',
  586. reason4:''
  587. },
  588. usedDirectData:{ //直接经费已支出
  589. facility:0,
  590. cl:0,
  591. jg:0,
  592. xz:0,
  593. qt:0,
  594. },
  595. indirectData:{ //间接经费预算
  596. facility:0,
  597. cl:0,
  598. jg:0,
  599. xz:0,
  600. qt:0,
  601. },
  602. indirectDataReason:{
  603. reason:'',
  604. reason1:'',
  605. reason2:'',
  606. reason3:'',
  607. reason4:''
  608. },
  609. usedInDirectData:{ //间接经费已支出
  610. facility:0,
  611. cl:0,
  612. jg:0,
  613. xz:0,
  614. qt:0,
  615. reason:''
  616. },
  617. DirectFunding:{ //直接经费汇总
  618. budget:0, //预算
  619. expended:0, //已支付
  620. application:0, //本次申请
  621. surplus:0, //余额
  622. },
  623. IndirectFunding:{//简介经费汇总
  624. budget:0, //预算
  625. expended:0, //已支付
  626. application:0, //本次申请
  627. surplus:0, //余额
  628. },
  629. Expenditure:{//经费支出汇总
  630. budget:0, //预算
  631. expended:0, //已支付
  632. application:0, //本次申请
  633. surplus:0, //余额
  634. }
  635. }
  636. },
  637. methods:{
  638. AllEquipment(){
  639. this.directFundBlock.forEach((e,i)=>{
  640. switch(e.directFundData)
  641. {
  642. case 1:
  643. this.directData.facility+=e.budget*1;
  644. this.usedDirectData.facility+=e.usedFund*1;
  645. this.directDataReason.reason=e.reason;
  646. // console.log(this.directData.facility);
  647. break;
  648. case 2:
  649. this.directData.cl+=e.budget*1;
  650. this.usedDirectData.cl+=e.usedFund*1;
  651. this.directDataReason.reason1=e.reason;
  652. // console.log(this.directData.cl);
  653. break;
  654. case 3:
  655. this.directData.jg=e.budget*1;
  656. this.usedDirectData.jg+=e.usedFund*1;
  657. this.directDataReason.reason2=e.reason;
  658. break;
  659. case 4:
  660. this.directData.xz=e.budget*1;
  661. this.usedDirectData.xz+=e.usedFund*1;
  662. this.directDataReason.reason3=e.reason;
  663. break;
  664. case 5:
  665. this.directData.qt=e.budget*1;
  666. this.usedDirectData.qt+=e.usedFund*1;
  667. this.directDataReason.reason4=e.reason;
  668. break;
  669. }
  670. })
  671. this.indirectFundBlock.forEach((e,i)=>{
  672. switch(e.indirectFundData)
  673. {
  674. case 1:
  675. this.indirectData.facility+=e.budget*1;
  676. this.usedInDirectData.facility+=e.usedFund*1;
  677. this.indirectDataReason.reason=e.reason;
  678. // console.log(this.directData.facility);
  679. break;
  680. case 2:
  681. this.indirectData.cl+=e.budget*1;
  682. this.usedInDirectData.cl+=e.usedFund*1;
  683. this.indirectDataReason.reason1=e.reason;
  684. // console.log(this.directData.cl);
  685. break;
  686. case 3:
  687. this.indirectData.jg=e.budget*1;
  688. this.usedInDirectData.jg+=e.usedFund*1;
  689. this.indirectDataReason.reason2=e.reason;
  690. break;
  691. case 4:
  692. this.indirectData.xz=e.budget*1;
  693. this.usedInDirectData.xz+=e.usedFund*1;
  694. this.indirectDataReason.reason3=e.reason;
  695. break;
  696. case 5:
  697. this.indirectData.qt=e.budget*1;
  698. this.usedInDirectData.qt+=e.usedFund*1;
  699. this.indirectDataReason.reason4=e.reason;
  700. break;
  701. }
  702. })
  703. // this.DirectFunding.budget = this.
  704. //直接费用全部预算
  705. for(let i in this.directData)this.IndirectFunding['budget']+=this.directData[i];
  706. //直接费用全部已支出
  707. for(let a in this.usedDirectData)this.IndirectFunding['expended']+=this.usedDirectData[a];
  708. //直接费用本次申请
  709. //直接费用余额
  710. this.IndirectFunding['surplus'] = this.IndirectFunding['budget']-this.IndirectFunding['expended']-this.IndirectFunding['application']
  711. //间接费用
  712. //直接费用全部预算
  713. for(let i in this.indirectData)this.Expenditure['budget']+=this.directData[i];
  714. //直接费用全部已支出
  715. for(let a in this.usedInDirectData)this.Expenditure['expended']+=this.usedDirectData[a];
  716. //直接费用本次申请
  717. //直接费用余额
  718. this.Expenditure['surplus'] = this.Expenditure['budget']-this.Expenditure['expended']-this.Expenditure['application']
  719. },
  720. createFrom(){ // 显示表单对话框
  721. this.directData={ //直接经费预算
  722. facility:0,
  723. cl:0,
  724. jg:0,
  725. xz:0,
  726. qt:0
  727. },
  728. this.usedDirectData={ //直接经费已支出
  729. facility:0,
  730. cl:0,
  731. jg:0,
  732. xz:0,
  733. qt:0
  734. },
  735. this.indirectData={ //间接经费预算
  736. facility:0,
  737. cl:0,
  738. jg:0,
  739. xz:0,
  740. qt:0
  741. },
  742. this.usedInDirectData={ //间接经费已支出
  743. facility:0,
  744. cl:0,
  745. jg:0,
  746. xz:0,
  747. qt:0
  748. },
  749. this.directDataReason={
  750. reason:'',
  751. reason1:'',
  752. reason2:'',
  753. reason3:'',
  754. reason4:''
  755. },
  756. this.AllEquipment();
  757. this.createFromDialog=true;
  758. },
  759. submitCreateFrom(){ //生成表单
  760. //直接经费预算
  761. console.log("====直接经费预算==========")
  762. console.log(this.directData);
  763. console.log("====直接经费已支出==========")
  764. console.log(this.usedDirectData);
  765. console.log("====直接经费事由==========")
  766. console.log(this.directDataReason)
  767. console.log("====间接经费预算==========")
  768. console.log(this.indirectData);
  769. console.log("====间接经费已支出==========")
  770. console.log(this.usedInDirectData)
  771. console.log("====间接经费事由==========")
  772. console.log(this.indirectDataReason)
  773. },
  774. ProgressFormat(value){ //进度条
  775. return value ==100?'100%':`${value}%`
  776. },
  777. delInDerData(index){ //删除间接经费
  778. this.indirectFundBlock.splice(index,1)
  779. },
  780. delDerData(index){ //删除直接经费
  781. console.log(index);
  782. this.directFundBlock.splice(index,1)
  783. },
  784. delUploadBtn(index){ //删除上传文件
  785. console.log(index);
  786. this.file.splice(index,1)
  787. this.$message.success('删除成功')
  788. },
  789. handleRemove(index) {
  790. console.log(index);
  791. },
  792. uploadData(){
  793. this.submitHint=true;
  794. },
  795. submitAll(){
  796. if(this.selects.projectName=='') return this.$message.error('请选择项目名称')
  797. if(this.selects.projectType=='') return this.$message.error('请选择项目类型')
  798. let dirSum = this.directFundBlock.reduce((per,cur)=>{
  799. return per*1+cur.budget*1
  800. },0)
  801. let indirSum =this.indirectFundBlock.reduce((per,cur)=>{
  802. return per*1+cur.budget*1
  803. },0)
  804. let allSum=dirSum+indirSum+this.residue.budget*1
  805. // console.log(allSum);
  806. let usedDirSum = this.directFundBlock.reduce((per,cur)=>{
  807. return per*1+cur.usedFund*1
  808. },0)
  809. let usedIndirSum =this.indirectFundBlock.reduce((per,cur)=>{
  810. return per*1+cur.usedFund*1
  811. },0)
  812. let usedAllSum=usedDirSum+usedIndirSum+this.residue.usedFund*1
  813. // console.log(usedAllSum);
  814. let param={
  815. uid:this.$store.state.userInfo.userid,
  816. cid:this.selects.projectName,
  817. type:this.selects.projectType,
  818. dir:JSON.stringify(this.directFundBlock),
  819. indir:JSON.stringify(this.indirectFundBlock),
  820. elseFund:JSON.stringify(this.residue),
  821. file:JSON.stringify(this.file),
  822. AllSum:allSum,
  823. usedSum:usedAllSum
  824. }
  825. this.ajax
  826. .post(this.$store.state.api+'/insertMakerFund',param)
  827. .then(res=>{
  828. console.log(res);
  829. if (res.data==1) {
  830. this.$router.push('/makerfund')
  831. return this.$message.success('创建成功')
  832. }else{
  833. this.$message.error('创建失败')
  834. }
  835. },err=>{
  836. console.log(err);
  837. })
  838. },
  839. getFile(val) { //上传封面
  840. this.file.push(val)
  841. this.progress.show = false;
  842. // this.imageUrl=require("../../assets/img/jj.jpg")
  843. },
  844. getData(){
  845. let param={
  846. uid:this.$store.state.userInfo.userid,
  847. fid:''
  848. }
  849. this.ajax
  850. .get(this.$store.state.api+'/SelectMakerFundSelects',param)
  851. .then(res=>{
  852. // console.log(res.data);
  853. this.projectFilter=res.data[1]
  854. },err=>{
  855. console.log(err);
  856. })
  857. },
  858. addDirectFund(){ //添加直接经费
  859. //判断如果已经写满
  860. if(this.directFundBlock.length==this.newDirectFundBlock.directFundSelects.length)return this.$message.warning("已无法继续添加")
  861. let oldArr={};
  862. Object.assign(oldArr,this.newDirectFundBlock)
  863. oldArr.directFundSelects = oldArr.directFundSelects.filter(item=>this.directFundBlock.filter(dItem=>dItem.directFundData==item.value).length==0)
  864. this.directFundBlock.push(oldArr)
  865. for(let k in this.newDirectFundBlock) return this.newDirectFundBlock[k]=''
  866. },
  867. addIndirectFund(){ //添加间接经费
  868. // this.indirectFundBlock.push(this.newIndirectFundBlock)
  869. let oldArr={};
  870. Object.assign(oldArr,this.newIndirectFundBlock)
  871. this.indirectFundBlock.push(oldArr)
  872. for(let k in this.newIndirectFundBlock) return this.newIndirectFundBlock[k]=''
  873. },
  874. init(){
  875. //重置
  876. this.submitHint=false;
  877. this.createFromDialog=false;
  878. },
  879. directFundDataSelectChange(value){
  880. //直接经费全部下拉框
  881. let directFundBlockSelect = [
  882. {
  883. value:1,
  884. label:'小型仪器设备费'
  885. },
  886. {
  887. value:2,
  888. label:'材料费'
  889. },
  890. {
  891. value:3,
  892. label:'测试化验加工费'
  893. },
  894. {
  895. value:4,
  896. label:'项目协作费'
  897. },
  898. {
  899. value:5,
  900. label:'其他支出'
  901. },
  902. ]
  903. let oneself=[];
  904. this.directFundBlock.forEach(item=>{
  905. //获取他本身自己的下拉框
  906. oneself.push(directFundBlockSelect.filter(sItem=>sItem.value==item.directFundData)[0])
  907. console.log(oneself)
  908. //获取未选择的
  909. directFundBlockSelect = directFundBlockSelect.filter(sItem=>sItem.value!=item.directFundData)
  910. })
  911. //再遍历一遍
  912. this.directFundBlock.forEach((item,index)=>{
  913. let oneSelect = [];
  914. directFundBlockSelect.forEach(item=>oneSelect.push(item));
  915. if(oneself[index]!=undefined)oneSelect.push(oneself[index])
  916. item.directFundSelects = oneSelect;
  917. })
  918. //遍历所有的直接经费
  919. }
  920. },
  921. mounted(){
  922. this.getData()
  923. }
  924. }
  925. </script>
  926. <style lang="less">
  927. .makerfundApply{
  928. .delUpload{
  929. width: 147px;
  930. margin-left: 60px;
  931. margin-bottom: 62px;
  932. }
  933. .delUploadBtnSty{
  934. position: absolute;
  935. right: 0;top: 0px;
  936. line-height: 20px;
  937. display: flex;
  938. justify-content: center;
  939. width: 20px;
  940. height: 20px;
  941. font-size: 35px;
  942. z-index: 10;
  943. color: #fff;
  944. // background: #fff;
  945. }
  946. .avatar-uploader .el-upload { //文件上传
  947. border: 1px dashed #d9d9d9;
  948. border-radius: 6px;
  949. cursor: pointer;
  950. position: relative;
  951. overflow: hidden;
  952. }
  953. .avatar-uploader-icon {
  954. font-size: 28px;
  955. color: #8c939d;
  956. width: 178px;
  957. height: 178px;
  958. line-height: 178px;
  959. text-align: center;
  960. }
  961. .avatar {
  962. width: 178px;
  963. height: 178px;
  964. display: block;
  965. }
  966. //提交对话框开始
  967. .projectApplicationfundAddDialog{
  968. .el-dialog__header{
  969. display: flex;
  970. justify-content: center;
  971. }
  972. .el-dialog{
  973. border-radius: 5px;
  974. overflow: hidden;
  975. top: 10%;
  976. }
  977. .deleteContent{
  978. width: 100%;
  979. text-align: center;
  980. font-size: 22px;
  981. color: #000;
  982. }
  983. .addDialogLogo{
  984. width: 60px;
  985. height: 30px;
  986. border-radius: 5px;
  987. display: flex;
  988. justify-content: center;
  989. line-height: 30px;
  990. background: #f2f2f2;
  991. position: absolute;
  992. left: 20px; top: 15px;
  993. }
  994. .el-dialog__header{
  995. background: #32455b;
  996. }
  997. .el-dialog__title{
  998. color:#fff;
  999. display: flex;
  1000. justify-content: center;
  1001. font-size: 18px;
  1002. position: relative;
  1003. top: -2px;
  1004. }
  1005. .addDialogMid{
  1006. box-sizing: border-box;
  1007. padding:0 60px 0 10px;
  1008. .addDialogTit{
  1009. display: flex;
  1010. span{
  1011. width: 80px;
  1012. line-height: 40px;
  1013. text-align: left;
  1014. }
  1015. }
  1016. .addDialogTit1{
  1017. display: flex;
  1018. justify-content: space-between;
  1019. margin-bottom: 15px;
  1020. }
  1021. .addDialogTit2{
  1022. margin-top: 10px;
  1023. font-size: 18px;
  1024. color: #000;
  1025. text-indent: 2em;
  1026. }
  1027. .addDialogCon{
  1028. margin-top: 20px;
  1029. }
  1030. }
  1031. .dialog-footer{
  1032. display: flex;
  1033. justify-content: center;
  1034. }
  1035. }
  1036. //提交对话框结束
  1037. .createFromDialogSty{ //生成表单
  1038. .el-dialog__header{
  1039. display: flex;
  1040. justify-content: center;
  1041. }
  1042. .el-dialog{
  1043. border-radius: 5px;
  1044. overflow: hidden;
  1045. top: 10%;
  1046. }
  1047. .deleteContent{
  1048. width: 100%;
  1049. text-align: center;
  1050. font-size: 22px;
  1051. color: #000;
  1052. }
  1053. .addDialogLogo{
  1054. width: 60px;
  1055. height: 30px;
  1056. border-radius: 5px;
  1057. display: flex;
  1058. justify-content: center;
  1059. line-height: 30px;
  1060. background: #f2f2f2;
  1061. position: absolute;
  1062. left: 20px; top: 15px;
  1063. }
  1064. .el-dialog__header{
  1065. background: #32455b;
  1066. }
  1067. .el-dialog__title{
  1068. color:#fff;
  1069. display: flex;
  1070. justify-content: center;
  1071. font-size: 18px;
  1072. position: relative;
  1073. top: -2px;
  1074. }
  1075. .addDialogMid{
  1076. box-sizing: border-box;
  1077. padding:0 60px 0 10px;
  1078. .addDialogTit{
  1079. display: flex;
  1080. span{
  1081. width: 80px;
  1082. line-height: 40px;
  1083. text-align: left;
  1084. }
  1085. }
  1086. .addDialogTit1{
  1087. display: flex;
  1088. justify-content: space-between;
  1089. margin-bottom: 15px;
  1090. }
  1091. .addDialogTit2{
  1092. margin-top: 10px;
  1093. font-size: 18px;
  1094. color: #000;
  1095. text-indent: 2em;
  1096. }
  1097. .addDialogCon{
  1098. margin-top: 20px;
  1099. }
  1100. }
  1101. .dialog-footer{
  1102. display: flex;
  1103. justify-content: center;
  1104. }
  1105. }
  1106. .Apply1{ //顶部两个下拉框
  1107. height: 45px;
  1108. width: 100%;
  1109. display: flex;
  1110. justify-content: flex-start;
  1111. margin-top: 20px;
  1112. .inpName{
  1113. height: 40px;
  1114. outline:none ;
  1115. width: 600px;
  1116. border: #ccc 1px solid;
  1117. border-radius: 5px;
  1118. box-sizing: border-box;
  1119. padding: 1px 15px;
  1120. }
  1121. }
  1122. .moneyBlock{
  1123. max-width: 100%;
  1124. margin-bottom: 20px;
  1125. .howMoneyFlex{
  1126. display: flex;
  1127. flex-wrap: wrap;
  1128. }
  1129. .howMoney{
  1130. display: flex;
  1131. margin-right: 10px;
  1132. margin-bottom: 10px;
  1133. .howMoneyInp{
  1134. .el-input__inner{
  1135. width: 170px;
  1136. }
  1137. }
  1138. }
  1139. }
  1140. .inpInterval{
  1141. min-width: 70px;
  1142. display: inline-block;
  1143. text-align: justify;
  1144. text-justify:distribute-all-lines;
  1145. text-align-last: justify;
  1146. transform: translate(0,22%);
  1147. padding-right: 15px;
  1148. font-size: 16px;
  1149. }
  1150. .addMoneyBtn{ //添加样式
  1151. margin: 15px 85px 30px;
  1152. }
  1153. }
  1154. .tableStyle{
  1155. border-collapse:collapse;
  1156. font-size: 16px;
  1157. td{
  1158. // align-content: center;
  1159. height: 35px;
  1160. }
  1161. }
  1162. </style>