getWord.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. import Docxtemplater from 'docxtemplater'
  2. import PizZip from 'pizzip'
  3. import { getNowDate } from './Date';
  4. import { GetTime } from './Date';
  5. import FileSaver, { saveAs } from 'file-saver';
  6. import JSZipUtils from 'jszip-utils'
  7. // import {getNowDate} from '@/components/tool/Date.js'
  8. // import HTMLModule from 'docx'
  9. function MakerSpaceWord(data,fund){
  10. //获取模板文件
  11. let _url = "./file/2023年二级学院特色创客空间建设项目申报书模板.docx";
  12. const x = new XMLHttpRequest();
  13. x.open("GET", _url, true);
  14. x.responseType = "blob";
  15. x.onload = function (e) {
  16. const blob = x.response;
  17. //转成binary
  18. const reader = new FileReader();
  19. reader.readAsArrayBuffer(blob);
  20. reader.onload=function(a){
  21. const buffer = reader.result;
  22. const binary = new Uint8Array(buffer)
  23. //创建一个PizZip实例
  24. const zip = new PizZip(binary);
  25. // 将模板内容加载到 Docxtemplater 中
  26. const doc = new Docxtemplater().loadZip(zip);
  27. console.log(data)
  28. //处理项目数据
  29. data['chapters'] = JSON.parse(data['chapters']);
  30. data['course_teacher'] = JSON.parse(data['course_teacher']);
  31. data['course_student'] = JSON.parse(data['course_student']);
  32. //处理资金使用情况
  33. let fundDataArray = [];
  34. fund.forEach(item=>{
  35. let fundData = {
  36. total:"",
  37. device:"",deviceRemarks:"",
  38. Material:"",MaterialRemarks:"",
  39. processing:"",processingRemarks:"",
  40. Collaboration:"",CollaborationRemarks:"",
  41. APPRAISAL:"",APPRAISALRemarks:"",
  42. entery:"",enteryRemarks:"",
  43. activities:"",activitiesRemarks:"",
  44. Transaction:"",TransactionRemarks:""
  45. }
  46. //直接经费
  47. let direct = JSON.parse(item['directFund']);
  48. //间接经费
  49. let indirect = JSON.parse(item['indirectFund']);
  50. direct.forEach(item2=>{
  51. if (item2['directFundData']==1) {
  52. fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget'];
  53. // console.log(fundData['device']);
  54. fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason'];
  55. }
  56. if (item2['directFundData']==2) {
  57. fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget']
  58. fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason'];
  59. }
  60. if (item2['directFundData']==3) {
  61. fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget']
  62. fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason'];
  63. }
  64. if (item2['directFundData']==4) {
  65. fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget']
  66. fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason'];
  67. }
  68. })
  69. indirect.forEach(item3=>{
  70. if (item3['indirectFundData']==1) {
  71. fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget']
  72. fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason'];
  73. }
  74. if (item3['indirectFundData']==2) {
  75. fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget']
  76. fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason'];
  77. }
  78. if (item3['indirectFundData']==3) {
  79. fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget']
  80. fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason'];
  81. }
  82. if (item3['indirectFundData']==4) {
  83. fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget']
  84. fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason'];
  85. }
  86. })
  87. fundData['total'] = Number(fundData['device'])+Number(fundData['Material'])+Number(fundData['processing'])+Number(fundData['Collaboration'])+Number(fundData['APPRAISAL'])+Number(fundData['entery'])+Number(fundData['activities'])+Number(fundData['Transaction']);
  88. fundDataArray.push(fundData);
  89. })
  90. //去除标签
  91. for(let i in data['chapters']){
  92. data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,"");
  93. }
  94. let nowDate = getNowDate().split(' ')[0]
  95. //模板数据
  96. let wordData = {
  97. year:nowDate.split('-')[0], //申请日期年
  98. month:nowDate.split('-')[1], //申请日期月
  99. day:nowDate.split('-')[2], //申请日期日
  100. ing:data['typeName']=='待建设'?"√":"□", //已建设
  101. ed:data['typeName']=='已建设'?"√":"□", //待建设
  102. projectName:data['title'],//项目名称
  103. college:data['name'],//
  104. begin_at:data['begin_at'],//项目开始时间
  105. plannedEnd_at:data['plannedEnd_at'],//计划完成时间
  106. pro_leader:data['pro_leader'],//项目负责人
  107. lead_leader:data['lead_leader'],//学院牵头领导
  108. people:(data['course_teacher'].length+data['course_student'].length),//项目组人数
  109. teacherNum:data['course_teacher'].length,//参与教师人数
  110. studentNum:data['course_student'].length,//参与学生人数
  111. teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工
  112. student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工
  113. brief:data['brief'],//项目简介
  114. Construction:data['chapters']['Construction'],//建设内容
  115. ProjectBasis:data['chapters']['ProjectBasis'],//立项依据
  116. development:data['chapters']['development'],//创客空间物理环境、制度建设及软件设施建设情况
  117. studio:data['chapters']['studio'],//学生创客工作室建设情况
  118. studentTeam:data['chapters']['studentTeam'],//学生创客团队(人才)培养预期成果、数量
  119. studentActivities:data['chapters']['studentActivities'],//学生创客活动组织实施情况
  120. Transforming:data['chapters']['Transforming'],//学生创客团队孵化、转化创业项目情况
  121. condition:data['chapters']['condition'],//立 项基 础及条 件
  122. fund:fundDataArray,//预算经费
  123. //total:总经费
  124. //小型仪器设备费:device deviceRemarks
  125. //材料费:Material MaterialRemarks
  126. //测试化验加工费:processing processingRemarks
  127. //项目协作费:Collaboration CollaborationRemarks
  128. //项目成果鉴定费:APPRAISAL APPRAISALRemarks
  129. //参展参赛费:entery enteryRemarks
  130. //创客交流活动费:activities activitiesRemarks
  131. //知识产权事务费:Transaction TransactionRemarks
  132. }
  133. //渲染模板
  134. doc.setData(wordData);
  135. doc.render();
  136. //获取渲染后的文本
  137. const output = doc.getZip().generate({
  138. type: "blob",
  139. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  140. compression: "DEFLATE",
  141. });
  142. let link = document.createElement("a");
  143. link.download = '附件3:2023年二级学院特色创客空间建设项目申报书模板(2).docx';
  144. link.style.display = "none";
  145. let blob = new Blob([output]);
  146. link.href = URL.createObjectURL(blob);
  147. document.body.appendChild(link);
  148. link.click();
  149. document.body.removeChild(link);
  150. }
  151. return
  152. }
  153. x.send()
  154. }
  155. function getMakerSpaceWord(wordData){
  156. //获取模板文件
  157. let _url = "./file/2023年二级学院特色创客空间建设项目申报书模板 (2).docx";
  158. const x = new XMLHttpRequest();
  159. x.open("GET", _url, true);
  160. x.responseType = "blob";
  161. x.onload = function (e) {
  162. const blob = x.response;
  163. //转成binary
  164. const reader = new FileReader();
  165. reader.readAsArrayBuffer(blob);
  166. reader.onload=function(a){
  167. const buffer = reader.result;
  168. const binary = new Uint8Array(buffer)
  169. //创建一个PizZip实例
  170. const zip = new PizZip(binary);
  171. // 将模板内容加载到 Docxtemplater 中
  172. const doc = new Docxtemplater().loadZip(zip);
  173. //处理数据
  174. // wordData['fund']['total'] = Number(wordData['fund']['device'])+Number(wordData['fund']['Material'])+Number(wordData['fund']['processing'])+Number(wordData['fund']['Collaboration'])+Number(wordData['fund']['APPRAISAL'])+Number(wordData['fund']['entery'])+Number(wordData['fund']['activities'])+Number(wordData['fund']['Transaction']);
  175. //模板数据
  176. let data = {
  177. applicationDate:wordData['applicationDate'],
  178. ing:wordData['stateName']=='待建设'?"√":"□", //已建设
  179. ed:wordData['stateName']=='已建设'?"√":"□", //待建设
  180. projectName:wordData['projectName'],//项目名称
  181. college:wordData['collegeName'],//所在学院
  182. begin_at:wordData['begin_at'],//项目开始时间
  183. plannedEnd_at:wordData['plannedEnd_at'],//计划完成时间
  184. pro_leader:wordData['pro_leader'],//项目负责人
  185. lead_leader:wordData['lead_leader'],//学院牵头领导
  186. people:(wordData['teacher'].length+wordData['student'].length),//项目组人数
  187. teacherNum:wordData['teacher'].length,//参与教师人数
  188. studentNum:wordData['student'].length,//参与学生人数
  189. teacher:wordData['teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工
  190. student:wordData['student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工
  191. brief:wordData['brief'],//项目简介
  192. Construction:wordData['Construction'],//建设内容
  193. ProjectBasis:wordData['ProjectBasis'],//立项依据
  194. development:wordData['development'],//创客空间物理环境、制度建设及软件设施建设情况
  195. studio:wordData['studio'],//学生创客工作室建设情况
  196. studentTeam:wordData['studentTeam'],//学生创客团队(人才)培养预期成果、数量
  197. studentActivities:wordData['studentActivities'],//学生创客活动组织实施情况
  198. Transforming:wordData['Transforming'],//学生创客团队孵化、转化创业项目情况
  199. condition:wordData['condition'],//立 项基 础及条 件
  200. fund:[wordData['fund']],//预算经费
  201. //total:总经费
  202. //小型仪器设备费:device deviceRemarks
  203. //材料费:Material MaterialRemarks
  204. //测试化验加工费:processing processingRemarks
  205. //项目协作费:Collaboration CollaborationRemarks
  206. //项目成果鉴定费:APPRAISAL APPRAISALRemarks
  207. //参展参赛费:entery enteryRemarks
  208. //创客交流活动费:activities activitiesRemarks
  209. //知识产权事务费:Transaction TransactionRemarks
  210. }
  211. //渲染模板
  212. doc.setData(data);
  213. doc.render();
  214. //获取渲染后的文本
  215. const output = doc.getZip().generate({
  216. type: "blob",
  217. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  218. compression: "DEFLATE",
  219. });
  220. let link = document.createElement("a");
  221. link.download = '附件3:2023年二级学院特色创客空间建设项目申报书模板(2).docx';
  222. link.style.display = "none";
  223. let blob = new Blob([output]);
  224. link.href = URL.createObjectURL(blob);
  225. document.body.appendChild(link);
  226. link.click();
  227. document.body.removeChild(link);
  228. }
  229. return
  230. }
  231. x.send()
  232. }
  233. // 学生创业项目申请表下载模板
  234. function MakerStudentWord(data,fund){
  235. console.log(data);
  236. // console.log(fund);
  237. //获取模板文件
  238. // ssti-CollegeManage\public\file\2023年学生创客项目申报书模板 .docx
  239. let _url = "./file/2023年学生创客项目申报书模板.docx";
  240. // return console.log(_url);
  241. const x = new XMLHttpRequest();
  242. x.open("GET",_url, true);
  243. x.responseType = "blob";
  244. x.onload = function (e) {
  245. const blob = x.response;
  246. //转成binary
  247. const reader = new FileReader();
  248. reader.readAsArrayBuffer(blob);
  249. reader.onload=function(a){
  250. const buffer = reader.result;
  251. const binary = new Uint8Array(buffer)
  252. //创建一个PizZip实例
  253. const zip = new PizZip(binary);
  254. // 将模板内容加载到 Docxtemplater 中
  255. const doc = new Docxtemplater().loadZip(zip);
  256. //处理项目数据
  257. // console.log(111);
  258. // data['chapters'] = data['chapters'];
  259. // data['course_teacher'] = JSON.parse(data['course_teacher']);
  260. // data['course_student'] = JSON.parse(data['course_student']);
  261. // return console.log(data['chapters'],data['course_teacher'],data['course_student']);
  262. //处理资金使用情况
  263. let fundDataArray = [];
  264. fund.forEach(item=>{
  265. let fundData = {
  266. total:"",
  267. device:"",deviceRemarks:"",
  268. Material:"",MaterialRemarks:"",
  269. processing:"",processingRemarks:"",
  270. Collaboration:"",CollaborationRemarks:"",
  271. APPRAISAL:"",APPRAISALRemarks:"",
  272. entery:"",enteryRemarks:"",
  273. activities:"",activitiesRemarks:"",
  274. Transaction:"",TransactionRemarks:""
  275. }
  276. //直接经费
  277. let direct = JSON.parse(item['directFund']);
  278. //间接经费
  279. let indirect = JSON.parse(item['indirectFund']);
  280. direct.forEach(item2=>{
  281. if (item2['directFundData']==1) {
  282. fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget'];
  283. // console.log(fundData['device']);
  284. fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason'];
  285. }
  286. if (item2['directFundData']==2) {
  287. fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget']
  288. fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason'];
  289. }
  290. if (item2['directFundData']==3) {
  291. fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget']
  292. fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason'];
  293. }
  294. if (item2['directFundData']==4) {
  295. fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget']
  296. fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason'];
  297. }
  298. })
  299. indirect.forEach(item3=>{
  300. if (item3['indirectFundData']==1) {
  301. fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget']
  302. fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason'];
  303. }
  304. if (item3['indirectFundData']==2) {
  305. fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget']
  306. fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason'];
  307. }
  308. if (item3['indirectFundData']==3) {
  309. fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget']
  310. fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason'];
  311. }
  312. if (item3['indirectFundData']==4) {
  313. fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget']
  314. fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason'];
  315. }
  316. })
  317. fundData['total'] = Number(fundData['device'])+Number(fundData['Material'])+Number(fundData['processing'])+Number(fundData['Collaboration'])+Number(fundData['APPRAISAL'])+Number(fundData['entery'])+Number(fundData['activities'])+Number(fundData['Transaction']);
  318. fundDataArray.push(fundData);
  319. })
  320. //去除标签
  321. for(let i in data['chapters']){
  322. data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,"");
  323. }
  324. let nowDate = getNowDate().split(' ')[0]
  325. //模板数据
  326. let wordData = {
  327. // begin_date:data['begin_at'],//项目开始时间
  328. year:nowDate.split('-')[0], //申请日期年
  329. month:nowDate.split('-')[1], //申请日期月
  330. day:nowDate.split('-')[2], //申请日期日
  331. projectName:data['title'],//项目名称
  332. ing:data['typeName']==0?"√":"□", //创意组
  333. ed:data['typeName']==0?"□":"√", //初创组
  334. // college:data['name'],//
  335. mone:data['val.checkList'].indexOf(1)!=-1?"√":"□", //优先支持项目
  336. mtwo:data['val.checkList'].indexOf(2)!=-1?"√":"□",
  337. mthree:data['val.checkList'].indexOf(3)!=-1?"√":"□",
  338. mfour:data['val.checkList'].indexOf(4)!=-1?"√":"□",
  339. sone:data['schoolRadio']==1?"√":"□", //美丽校园改造项目
  340. stwo:data['schoolRadio']==2?"√":"□",
  341. sthree:data['schoolRadio']==3?"√":"□",
  342. sfour:data['schoolRadio']==4?"√":"□",
  343. stu:data['projectApplyperson']==1?"√":"□", //项目申请人
  344. leg:data['projectApplyperson']==1?"□":"√",
  345. appPeason:data['pro_leader'], //申请人姓名
  346. school:data['name'], //所在学院
  347. tel:data['phone'], //联系电话
  348. begin_at:data['begin_at'],
  349. plannedEnd_at:data['plannedEnd_at'],
  350. allnum:(data['course_teacher'].length+data['course_student'].length),//项目组人数
  351. snum:data['course_teacher'].length,//参与教师人数
  352. tnum:data['course_student'].length,//参与学生人数
  353. brief:data['brief'],//项目简介
  354. back:data['chapters']['back'],
  355. innovate:data['chapters']['innovate'],
  356. path:data['chapters']['path'],
  357. scene:data['chapters']['scene'],
  358. worth:data['chapters']['worth'],
  359. team:data['chapters']['team'],
  360. cost:data['chapters']['cost'],
  361. expectResults:data['chapters']['expectResults'],
  362. expectResultsTeacher:data['chapters']['expectResultsTeacher'],
  363. expectConversion:data['chapters']['expectConversion'],
  364. plan:data['chapters']['plan'],
  365. teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工
  366. student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工
  367. fund:fundDataArray,//预算经费
  368. //total:总经费
  369. //小型仪器设备费:device deviceRemarks
  370. //材料费:Material MaterialRemarks
  371. //测试化验加工费:processing processingRemarks
  372. //项目协作费:Collaboration CollaborationRemarks
  373. //项目成果鉴定费:APPRAISAL APPRAISALRemarks
  374. //参展参赛费:entery enteryRemarks
  375. //创客交流活动费:activities activitiesRemarks
  376. //知识产权事务费:Transaction TransactionRemarks
  377. }
  378. //渲染模板
  379. doc.setData(wordData);
  380. doc.render();
  381. //获取渲染后的文本
  382. const output = doc.getZip().generate({
  383. type: "blob",
  384. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  385. compression: "DEFLATE",
  386. });
  387. let link = document.createElement("a");
  388. link.download = '2023年学生创客项目申报书.docx';
  389. link.style.display = "none";
  390. let blob = new Blob([output]);
  391. link.href = URL.createObjectURL(blob);
  392. document.body.appendChild(link);
  393. link.click();
  394. document.body.removeChild(link);
  395. }
  396. return
  397. }
  398. x.send()
  399. }
  400. // 新学生创业项目申请表下载模板word版
  401. function getWord(val){
  402. JSZipUtils.getBinaryContent('./file/2023年学生创客项目申报书模板.docx',(err,content)=>{
  403. if (err) {
  404. return console.log(err);
  405. }
  406. let zip=new PizZip(content);
  407. let doc=new Docxtemplater().loadZip(zip);
  408. // return console.log(val);
  409. // let FundAll=
  410. // return console.log(val);
  411. //填写数据
  412. doc.setData({
  413. nowTime:getNowDate(1),//申请日期
  414. projectName:val.projectName,
  415. ing:val.radio=='ed917c55-f51d-11ed-a3f6-509a4c5b67cf'?'√':'□',
  416. ed:val.radio=='f3068e26-f51d-11ed-a3f6-509a4c5b67cf'?'√':'□',
  417. mone:val.checkList.includes('1')?'√':'□',
  418. mtwo:val.checkList.includes('2')?'√':'□',
  419. mthree:val.checkList.includes('3')?'√':'□',
  420. mfour:val.checkList.includes('4')?'√':'□',
  421. sone:val.schoolRadio.includes('1')?'√':'□',
  422. stwo:val.schoolRadio.includes('2')?'√':'□',
  423. sthree:val.schoolRadio.includes('3')?'√':'□',
  424. sfour:val.schoolRadio.includes('4')?'√':'□',
  425. stu:val.applyParsonRadio.includes('1')?'√':'□',
  426. leg:val.applyParsonRadio.includes('2')?'√':'□',
  427. appPeason:val.applyParsonName,
  428. school:val.dp,
  429. tel:val.tel,
  430. begin_at:val.btime,
  431. plannedEnd_at:val.etime,
  432. allnum:val.studentS.length+val.teacherS.length,
  433. snum:val.studentS.length,
  434. tnum:val.teacherS.length,
  435. student:val.studentS,
  436. teacher:val.teacherS,
  437. brief:val.brief,
  438. back:val.introduce.back,
  439. innovate:val.introduce.innovate,
  440. path:val.introduce.path,
  441. scene:val.introduce.scene,
  442. worth:val.introduce.worth,
  443. team:val.introduce.team,
  444. cost:val.introduce.cost,
  445. expectResults:val.introduce.expectResults,
  446. expectResultsTeacher:val.introduce.expectResultsTeacher,
  447. expectConversion:val.introduce.expectConversion,
  448. plan:val.introduce.plan,
  449. total:val.fund.facility*1 + val.fund.materials*1+val.fund.process*1+ val.fund.assist*1+val.fund.authenticate*1+ val.fund.match*1+val.fund.activity*1+val.fund.affair*1,
  450. facility:val.fund.facility,
  451. materials:val.fund.materials,
  452. process:val.fund.process,
  453. assist:val.fund.assist,
  454. authenticate:val.fund.authenticate,
  455. match:val.fund.match,
  456. activity:val.fund.activity,
  457. affair:val.fund.affair,
  458. })
  459. // 进行填充
  460. doc.render()
  461. let out=doc.getZip().generate({
  462. type:'blob',
  463. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  464. })
  465. // fs.writeFileSync(path.resolve(__dirname, "output.docx"), buf);
  466. saveAs(out,'2023年学生创客项目申报书.docx')
  467. })
  468. }
  469. //活动管理的申请表
  470. function ActivityWord(data){
  471. let _url = "./file/附件 2:创客专项资金项目申请表创客活动模板.docx";
  472. const x = new XMLHttpRequest();
  473. x.open("GET", _url, true);
  474. x.responseType = "blob";
  475. x.onload = function (e) {
  476. const blob = x.response;
  477. //转成binary
  478. const reader = new FileReader();
  479. reader.readAsArrayBuffer(blob);
  480. reader.onload=function(a){
  481. const buffer = reader.result;
  482. const binary = new Uint8Array(buffer)
  483. //创建一个PizZip实例
  484. const zip = new PizZip(binary);
  485. // 将模板内容加载到 Docxtemplater 中
  486. const doc = new Docxtemplater().loadZip(zip);
  487. //处理数据
  488. data['chapters'] = JSON.parse(data['chapters']);
  489. data['begin_at'] = GetTime(data['begin_at'])
  490. data['course_teacher'] = JSON.parse(data['course_teacher'])
  491. //模板数据
  492. let wordData = {
  493. activityName:data['title'],//活动名称
  494. money:data['money'],//预算经费
  495. pro_leader:data['pro_leader'],//负责人
  496. class:data['className'],//所在部门
  497. phone:data['phone'],//联系电话
  498. activityTime:data['begin_at'],//活动时间
  499. studentNum:data['students'],//参加学生人数
  500. teacher:data['course_teacher'],//活动指导教师
  501. plan:data['chapters'][0].replace(/<[^>]+>/g,""),//活动计划
  502. Expectations:data['chapters'][1].replace(/<[^>]+>/g,""),//预期目标
  503. EventAudience:data['chapters'][2].replace(/<[^>]+>/g,""),//活动受众面
  504. fund:data['chapters'][3].replace(/<[^>]+>/g,""),//经费支出计划
  505. }
  506. //渲染模板
  507. doc.setData(wordData);
  508. doc.render();
  509. //获取渲染后的文本
  510. const output = doc.getZip().generate({
  511. type: "blob",
  512. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  513. compression: "DEFLATE",
  514. });
  515. let link = document.createElement("a");
  516. link.download = '附件 2:创客专项资金项目申请表(创客活动).docx';
  517. link.style.display = "none";
  518. let blob = new Blob([output]);
  519. link.href = URL.createObjectURL(blob);
  520. document.body.appendChild(link);
  521. link.click();
  522. document.body.removeChild(link);
  523. }
  524. return
  525. }
  526. x.send()
  527. }
  528. //创客活动的申请表
  529. function makerActivityWord(data,total){
  530. let _url = "./file/附件 2:创客专项资金项目申请表(创客活动、个人创客)模板.docx";
  531. const x = new XMLHttpRequest();
  532. x.open("GET", _url, true);
  533. x.responseType = "blob";
  534. x.onload = function (e) {
  535. const blob = x.response;
  536. //转成binary
  537. const reader = new FileReader();
  538. reader.readAsArrayBuffer(blob);
  539. reader.onload=function(a){
  540. const buffer = reader.result;
  541. const binary = new Uint8Array(buffer)
  542. //创建一个PizZip实例
  543. const zip = new PizZip(binary);
  544. // 将模板内容加载到 Docxtemplater 中
  545. const doc = new Docxtemplater().loadZip(zip);
  546. //模板数据
  547. let wordData = {...data,total}
  548. //处理数据
  549. wordData['MP1'] = wordData['expenditureMothPlan'][0];
  550. wordData['MP2'] = wordData['expenditureMothPlan'][1];
  551. wordData['MP3'] = wordData['expenditureMothPlan'][2];
  552. wordData['MP4'] = wordData['expenditureMothPlan'][3];
  553. wordData['MP5'] = wordData['expenditureMothPlan'][4];
  554. wordData['MP6'] = wordData['expenditureMothPlan'][5];
  555. wordData['MP7'] = wordData['expenditureMothPlan'][6];
  556. wordData['MP8'] = wordData['expenditureMothPlan'][7];
  557. wordData['MP9'] = wordData['expenditureMothPlan'][8];
  558. wordData['MP10'] = wordData['expenditureMothPlan'][9];
  559. wordData['MP11'] = wordData['expenditureMothPlan'][10];
  560. wordData['MP12'] = wordData['expenditureMothPlan'][11];
  561. wordData['beTime'] = wordData['activityTime'][0].split(' ')[0]
  562. wordData['edTime'] = wordData['activityTime'][1].split(' ')[0]
  563. wordData['device'] = wordData['fund']['device']
  564. wordData['Material'] = wordData['fund']['Material']
  565. wordData['processing'] = wordData['fund']['processing']
  566. wordData['Collaboration'] = wordData['fund']['Collaboration']
  567. wordData['APPRAISAL'] = wordData['fund']['APPRAISAL']
  568. wordData['entery'] = wordData['fund']['entery']
  569. wordData['activities'] = wordData['fund']['activities']
  570. wordData['Transaction'] = wordData['fund']['Transaction']
  571. wordData['type'] = Boolean(wordData['type'])
  572. doc.setData(wordData);
  573. doc.render();
  574. //获取渲染后的文本
  575. const output = doc.getZip().generate({
  576. type: "blob",
  577. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  578. compression: "DEFLATE",
  579. });
  580. let link = document.createElement("a");
  581. link.download = `附件 2:创客专项资金项目申请表(${wordData['type']?'个人创客':'创客活动'}).docx`;
  582. link.style.display = "none";
  583. let blob = new Blob([output]);
  584. link.href = URL.createObjectURL(blob);
  585. document.body.appendChild(link);
  586. link.click();
  587. document.body.removeChild(link);
  588. }
  589. return
  590. }
  591. x.send()
  592. }
  593. export{
  594. MakerSpaceWord,
  595. getMakerSpaceWord,
  596. MakerStudentWord,
  597. ActivityWord,
  598. getWord,
  599. makerActivityWord,
  600. }