摘要 : 前几个月,客户要求显示列表做到列锁定+表头锁定+列组合,但从Extjs到Jquery EasyUi,从Jquery Grid到Telerik等等组件,发现无一符合条件,要么只有列锁定,要么只有列组合,当两者结合就不行了。于是只好开始自己琢 ...
前几个月,客户要求显示列表做到列锁定+表头锁定+列组合 , 但从Extjs到Jquery EasyUi,从Jquery Grid到Telerik等等组件,发现无一符合条件,要么只有列锁定,要么只有列组合,当两者结合就不行了。于是只好开始自己琢磨了,然后就有了jqGridView。
设计思路
在开始之前,总得理下思路。我CSS不行,JS一般,但是我有思路,先看看下面两个图:
z
从上图中可以看出,毫无疑问的,我们需要将一个列表切成4块——锁定列表头、锁定列数据行、非锁定列表头、非锁定列数据行 。如图:
其中,锁定列表头、锁定列数据列、非锁定列表头均无滚动条,滚动条全在非锁定列数据列,但拖动右侧滚动条,需要联动锁定列数据行,但拖动底部滚动条,需联动非锁定列表头。
在我认为,磨刀不误砍柴工。好的想法、好的设计才能更大可能性的走向成功。
接下来,是细节的实现了:
选择什么编程语言呢?好像还没写过Jquery插件,那么就用这个来练练手吧。我对开发新东西或者实现自己的想法或者有兴趣却不熟悉的编码特别来劲。
选择什么方式呢?开始,毫无意外的想到使用Table来组合,于是坑次坑次的开始了。当编码完成后,发现一个棘手的问题——模块之间无法对齐。即使设置了每个单元格宽度以及表格宽度也不行,请了美工辅助也不行,于是放弃了。有意向的朋友可以试试。table不行,那就试试Div吧,人总不能在一条路上走死吧。于是又坑次坑次的开始了,终于修改N次后完成了。
样例
首先举几个例子来说明如何使用:
简单单行表头
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' }); }); script >
合并列
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' , leftGroupCols: '单位 ' , rightGroupCols: '待定 1级 2级 3级 4级 5级 6级 7级 8级 9级 10级 11级 12级 13级 14级 15级 16级 ' }); }); script >
行点击事件
< script type ="text/javascript"> $(function () { $.jqGridView(' <% = gvData.ClientID %> ' , { lockColumns: 3, isRemoveGridView: true , rowStyle: 'gv-tr-rowStyle' , alternatingRowStyle: 'gv-tr-alternatingRowStyle' , hoverRowStyle: 'gv-tr-hoverRowStyle' , leftGroupCols: '单位 ' , rightGroupCols: '待定 1级 2级 3级 4级 5级 6级 7级 8级 9级 10级 11级 12级 13级 14级 15级 16级 ' , rowClick: function (e) { var tds = e.data.tds; var rowIndex = e.data.rIndex; var isLeft = e.data.isLeft; alert("列1行" + rowIndex + "的值为:" + tds.eq(0).text() + ",您点击的是" + (isLeft ? "锁定列" : "非锁定列" )); } }); }); script >
样式
既然决定使用div,那么样式少不了。我倾向于外观方面的控制全放在样式里面,于是定义了以下样式:
/*jqGridView Style */ .gv-dataContent{ width: 750px; height: 320px; margin: 5px auto; text-align:left;}.gv-dataContent th, tr{ white-space: nowrap;}.gv-dataContent td, th{ padding: 0 0 0 0; margin: 0 0 0 0; white-space: nowrap;}.gv-header-left{ width: auto; overflow: hidden; float : left; border-left: 1px solid #539ebb; border-collapse: collapse;}.gv-header-right{ overflow: hidden; border-collapse: collapse;}.gv-data-left{ width: auto; overflow: hidden; float : left; border-left: 1px solid #539ebb; border-bottom: 1px solid #539ebb; border-collapse: collapse;}.gv-data-right{ overflow: scroll; border-collapse: collapse;}.gv-div-table{ border-collapse: collapse; width: auto;}.gv-div-tr{ clear: both; height: 30px; overflow: hidden;}.gv-div-th, .gv-div-td{ height: 30px; float : left; border: 1px solid white; margin: 0px 0 0 -1px; text-align: center; vertical-align: middle; line-height: 30px; border-collapse: collapse; float : left; color: #3274a4;}.gv-div-th{ background-color: #86A9D2; font-weight: bold; border: 1px solid white;}.gv-tr-rowStyle{ background-color: #8ecbe3;}.gv-tr-alternatingRowStyle{ background-color: #d3ebf4;}.gv-tr-hoverRowStyle{ background-color: #6786d6; cursor:pointer;}/*GridView 样式*/ .HeaderStyle{ background-color:#86A9D2; font-weight:bold; height:26px; white-space: nowrap; text-align:center; border: 1px solid white; color: #3274a4;}.RowStyle{ background-color: #8ecbe3; height:26px; text-align:center; white-space: nowrap; border: 1px solid white; color: #3274a4;}.AlternatingRowStyle{ background-color: #d3ebf4; height:26px; white-space: nowrap; border: 1px solid white; color: #3274a4; text-align: center;}.datacontent{ font-size:12px; font-family:微软雅黑; width:740px; border:1px solid #7C9BBF; margin:0 auto; clear: both; text-align: center; *text-align: center; margin-left: 5px; padding:5px; width:760px; overflow:auto; }
从样式中可以看出大体的规则,也是仿照table元素来的。table、tr、th、td等等。其中有几个重要样式要注意了:
.gv-dataContent 整个jqGridView的整体样式
.gv-header-left 左侧表头区域
.gv-header-right 右侧表头区域
.gv-data-left 左侧数据区域
.gv-data-right 右侧数据区域
.gv-div-table 表示一个表格,每个区域均存在
.gv-div-tr 表示行样式
.gv-div-th 表示表头单元格样式
.gv-div-td 表示单元格样式
.gv-tr-rowStyle 表示奇数行样式
.gv-tr-alternatingRowStyle 表示偶数行样式
.gv-tr-hoverRowStyle 表示悬浮行样式
编码 先贴上代码: 1: /** 2: * 本插件用于实现GridView的列锁定和表头锁定,以及表头组合 3: * @example $.jqGridView('<%=gvData.ClientID %>', { lockColumns: 3 }); 4: * @param String gridViewClientID GridView的客户端ID 5: * @option Number lockColumns 锁定的列数。如果包含合并表头,请与合并表头的列数一致。 6: * @option String leftGroupCols 左侧合并列的HTML,不设置则默认为单行表头。 7: * @option String rightGroupCols 右侧合并列的HTML,不设置则默认为单行表头。 8: * @option String removeLeftHeaderStrBySplit 根据分隔符移除左侧头部字符。 9: * @option String removeRightHeaderStrBySplit 根据分隔符移除右侧头部字符。 10: * @option String rowStyle 偶数行样式。 11: * @option String alternatingRowStyle 奇数行样式。 12: * @option String hoverRowStyle 悬浮行样式。 13: * @option Bool isRemoveEmptyAndZeroCols 是否移除空列或者0列。 14: * @option Bool isHideGridView 是否在处理后隐藏GridView。 15: * @option Bool isRemoveGridView 是否在处理后移除GridView。 16: * @option String emptyMessage 没有数据时显示的内容,默认为“没有数据。”。 17: * @option event rowClick 行单击事件。 18: * @author 雪雁 19: * @email [email protected] 20: * @webSite http://www.cnblogs.com/codelove/ 21: */ 22: jQuery.jqGridView = function (gridViewClientID, options) { 23: if (gridViewClientID !== undefined && options !== undefined) { 24: function formatHeaderHtml(html) { 25: return html.replace(/\
/g, '') 26: .replace(/\/g, '') 27: .replace(/\ /g, ''); 28: } 29: //锁定的列数 30: var lockColumns = options.lockColumns === undefined ? 1 : options.lockColumns; 31: //左侧组合列HTML 32: var leftGroupCols = $(options.leftGroupCols === undefined ? '' : formatHeaderHtml(options.leftGroupCols)); 33: //右侧组合列HTML 34: var rightGroupCols = $(options.rightGroupCols === undefined ? '' : formatHeaderHtml(options.rightGroupCols)); 35: //根据分隔符移除左侧头部字符 36: var removeLeftHeaderStrBySplit = options.removeLeftHeaderStrBySplit === undefined ? '' : options.removeLeftHeaderStrBySplit; 37: var removeRightHeaderStrBySplit = options.removeRightHeaderStrBySplit === undefined ? '' : options.removeRightHeaderStrBySplit; 38: //偶数行样式 39: var rowStyle = options.rowStyle === undefined ? '' : options.rowStyle; 40: //奇数行样式 41: var alternatingRowStyle = options.alternatingRowStyle === undefined ? '' : options.alternatingRowStyle; 42: //鼠标悬浮行样式 43: var hoverRowStyle = options.hoverRowStyle === undefined ? '' : options.hoverRowStyle; 44: var isSafari = $.browser.safari; 45: //数据空显示内容 46: var emptyMessage = options.emptyMessage === undefined ? '没有数据。' : options.emptyMessage; 47: var gvData = http://www.cnblogs.com/codelove/archive/2012/07/29/$('#' + gridViewClientID); 48: if (!gvData || gvData.length == 0) { 49: console.error("GridView不存在,请检查!!!", gridViewClientID, options); 50: return; 51: } 52: //是否移除空列或者0列 53: if (options.isRemoveEmptyAndZeroCols !== undefined && options.isRemoveEmptyAndZeroCols) { 54: var arr_remove = new Array(gvData.find('tr:eq(0) th').length); 55: var rowsCount = gvData.find('tr:gt(0)').each(function (rIndex) { 56: var tr = $(this); 57: tr.find('td').each(function (cIndex) { 58: if (arr_remove[cIndex] === undefined || arr_remove[cIndex] == null) 59: arr_remove[cIndex] = 0; 60: var val = $(this).text().replace(/(^\s*)|(\s*$)/g, ""); 61: if (val == '' || val == 0) { 62: arr_remove[cIndex]++; 63: } 64: }); 65: }).length; 66: gvData.find('tr').each(function (rIndex) { 67: var tr = $(this); 68: tr.find('td,th').each(function (cIndex) { 69: if (arr_remove[cIndex] == rowsCount) 70: $(this).remove(); 71: }); 72: }); 73: } 74: var leftCols = lockColumns - 1; 75: var rightCols = lockColumns; 76: var isRemoveGridView = options.isRemoveGridView === undefined ? true : options.isRemoveGridView; 77: //所有列宽 78: var colsLengsArr = new Array(); 79: var colsCount = gvData.find('tr:eq(0) th').each(function (i) { 80: colsLengsArr[i] = ($(this).outerWidth() + 1); 81: }).length; 82: if (lockColumns >= colsCount) lockColumns = colsCount; 83: //左侧table宽度 84: var leftTableWidth = 1; 85: //右侧table宽度 86: var rightTableWidth = 1; 87: for (var i = 0; i < lockColumns; i++) { 88: leftTableWidth += (colsLengsArr[i] + 1); 89: if (isSafari) leftTableWidth += 0.3; 90: } 91: for (var i = lockColumns; i < colsLengsArr.length; i++) { 92: rightTableWidth += (colsLengsArr[i] + 1); 93: if (isSafari) rightTableWidth += 0.3; 94: } 95: 96: gvData.parent().prepend('
'); 97: var gv_dataContent = $('.gv-dataContent'); 98: if (gvData.find('tr').length <= 1) { 99: gv_dataContent.prepend('' + emptyMessage + '
'); 100: return; 101: } 102: //右侧区域宽度 103: var rightAreaWidth = gv_dataContent.width() - (leftTableWidth + 25); 104: //数据区域高度 105: var dataAreaHeight = gv_dataContent.height(); 106: 107: gv_dataContent.prepend('
'); 108: var gv_header_left = gv_dataContent.find('div.gv-header-left'); 109: var gv_header_right = gv_dataContent.find('div.gv-header-right'); 110: var gv_data_left = gv_dataContent.find('div.gv-data-left'); 111: var gv_data_right = gv_dataContent.find('div.gv-data-right'); 112: if (lockColumns == colsCount) { 113: gv_header_right.hide(); gv_data_right.hide(); 114: } else { 115: if (rightAreaWidth > 0) { 116: gv_header_right.width(rightAreaWidth); 117: gv_data_right.width(rightAreaWidth + 18); 118: } 119: } 120: var gvData_header_left = gvData.clone(); 121: gvData_header_left.find('tr:gt(0)').remove(); 122: 123: var gvData_header_right = gvData_header_left.clone(); 124: gv_header_right.find('tr th').remove(); 125: 126: gv_data_right.find('tr:eq(0)').prepend(gvData_header_left.find('th:gt(' + lockColumns + ')').clone()); 127: gvData_header_right.find('th:lt(' + rightCols + ')').remove(); 128: gvData_header_left.find('th:gt(' + leftCols + ')').remove(); 129: var colIndex = 0; 130: 131: function setThs(jqTr, jqHeader, isLeft) { 132: // var trHtml = '';
133: var trHtml = '
';
134: jqTr.find('th').each(function (j) {
135: trHtml += '
'; 136: if (removeLeftHeaderStrBySplit != '') { 137: var splitStrs = $(this).text().split(removeLeftHeaderStrBySplit); 138: trHtml += splitStrs.length > 1 ? splitStrs[1] : splitStrs[0]; 139: } else if (removeRightHeaderStrBySplit != '') { 140: var splitStrs = $(this).text().split(removeRightHeaderStrBySplit); 141: trHtml += splitStrs[0]; 142: } 143: else 144: trHtml += $(this).html(); 145: trHtml += '
';
146: colIndex++;
147: });
148: trHtml += '
';
149: jqHeader.prepend(trHtml);
150: }
151:
152: //设置左侧头部HTML
153: setThs(gvData_header_left, gv_header_left, true);
154: //设置右侧头部HTML
155: setThs(gvData_header_right, gv_header_right, false);
156: // var gvData_Data_left = $('
');
157: var gvData_Data_left = $('
');
158: var gvData_Data_right = $('
');
159: gvData.find("tr:gt(0)").each(function (i) {
160: var tr = $(this);
161: var trLeft = tr.clone();
162: var trRight = tr.clone();
163: trLeft.find('td:gt(' + leftCols + ')').remove();
164: trRight.find('td:lt(' + rightCols + ')').remove();
165: colIndex = 0;
166: function setTrTds(tr_left, gvData_Data_left, tr_right, gvData_Data_right, trInfo) {
167: var trLeftHtml = '
';
173: var trRightHtml = trLeftHtml;
174: tr_left.find('td').each(function (j) {
175: trLeftHtml += '
' + $(this).html() + '
';
176: colIndex++;
177: });
178: tr_right.find('td').each(function (j) {
179: trRightHtml += '
' + $(this).html() + '
';
180: colIndex++;
181: });
182: trLeftHtml += '
'; trRightHtml += '
';
183: var jqLeftTrHrml = $(trLeftHtml); var jqRightTrHrml = $(trRightHtml);
184: if (options.rowClick !== undefined) {
185: jqLeftTrHrml.bind('click', { tds: trInfo.find('td'), rIndex: i, isLeft: true }, options.rowClick);
186: jqRightTrHrml.bind('click', { tds: trInfo.find('td'), rIndex: i, isLeft: false }, options.rowClick);
187: }
188: if (hoverRowStyle != '') {
189: jqLeftTrHrml.hover(function () { jqLeftTrHrml.addClass(hoverRowStyle); jqRightTrHrml.addClass(hoverRowStyle); }, function () { jqLeftTrHrml.removeClass(hoverRowStyle); jqRightTrHrml.removeClass(hoverRowStyle); });
190: jqRightTrHrml.hover(function () { jqLeftTrHrml.addClass(hoverRowStyle); jqRightTrHrml.addClass(hoverRowStyle); }, function () { jqLeftTrHrml.removeClass(hoverRowStyle); jqRightTrHrml.removeClass(hoverRowStyle); });
191: }
192: gvData_Data_left.append(jqLeftTrHrml);
193: gvData_Data_right.append(jqRightTrHrml);
194: }
195: setTrTds(trLeft, gvData_Data_left, trRight, gvData_Data_right, tr);
196: });
197: gv_data_left.prepend(gvData_Data_left);
198: gv_data_right.prepend(gvData_Data_right);
199: if (options.isHideGridView !== undefined && options.isHideGridView)
200: gvData.hide();
201: if (isRemoveGridView)
202: gvData.remove();
203: if (leftGroupCols != '' && rightGroupCols != '') {
204: dataAreaHeight -= 62;
205: colIndex = 0;
206: function calcGroupCol(groupCols) {
207: var groupThs = groupCols.find('.gv-div-th');
208: groupThs.each(function (i) {
209: var col_width = 0;
210: if ($(this).attr('colspan') !== undefined) {
211: var colSpan = parseInt($(this).attr('colspan'));
212: for (var i = 0; i < colSpan; i++) {
213: col_width += colsLengsArr[colIndex];
214: colIndex++;
215: }
216: col_width += (colSpan - 1);
217: }
218: else if ($(this).attr('rowspan') !== undefined) {
219: var rowspan = parseInt($(this).attr('rowspan'));
220: col_height = rowspan * 30 + (rowspan - 1);
221: $(this).height(col_height).css('border-bottom-style', 'none');
222: col_width = colsLengsArr[colIndex];
223: if (colIndex <= leftCols)
224: gv_header_left.find('.gv-div-th').eq(colIndex).html('').css('border-top-style', 'none');
225: else if (colIndex >= rightCols)
226: gv_header_right.find('.gv-div-th').eq(colIndex - lockColumns).html('').css('
你可能感兴趣的:(Extjs)
nextjs+react接口会请求两次?
解决Next.js+React接口重复请求问题在Next.js应用中,你可能会遇到API请求被发送两次的情况。以下是常见原因和解决方案:1.开发模式下StrictMode的影响原因Next.js默认启用React的StrictMode,在开发环境下会故意渲染两次组件以帮助发现潜在问题。解决方案//next.config.jsmodule.exports={reactStrictMode:false
nextjs学习笔记
ainuo5213
web前端框架学习 next react react服务端渲染 next入门
由于本人最近在学习jocky老师的React16.8+Next.js+Koa2开发Github全栈项目关于react的服务端重构项目,然后跟着老师的视频做笔记,记录下自己的所学知识。目录结构pages(必需):pages目录是nextjs中最终要的一个目录,这个目录的每一个文件都会对应到每一个页面,可以根据地址栏的路由进行跳转。若pages下的js文件在一个目录下,那么nextjs默认会将这个
nextjs+react项目如何代理本地请求解决跨域
啃火龙果的兔子
开发DEMO react.js 前端 前端框架
在Next.js+React项目中解决本地开发跨域问题,可以通过以下几种方式实现代理请求:方案1:使用Next.js内置的Rewrites功能(推荐)1.修改next.config.js/**@type{import('next').NextConfig}*/constnextConfig={asyncrewrites(){return[{source:'/api/:path*',//匹配所有/a
Next.js——app里有什么
just小千
Next javascript 开发语言 nextjs
前言说好不鸽,第二篇来的晚了一些,在了解完nextjs的基本情况后,接下来就进入正式开发阶段啦,这一部分以approuter为基础,如果有pagesrouter的小伙伴建议可以尝试下approuter,内容比较多,以官网为主,加上本人的理解,废话说完了,开始正题~ps:本节依旧假设域名是xiaoqian.bestapp文件夹里有什么上一篇文章里说了,nextjs中页面的路由就是根据app的目录自动
phpexcel 读取数据
http://extjs.org.cn/fatjames/archives/379require_once'/home/PHPExcel_1.8.0/PHPExcel/IOFactory.php';$reader=PHPExcel_IOFactory::createReader('Excel2007');//设置以Excel5格式(Excel97-2003工作簿)$PHPExcel=$reader
Java Web项目(Extjs)报错六
iteye_8264
java 数据库 开发工具
1、JavaWeb项目(Extjs)报错六具体报错如下:usage:javaorg.apache.catalina.startup.Catalina[-config{pathname}][-nonaming]{-help|start|stop}2014-3-2623:27:18org.apache.catalina.core.AprLifecycleListenerinit信息:LoadedAPR
解决nextjs开发模式修改内容渲染过慢问题
雅痞yuppie
react.js
Next.js开发模式启动速度优化建议针对Next.js开发模式启动慢的问题,这里提供几个优化方案:1.调整配置优化在你的next.config.js文件中可以尝试以下配置调整:constnextConfig:NextConfig={swcMinify:true,//保持开启,SWC比Babel更快reactStrictMode:false,//开发时可暂时关闭严格模式eslint:{ignore
Next.js 路由增强指南:nextjs-routes 使用教程
娄妃元Kacey
Next.js路由增强指南:nextjs-routes使用教程nextjs-routesTypesaferoutingforNext.js项目地址:https://gitcode.com/gh_mirrors/ne/nextjs-routes1.项目目录结构及介绍nextjs-routes是一个用于Next.js应用的类型安全路由库,它通过扫描你的pages目录来自动生成基于应用路线的类型定义。尽
Next.js 客户端认证架构项目教程
齐飞锴Timothea
Next.js客户端认证架构项目教程nextjs-client-auth-architecturesExamplearchitecturesfordetectingtheuser'sauthenticatedstateclient-sideinNext.jswhenusinganHttpOnlycookie项目地址:https://gitcode.com/gh_mirrors/ne/nextjs-
ExtJS4.0学习心得
☆平常心☆
学习笔记 extjs function header autoload border mvc
学习ExtJs4.0知识已有一个月的时间,结合模拟项目——资源池管理系统,谈一谈学习中碰到的问题,解决办法以及收获的经验,希望可以达到互相交流、学习、共成长的目的。ExtJs4.0不同于3.0版本的最重要改变是MVC模式的引入。本文也以MVC模式为切入点,开始介绍我的ExtJs4.0之旅。一、SSH框架搭建后台模拟项目采用了SSH搭建后台,数据库采用Oracle9i,前台可通过action将封装好
nextjs整合快速整合市面上各种AI进行prompt连调测试
diygwcom
人工智能
nextjs整合快速整合市面上各种AI进行prompt连调测试。这样写法只是我用来做测试。快速对比各种AI大模理效果.这里参数通过APIPOST进来import{OpenAIService}from'./openai.service';import{Controller,Post,Body,Param}from'@nestjs/common';import{jsonrepair}from'json
nexus-Maven仓库管理器&maven私服&打包方式
艾艾猫dori
springcloud maven
了解nexus:Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus使用ExtJS来开发界面,利用Restlet来提供完整的RESTAPIs,通过m2eclipse
Next.js 站点地图生成器教程
章雍宇
Next.js站点地图生成器教程nextjs-sitemap-generatorGeneratesitemap.xmlfromnextjspages项目地址:https://gitcode.com/gh_mirrors/ne/nextjs-sitemap-generator项目介绍nextjs-sitemap-generator是一个用于生成站点地图(sitemap)的开源工具,特别适用于使用Ne
Next.js Sitemap Generator 项目常见问题解决方案
袁耿浩
Next.jsSitemapGenerator项目常见问题解决方案nextjs-sitemap-generatorGeneratesitemap.xmlfromnextjspages项目地址:https://gitcode.com/gh_mirrors/ne/nextjs-sitemap-generator项目基础介绍Next.jsSitemapGenerator是一个为Next.js项目生成站点
Next.js Sitemap 生成器:为你的 Next.js 项目构建站点地图
颜钥杉Harriet
Next.jsSitemap生成器:为你的Next.js项目构建站点地图nextjs-sitemap-generatorGeneratesitemap.xmlfromnextjspages项目地址:https://gitcode.com/gh_mirrors/ne/nextjs-sitemap-generatorNext.jsSitemap生成器是一个开源项目,旨在帮助Next.js开发者轻松生成
nextjs create-react-app 兼容ie11
amazingbc
笔记 react.js webpack javascript
1.next.js兼容ie11nextjs自带对于ie11的兼容,所以自己的代码是能够兼容ie11的https://nextjs.org/docs/basic-features/supported-browsers-features,主要需要考虑第三方包中不兼容ie11的情况。针对没有兼容ie11的三方包,我们需要配置babel进行转换:a.nextjs提供了.bablerc.jshttps://
fastGPT—nextjs—mongoose—团队管理之团队列表api接口实现
慕斯策划一场流浪
前端 javascript 开发语言 fastgpt env文件配置 fastgpt团队列表接口实现 fastgpt团队切换api fastgpt团队切换逻辑
这里的逻辑是一个人可以在多个团队中,但在每个团队的角色有可能是不一样的,当一个人同时存在2个或者多个团队中时,下拉列表中会有多个团队详情,切换团队会查询不同的成员和部门。团队列表查询api实现代码:import{NextAPI}from'@/service/middleware/entry';importtype{NextApiRequest,NextApiResponse}from'next';
fastGPT—nextjs—mongoose—团队管理之成员增删改查api接口实现
慕斯策划一场流浪
前端 javascript vue.js nextjs mongoose fastgpt团队管理api
成员有三种状态,正常、离开、禁止对应active、leave、forbidden三种类型的值//成员删除importtype{NextApiRequest,NextApiResponse}from'next';import{NextAPI}from'@/service/middleware/entry';import{MongoTeamMember}from'@fastgpt/service/su
解决ExtJS 6/7无限滚动表格/列表(infinite: true)无法在触屏Windows浏览器上触摸滚动
神秘_博士
Sencha ExtJS 和 Touch js
ExtJS6或ExtJS7在Windows触屏电脑的浏览器上,配置了infinite:true的表格或列表,无法触摸滚动,而一般的可滚动容器(scrollable:true)可以正常滚动。这是因为,配置了infinite:true的表格或列表,使用的不是普通的可滚动容器(实际是带overflow-y:auto样式的div),而是Ext.scroll.VirtualScroller,这个容器是监听t
fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
慕斯策划一场流浪
前端 javascript html fastGPT部门创建 fastGPT团队管理 fastGPT部门成员更新 fastGPT部门成员创建
创建部门或者子部门importtype{NextApiRequest,NextApiResponse}from'next';import{NextAPI}from'@/service/middleware/entry';import{MongoOrgModel}from'@fastgpt/service/support/permission/org/orgSchema';asyncfunction
nextjs系列教程(三):pages和路由
HarryDeveloper
# nextjs合集 javascript 前端 react.js
Pages页面用法1.1概念介绍在Next.js中,一个page(页面)就是一个从.js、jsx、.ts或.tsx文件导出(export)的React组件,这些文件存放在pages目录下。每个page(页面)都使用其文件名作为路由(route)。1.2创建page页面如果你创建了一个命名为pages/about.jsx的文件并导出(export)一个如下所示的React组件,则可以通过/about
nextjs 路由
猪猪宝儿姐
react native
1.官网路由介绍nextjs路由next项目的路由默认为page下面的文件生成对应的路由。http://localhost:3000/代表的/page/index.tsx.http://localhost:3000/demo指的是page-->demo-->index.tsx文件。2.动态路由在Next.js中,您可以将括号添加到页面([param])以创建动态路由(也称为urlslugs、pre
深度解读:NextJS、Vercel与Cloudflare之间的恩怨情仇
后端
深度解读:NextJS、Vercel与Cloudflare之间的恩怨情仇最近,科技圈一条推文引发热议。推文作者对NextJS生态圈的几个热点话题做出了中肯的分析,让我们一起来看看这个复杂的技术世界里究竟发生了什么。一条引发热议的推文有网友发推表示:"Dax能够同时戴着巨魔帽并保持平衡的能力值得研究。"这句话乍看有点莫名其妙,但实际上揭示了技术社区中一个有趣的现象:如何在保持专业性的同时,又能让技术
一文快速掌握前端框架Nextjs
祎程
前端框架 nextjs
文章脑图1.引言在现代web开发中,React已经成为构建用户界面(UI)的热门选择,但当谈到从头到尾完成一个应用时,开发者常常会遇到一些挑战。这就是Next.js这个框架应运而生的原因。Next.js是一个基于React的框架,致力于提供高效的开发体验和出色的性能表现,使得构建复杂的应用变得更加简单和灵活。什么是Next.js?Next.js是一个开源的React应用框架,由Vercel(前身为
1.NextJS基础
comochris
cc的全栈之路 javascript 前端
NextJS注意要点文件用来定义路由,foldernamebecomestheroutename注意区分客户端渲染和服务器渲染html渲染完成后给到客户端(此时网页内容已经全部提供),有利于crawler和优化seo逻辑更简单requestdeduplication减少API请求可以对比如下两份代码//客户端渲染importReact,{useEffect,useState}from"react"
NextJS CVE-2025-29927 安全漏洞
NextJSCVE-2025-29927安全漏洞CVE-2025-29927是一个存在于Next.js框架中的关键安全漏洞。该漏洞允许攻击者通过伪造或篡改x-middleware-subrequest请求头,绕过中间件(Middleware)的安全检查,从而访问到原本受保护的路由或API,进而导致授权绕过(AuthorizationBypass)以及潜在的更深层次安全风险。本篇文章将对漏洞成因、受
nextjs 实现rag知识库检索增强的ai问答app
*goliter *
web开发学习 人工智能
AI-Chat-一个基于LLM大语言模型的知识库问答系统项目源码:https://github.com/goliter/ai-chat项目简介AI-Chat是一个基于Next.js和React开发的现代化大语言模型的知识库问答系统。该平台提供了简易的对话界面,支持上传文件进行知识库的构建,让用户在与大语言模型进行问答时给与大模型知识库内的相关内容。主要功能上传文件构建属于自己的知识库支持doc,t
Next.js博客项目-快速起步
Ktovoz
nextjs javascript 开发语言 react 前端
作者:KTO原文:Next.js博客项目-快速起步简介:从nextjs博客模板开始,快速配置搭建自己的博客项目。部署出来的网站样式可以参考原文的网站。Next.js博客项目-快速起步使用的模板我们使用的模板是:tailwind-nextjs-starter-blog该模板有1.0版本和2.0版本。本文以1.0版本为例进行介绍。1.环境配置安装Node.js首先,确保你的机器上已安装Node.js。
关于Jquery基本内容一
gloria123_
jquery 前端 javascript
jQuery(jQ)html+css+js1jQ是一个js库,封装了大量的特定的集合(函数和方法)如animate()、css()、show()等2使用jQ大大提高开发效率,简化dom操作常见的js库jQueryYUIDojoExtJszeptojQuery选择器$(selector)筛选方法parent()$(“li”).parent()children(selector)$(“ul”).chi
探索未来SaaS开发的新范式:AWS + React SaaS 模板
潘俭渝Erik
探索未来SaaS开发的新范式:AWS+ReactSaaS模板saas-templateSaaStemplateforAWS,Amplify,React,NextJSandChakra项目地址:https://gitcode.com/gh_mirrors/sa/saas-template在快速发展的科技领域中,高效、可靠的SaaS(Software-as-a-Service)开发框架是创新者的得力工
312个免费高速HTTP代理IP(能隐藏自己真实IP地址)
yangshangchuan
高速 免费 superword HTTP代理
124.88.67.20:843
190.36.223.93:8080
117.147.221.38:8123
122.228.92.103:3128
183.247.211.159:8123
124.88.67.35:81
112.18.51.167:8123
218.28.96.39:3128
49.94.160.198:3128
183.20
pull解析和json编码
百合不是茶
android pull解析 json
n.json文件:
[{name:java,lan:c++,age:17},{name:android,lan:java,age:8}]
pull.xml文件
<?xml version="1.0" encoding="utf-8"?>
<stu>
<name>java
[能源与矿产]石油与地球生态系统
comsci
能源
按照苏联的科学界的说法,石油并非是远古的生物残骸的演变产物,而是一种可以由某些特殊地质结构和物理条件生产出来的东西,也就是说,石油是可以自增长的....
那么我们做一个猜想: 石油好像是地球的体液,我们地球具有自动产生石油的某种机制,只要我们不过量开采石油,并保护好
类与对象浅谈
沐刃青蛟
java 基础
类,字面理解,便是同一种事物的总称,比如人类,是对世界上所有人的一个总称。而对象,便是类的具体化,实例化,是一个具体事物,比如张飞这个人,就是人类的一个对象。但要注意的是:张飞这个人是对象,而不是张飞,张飞只是他这个人的名字,是他的属性而已。而一个类中包含了属性和方法这两兄弟,他们分别用来描述对象的行为和性质(感觉应该是
新站开始被收录后,我们应该做什么?
IT独行者
PHP seo
新站开始被收录后,我们应该做什么?
百度终于开始收录自己的网站了,作为站长,你是不是觉得那一刻很有成就感呢,同时,你是不是又很茫然,不知道下一步该做什么了?至少我当初就是这样,在这里和大家一份分享一下新站收录后,我们要做哪些工作。
至于如何让百度快速收录自己的网站,可以参考我之前的帖子《新站让百
oracle 连接碰到的问题
文强chu
oracle
Unable to find a java Virtual Machine--安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案
作者:草根IT网 来源:未知 人气:813标签:
导读:安装64位版Oracle11gR2后发现启动SQLDeveloper时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\prod
Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)
小桔子
java 继承 swing 接口 监听
都知道java中类只能单继承,但可以实现多个接口,但我发现实现多个接口之后,多个接口却不能共享同一个数据,应用开发中想实现:当用户按着ctrl键时,可以用鼠标点击拖动组件,比如说文本框。
编写一个监听实现KeyListener,NouseListener,MouseMotionListener三个接口,重写方法。定义一个全局变量boolea
linux常用的命令
aichenglong
linux 常用命令
1 startx切换到图形化界面
2 man命令:查看帮助信息
man 需要查看的命令,man命令提供了大量的帮助信息,一般可以分成4个部分
name:对命令的简单说明
synopsis:命令的使用格式说明
description:命令的详细说明信息
options:命令的各项说明
3 date:显示时间
语法:date [OPTION]... [+FORMAT]
eclipse内存优化
AILIKES
java eclipse jvm jdk
一 基本说明 在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。 1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人
关键字的使用探讨
百合不是茶
关键字
//关键字的使用探讨/*访问关键词private 只能在本类中访问public 只能在本工程中访问protected 只能在包中和子类中访问默认的 只能在包中访问*//*final 类 方法 变量 final 类 不能被继承 final 方法 不能被子类覆盖,但可以继承 final 变量 只能有一次赋值,赋值后不能改变 final 不能用来修饰构造方法*///this()
JS中定义对象的几种方式
bijian1013
js
1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象):
<html>
<head>
<title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title>
</head>
<script>
var obj = new Object();
表驱动法实例
bijian1013
java 表驱动法 TDD
获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下:
MonthDaysTest.java
package com.study.test;
import org.junit.Assert;
import org.junit.Test;
import com.study.MonthDays;
public class MonthDaysTest {
@T
LInux启停重启常用服务器的脚本
bit1129
linux
启动,停止和重启常用服务器的Bash脚本,对于每个服务器,需要根据实际的安装路径做相应的修改
#! /bin/bash
Servers=(Apache2, Nginx, Resin, Tomcat, Couchbase, SVN, ActiveMQ, Mongo);
Ops=(Start, Stop, Restart);
currentDir=$(pwd);
echo
【HBase六】REST操作HBase
bit1129
hbase
HBase提供了REST风格的服务方便查看HBase集群的信息,以及执行增删改查操作
1. 启动和停止HBase REST 服务 1.1 启动REST服务
前台启动(默认端口号8080)
[hadoop@hadoop bin]$ ./hbase rest start
后台启动
hbase-daemon.sh start rest
启动时指定
大话zabbix 3.0设计假设
ronin47
What’s new in Zabbix 2.0?
去年开始使用Zabbix的时候,是1.8.X的版本,今年Zabbix已经跨入了2.0的时代。看了2.0的release notes,和performance相关的有下面几个:
:: Performance improvements::Trigger related da
http错误码大全
byalias
http协议 javaweb
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。
响应码分五种类型,由它们的第一位数字表示:
1)1xx:信息,请求收到,继续处理
2)2xx:成功,行为被成功地接受、理解和采纳
3)3xx:重定向,为了完成请求,必须进一步执行的动作
4)4xx:客户端错误,请求包含语法错误或者请求无法实现
5)5xx:服务器错误,服务器不能实现一种明显无效的请求
J2EE设计模式-Intercepting Filter
bylijinnan
java 设计模式 数据结构
Intercepting Filter类似于职责链模式
有两种实现
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下:
package com.ljn.filter.custom;
import java.util.ArrayList;
修改jboss端口
chicony
jboss
修改jboss端口
%JBOSS_HOME%\server\{服务实例名}\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml
中找到
<!-- The ports-default bindings are obtained by taking the base bindin
c++ 用类模版实现数组类
CrazyMizzz
C++
最近c++学到数组类,写了代码将他实现,基本具有vector类的功能
#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
//构造函数
hadoop dfs.datanode.du.reserved 预留空间配置方法
daizj
hadoop 预留空间
对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置
<property>
<name>dfs.datanode.du.reserved</name>
<value>10737418240</value>
 
mysql远程访问的设置
dcj3sjt126com
mysql 防火墙
第一步: 激活网络设置 你需要编辑mysql配置文件my.cnf. 通常状况,my.cnf放置于在以下目录: /etc/mysql/my.cnf (Debian linux) /etc/my.cnf (Red Hat Linux/Fedora Linux) /var/db/mysql/my.cnf (FreeBSD) 然后用vi编辑my.cnf,修改内容从以下行: [mysqld] 你所需要: 1
ios 使用特定的popToViewController返回到相应的Controller
dcj3sjt126com
controller
1、取navigationCtroller中的Controllers
NSArray * ctrlArray = self.navigationController.viewControllers;
2、取出后,执行,
[self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES
Linux正则表达式和通配符的区别
eksliang
正则表达式 通配符和正则表达式的区别 通配符
转载请出自出处:http://eksliang.iteye.com/blog/1976579
首先得明白二者是截然不同的
通配符只能用在shell命令中,用来处理字符串的的匹配。
判断一个命令是否为bash shell(linux 默认的shell)的内置命令
type -t commad
返回结果含义
file 表示为外部命令
alias 表示该
Ubuntu Mysql Install and CONF
gengzg
Install
http://www.navicat.com.cn/download/navicat-for-mysql
Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html
Step2:进入下载目录,解压压缩包:tar -zxvf navicat11_mysql_en.tar.gz
批处理,删除文件bat
huqiji
windows dos
@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
跨浏览器兼容的HTML5视频音频播放器
天梯梦
html5
HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件。而html5media.js可以在不支持html5的浏览器上使video和audio标签生效。 How to enable <video> and <audio> tags in
Bundle自定义数据传递
hm4123660
android Serializable 自定义数据传递 Bundle Parcelable
我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity
把数据放到Intent
C#:异步编程和线程的使用(.NET 4.5 )
powertoolsteam
.net 线程 C# 异步编程
异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。
本文中涉及关键知识点
1. 异步编程
2. 线程的使用
3. 基于任务的异步模式
4. 并行编程
5. 总结
异步编程
什么是异步操作?异步操作是指某些操作能够独立运行,不依赖主流程或主其他处理流程。通常情况下,C#程序
spark 查看 job history 日志
Stark_Summer
日志 spark history job
SPARK_HOME/conf 下:
spark-defaults.conf 增加如下内容
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/var/log/spark spark.eventLog.compress true
spark-env.sh 增加如下内容
export SP
SSH框架搭建
wangxiukai2015eye
spring Hibernate struts
MyEclipse搭建SSH框架 Struts Spring Hibernate
1、new一个web project。
2、右键项目,为项目添加Struts支持。
选择Struts2 Core Libraries -<MyEclipes-Library>
点击Finish。src目录下多了struts