Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Element Plus (Vue 3) & Element UI (Vue 2.7/2.6) isomorphic component library. ❄️ More than Element.
Element Plus (Vue 3) & Element UI (Vue 2.7/2.6) 一体通用组件库。
❄️ 不止于 Element。
[!WARNING]
kikimore 已升级至原作者 cloydlau 的 faim
不仅有更多的新组件和能力增强,为了后续的漏洞修复和迭代优化,请尽快迁移
npm i kikimore
// vite.config.ts
export default defineConfig({
optimizeDeps: {
include: ['kikimore'],
},
})
// vue.config.js
module.exports = {
transpileDependencies: ['kikimore'],
}
<script setup>
import { KiFormDialog, KiPopButton, KiPopSwitch, KiSelect } from 'kikimore'
</script>
import { createApp, h } from 'vue'
import 'element-plus/dist/index.css'
import ElementPlus from 'element-plus'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { KiFormDialog, KiPopButton, KiPopSwitch, KiSelect } from 'kikimore'
import App from './App.vue'
const app = createApp(App)
.use(ElementPlus)
.use(KiFormDialog, {
// 全局配置
})
.use(KiPopButton, {
// 全局配置
})
.use(KiPopSwitch, {
// 全局配置
})
.use(KiSelect, {
// 全局配置
})
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.mount('#app')
⚠ 暂不支持。
<script>
import { KiFormDialog, KiPopButton, KiPopSwitch, KiSelect } from 'kikimore'
export default {
components: { KiFormDialog, KiPopButton, KiPopSwitch, KiSelect },
}
</script>
import Vue from 'vue'
import 'element-ui/lib/theme-chalk/index.css'
import ElementUI from 'element-ui'
import { KiFormDialog, KiPopButton, KiPopSwitch, KiSelect } from 'kikimore'
import App from './App.vue'
Vue.use(ElementUI)
Vue.use(FormDialog, {
// 全局配置
})
Vue.use(KiPopButton, {
// 全局配置
})
Vue.use(KiPopSwitch, {
// 全局配置
})
Vue.use(KiSelect, {
// 全局配置
})
new Vue({
render: h => h(App),
}).$mount('#app')
⚠ 暂不支持。
名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
title | 对话框标题 | string | |
v-model:show (Vue 3) / show.sync (Vue 2) | 是否显示 | boolean | false |
modelValue (Vue 3) / value (Vue 2) / v-model | 表单数据对象 (el-form 的 model ) | any | |
elFormProps | el-form 的属性 | object | |
retrieve | 读取数据 | Function | |
loading | 读取状态 | boolean | false |
readonly | 是否只读 | boolean | false |
showFullscreenToggle | 是否显示全屏开关 | boolean | true |
showConfirmButton | 是否显示确认按钮 | boolean | !readonly |
confirmButtonText | 确认按钮的文案 | string | 'OK' |
confirm | 确认 | Function | |
showCancelButton | 是否显示取消按钮 | boolean | !readonly |
cancelButtonText | 取消按钮的文案 | string | 'Cancel' |
showDenyButton | 是否显示拒绝按钮 | boolean | false |
denyButtonText | 拒绝按钮的文案 | string | 'No' |
deny | 拒绝 | Function | |
showResetButton | 是否显示重置按钮 | boolean | false |
resetButtonText | 重置按钮的文案 | string | 'Reset' |
reverseButtons | 是否反转按钮顺序 | boolean | false |
... | el-dialog 的属性 |
如果是 plain object 类型,将用于 el-form
的 model
。
onMounted
时记录初始值 (与 el-form-item
保持一致),关闭对话框时会重置至初始值。
<template>
<KiFormDialog
:retrieve="() => {
// 表格打开之后、获取数据之前
$POST('xxx').then(() => {
// 获取数据之后
})
}"
/>
</template>
开启只读模式时默认不显示确认和取消按钮。
跟 <el-form disabled />
的区别是在样式上,更便于用户阅读。
如果希望部分组件不进入禁用状态:
:disabled="false"
<el-form />
如果返回一个 Promise 实例,则在该 Promise 实例状态终结后对话框才会关闭。
<template>
<KiFormDialog
:confirm="() => {
// 确认之前
$POST('xxx').then(() => {
// 确认之后
})
}"
/>
</template>
返回 Promise.reject()
/ Promise.resolve({ show: true })
/ { show: true }
时对话框不会关闭。
<template>
<KiFormDialog
:confirm="() => {
const valid = true
if (valid) {
return $POST('xxx')
}
else {
$swal.warning('校验失败')
return {
show: true,
}
}
}"
/>
</template>
如果返回一个 Promise 实例,则在该 Promise 实例状态终结后对话框才会关闭。
<template>
<KiFormDialog
:deny="() => {
// 确认之前
$POST('xxx').then(() => {
// 确认之后
})
}"
/>
</template>
返回 Promise.reject()
/ Promise.resolve({ show: true })
/ { show: true }
时对话框不会关闭。
<template>
<KiFormDialog
:deny="() => {
const valid = true
if (valid) {
return $POST('xxx')
}
else {
$swal.warning('校验失败')
return {
show: true,
}
}
}"
/>
</template>
关于 “确定” 和 “取消” 按钮的顺序,可以看看这篇知乎回答。
名称 | 说明 | 回调参数 |
---|---|---|
fullscreen-change | 切换全屏状态时触发 | (fullscreen: boolean) |
... | el-dialog 、el-form 的事件 |
名称 | 说明 |
---|---|
— | el-form 的内容 |
... | el-dialog 的插槽 |
名称 | 说明 | 类型 |
---|---|---|
highlightError | 平滑滚动至校验失败的表单项 | (selectors: string | Element | NodeList = '.el-form .el-form-item.is-error', container = window) => void |
... | 通过 ref 调用 el-form 的方法 |
.el-dialog__wrapper, .v-modal {
position: absolute;
}
// 在原来的基础上减去 navbar + tab 的高度 (以 90px 为例)
.el-dialog {
.el-dialog__body {
max-height: calc(100vh - 190px) !important;
}
&.is-fullscreen .el-dialog__body {
max-height: calc(100vh - 135px) !important;
}
}
el-button
+ el-popconfirm
+ el-popover
+ el-tooltip
组合拳。
el-popconfirm
点击确定后才会触发 click
事件)el-popover
和 el-tooltip
的 content
属性均支持渲染 HTMLel-tooltip
不与 el-popconfirm
、el-popover
冲突el-popconfirm
、el-popover
、el-tooltip
内容为空时,默认不启用名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
elPopconfirmProps | el-popconfirm 的属性 | object | |
elPopoverProps | el-popover 的属性,支持事件绑定 | object | |
elPopoverProps.rawContent | content 中的内容是否作为 HTML 字符串处理 | boolean | false |
elTooltipProps | el-tooltip 的属性 | object | |
elTooltipProps.rawContent | content 中的内容是否作为 HTML 字符串处理 | boolean | false |
... | el-button 的属性 |
el-popconfirm
、el-popover
的事件。
名称 | 说明 |
---|---|
tooltip-content | el-tooltip 的 content 插槽 |
popover-content | el-popover 的 content 插槽 |
el-switch
+ el-popconfirm
+ el-popover
+ el-tooltip
组合拳。
el-popconfirm
点击确定后才会触发 change
事件)el-popover
和 el-tooltip
的 content
属性均支持渲染 HTMLel-tooltip
不与 el-popconfirm
、el-popover
冲突el-popconfirm
、el-popover
、el-tooltip
内容为空时,默认不启用名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
inlinePrompt | 是否内嵌文字描述 | boolean | false |
elPopconfirmProps | el-popconfirm 的属性 | object | |
elPopoverProps | el-popover 的属性,支持事件绑定 | object | |
elPopoverProps.rawContent | content 中的内容是否作为 HTML 字符串处理 | boolean | false |
elTooltipProps | el-tooltip 的属性 | object | |
elTooltipProps.rawContent | content 中的内容是否作为 HTML 字符串处理 | boolean | false |
... | el-switch 的属性 |
el-switch
、el-popconfirm
、el-popover
的事件。
名称 | 说明 |
---|---|
tooltip-content | el-tooltip 的 content 插槽 |
popover-content | el-popover 的 content 插槽 |
通过 ref 调用 el-switch
的方法。
el-select
+ el-option
+ el-option-group
组合拳。
label
options
和 loading
label
(而不是 value
)名称 | 说明 | 类型 | 默认值 |
---|---|---|---|
modelValue (Vue 3) / value (Vue 2) / v-model | 绑定值 | any | |
v-model:options (Vue 3) / options.sync (Vue 2) | 选项 | any[] | |
props | 定位选项的各项属性 | object | |
search | 远程搜索 (remote-method 封装) | (query: string) => Promise<any[]> | any[] | |
searchImmediately | 是否立即执行远程搜索 | boolean | true |
v-model:label (Vue 3) / label.sync (Vue 2) | 绑定值对应的 label (单向数据流) | string | string[] | |
showSelectAllCheckbox | 多选时是否显示全选框 | boolean | true |
selectAllCheckboxLabel | 全选框的文案 | string | 'Select All' |
... | el-select 的属性 |
默认情况下绑定值将得到选中项的数组元素本身。
可使用 props.value
改变此行为 (比如选项的数组元素是 plain object 类型,而绑定值只想要其中某个属性)。
interface Props {
// 定位 option 中的 value
// 如果是 string 类型,将默认用于 el-select 的 value-key
'value': string | symbol | ((value: any) => any)
// 定位 option 中的 label
'label': string | symbol | ((value: any) => string)
// 定位 option 中的 disabled
'disabled': string | symbol | ((value: any) => boolean)
// 定位 option 中分组的 label
'groupLabel': string | symbol | ((value: any) => string)
// 定位 option 中分组的 options
'groupOptions': string | symbol | ((value: any) => any[])
// 定位 option 中分组的 disabled
'groupDisabled': string | symbol | ((value: any) => boolean)
}
'url'
'data[0].url'
value => value.url
el-select
的事件。
名称 | 说明 |
---|---|
prefix | el-select 的 prefix 插槽 |
empty | el-select 的 empty 插槽 |
group-prepend | el-option-group 的前置内容 |
group-append | el-option-group 的后置内容 |
— | el-option 的默认插槽,作用域参数为 {option: any, index: number} |
option-prepend | el-option 的前置内容,默认内容为全选框 |
option-append | el-option 的后置内容 |
名称 | 说明 | 类型 |
---|---|---|
remoteMethod | el-select 的 remoteMethod 属性,自行控制 search 时机时使用 | (query: string) => void |
... | 通过 ref 调用 el-select 的方法 |
关于 value
和 label
的命名:
value
:这里要表达的含义就是选中目标的 “值”,等同于原生 <input type="checkbox">
元素的 value
属性,不一定是其唯一标识,所以不应该使用 id 或者 key,且 key 与 Vue 的特殊 attribute 冲突。
label
:HTML 中 <label>
与 <input>
元素相关联,用于对后者进行说明,所以 label
天生是用来表达选中目标的 “展示名称” 的,而 ‘name’ 由于与原生 <input>
元素的 name
属性冲突故不考虑使用 ‘name’。
Element 本身没有做到命名的统一,
el-select
中label
表示选项的标签, 但el-checkbox
中label
却表示的是选中状态的值。
UI 组件库的标杆 Ant Design 也是使用 value
与 label
命名。
各版本详细改动请参考 release notes
FAQs
Element Plus (Vue 3) & Element UI (Vue 2.7/2.6) isomorphic component library. ❄️ More than Element.
The npm package kikimore receives a total of 44 weekly downloads. As such, kikimore popularity was classified as not popular.
We found that kikimore demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.