|
|
@@ -0,0 +1,310 @@
|
|
|
+import Slider from './Slider.vue'
|
|
|
+import icon from '../assets/icon/icon_38slider.svg'
|
|
|
+import type { IComponentModelConfig } from '../type'
|
|
|
+import i18n from '@/locales'
|
|
|
+import { flagOptions } from '@/constants'
|
|
|
+import defaultStyle from './style.json'
|
|
|
+
|
|
|
+export default {
|
|
|
+ label: i18n.global.t('slider'),
|
|
|
+ icon,
|
|
|
+ component: Slider,
|
|
|
+ key: 'lv_slider',
|
|
|
+ group: i18n.global.t('basic'),
|
|
|
+ sort: 1,
|
|
|
+ defaultStyle,
|
|
|
+ parts: [
|
|
|
+ {
|
|
|
+ name: 'main',
|
|
|
+ stateList: ['default', 'focused', 'disabled']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'indicator',
|
|
|
+ stateList: ['default', 'focused', 'disabled']
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'knob',
|
|
|
+ stateList: ['default', 'focused', 'disabled']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ defaultSchema: {
|
|
|
+ name: 'slider',
|
|
|
+ props: {
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ width: 180,
|
|
|
+ height: 10,
|
|
|
+ addFlags: [],
|
|
|
+ removeFlags: [],
|
|
|
+ min: 0,
|
|
|
+ max: 100,
|
|
|
+ value: 50,
|
|
|
+ mode: 'normal',
|
|
|
+ startValue: 20,
|
|
|
+ direction: 'left'
|
|
|
+ },
|
|
|
+ styles: [
|
|
|
+ {
|
|
|
+ part: {
|
|
|
+ name: 'main',
|
|
|
+ state: 'default'
|
|
|
+ },
|
|
|
+ background: {
|
|
|
+ color: '#2092f53c',
|
|
|
+ image: {
|
|
|
+ imgId: '',
|
|
|
+ color: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ border: {
|
|
|
+ radius: 10
|
|
|
+ },
|
|
|
+ outline: {
|
|
|
+ color: '#2092f5ff',
|
|
|
+ width: 0
|
|
|
+ },
|
|
|
+ shadow: {
|
|
|
+ color: '#2092f5ff',
|
|
|
+ x: 0,
|
|
|
+ y: 0,
|
|
|
+ spread: 0,
|
|
|
+ width: 0
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ part: {
|
|
|
+ name: 'indicator',
|
|
|
+ state: 'default'
|
|
|
+ },
|
|
|
+ background: {
|
|
|
+ color: '#2092f5ff',
|
|
|
+ image: {
|
|
|
+ imgId: '',
|
|
|
+ color: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ border: {
|
|
|
+ radius: 10
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ part: {
|
|
|
+ name: 'knob',
|
|
|
+ state: 'default'
|
|
|
+ },
|
|
|
+ background: {
|
|
|
+ color: '#2092f5ff',
|
|
|
+ image: {
|
|
|
+ imgId: '',
|
|
|
+ color: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ border: {
|
|
|
+ radius: 10
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ config: {
|
|
|
+ // 组件属性
|
|
|
+ props: [
|
|
|
+ {
|
|
|
+ label: '名称',
|
|
|
+ field: 'name',
|
|
|
+ valueType: 'text',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入名称'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '位置',
|
|
|
+ valueType: 'group',
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ field: 'props.x',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12
|
|
|
+ },
|
|
|
+ slots: { prefix: 'X' }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ field: 'props.y',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12
|
|
|
+ },
|
|
|
+ slots: { prefix: 'Y' }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ field: 'props.width',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12
|
|
|
+ },
|
|
|
+ slots: { prefix: 'W' }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ field: 'props.height',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12
|
|
|
+ },
|
|
|
+ slots: { prefix: 'H' }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '添加标识',
|
|
|
+ field: 'props.addFlags',
|
|
|
+ valueType: 'checkbox',
|
|
|
+ componentProps: {
|
|
|
+ options: flagOptions,
|
|
|
+ defaultCollapsed: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '删除标识',
|
|
|
+ field: 'props.removeFlags',
|
|
|
+ valueType: 'checkbox',
|
|
|
+ componentProps: {
|
|
|
+ options: flagOptions,
|
|
|
+ defaultCollapsed: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ coreProps: [
|
|
|
+ {
|
|
|
+ label: '范围',
|
|
|
+ valueType: 'group',
|
|
|
+ children: [
|
|
|
+ {
|
|
|
+ field: 'props.min',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12,
|
|
|
+ min: -10000,
|
|
|
+ max: 10000
|
|
|
+ },
|
|
|
+ slots: { prefix: 'S' }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ field: 'props.max',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ span: 12,
|
|
|
+ min: -10000,
|
|
|
+ max: 10000
|
|
|
+ },
|
|
|
+ slots: { prefix: 'E' } as any
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ valueType: 'dependency',
|
|
|
+ name: ['props.min', 'props.max'],
|
|
|
+ dependency: (dependency) => {
|
|
|
+ const min = dependency['props.min']
|
|
|
+ const max = dependency['props.max']
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ label: '当前值',
|
|
|
+ field: 'props.value',
|
|
|
+ valueType: 'number',
|
|
|
+ componentProps: {
|
|
|
+ min,
|
|
|
+ max
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '模式',
|
|
|
+ field: 'props.mode',
|
|
|
+ valueType: 'select',
|
|
|
+ componentProps: {
|
|
|
+ options: [
|
|
|
+ { label: 'Normal', value: 'normal' },
|
|
|
+ { label: 'Symmetrical', value: 'symmetrical' },
|
|
|
+ { label: 'Range', value: 'range' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ valueType: 'dependency',
|
|
|
+ name: ['props.mode'],
|
|
|
+ dependency: (dependency) => {
|
|
|
+ return dependency['props.mode'] === 'range'
|
|
|
+ ? [
|
|
|
+ {
|
|
|
+ label: '开始值',
|
|
|
+ field: 'props.startValue',
|
|
|
+ valueType: 'number'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ : []
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ // 组件样式
|
|
|
+ styles: [
|
|
|
+ {
|
|
|
+ label: '模块/状态',
|
|
|
+ field: 'part',
|
|
|
+ valueType: 'part'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ valueType: 'dependency',
|
|
|
+ name: ['part'],
|
|
|
+ dependency: ({ part }) => {
|
|
|
+ const main = [
|
|
|
+ {
|
|
|
+ label: '背景',
|
|
|
+ field: 'background',
|
|
|
+ valueType: 'background'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '边框',
|
|
|
+ field: 'border',
|
|
|
+ valueType: 'border',
|
|
|
+ componentProps: {
|
|
|
+ onlyRadius: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '外边框',
|
|
|
+ field: 'outline',
|
|
|
+ valueType: 'outline'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '阴影',
|
|
|
+ field: 'shadow',
|
|
|
+ valueType: 'shadow'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ // focused/disabled不支持背景和边框修改
|
|
|
+ return part?.name === 'main'
|
|
|
+ ? part?.state === 'default'
|
|
|
+ ? main
|
|
|
+ : main.splice(0, 2)
|
|
|
+ : [
|
|
|
+ {
|
|
|
+ label: '背景',
|
|
|
+ field: 'background',
|
|
|
+ valueType: 'background'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '边框',
|
|
|
+ field: 'border',
|
|
|
+ valueType: 'border',
|
|
|
+ componentProps: {
|
|
|
+ onlyRadius: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+} as IComponentModelConfig
|