有什么好的免费网站做教育宣传语中国建设银行官网站基金查询
- 作者: 五速梦信息网
- 时间: 2026年04月20日 06:56
当前位置: 首页 > news >正文
有什么好的免费网站做教育宣传语,中国建设银行官网站基金查询,wordpress微官网,精品网站建设需要多少钱JRT1.7连仪器在线演示视频 JRT1.5实现质控主体、1.6基本完成质控#xff1b;本次版本推进到1.7#xff0c;1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全#xff0c;上十年写系统用到的都全了。 这次直接挑战检验最难…JRT1.7连仪器在线演示视频 JRT1.5实现质控主体、1.6基本完成质控本次版本推进到1.71.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全上十年写系统用到的都全了。 这次直接挑战检验最难类型的仪器连接西比亚蛋白电泳、固定电泳、尿蛋白电泳同时实现Linux上连接和TCP连接充分验证仪器连接的可靠性。西比亚的难点有数据解析、有绘图。借助仪器连接同时展示了JRT业务脚本化的在应对修改的优越性。 设计理想在JRT下一一实现。 西比亚数据 P0001 000 00000g/dl TS 2201202410β2微球蛋白 溶菌酶 视黄醇结合蛋白 游离轻链 α1微球蛋白 游离轻链二聚体 白蛋白 转铁蛋白 IgGIgA 结合珠蛋白 010.8009.2006.8005.5004.9028.1007.3004.9011.0011.500000000000000000000000000000000000000000000000000 000.0000.0000.0000.000000000000000000000000.0001.00 000300A0100000000000000000000000000000000008005000800A500CC00B6007C004200290016000E000B000C000C000C000C000B000900070004000400BF01E2034D03EE03E8038202BF01F3C1210149021A033B036702B701DE0161416F014F012300C500830055004700430039002B001A0011000B000800050003000180000000000100040007000B000E00110028007C00E30134011100F100F201360153011500BA00620048005D00AD0105012C00FF00AD00610036001E0010000A00060004000300050007000900070004800100010002000300030002000100010003000500060007004100E801AE023201DB014900BC00B800D800F400CD0090004E002F001BC011003E008D00ED00FE00CE0081004A00310024003B006A00A400AE008D005A003500220016001B004E009100CD00BB008A004C002D001D001500120011001300140012800E00120040011B0243037B04BD075F0A3A0C040A1806FD03B70251018C013D00EA00A0005A003780240039009E015C021E02BC02D102B80212017500CA00760044002A001B0011000A00050002800200020006004C00D6017701B6016B012301040134011B00D90080004700290018000D000700038002000200040006001700380066009900B100B7008E00650072015A028B039F03340257013300BA0067003C00210013000D004A00BF014D0186014600DB0073004500250015000C0008000500030001800100020004000500050003000200040009000D000D000A000800080008000B0034007200B800BA00940059004C006D00A700FE013D0171014700F70091004F002D0019000F000A00070056016702C003CB03670279015500C700088002|** 仪器接口代码片段 仪器控制界面后台 import JRT.Core.MultiPlatform.JRTContext; import JRT.Core.Socket.MachManager; import JRT.Core.Util.Convert; import JRT.Model.Entity.BTMIMachineParameter; import JRT.Model.Entity.BTWorkGroup; import JRT.Model.Entity.BTWorkGroupMachine; import JRTBLLBase.BaseHttpHandler; import JRTBLLBase.Helper;import java.util.ArrayList; import java.util.List;/*** 仪器控制界面的后台逻辑/ public class ashMachineControl extends BaseHttpHandler {/** 查询仪器* return* throws Exception/public String QueryMachine() throws Exception{String FindAll Helper.ValidParam(JRTContext.GetRequest(Request, FindAll), );//考虑仪器不多直接查询全部ListBTMIMachineParameterDto allMachineEntityManager().FindAllSimple(BTMIMachineParameterDto.class,null);ListBTMIMachineParameterDto retListnew ArrayList();if(allMachine!nullallMachine.size()0){for(BTMIMachineParameterDto one : allMachine){//查当前工作组的仪器if(FindAll.equals(0)){BTWorkGroupMachine wgmEntityManager().DolerGet(BTWorkGroupMachine.class,one.WorkGroupMachineDR);BTWorkGroup wgEntityManager().DolerGet(BTWorkGroup.class,wgm.WorkGroupDR);if(wg.RowID! Convert.ToInt32(UserLogin().GroupID)){continue;}}//有端口的才是TCP仪器if(one.PortNo!null!one.PortNo.isEmpty()){if(one.IPAddress!null!one.IPAddress.isEmpty()){one.TcpType客户端;}else{one.TcpType服务端;}BTWorkGroupMachine wgmEntityManager().DolerGet(BTWorkGroupMachine.class,one.WorkGroupMachineDR);one.WorkGroupMachineNamewgm.CName;retList.add(one);}}}return Helper.Object2Json(retList);}/** 启动仪器* return/public String StartMachine() throws Exception{int MachineDR Helper.ValidParam(JRTContext.GetRequest(Request, MachineDR), 0);BTMIMachineParameter machDtoEntityManager().DolerGet(BTMIMachineParameter.class,MachineDR);String err(String) Helper.GetBllMethodData(machDto.IFProgram,Start,MachineDR);if(!err.isEmpty()){machDto.IsStartfalse;machDto.OpMessage启动失败;return Helper.Error(err);}else{machDto.IsStarttrue;machDto.OpMessage启动成功:Helper.GetNowDateStr() Helper.GetNowTimeStr();}EntityManager().Update(machDto,ErrRet(),null);return Helper.Success();}/** 停止仪器* return/public String StopMachine() throws Exception{int MachineDR Helper.ValidParam(JRTContext.GetRequest(Request, MachineDR), 0);BTMIMachineParameter machDtoEntityManager().DolerGet(BTMIMachineParameter.class,MachineDR);String errMachManager.StopMachSocketByKey(String.valueOf(MachineDR));if(!err.isEmpty()){machDto.OpMessage停止失败;return Helper.Error(err);}else{machDto.IsStartfalse;machDto.OpMessage停止成功:Helper.GetNowDateStr() Helper.GetNowTimeStr();}EntityManager().Update(machDto,ErrRet(),null);return Helper.Success();}/** 返回实体/public static class BTMIMachineParameterDto extends BTMIMachineParameter{/** TCP连接类型/public String TcpType;/** 工作小组/public String WorkGroupMachineName;} } 仪器控制界面前端 !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlnshttp://www.w3.org/1999/xhtml headmeta http-equivContent-Type contenttext/html;charsetutf-8 /title仪器控制/titlelink relshortcut icon href../../resource/common/images/favicon.ico /script src../../resource/common/js/JRTBSBase.js typetext/javascript/scriptlink href../../resource/plug/spectrum/css/spectrum.css relstylesheet typetext/css /script src../../resource/plug/spectrum/js/spectrum.js typetext/javascript/scriptscript languagejavascript typetext/javascriptSYSPageCommonInfo.Init();var BasePath ;var ResourcePath ;var WebServicAddress SYSPageCommonInfo.Data.WebServicAddress;var UserID SYSPageCommonInfo.Data.Sesssion.UserID;var GroupID SYSPageCommonInfo.Data.Sesssion.GroupID;var SessionStr SYSPageCommonInfo.Data.SessionStr;/scriptscript typetext/javascript//全局变量var me {actionUrl: ../ashx/ashMachineControl.ashx};//jquery入口\((function () {//查询范围\)(#cmbFindAll).combobox({data:[{RowID:0,CName:当前工作组},{RowID:1,CName:全部仪器}],valueField:RowID,textField:CName});\((#cmbFindAll).combobox(setValue,0);//查询\)(#btnSelect).click(function () {SelectMachine();});//启动仪器\((#btnStart).click(function () {var selectRow\)(#dgData).datagrid(getSelected);if(selectRownull){\(.messager.alert(提示,请选择一个仪器);return;}\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodStartMachine,data:{MachineDR:selectRow.RowID},success: function (result, status) {SelectMachine();}});});//停止仪器\((#btnStop).click(function () {var selectRow\)(#dgData).datagrid(getSelected);if(selectRownull){\(.messager.alert(提示,请选择一个仪器);return;}\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodStopMachine,data:{MachineDR:selectRow.RowID},success: function (result, status) {SelectMachine();}});});//仪器\((#dgData).datagrid({singleSelect:true,fitColumns:true,columns:[[{ field: RowID, title: TranslateDataMTHD(RowID, 主键, ) , width: 40, sortable: true },{ field: Code, title: TranslateDataMTHD(Code, 代码, ) , width: 60, sortable: true },{ field: CName, title: TranslateDataMTHD(CName, 名称, ) , width: 150, sortable: true },{ field: WorkGroupMachineName, title: TranslateDataMTHD(WorkGroupMachineName, 工作小组, ) , width: 150, sortable: true },{ field: IPAddress, title: TranslateDataMTHD(IPAddress, IP地址, ) , width: 120, sortable: true },{ field: PortNo, title: TranslateDataMTHD(PortNo, 端口号, ) , width: 60, sortable: true },{ field: TcpType, title: TranslateDataMTHD(TcpType, Tcp类型, ) , width: 60, sortable: true },{ field: IFProgram, title: TranslateDataMTHD(IFProgram, 接口程序, ) , width: 180, sortable: true },{ field: Sequence, title: TranslateDataMTHD(Sequence, 序号, ) , width: 50, sortable: true },{ field: Active, title: TranslateDataMTHD(Active, 状态, ) , width: 50, sortable: true },{ field: IsStart, title: TranslateDataMTHD(IsStart, 启动, ) , width: 50, sortable: true,formatter: function (value, rowData, rowIndex) {return rowData.IsStart true ? img src../../resource/common/images/active.png alt激活 title激活/ : img src../../resource/common/images/cross.png alt未激活 title未激活/;}},{ field: OpMessage, title: TranslateDataMTHD(OpMessage, 操作信息, ) , width: 150, sortable: true },{ field: ComPort, title: TranslateDataMTHD(ComPort, 串口号, ) , width: 60, sortable: true },{ field: BaudRate, title: TranslateDataMTHD(BaudRate, 波特率, ) , width: 60, sortable: true },{ field: DataBits, title: TranslateDataMTHD(DataBits, 数据位, ) , width: 60, sortable: true },{ field: StopBits, title: TranslateDataMTHD(StopBits, 停止位, ) , width: 60, sortable: true },{ field: Parity, title: TranslateDataMTHD(Parity, 校验位, ) , width: 60, sortable: true },]]});//查询仪器function SelectMachine() {\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodQueryMachine,data:{FindAll:\((#cmbFindAll).combobox(getValue)},success: function (result, status) {//工作组\)(#dgData).datagrid(loadData, result);}});}SelectMachine();});/script /head body div classeasyui-layout fittruediv data-optionsregion:north,title:,split:true styleheight:48px;padding: 5px 0 0 10px;span查询范围/spanspan classjrtsp6/spaninput idcmbFindAll stylewidth: 120px;/span classjrtsp/spana idbtnSelect href# classeasyui-linkbutton查询/aa idbtnStart href# classeasyui-linkbutton启动/aa idbtnStop href# classeasyui-linkbutton停止/a/divdiv data-optionsregion:center,title: styleborder: none;table iddgData fittrue/table/div /div /body /html 仪器数据监控界面 !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd html xmlnshttp://www.w3.org/1999/xhtml headmeta http-equivContent-Type contenttext/html;charsetutf-8 /title仪器数据监控/titlelink relshortcut icon href../../resource/common/images/favicon.ico /script src../../resource/common/js/JRTBSBase.js typetext/javascript/scriptlink href../../resource/plug/spectrum/css/spectrum.css relstylesheet typetext/css /script src../../resource/plug/spectrum/js/spectrum.js typetext/javascript/scriptscript languagejavascript typetext/javascriptSYSPageCommonInfo.Init();var BasePath ;var ResourcePath ;var WebServicAddress SYSPageCommonInfo.Data.WebServicAddress;var UserID SYSPageCommonInfo.Data.Sesssion.UserID;var GroupID SYSPageCommonInfo.Data.Sesssion.GroupID;var SessionStr SYSPageCommonInfo.Data.SessionStr;/scriptscript typetext/javascript//全局变量var me {actionUrl: ../ashx/ashMachineDataMonitor.ashx};//jquery入口\((function () {//查询\)(#btnSelect).click(function () {var MachineDR\((#cmbMachine).combogrid(getValue);if(MachineDRnull||MachineDR){\).messager.alert(提示,请选择一个仪器);return;}\(.ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodQueryTraceDataMachineDRMachineDR,success: function (result, status) {\)(#dgData).datagrid(loadData,result);}});});//清空\((#btnClear).click(function () {var MachineDR\)(#cmbMachine).combogrid(getValue);if(MachineDRnull||MachineDR){\(.messager.alert(提示,请选择一个仪器);return;}\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodClearTraceDataMachineDRMachineDR,success: function (result, status) {//对数据进行筛选是后台抛的信息的话就提示以及决定是否继续if (!FilterBackData(result)) {return;}if (result.IsOk) {\((#dgData).datagrid(loadData,[]);}}});});//查看传输\)(#btnSelectTrans).click(function () {var MachineDR\((#cmbMachine).combogrid(getValue);if(MachineDRnull||MachineDR){\).messager.alert(提示,请选择一个仪器);return;}showwin(#winCommon, TranslateDataMTHD(Machine Extract, 查看传输数据, ), SYSSessionURL(frmRPMachineExtract.html?MachineID MachineDR), \((document).width() - 130, 690, true, 10px);});//查看图片\)(#btnSelectImage).click(function () {var MachineDR\((#cmbMachine).combogrid(getValue);if(MachineDRnull||MachineDR){\).messager.alert(提示,请选择一个仪器);return;}showwin(#winCommon, TranslateDataMTHD(Machine Image, 仪器图片, ), SYSSessionURL(frmRPMachineImage.html?MachineID MachineDR), \((document).width() - 130, 690, true, 10px);});//仪器结果\)(#btnMachineRes).click(function () {var MachineDR\((#cmbMachine).combogrid(getValue);if(MachineDRnull||MachineDR){\).messager.alert(提示,请选择一个仪器);return;}showwin(#winCommon, TranslateDataMTHD(Machine Result, 仪器结果, ), SYSSessionURL(frmRPMachineResult.html?MachineID MachineDR), \((document).width() - 130, 690, true, 10px);});//工作组\)(#cmbWG).combogrid({width: 160,idField: WorkGroupDR,textField: WorkGroupName,method: get,editable: false,columns:[[{field:WorkGroupName,title:名称,width:140}]],onSelect: function (date) {me.cmbMach.combobox(setValue,)QueryMachData();}});\((#cmbWG).combogrid(showSelectWin);//仪器\)(#cmbMachine).combogrid({width: 160,panelWidth:260,idField: RowID,textField: CName,method: get,editable: true,columns:[[{field:RowID,title:主键,width:40},{field:Code,title:代码,width:60},{field:CName,title:名称,width:140}]],onSelect: function (data) {}});\((#cmbMachine).combogrid(showSelectWin);//请求工作组数据并设置默认选项\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodQueryWorkGroupData,success: function (result, status) {//工作组\((#cmbWG).combogrid(grid).datagrid(loadData, result);}});//查询仪器数据function QueryMachData(){\).ajax({type: POST,dataType: json, //text, json, xmlcache: false, //async: true, //为true时异步不等待后台返回值为false时强制等待-asirurl: me.actionUrl ?MethodQryMachineParameterWorkGroupDR\((#cmbWG).combogrid(getValue),success: function (result, status) {//仪器\)(#cmbMachine).combogrid(grid).datagrid(loadData, result);}});}QueryMachData();$(#dgData).datagrid({fitColumns:true,columns:[[{field:Seq,title:序号,width:50,fixed:true},{field:Data,title:日志,width:100}]]});});/script /head body div classeasyui-layout fittruediv data-optionsregion:north,title:,split:true styleheight:48px;padding: 5px 0 0 10px;span工作组/spanspan classjrtsp6/spaninput idcmbWG stylewidth: 120px;/span classjrtsp/spanspan仪器/spaninput idcmbMachine stylewidth:120px;/span classjrtsp6/spana idbtnSelect href# classeasyui-linkbutton查询/aa idbtnClear href# classeasyui-linkbutton清空/aa idbtnSelectTrans href# classeasyui-linkbutton查看传输/aa idbtnSelectImage href# classeasyui-linkbutton查看图片/aa idbtnMachineRes href# classeasyui-linkbutton仪器结果/a/divdiv data-optionsregion:center,title: styleborder: none;table iddgData fittrue/table/divdiv idwinCommon/div /div /body /html 仪器数据监控后台 import JRT.Core.Debug.TraceManager; import JRT.Core.Debug.TraceQueue; import JRT.Core.MultiPlatform.JRTContext; import JRT.Core.Util.Convert; import JRT.Model.Entity.BTMIMachineParameter; import JRT.Model.Entity.BTWorkGroup; import JRT.Model.Entity.BTWorkGroupMachine; import JRT.Model.Entity.SYSUserRole; import JRTBLLBase.BaseHttpHandler; import JRTBLLBase.Helper;import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class ashMachineDataMonitor extends BaseHttpHandler {/** 查询工作组数据** return/public String QueryWorkGroupData() throws Exception {//得到用户的角色ListSYSUserRoleDto roleList EntityManager().FindByColVal(SYSUserRoleDto.class, UserDR, Convert.ToInt32(UserLogin().UserID));if (roleList ! null roleList.size() 0) {for (SYSUserRoleDto one : roleList) {BTWorkGroup wgDto EntityManager().DolerGet(BTWorkGroup.class, one.WorkGroupDR);one.WorkGroupName wgDto.CName;one.CurWorkGroupDR UserLogin().GroupID;}}return Helper.Object2Json(roleList);}/** 查询仪器** return/public String QryMachineParameter() throws Exception {int WorkGroupDR Helper.ValidParam(JRTContext.GetRequest(Request, WorkGroupDR), 0);ListBTMIMachineParameter retList new ArrayList();String [] arrUserLogin().SessionStr.split(\^);String hospitalDRarr[4];//查询工作小组下的所有仪器ListBTMIMachineParameter machList EntityManager().FindByColVal(BTMIMachineParameter.class, HospitalDR, Convert.ToInt32(hospitalDR));for (BTMIMachineParameter mi : machList) {BTWorkGroupMachine wgmEntityManager().DolerGet(BTWorkGroupMachine.class,mi.WorkGroupMachineDR);BTWorkGroup wgEntityManager().DolerGet(BTWorkGroup.class,wgm.WorkGroupDR);if(WorkGroupDR0wg.RowID!WorkGroupDR){continue;}retList.add(mi);}return Helper.Object2Json(retList);}/** 清空跟踪日志* return* throws Exception/public String ClearTraceData() throws Exception {String MachineDR Helper.ValidParam(JRTContext.GetRequest(Request, MachineDR), );TraceQueue trace TraceManager.GetTraceHandler(MachineDR, -1);trace.Clear();return Helper.Success();}/** 查询日志数据* return/public String QueryTraceData() throws Exception{String MachineDR Helper.ValidParam(JRTContext.GetRequest(Request, MachineDR), );TraceQueue trace TraceManager.GetTraceHandler(MachineDR, -1);ListString logListtrace.GetTraceData();ListHashMap retListnew ArrayList();if(logList!nulllogList.size()0){int Seq0;for(String one:logList){Seq;HashMap hsnew HashMap();hs.put(Data,one);hs.put(Seq,Seq);retList.add(hs);}}return Helper.Object2Json(retList);}/** 角色查询实体/public static class SYSUserRoleDto extends SYSUserRole {//工作组名称public String WorkGroupName;//当前工作组public String CurWorkGroupDR;} } TCP仪器接口代码 import JRT.Core.Dto.OutValue; import JRT.Core.Socket.IMachDealData; import JRT.Core.Socket.MachSocketBase; import JRT.Core.Util.Convert; import JRT.Model.Bussiness.Parameters; import JRT.Model.Entity.BTMIMachineParameter; import JRTBLLBase.BaseHttpHandlerMachine; import JRTBLLBase.Helper;import java.io.PrintWriter; import java.net.Socket;/** 南比亚TCP仪器接口/ public class miNanBia extends BaseHttpHandlerMachine implements IMachDealData {/** 启动仪器控制* param mi 仪器* return 空或失败原因/public String Start(int mi){try {BTMIMachineParameter machDto EntityManager().DolerGet(BTMIMachineParameter.class, mi);MachSocketBase baseJRT.Core.Socket.MachManager.GetMachSocketBase(machDto.IPAddress, Convert.ToInt32(machDto.PortNo),Long.valueOf(5000),this,GBK,String.valueOf(mi));}catch (Exception ex){Trace(String.valueOf(mi),Helper.GetExceptionStr(ex),H-M);return Helper.GetExceptionStr(ex);}return ;}/** 处理上传定时器接口* param sender Socket对象用来发送比特用* param writer 用来发布初始化指定的字符用* param mi 仪器主键/public void DealUpTimer(Socket sender, PrintWriter writer,String mi){try {if(writer!null) {String sendStr H-M:我主动定时给你推送的数据/br;//返回数据writer.print(sendStr);writer.flush();Trace(mi, sendStr, H-M);}}catch (Exception ex){Trace(mi,Helper.GetExceptionStr(ex),H-M);}}/** 处理数据接收* param data 公共层处理成字符串的数据* param buf 没处理的比特数组* param sender Socket对象用来发送比特用* param writer 用来发布初始化指定的字符用* param mi 仪器主键*/public void DealReceive(String data, byte[] buf, Socket sender, PrintWriter writer,String mi){try {Parameters para new Parameters();para.P0 mi;para.P1 data;para.P2 ;para.P3 ;para.P4 ;OutValue session new OutValue();OutValue outPut new OutValue();writer.print(ACK);writer.flush();Trace(mi,ACK,H-M);//调用处理文件的逻辑String ret(String)Helper.GetBllMethodData(mi.miSebia, SaveData, para, session, outPut);Trace(mi,ret,返回);}catch (Exception ex){Trace(mi,Helper.GetExceptionStr(ex),M-H);}} } 解落三秋叶 能开二月花 过江千尺浪 入竹万竿斜 为了梦想十年如一日的推进进度 2024-05-26 小乌鱼
- 上一篇: 有什么方法在淘宝发布网站建设设计网站建设公开
- 下一篇: 有什么教人做论文的网站吗企业车辆管理系统平台
相关文章
-
有什么方法在淘宝发布网站建设设计网站建设公开
有什么方法在淘宝发布网站建设设计网站建设公开
- 技术栈
- 2026年04月20日
-
有谁做彩票网站吗大学生个人网站模板
有谁做彩票网站吗大学生个人网站模板
- 技术栈
- 2026年04月20日
-
有人做网站吗wordpress 左侧菜单栏
有人做网站吗wordpress 左侧菜单栏
- 技术栈
- 2026年04月20日
-
有什么教人做论文的网站吗企业车辆管理系统平台
有什么教人做论文的网站吗企业车辆管理系统平台
- 技术栈
- 2026年04月20日
-
有什么类似凡科建站汽车网站建设背景
有什么类似凡科建站汽车网站建设背景
- 技术栈
- 2026年04月20日
-
有什么类型的网站校园门户网站建设项目技术支持
有什么类型的网站校园门户网站建设项目技术支持
- 技术栈
- 2026年04月20日
