mpsCommonController.js 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603
  1. import moment from 'moment';
  2. import fs from 'fs';
  3. import { promises as fsPromises } from 'fs';
  4. import mps, { ArrYear, getDistrict } from '../../model/mps.js';
  5. import commonModel from '../../model/commonModel.js';
  6. import { globalCache } from '../../util/GlobalCache.js';
  7. import config from '../../config/index.js';
  8. import _ from 'lodash';
  9. import axios from 'axios';
  10. import { stringUtils } from '../../util/stringClass.js';
  11. import { Encrypt, Decrypt } from '../../util/crypto/index.js';
  12. import WXBizDataCrypt from '../../util/WXBizDataCrypt.js';
  13. /**
  14. * 分数线网页首页
  15. * @generator
  16. * @yields {Object} 返回渲染后的HTML页面内容
  17. * @description 读取并返回public目录下的mpsDefault.html文件内容作为响应体
  18. */
  19. export async function MPSDefault(ctx) {
  20. console.log("mpsDefault");
  21. const data = await fsPromises.readFile("./public/mpsDefault.html");
  22. ctx.body = data.toString();
  23. };
  24. /**
  25. * 分数线网页
  26. */
  27. export async function WebMPSHtml(ctx) {
  28. let cookie = ctx.cookies.get("test");
  29. if (ctx.req.headers.host == "localhost:" + config.port) {
  30. cookie = "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=";
  31. }
  32. if (cookie == "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=" ||
  33. cookie == "ckQpqDsukHN49UgwpRdoYRC7uH1hTfXvhJ71hPzgyfM=" ||
  34. cookie == "IAdzqqCJ9ixjFGemUoqrJABRsF3EpvPgnIgGYFCWOhg=") {
  35. const data = await fsPromises.readFile("./public/mg/mps.html");
  36. ctx.body = data.toString();
  37. } else {
  38. ctx.body = "<html><body>请重新<a href='https://www.kylx365.com/miaoguo'>登录</a></body></html>";
  39. }
  40. };
  41. /**
  42. * 分数线学校管理网页
  43. */
  44. export async function WebMPSSchoolHtml(ctx) {
  45. let cookie = ctx.cookies.get("test");
  46. if (ctx.req.headers.host == "localhost:" + config.port) {
  47. cookie = "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=";
  48. }
  49. if (cookie == "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=" ||
  50. cookie == "ckQpqDsukHN49UgwpRdoYRC7uH1hTfXvhJ71hPzgyfM=" ||
  51. cookie == "IAdzqqCJ9ixjFGemUoqrJABRsF3EpvPgnIgGYFCWOhg=") {
  52. const data = await fsPromises.readFile("./public/mg/mps_school.html");
  53. ctx.body = data.toString();
  54. } else {
  55. ctx.body = "<html><body>请重新<a href='https://www.kylx365.com/miaoguo'>登录</a></body></html>";
  56. }
  57. };
  58. /**
  59. * 分数线纠错网页
  60. */
  61. export async function WebMPSErrorHtml(ctx) {
  62. let cookie = ctx.cookies.get("test");
  63. if (ctx.req.headers.host == "localhost:" + config.port) {
  64. cookie = "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=";
  65. }
  66. if (cookie == "+yqoClZSJfwPPQwow7K12IboznGF059HmGsK1lpS+4Y=" ||
  67. cookie == "ckQpqDsukHN49UgwpRdoYRC7uH1hTfXvhJ71hPzgyfM=" ||
  68. cookie == "IAdzqqCJ9ixjFGemUoqrJABRsF3EpvPgnIgGYFCWOhg=") {
  69. const data = await fsPromises.readFile("./public/mg/mps_error.html");
  70. ctx.body = data.toString();
  71. } else {
  72. ctx.body = "<html><body>请重新<a href='https://www.kylx365.com/miaoguo'>登录</a></body></html>";
  73. }
  74. };
  75. export async function MPSLogin(ctx) {
  76. //console.log("LoginStart:" + new Date().getSeconds());
  77. let param = ctx.request.body;
  78. if (param.param) {
  79. const paramStr = Decrypt(param.param, config.urlSecrets.aes_key, config.urlSecrets.aes_iv);
  80. //console.log("paramStr:"+paramStr);
  81. param = JSON.parse(paramStr);
  82. }
  83. const code = param.Code;
  84. //console.log("code:"+code);
  85. const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${config.wx.mps_appid}&secret=${config.wx.mps_appsecret}&js_code=${code}&grant_type=authorization_code`;
  86. let result = await axios.get(url)
  87. .then(res => {
  88. const json = res.data;
  89. if (json && json.openid) {
  90. param.OpenID = json.openid;
  91. param.sessionKey = json.session_key;
  92. if (json.unionid) {
  93. param.UnionID = json.unionid;
  94. }
  95. return { errcode: 10000 };
  96. }
  97. return json;
  98. })
  99. .catch(err => ({ errcode: 101, errStr: err }));
  100. //console.log("OpenID:"+param.OpenID);
  101. delete param.GroupInfo;
  102. if (result.errcode === 10000) {
  103. delete param.Code;
  104. //console.log("GetUsersInfoStart:" + new Date().getSeconds());
  105. if (param.sessionKey && param.iv && param.encryptedData) {
  106. const pc = new WXBizDataCrypt(config.wx.mps_appid, param.sessionKey);
  107. const dataUnionID = pc.decryptData(param.encryptedData, param.iv);
  108. //console.log(dataUnionID);
  109. param.UnionID = dataUnionID.unionId;
  110. }
  111. delete param.sessionKey;
  112. delete param.iv;
  113. delete param.encryptedData;
  114. let userList = await mps.GetUsersInfo(param);
  115. //console.log("GetUsersInfoSuccess:" + new Date().getSeconds());
  116. if (userList.length > 0) {
  117. param.LastLoginTime = new Date();
  118. delete param.Introducer;
  119. delete param.UserSource;
  120. delete param.SourceID;
  121. delete param.NickName;
  122. delete param.AvatarUrl;
  123. await mps.UpdateUsers(param);
  124. //console.log("UpdateUsersSuccess:" + new Date().getSeconds());
  125. userList = await mps.GetUsersInfo(param);
  126. //console.log("GetUsersInfoSuccess2:" + new Date().getSeconds());
  127. } else {
  128. param.CreateTime = new Date();
  129. param.LastLoginTime = param.CreateTime;
  130. param.ProductServiceTime = param.CreateTime;
  131. await mps.AddUsers(param);
  132. //console.log("AddUsersSuccess:" + new Date().getSeconds());
  133. userList = await mps.GetUsersInfo(param);
  134. //console.log("GetUsersInfoSuccess2:" + new Date().getSeconds());
  135. }
  136. delete userList[0].OpenID;
  137. //产品支付是否显示
  138. var param2 = {
  139. ProgramID: 173,
  140. Version: param.ProgramVersion,
  141. };
  142. var result3 = await commonModel.GetProductVersionList(param2);
  143. if (result3) {
  144. if ((param2.Version == result3[0].Version && result3[0].IsShowPay <= 0)
  145. || param2.Version > result3[0].Version) {
  146. userList[0].IsShow = result3[0].IsShowPay;
  147. }
  148. else {
  149. userList[0].IsShow = 1;
  150. }
  151. if (process.env.NODE_ENV == 'development') {
  152. //userList[0].IsShow = 0;
  153. }
  154. else {
  155. var today = moment().format('YYYYMMDD');
  156. //针对微信测试用户,永远是无支付状态
  157. if ((userList[0].UserSource == '1001' && userList[0].System == "iOS 10.0.1" && userList[0].UserID > 2)
  158. || (!userList[0].UserSource && (!userList[0].LastUserSource || userList[0].LastUserSource > 10000))
  159. || userList[0].NickName.indexOf("dgztest") >= 0) {
  160. userList[0].IsShow = -1;
  161. }
  162. else if (userList[0].LastUserSource == '1012'
  163. && userList[0].IsPay == 0
  164. && userList[0].IsMember == 0
  165. && userList[0].IsApply == 0
  166. && userList[0].IsTryOut == 0
  167. && userList[0].Model == "iPhone XS MAX China-exclusive<iPhone 11,6>") {
  168. userList[0].IsShow = -1;
  169. }
  170. }
  171. }
  172. userList[0].ArrYear = ArrYear;
  173. result = { errcode: 10000, result: userList[0] };
  174. }
  175. ctx.body = result;
  176. };
  177. //得到所有区
  178. export async function GetMPSDistrict(ctx) {
  179. let param = {
  180. IsAll: ctx.query.IsAll || 0,
  181. };
  182. let result = await mps.GetMPSDistrict(param);
  183. ctx.body = { "errcode": 10000, result: result };
  184. };
  185. // 获取反馈列表
  186. export async function GetMPSFeedbackList(ctx) {
  187. let param = {
  188. UserID: ctx.query.UserID || 0,
  189. };
  190. let sql = "SELECT * FROM kylx365_db.MPS_Feedback order by Flag,ID desc limit 200;";
  191. if (param.UserID > 0)
  192. sql = "SELECT * FROM kylx365_db.MPS_Feedback where Flag=1 order by ID desc limit 100;";
  193. const list = await commonModel.RunSql({}, sql);
  194. list.forEach(item => {
  195. if (param.UserID > 0)
  196. item.CreateTime = moment(item.CreateTime).format('YYYY年MM月DD日');
  197. else
  198. item.CreateTime = moment(item.CreateTime).format('YYYY-MM-DD HH:mm:ss');
  199. if (item.ProgramID == 173)
  200. item.ProgramName = "分数线";
  201. else if (item.ProgramID == 186)
  202. item.ProgramName = "语境";
  203. });
  204. ctx.body = { "errcode": 10000, result: list };
  205. }
  206. export async function MPSFeedback(ctx) {
  207. let param = ctx.request.body;
  208. param.CreateTime = moment().format('YYYY-MM-DD HH:mm:ss');
  209. if (!param.ProgramID)
  210. param.ProgramID = 173;
  211. await mps.AddFeedback(param);
  212. ctx.body = { errcode: 10000 };
  213. }
  214. // 订阅消息
  215. export async function SubscribeMessage(ctx) {
  216. const param = {
  217. UserID: ctx.query.UserID || 0,
  218. IsMessage: 1,
  219. };
  220. await mps.UpdateUsersByUserID(param);
  221. ctx.body = { errcode: 10000, result: 1 };
  222. }
  223. // 获取祝福语
  224. export async function GetMPSWish(ctx) {
  225. const param = {
  226. WishType: ctx.query.WishType || "all",
  227. UserID: ctx.query.UserID || 0,
  228. SchoolID: ctx.query.SchoolID || 0,
  229. ID: ctx.query.ID || 0,
  230. };
  231. const functionName = "GetMPSWish?WishType=all";
  232. let result = 0;
  233. if (param.WishType == "all")
  234. result = globalCache.get(functionName);
  235. if (result == 0) {
  236. let list = await mps.GetMPSWish(param);
  237. let num = 1;
  238. if (param.WishType === "all") {
  239. num = 5;
  240. list = _.shuffle(list);
  241. } else if (param.WishType === "school") {
  242. num = 3;
  243. } else if (param.WishType === "schoolAll") {
  244. num = list.length;
  245. }
  246. let arr = [];
  247. for (let i = 0; i < num; i++) {
  248. if (list[i]) {
  249. arr.push(buildWish(list[i], param.WishType));
  250. }
  251. }
  252. if (param.WishType === "school" && list.length > 0) {
  253. list[0].RowCount = list.length;
  254. }
  255. result = arr;
  256. if (param.WishType == "all") {
  257. globalCache.set(functionName, result, config.BufferMemoryTimeLowNormal);
  258. console.log("缓存");
  259. }
  260. }
  261. ctx.body = { errcode: 10000, result: result };
  262. }
  263. // 更新反馈状态
  264. export async function UpdateMPSFeedback(ctx) {
  265. const param = {
  266. ID: ctx.query.ID || 0,
  267. Flag: ctx.query.Flag || 0,
  268. };
  269. param.UpdateTime = moment().format('YYYY-MM-DD HH:mm:ss');
  270. await mps.UpdateMPSFeedback(param);
  271. ctx.body = { errcode: 10000 };
  272. }
  273. // 生成二维码
  274. export async function BuildMPSQRCode(ctx) {
  275. const param = {
  276. BuildType: ctx.query.BuildType || "Article",
  277. ID: ctx.query.ID || 0,
  278. };
  279. const url = `https://api.weixin.qq.com/cgi-bin/token?appid=${config.wx.mps_appid}&secret=${config.wx.mps_appsecret}&grant_type=client_credential`;
  280. const result = await axios.get(url)
  281. .then(res => {
  282. const json = res.data;
  283. if (json && json.access_token) {
  284. param.access_token = json.access_token;
  285. return { errcode: 10000 };
  286. }
  287. return json;
  288. })
  289. .catch(err => ({ errcode: 101, errStr: err }));
  290. const wxUrl = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${param.access_token}`;
  291. const path = './public/images/acode/';
  292. let imageUrl = '';
  293. const postJSON = {};
  294. if (param.BuildType === "Article") {
  295. postJSON.width = 280;
  296. postJSON.scene = `type=article&ID=${param.ID}`;
  297. imageUrl = `ScoreLineArticle_${param.ID - 173}.png`;
  298. } else if (param.BuildType === "Web") {
  299. postJSON.width = 280;
  300. postJSON.scene = `type=web&ID=${param.ID}`;
  301. imageUrl = 'MPS_WebQRCode.png';
  302. }
  303. // 使用axios的流式响应处理
  304. const response = await axios.post(wxUrl, postJSON, {
  305. responseType: 'stream'
  306. });
  307. // 创建写入流并处理
  308. const writer = fs.createWriteStream(path + imageUrl);
  309. response.data.pipe(writer);
  310. await new Promise((resolve, reject) => {
  311. writer.on('finish', resolve);
  312. writer.on('error', reject);
  313. });
  314. ctx.body = { "errcode": 10000 };
  315. }
  316. // 更新祝福语点赞数
  317. export async function UpdateMPSWishLikeNum(ctx) {
  318. const param = {
  319. ID: ctx.query.ID || 0,
  320. LikeNumAdd: ctx.query.LikeNumAdd || 0,
  321. };
  322. await mps.UpdateMPSWishLikeNum(param);
  323. ctx.body = { errcode: 10000 };
  324. }
  325. // 获取通知
  326. export async function GetMPSNotice(ctx) {
  327. const result = { IsShow: false };
  328. const updateTimeList = await commonModel.GetDataUpdateStatus();
  329. const updateTime = moment(updateTimeList[8].UpdateTime).format('YYYY.MM.DD HH:mm:ss');
  330. const today = moment().format('YYYY.MM.DD HH:mm:ss');
  331. if (today < updateTime) {
  332. result.IsShow = true;
  333. result.Title = "更新通知";
  334. const content = [
  335. "2026年上海中考招生目前完成名额到区、名额到校、1-15志愿的分数线输入工作。若有问题,欢迎反馈,我们会及时做出修正。请将信息分享给身边的家长朋友们。非常谢谢您的支持!",
  336. //"2026年上海中考招生计划已经全部整理完毕,包括各区各校的自主招生、名额到区、名额到校、1-15志愿等数据。请将信息分享给身边的家长朋友们。非常谢谢您的支持!",
  337. //"今年夏天要读的书,必须是《录取通知书》,祝孩子们中考考出最优成绩!",
  338. //"最新的上海16区统一招生1-15志愿各校计划整理完毕,欢迎查看!"
  339. ];
  340. let rand=stringUtils.Random(0,content.length-1);
  341. result.Content=content[rand];
  342. // const content = [
  343. // "向您推荐团队新作「语境背单词」小程序,通过阅读理解+选择题,帮孩子高效记忆单词、灵活运用考点,为初高中生设计,欢迎体验!",
  344. // ];
  345. // result.Content = content[0];
  346. // //有按钮的情况
  347. // result.ButtonTitle = "语境背单词";
  348. // result.ButtonIcon = "icon_fold_05";
  349. // result.BottonClick = "gotoMiniprogram";
  350. }
  351. ctx.body = { errcode: 10000, result };
  352. }
  353. // 获取文章
  354. export async function GetMPSArticle(ctx) {
  355. let articles = [
  356. {
  357. ID: 27,
  358. Category: "2026",
  359. IsPageShow: 1,
  360. Logo: "icon_sys_02.png",
  361. Title: "2026新开17所高中介绍(黄埔、徐汇、静安、普陀、闵行……)",
  362. TitleShort: "2026上海新开17所高中介绍",
  363. TitleImage: "doc_2700.png",
  364. Content: [{
  365. Name: "doc_2701.png"
  366. },
  367. {
  368. Name: "doc_2702.png",
  369. Fun: "goto",
  370. Url: "school?ID=1021"
  371. },
  372. {
  373. Name: "doc_2703.png",
  374. Fun: "goto",
  375. Url: "school?ID=1022"
  376. },
  377. {
  378. Name: "doc_2704.png",
  379. Fun: "goto",
  380. Url: "school?ID=1023"
  381. },
  382. {
  383. Name: "doc_2705.png",
  384. Fun: "goto",
  385. Url: "school?ID=1024"
  386. },
  387. {
  388. Name: "doc_2706.png",
  389. Fun: "goto",
  390. Url: "school?ID=1025"
  391. },
  392. {
  393. Name: "doc_2707.png",
  394. Fun: "goto",
  395. Url: "school?ID=1026"
  396. },
  397. {
  398. Name: "doc_2708.png",
  399. Fun: "goto",
  400. Url: "school?ID=1028"
  401. },
  402. {
  403. Name: "doc_2709.png",
  404. Fun: "goto",
  405. Url: "school?ID=1030"
  406. },
  407. {
  408. Name: "doc_2710.png",
  409. Fun: "goto",
  410. Url: "school?ID=1029"
  411. },
  412. {
  413. Name: "doc_2711.png",
  414. Fun: "goto",
  415. Url: "school?ID=1031"
  416. },
  417. {
  418. Name: "doc_2712.png",
  419. Fun: "goto",
  420. Url: "school?ID=1032"
  421. },
  422. {
  423. Name: "doc_2713.png",
  424. Fun: "goto",
  425. Url: "school?ID=1033"
  426. },
  427. {
  428. Name: "doc_2714.png",
  429. Fun: "goto",
  430. Url: "school?ID=1034"
  431. },
  432. {
  433. Name: "doc_2715.png",
  434. Fun: "goto",
  435. Url: "school?ID=1035"
  436. },
  437. {
  438. Name: "doc_2716.png",
  439. Fun: "goto",
  440. Url: "school?ID=1036"
  441. },
  442. {
  443. Name: "doc_2717.png",
  444. Fun: "goto",
  445. Url: "school?ID=1037"
  446. },
  447. {
  448. Name: "doc_2718.png",
  449. Fun: "goto",
  450. Url: "school?ID=1039"
  451. },
  452. {
  453. Name: "doc_2719.png",
  454. Fun: "goto",
  455. Url: "search"
  456. }
  457. ]
  458. },
  459. {
  460. ID: 26,
  461. Category: "2025",
  462. IsPageShow: 1,
  463. Logo: "icon_sys_02.png",
  464. Title: "2025年国际课程班和中外合作办学自主招生计划情况",
  465. TitleShort: "2025上海国际班中考自招信息",
  466. TitleImage: "doc_2600.png",
  467. Content: [{
  468. Name: "doc_2601.png"
  469. },
  470. {
  471. Name: "doc_2602.png"
  472. },
  473. {
  474. Name: "doc_2603.png",
  475. Fun: "showImage",
  476. Url: "post_26.png"
  477. },
  478. {
  479. Name: "doc_2604.png"
  480. },
  481. {
  482. Name: "doc_2605.png"
  483. },
  484. {
  485. Name: "doc_2606.png"
  486. }
  487. ]
  488. },
  489. {
  490. ID: 25,
  491. Category: "2025",
  492. IsPageShow: 1,
  493. Logo: "icon_sys_02.png",
  494. Title: "2025年20所市特色普通高中自主招生情况",
  495. TitleShort: "2025上海特色高中自招信息",
  496. TitleImage: "doc_2500.png",
  497. Content: [{
  498. Name: "doc_2501.png"
  499. }, {
  500. Name: "doc_2502.png",
  501. Fun: "showImage",
  502. Url: "post_25.png"
  503. }, {
  504. Name: "doc_2503.png",
  505. Fun: "goto",
  506. Url: "school?ID=82"
  507. }, {
  508. Name: "doc_2504.png",
  509. Fun: "goto",
  510. Url: "school?ID=94"
  511. }, {
  512. Name: "doc_2505.png",
  513. Fun: "goto",
  514. Url: "school?ID=100"
  515. }, {
  516. Name: "doc_2506.png",
  517. Fun: "goto",
  518. Url: "school?ID=114"
  519. }, {
  520. Name: "doc_2507.png",
  521. Fun: "goto",
  522. Url: "school?ID=115"
  523. }, {
  524. Name: "doc_2508.png",
  525. Fun: "goto",
  526. Url: "school?ID=116"
  527. }, {
  528. Name: "doc_2509.png",
  529. Fun: "goto",
  530. Url: "school?ID=117"
  531. }, {
  532. Name: "doc_2510.png",
  533. Fun: "goto",
  534. Url: "school?ID=132"
  535. }, {
  536. Name: "doc_2511.png",
  537. Fun: "goto",
  538. Url: "school?ID=143"
  539. }, {
  540. Name: "doc_2512.png",
  541. Fun: "goto",
  542. Url: "school?ID=167"
  543. }, {
  544. Name: "doc_2513.png",
  545. Fun: "goto",
  546. Url: "school?ID=181"
  547. }, {
  548. Name: "doc_2514.png",
  549. Fun: "goto",
  550. Url: "school?ID=192"
  551. }, {
  552. Name: "doc_2515.png",
  553. Fun: "goto",
  554. Url: "school?ID=193"
  555. }, {
  556. Name: "doc_2516.png",
  557. Fun: "goto",
  558. Url: "school?ID=194"
  559. }, {
  560. Name: "doc_2517.png",
  561. Fun: "goto",
  562. Url: "school?ID=239"
  563. }, {
  564. Name: "doc_2518.png",
  565. Fun: "goto",
  566. Url: "school?ID=241"
  567. }, {
  568. Name: "doc_2519.png",
  569. Fun: "goto",
  570. Url: "school?ID=268"
  571. }, {
  572. Name: "doc_2520.png",
  573. Fun: "goto",
  574. Url: "school?ID=91"
  575. }, {
  576. Name: "doc_2521.png",
  577. Fun: "goto",
  578. Url: "school?ID=256"
  579. }, {
  580. Name: "doc_2522.png",
  581. Fun: "goto",
  582. Url: "school?ID=261"
  583. }, {
  584. Name: "doc_2523.png",
  585. Fun: "goto",
  586. Url: "search"
  587. }, {
  588. Name: "doc_2524.png",
  589. }, {
  590. Name: "doc_2525.png",
  591. },
  592. ]
  593. },
  594. {
  595. ID: 24,
  596. Category: "2025",
  597. IsPageShow: 1,
  598. Logo: "icon_sys_02.png",
  599. Title: "2025年市级艺术骨干学生招收学校和项目",
  600. TitleShort: "2025上海艺术骨干生中招信息",
  601. TitleImage: "doc_2400.png",
  602. Content: [{
  603. Name: "doc_2401.png"
  604. }, {
  605. Name: "doc_2402.png",
  606. }, {
  607. Name: "doc_2403.png",
  608. Fun: "showImage",
  609. Url: "post_24.png"
  610. },
  611. ]
  612. },
  613. {
  614. ID: 23,
  615. Category: "2025",
  616. IsPageShow: 1,
  617. Logo: "icon_sys_02.png",
  618. Title: "2025年市级优秀体育学生招收学校和项目",
  619. TitleShort: "2025上海优秀体育生中招信息",
  620. TitleImage: "doc_2300.png",
  621. Content: [{
  622. Name: "doc_2301.png"
  623. }, {
  624. Name: "doc_2302.png",
  625. }, {
  626. Name: "doc_2303.png",
  627. Fun: "showImage",
  628. Url: "post_23.png"
  629. },
  630. ]
  631. },
  632. {
  633. ID: 22,
  634. Category: "2025",
  635. IsPageShow: 1,
  636. Logo: "icon_sys_02.png",
  637. Title: "2025年徐汇、普陀、虹口、闵行、嘉定、浦东、松江新增11所高中介绍",
  638. TitleShort: "2025上海新增11所高中介绍",
  639. TitleImage: "doc_2200.png",
  640. Content: [{
  641. Name: "doc_2201.png"
  642. }, {
  643. Name: "doc_2202.png",
  644. Fun: "goto",
  645. Url: "school?ID=985"
  646. }, {
  647. Name: "doc_2203.png",
  648. Fun: "goto",
  649. Url: "school?ID=986"
  650. }, {
  651. Name: "doc_2204.png",
  652. Fun: "goto",
  653. Url: "school?ID=124"
  654. }, {
  655. Name: "doc_2205.png",
  656. Fun: "goto",
  657. Url: "school?ID=127"
  658. }, {
  659. Name: "doc_2206.png",
  660. Fun: "goto",
  661. Url: "school?ID=989"
  662. }, {
  663. Name: "doc_2207.png",
  664. Fun: "goto",
  665. Url: "school?ID=990"
  666. }, {
  667. Name: "doc_2208.png",
  668. Fun: "goto",
  669. Url: "school?ID=991"
  670. }, {
  671. Name: "doc_2209.png",
  672. Fun: "goto",
  673. Url: "school?ID=992"
  674. }, {
  675. Name: "doc_2210.png",
  676. Fun: "goto",
  677. Url: "school?ID=993"
  678. }, {
  679. Name: "doc_2211.png",
  680. Fun: "goto",
  681. Url: "school?ID=994"
  682. }, {
  683. Name: "doc_2212.png",
  684. Fun: "goto",
  685. Url: "school?ID=995"
  686. }, {
  687. Name: "doc_2213.png",
  688. Fun: "goto",
  689. Url: "search"
  690. },
  691. ]
  692. },
  693. {
  694. ID: 20,
  695. Category: "2024",
  696. IsPageShow: 1,
  697. Logo: "icon_sys_02.png",
  698. Title: "2024年国际课程班和中外合作办学自主招生计划情况",
  699. TitleShort: "2024上海国际班中考自招信息",
  700. TitleImage: "doc_2000.png",
  701. Content: [{
  702. Name: "doc_2001.png"
  703. },
  704. {
  705. Name: "doc_2002.png"
  706. },
  707. {
  708. Name: "doc_2003.png",
  709. Fun: "showImage",
  710. Url: "post_2001.png"
  711. },
  712. {
  713. Name: "doc_2004.png"
  714. },
  715. {
  716. Name: "doc_2005.png"
  717. },
  718. {
  719. Name: "doc_2006.png"
  720. }
  721. ]
  722. },
  723. {
  724. ID: 19,
  725. Category: "2024",
  726. IsPageShow: 1,
  727. Logo: "icon_sys_02.png",
  728. Title: "2024年市级艺术骨干学生招收学校和项目",
  729. TitleShort: "2024上海艺术骨干生中招信息",
  730. TitleImage: "doc_1900.png",
  731. Content: [{
  732. Name: "doc_1901.png"
  733. },
  734. {
  735. Name: "doc_1902.png"
  736. },
  737. {
  738. Name: "doc_1903.png",
  739. Fun: "showImage",
  740. Url: "post_1901.png"
  741. },
  742. {
  743. Name: "doc_1904.png"
  744. },
  745. {
  746. Name: "doc_1905.png",
  747. Fun: "showImage",
  748. Url: "post_1902.png"
  749. }
  750. ]
  751. },
  752. {
  753. ID: 18,
  754. Category: "2024",
  755. IsPageShow: 1,
  756. Logo: "icon_sys_02.png",
  757. Title: "2024年市级优秀体育学生招收学校和项目",
  758. TitleShort: "2024上海优秀体育生中招信息",
  759. TitleImage: "doc_1800.png",
  760. Content: [{
  761. Name: "doc_1801.png"
  762. },
  763. {
  764. Name: "doc_1802.png"
  765. },
  766. {
  767. Name: "doc_1803.png",
  768. Fun: "showImage",
  769. Url: "post_1801.png"
  770. },
  771. {
  772. Name: "doc_1804.png"
  773. },
  774. {
  775. Name: "doc_1805.png"
  776. }
  777. ]
  778. },
  779. {
  780. ID: 17,
  781. Category: "2024",
  782. IsPageShow: 0,
  783. Logo: "icon_sys_02.png",
  784. Title: "2024年市特色普通高中自主招生情况",
  785. TitleShort: "2024上海特色高中自招信息",
  786. TitleImage: "doc_1700.png",
  787. Content: [{
  788. Name: "doc_1701.png"
  789. },
  790. {
  791. Name: "doc_1702.png",
  792. Fun: "showImage",
  793. Url: "post_1701.png"
  794. },
  795. {
  796. Name: "doc_1703.png",
  797. Fun: "goto",
  798. Url: "school?ID=82"
  799. },
  800. {
  801. Name: "doc_1704.png",
  802. Fun: "goto",
  803. Url: "school?ID=94"
  804. },
  805. {
  806. Name: "doc_1705.png",
  807. Fun: "goto",
  808. Url: "school?ID=100"
  809. },
  810. {
  811. Name: "doc_1706.png",
  812. Fun: "goto",
  813. Url: "school?ID=114"
  814. },
  815. {
  816. Name: "doc_1707.png",
  817. Fun: "goto",
  818. Url: "school?ID=115"
  819. },
  820. {
  821. Name: "doc_1708.png",
  822. Fun: "goto",
  823. Url: "school?ID=116"
  824. },
  825. {
  826. Name: "doc_1709.png",
  827. Fun: "goto",
  828. Url: "school?ID=117"
  829. },
  830. {
  831. Name: "doc_1710.png",
  832. Fun: "goto",
  833. Url: "school?ID=132"
  834. },
  835. {
  836. Name: "doc_1711.png",
  837. Fun: "goto",
  838. Url: "school?ID=143"
  839. },
  840. {
  841. Name: "doc_1712.png",
  842. Fun: "goto",
  843. Url: "school?ID=167"
  844. },
  845. {
  846. Name: "doc_1713.png",
  847. Fun: "goto",
  848. Url: "school?ID=181"
  849. },
  850. {
  851. Name: "doc_1714.png",
  852. Fun: "goto",
  853. Url: "school?ID=192"
  854. },
  855. {
  856. Name: "doc_1715.png",
  857. Fun: "goto",
  858. Url: "school?ID=193"
  859. },
  860. {
  861. Name: "doc_1716.png",
  862. Fun: "goto",
  863. Url: "school?ID=194"
  864. },
  865. {
  866. Name: "doc_1717.png",
  867. Fun: "goto",
  868. Url: "school?ID=239"
  869. },
  870. {
  871. Name: "doc_1718.png",
  872. Fun: "goto",
  873. Url: "school?ID=241"
  874. },
  875. {
  876. Name: "doc_1719.png",
  877. Fun: "goto",
  878. Url: "school?ID=268"
  879. },
  880. {
  881. Name: "doc_1720.png",
  882. Fun: "goto",
  883. Url: "school?ID=91"
  884. },
  885. {
  886. Name: "doc_1721.png",
  887. Fun: "goto",
  888. Url: "school?ID=256"
  889. },
  890. {
  891. Name: "doc_1722.png",
  892. Fun: "goto",
  893. Url: "search"
  894. },
  895. {
  896. Name: "doc_1723.png"
  897. },
  898. {
  899. Name: "doc_1724.png"
  900. },
  901. ]
  902. },
  903. {
  904. ID: 10,
  905. Category: "2024",
  906. IsPageShow: 0,
  907. Logo: "icon_sys_02.png",
  908. Title: "2024年闵行、宝山、浦东、松江、青浦新增15所高中介绍",
  909. TitleShort: "2024上海新增15所高中情况",
  910. TitleImage: "doc_1000.png",
  911. Content: [{
  912. Name: "doc_1001.png"
  913. },
  914. {
  915. Name: "doc_1002.png",
  916. Fun: "goto",
  917. Url: "school?ID=849"
  918. },
  919. {
  920. Name: "doc_1003.png",
  921. Fun: "goto",
  922. Url: "school?ID=850"
  923. },
  924. {
  925. Name: "doc_1004.png",
  926. Fun: "goto",
  927. Url: "school?ID=851"
  928. },
  929. {
  930. Name: "doc_1005.png",
  931. Fun: "goto",
  932. Url: "school?ID=852"
  933. },
  934. {
  935. Name: "doc_1006.png",
  936. Fun: "goto",
  937. Url: "school?ID=853"
  938. },
  939. {
  940. Name: "doc_1007.png",
  941. Fun: "goto",
  942. Url: "school?ID=854"
  943. },
  944. {
  945. Name: "doc_1008.png",
  946. Fun: "goto",
  947. Url: "school?ID=855"
  948. },
  949. {
  950. Name: "doc_1009.png",
  951. Fun: "goto",
  952. Url: "school?ID=856"
  953. },
  954. {
  955. Name: "doc_1010.png",
  956. Fun: "goto",
  957. Url: "school?ID=857"
  958. },
  959. {
  960. Name: "doc_1011.png",
  961. Fun: "goto",
  962. Url: "school?ID=858"
  963. },
  964. {
  965. Name: "doc_1012.png",
  966. Fun: "goto",
  967. Url: "school?ID=859"
  968. },
  969. {
  970. Name: "doc_1013.png",
  971. Fun: "goto",
  972. Url: "school?ID=860"
  973. },
  974. {
  975. Name: "doc_1014.png",
  976. Fun: "goto",
  977. Url: "school?ID=861"
  978. },
  979. {
  980. Name: "doc_1015.png",
  981. Fun: "goto",
  982. Url: "school?ID=862"
  983. },
  984. {
  985. Name: "doc_1016.png",
  986. Fun: "goto",
  987. Url: "school?ID=863"
  988. },
  989. {
  990. Name: "doc_1017.png",
  991. Fun: "goto",
  992. Url: "search"
  993. },
  994. ]
  995. },
  996. {
  997. ID: 6,
  998. Category: "小知识",
  999. IsPageShow: 1,
  1000. Logo: "icon_sys_01.png",
  1001. Title: "中考有哪些科目,分数如何分配",
  1002. TitleShort: "上海中考科目和分值设置",
  1003. TitleImage: "doc_0600.png",
  1004. Content: [{
  1005. Name: "doc_0601.png"
  1006. },
  1007. {
  1008. Name: "doc_0602.png",
  1009. Fun: "showImage",
  1010. Url: "post_0601.png"
  1011. },
  1012. {
  1013. Name: "doc_0603.png"
  1014. },
  1015. {
  1016. Name: "doc_0604.png"
  1017. }
  1018. ]
  1019. },
  1020. {
  1021. ID: 11,
  1022. Category: "小知识",
  1023. IsPageShow: 1,
  1024. Logo: "icon_sys_01.png",
  1025. Title: "图说上海市中招志愿类别和招生录取批次",
  1026. TitleShort: "上海中招志愿类别和录取流程",
  1027. Content: [{
  1028. Name: "doc_1101.png"
  1029. },
  1030. {
  1031. Name: "doc_1102.png"
  1032. },
  1033. {
  1034. Name: "doc_1103.png",
  1035. Fun: "showImage",
  1036. Url: "post_1101.png"
  1037. },
  1038. {
  1039. Name: "doc_1104.png"
  1040. },
  1041. {
  1042. Name: "doc_1105.png",
  1043. Fun: "showImage",
  1044. Url: "post_1102.png"
  1045. }
  1046. ]
  1047. },
  1048. {
  1049. ID: 8,
  1050. Category: "小知识",
  1051. IsPageShow: 1,
  1052. Logo: "icon_sys_01.png",
  1053. Title: "各区教育局官方网站、公众号汇总",
  1054. TitleShort: "上海各区中考招生官网汇总",
  1055. TitleImage: "doc_0800.png",
  1056. Content: [{
  1057. Name: "doc_0801.png"
  1058. },
  1059. {
  1060. Name: "doc_0802.png",
  1061. Fun: "showImage",
  1062. Url: "post_0801.png"
  1063. },
  1064. {
  1065. Name: "doc_0803.png",
  1066. Fun: "showImage",
  1067. Url: "post_0801.png"
  1068. }
  1069. ]
  1070. },
  1071. {
  1072. ID: 1,
  1073. Category: "小知识",
  1074. IsPageShow: 0,
  1075. Logo: "icon_sys_01.png",
  1076. Title: "高中阶段可以报考哪些类型的学校",
  1077. TitleShort: "上海中考报考学校类型",
  1078. Content: [{
  1079. Name: "doc_0101.png"
  1080. },
  1081. {
  1082. Name: "doc_0102.png"
  1083. },
  1084. {
  1085. Name: "doc_0103.png",
  1086. },
  1087. {
  1088. Name: "doc_0104.png",
  1089. Fun: "reLaunch",
  1090. Url: "default"
  1091. },
  1092. {
  1093. Name: "doc_0105.png"
  1094. }
  1095. ]
  1096. },
  1097. {
  1098. ID: 13,
  1099. Category: "小知识",
  1100. IsPageShow: 0,
  1101. Logo: "icon_sys_01.png",
  1102. Title: "自主招生有哪几种",
  1103. TitleShort: "上海中考自主招生介绍",
  1104. Content: [{
  1105. Name: "doc_1301.png"
  1106. },
  1107. {
  1108. Name: "doc_1302.png"
  1109. },
  1110. {
  1111. Name: "doc_1303.png",
  1112. Fun: "reLaunch",
  1113. Url: "default"
  1114. },
  1115. {
  1116. Name: "doc_1304.png",
  1117. },
  1118. {
  1119. Name: "doc_1305.png",
  1120. },
  1121. {
  1122. Name: "doc_1306.png"
  1123. }
  1124. ]
  1125. },
  1126. {
  1127. ID: 14,
  1128. Category: "小知识",
  1129. IsPageShow: 0,
  1130. Logo: "icon_sys_01.png",
  1131. Title: "什么是名额分配综合评价录取志愿",
  1132. TitleShort: "上海中考名额分配介绍",
  1133. Content: [{
  1134. Name: "doc_1401.png"
  1135. },
  1136. {
  1137. Name: "doc_1402.png"
  1138. },
  1139. {
  1140. Name: "doc_1403.png",
  1141. },
  1142. {
  1143. Name: "doc_1404.png",
  1144. }
  1145. ]
  1146. },
  1147. {
  1148. ID: 15,
  1149. Category: "小知识",
  1150. IsPageShow: 0,
  1151. Logo: "icon_sys_01.png",
  1152. Title: "什么是统一招生录取志愿",
  1153. TitleShort: "上海中考统一招生介绍",
  1154. Content: [{
  1155. Name: "doc_1501.png"
  1156. },
  1157. {
  1158. Name: "doc_1502.png"
  1159. }
  1160. ]
  1161. },
  1162. {
  1163. ID: 12,
  1164. Category: "小知识",
  1165. IsPageShow: 0,
  1166. Logo: "icon_sys_01.png",
  1167. Title: "招生代码怎么用",
  1168. TitleShort: "上海中考招生代码介绍",
  1169. Content: [{
  1170. Name: "doc_1201.png"
  1171. },
  1172. {
  1173. Name: "doc_1202.png"
  1174. }
  1175. ]
  1176. },
  1177. {
  1178. ID: 7,
  1179. Category: "小知识",
  1180. IsPageShow: 0,
  1181. Logo: "icon_sys_01.png",
  1182. Title: "政策性照顾加分和同分优待情况",
  1183. TitleShort: "上海中考加分优待信息",
  1184. TitleImage: "doc_0700.png",
  1185. Content: [{
  1186. Name: "doc_0701.png"
  1187. },
  1188. {
  1189. Name: "doc_0702.png"
  1190. },
  1191. {
  1192. Name: "doc_0703.png",
  1193. Fun: "showImage",
  1194. Url: "post_0701.png"
  1195. },
  1196. {
  1197. Name: "doc_0704.png"
  1198. }
  1199. ]
  1200. },
  1201. {
  1202. ID: 16,
  1203. Category: "小知识",
  1204. IsPageShow: 0,
  1205. Logo: "icon_sys_01.png",
  1206. Title: "末位同分时怎么处理",
  1207. TitleShort: "上海中考末位同分介绍",
  1208. Content: [{
  1209. Name: "doc_1601.png"
  1210. },
  1211. {
  1212. Name: "doc_1602.png"
  1213. },
  1214. {
  1215. Name: "doc_1603.png"
  1216. }
  1217. ]
  1218. },
  1219. {
  1220. ID: 9,
  1221. Category: "小知识",
  1222. IsPageShow: 0,
  1223. Logo: "icon_sys_01.png",
  1224. Title: "招生志愿信息样表长什么样",
  1225. TitleShort: "上海中招录取志愿样表",
  1226. Content: [{
  1227. Name: "doc_0901.png"
  1228. },
  1229. {
  1230. Name: "doc_0902.png",
  1231. Fun: "showImage",
  1232. Url: "post_0901.png"
  1233. },
  1234. ]
  1235. },
  1236. {
  1237. ID: 2,
  1238. Category: "2023",
  1239. IsPageShow: 1,
  1240. Logo: "icon_sys_02.png",
  1241. Title: "2023年19所市特色普通高中自主招生情况",
  1242. TitleShort: "2023上海特色高中自招信息",
  1243. TitleImage: "doc_0200.png",
  1244. Content: [{
  1245. Name: "doc_0201.png"
  1246. },
  1247. {
  1248. Name: "doc_0202.png",
  1249. Fun: "showImage",
  1250. Url: "post_0201.png"
  1251. },
  1252. {
  1253. Name: "doc_0203.png",
  1254. Fun: "goto",
  1255. Url: "school?ID=82"
  1256. },
  1257. {
  1258. Name: "doc_0204.png",
  1259. Fun: "goto",
  1260. Url: "school?ID=94"
  1261. },
  1262. {
  1263. Name: "doc_0205.png",
  1264. Fun: "goto",
  1265. Url: "school?ID=100"
  1266. },
  1267. {
  1268. Name: "doc_0206.png",
  1269. Fun: "goto",
  1270. Url: "school?ID=114"
  1271. },
  1272. {
  1273. Name: "doc_0207.png",
  1274. Fun: "goto",
  1275. Url: "school?ID=115"
  1276. },
  1277. {
  1278. Name: "doc_0208.png",
  1279. Fun: "goto",
  1280. Url: "school?ID=116"
  1281. },
  1282. {
  1283. Name: "doc_0209.png",
  1284. Fun: "goto",
  1285. Url: "school?ID=117"
  1286. },
  1287. {
  1288. Name: "doc_0210.png",
  1289. Fun: "goto",
  1290. Url: "school?ID=132"
  1291. },
  1292. {
  1293. Name: "doc_0211.png",
  1294. Fun: "goto",
  1295. Url: "school?ID=143"
  1296. },
  1297. {
  1298. Name: "doc_0212.png",
  1299. Fun: "goto",
  1300. Url: "school?ID=167"
  1301. },
  1302. {
  1303. Name: "doc_0213.png",
  1304. Fun: "goto",
  1305. Url: "school?ID=181"
  1306. },
  1307. {
  1308. Name: "doc_0214.png",
  1309. Fun: "goto",
  1310. Url: "school?ID=192"
  1311. },
  1312. {
  1313. Name: "doc_0215.png",
  1314. Fun: "goto",
  1315. Url: "school?ID=193"
  1316. },
  1317. {
  1318. Name: "doc_0216.png",
  1319. Fun: "goto",
  1320. Url: "school?ID=194"
  1321. },
  1322. {
  1323. Name: "doc_0217.png",
  1324. Fun: "goto",
  1325. Url: "school?ID=239"
  1326. },
  1327. {
  1328. Name: "doc_0218.png",
  1329. Fun: "goto",
  1330. Url: "school?ID=241"
  1331. },
  1332. {
  1333. Name: "doc_0219.png",
  1334. Fun: "goto",
  1335. Url: "school?ID=268"
  1336. },
  1337. {
  1338. Name: "doc_0220.png",
  1339. Fun: "goto",
  1340. Url: "school?ID=91"
  1341. },
  1342. {
  1343. Name: "doc_0221.png",
  1344. Fun: "goto",
  1345. Url: "school?ID=256"
  1346. },
  1347. {
  1348. Name: "doc_0222.png",
  1349. Fun: "goto",
  1350. Url: "search"
  1351. },
  1352. {
  1353. Name: "doc_0223.png"
  1354. },
  1355. {
  1356. Name: "doc_0224.png"
  1357. },
  1358. ]
  1359. },
  1360. {
  1361. ID: 3,
  1362. Category: "2023",
  1363. IsPageShow: 1,
  1364. Logo: "icon_sys_02.png",
  1365. Title: "2023年体育“一条龙”市级优秀体育学生招收学校和项目",
  1366. TitleShort: "2023上海优秀体育生中招信息",
  1367. TitleImage: "doc_0300.png",
  1368. Content: [{
  1369. Name: "doc_0301.png"
  1370. },
  1371. {
  1372. Name: "doc_0302.png"
  1373. },
  1374. {
  1375. Name: "doc_0303.png",
  1376. Fun: "showImage",
  1377. Url: "post_0301.png"
  1378. },
  1379. {
  1380. Name: "doc_0304.png"
  1381. },
  1382. {
  1383. Name: "doc_0305.png"
  1384. }
  1385. ]
  1386. },
  1387. {
  1388. ID: 4,
  1389. Category: "2023",
  1390. IsPageShow: 1,
  1391. Logo: "icon_sys_02.png",
  1392. Title: "2023年艺术“一条龙”市级艺术骨干学生招收学校、项目和艺术团汇总",
  1393. TitleShort: "2023上海艺术骨干生中招信息",
  1394. TitleImage: "doc_0400.png",
  1395. Content: [{
  1396. Name: "doc_0401.png"
  1397. },
  1398. {
  1399. Name: "doc_0402.png"
  1400. },
  1401. {
  1402. Name: "doc_0403.png",
  1403. Fun: "showImage",
  1404. Url: "post_0401.png"
  1405. },
  1406. {
  1407. Name: "doc_0404.png"
  1408. },
  1409. {
  1410. Name: "doc_0405.png",
  1411. Fun: "showImage",
  1412. Url: "post_0402.png"
  1413. }
  1414. ]
  1415. },
  1416. {
  1417. ID: 5,
  1418. Category: "2023",
  1419. IsPageShow: 0,
  1420. Logo: "icon_sys_02.png",
  1421. Title: "2023年国际课程班和中外合作办学自主招生计划情况",
  1422. TitleShort: "2023上海国际班中考自招信息",
  1423. TitleImage: "doc_0500.png",
  1424. Content: [{
  1425. Name: "doc_0501.png"
  1426. },
  1427. {
  1428. Name: "doc_0502.png"
  1429. },
  1430. {
  1431. Name: "doc_0503.png",
  1432. Fun: "showImage",
  1433. Url: "post_0501.png"
  1434. },
  1435. {
  1436. Name: "doc_0504.png"
  1437. },
  1438. {
  1439. Name: "doc_0505.png"
  1440. },
  1441. {
  1442. Name: "doc_0506.png"
  1443. }
  1444. ]
  1445. },
  1446. ];
  1447. ctx.body = { errcode: 10000, result: articles };
  1448. }
  1449. // 更新用户昵称和头像
  1450. export async function UpdateMPSUserNickNameAndAvatar(ctx) {
  1451. const param = ctx.request.body;
  1452. param.UserID = ctx.query.UserID;
  1453. if (!param.NickName) {
  1454. param.NickName = "陌生用户";
  1455. }
  1456. await mps.UpdateUsersByUserID(param);
  1457. ctx.body = { "errcode": 10000 };
  1458. }
  1459. // 提交祝福语
  1460. export async function MPSWish(ctx) {
  1461. const param = ctx.request.body;
  1462. const param2 = { WishType: "person" };
  1463. if (param.ToName) {
  1464. param.ToName = param.ToName.replace(/\r/g, "").replace(/\n/g, "");
  1465. }
  1466. if (!param.ID || param.ID == 0) {
  1467. param.CreateTime = moment().format('YYYY-MM-DD HH:mm:ss');
  1468. param.UpdateTime = moment().format('YYYY-MM-DD HH:mm:ss');
  1469. param.Flag = 0;
  1470. const addInfo = await mps.AddWish(param);
  1471. param2.ID = addInfo.insertId;
  1472. } else {
  1473. param.UpdateTime = moment().format('YYYY-MM-DD HH:mm:ss');
  1474. await mps.UpdateMPSWish(param);
  1475. param2.ID = param.ID;
  1476. }
  1477. let result = await mps.GetMPSWish(param2);
  1478. result = buildWish(result[0]);
  1479. ctx.body = { errcode: 10000, result: result };
  1480. }
  1481. function buildWish(item, wishType) {
  1482. let nickName2 = item.NickName;
  1483. if (nickName2 && nickName2.length > 10)
  1484. nickName2 = nickName2.substr(0, 8) + "…";
  1485. item.NickName2 = nickName2;
  1486. let str = item.ToName;
  1487. if (!str || item.IsOpen == 0) {
  1488. if (item.ToWhom == "给自己") {
  1489. str = "我";
  1490. }
  1491. else if (item.ToWhom == "给孩子") {
  1492. str = "孩子";
  1493. }
  1494. else if (item.ToWhom == "给同学") {
  1495. str = "大家";
  1496. }
  1497. }
  1498. if (wishType == "schoolAll") {
  1499. item.WishWhom = "祝" + str + "考上";
  1500. }
  1501. else {
  1502. if (str && str.length > 8)
  1503. str = str.substr(0, 8) + "…";
  1504. item.WishWhom = "祝" + str + "考上";
  1505. }
  1506. if (item.ToName)
  1507. item.WishWhom2 = "祝" + item.ToName + "考上";
  1508. else
  1509. item.WishWhom2 = "祝" + str + "考上";
  1510. if (wishType == "schoolAll") {
  1511. item.WishContentItem = item.WishContent;
  1512. }
  1513. else {
  1514. if (item.WishContent && item.WishContent.length > 40)
  1515. item.WishContentItem = item.WishContent.substr(0, 39) + "…";
  1516. else if (item.WishContent)
  1517. item.WishContentItem = item.WishContent;
  1518. else {
  1519. item.WishContentItem = "";
  1520. }
  1521. }
  1522. if (item.IsOpen == 0) {
  1523. item.WishContentItem = "";
  1524. }
  1525. return item;
  1526. }
  1527. export async function Ping(ctx) {
  1528. ctx.body = { errcode: 10000 };
  1529. }