uniapp-内部项目使用文档

uniapp-内部项目使用文档

目录

  • uniapp-内部项目使用文档
    • 阶段1
        • 自行实现内容:
        • 阶段1问题记录:
    • 阶段2
        • 自行实现内容:
    • 阶段3 APP项目介绍及规范
    • 阶段4 公共组件方法
      • UseList 列表页面Hooks
      • ListItem 列表项
      • uni-load-more 列表加载更多组件
      • CardTitle 列表卡片标题组件
      • Tags 标签
      • Empty 缺省页
      • 权限
        • hasPermission 按钮权限
      • FilterPopup 筛选组件
      • PublicPicker 数据字典&省市县镇选择
      • Tips 提示
      • DateRange 日期时间范围组件
      • useSelectSearch 可模糊查询的选择 Hooks
      • SelectSearchItem 可模糊查询的选择器
      • DataForm 数据表单 ,使用json生成表单

基础教程文档

【内部项目使用文档】
【内部项目使用文档】
【内部项目使用文档】

阶段1

一、介绍【uniapp介绍、项目创建、运行发布、代码写法变化、项目结构】

二、页面&组件&配置&api

三、教程【生命周期、路由、条件编译】

自行实现内容:
  • 创建、运行项目
  • 创建新页面、跳转新页面、传参&接收参数
阶段1问题记录:
  1. 升级hbx后项目运行报错
    回退hbx版本:帮助 -> 切换到上一个版本

  2. 项目突然有异常启动的问题,非页面问题,可以考虑是hbx问题,尝试检查更新版本回退版本

阶段2

一、基本的list页面

  • 使用uni-card组件
  • 配置下拉刷新、配置触底加载

二、基本表单提交

  • 基本表单提交页面
  • 基本校验 链接
  • 自定义校验 链接
  • 正则校验 pattern

三、常用生命周期

一般接口请求直接在setup生命周期请求即可。

import {onLoad, onShow} from '@dcloudio/uni-app'
onLoad(() => {console.log('onLoad')
})
onShow(() => {console.log('onShow')
})
console.log('setup');/* 打印结果
setup
onLoad
onShow
*/
自行实现内容:
  • 表格
  • 表单

阶段3 APP项目介绍及规范

  1. 样式:公共变量写在uni.scss内,不用在页面内引入即可使用。自带的公共变量在'@/uni_modules/uni-scss/variables.scss';查找,可直接使用。

  2. 样式:公共样式写在@/common/styles/public.scss内,已在app.vue内引入,不用在页面内引入即可使用。

  3. 辅助样式:链接

  4. 样式:页面和组件内写样式,style标签必须加scoped

    <style lang="scss" scoped>
    </style>
    
  5. 页面底部写入安全区域适配代码

    考虑到开屏广告适配情况,不配置全局的安全区域适配,需要在各个页面内单独适配

    <view class="padding-bottom-safe"></view>
    
  6. 组件:公共组件写在@/components/组件名/组件名.vue;页面级组件写在 页面/components/组件

  7. api:接口请求statusCode!==200时,封装方法内有公共错误提示,页面内不用管;其他情况错误和正确提示需要在页面内自行处理

  8. api:以接口地址第一个单词作为api文件名,将api单个导出,单个引入。注意get和post传参写法不一样。

​ 如/bill/billLading/list,则创建 @/apis/bill.js

import {http} from '@/common/service/service.js'// 需求确认列表
export const listCheckDataApi = (params) => http.get('/demand/listCheckData', {params});// 更新需求
export const updateStatusApi = (params) => http.post('/demand/updateStatus', params);

​ 页面内使用

import Tips from "@/common/utils/tip";
import {listCheckDataApi, updateStatusApi} from "@/api/demand";
const initData = async () => {const [err, res] = await listCheckDataApi({// 参数xxx:xxx})if (err) {// 错误处理Tips.toast(err.data?.msg || '操作失败')return}// 成功处理
}
  1. 安装eslint-vue插件

    https://ext.dcloud.net.cn/plugin?id=2005

    eslint-vue简介

  2. rpx

    页面内尽量使用rpx

    rpx介绍-自行查看

阶段4 公共组件方法

为什么要做组件封装?:

  • 代码复用: 通过将一些常用的功能或界面元素封装成组件,可以在不同的地方多次使用,避免重复编写相同的代码。
  • 易于维护: 将一些功能或界面元素封装成组件后,可以更容易地对其进行修改、更新和扩展,而不会影响到其他部分的代码。
  • 提高开发效率: 通过使用现有的组件,开发人员可以更快地构建新的界面,而不必从头开始编写所有的代码。
  • 抽象复杂性: 封装组件可以帮助将复杂的功能或界面元素抽象成简单的接口,使得整个系统更易于理解和管理。

封装组件的条件:

  • 可定制性: 组件应该具有足够的参数和选项,以便在不同的上下文中进行定制和配置。
  • 灵活性: 组件应该能够适应不同的数据和状态,而不是过于依赖特定的数据结构或业务逻辑。
  • 可组合性: 组件应该能够与其他组件进行组合和嵌套,以构建更复杂的界面。
  • 可测试性: 组件应该具有清晰的API和明确定义的行为,以便进行单元测试和集成测试。
  • 文档和示例: 组件应该有清晰的文档和示例,以便其他开发者能够快速理解和正确使用组件。
  • 样式隔离: 组件应该具有良好的样式隔离,以防止组件的样式影响到其他部分的页面。

UseList 列表页面Hooks

参数:

  • initData初始化方法,Function,必传,接口请求放在该方法内
  • pageSize?每页条数,Number,默认 5
  • pullDownRefresh?是否下拉刷新,Boolean,默认true
  • reachBottom?是否触底加载,Boolean,默认true

返回值:

  • total 总数,initData方法内需要对其赋值

  • pageNo 当前页码

  • pageSize每页条数

  • loadMoreStatus 加载更多状态

  • changeIsApiPostDoing(Boolean)改变是否请求中状态

基本的列表数据请求:

import Tips from "@/common/utils/tip";
import {useList} from "@/hooks/useList";
import {listData1Api} from "@/apis/mock-data"; // 导入要调用的apiconst {total,pageNo,pageSize,loadMoreStatus,changeIsApiPostDoing,listData
} = useList({initData
})async function initData(reset = false) {if (reset) {pageNo.value = 1;}// listDataApi:导入的APIconst [err, res] = await listDataApi({pageSize: pageSize.value,pageNo: pageNo.value})// 在此调用该方法changeIsApiPostDoing(false)if (err) {Tips.toast(err.message || '操作失败,请稍后再试')listData.value = [];return}listData.value = pageNo.value === 1 ? res.data : listData.value.concat(res.data)total.value = res.total
}

ListItem 列表项

  • showPoint? 前面显示 红点,默认false
  • single? 一行一个,没有 max-width限制,默认false
<uni-card v-for="(item) in listData" :key="item.id"><ListItem><text>买家:</text><template #right><text>xxxx有限责任公司</text></template></ListItem><ListItem><text>账户标识:</text><text class="list-value">4599</text><template #right><text class="list-label">销售片区:</text><text>西咸片区</text></template></ListItem><ListItem><text>产品信息</text><template #right><view>螺纹钢  HRB400E  Φ18*9m  检尺  293.4</view><view>螺纹钢  HRB400E  Φ18*9m  检尺  293.4</view></template></ListItem><ListItem><text>总重量:</text><text class="color-red">2566.01</text><template #right><text class="list-label">总金额:</text><text class="color-red">2566.01</text></template></ListItem>
</uni-card>

特殊情况使用下面代码,自行编写

    <view class="list-item"><view class="list-item-left"><text class="list-label">卖家:</text></view><view class="list-item-right"><text class="list-value"xxxx有限公司</text></view></view><view class="list-item"><view class="list-item-left"><text class="list-label">账户标识:</text><text class="list-value">4599</text></view><view class="list-item-right"><text class="list-label">销售片区:</text><text class="list-value">西咸片区</text></view></view>

uni-load-more 列表加载更多组件

https://uniapp.dcloud.net.cn/component/uniui/uni-load-more.html

  • loadMoreStatus more/loading/noMore,直接取 useList内返回的loadMoreStatus
<template><!--在页面底部加入--><uni-load-more :status="loadMoreStatus" v-if="listData.length" />
</template>

CardTitle 列表卡片标题组件

  • leftText? 默认left是蓝色字体
  • rightText? right是红色字体
  • showArrow?是否显示右箭头,默认true
<!-- 方式1  -->
<CardTitle leftText="SG-SJHT1722587699823310" rightText="执行中" :showArrow="false" />
<!-- 方式2 : 适用于自定义的样式 -->
<CardTitle><template #left>SG-SJHT1722587699823310</template><template #right>执行中</template>
</CardTitle>

Tags 标签

  • type? 为不一样的颜色, 【1~5】
  • text? 文字
<Tags text="标签" type="1"/>
<Tags text="标签" type="2"/>
<Tags text="标签" type="3"/>
<Tags text="标签" type="4"/>
<Tags text="标签" type="5"/>

Empty 缺省页

  • isShow 是否显示
  • text? 提示文字
  • img? 提示图片
<Empty :is-show="!listData.length" />

权限

hasPermission 按钮权限
<template><!--传字符串--><button size="mini" class="button" v-if="hasPermission('权限code1')">编辑</button><!--传数组--><button size="mini" class="button" v-if="hasPermission(['权限code1', '权限code2'])">编辑</button>
</template>
<script setup>import {usePermission} from "@/hooks/usePermission";const {hasPermission} = usePermission()
</script>

FilterPopup 筛选组件

页面筛选组件使用方法
uni-easyinput传filter-input样式时,需要将styles传空对象,否则会导致样式不生效
methods

  • @reset 重置按钮
  • @submit 确认按钮
<template><FilterPopup ref="filterPopup" @reset="handleReset" @submit="handleSubmit"><uni-forms ref="baseForm" :modelValue="baseFormData" label-position="top"><uni-forms-item label="买家" name="corpNameBuyer"><uni-easyinput v-model="baseFormData.corpNameBuyer" :styles="{}" :clearable="false" class="filter-input":inputBorder="false" placeholder="请输入买家"/></uni-forms-item><uni-forms-item label="卖家" name="corpName"><uni-easyinput v-model="baseFormData.corpName" :styles="{}" :clearable="false" class="filter-input":inputBorder="false" placeholder="请输入卖家"/></uni-forms-item><uni-forms-item label="申请时间" name="applyStartDate"><uni-datetime-picker type="datetime" :border="false" class="filter-input" v-model="baseFormData.applyStartDate"/><uni-datetime-picker type="datetime" :border="false" class="filter-input uni-mt-4"v-model="baseFormData.applyEndDate"/></uni-forms-item></uni-forms></FilterPopup>
</template>
<script setup>import {onNavigationBarButtonTap} from '@dcloudio/uni-app'import {ref} from "vue";// 初始值const baseFormDataDefault = JSON.stringify({corpNameBuyer: '',corpName: '',applyStartDate: '',applyEndDate: ''})// 筛选弹窗数据const baseFormData = ref(JSON.parse(baseFormDataDefault))const filterPopup = ref()// 右上角筛选按钮点击方法onNavigationBarButtonTap(() => {filterPopup.value.open()})// 重置const handleReset = () => {baseFormData.value = JSON.parse(baseFormDataDefault)console.log('handleReset', baseFormData.value);}// 确认const handleSubmit = () => {console.log('handleSubmit', baseFormData.value);}
</script>

需要在pages.json中配置筛选按钮 app-plus -> titleNView -> buttons

{"path": "pages/demo/list/list","style": {"navigationBarTitleText": "列表","enablePullDownRefresh": true,"app-plus": {"titleNView": {"buttons": [{"text": "筛选 \uE64D","fontSize": "12px","fontSrc": "/static/iconfont.ttf","width": "55px"}]}}}
},

PublicPicker 数据字典&省市县镇选择

该组件支持 单选、多选、picker 多种展示方式;
支持多种传数据源的方式。

  • modelValue: String | Array v-model
  • dictCode?: String, // 数据字典code,
    • 如果dictCode: areas,则获取本地省市县镇数据,
    • level? Number 省市县镇组件层级,默认4
  • localData?: Array, // 数据 ,优先使用dictCode
  • api?: Function // 通过api请求获取数据
    • fieldNames // 处理字段,默认值 {label: 'label', value: 'value', result:'result'}
  • showType?: 'picker' | 'checkbox' | undefined, //显示类型 picker/checkbox,默认picker
    • multiple?: Boolean, // 多选-checkbox时有效,默认false
  • popupTitle?: String, 默认 “请选择”

说明: dictCode、api 和localData 必须传一个,优先级dictCode > api > localData

methods

  • @change 返回选中的数据 ,为了统一不管单选多选都返回array
    • 省市县镇时返回 {areaCodeList, areaNameList}
    • 其他类型,不论单选还是多选都返回数组 [{text, value, 其他参数... }]
<!--picker选择-传字典code-->
<PublicPicker v-model="baseFormData.key4" dict-code="accept_type" />
<!--单选-->
<PublicPicker v-model="baseFormData.key5" dict-code="car_brand" show-type="checkbox" />
<!--多选-->
<PublicPicker v-model="baseFormData.key6" dict-code="car_kind" show-type="checkbox" multiple />
<!--picker选择-传localData,也支持单选、多选-->
<PublicPicker v-model="baseFormData.key3" :localData="sexs" />
<!--localData示例
[{text: '男', value: '1'}, {text: '女', value: '2'}]
-->
<!--监听改变  @change -->
<PublicPicker v-model="baseFormData.key4" dict-code="accept_type"  @change="handleSelectChange" /><!--省市县镇组件-->
<PublicPicker v-model="baseFormData.key9" dictCode="areas" />

Tips 提示

注意:显示图标是有字数限制,最多8个字,长了不显示

成功时,字数少的使用 success

错误是使用 errortoast

import Tips from "@/common/utils/tip";Tips.success(title, duration = 1000)  // 对钩图标
Tips.error(title, onHide)  // 叹号图标
Tips.toast(title, onHide = undefined, icon = "none") // 无图标
Tips.confirm(content, ops = {}, payload = {}) // 确定取消提示
Tips.loading(title = "加载中") // '加载中'
Tips.hideLoading() // 隐藏加载中

DateRange 日期时间范围组件

  • type date | datetime | undefined 默认 datetime
  • border Boolean, 默认false
  • modelValue
<!--日期范围-->
<DateRange v-model="baseFormData.key7" type="date" /><!--日期时间范围-->
<DateRange v-model="baseFormData.key8" type="datetime" />

校验时间范围方法

{key6: {rules: [{ required: true, errorMessage: '请选择时间' },{ validateFunction: function (rule, value, data, callback) {const [date1, date2] = value;console.log(date1, date2);if (!date1 && !date2) {callback('请选择时间')} else if (!date1) {callback('请选择开始时间')} else if (!date2) {callback('请选择结束时间')}return true;}}]}
}

useSelectSearch 可模糊查询的选择 Hooks

模糊查询选择,打开新页面输入内容进行查询选择

  • apiUrl: `{type: String, required: true,}, 接口请求地址,非方法
  • placeholder: { type: String, default: ‘请选择’}, 提示信息
  • title: { type: String, default: ‘请选择’,}, 搜索页标题
  • keyword: { type: String, default: ‘keyword’}, 搜索传接口的字段key
  • valueField: { type: String, default: ‘value’}, 接口返回的value字段
  • labelField: { type: String, default: ‘label’}, 接口返回的label字段
  • isInit: { type: Boolean, default: true}, 页面是否初始化时直接调用接口
  • params: { type: Object, default: () => ({})}, 额外参数
  • modelValue: String,clearIcon: { type: Boolean, default: true}, v-model
  • readonly: { type: Boolean, default: false} 禁用
  • @change 改变方法
<template><button  @click="handleClick">打开搜索页</button>
</template>
<script setup>
import ss from "@/hooks/useSelectSearch";
const handleClick = () => {ss.to({apiUrl: querySysCorpByCorpNameUrl,keyword: 'corpName',title: '请选择买家',valueField: 'corpCode',labelField: 'corpName',init: false,params: {corpType: 'xs_buyer'}})ss.on((check) => {console.log('check', check);})
}
</script>

SelectSearchItem 可模糊查询的选择器

参数同上 useSelectSearch

组件内使用的也是useSelectSearch方法,组件内封装,供表单内使用。

<SelectSearchItem:apiUrl="querySysCorpByCorpNameUrl"keyword="corpName":params="{corpType: 'xs_buyer'}":isInit="false":readonly="false"title="请选择买家"placeholder="请选择买家"valueField="corpCode"labelField="corpName"v-model="baseFormData.key11"@change="handleSelectChange"/>

DataForm 数据表单 ,使用json生成表单

通过json数据生成表单
注意:组件内数据改变,会直接修改传入的modelValue的源数据。

<!--基本使用示例-->
<DataFormref="dataFormRef":formProps="{}":model="demoForm":schemas="schemas"@change="handleFormChange"@submit="handleSubmit"><template #slot1><input type="text" v-model="demoForm.key10"></template>
</DataForm>
  • formProps: 传到表单uni-forms的属性,
    默认值:{labelWidth: '100px',border: true,}

  • schemas: { type: Array, required: true,}, // 表单schema
    component支持的组件类型有:

    • uniEasyInput 输入框
    • PublicPicker 公共选择
    • DateRange 时间范围选择,DateRange传className时,需要加上uni-mt-4,否则会导致没有边距
    • UniDatetimePicker 日期 / 日期时间选择
    • SelectSearchItem 模糊搜索选择
    • slot 插槽
     [{label: '用户名',field: 'key1',component: 'uniEasyInput',required: true,componentProps: {//传递给组件的参数,参考各组件文档inputBorder: false,placeholder: '请输入用户名'},rules: [{ required: true, errorMessage: '请输入用户名' }]},{label: '省市县镇',field: 'key7',component: 'PublicPicker',componentProps: {dictCode: 'areas',level: 3}},{label: '日期时间范围',field: 'key6',component: 'DateRange',componentProps: {type: 'datetime'},rules: [{ required: true, errorMessage: '请选择时间' },{ validateFunction: function (rule, value, data, callback) {const [date1, date2] = value;console.log(date1, date2);if (!date1 && !date2) {callback('请选择时间')} else if (!date1) {callback('请选择开始时间')} else if (!date2) {callback('请选择结束时间')}return true;}}]},]
  • model: { type: Object, required: true,}, 必填

  • showSubmitButton: { type: Boolean, default: true,} // 是否显示提交按钮

    • @submit 显示提交按钮时,点提交会触发submit方法
  • @change 表单有数据改变的方法,返回参数:({schema参数, value}, formValue)

  • setFieldsValue() 设置表单数据方法,setFieldsValue(a: 1)

    const handleFormChange = (e, formValue) => {// 设置值dataFormRef.value.setFieldsValue({a: '123123123123'})console.log('数据', formValue);
    }
    
  • updateSchema() 更新表单schema,传入数组,如下示例:

    const updateLocalData = () => {const data = [{text: '男男', value: '1'}, {text: '女女', value: '2'}]dataFormRef.value.updateSchema([{field: 'key2', componentProps: {localData: data}}])
    }
  • space 是否显示左侧边距 ,默认false,给表单添加.form-no-border样式,隐藏左侧边距

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”

猿辅导集团旗下的飞象星球面向学校发布“飞象AI作文”&#xff0c;让教育大模型成为老师的AI批改助手、学生的写作助手。芥末堆注意到&#xff0c;猿辅导集团旗下的猿辅导素养课也推出了名为“AI作文通”的AI作文功能&#xff0c;已于7月正式大规模上线&#xff0c;在AI教育领域…

Node.js系统模块

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 2.2.1 什么是系统模块 由于Node.js运行环境提供的API都是以模块化的方式进行开…

路由封装,连接导航router-link

路由的封装抽离&#xff1a; 所有路由配置堆在main.js中不合适&#xff0c;需将路由模块抽离出来&#xff0c;以便维护 将与路由相关信息提取到src文件夹下的router文件夹下的index.js文件中 在main.js中就只需要导入当前路由&#xff0c;并且注入到当前实例中&#xff0c;其他…

工业4.0下的IT网络与OT网络

https://zhuanlan.zhihu.com/p/498984722 随着“中国制造2025”的深入推进&#xff0c;制药行业以手工为主的传统生产方式正在被以“工业4.0 ”为核心的自动化生产方式逐步替代。 为了实现生产自动化&#xff0c;很多制药企业都引入了由PLC&#xff08;可编程逻辑控制器 &am…

Ubuntu压缩打包解压

ubuntu压缩打包 上图&#xff0c;压缩当前目录svn 为svn.tar.gaz&#xff0c;解压后再当前解压目录生成svn文件 在Ubuntu中&#xff0c;你可以使用tar命令来创建一个压缩包&#xff0c;或者使用zip命令来创建一个.zip压缩文件。以下是两种常见的压缩方法&#xff1a; 下图&am…

【FAQ】HarmonyOS SDK 闭源开放能力 —Remote Communication Kit

1.问题描述&#xff1a; DynamicDnsRule有没有示例&#xff1f;这个地址是怎么解析出来 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp-0000001770911890#section8160554134811 解决方案&#xff1a; ‘DynamicDnsRule’&a…

记录c语言一些有趣的疑问

一些有趣的疑问 字符串栈数组调用字符串库API进行赋值么 char szStackStr[] "Hello World!";答案&#xff1a;使用机器指令进行硬编码 无限循环存在比较指令么 while(1) {printf("Hello World!\n"); }答案&#xff1a;while开始处&#xff0c;即使是没…

Master EDI 项目需求分析

Master Electronics 通过其全球分销网络&#xff0c;支持多种采购需求&#xff0c;确保能够为客户提供可靠的元件供应链解决方案&#xff0c;同时为快速高效的与全球伙伴建立合作&#xff0c;Master 选择通过EDI来实现与交易伙伴间的数据传输。 EDI为交易伙伴之间建立了一个安…

人脸识别之Python的人工智能研究(附学习资源)

1. 引言&#xff1a;人脸识别的意义与挑战 人脸识别技术已经在多个领域得到了广泛应用&#xff0c;包括手机解锁、公共安全监控、社交媒体、人机交互等。这项技术的普及不仅提高了生活的便利性&#xff0c;也为社会安全提供了有效的支持。然而&#xff0c;随着人脸识别技术的不…

时频转换 | Matlab梅尔频谱图Mel spectrogram一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab梅尔频谱图Mel spectrogram一维数据转二维图像方法 程序设计 clear clc % close all load 130.mat % 导入数据 x X130_DE_time; % 本数据只选择5120个点进行分析 x x(1:120000,:); fs 12000 ; % 数据…

Milvus向量数据库03-搜索理论

Milvus向量数据库03-搜索理论 1-ANN搜索 通过 k-最近邻&#xff08;kNN&#xff09;搜索可以找到一个查询向量的 k 个最近向量。kNN 算法将查询向量与向量空间中的每个向量进行比较&#xff0c;直到出现 k 个完全匹配的结果。尽管 kNN 搜索可以确保准确性&#xff0c;但十分耗…

STM32 出租车计价器系统设计(一) 江科大源码改写

STM32 出租车计价器系统设计 功能目标 驱动步进电机模拟车轮旋转&#xff0c;并实现调速功能。 设置车轮周长和单价&#xff0c;检测车轮转速和运转时间。 计算并显示行驶里程和价格。 硬件材料 28BYJ48 五线四相步进电机和 ULN2003 驱动板模块 测速传感器模块 嵌入式小系统…

顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍

大语言模型一般都是流式返回文字&#xff0c;如果等全部文字返回了一次性去TTS&#xff0c;那么延迟会非常严重&#xff0c;常用的方法就是通过标点符号断句&#xff0c;返回了一句话就提交给TTS。随着流TTS的出现&#xff0c;就可以直接把大模型返回的文字灌给流TTS&#xff0…

问题清除指南|AEROBLADE论文复现相关要点总结

前言&#xff1a;本篇博客总结本人在复现 CVPR 2024 论文 AEROBLADE 过程中遇到的一些问题及解决方案。 注&#xff1a;仅仅使用了论文github源码中的Quickstart部分。 论文链接&#x1f517;&#xff1a;AEROBLADE: Training-Free Detection of Latent Diffusion Images Using…

Qt初识_对象树

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Qt初识_对象树 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 什么是对象树 为什么要引…

排序算法(3):插入排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 插入排序 插入排序将序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&#xff0c;插入到已排序部分的适当位置。重复此过程直到所有元素排序完成。 图解 初始化第一个元素为已排序部分&#xff0…

Java版-图论-最小生成树-Kruskal算法

实现描述 为了造出一棵最小生成树&#xff0c;我们从最小边权的边开始&#xff0c;按边权从小到大依次加入&#xff0c;如果某次加边产生了环&#xff0c;就扔掉这条边&#xff0c;直到加入了 n-1 条边&#xff0c;即形成了一棵树。 实现代码 首选我们对所有的边&#xff0c…

SORT算法详解及Python实现

目录 SORT算法详解及Python实现第一部分&#xff1a;SORT算法概述与原理1.1 SORT算法简介1.2 应用场景1.3 算法流程 第二部分&#xff1a;数学公式与主要模块2.1 卡尔曼滤波模型2.2 目标关联与匈牙利算法2.3 新建与移除机制 第三部分&#xff1a;Python实现&#xff1a;SORT算法…

传奇996_53——后端ui窗口局部刷新

描述&#xff1a;一个大窗口&#xff0c;点击某个键&#xff0c;弹出小窗口。 小窗口中将msg存进变量中 大窗口中判断一个参数是否为null&#xff0c;如果不为null&#xff0c;说明界面不是第一次打开&#xff0c;而是被刷新了。就加上小窗口的那个变量 有时小窗口中还有其他…

深入解析 Spring Security —— 打造高效安全的权限管理体系

目录 前言1. 初识 Spring Security1.1 Spring Security 的两大核心功能1.2 Spring Security 的主要特点 2. 配置 Spring Security2.1 配置类概述2.2 基础配置示例2.3 示例解析 3. Spring Security 的进阶功能3.1 自定义用户服务3.2 注解式权限控制3.3 动态权限控制 4. 实战应用…