getWord.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. import Docxtemplater from 'docxtemplater'
  2. import PizZip from 'pizzip'
  3. // import HTMLModule from 'docx'
  4. function MakerSpaceWord(data,fund){
  5. //获取模板文件
  6. let _url = "./file/2023年二级学院特色创客空间建设项目申报书模板.docx";
  7. const x = new XMLHttpRequest();
  8. x.open("GET", _url, true);
  9. x.responseType = "blob";
  10. x.onload = function (e) {
  11. const blob = x.response;
  12. //转成binary
  13. const reader = new FileReader();
  14. reader.readAsArrayBuffer(blob);
  15. reader.onload=function(a){
  16. const buffer = reader.result;
  17. const binary = new Uint8Array(buffer)
  18. //创建一个PizZip实例
  19. const zip = new PizZip(binary);
  20. // 将模板内容加载到 Docxtemplater 中
  21. const doc = new Docxtemplater().loadZip(zip);
  22. //处理项目数据
  23. data['chapters'] = JSON.parse(data['chapters']);
  24. data['course_teacher'] = JSON.parse(data['course_teacher']);
  25. data['course_student'] = JSON.parse(data['course_student']);
  26. //处理资金使用情况
  27. let fundDataArray = [];
  28. fund.forEach(item=>{
  29. let fundData = {
  30. total:"",
  31. device:"",deviceRemarks:"",
  32. Material:"",MaterialRemarks:"",
  33. processing:"",processingRemarks:"",
  34. Collaboration:"",CollaborationRemarks:"",
  35. APPRAISAL:"",APPRAISALRemarks:"",
  36. entery:"",enteryRemarks:"",
  37. activities:"",activitiesRemarks:"",
  38. Transaction:"",TransactionRemarks:""
  39. }
  40. //直接经费
  41. let direct = JSON.parse(item['directFund']);
  42. //间接经费
  43. let indirect = JSON.parse(item['indirectFund']);
  44. direct.forEach(item2=>{
  45. if (item2['directFundData']==1) {
  46. fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget'];
  47. // console.log(fundData['device']);
  48. fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason'];
  49. }
  50. if (item2['directFundData']==2) {
  51. fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget']
  52. fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason'];
  53. }
  54. if (item2['directFundData']==3) {
  55. fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget']
  56. fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason'];
  57. }
  58. if (item2['directFundData']==4) {
  59. fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget']
  60. fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason'];
  61. }
  62. })
  63. indirect.forEach(item3=>{
  64. if (item3['indirectFundData']==1) {
  65. fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget']
  66. fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason'];
  67. }
  68. if (item3['indirectFundData']==2) {
  69. fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget']
  70. fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason'];
  71. }
  72. if (item3['indirectFundData']==3) {
  73. fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget']
  74. fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason'];
  75. }
  76. if (item3['indirectFundData']==4) {
  77. fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget']
  78. fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason'];
  79. }
  80. })
  81. 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']);
  82. fundDataArray.push(fundData);
  83. })
  84. //去除标签
  85. for(let i in data['chapters']){
  86. data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,"");
  87. }
  88. //模板数据
  89. let wordData = {
  90. ing:data['typeName']==0?"√":"□", //已建设
  91. ed:data['typeName']==0?"□":"√", //待建设
  92. projectName:data['title'],//项目名称
  93. college:data['name'],//
  94. begin_at:data['begin_at'],//项目开始时间
  95. plannedEnd_at:data['plannedEnd_at'],//计划完成时间
  96. pro_leader:data['pro_leader'],//项目负责人
  97. lead_leader:data['lead_leader'],//学院牵头领导
  98. people:(data['course_teacher'].length+data['course_student'].length),//项目组人数
  99. teacherNum:data['course_teacher'].length,//参与教师人数
  100. studentNum:data['course_student'].length,//参与学生人数
  101. teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工
  102. student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工
  103. brief:data['brief'],//项目简介
  104. Construction:data['chapters']['Construction'],//建设内容
  105. ProjectBasis:data['chapters']['ProjectBasis'],//立项依据
  106. development:data['chapters']['development'],//创客空间物理环境、制度建设及软件设施建设情况
  107. studio:data['chapters']['studio'],//学生创客工作室建设情况
  108. studentTeam:data['chapters']['studentTeam'],//学生创客团队(人才)培养预期成果、数量
  109. studentActivities:data['chapters']['studentActivities'],//学生创客活动组织实施情况
  110. Transforming:data['chapters']['Transforming'],//学生创客团队孵化、转化创业项目情况
  111. condition:data['chapters']['condition'],//立 项基 础及条 件
  112. fund:fundDataArray,//预算经费
  113. //total:总经费
  114. //小型仪器设备费:device deviceRemarks
  115. //材料费:Material MaterialRemarks
  116. //测试化验加工费:processing processingRemarks
  117. //项目协作费:Collaboration CollaborationRemarks
  118. //项目成果鉴定费:APPRAISAL APPRAISALRemarks
  119. //参展参赛费:entery enteryRemarks
  120. //创客交流活动费:activities activitiesRemarks
  121. //知识产权事务费:Transaction TransactionRemarks
  122. }
  123. //渲染模板
  124. doc.setData(wordData);
  125. doc.render();
  126. //获取渲染后的文本
  127. const output = doc.getZip().generate({
  128. type: "blob",
  129. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  130. compression: "DEFLATE",
  131. });
  132. let link = document.createElement("a");
  133. link.download = '附件3:2023年二级学院特色创客空间建设项目申报书模板(2).docx';
  134. link.style.display = "none";
  135. let blob = new Blob([output]);
  136. link.href = URL.createObjectURL(blob);
  137. document.body.appendChild(link);
  138. link.click();
  139. document.body.removeChild(link);
  140. }
  141. return
  142. }
  143. x.send()
  144. }
  145. // 学生创业项目申请表下载模板
  146. function MakerStudentWord(data,fund){
  147. console.log(data);
  148. // console.log(fund);
  149. //获取模板文件
  150. // ssti-CollegeManage\public\file\2023年学生创客项目申报书模板 .docx
  151. let _url = "./file/2023年学生创客项目申报书模板.docx";
  152. // return console.log(_url);
  153. const x = new XMLHttpRequest();
  154. x.open("GET",_url, true);
  155. x.responseType = "blob";
  156. x.onload = function (e) {
  157. const blob = x.response;
  158. //转成binary
  159. const reader = new FileReader();
  160. reader.readAsArrayBuffer(blob);
  161. reader.onload=function(a){
  162. const buffer = reader.result;
  163. const binary = new Uint8Array(buffer)
  164. //创建一个PizZip实例
  165. const zip = new PizZip(binary);
  166. // 将模板内容加载到 Docxtemplater 中
  167. const doc = new Docxtemplater().loadZip(zip);
  168. //处理项目数据
  169. // console.log(111);
  170. data['chapters'] = JSON.parse(data['chapters']);
  171. data['course_teacher'] = JSON.parse(data['course_teacher']);
  172. data['course_student'] = JSON.parse(data['course_student']);
  173. // return console.log(data['chapters'],data['course_teacher'],data['course_student']);
  174. //处理资金使用情况
  175. let fundDataArray = [];
  176. fund.forEach(item=>{
  177. let fundData = {
  178. total:"",
  179. device:"",deviceRemarks:"",
  180. Material:"",MaterialRemarks:"",
  181. processing:"",processingRemarks:"",
  182. Collaboration:"",CollaborationRemarks:"",
  183. APPRAISAL:"",APPRAISALRemarks:"",
  184. entery:"",enteryRemarks:"",
  185. activities:"",activitiesRemarks:"",
  186. Transaction:"",TransactionRemarks:""
  187. }
  188. //直接经费
  189. let direct = JSON.parse(item['directFund']);
  190. //间接经费
  191. let indirect = JSON.parse(item['indirectFund']);
  192. direct.forEach(item2=>{
  193. if (item2['directFundData']==1) {
  194. fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget'];
  195. // console.log(fundData['device']);
  196. fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason'];
  197. }
  198. if (item2['directFundData']==2) {
  199. fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget']
  200. fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason'];
  201. }
  202. if (item2['directFundData']==3) {
  203. fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget']
  204. fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason'];
  205. }
  206. if (item2['directFundData']==4) {
  207. fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget']
  208. fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason'];
  209. }
  210. })
  211. indirect.forEach(item3=>{
  212. if (item3['indirectFundData']==1) {
  213. fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget']
  214. fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason'];
  215. }
  216. if (item3['indirectFundData']==2) {
  217. fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget']
  218. fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason'];
  219. }
  220. if (item3['indirectFundData']==3) {
  221. fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget']
  222. fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason'];
  223. }
  224. if (item3['indirectFundData']==4) {
  225. fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget']
  226. fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason'];
  227. }
  228. })
  229. 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']);
  230. fundDataArray.push(fundData);
  231. })
  232. //去除标签
  233. for(let i in data['chapters']){
  234. data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,"");
  235. }
  236. //模板数据
  237. let wordData = {
  238. begin_date:data['begin_at'],//项目开始时间
  239. projectName:data['title'],//项目名称
  240. ing:data['typeName']==0?"√":"□", //创意组
  241. ed:data['typeName']==0?"□":"√", //初创组
  242. // college:data['name'],//
  243. mone:data['multiSelectProject'][0]==1?"√":"□", //优先支持项目
  244. mtwo:data['multiSelectProject'][1]==2?"√":"□",
  245. mthree:data['multiSelectProject'][2]==3?"√":"□",
  246. mfour:data['multiSelectProject'][3]==4?"√":"□",
  247. sone:data['schoolRemould']==1?"√":"□", //美丽校园改造项目
  248. stwo:data['schoolRemould']==2?"√":"□",
  249. sthree:data['schoolRemould']==3?"√":"□",
  250. sfour:data['schoolRemould']==4?"√":"□",
  251. stu:data['projectApplyperson']==1?"√":"□", //项目申请人
  252. leg:data['projectApplyperson']==1?"□":"√",
  253. appPeason:data['pro_leader'], //申请人姓名
  254. school:data['name'], //所在学院
  255. tel:data['phone'], //联系电话
  256. begin_at:data['begin_at'],
  257. plannedEnd_at:data['plannedEnd_at'],
  258. allnum:(data['course_teacher'].length+data['course_student'].length),//项目组人数
  259. snum:data['course_teacher'].length,//参与教师人数
  260. tnum:data['course_student'].length,//参与学生人数
  261. brief:data['brief'],//项目简介
  262. back:data['chapters']['back'],
  263. innovate:data['chapters']['innovate'],
  264. path:data['chapters']['path'],
  265. scene:data['chapters']['scene'],
  266. worth:data['chapters']['worth'],
  267. team:data['chapters']['team'],
  268. cost:data['chapters']['cost'],
  269. expectResults:data['chapters']['expectResults'],
  270. expectResultsTeacher:data['chapters']['expectResultsTeacher'],
  271. expectConversion:data['chapters']['expectConversion'],
  272. plan:data['chapters']['plan'],
  273. // plannedEnd_at:data['plannedEnd_at'],//计划完成时间
  274. // pro_leader:data['pro_leader'],//项目负责人
  275. // lead_leader:data['lead_leader'],//学院牵头领导
  276. // people:(data['course_teacher'].length+data['course_student'].length),//项目组人数
  277. // teacherNum:data['course_teacher'].length,//参与教师人数
  278. // studentNum:data['course_student'].length,//参与学生人数
  279. teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工
  280. student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工
  281. // Construction:data['chapters']['Construction'],//建设内容
  282. // ProjectBasis:data['chapters']['ProjectBasis'],//立项依据
  283. // development:data['chapters']['development'],//创客空间物理环境、制度建设及软件设施建设情况
  284. // studio:data['chapters']['studio'],//学生创客工作室建设情况
  285. // studentTeam:data['chapters']['studentTeam'],//学生创客团队(人才)培养预期成果、数量
  286. // studentActivities:data['chapters']['studentActivities'],//学生创客活动组织实施情况
  287. // Transforming:data['chapters']['Transforming'],//学生创客团队孵化、转化创业项目情况
  288. // condition:data['chapters']['condition'],//立 项基 础及条 件
  289. fund:fundDataArray,//预算经费
  290. //total:总经费
  291. //小型仪器设备费:device deviceRemarks
  292. //材料费:Material MaterialRemarks
  293. //测试化验加工费:processing processingRemarks
  294. //项目协作费:Collaboration CollaborationRemarks
  295. //项目成果鉴定费:APPRAISAL APPRAISALRemarks
  296. //参展参赛费:entery enteryRemarks
  297. //创客交流活动费:activities activitiesRemarks
  298. //知识产权事务费:Transaction TransactionRemarks
  299. }
  300. //渲染模板
  301. doc.setData(wordData);
  302. doc.render();
  303. //获取渲染后的文本
  304. const output = doc.getZip().generate({
  305. type: "blob",
  306. mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  307. compression: "DEFLATE",
  308. });
  309. let link = document.createElement("a");
  310. link.download = '2023年学生创客项目申报书.docx';
  311. link.style.display = "none";
  312. let blob = new Blob([output]);
  313. link.href = URL.createObjectURL(blob);
  314. document.body.appendChild(link);
  315. link.click();
  316. document.body.removeChild(link);
  317. }
  318. return
  319. }
  320. x.send()
  321. }
  322. export{
  323. MakerSpaceWord,
  324. MakerStudentWord
  325. }