getWord.js 29 KB

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