import Docxtemplater from 'docxtemplater' import PizZip from 'pizzip' import { getNowDate } from './Date'; import { GetTime } from './Date'; import FileSaver, { saveAs } from 'file-saver'; import JSZipUtils from 'jszip-utils' // import {getNowDate} from '@/components/tool/Date.js' // import HTMLModule from 'docx' function MakerSpaceWord(data,fund){ //获取模板文件 let _url = "./file/2023年二级学院特色创客空间建设项目申报书模板.docx"; const x = new XMLHttpRequest(); x.open("GET", _url, true); x.responseType = "blob"; x.onload = function (e) { const blob = x.response; //转成binary const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload=function(a){ const buffer = reader.result; const binary = new Uint8Array(buffer) //创建一个PizZip实例 const zip = new PizZip(binary); // 将模板内容加载到 Docxtemplater 中 const doc = new Docxtemplater().loadZip(zip); console.log(data) //处理项目数据 data['chapters'] = JSON.parse(data['chapters']); data['course_teacher'] = JSON.parse(data['course_teacher']); data['course_student'] = JSON.parse(data['course_student']); //处理资金使用情况 let fundDataArray = []; fund.forEach(item=>{ let fundData = { total:"", device:"",deviceRemarks:"", Material:"",MaterialRemarks:"", processing:"",processingRemarks:"", Collaboration:"",CollaborationRemarks:"", APPRAISAL:"",APPRAISALRemarks:"", entery:"",enteryRemarks:"", activities:"",activitiesRemarks:"", Transaction:"",TransactionRemarks:"" } //直接经费 let direct = JSON.parse(item['directFund']); //间接经费 let indirect = JSON.parse(item['indirectFund']); direct.forEach(item2=>{ if (item2['directFundData']==1) { fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget']; // console.log(fundData['device']); fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason']; } if (item2['directFundData']==2) { fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget'] fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason']; } if (item2['directFundData']==3) { fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget'] fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason']; } if (item2['directFundData']==4) { fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget'] fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason']; } }) indirect.forEach(item3=>{ if (item3['indirectFundData']==1) { fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget'] fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason']; } if (item3['indirectFundData']==2) { fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget'] fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason']; } if (item3['indirectFundData']==3) { fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget'] fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason']; } if (item3['indirectFundData']==4) { fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget'] fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason']; } }) 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']); fundDataArray.push(fundData); }) //去除标签 for(let i in data['chapters']){ data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,""); } let nowDate = getNowDate().split(' ')[0] //模板数据 let wordData = { year:nowDate.split('-')[0], //申请日期年 month:nowDate.split('-')[1], //申请日期月 day:nowDate.split('-')[2], //申请日期日 ing:data['typeName']=='待建设'?"√":"□", //已建设 ed:data['typeName']=='已建设'?"√":"□", //待建设 projectName:data['title'],//项目名称 college:data['name'],// begin_at:data['begin_at'],//项目开始时间 plannedEnd_at:data['plannedEnd_at'],//计划完成时间 pro_leader:data['pro_leader'],//项目负责人 lead_leader:data['lead_leader'],//学院牵头领导 people:(data['course_teacher'].length+data['course_student'].length),//项目组人数 teacherNum:data['course_teacher'].length,//参与教师人数 studentNum:data['course_student'].length,//参与学生人数 teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工 student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工 brief:data['brief'],//项目简介 Construction:data['chapters']['Construction'],//建设内容 ProjectBasis:data['chapters']['ProjectBasis'],//立项依据 development:data['chapters']['development'],//创客空间物理环境、制度建设及软件设施建设情况 studio:data['chapters']['studio'],//学生创客工作室建设情况 studentTeam:data['chapters']['studentTeam'],//学生创客团队(人才)培养预期成果、数量 studentActivities:data['chapters']['studentActivities'],//学生创客活动组织实施情况 Transforming:data['chapters']['Transforming'],//学生创客团队孵化、转化创业项目情况 condition:data['chapters']['condition'],//立 项基 础及条 件 fund:fundDataArray,//预算经费 //total:总经费 //小型仪器设备费:device deviceRemarks //材料费:Material MaterialRemarks //测试化验加工费:processing processingRemarks //项目协作费:Collaboration CollaborationRemarks //项目成果鉴定费:APPRAISAL APPRAISALRemarks //参展参赛费:entery enteryRemarks //创客交流活动费:activities activitiesRemarks //知识产权事务费:Transaction TransactionRemarks } //渲染模板 doc.setData(wordData); doc.render(); //获取渲染后的文本 const output = doc.getZip().generate({ type: "blob", mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", compression: "DEFLATE", }); let link = document.createElement("a"); link.download = '附件3:2023年二级学院特色创客空间建设项目申报书模板(2).docx'; link.style.display = "none"; let blob = new Blob([output]); link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); document.body.removeChild(link); } return } x.send() } function getMakerSpaceWord(wordData){ //获取模板文件 let _url = "./file/2023年二级学院特色创客空间建设项目申报书模板 (2).docx"; const x = new XMLHttpRequest(); x.open("GET", _url, true); x.responseType = "blob"; x.onload = function (e) { const blob = x.response; //转成binary const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload=function(a){ const buffer = reader.result; const binary = new Uint8Array(buffer) //创建一个PizZip实例 const zip = new PizZip(binary); // 将模板内容加载到 Docxtemplater 中 const doc = new Docxtemplater().loadZip(zip); //处理数据 // 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']); //模板数据 let data = { applicationDate:wordData['applicationDate'], ing:wordData['stateName']=='待建设'?"√":"□", //已建设 ed:wordData['stateName']=='已建设'?"√":"□", //待建设 projectName:wordData['projectName'],//项目名称 college:wordData['collegeName'],//所在学院 begin_at:wordData['begin_at'],//项目开始时间 plannedEnd_at:wordData['plannedEnd_at'],//计划完成时间 pro_leader:wordData['pro_leader'],//项目负责人 lead_leader:wordData['lead_leader'],//学院牵头领导 people:(wordData['teacher'].length+wordData['student'].length),//项目组人数 teacherNum:wordData['teacher'].length,//参与教师人数 studentNum:wordData['student'].length,//参与学生人数 teacher:wordData['teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工 student:wordData['student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工 brief:wordData['brief'],//项目简介 Construction:wordData['Construction'],//建设内容 ProjectBasis:wordData['ProjectBasis'],//立项依据 development:wordData['development'],//创客空间物理环境、制度建设及软件设施建设情况 studio:wordData['studio'],//学生创客工作室建设情况 studentTeam:wordData['studentTeam'],//学生创客团队(人才)培养预期成果、数量 studentActivities:wordData['studentActivities'],//学生创客活动组织实施情况 Transforming:wordData['Transforming'],//学生创客团队孵化、转化创业项目情况 condition:wordData['condition'],//立 项基 础及条 件 fund:[wordData['fund']],//预算经费 //total:总经费 //小型仪器设备费:device deviceRemarks //材料费:Material MaterialRemarks //测试化验加工费:processing processingRemarks //项目协作费:Collaboration CollaborationRemarks //项目成果鉴定费:APPRAISAL APPRAISALRemarks //参展参赛费:entery enteryRemarks //创客交流活动费:activities activitiesRemarks //知识产权事务费:Transaction TransactionRemarks } //渲染模板 doc.setData(data); doc.render(); //获取渲染后的文本 const output = doc.getZip().generate({ type: "blob", mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", compression: "DEFLATE", }); let link = document.createElement("a"); link.download = '附件3:2023年二级学院特色创客空间建设项目申报书模板(2).docx'; link.style.display = "none"; let blob = new Blob([output]); link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); document.body.removeChild(link); } return } x.send() } // 学生创业项目申请表下载模板 function MakerStudentWord(data,fund){ console.log(data); // console.log(fund); //获取模板文件 // ssti-CollegeManage\public\file\2023年学生创客项目申报书模板 .docx let _url = "./file/2023年学生创客项目申报书模板.docx"; // return console.log(_url); const x = new XMLHttpRequest(); x.open("GET",_url, true); x.responseType = "blob"; x.onload = function (e) { const blob = x.response; //转成binary const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload=function(a){ const buffer = reader.result; const binary = new Uint8Array(buffer) //创建一个PizZip实例 const zip = new PizZip(binary); // 将模板内容加载到 Docxtemplater 中 const doc = new Docxtemplater().loadZip(zip); //处理项目数据 // console.log(111); // data['chapters'] = data['chapters']; // data['course_teacher'] = JSON.parse(data['course_teacher']); // data['course_student'] = JSON.parse(data['course_student']); // return console.log(data['chapters'],data['course_teacher'],data['course_student']); //处理资金使用情况 let fundDataArray = []; fund.forEach(item=>{ let fundData = { total:"", device:"",deviceRemarks:"", Material:"",MaterialRemarks:"", processing:"",processingRemarks:"", Collaboration:"",CollaborationRemarks:"", APPRAISAL:"",APPRAISALRemarks:"", entery:"",enteryRemarks:"", activities:"",activitiesRemarks:"", Transaction:"",TransactionRemarks:"" } //直接经费 let direct = JSON.parse(item['directFund']); //间接经费 let indirect = JSON.parse(item['indirectFund']); direct.forEach(item2=>{ if (item2['directFundData']==1) { fundData['device'] = direct.filter(item=>item['directFundData']==1)[0]['budget']; // console.log(fundData['device']); fundData['deviceRemarks'] = direct.filter(item=>item['directFundData']==1)[0]['reason']; } if (item2['directFundData']==2) { fundData['Material'] = direct.filter(item=>item['directFundData']==2)[0]['budget'] fundData['MaterialRemarks'] = direct.filter(item=>item['directFundData']==2)[0]['reason']; } if (item2['directFundData']==3) { fundData['processing'] = direct.filter(item=>item['directFundData']==3)[0]['budget'] fundData['processingRemarks'] = direct.filter(item=>item['directFundData']==3)[0]['reason']; } if (item2['directFundData']==4) { fundData['Collaboration'] = direct.filter(item=>item['directFundData']==4)[0]['budget'] fundData['CollaborationRemarks'] = direct.filter(item=>item['directFundData']==4)[0]['reason']; } }) indirect.forEach(item3=>{ if (item3['indirectFundData']==1) { fundData['APPRAISAL'] = indirect.filter(item=>item['indirectFundData']==1)[0]['budget'] fundData['APPRAISALRemarks'] = indirect.filter(item=>item['indirectFundData']==1)[0]['reason']; } if (item3['indirectFundData']==2) { fundData['entery'] = indirect.filter(item=>item['indirectFundData']==2)[0]['budget'] fundData['enteryRemarks'] = indirect.filter(item=>item['indirectFundData']==2)[0]['reason']; } if (item3['indirectFundData']==3) { fundData['activities'] = indirect.filter(item=>item['indirectFundData']==3)[0]['budget'] fundData['activitiesRemarks'] = indirect.filter(item=>item['indirectFundData']==3)[0]['reason']; } if (item3['indirectFundData']==4) { fundData['Transaction'] = indirect.filter(item=>item['indirectFundData']==4)[0]['budget'] fundData['TransactionRemarks'] = indirect.filter(item=>item['indirectFundData']==4)[0]['reason']; } }) 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']); fundDataArray.push(fundData); }) //去除标签 for(let i in data['chapters']){ data['chapters'][i]=data['chapters'][i].replace(/<[^>]+>/g,""); } let nowDate = getNowDate().split(' ')[0] //模板数据 let wordData = { // begin_date:data['begin_at'],//项目开始时间 year:nowDate.split('-')[0], //申请日期年 month:nowDate.split('-')[1], //申请日期月 day:nowDate.split('-')[2], //申请日期日 projectName:data['title'],//项目名称 ing:data['typeName']==0?"√":"□", //创意组 ed:data['typeName']==0?"□":"√", //初创组 // college:data['name'],// mone:data['val.checkList'].indexOf(1)!=-1?"√":"□", //优先支持项目 mtwo:data['val.checkList'].indexOf(2)!=-1?"√":"□", mthree:data['val.checkList'].indexOf(3)!=-1?"√":"□", mfour:data['val.checkList'].indexOf(4)!=-1?"√":"□", sone:data['schoolRadio']==1?"√":"□", //美丽校园改造项目 stwo:data['schoolRadio']==2?"√":"□", sthree:data['schoolRadio']==3?"√":"□", sfour:data['schoolRadio']==4?"√":"□", stu:data['projectApplyperson']==1?"√":"□", //项目申请人 leg:data['projectApplyperson']==1?"□":"√", appPeason:data['pro_leader'], //申请人姓名 school:data['name'], //所在学院 tel:data['phone'], //联系电话 begin_at:data['begin_at'], plannedEnd_at:data['plannedEnd_at'], allnum:(data['course_teacher'].length+data['course_student'].length),//项目组人数 snum:data['course_teacher'].length,//参与教师人数 tnum:data['course_student'].length,//参与学生人数 brief:data['brief'],//项目简介 back:data['chapters']['back'], innovate:data['chapters']['innovate'], path:data['chapters']['path'], scene:data['chapters']['scene'], worth:data['chapters']['worth'], team:data['chapters']['team'], cost:data['chapters']['cost'], expectResults:data['chapters']['expectResults'], expectResultsTeacher:data['chapters']['expectResultsTeacher'], expectConversion:data['chapters']['expectConversion'], plan:data['chapters']['plan'], teacher:data['course_teacher'], //教师组//name:姓名 speciality:专业 title:职称 education:学历 section:所在教研室 work:项目组角色分工 student:data['course_student'], //学生组//name:姓名 class:班级 age:年龄 work:项目组任务分工 fund:fundDataArray,//预算经费 //total:总经费 //小型仪器设备费:device deviceRemarks //材料费:Material MaterialRemarks //测试化验加工费:processing processingRemarks //项目协作费:Collaboration CollaborationRemarks //项目成果鉴定费:APPRAISAL APPRAISALRemarks //参展参赛费:entery enteryRemarks //创客交流活动费:activities activitiesRemarks //知识产权事务费:Transaction TransactionRemarks } //渲染模板 doc.setData(wordData); doc.render(); //获取渲染后的文本 const output = doc.getZip().generate({ type: "blob", mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", compression: "DEFLATE", }); let link = document.createElement("a"); link.download = '2023年学生创客项目申报书.docx'; link.style.display = "none"; let blob = new Blob([output]); link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); document.body.removeChild(link); } return } x.send() } // 新学生创业项目申请表下载模板word版 function getWord(val){ JSZipUtils.getBinaryContent('./file/2023年学生创客项目申报书模板.docx',(err,content)=>{ if (err) { return console.log(err); } let zip=new PizZip(content); let doc=new Docxtemplater().loadZip(zip); // return console.log(val); // let FundAll= // return console.log(val); //填写数据 doc.setData({ nowTime:getNowDate(1),//申请日期 projectName:val.projectName, ing:val.radio=='ed917c55-f51d-11ed-a3f6-509a4c5b67cf'?'√':'□', ed:val.radio=='f3068e26-f51d-11ed-a3f6-509a4c5b67cf'?'√':'□', mone:val.checkList.includes('1')?'√':'□', mtwo:val.checkList.includes('2')?'√':'□', mthree:val.checkList.includes('3')?'√':'□', mfour:val.checkList.includes('4')?'√':'□', sone:val.schoolRadio.includes('1')?'√':'□', stwo:val.schoolRadio.includes('2')?'√':'□', sthree:val.schoolRadio.includes('3')?'√':'□', sfour:val.schoolRadio.includes('4')?'√':'□', stu:val.applyParsonRadio.includes('1')?'√':'□', leg:val.applyParsonRadio.includes('2')?'√':'□', appPeason:val.applyParsonName, school:val.dp, tel:val.tel, begin_at:val.btime, plannedEnd_at:val.etime, allnum:val.studentS.length+val.teacherS.length, snum:val.studentS.length, tnum:val.teacherS.length, student:val.studentS, teacher:val.teacherS, brief:val.brief, back:val.introduce.back, innovate:val.introduce.innovate, path:val.introduce.path, scene:val.introduce.scene, worth:val.introduce.worth, team:val.introduce.team, cost:val.introduce.cost, expectResults:val.introduce.expectResults, expectResultsTeacher:val.introduce.expectResultsTeacher, expectConversion:val.introduce.expectConversion, plan:val.introduce.plan, 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, facility:val.fund.facility, materials:val.fund.materials, process:val.fund.process, assist:val.fund.assist, authenticate:val.fund.authenticate, match:val.fund.match, activity:val.fund.activity, affair:val.fund.affair, }) // 进行填充 doc.render() let out=doc.getZip().generate({ type:'blob', mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", }) // fs.writeFileSync(path.resolve(__dirname, "output.docx"), buf); saveAs(out,'2023年学生创客项目申报书.docx') }) } //活动管理的申请表 function ActivityWord(data){ let _url = "./file/附件 2:创客专项资金项目申请表创客活动模板.docx"; const x = new XMLHttpRequest(); x.open("GET", _url, true); x.responseType = "blob"; x.onload = function (e) { const blob = x.response; //转成binary const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload=function(a){ const buffer = reader.result; const binary = new Uint8Array(buffer) //创建一个PizZip实例 const zip = new PizZip(binary); // 将模板内容加载到 Docxtemplater 中 const doc = new Docxtemplater().loadZip(zip); //处理数据 data['chapters'] = JSON.parse(data['chapters']); data['begin_at'] = GetTime(data['begin_at']) data['course_teacher'] = JSON.parse(data['course_teacher']) //模板数据 let wordData = { activityName:data['title'],//活动名称 money:data['money'],//预算经费 pro_leader:data['pro_leader'],//负责人 class:data['className'],//所在部门 phone:data['phone'],//联系电话 activityTime:data['begin_at'],//活动时间 studentNum:data['students'],//参加学生人数 teacher:data['course_teacher'],//活动指导教师 plan:data['chapters'][0].replace(/<[^>]+>/g,""),//活动计划 Expectations:data['chapters'][1].replace(/<[^>]+>/g,""),//预期目标 EventAudience:data['chapters'][2].replace(/<[^>]+>/g,""),//活动受众面 fund:data['chapters'][3].replace(/<[^>]+>/g,""),//经费支出计划 } //渲染模板 doc.setData(wordData); doc.render(); //获取渲染后的文本 const output = doc.getZip().generate({ type: "blob", mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", compression: "DEFLATE", }); let link = document.createElement("a"); link.download = '附件 2:创客专项资金项目申请表(创客活动).docx'; link.style.display = "none"; let blob = new Blob([output]); link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); document.body.removeChild(link); } return } x.send() } //创客活动的申请表 function makerActivityWord(data,total){ let _url = "./file/附件 2:创客专项资金项目申请表(创客活动、个人创客)模板.docx"; const x = new XMLHttpRequest(); x.open("GET", _url, true); x.responseType = "blob"; x.onload = function (e) { const blob = x.response; //转成binary const reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload=function(a){ const buffer = reader.result; const binary = new Uint8Array(buffer) //创建一个PizZip实例 const zip = new PizZip(binary); // 将模板内容加载到 Docxtemplater 中 const doc = new Docxtemplater().loadZip(zip); //模板数据 let wordData = {...data,total} //处理数据 wordData['MP1'] = wordData['expenditureMothPlan'][0]; wordData['MP2'] = wordData['expenditureMothPlan'][1]; wordData['MP3'] = wordData['expenditureMothPlan'][2]; wordData['MP4'] = wordData['expenditureMothPlan'][3]; wordData['MP5'] = wordData['expenditureMothPlan'][4]; wordData['MP6'] = wordData['expenditureMothPlan'][5]; wordData['MP7'] = wordData['expenditureMothPlan'][6]; wordData['MP8'] = wordData['expenditureMothPlan'][7]; wordData['MP9'] = wordData['expenditureMothPlan'][8]; wordData['MP10'] = wordData['expenditureMothPlan'][9]; wordData['MP11'] = wordData['expenditureMothPlan'][10]; wordData['MP12'] = wordData['expenditureMothPlan'][11]; wordData['beTime'] = wordData['activityTime'][0].split(' ')[0] wordData['edTime'] = wordData['activityTime'][1].split(' ')[0] wordData['device'] = wordData['fund']['device'] wordData['Material'] = wordData['fund']['Material'] wordData['processing'] = wordData['fund']['processing'] wordData['Collaboration'] = wordData['fund']['Collaboration'] wordData['APPRAISAL'] = wordData['fund']['APPRAISAL'] wordData['entery'] = wordData['fund']['entery'] wordData['activities'] = wordData['fund']['activities'] wordData['Transaction'] = wordData['fund']['Transaction'] wordData['type'] = Boolean(wordData['type']) doc.setData(wordData); doc.render(); //获取渲染后的文本 const output = doc.getZip().generate({ type: "blob", mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document", compression: "DEFLATE", }); let link = document.createElement("a"); link.download = `附件 2:创客专项资金项目申请表(${wordData['type']?'个人创客':'创客活动'}).docx`; link.style.display = "none"; let blob = new Blob([output]); link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); document.body.removeChild(link); } return } x.send() } export{ MakerSpaceWord, getMakerSpaceWord, MakerStudentWord, ActivityWord, getWord, makerActivityWord, }