• });
  • $("#menu").html(htmlstr);
  • }
  • })
  • })
  • /**
  • * 1.查找layui的选项卡页面布局代码
  • 2.动态的添加选项卡
  • 3.将选项卡名称换成菜单名
  • 4.重复的tab选项卡不添加,改为选中
  • 5.跳转页面
  • */
  • function openTabs(title,url,id){
  • let $node = $("li[lay-id='"+id+"']");
  • if($node.length == 0){
  • // 新增一个Tab项
  • element.tabAdd('demo', {
  • title : title,//用于演示
  • content : "",
  • id : id
  • })
  • }
  • //切换到指定选项卡
  • element.tabChange('demo', id);
  • }
  • script>
  • body>
  • html>
  • 界面修改展示:点用户管理会展示用户名,文本框,查询按钮以及新增按钮

    查询 dao方法

    查询数据库中的数据

     sql语句:

    select * 
    ,(case rid 
    when 1 then '管理员'
    when 2 then '发起者'
    when 3 then '审批者'
    when 4 then '参与者'
    when 5 then '会议室管理员'
    else '其他'end 
    )roleName

    from t_oa_user

    dao方法:

     查询的dao源代码:

    1. //查询用户信息及对应的角色,角色是通过case when得来的
    2. public List> list(User user,PageBean pageBean) throws Exception{
    3. String sql ="select * \r\n" +
    4. ",(case rid \r\n" +
    5. "when 1 then '管理员' \r\n" +
    6. "when 2 then '发起者' \r\n" +
    7. "when 3 then '审批者' \r\n" +
    8. "when 4 then '参与者' \r\n" +
    9. "when 5 then '会议室管理员' \r\n" +
    10. "else '其他'end \r\n" +
    11. ")roleName\r\n" +
    12. "\r\n" +
    13. "from t_oa_user where 1=1 ";
    14. String name = user.getName();
    15. if(StringUtils.isNotBlank(name)) {
    16. sql+="and name like '%"+name+"%'";
    17. }
    18. return super.executeQuery(sql, pageBean);
    19. }

    查询到方法测试类:

     

     

    查询测试 代码:

    1. @Test
    2. public void testList() {
    3. User user = new User();
    4. PageBean pageBean = new PageBean();
    5. try {
    6. List> list = userDao.list(user, pageBean);
    7. for(Map map:list) {
    8. System.out.println(map);
    9. }
    10. } catch (Exception e) {
    11. // TODO Auto-generated catch block
    12. e.printStackTrace();
    13. }
    14. }

    运行结果展示:

     所运行出来的数据就是数据库里面所存储的数据,如果有表示查询方法没有问题

    action代码

    1. //用户查询
    2. public String list(HttpServletRequest req,HttpServletResponse resp) {
    3. try {
    4. PageBean pageBean = new PageBean();
    5. pageBean.setRequest(req);
    6. List> users = userdao.list(user, pageBean);
    7. //注意:layui中的数据的格式
    8. ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询成功",pageBean.getTotal(),users));
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. try {
    12. ResponseUtil.writeJson(resp,R.error(0, "用户数据查询失败"));
    13. } catch (Exception e1) {
    14. e1.printStackTrace();
    15. }
    16. }
    17. return null;
    18. }

    js代码:

    1. //1.初始化数据表格
    2. function initTable(){
    3. table.render({ //执行渲染
    4. elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
    5. // url: 'user.action?methodName=list', //请求地址
    6. height: 340, //自定义高度
    7. loading: false, //是否显示加载条(默认 true)
    8. cols: [[ //设置表头
    9. {field: 'id', title: '用户编号', width: 120},
    10. {field: 'name', title: '用户名', width: 120},
    11. {field: 'loginName', title: '登录账号', width: 140},
    12. {field: '', title: '操作', width: 220,toolbar:'#toolbar'},
    13. ]]
    14. });
    15. }
    1. //2.点击查询
    2. function query(){
    3. table.reload('tb', {
    4. url: $("#ctx").val()+'/user.action', //请求地址
    5. method: 'POST', //请求方式,GET或者POST
    6. loading: true, //是否显示加载条(默认 true)
    7. page: true, //是否分页
    8. where: { //设定异步数据接口的额外参数,任意设
    9. 'methodName':'list',
    10. 'name':$('#name').val()
    11. },
    12. request: { //自定义分页请求参数名
    13. pageName: 'page', //页码的参数名称,默认:page
    14. limitName: 'rows' //每页数据量的参数名,默认:limit
    15. }
    16. });
    17. }

    上面都完成了就可以进行模糊查询了

    2.增加 

            增加的dao方法:

    1. //增加
    2. public int add(User user) throws Exception{
    3. String sql = "insert into t_oa_user(name,loginName,pwd) values(?,?,?)";
    4. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});
    5. }

    增加dao方法测试:

     运行结果显示1,就可以去数据库查看是否增加了冰冰

     增加成功,数据库也查询到冰冰,说明增加的dao 方法没有问题

     增加action代码:

    1. //用户增加
    2. public String add(HttpServletRequest req,HttpServletResponse resp) {
    3. try {
    4. //影响行数
    5. int rs = userdao.add(user);
    6. if(rs>0) {
    7. ResponseUtil.writeJson(resp, R.ok(200, "用户数据新增成功"));
    8. }
    9. else {
    10. ResponseUtil.writeJson(resp,R.error(0, "用户数据新增失败"));
    11. }
    12. } catch (Exception e) {
    13. e.printStackTrace();
    14. try {
    15. ResponseUtil.writeJson(resp,R.error(0, "用户数据新增失败"));
    16. } catch (Exception e1) {
    17. e1.printStackTrace();
    18. }
    19. }
    20. return null;
    21. }

    js代码:

    1. let layer,$,table;
    2. var row;
    3. layui.use(['jquery', 'layer', 'table'], function(){
    4. layer = layui.layer
    5. ,$ = layui.jquery
    6. ,table = layui.table;
    7. //初始化数据表格
    8. initTable();
    9. //绑定查询按钮的点击事件
    10. $('#btn_search').click(function(){
    11. query();
    12. });
    13. //绑定新增按钮的点击事件
    14. $('#btn_add').click(function(){
    15. row=null;
    16. open('新增');
    17. });
    18. });
    19. //1.初始化数据表格
    20. function initTable(){
    21. table.render({ //执行渲染
    22. elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
    23. url: 'user.action?methodName=list', //请求地址
    24. height: 340, //自定义高度
    25. loading: false, //是否显示加载条(默认 true)
    26. cols: [[ //设置表头
    27. {field: 'id', title: '用户编号', width: 120},
    28. {field: 'name', title: '用户名', width: 120},
    29. {field: 'loginName', title: '登录账号', width: 140},
    30. {field: '', title: '操作', width: 220,toolbar:'#toolbar'},
    31. ]]
    32. });
    33. //在页面中的中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    34. table.on('tool(tb)', function (obj) {
    35. row = obj.data;
    36. if (obj.event == "edit") {
    37. open("编辑");
    38. }else if(obj.event == "del"){
    39. layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
    40. $.post($("#ctx").val()+'/user.action',{
    41. 'methodName':'del',
    42. 'id':row.id
    43. },function(rs){
    44. if(rs.success){
    45. //调用查询方法刷新数据
    46. query();
    47. }else{
    48. layer.msg(rs.msg,function(){});
    49. }
    50. },'json');
    51. layer.close(index);
    52. });
    53. }else{
    54. }
    55. });
    56. }
    57. //2.点击查询
    58. function query(){
    59. // console.log($("#ctx").val());
    60. table.reload('tb', {
    61. url: $("#ctx").val()+'/user.action', //请求地址
    62. method: 'POST', //请求方式,GET或者POST
    63. loading: true, //是否显示加载条(默认 true)
    64. page: true, //是否分页
    65. where: { //设定异步数据接口的额外参数,任意设
    66. 'methodName':'list',
    67. 'name':$('#name').val()
    68. },
    69. request: { //自定义分页请求参数名
    70. pageName: 'page', //页码的参数名称,默认:page
    71. limitName: 'rows' //每页数据量的参数名,默认:limit
    72. }
    73. });
    74. }
    75. //3.对话框
    76. function open(title){
    77. layer.open({
    78. type: 2, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    79. title:title,
    80. area: ['660px', '340px'], //宽高
    81. skin: 'layui-layer-rim', //样式类名
    82. content: $("#ctx").val()+'/jsp/system/userEdit.jsp', //书本编辑页面
    83. btn:['保存','关闭','批量新增'],
    84. yes: function(index, layero){
    85. //jquery.find
    86. //调用子页面中提供的getData方法,快速获取子页面的form表单数据
    87. let data= $(layero).find("iframe")[0].contentWindow.getData();
    88. console.log(data);
    89. //判断title标题
    90. let methodName="add";
    91. if(title=="编辑")
    92. methodName="edit";
    93. $.post($("#ctx").val()+'/user.action?methodName='+methodName,
    94. data,function(rs){
    95. if(rs.success){
    96. //关闭对话框
    97. layer.closeAll();
    98. //调用查询方法刷新数据
    99. query();
    100. }else{
    101. layer.msg(rs.msg,function(){});
    102. }
    103. },'json');
    104. },
    105. btn2: function(index, layero){
    106. layer.closeAll();
    107. },
    108. btn3: function(index, layero){
    109. layer.msg("批量新增");
    110. return false;
    111. },
    112. btn4: function(index, layero){
    113. layer.closeAll("批量新增碎冰冰");
    114. }
    115. });
    116. }
    117. 界面运行效果展示:点击新增按钮会弹出一个模态框

        

      3修改

              修改的dao方法:

      1. //修改
      2. public int edit(User user) throws Exception{
      3. String sql = "update t_oa_user set name=?,loginName=?,pwd=? where id = ?";
      4. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});
      5. }

      修改dao测试类:

       修改成功

       修改action代码:

      1. //用户修改
      2. public String edit(HttpServletRequest req,HttpServletResponse resp) {
      3. try {
      4. //影响行数
      5. int rs = userdao.edit(user);
      6. if(rs>0) {
      7. ResponseUtil.writeJson(resp, R.ok(200, "用户数据修改成功"));
      8. }
      9. else {
      10. ResponseUtil.writeJson(resp,R.error(0, "用户数据修改失败"));
      11. }
      12. } catch (Exception e) {
      13. e.printStackTrace();
      14. try {
      15. ResponseUtil.writeJson(resp,R.error(0, "用户数据修改失败"));
      16. } catch (Exception e1) {
      17. e1.printStackTrace();
      18. }
      19. }
      20. return null;
      21. }

      js代码:

      1. let layer,form,$;
      2. layui.use(['layer','form','jquery'],function(){
      3. layer=layui.layer,form=layui.form,$=layui.jquery;
      4. initData();
      5. });
      6. function initData(){
      7. console.log(parent.row);
      8. if(null!=parent.row){
      9. //因为layui.each内部的逻辑问题导致的所以要先深拷贝一份然后再去val
      10. //parent.row:表格行对象
      11. //table的数据在父页面userManager.js
      12. //点击编辑按钮的时候,当前
      13. form.val('user',$.extend({}, parent.row||{}));
      14. $('#name').attr('readonly','readonly');
      15. }
      16. }
      17. function getData(){
      18. //
      19. //取 user from中的值
      20. return form.val('user');
      21. }

      4.删除

      删除的dao方法:

      1. //删除
      2. public int del(User user) throws Exception{
      3. String sql = "delete from t_oa_user where id=?";
      4. return super.executeUpdate(sql, user, new String[] {"id"});
      5. }

      删除的dao方法测试:

      运行结果为1,去数据库查询

       

      删除成功,没有冰冰怕热这个用户了,什么我们的删除的dao方法没有问题 

       

      删除action代码:

      1. //用户删除
      2. public String del(HttpServletRequest req,HttpServletResponse resp) {
      3. try {
      4. //影响行数
      5. int rs = userdao.del(user);
      6. if(rs>0) {
      7. ResponseUtil.writeJson(resp, R.ok(200, "用户数据删除成功"));
      8. }
      9. else {
      10. ResponseUtil.writeJson(resp,R.error(0, "用户数据删除失败"));
      11. }
      12. } catch (Exception e) {
      13. e.printStackTrace();
      14. try {
      15. ResponseUtil.writeJson(resp,R.error(0, "用户数据删除失败"));
      16. } catch (Exception e1) {
      17. e1.printStackTrace();
      18. }
      19. }
      20. return null;
      21. }

      js代码:

      1. //在页面中的
      中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    118. table.on('tool(tb)', function (obj) {
    119. row = obj.data;
    120. if (obj.event == "edit") {
    121. open("编辑");
    122. }else if(obj.event == "del"){
    123. layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
    124. $.post($("#ctx").val()+'/user.action',{
    125. 'methodName':'del',
    126. 'id':row.id
    127. },function(rs){
    128. if(rs.success){
    129. //调用查询方法刷新数据
    130. query();
    131. }else{
    132. layer.msg(rs.msg,function(){});
    133. }
    134. },'json');
    135. layer.close(index);
    136. });
    137. }else{
    138. }
    139. });
    140. 界面效果:

       5.完整代码

      userManage.jsp

      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
      2. pageEncoding="UTF-8"%>
      3. <%@ include file="/common/header.jsp" %>
      4. <html>
      5. <head>
      6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      7. <script src="static/js/system/userManage.js">script>
      8. <title>Insert title heretitle>
      9. head>
      10. <body>
      11. <div class="layui-form-item">
      12. <div class="layui-inline">
      13. <label class="layui-form-label">用户名:label>
      14. <div class="layui-input-inline">
      15. <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
      16. div>
      17. div>
      18. <div class="layui-inline">
      19. <div class="layui-input-inline">
      20. <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
      21. <i class="layui-icon layui-icon-search">i>
      22. 查询
      23. button>
      24. <button id="btn_add" type="button" class="layui-btn">新增button>
      25. div>
      26. div>
      27. div>
      28. <table id="tb" lay-filter="tb" class="layui-table" style="margin-top:-15px;">table>
      29. <script type="text/html" id="toolbar">
      30. <button class="layui-btn layui-btn-sm" lay-event="edit">编辑button>
      31. <button class="layui-btn layui-btn-sm" lay-event="del">删除button>
      32. <button class="layui-btn layui-btn-sm" lay-event="reset">重置密码button>
      33. script>
      34. <script type="text/html" id="barDemo">
      35. <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看a>
      36. <a class="layui-btn layui-btn-xs" lay-event="edit">编辑a>
      37. <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除a>
      38. script>
      39. <script src="//res.layui.com/layui/dist/layui.js" charset="utf-8">script>
      40. <script>
      41. layui.use('table', function(){
      42. var table = layui.table;
      43. //监听表格复选框选择
      44. table.on('checkbox(demo)', function(obj){
      45. console.log(obj)
      46. });
      47. //监听工具条
      48. table.on('tool(demo)', function(obj){
      49. var data = obj.data;
      50. if(obj.event === 'detail'){
      51. layer.msg('ID:'+ data.id + ' 的查看操作');
      52. } else if(obj.event === 'del'){
      53. layer.confirm('真的删除行么', function(index){
      54. obj.del();
      55. layer.close(index);
      56. });
      57. } else if(obj.event === 'edit'){
      58. layer.alert('编辑行:
        '
        + JSON.stringify(data))
      59. }
      60. });
      61. var $ = layui.$, active = {
      62. getCheckData: function(){ //获取选中数据
      63. var checkStatus = table.checkStatus('idTest')
      64. ,data = checkStatus.data;
      65. layer.alert(JSON.stringify(data));
      66. }
      67. ,getCheckLength: function(){ //获取选中数目
      68. var checkStatus = table.checkStatus('idTest')
      69. ,data = checkStatus.data;
      70. layer.msg('选中了:'+ data.length + ' 个');
      71. }
      72. ,isAll: function(){ //验证是否全选
      73. var checkStatus = table.checkStatus('idTest');
      74. layer.msg(checkStatus.isAll ? '全选': '未全选')
      75. }
      76. };
      77. $('.demoTable .layui-btn').on('click', function(){
      78. var type = $(this).data('type');
      79. active[type] ? active[type].call(this) : '';
      80. });
      81. });
      82. layer.open({
      83. title: '在线调试'
      84. ,content: '可以填写任意的layer代码'
      85. });
      86. script>
      87. body>
      88. html>

      userManage.js

      1. let layer,$,table;
      2. var row;
      3. layui.use(['jquery', 'layer', 'table'], function(){
      4. layer = layui.layer
      5. ,$ = layui.jquery
      6. ,table = layui.table;
      7. //初始化数据表格
      8. initTable();
      9. //绑定查询按钮的点击事件
      10. $('#btn_search').click(function(){
      11. query();
      12. });
      13. //绑定新增按钮的点击事件
      14. $('#btn_add').click(function(){
      15. row=null;
      16. open('新增');
      17. });
      18. });
      19. //1.初始化数据表格
      20. function initTable(){
      21. table.render({ //执行渲染
      22. elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
      23. url: 'user.action?methodName=list', //请求地址
      24. height: 340, //自定义高度
      25. loading: false, //是否显示加载条(默认 true)
      26. cols: [[ //设置表头
      27. {field: 'id', title: '用户编号', width: 120},
      28. {field: 'name', title: '用户名', width: 120},
      29. {field: 'loginName', title: '登录账号', width: 140},
      30. {field: '', title: '操作', width: 220,toolbar:'#toolbar'},
      31. ]]
      32. });
      33. //在页面中的
      中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    141. table.on('tool(tb)', function (obj) {
    142. row = obj.data;
    143. if (obj.event == "edit") {
    144. open("编辑");
    145. }else if(obj.event == "del"){
    146. layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
    147. $.post($("#ctx").val()+'/user.action',{
    148. 'methodName':'del',
    149. 'id':row.id
    150. },function(rs){
    151. if(rs.success){
    152. //调用查询方法刷新数据
    153. query();
    154. }else{
    155. layer.msg(rs.msg,function(){});
    156. }
    157. },'json');
    158. layer.close(index);
    159. });
    160. }else{
    161. }
    162. });
    163. }
    164. //2.点击查询
    165. function query(){
    166. // console.log($("#ctx").val());
    167. table.reload('tb', {
    168. url: $("#ctx").val()+'/user.action', //请求地址
    169. method: 'POST', //请求方式,GET或者POST
    170. loading: true, //是否显示加载条(默认 true)
    171. page: true, //是否分页
    172. where: { //设定异步数据接口的额外参数,任意设
    173. 'methodName':'list',
    174. 'name':$('#name').val()
    175. },
    176. request: { //自定义分页请求参数名
    177. pageName: 'page', //页码的参数名称,默认:page
    178. limitName: 'rows' //每页数据量的参数名,默认:limit
    179. }
    180. });
    181. }
    182. //3.对话框
    183. function open(title){
    184. layer.open({
    185. type: 2, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    186. title:title,
    187. area: ['660px', '340px'], //宽高
    188. skin: 'layui-layer-rim', //样式类名
    189. content: $("#ctx").val()+'/jsp/system/userEdit.jsp', //书本编辑页面
    190. btn:['保存','关闭','批量新增'],
    191. yes: function(index, layero){
    192. //jquery.find
    193. //调用子页面中提供的getData方法,快速获取子页面的form表单数据
    194. let data= $(layero).find("iframe")[0].contentWindow.getData();
    195. console.log(data);
    196. //判断title标题
    197. let methodName="add";
    198. if(title=="编辑")
    199. methodName="edit";
    200. $.post($("#ctx").val()+'/user.action?methodName='+methodName,
    201. data,function(rs){
    202. if(rs.success){
    203. //关闭对话框
    204. layer.closeAll();
    205. //调用查询方法刷新数据
    206. query();
    207. }else{
    208. layer.msg(rs.msg,function(){});
    209. }
    210. },'json');
    211. },
    212. btn2: function(index, layero){
    213. layer.closeAll();
    214. },
    215. btn3: function(index, layero){
    216. layer.msg("批量新增");
    217. return false;
    218. },
    219. btn4: function(index, layero){
    220. layer.closeAll("批量新增碎冰冰");
    221. }
    222. });
    223. }
    224. userEdit.js

      1. let layer,form,$;
      2. layui.use(['layer','form','jquery'],function(){
      3. layer=layui.layer,form=layui.form,$=layui.jquery;
      4. initData();
      5. });
      6. function initData(){
      7. console.log(parent.row);
      8. if(null!=parent.row){
      9. //因为layui.each内部的逻辑问题导致的所以要先深拷贝一份然后再去val
      10. //parent.row:表格行对象
      11. //table的数据在父页面userManager.js
      12. //点击编辑按钮的时候,当前行赋值给子界面userEdit.jsp
      13. form.val('user',$.extend({}, parent.row||{}));
      14. $('#name').attr('readonly','readonly');
      15. }
      16. }
      17. function getData(){
      18. //
      19. //取 user from中的值
      20. return form.val('user');
      21. }

      userEdit.jsp

      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
      2. pageEncoding="UTF-8"%>
      3. <%@include file="/common/header.jsp"%>
      4. html>
      5. <html>
      6. <head>
      7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      8. <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/system/userEdit.js">script>
      9. <title>用户新增title>
      10. head>
      11. <style>
      12. .layui-form-select dl{
      13. max-height:150px;
      14. }
      15. style>
      16. <body>
      17. <div style="padding:10px;">
      18. <form class="layui-form layui-form-pane" lay-filter="user">
      19. <input type="hidden" name="id"/>
      20. <div class="layui-form-item">
      21. <label class="layui-form-label">用户名称label>
      22. <div class="layui-input-block">
      23. <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
      24. div>
      25. div>
      26. <div class="layui-form-item">
      27. <label class="layui-form-label">用户角色label>
      28. <div class="layui-input-block">
      29. <select name="rid">
      30. <option value="">---请选择---option>
      31. <option value="1">管理员option>
      32. <option value="2">发起者option>
      33. <option value="3">审批者option>
      34. <option value="4">参与者option>
      35. <option value="5">会议管理员option>
      36. select>
      37. div>
      38. div>
      39. <div class="layui-form-item">
      40. <label class="layui-form-label">登录账号label>
      41. <div class="layui-input-block">
      42. <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
      43. div>
      44. div>
      45. <div class="layui-form-item">
      46. <label class="layui-form-label">登录密码label>
      47. <div class="layui-input-block">
      48. <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
      49. div>
      50. div>
      51. form>
      52. div>
      53. body>
      54. html>

    225. 相关阅读:
      【Android】Bugly使用
      苍穹外卖集成 Apache POI Java实现Excel文件的读写下载
      python爬虫实战之异步爬取数据
      Android源码——SparseArray源码解析
      idea 本地项目上传到 Git 步骤
      CVPR2020:Seeing Through Fog Without Seeing Fog
      专注效率提升「GitHub 热点速览 v.22.36」
      【Flutter】三个Channel(Android-java / Ios-swift)
      win7升级到win10系统后,node13升级为node16,node版本node-sass版本与不匹配,导致出现npm ERR! ERESOLVE could not resolve
      腾讯云死磕政务云?
    226. 原文地址:https://blog.csdn.net/m0_68211831/article/details/125897546