当前位置: 首页 > news >正文

quillEditor 禁用复制粘贴图片,以及class转style等问题

<template><div><div class="search-term"><el-form :inline="true" :model="searchInfo" class="demo-form-inline"><el-form-item label="案例标题"><el-input v-model="searchInfo.title" placeholder="请输入案例标题" /></el-form-item><el-form-item label="项目名称"><el-inputv-model="searchInfo.projectName"placeholder="请输入项目名称"/></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button></el-form-item><el-form-item><el-button type="primary" @click="openDialog('addArticle')">新增案例</el-button></el-form-item></el-form></div><el-table:data="tableData"@sort-change="sortChange"@selection-change="handleSelectionChange"><el-table-column type="selection" width="55" /><el-table-columntype="index":index="indexMethod"label="序号"width="100"/><!-- <el-table-column label="ID" min-width="50" prop="id" /> --><el-table-column label="标题与副标题" min-width="300"><template slot-scope="scope"><div><strong>ID:</strong> {{ scope.row.id }}</div><div><strong>标题:</strong> {{ scope.row.title }}</div><div><strong>副标题:</strong> {{ scope.row.subtitle }}</div></template></el-table-column><!-- <el-table-column label="省份与城市" min-width="150"><template slot-scope="scope"><div><strong>省份:</strong> {{ scope.row.provinceName }}</div><div><strong>城市:</strong> {{ scope.row.cityName }}</div></template></el-table-column> --><el-table-column label="项目名称" min-width="150"><template slot-scope="scope">{{ getProjectName(scope.row.projectId) }}</template></el-table-column><el-table-column label="小区" min-width="150"><template slot-scope="scope">{{ getCommunityName(scope.row.communityId) }}</template></el-table-column><el-table-column label="风格" min-width="150"><template slot-scope="scope">{{ getStyleName(scope.row.seriesId) }}</template></el-table-column><el-table-column label="房型" min-width="150"><template slot-scope="scope">{{ getHouseTypeName(scope.row.houseTypeId) }}</template></el-table-column><el-table-column label="面积与标签" min-width="200"><template slot-scope="scope"><div><strong>面积:</strong> {{ scope.row.area }} 平方米</div><div><strong>标签:</strong> {{ scope.row.tags }}</div></template></el-table-column><el-table-column label="推荐" min-width="100" prop="isRecommend"><template slot-scope="scope"><el-tagv-if="scope.row.isRecommend === '0'"effect="dark"size="mini"type="info">否</el-tag><el-tag v-else effect="dark" size="mini" type="success">是</el-tag></template></el-table-column><el-table-column label="创建时间" min-width="100" prop="createdAt" /><el-table-column label="操作" width="250"><template slot-scope="scope"><el-buttonsize="small"type="primary"icon="el-icon-edit"@click="editArticle(scope.row)">编辑</el-button><el-buttonsize="small"type="danger"icon="el-icon-delete"@click="deleteArticle(scope.row)">删除</el-button></template></el-table-column></el-table><el-pagination:current-page="page":page-size="pageSize":page-sizes="[10, 30, 50, 100]":style="{ float: 'right', padding: '20px' }":total="total"layout="total, sizes, prev, pager, next, jumper"@current-change="handleCurrentChange"@size-change="handleSizeChange"/><el-dialog:before-close="closeDialog":title="dialogTitle":visible.sync="dialogFormVisible"><el-formref="articleForm":inline="false":model="form":rules="rules"label-width="80px"><el-tabs v-model="activeName" @tab-click="handleClick"><el-tab-pane label="基本信息" name="first"><el-form-item label="标题" prop="title"><el-inputv-model="form.title"placeholder="请输入标题"required/></el-form-item><el-form-item label="副标题" prop="title"><el-input v-model="form.subtitle" placeholder="请输入副标题" /></el-form-item><el-form-item label="案例封面" prop="picUrl"><el-inputv-model="form.picUrl"placeholder="http://"disabledstyle="display: none"/><QnEleUpload :image-url="form.picUrl" @oss-url="ossPicUrl" /></el-form-item><el-form-item label="全景链接"><el-row style="padding-top: 0px"><el-col :span="4"><el-select v-model="form.panoramaType" placeholder="请选择"><el-optionv-for="item in panoramaList":key="item.value":label="item.label":value="item.value"/></el-select></el-col><el-col :span="12" style="margin-left: 10px"><el-inputv-model="form.panoramaUrl"placeholder="请输入全景链接"/></el-col></el-row></el-form-item><el-form-item label="项目" required><el-selectv-model="projectId"placeholder="请选择"style="width: 100%"><el-optionv-for="(item, index) in projectList":key="index":label="item.title":value="item.id"/></el-select></el-form-item><!-- <el-form-item label="地区" required><div style="display: flex"><el-selectv-model="provinceId"placeholder="请选择"style="margin-right: 10px"><el-optionv-for="(item, index) in provinceList":key="index":label="item.name":value="item.id"/></el-select><el-select v-model="cityId" placeholder="请选择"><el-optionv-for="(item, index) in cityList":key="index":label="item.name":value="item.id"/></el-select></div></el-form-item> --><el-form-item label="小区"><el-selectv-model="communityId"placeholder="请选择"style="width: 100%"><el-optionv-for="(item, index) in communityList":key="index":label="item.name":value="item.id"/></el-select></el-form-item><el-form-item label="户型名称" required><el-selectv-model="houseTypeId"placeholder="请选择"style="width: 100%"><el-optionv-for="(item, index) in houseTypeList":key="index":label="item.title":value="item.id"/></el-select></el-form-item><el-form-item label="风格"><el-selectv-model="seriesId"placeholder="请选择"style="width: 100%"><el-optionv-for="(item, index) in seriesList":key="index":label="item.title":value="item.id"/></el-select></el-form-item><!-- <el-form-item label="案例视频" prop="videoUrl"><el-input v-model="form.videoUrl" placeholder="http://" /><QnEleUploadVedio :image-url="form.videoUrl" @oss-url="ossPicUrlVideo" /><i class="warning">为了更好的保持兼容性建议上传mp4格式</i></el-form-item> --><el-form-item label="标签" prop="tags"><el-inputv-model="form.tags"placeholder="请输入标签,多个标签用 | 分割"/></el-form-item><el-form-item label="面积" prop="area"><el-input v-model="form.area" placeholder="请输入面积" required><template slot="append">平方米</template></el-input></el-form-item><el-form-item label="是否推荐" prop="isRecommend"><el-switchv-model="form.isRecommend":active-value="'1'":inactive-value="'0'"/></el-form-item></el-tab-pane><el-tab-pane label="案例详情" name="second"><!-- <el-form-item label="案例详情"><el-input v-model="form.skill" type="textarea" maxlength="150" show-word-limit /></el-form-item> --><div style="min-height: 500px"><QnEleUploadv-show="false"ref="upload"class="avatar-uploader":image-url="form.avatar"@oss-url="onUploadHandler"/><quill-editorref="myQuillEditor"v-model="form.detail":options="editorOption"style="min-height: 300px"/></div></el-tab-pane></el-tabs></el-form><div slot="footer" class="dialog-footer"><el-button @click="closeDialog">取 消</el-button><el-button type="primary" @click="enterDialog">确 定</el-button></div></el-dialog></div>
</template><style>
#editor—wrapper {border: 1px solid #ccc;z-index: 100; /* 按需定义 */
}
#toolbar-container {border-bottom: 1px solid #ccc;
}
#editor-container {height: 500px;
}
</style>
<script>
// 获取列表内容封装在mixins内部  getTableData方法 初始化已封装完成 条件搜索时候 请把条件安好后台定制的结构体字段 放到 this.searchInfo 中即可实现条件搜索import {getArticleList,createArticle,updateArticle,deleteArticle// deleteArticlesByIds
} from '@/api/article'
import { getProjectList } from '@/api/project'import { getCityList } from '@/api/city'
import { getCommunityList } from '@/api/community'
import { getSeriesList } from '@/api/series'import infoList from '@/mixins/infoList'
import { toSQLLine } from '@/utils/stringFun'
import QnEleUpload from '@/components/oss/qiniu'
// import QnEleUploadVedio from '@/components/oss/qiniuVideo'
import * as Quill from 'quill'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
// 引用字号和字体css
import '@/utils/quillEditor.css'
// 设置字体大小
const fontSizeStyle = Quill.import('attributors/style/size') // 引入这个后会把样式写在style上
fontSizeStyle.whitelist = ['12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px']
Quill.register(fontSizeStyle, true)
// 设置字体样式
const Font = Quill.import('attributors/style/font') // 引入这个后会把样式写在style上
const fonts = ['SimSun','SimHei','Microsoft-YaHei','KaiTi','FangSong'
]
Font.whitelist = fonts // 将字体加入到白名单
Quill.register(Font, true)
// 设置文字水平方式
var Align = Quill.import('attributors/style/align')
Align.whitelist = ['right', 'center', 'justify']
Quill.register(Align, true)
const toolbarOptions = [['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线['blockquote', 'code-block'], // 引用  代码块[{ header: 1 }, { header: 2 }], // 1、2 级标题[{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表[{ script: 'sub' }, { script: 'super' }], // 上标/下标[{ indent: '-1' }, { indent: '+1' }], // 缩进// [{ direction: 'rtl' }], // 文本方向[{ size: ['12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px'] }], // 字体大小[{ header: [1, 2, 3, 4, 5, 6] }], // 标题[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色// [{ font: ['songti'] }], // 字体种类[{ align: [] }], // 对齐方式['clean'], // 清除文本格式['image'] // 链接、图片,需要视频的可以加上video]// import * as Quill from 'quill'
// 调整上传图片大小
import ImageResize from 'quill-image-resize-module' // 引用
import { ImageDrop } from 'quill-image-drop-module'
// import { json } from 'body-parser'
Quill.register('modules/imageResize', ImageResize) // 注册
Quill.register('modules/imageDrop', ImageDrop)
import { getHouseTypeList } from '@/api/houseType'export default {name: 'Article',// 注册组件components: {QnEleUpload// QnEleUploadVedio},filters: {},mixins: [infoList],data () {return {panoramaList: [{ value: 0, label: '酷家乐', prefix: 'http://pano478.p.kujiale.com/' }, { value: 1, label: '小红屋', prefix: 'http://pano478.p.xiaohongwu.com/' }],isRecommend: 0,cityList: [],provinceId: 0,provinceName: '',cityId: 0,cityName: '',projectList: [],projectId: '1',provinceList: [],communityList: [{ id: '0', name: '请选择' }],communityId: '0',seriesList: [],seriesId: 0,houseTypeList: [],houseTypeId: 0,content: '', // 双向数据绑定数据tags: '',editorOption: {modules: {// 重写剪贴板模块clipboard: {matchers: [[Node.ELEMENT_NODE, (node, delta) => {// 拦截图片标签if (node.tagName === 'IMG') {// 返回空 Delta 阻止插入return new Delta().retain(delta.length());}return delta;}]]},toolbar: {container: toolbarOptions, // 工具栏handlers: {'image': function (value) {if (value) {// 调用el-upload的click点击事件实现文件上传document.querySelector('.avatar-uploader input').click()} else {this.quill.format('image', false)}}}},// 调整图片大小imageResize: {displayStyles: {backgroundColor: 'black',border: 'none',color: 'white'},modules: ['Resize', 'DisplaySize', 'Toolbar']}},placeholder: '请输入案例详情'},activeName: 'first',deleteVisible: false,listApi: getArticleList,dialogFormVisible: false,dialogTitle: '新增案例',articles: [],form: {id: 0,isRecommend: 0,projectId: '1',title: '',subtitle: '',picUrl: '',sort: 1,detail: '',provinceId: 0,provinceName: '',cityId: 0,cityName: '',tags: '',communityId: '0',seriesId: 0,houseTypeId: 0,area: '',panoramaUrl: '',panoramaType: 0,panoramaPrefix: ''},tab: 'first',rules: {title: [{ required: true, message: '请选输入案例标题', trigger: 'blur' }],picUrl: [{ required: true, message: '请上传案例封面', trigger: 'blur' }],detail: [{ required: true, message: '案例详情不能为空', trigger: 'blur' }],area: [{ required: true, message: '面积不能为空', trigger: 'blur' }],// seriesId: [{ required: true, message: '系列不能为空', trigger: 'blur' }],houseTypeId: [{ required: true, message: '风格不能为空', trigger: 'blur' }],panoramaUrl: [{required: false,validator: this.validatePanoramaUrl,trigger: 'blur'}]}}},watch: {seriesId (val) {this.form.seriesId = val},communityId (val) {this.form.communityId = val},projectId (val) {this.form.projectId = this.projectId},houseTypeId (val) {this.form.houseTypeId = val},provinceId (val) {this.cityList = this.provinceList.find(item => item.id === val).childrenconsole.log(1112, this.cityList)this.provinceName = this.provinceList.find(item => item.id === val).namethis.cityId = this.cityList[0].idthis.form.cityId = this.cityList[0].idthis.form.cityName = this.cityList[0].namethis.form.provinceName = this.provinceNamethis.form.provinceId = val},cityId (val) {this.cityId = valthis.form.cityId = valthis.form.cityName = this.cityList.find(item => item.id === val).name}// isRecommend (val) {//   this.form.isRecommend = Number(val)// }},async created () {const params = this.$route.paramsthis.searchInfo.projectName = params.projectNamethis.getTableData()this.initForm()},methods: {// 计算序号indexMethod (index) {return (this.page - 1) * this.pageSize + index + 1},validatePanoramaUrl (rule, value, callback) {if (value && !value.startsWith('http')) {callback(new Error('必须以http开头'))} else {callback()}},getProjectName (projectId) {console.log(111111, projectId)const project = this.projectList.find(item => item.id === projectId)return project ? project.title : '-'},getCommunityName (communityId) {const community = this.communityList.find(item => item.id === communityId)return community ? community.name : ''},getStyleName (seriesId) {const series = this.seriesList.find(item => item.id === seriesId)return series ? series.title : ''},getHouseTypeName (houseTypeId) {const houseType = this.houseTypeList.find(item => item.id === houseTypeId)return houseType ? houseType.title : ''},async getHouseTypeList () {const res = await getHouseTypeList({ page: 1, pageSize: 1000 })if (res.code === '0') {this.houseTypeList = res.data.listthis.houseTypeId = this.houseTypeList[0].idthis.form.houseTypeId = this.houseTypeId}},async getSeriesList () {const res = await getSeriesList({ page: 1, pageSize: 1000 })if (res.code === '0') {this.seriesList = res.data.listthis.seriesId = this.seriesList[0].idthis.form.seriesId = this.seriesId}},async getCommunityList () {const res = await getCommunityList({ page: 1, pageSize: 10000 })if (res.code === '0') {this.communityList = [{ id: '0', name: '请选择' }, ...res.data.list]// this.communityList = res.data.listthis.communityId = this.communityList[0].idthis.form.communityId = this.communityId}},async getProjectList () {const res = await getProjectList({ page: 1, pageSize: 1000 })if (res.code === '0') {this.projectList = res.data.listthis.projectId = this.projectList[0].idthis.form.projectId = this.projectId}},async getCityLists () {const res = await getCityList({})if (res.code === '0') {this.provinceList = res.data.listthis.provinceId = this.provinceList[0].idthis.provinceName = this.provinceList[0].namethis.form.provinceId = this.provinceIdthis.form.provinceName = this.provinceNamethis.form.cityId = this.provinceList[0].children[0].idthis.form.cityName = this.provinceList[0].children[0].name}},onEditorBlur (val) { }, // 失去焦点触发事件onEditorFocus () { }, // 获得焦点触发事件onEditorChange (val) { }, // 内容改变触发事件ossPicUrl (e) {this.form.picUrl = e.url},ossPicUrlVideo (e) {this.form.videoUrl = e.url},async onUploadHandler (e) {console.log(e)const imageUrl = e.url// 获取光标所在位置const quill = this.$refs.myQuillEditor.quillconst length = quill.getSelection().index// 插入图片quill.insertEmbed(length, 'image', imageUrl)// 调整光标到最后quill.setSelection(length + 1)// this.content += url},async onUploadHandlerCaseDescription (e) {console.log(e)const imageUrl = e.url// 获取光标所在位置const quill = this.$refs.myQuillEditorCaseDescription.quillconst length = quill.getSelection().index// 插入图片quill.insertEmbed(length, 'image', imageUrl)// 调整光标到最后quill.setSelection(length + 1)// this.content += url},handleClick (tab, event) {console.log(tab, event)},//  选中articlehandleSelectionChange (val) {this.articles = val},// async onDelete() {//   const ids = this.articles.map(item => item.id)//   const res = await deleteArticlesByIds({ ids })//   if (res.code === '0') {//     this.$message({//       type: 'success',//       message: res.message && '删除成功~'//     })//     if (this.tableData.length === ids.length && this.page > 1) {//       this.page--//     }//     this.deleteVisible = false//     this.getTableData()//   }// },// 排序sortChange ({ prop, order }) {if (prop) {this.searchInfo.orderKey = toSQLLine(prop)this.searchInfo.desc = order === 'descending'}this.getTableData()},// 条件搜索前端看此方法onSubmit () {this.page = 1this.pageSize = 10this.getTableData()},async initForm () {// this.$refs.articleForm.resetFields()this.form = {id: 0,isRecommend: 0,projectId: '1',title: '',subtitle: '',picUrl: '',sort: 1,detail: '',provinceId: 0,provinceName: '',cityId: 0,cityName: '',communityId: 0,seriesId: 0,houseTypeId: 0,area: '',panoramaType: 0,panoramaPrefix: ''}await this.getCityLists()await this.getProjectList()await this.getCommunityList()await this.getSeriesList()await this.getHouseTypeList()},closeDialog () {// this.initForm()this.dialogFormVisible = false},openDialog (type) {switch (type) {case 'addArticle':this.initForm()this.dialogTitle = '新增案例'breakcase 'edit':this.dialogTitle = '编辑案例'breakdefault:break}this.activeName = 'first'this.type = typethis.dialogFormVisible = true},async editArticle (row) {// const res = await getArticleById({ id: row.id })// if (res.code === '0') {//   this.form = res.data//   this.openDialog('edit')// }// this.initForm()console.log(2222, row)// this.$nextTick(() => {this.form = rowthis.communityId = row.communityIdthis.projectId = row.projectIdthis.provinceId = row.provinceIdthis.cityId = row.cityIdthis.houseTypeId = row.houseTypeIdthis.seriesId = row.seriesIdthis.isRecommend = Number(row.isRecommend)// this.form.isRecommend = Number(row.isRecommend)// this.form.isShow = Number(row.isShow)// this.openDialog('edit')// })this.openDialog('edit')},async deleteArticle (row) {this.$confirm('此操作将永久删除该条记录, 是否继续?','提示',{confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async () => {const res = await deleteArticle({ id: row.id })if (res.code === '0') {this.$message({type: 'success',message: '删除成功!'})if (this.tableData.length === 1 && this.page > 1) {this.page--}this.getTableData()}}).catch(() => {this.$message({type: 'info',message: '已取消删除'})})},async enterDialog () {this.$refs.articleForm.validate(async valid => {if (valid) {for (let i = 0; i < this.panoramaList.length; i++) {if (this.form.panoramaType == this.panoramaList[i].value) {this.form.panoramaPrefix = this.panoramaList[i].prefix}}// this.form.mentorId = Number(this.form.mentorId)switch (this.type) {case 'addArticle':{const res = await createArticle(this.form)if (res.code === '0') {this.$message({type: 'success',message: '添加成功',showClose: true})}this.getTableData()this.closeDialog()}breakcase 'edit':{const res = await updateArticle(this.form)if (res.code === '0') {this.$message({type: 'success',message: '编辑成功',showClose: true})}this.getTableData()this.closeDialog()}breakdefault:// eslint-disable-next-line no-lone-blocks{this.$message({type: 'error',message: '未知操作',showClose: true})}break}}})}}
}
</script><style scoped lang="scss">
.button-box {padding: 10px 20px;.el-button {float: right;}
}
.el-tag--mini {margin-left: 5px;
}
.warning {color: #dc143c;
}
.quill-editor {height: 400px;
}.editor {line-height: normal !important;height: 400px;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {border-right: 0px;content: "保存";padding-right: 0px;
}.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {content: "32px";
}.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {content: "标题6";
}.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {content: "衬线字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {content: "等宽字体";
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12"]::before {content: "12px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14"]::before {content: "14px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16"]::before {content: "16px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18"]::before {content: "18px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20"]::before {content: "20px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="22"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="22"]::before {content: "22px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="24"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="24"]::before {content: "24px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="28"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="28"]::before {content: "28px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="32"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="32"]::before {content: "32px";vertical-align: top;
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="36"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="36"]::before {content: "36px";vertical-align: top;
}/* 这个是字号数字对应的px值 */
.ql-editor .ql-size-12 {font-size: 12px;
}
.ql-editor .ql-size-14 {font-size: 14px;
}
.ql-editor .ql-size-16 {font-size: 16px;
}
.ql-editor .ql-size-18 {font-size: 18px;
}
.ql-editor .ql-size-20 {font-size: 20px;
}
.ql-editor .ql-size-22 {font-size: 22px;
}
.ql-editor .ql-size-24 {font-size: 24px;
}
.ql-editor .ql-size-28 {font-size: 28px;
}
.ql-editor .ql-size-32 {font-size: 32px;
}
.ql-editor .ql-size-36 {font-size: 36px;
}/* 选择字号富文本字的大小 */
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12"]::before {font-size: 12px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14"]::before {font-size: 14px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16"]::before {font-size: 16px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18"]::before {font-size: 18px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20"]::before {font-size: 20px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="22"]::before {font-size: 22px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="24"]::before {font-size: 24px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="28"]::before {font-size: 28px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="32"]::before {font-size: 32px;
}
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="36"]::before {font-size: 36px;
}
</style>

quillEditor.css

.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before {content: "黑体";font-family: "SimHei";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before {content: "微软雅黑";font-family: "Microsoft YaHei";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before {content: "楷体";font-family: "KaiTi";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before {content: "仿宋";font-family: "FangSong";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before {content: "Arial";font-family: "Arial";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Times-New-Roman]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Times-New-Roman]::before {content: "Times New Roman";font-family: "Times New Roman";
}.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=sans-serif]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=sans-serif]::before {content: "sans-serif";font-family: "sans-serif";
}.ql-font-SimSun {font-family: "SimSun";
}.ql-font-SimHei {font-family: "SimHei";
}.ql-font-Microsoft-YaHei {font-family: "Microsoft YaHei";
}.ql-font-KaiTi {font-family: "KaiTi";
}.ql-font-FangSong {font-family: "FangSong";
}.ql-font-Arial {font-family: "Arial";
}.ql-font-Times-New-Roman {font-family: "Times New Roman";
}.ql-font-sans-serif {font-family: "sans-serif";
}/* 字号设置 */
/* 默认字号 */
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12px"]::before {content: "12px";font-size: 12px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {content: "14px";font-size: 14px;
}.ql-size-14px {font-size: 14px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16px"]::before {content: "16px";font-size: 16px;
}.ql-size-16px {font-size: 16px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18px"]::before {content: "18px";font-size: 18px;
}.ql-size-18px {font-size: 18px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {content: "20px";font-size: 20px;
}.ql-size-20px {font-size: 20px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="22px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="22px"]::before {content: "22px";font-size: 22px;
}.ql-size-22px {font-size: 22px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="26px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="26px"]::before {content: "26px";font-size: 26px;
}.ql-size-26px {font-size: 26px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="28px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="28px"]::before {content: "28px";font-size: 28px;
}.ql-size-28px {font-size: 28px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="30px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="30px"]::before {content: "30px";font-size: 30px;
}.ql-size-30px {font-size: 30px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="32px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="32px"]::before {content: "32px";font-size: 32px;
}.ql-size-32px {font-size: 32px;
}.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="36px"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="36px"]::before {content: "36px";font-size: 36px;
}.ql-size-36px {font-size: 36px;
}

config.js

export const titleConfig = [{ Choice: '.ql-bold', title: '加粗' },{ Choice: '.ql-italic', title: '斜体' },{ Choice: '.ql-underline', title: '下划线' },{ Choice: '.ql-header', title: '段落格式' },{ Choice: '.ql-strike', title: '删除线' },{ Choice: '.ql-blockquote', title: '块引用' },{ Choice: '.ql-code', title: '插入代码' },{ Choice: '.ql-code-block', title: '插入代码段' },{ Choice: '.ql-font', title: '字体' },{ Choice: '.ql-size', title: '字体大小' },{ Choice: '.ql-list[value="ordered"]', title: '编号列表' },{ Choice: '.ql-list[value="bullet"]', title: '项目列表' },{ Choice: '.ql-direction', title: '文本方向' },{ Choice: '.ql-header[value="1"]', title: 'h1标题' },{ Choice: '.ql-header[value="2"]', title: 'h2标题' },{ Choice: '.ql-align', title: '对齐方式' },{ Choice: '.ql-color', title: '字体颜色' },{ Choice: '.ql-background', title: '背景颜色' },{ Choice: '.ql-image', title: '图像' },{ Choice: '.ql-video', title: '视频' },{ Choice: '.ql-link', title: '添加链接' },{ Choice: '.ql-table', title: '添加表格' },{ Choice: '.ql-formula', title: '插入公式' },{ Choice: '.ql-clean', title: '清除字体格式' },{ Choice: '.ql-script[value="sub"]', title: '下标' },{ Choice: '.ql-script[value="super"]', title: '上标' },{ Choice: '.ql-indent[value="-1"]', title: '向左缩进' },{ Choice: '.ql-indent[value="+1"]', title: '向右缩进' },{ Choice: '.ql-header .ql-picker-label', title: '标题大小' },{ Choice: '.ql-header .ql-picker-item[data-value="1"]', title: '标题一' },{ Choice: '.ql-header .ql-picker-item[data-value="2"]', title: '标题二' },{ Choice: '.ql-header .ql-picker-item[data-value="3"]', title: '标题三' },{ Choice: '.ql-header .ql-picker-item[data-value="4"]', title: '标题四' },{ Choice: '.ql-header .ql-picker-item[data-value="5"]', title: '标题五' },{ Choice: '.ql-header .ql-picker-item[data-value="6"]', title: '标题六' },{ Choice: '.ql-header .ql-picker-item:last-child', title: '标准' },{ Choice: '.ql-size .ql-picker-item[data-value="small"]', title: '小号' },{ Choice: '.ql-size .ql-picker-item[data-value="large"]', title: '大号' },{ Choice: '.ql-size .ql-picker-item[data-value="huge"]', title: '超大号' },{ Choice: '.ql-size .ql-picker-item:nth-child(2)', title: '标准' },{ Choice: '.ql-align', title: '文本对齐' },{ Choice: '.ql-align .ql-picker-item:first-child', title: '居左对齐' },{ Choice: '.ql-align .ql-picker-item[data-value="center"]', title: '居中对齐' },{ Choice: '.ql-align .ql-picker-item[data-value="right"]', title: '居右对齐' },{ Choice: '.ql-align .ql-picker-item[data-value="justify"]', title: '两端对齐' }
]

相关文章:

quillEditor 禁用复制粘贴图片,以及class转style等问题

<template><div><div class"search-term"><el-form :inline"true" :model"searchInfo" class"demo-form-inline"><el-form-item label"案例标题"><el-input v-model"searchInfo.titl…...

C语⾔数据类型和变量

C 语言的数据类型 类型分类&#xff1a; C 语言提供丰富的数据类型&#xff0c;包括字符型&#xff08;char、signed char、unsigned char&#xff09;、整型&#xff08;short、int、long 等多种&#xff0c;且各有 signed 和 unsigned 修饰形式&#xff09; 、浮点型&#x…...

centOS 环境 安装redis方法

一、准备centOS环境 参考文章&#xff1a;Hyper-V 安装CentOS7_代码草率了的博客-CSDN博客 二、redis官网 地址&#xff1a;Download | Redis 演示版本为?redis-5.0.14.tar.gz 三、redis源码编译 登录后创建soft目录 进入目录使用wget下载所需资源包 命令&#xff1a;w…...

【Mac】2025-MacOS系统下常用的开发环境配置

早期版本的一个环境搭建参考 1、brew Mac自带终端运行&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Installation successful!成功后运行三行命令后更新环境&#xff08;xxx是mac的username&a…...

深入理解动态绑定与多态

动态绑定介绍 Java中的动态绑定&#xff0c;是一种在程序运行时确定方法执行版本的过程。它与多态紧密联系。 在Java中&#xff0c;动态绑定通常发生在以下情况&#xff1a; 方法覆盖&#xff1a;当子类重写父类的一个方法时&#xff0c;调用该方法的行为会根据对象的实际类…...

【数据结构】二叉树总结篇

遍历 递归 递归三部曲&#xff1a; 1.参数和返回值 2.终止条件 3.单层逻辑&#xff08;遍历顺序&#xff09; var preorderTraversal function(root) { // 第一种let res[];const dfsfunction(root){if(rootnull)return ;//先序遍历所以从父节点开始res.push(root.val);//递归…...

Zookeeper 及 基于ZooKeeper实现的分布式锁

1 ZooKeeper 1.1 ZooKeeper 介绍 ZooKeeper是一个开源的分布式协调服务&#xff0c;它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效可靠的原语集&#xff0c;并以一系列简单易用的接口提供给用户使用。 原语&#xff1a;操作系统或…...

内嵌踢脚线怎么做能省钱?

家里装修内嵌踢脚线应该怎么做&#xff1f;哪种做法更经济&#xff1f; 先回答内嵌踢脚线应该怎么做&#xff1f; 做内嵌踢脚线有两种办法&#xff0c;简单点来说就是前凸和后挖。 前凸是踢脚线安到原来墙面上&#xff0c;踢脚线是从墙面上凸出来的&#xff0c;想要实现内嵌的效…...

DeepSeek集成到VScode工具,让编程更高效

DeepSeek与VScode的强强联合&#xff0c;为编程效率树立了新标杆。 DeepSeek&#xff0c;一款卓越的代码搜索引擎&#xff0c;以其精准的索引和高速的检索能力&#xff0c;助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后&#xff0c;开发者无需离开熟悉的编辑…...

大模型应用:多轮对话(prompt工程)

概述 在与大型语言模型&#xff08;如ChatGPT&#xff09;交互的过程中&#xff0c;我们常常体验到与智能助手进行连贯多轮对话的便利性。那么&#xff0c;当我们开启一个新的聊天时&#xff0c;系统是如何管理聊天上下文的呢&#xff1f; 一、初始上下文的建立 1. 创建新会…...

洛谷 P1601 A+B Problem(高精)详解c++

我们之前做题碰到的数据范围一般是10^9&#xff0c;多点会达到10^18级别&#xff0c;处理10^9用int就可以存下&#xff0c;10^18次方要用到long long&#xff0c;接着解决加减乘除的问题&#xff0c;但是当数据范围达到了10^10^6的时候&#xff0c;当数据的值特别⼤&#xff0c…...

【云原生】Spring Cloud是什么?Spring Cloud版本介绍

什么是SpringCloud 上一章节介绍了总体的SpringCloud的总体学习章节&#xff0c;因为最近项目刚好需要用到SpringCloud来搭建微服务项目、所以就跟着大家一起来再学习巩固下SpringCloud的相关知识 SpringCloud是基于SpringBoot提供了一套微服务解决方案&#xff0c;包括服务注…...

最节省成本的架构方案:无服务器架构

无服务器架构&#xff08;Serverless Architecture&#xff09;是一种颠覆性的云计算执行模型&#xff0c;它允许开发者专注于编写和部署代码&#xff0c;而无需担心底层服务器基础设施的管理。这种架构以其按需付费、自动伸缩和简化部署等优势&#xff0c;在成本优化方面表现出…...

C++入门续集:

1. 缺省参数&#xff1a; 我们看我们的上图&#xff0c;我们可以看我们的函数Func&#xff0c;我们可以看到我们的函数里面的参数写的是int a 0&#xff1b;这个写法是我们没有见过的&#xff0c;我们之前在C语言里面只见到过说是函数里面会设置参数&#xff0c;但是参数是没有…...

线代[9]|线性代数主要内容及其发展简史(任广千《线性代数的几何意义》的附录1)

文章目录 向量行列式矩阵线性方程组二次型 向量 向量又称为矢量&#xff0c;最初应用与物理学。很多物理量如力、速度、位移以及电场强度、磁感应强度等等都是向量。大约公元前350年前&#xff0c;古希腊著名学者亚里士多德就知道了力可以表示成向量&#xff0c;两个力的组合作…...

C++ Primer 动态内存与智能指针

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

AI在原型设计中的革命性应用:效率与创新的双重突破

引言 在数字化转型加速的今天&#xff0c;产品开发周期被压缩至前所未有的程度。原型设计作为产品开发的核心环节&#xff0c;其效率和质量直接影响最终产品的市场竞争力。传统原型设计流程依赖人工绘制、反复修改和用户测试&#xff0c;耗时且成本高昂。而人工智能&#xff0…...

网络学习(四)HTTPS中,SSL的单向认证与双向认证

目录 一、什么是SSL&#xff1f;1.1 SSL 的主要功能1.2 SSL 的工作原理1.3 SSL 的核心组件1.4 SSL 的应用场景1.5 SSL 与 TLS 的区别 二、SSL 单向认证、双向认证2.1 SSL 单向认证2.2 SSL 双向认证2.3 总结&#xff1a;SSL 单向认证和双向认证的区别 一、什么是SSL&#xff1f;…...

分类任务和回归任务的区别

分类任务和回归任务是机器学习中两种常见的监督学习任务&#xff0c;尽管它们都属于预测性的分析&#xff0c;但它们的目标和应用场景存在显著的差异。 分类任务 定义&#xff1a;分类任务是指将输入样本映射到一个有限且离散的类别集合中的过程。目标是对数据进行分类&#…...

android接入rocketmq

一 前言 RocketMQ 作为一个功能强大的消息队列系统&#xff0c;不仅支持基本的消息发布与订阅&#xff0c;还提供了顺序消息、延时消息、事务消息等高级功能&#xff0c;适应了复杂的分布式系统需求。其高可用性架构、多副本机制、完善的运维管理工具&#xff0c;以及安全控制…...

V4L2框架基础

一、V4L2视频设备驱动基础 1.V4L2是专门为Linux设备设计的整合视频框架&#xff08;其主要核心在Linux内核&#xff0c;相当于Linux操作系统上层的视频源捕获驱动框架&#xff09;。为上层访问系统底层的视频设备提供一个统一的标准接口。V4L2驱动框架能够支持多种类型&#x…...

【微知】如何通过mlxlink查看Mellanox网卡和光模块相关的信息?( mlxlink -d 01:00.0 -m)

背景 通过mlxlink可以查看Mellanox网卡的一些链路信息和硬件信息&#xff0c;也可以查看所插入的光模块的一些信息。 兄弟篇通过ethtool查看的方法&#xff1a;如何查看Mellanox网卡上的光模块的信息&#xff1f; 命令 mlxlink -d 01:00.0 -mman手册介绍&#xff1a; 如果…...

使用pytorch和opencv根据颜色相似性提取图像

需求&#xff1a;将下图中的花朵提取出来。 代码&#xff1a; import cv2 import torch import numpy as np import timedef get_similar_colors(image, color_list, threshold):# 将图像和颜色列表转换为torch张量device torch.device(cuda if torch.cuda.is_available() el…...

HTML label 标签使用

点击 <label> 标签通常会使与之关联的表单控件获得焦点或被激活。 通过正确使用 <label> 标签&#xff0c;可以使表单更加友好和易于使用&#xff0c;同时提高整体的可访问性。 基本用法 <label> 标签通过 for 属性与 id 为 username 的 <input> 元素…...

SQL注入的分类靶场实践

前言 SQL 注入&#xff08;SQL Injection&#xff09;是一种常见且危险的 Web 安全漏洞&#xff0c;攻击者通过在输入字段中插入恶意 SQL 代码&#xff0c;能够绕过应用程序的验证机制&#xff0c;直接操纵数据库。本文将介绍 SQL 注入的分类&#xff0c;并通过 Pikachu 靶场进…...

用matplotlib构建BI看板:Superset插件开发实战

目录 前言&#xff1a;当经典可视化库遇见BI航母 一、Superset插件架构精要 1.1 核心模块解析 1.2 插件通信机制 二、开发环境准备 2.1 依赖矩阵 三、开发自定义可视化插件 3.1 插件脚手架 3.2 渲染引擎适配 四、Superset深度集成 4.1 控制面板配置 4.2 动态参数传递…...

【Linux】之【Bug】VMware 虚拟机开机 一直卡在黑屏左上角下划线闪烁界面

解决 参考&#xff1a; 解决Ubuntu20.04 开机黑屏光标闪烁进不去系统 Centos根目录100%解决思路 当前界面 ctrlaltf3-f6 暂时进入终端界面 df -h 查看发现根目录 磁盘空间已满 执行命令 查看当前目录占用内存明细 sudo du -h -x --max-depth1清理无用的大内存文件 或者安装…...

【练习】【链表】力扣热题100 19. 删除链表的倒数第 N 个结点

题目 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&…...

SQL-labs13-16闯关记录

http://127.0.0.1/sqli-labs/less-13/ 基于POST单引号双注入变形 1&#xff0c;依然是一个登录框&#xff0c;POST型SQL注入 2&#xff0c;挂上burpsuite&#xff0c;然后抓取请求&#xff0c;构造请求判断漏洞类型和闭合条件 admin 发生了报错&#xff0c;根据提示闭合方式是(…...

【Linux】进程信号——信号保存和信号捕捉

文章目录 信号保存信号相关的概念信号是如何保存的呢&#xff1f;有关信号保存的系统调用sigprocmask信号的增删查改查看pending表验证接口 信号捕捉用户态与内核态信号捕捉流程 总结 信号保存 信号相关的概念 信号递达&#xff1a;指 操作系统 将一个信号&#xff08;Signal…...

任务9:交换机基础及配置

CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、交换机基础 交换机的概念&#xff1a;交换机是一种网络设备&#xff0c;用于连接多台计算机或网络设备&#xff0c;实现数据包在局域网内的快速交换。交换机基于MAC地址来转发数据包&#x…...

【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解

目录&#xff1a; 1.题目描述&#xff1a; 输入格式 输出格式 2.题解&#xff1a; 3.详细c代码 1.题目描述&#xff1a; 小明冒充 X 星球的骑士&#xff0c;进入了一个奇怪的城堡。 城堡里边什么都没有&#xff0c;只有方形石头铺成的地面。 假设城堡地面是 nn 个方格。…...

深度学习R8周:RNN实现阿尔兹海默症(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 数据集包含2149名患者的广泛健康信息&#xff0c;每名患者的ID范围从4751到6900不等。该数据集包括人口统计详细信息、生活方式因素、病史、临床测量、认知和功…...

字节跳动发布 Trae AI IDE!支持 DeepSeek R1 V3,AI 编程新时代来了!

3 月 3 日&#xff0c;字节跳动重磅发布国内首款 AI 原生集成开发环境&#xff08;AI IDE&#xff09;——Trae 国内版&#xff01; Trae 不只是一个传统的 IDE&#xff0c;它深度融合 AI&#xff0c;搭载 doubao-1.5-pro 大模型&#xff0c;同时支持DeepSeek R1 & V3&…...

智能合约安全指南 [特殊字符]️

智能合约安全指南 &#x1f6e1;️ 1. 安全基础 1.1 常见漏洞类型 重入攻击整数溢出权限控制缺陷随机数漏洞前后运行攻击签名重放 1.2 安全开发原则 最小权限原则检查-生效-交互模式状态机安全失败保护机制 2. 重入攻击防护 2.1 基本防护模式 contract ReentrancyGuarde…...

DeepSeek 全套资料pdf合集免费下载(持续更新)

有很多朋友都关注DeepSeek相关使用的教程资料&#xff0c;本站也一直持续分享DeepSeek 学习相关的pdf资料&#xff0c;由于比较零散&#xff0c;这篇文章主要就是做一个汇总&#xff0c;并且持续更新&#xff0c;让大家可以及时获取下载最新的相关DeepSeek的资料。 持续更新地…...

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;让你的 AI 编程助手更智能&#xff0c;提高开发效率。 一、前置准备 在开始之前&#xff0c;请确保你已经具备以下条件&#xff1a; 安装了 JetBrains IDEA&…...

将md格式转jupyter并运行

将md格式转jupyter并运行 有时候我们需要将这种文档以学习的形式记笔记到jupyter中&#xff08;任务&#xff09; 但是内容太多了&#xff0c;一个一个粘贴又不方便&#xff0c;怎么办呢&#xff1f; 发现直接粘贴到md中是带格式的&#xff01;&#xff01;&#xff01; 那…...

SOUI基于Zint生成EAN码

EAN码广泛应用与欧洲的零售业。包括EAN-2、EAN-5、EAN-8和EAN-12码。分别编码 2、5、7 或 12 位数字。此外&#xff0c;可以使用 字符将 EAN-2 和 EAN-5 附加符号添加到 EAN-8 和 EAN-13 符号中&#xff0c;就像 UPC 符号一样。 EAN-8校验码计算&#xff1a; 从左往右奇数位的…...

StarRocks-fe工程在Cursor中不能识别为Java项目

SR简介 StarRocks 是一款高性能分析型数据库&#xff0c;支持实时、多维度、高并发的数据分析。本指南旨在解决在使用 VSCode 或 Cursor 开发 StarRocks 后端项目时遇到的模块识别问题。 问题描述 使用 Cursor 或 VSCode 打开 StarRocks 的后端工程 fe 时&#xff0c;spark-…...

AI是否能真正理解人类情感?从语音助手到情感机器人

引言&#xff1a;AI与情感的交集 在过去的几十年里&#xff0c;人工智能&#xff08;AI&#xff09;的发展速度令人惊叹&#xff0c;从简单的语音识别到如今的深度学习和情感计算&#xff0c;AI已经深入到我们生活的方方面面。尤其是在语音助手和情感机器人领域&#xff0c;AI不…...

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)

【Linux】【网络】UDP打洞–&#xff1e;不同子网下的客户端和服务器通信&#xff08;成功版&#xff09; 根据上个文章的分析 问题可能出现在代码逻辑上面 我这里重新查找资料怀疑&#xff1a; 1 NAT映射可能需要多次数据包的发送才能建立。 2 NAT映射保存时间太短&#xff…...

【微知】如何查看Mellanox网卡上的光模块的信息?(ethtool -m enp1s0f0 看型号、厂商、生产日期等)

背景 服务器上插入的光模块经常被忽略&#xff0c;往往这里是定位问题最根本的地方。如何通过命令查看&#xff1f; 命令 ethtool提供了-m参数&#xff0c;m是module-info的意思&#xff0c;他是从光模块的eeprom中读取数据。&#xff08;应该是用i2c协议读取的&#xff09;…...

图论基础算法: 二分图的判定(C++)

二分图的基本概念 什么是二分图? 二分图(Bipartite Graph)是指一个图的顶点集可以被分割为两个互不相交的子集 U U U 和 V V V, 并且图中的每一条边都连接 U U U 中的一个顶点和 V V V 中的一个顶点. 换句话说, 二分图中的顶点可以被分成两组, 组内的顶点之间没有边相连…...

AI赋能校园安全:科技助力预防与应对校园霸凌

校园本应是学生快乐学习、健康成长的地方&#xff0c;然而&#xff0c;校园霸凌却成为威胁学生身心健康的隐形“毒瘤”。近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在校园安全领域的应用逐渐成为解决校园霸凌问题的新突破口。通过…...

PyTorch系列教程:评估和推理模式下模型预测

使用PyTorch时&#xff0c;将模型从训练阶段过渡到推理阶段是至关重要的一步。在推理过程中&#xff0c;该模型用于对以前从未见过的新数据进行预测。这种转换的一个重要方面是使用推理模式&#xff0c;它通过禁用仅在训练期间需要的操作来帮助优化模型的性能。 理解推理模式 …...

Linux注册进程终止处理函数

atexit() 是一个标准库函数&#xff0c;用于注册在进程正常终止时要调用的函数。通过 atexit()&#xff0c;你可以确保在程序结束时自动执行一些清理工作&#xff0c;比如释放资源、保存状态等。 函数原型如下&#xff1a; #include <stdlib.h> int atexit(void (*func…...

Lumerical INTERCONNECT 中的自相位调制 (SPM)

一、自相位调制的数学介绍 A.非线性薛定谔方程&#xff08;NLSE&#xff09;&#xff1a; NLSE 是光学中的一个关键方程。它告诉我们光脉冲在具有非线性和色散特性的介质中的行为方式。该方程如下所示&#xff1a; i ∂A/∂z β2/2 ∂A/∂t γ|A|A 0 其中&#xff1a; - …...

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-GET、Worklist

DICOM服务说明 DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是一种用于处理、存储、打印和传输医学影像的标准。DICOM定义了多种服务类&#xff0c;其中C-STORE、C-FIND、C-MOVE和C-GET是与影像数据查询和检索相关的四个主要服务类&#xff…...

Python的pdf2image库将PDF文件转换为PNG图片

您可以使用Python的pdf2image库将PDF文件转换为PNG图片。以下是一个完整的示例&#xff0c;包含安装步骤、代码示例和注意事项。 安装依赖库 首先&#xff0c;您需要安装pdf2image库&#xff1a; pip install pdf2imagepdf2image依赖于poppler库来解析PDF文件。 Windows系统…...