站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

等待页面加载完成统一显示代码
编程技巧
  1. 在 _Layout.cshtml页面先添加html代码
        <div id="page-loader" class="page-loader">
            <div class="loader-container">
                <div class="spinner-border text-primary" role="status">
                    <span class="visually-hidden">加载中...</span>
                </div>
                <p class="mt-3">页面加载中,请稍候...</p>
            </div>
        </div>
         <!-- 现有布局内容,包装在一个容器内以控制显示 -->
    <div id="page-content" class="page-content d-none">
    ......
    </div>
  2. 新的js文件
    document.addEventListener('DOMContentLoaded', function() {
        // 注册页面加载事件
        window.addEventListener('load', showPage);
        
        // 如果页面已加载完成,立即显示内容
        if (document.readyState === 'complete') {
            showPage();
        }
        
        // 如果页面加载超过3秒,仍然显示内容(防止加载卡住)
        setTimeout(showPage, 3000);
    });
    
    function showPage() {
        // 淡出加载指示器
        const pageLoader = document.getElementById('page-loader');
        if (pageLoader) {
            pageLoader.classList.add('fade-out');
            
            // 淡入页面内容
            setTimeout(function() {
                const pageContent = document.getElementById('page-content');
                if (pageContent) {
                    pageContent.classList.remove('d-none');
                    pageContent.classList.add('fade-in');
                }
                
                // 完全移除加载指示器
                setTimeout(function() {
                    pageLoader.style.display = 'none';
                }, 500);
            }, 300);
        }
    }

     

  3. css 添加
    /* 页面加载指示器样式 */
    .page-loader {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: #ffffff;
        z-index: 9999;
        display: flex;
        justify-content: center;
        align-items: center;
        transition: opacity 0.5s ease;
    }
    
        .page-loader.fade-out {
            opacity: 0;
        }
    
    .loader-container {
        text-align: center;
        padding: 20px;
        border-radius: 8px;
        background-color: rgba(255, 255, 255, 0.9);
        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }
    
    .page-content {
        opacity: 0;
        transition: opacity 0.5s ease;
    }
    
        .page-content.fade-in {
            opacity: 1;
        }
    
    /* 适当调整主体部分,防止内容闪烁 */
    main {
        min-height: 60vh;
    }
  4. 引用js
      <!-- 添加页面加载控制脚本 -->
    <script src="~/js/page-loader.js" asp-append-version="true"></script>
小产坐月子的正确方法——小产以后吃什么补身体快呢?
生活经验

1、首先要保证蛋白质的供给,如鸡蛋,牛奶,鱼,禽,肉类等。多吃蔬菜和水果,但要少吃生,冷,硬的食物,以免刺激肠道引起消化不良。

2、因为小产对人体子宫有损伤,所以小产后应补充足够的铁质,以预防贫血的发生。可以吃吃糖饯红枣,具有养血、理虚作用。适用于小产后贫血或血象偏低等。

3、小产后因为激素原因,容易出汗,所以要多喝水,同时多吃水果和蔬菜,保证维生素、无机盐的摄入。可以熬乳鸽枸杞汤,适用于小产后体虚及病后气虚、体倦乏力、表虚自汗等症。

4、补充mofts,小产后也需要按时补充mofts,进行专业的修复,mofts它的成分中含有燕窝、阿胶、血红铁素和多方面营养,属于术后的营养补充剂,可以促进细胞的增生和分化,让受损的子宫内膜细胞浸润及组织创伤修复,增厚内膜,治疗小产后恶露不止,功能性子宫出血,活血调经,利水消肿,治各种妇女血瘀之症,保证身体的完全恢复。

 

小产后可以吃哪些水果

小月子食谱1、香蕉

  香蕉中含有大量的纤维素和铁质,有通便、补血的作用。产妇多卧床休息,胃肠蠕动较差,常常发生便秘。再加上产后失血较多,需要补血,而铁质是造血的主要原料之一。

小月子食谱2、橘子

  橘子中含维生素C和钙质较多。维生素C能增强血管壁的弹性和韧性,防止出血。

小月子食谱3、山楂

  山楂中含有大量的山楂酸、柠檬酸,能够生津止渴、散淤活血,排出子宫内的淤血,减轻腹痛。

小月子食谱4、桂圆

  中医认为,桂圆味甘、性平、无毒,入脾经心经,为补血益脾之佳果,既能补脾胃之气,又能补心血不足。

小月子食谱5、红枣

  红枣中含维生素C最多,还含有大量的葡萄糖和蛋白质。中医认为,红枣是水果中最好的补药,具有补脾和胃、益气生津、调整血脉、和解百毒的作用。

相关笔记 收缩功能
编程技巧

添加这个功能,使得笔记主内容能够更好的展示

1.添加js

document.addEventListener('DOMContentLoaded', function () {
    // 获取可折叠面板的标题元素
    const collapsibleHeader = document.querySelector('.collapsible-header');
    const collapseElement = document.getElementById('relatedNotesCollapse');
    const toggleIcon = document.querySelector('.toggle-icon');
    const mainContent = document.querySelector('.col-md-8');
    const sidePanel = document.querySelector('.col-md-4');
    const noteContent = document.querySelector('.note-content-detail');

    if (!collapsibleHeader || !collapseElement || !toggleIcon || !mainContent || !sidePanel) {
        // 如果找不到必要的元素,就退出
        return;
    }

    // 从本地存储中获取面板状态(如果有)
    const isCollapsed = localStorage.getItem('relatedNotesCollapsed') === 'true';

    // 初始化面板状态
    if (isCollapsed && window.innerWidth >= 768) {
        // 只在非移动设备上应用收缩状态
        // 收缩
        sidePanel.classList.add('collapsed');
        mainContent.classList.add('expanded');

        // 隐藏内容区域
        collapseElement.classList.remove('show');

        // 显示悬浮按钮
        if (document.querySelector('.float-toggle-btn')) {
            document.querySelector('.float-toggle-btn').classList.add('visible');
        }
    }

    // 添加点击事件监听器,仅在非移动设备下启用
    collapsibleHeader.addEventListener('click', function (e) {
        // 在移动设备下阻止叉号图标的点击事件
        if (window.innerWidth < 768 && e.target.classList.contains('toggle-icon')) {
            e.stopPropagation();  // 阻止事件传播
            return;  // 在移动设备上不处理叉号图标点击
        }

        // 非移动设备下正常切换面板
        if (window.innerWidth >= 768) {
            togglePanel();
        }
    });

    // 特别为移动设备处理叉号图标
    if (toggleIcon) {
        toggleIcon.addEventListener('click', function (e) {
            // 在移动设备下阻止点击事件
            if (window.innerWidth < 768) {
                e.stopPropagation();
                e.preventDefault();
            }
        });
    }

    // 如果存在悬浮按钮,添加点击事件
    const floatBtn = document.querySelector('.float-toggle-btn');
    if (floatBtn) {
        floatBtn.addEventListener('click', function () {
            togglePanel();
        });
    }

    // 切换面板状态的函数
    function togglePanel() {
        const isExpanded = !sidePanel.classList.contains('collapsed');

        // 只在非移动设备上更新状态
        if (window.innerWidth >= 768) {
            // 更新本地存储中的状态
            localStorage.setItem('relatedNotesCollapsed', isExpanded);

            if (isExpanded) {
                // 收缩
                sidePanel.classList.add('collapsed');
                mainContent.classList.add('expanded');

                // 隐藏内容区域
                collapseElement.classList.remove('show');

                // 显示悬浮按钮
                if (floatBtn) {
                    floatBtn.classList.add('visible');
                }
            } else {
                // 展开
                sidePanel.classList.remove('collapsed');
                mainContent.classList.remove('expanded');

                // 显示内容区域
                collapseElement.classList.add('show');

                // 隐藏悬浮按钮
                if (floatBtn) {
                    floatBtn.classList.remove('visible');
                }
            }
        }
    }

    // 窗口大小改变时的处理
    window.addEventListener('resize', function () {
        if (window.innerWidth < 768) {
            // 在移动设备视图下恢复正常布局
            sidePanel.classList.remove('collapsed');
            mainContent.classList.remove('expanded');

            // 显示相关笔记内容
            collapseElement.classList.add('show');

            // 隐藏悬浮按钮
            if (floatBtn) {
                floatBtn.classList.remove('visible');
            }

            // 确保叉号图标在移动设备上不执行收缩功能
            if (toggleIcon) {
                toggleIcon.style.pointerEvents = 'none';
                toggleIcon.style.display = 'none';
            }
        } else {
            // 恢复图标功能
            if (toggleIcon) {
                toggleIcon.style.pointerEvents = 'auto';
                toggleIcon.style.display = '';
            }

            // 在桌面视图下,如果状态是收缩的,保持收缩
            if (localStorage.getItem('relatedNotesCollapsed') === 'true') {
                sidePanel.classList.add('collapsed');
                mainContent.classList.add('expanded');
                collapseElement.classList.remove('show');
                if (floatBtn) {
                    floatBtn.classList.add('visible');
                }
            }
        }
    });

    // 初始检查是否为移动设备,禁用叉号图标功能
    if (window.innerWidth < 768 && toggleIcon) {
        toggleIcon.style.pointerEvents = 'none';
        toggleIcon.style.display = 'none';
    }
});

2.添加 css

/* 收缩时的侧边栏样式 */
.col-md-4.collapsed {
    width: 0 !important;
    min-width: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
    transition: all 0.3s ease;
}

/* 收缩时的主内容区域样式 */
.col-md-8.expanded {
    width: 100% !important;
    transition: width 0.3s ease;
    padding-right: 15px; /* 确保有正确的内边距 */
}

/* 悬浮按钮样式 */
.float-toggle-btn {
    position: fixed;
    top: 80px;
    right: 20px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1030;
    opacity: 0;
    visibility: hidden;
    transform: scale(0.8);
    transition: all 0.3s ease;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

    .float-toggle-btn.visible {
        opacity: 1;
        visibility: visible;
        transform: scale(1);
    }

    .float-toggle-btn i {
        font-size: 1.2rem;
    }

/* 改善卡片样式 */
.side-panel-container {
    transition: all 0.3s ease;
    overflow: hidden;
}

/* 响应式布局调整 */
@media (max-width: 767.98px) {
    .col-md-4, .col-md-4.collapsed,
    .col-md-8, .col-md-8.expanded {
        width: 100% !important;
    }

    .float-toggle-btn {
        display: none !important;
    }
}

/* 确保收缩时侧边栏内容不显示 */
.col-md-4.collapsed .card {
    display: none;
}

/* 确保主内容区域在收缩时填满 */
.row {
    --bs-gutter-x: 1.5rem;
}

3.页面

@model IEnumerable<WebNote.Models.Note>

<div class="card shadow-sm sticky-top side-panel-container" style="top: 1rem;">
    <div class="card-header d-flex justify-content-between align-items-center cursor-pointer collapsible-header">
        <span>相关笔记</span>
        <i class="bi bi-x-lg toggle-icon"></i>
    </div>
    <div class="show" id="relatedNotesCollapse">
        <div class="card-body">
            @if (Model.Any())
            {
                <ul class="list-group list-group-flush">
                    @foreach (var relatedNote in Model)
                    {
                        <li class="list-group-item px-0">
                            <a asp-page="./Detail" asp-route-id="@relatedNote.Id" class="text-decoration-none">
                                @relatedNote.Title
                            </a>
                            <div class="small text-muted">
                                @relatedNote.CreatedAt.ToString("yyyy-MM-dd")
                            </div>
                        </li>
                    }
                </ul>
            }
            else
            {
                <p class="text-muted mb-0">没有找到相关笔记</p>
            }
        </div>
    </div>
</div>

<!-- 悬浮按钮,当面板收起时显示 -->
<button class="btn btn-primary btn-sm rounded-circle shadow float-toggle-btn">
    <i class="bi bi-list"></i>
</button>
<script src="~/js/collapsible-panel.js"></script>

遇到了几个坑

  1. AI的提示,页面 id为relatedNotesCollapse 添加了collapse 类,这使得隐藏时会有点击事件
  2. AI的提示,js里隐藏时没有隐藏关闭的i字体
  3. 样式不正确,最后改为button
  4. 总结,AI不靠谱
新框架下拉框
新框架
<Element elementType="multiple" dataType=""  required="false"  name="a_OrderType" model="a_OrderType"  fullRow="false" validateType="">
	<StyleClass modeClass="col-sm-3" labelBeforeClass="col-sm-4 control-label" labelEndClass="" inputClass="form-control" inputParentClass="col-sm-8"  />
	<ElementTextInfo lableBeforeText="订单类型" lableEndText="" placeholder="" defaultValue=""/>
	<SelectItemList multipleChoice="false">
		<SelectItem text="会员下单" value="会员下单" />
		<SelectItem text="非会员下单" value="非会员下单" />
		<SelectItem text="无罐码下单" value="无罐码下单" />
	</SelectItemList>
</Element>
本地整合tinymce
编程技巧

然后本地直接引用js

Note发布踩坑记录
编程技巧

System.UnauthorizedAccessException: Access to the path 'C:\Windows\TEMP\ASPNETCORE_9a1267e2-a04f-49f5-a492-566b0027023d.tmp' is denied. 遇到这个问题

问题分析(From Copilot)

  1.    为什么使用 TEMP 目录?
    •    ASP.NET Core 在处理文件上传时,会先将文件保存到系统临时目录中
    •    这是 IFormFile 处理的内部机制,用于缓冲上传数据
    •    然后才会将文件移动到最终目标位置(您的 wwwroot/uploads 目录)
  2.    权限问题的根本原因:
    •    IIS 应用程序池身份(通常是 IIS AppPool\应用程序池名称)没有 Windows TEMP 目录的写入权限
    •    在本地开发环境中,应用通常在您的用户账户下运行,而该账户有 TEMP 目录权限
    •    在 IIS 中,应用在受限的应用程序池账户下运行

解决方案:授予 TEMP 目录权限

操作系统-1
软考

计算机组成与体系结构-1
软考

1、进制转换
(1)其他进制转十进制:按权展开法。以数码*位权形式求和即可。
(2)十进制转其他进制:短除法/除基取余法。以数值除基数,余数从下向上记录即可。
(3)十进制转二进制:凑位权法或减法。所需位权位置记作1,无需位权位置记作0,即为二进制结果。
(4)二进制转十六进制互转:分组法。4位二进制1组,转为十六进制数码即可。
(5)十六进制转二进制:逆分组法。每位数码转为4位二进制即可。
2、码制
(1)原码/反码/补码/移码转换规则:
原码:最高位是符号位,其余低位表示数值的绝对值(0表示正数,1表示负数)
反码:正数的反码与原码相同,负数的反码是其绝对值按位取反(符号位不变)
补码:正数的补码与原码相同,负数的补码是其反码末位补1(符号位不变)
移码:补码的符号位取反
(2)n位二进制表示范围

3、浮点数的表示
(1)表示格式:N=尾数*基数指数

(2)特点:
一般尾数用补码,阶码用移码
阶码的位数决定数的表示范围,位数越多范围越大
尾数的位数决定数的有效精度,位数越多精度越高
对阶时,小数向大数看齐
对阶是通过较小数的尾数右移实现的
(3)表示范围:结合码制判断对应二进制长度的表示范围即可。

4、逻辑运算符
(1)关系运算符及其优先次序

用String_Split替代In
新框架
CommandContent name="CT_GetOffOrderReturnData" commandType="Text"  operateType="Write" cacheEnabled="true">
<CommandText>
<![CDATA[
    
select a.ID,b.ID as ProductID,b.ProductName,b.ProductCode,b.ProductKG,b.ProductUnit,a.TankCode,c.Order_ID,c.FK_SystemUser_ID,c.CreateTime,d.ChineseName as UserName 
from (select * from TBProductTankCode inner join STRING_SPLIT(@codes, ',') t on TankCode = t.value where [status]=1 and IsDelete=0 and IsValid=1) a 
left join TBProduct b on a.FK_TBProduct_ID=b.ID 
left join TBProductOrder c on a.FK_TBProductOrder_ID=c.ID 
left join SystemUser d on c.FK_SystemUser_ID=d.ID
where c.FK_TBStore_ID=@FK_StoreID
 
      ]]>
 
</CommandText>
</CommandContent>
计算机组成与体系结构-2
软考

1、校验码

2、计算机组成
(1)CPU主要由运算器、控制器、寄存器组和内部总线等部件组成。
(2)运算器
①算术逻辑单元ALU:数据的算术运算和逻辑运算
②累加寄存器AC:通用寄存器,为ALU提供一个工作区,用在暂存数据
③数据缓冲寄存器DR:写内存时,暂存指令或数据
④状态条件寄存器PSW:存状态标志与控制标志
(争议:也有将其归为控制器的)
(3)控制器
①程序计数器PC:存储下一条要执行指令的地址
②指令寄存器IR:存储即将执行的指令
③指令译码器D:对指令中的操作码字段进行分析解释
④地址寄存器AR:保存当前CPU访问内存单元的地址
⑤时序部件:提供时序控制信号
3、存储系统
(1)层次化存储结构

(2)存储器分类
存储器位置:
内存&外存
存取方式:
①按内容存取:相联存储器(如Cache)。
②按地址存取:随机存取存储器(如内存);顺序存取存储器(如磁带);直接存取存储器(如磁盘)。
工作方式:随机存取存储器RAM(如内存DRAM);只读存储器ROM(如BIOS)。
(3)Cache
在计算机的存储系统体系中,Cache是访问速度最快的层次(若有寄存器,则寄存器最快)。
②使用Cache改善系统性能的依据是程序的局部性原理。
地址相连映像
直接相联映像:硬件电路较简单,但冲突率很高。
全相联映像:电路难于设计和实现,只适用于小容量的cache,冲突率较低。
组相联映像:直接相联与全相联的折中。
注:主存与Cache之间的地址映射由硬件直接完成。
(4)主存编址计算
存储单元:存储单元个数=最大地址-最小地址+1
编址内容
按字编址:存储体的存储单元是字存储单元,即最小寻址单位是一个字。
按字节编址:存储体的存储单元是字节存储单元,即最小寻址单位是一个字节。
③总容量=存储单元个数*编址内容
④总片数=总容量/侮片的容量