feat: 完成图像源节点表单的静态交互

master
donghao 1 month ago
parent 1e35f89481
commit 21f381bd35

@ -0,0 +1,122 @@
/*
* @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-29 10:48:37
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-30 14:32:45
* @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\switch.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { defineComponent, h, withDefaults, computed, normalizeClass } from 'vue'
import { ElSwitch } from 'element-plus'
import type { SwitchProps } from 'element-plus'
import { spawn } from 'child_process'
interface DsSwitchProps extends SwitchProps {
/**
* switch
*/
label?: string
/**
* switch
*/
prefixRender?: (...ags: any[]) => any // 前缀内容 render渲染
/**
* switch
*/
suffixRender?: (...ags: any[]) => any // 后缀内容 render渲染
/**
* container
*/
containerClassName?: string
/**
*
*/
componentClassName?: string
}
export default defineComponent({
name: 'DsSwitch',
props: {
modelValue: {
type: [Boolean, String, Number],
default: false
},
label: {
type: String,
default: ''
},
suffixRender: {
type: Function as DsSwitchProps['suffixRender'],
default: null
},
containerClassName: {
type: String,
default: ''
},
componentClassName: {
type: String,
default: ''
},
...ElSwitch.props // 继承 ElSwitch 的所有 props
},
emits: ['update:modelValue', 'change'],
setup(props, { emit, attrs }) {
const { containerClassName, componentClassName, ...restProps } = props
// 处理自定义类名和 Vue 的 class 属性
const componentClasses = computed(() => {
const classes = ['flex items-center ds-switch-box', componentClassName]
// 处理 Vue 的 class 属性(支持字符串/数组/对象)
if (attrs.class) {
classes.push(normalizeClass(attrs.class))
}
return classes.filter((c) => c).join(' ')
})
// 处理自定义类名和 Vue 的 class 属性
const containerClasses = computed(() => {
const classes = ['flex items-center justify-between w-[136px]', containerClassName]
// 处理 Vue 的 class 属性(支持字符串/数组/对象)
if (attrs.class) {
classes.push(normalizeClass(attrs.class))
}
return classes.filter((c) => c).join(' ')
})
const handleChange = (val: boolean | string | number) => {
emit('update:modelValue', val)
emit('change', val)
}
// 渲染自定义前缀内容
const renderPrefix = () => {
if (props.prefixRender) {
return props?.prefixRender?.()
}
return (
<span class="ds-switch-label">
{props?.label}
</span>
)
}
// 渲染自定义后缀内容
const renderSuffix = () => {
if (props.suffixRender) {
return props?.suffixRender?.()
}
return null
}
return () => (
<div className={componentClasses.value}>
<div className={containerClasses.value}>
{/* 添加前缀插槽 */}
{renderPrefix()}
<ElSwitch {...restProps} modelValue={props.modelValue} onChange={handleChange} />
</div>
{/* 添加后缀插槽 */}
{renderSuffix()}
</div>
)
}
})

@ -2,9 +2,11 @@
* @Author: donghao donghao@supervision.ltd * @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-28 10:07:16 * @Date: 2025-07-28 10:07:16
* @LastEditors: donghao donghao@supervision.ltd * @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-28 16:54:10 * @LastEditTime: 2025-07-30 11:29:49
* @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\index.ts * @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\index.ts
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import inputNumber from './inputNumber' import inputNumber from './inputNumber'
import dsSwitch from './dsSwitch'
export const DSInputNumber = inputNumber export const DSInputNumber = inputNumber
export const DsSwitch = dsSwitch

@ -1,107 +0,0 @@
/*
* @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-29 10:49:30
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-29 10:50:25
* @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\inputNumber copy.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { defineComponent, ref, watch, computed } from 'vue'
import { ElInputNumber, ElButton } from 'element-plus'
export default defineComponent({
name: 'DSInputNumber',
props: {
modelValue: {
type: Number,
default: 0
},
min: {
type: Number,
default: 0
},
max: {
type: Number,
default: 100000
},
placeholder: {
type: String,
default: '请输入'
},
disabled: {
type: Boolean,
default: false
},
controls: {
type: Boolean,
default: true
},
label: {
type: String,
default: ''
},
randomValue: {
type: Number,
default: 10
},
controlsPosition: {
type: String,
default: 'top'
},
icon: {
type: String || Object,
default: ''
}
},
emits: ['update:modelValue', 'change'],
setup(props, { slots, emit }) {
const innerValue = ref(props?.modelValue || props?.min || 0)
watch(
() => props.modelValue,
(newVal) => {
innerValue.value = newVal
}
)
const handleChange = (value: number) => {
console.log('handleChange_ds_inputNumber', value)
emit('update:modelValue', value)
emit('change', value)
}
// const setRandomValue = () => {
// const randomVal = props.randomValue
// innerValue.value = randomVal
// emit('update:modelValue', randomVal)
// emit('change', randomVal)
// }
const containerClass = computed(() => [
'input-number-container',
props.disabled ? 'disabled-state' : ''
])
return () => (
<div class={props.containerClass}>
<div class="input-group flex items-center">
<ElInputNumber
modelValue={innerValue.value}
onUpdate:modelValue={(val) => (innerValue.value = val)}
min={props.min}
max={props.max}
controls-position={props.controlsPosition}
placeholder={props.placeholder}
disabled={props.disabled}
controls={props.controls}
onChange={handleChange}
/>
<ElButton type="primary" icon={props.icon} circle disabled={props.disabled} />
</div>
</div>
)
}
})

@ -2,28 +2,32 @@
* @Author: donghao donghao@supervision.ltd * @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-28 16:45:11 * @Date: 2025-07-28 16:45:11
* @LastEditors: donghao donghao@supervision.ltd * @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-30 09:32:36 * @LastEditTime: 2025-07-30 14:30:36
* @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\inputNumber.tsx * @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\inputNumber.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/ */
import { defineComponent, getCurrentInstance, ComputedRef, computed } from 'vue' import { defineComponent, getCurrentInstance, ComputedRef, computed } from 'vue'
import { ELIcon, ElInputNumber, inputNumberProps, InputNumberProps } from 'element-plus' import { ElInputNumber, inputNumberProps, InputNumberProps } from 'element-plus'
import type { InputNumberEmits } from 'element-plus' import type { InputNumberEmits } from 'element-plus'
import { Refresh } from '@element-plus/icons-vue' import { RefreshRight } from '@element-plus/icons-vue'
// 定义组件属性类型(保留所有 ElInputNumber 属性) // 定义组件属性类型(保留所有 ElInputNumber 属性)
type DSInputNumberProps = InputNumberProps & { type DSInputNumberProps = InputNumberProps & {
// 可在此处添加自定义属性 // 可在此处添加自定义属性
prefixContent?: () => JSX.Element prefixRender?: (...ags: any[]) => any // 前置内容 render渲染
suffixIconType?: string suffixRender?: (...ags: any[]) => any // 后置内容 render渲染
} }
export default defineComponent({ export default defineComponent({
name: 'DSInputNumber', name: 'DSInputNumber',
props: { props: {
...inputNumberProps, // 继承所有 ElInputNumber 属性 ...inputNumberProps, // 继承所有 ElInputNumber 属性
prefixContent: Function as DSInputNumberProps['prefixContent'], prefixRender: Function as DSInputNumberProps['prefixRender'],
suffixIconType: String as 'plus' | 'default' suffixRender: Function as DSInputNumberProps['suffixRender'],
controlsPosition: {
type: String,
default: 'right'
}
}, },
emits: [ emits: [
'update:modelValue', 'update:modelValue',
@ -44,7 +48,7 @@ export default defineComponent({
// 创建计算属性以包含所有属性 // 创建计算属性以包含所有属性
const inputNumberAttrs: ComputedRef<Record<string, any>> = computed(() => { const inputNumberAttrs: ComputedRef<Record<string, any>> = computed(() => {
const { prefixContent, suffixIconType, ...propsRest } = props const { prefixRender, suffixRender, ...propsRest } = props
return { return {
...attrs, ...attrs,
...propsRest, ...propsRest,
@ -58,34 +62,35 @@ export default defineComponent({
} }
}) })
// 渲染自定义后缀图标 // 渲染自定义前缀内容
const renderSuffixIcon = () => { const renderPrefix = () => {
// if (props.loading) { // props?.suffixRender &&
// return <span class="ds-button__loading-icon"></span> if (props.prefixRender) {
// } return props?.prefixRender?.()
if (props?.suffixIconType === 'default') {
return
} }
return null return null
} }
// 渲染自定义后缀内容
const renderSuffix = () => {
// props?.suffixRender &&
if (props.suffixRender) {
return props?.suffixRender?.()
}
return (
<div className="flex items-center justify-center ds-dialog-icon-box ">
<RefreshRight />
</div>
)
}
return () => ( return () => (
<div class="ds-input-number flex items-center"> <div class="ds-input-number flex items-center">
{/* 添加前缀插槽 */} {/* 添加前缀插槽 */}
{/* {props?.prefixContent && props?.prefixContent()} */} {renderPrefix()}
<ElInputNumber {...inputNumberAttrs.value} class="enhanced-input-number"></ElInputNumber> <ElInputNumber {...inputNumberAttrs.value} class="enhanced-input-number"></ElInputNumber>
{/* 图标区 */}
<div className="w-[32px]">
<img src="@/assets/electron.svg" className="w-[32px]" alt="" />
</div>
{props?.suffixIconType && renderSuffixIcon()}
{/* 添加后缀插槽 */} {/* 添加后缀插槽 */}
{/* {props.suffixContent && ( {renderSuffix()}
<div class="suffix-slot">
<span>test</span>
{props.suffixContent()}
</div>
)} */}
</div> </div>
) )
} }

@ -35,5 +35,15 @@
.el-dialog__header { .el-dialog__header {
height: var(--ds-dialog-header-height); height: var(--ds-dialog-header-height);
} }
//
.ds-dialog-icon-box {
width: 48px;
height: 32px;
background-color: var(--ds-dialog-icon-background-color);
font-size: 14px !important;
cursor: pointer;
svg {
width: 28px;
}
}
} }

@ -1,7 +1,7 @@
// //
.ds-dialog-form-container { .ds-dialog-form-container {
.el-select__wrapper { .el-select__wrapper {
background: var(--ds-dialog-form-background-color) !important; background: var(--ds-form-item-background-color) !important;
.el-select__selected-item { .el-select__selected-item {
color: var(--ds-color-info) !important; color: var(--ds-color-info) !important;
} }
@ -28,4 +28,24 @@
min-height: 32px; min-height: 32px;
padding: 4px 16px; padding: 4px 16px;
} }
// el-switch
.el-switch--large .el-switch__core {
border-radius: 16px;
height: 20px;
line-height: 20;
min-width: 40px;
width: 40px;
}
}
.el-input__wrapper {
background: var(--ds-form-item-background-color) !important;
}
//
.ds-form-des-text {
color: var(--ds-des-text-1);
}
//
.ds-form-normal-text {
color: var(--ds-color-info);
} }

@ -13,6 +13,12 @@
--el-border-radius-base: var(--ds-border-radius-base); // --el-border-radius-base: var(--ds-border-radius-base); //
--el-collapse-header-height: 28px; // --el-collapse-header-height: 28px; //
--el-component-size-large: 32px; // --el-component-size-large: 32px; //
--el-text-color-regular: var(--ds-text-color-regular); //
--el-border-color: var(--ds-border-color); //
--el-border-width: var(--ds-border-width); //
--el-border-style: var(--ds-border-style); //
--el-box-shadow: var(--ds-box-shadow); //
--el-border: var(-ds-border-width) var(--ds-border-style) var(--ds-border-color);
} }
/* button */ /* button */
.el-button--info { .el-button--info {
@ -53,8 +59,6 @@
height: 20px; height: 20px;
} }
/* tabs */ /* tabs */
.ds-tabs { .ds-tabs {
background-color: transparent; background-color: transparent;

@ -12,12 +12,14 @@
--ds-clort-text-1: #333; // 1 --ds-clort-text-1: #333; // 1
--ds-clort-text-2: #666; // 2 --ds-clort-text-2: #666; // 2
--ds-clort-text-3: #999; // 3 --ds-clort-text-3: #999; // 3
--ds-text-color-regular: #333; // 4
--ds-button-border-radius: 2px; --ds-button-border-radius: 2px;
--ds-button-border-color: #c9cdd4; --ds-button-border-color: #c9cdd4;
--ds-button-info-border-color: #dcdcdc; --ds-button-info-border-color: #dcdcdc;
--ds-background-color: #363940; // --ds-background-color: #363940; //
--ds-dialog-background-color: #363940; // --ds-dialog-background-color: #363940; //
--ds-dialog-form-background-color: #303136; // --ds-form-item-background-color: #303136; //
--ds-dialog-icon-background-color: #4e5969; //
--ds-dialog-header-padding: 24px; // --ds-dialog-header-padding: 24px; //
--ds-dialog-header-height: 54px; // --ds-dialog-header-height: 54px; //
--ds-bg-color-light-1: #151515; // --ds-bg-color-light-1: #151515; //
@ -27,6 +29,12 @@
--ds-bg-color-light-5: #565656; // --ds-bg-color-light-5: #565656; //
// #4E5969 // #4E5969
--ds-light-0: #00b429; // 1 --ds-light-0: #00b429; // 1
--ds-des-text-1: #86909c; // 8
--ds-border-width: 1px; //
--ds-border-color: #4e5969; //
--ds-border-style: solid; //
--ds-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1); //
// --ds-light-2: #eaeaea; // 2 // --ds-light-2: #eaeaea; // 2
// --ds-light-3: #dcdcdc; // 3 // --ds-light-3: #dcdcdc; // 3
// --ds-light-4: #c9cdd4; // 4 // --ds-light-4: #c9cdd4; // 4

@ -245,7 +245,7 @@
border: none; border: none;
} }
.t_module_form .scroll_wrap .t_detail .el-collapse .el-collapse-item { .t_module_form .scroll_wrap .t_detail .el-collapse .el-collapse-item {
background-color: var(--el-bg-color); // background-color: var(--el-bg-color);
border: none; border: none;
margin-top: 10px; margin-top: 10px;
} }

@ -2,7 +2,7 @@
* @Author: donghao donghao@supervision.ltd * @Author: donghao donghao@supervision.ltd
* @Date: 2025-07-03 11:12:04 * @Date: 2025-07-03 11:12:04
* @LastEditors: donghao donghao@supervision.ltd * @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-07-30 09:44:01 * @LastEditTime: 2025-07-30 15:52:28
* @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\FlowImagesCapture\imageNodeModel.vue * @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\FlowImagesCapture\imageNodeModel.vue
* @Description: 图像源节点 * @Description: 图像源节点
--> -->
@ -112,32 +112,29 @@ const formOpts: any = reactive({
opts: { opts: {
labelPosition: 'top', // labelPosition: 'top', //
formData: { formData: {
// id: "", // *ID
imageSource: '本地图像', // * imageSource: '本地图像', // *
/**基础参数-本地图像字段**/
pixelFormat: '', // * pixelFormat: '', // *
captureInterval: '', // * captureInterval: '', // *
displayImageName: false, displayImageName: false, // *
snInitialValue: 10, displaySaveImage: false, // *
imageCache: '', snInitialValue: 10, // *SN
stitchingEnabled: false, imageCache: '', // *
startHeight: 0, stitchingEnabled: false, // *使
stitchingHeight: 0, startHeight: 0, // *
triggerClear: false, stitchingHeight: 0, // *
triggerVariable: '', triggerClear: false, // *
autoSwitch: false, triggerVariable: '', // *
stopOnLast: false,
characterTriggerFilter: false, /**基础参数-相机字段**/
inputCharacter: '', relatedCamera: '选择相机', // *
triggerCharacter: '', controlExposure: '', // *
// TODO controlGain: '', // *
password: null, // * outputMono8: true // *Mono8
name: null, // *
sex: null, // *: 0: 1:
hobby: [], // *: 0: 1:
accountType: null, // *: 0: 1: 2:
status: null // *: 01(1)',
}, },
fieldList: [ fieldList: [
/**基础参数-表单项**/
//
{ {
label: '图像源', label: '图像源',
value: 'imageSource', value: 'imageSource',
@ -151,86 +148,253 @@ const formOpts: any = reactive({
change: (val: any) => { change: (val: any) => {
if (val === '本地图像') { if (val === '本地图像') {
formOpts.baseConfig.widthSize = 3 formOpts.baseConfig.widthSize = 3
formOpts.eventConfig.widthSize = 3
} else { } else {
formOpts.baseConfig.widthSize = 2 formOpts.baseConfig.widthSize = 2
formOpts.eventConfig.widthSize = 2
} }
console.log(val, 'selectChange_imageSource') console.log(val, 'selectChange_imageSource')
} }
}, },
bind: { clearable: false } bind: { clearable: false }
}, },
//
{ {
label: '像素格式', label: '像素格式',
value: 'pixelFormat', value: 'pixelFormat',
type: 'select-arr', type: 'select-arr',
comp: 'el-select', comp: 'el-select',
list: 'testList', list: 'testList',
arrLabel: 'key', arrLabel: 'label',
arrKey: 'value', arrKey: 'value',
placeholder: '请选择像素格式', placeholder: '请选择像素格式',
isHideItem: (data) => { isHideItem: (data) => {
return data.imageSource === '本地图像' return data.imageSource === '本地图像'
} }
}, },
//
{ {
label: '取图间隔', label: '取图间隔',
value: 'captureInterval', value: 'captureInterval',
placeholder: '测试自定义组件1',
comp: 'DSInputNumber',
isSelfCom: true,
bind: {
min: 1,
max: 10
},
eventHandle: {
change: (val: any) => {}
},
isHideItem: (data) => {
return data.imageSource === '本地图像'
}
},
//
{
value: 'displayImageName',
comp: 'DsSwitch',
isSelfCom: true,
widthSize: 1,
bind: {
label: '显示图像名称'
},
isHideItem: (data) => {
return data.imageSource === '本地图像'
}
},
//
{
value: 'displaySaveImage',
comp: 'DsSwitch',
isSelfCom: true,
widthSize: 1,
bind: {
label: '方案存图',
suffixRender: () => {
return <div className="ds-form-des-text pl-[12px]">最多保存120张</div>
}
},
isHideItem: (data) => {
return data.imageSource === '本地图像'
}
},
// sdk
{
labelRender: () => {
return (
<div>
<span>关联相机</span>
<span className="ds-form-des-text">
(请先在<span className="ds-form-normal-text">相机管理</span>中新建相机)
</span>
</div>
)
},
value: 'relatedCamera',
type: 'select-arr', type: 'select-arr',
comp: 'el-select', comp: 'el-select',
list: 'testList', list: 'testList',
arrLabel: 'key', arrLabel: 'label',
arrKey: 'value', arrKey: 'value',
placeholder: '请选择取图间隔', placeholder: '请选择关联相机',
isHideItem: (data) => {
return data.imageSource !== '本地图像'
}
},
// sdk
{
label: '控制曝光',
value: 'controlExposure',
type: 'input',
comp: 'el-input',
bind: { maxlength: 100 },
isHideItem: (data) => {
return data.imageSource !== '本地图像'
}
},
// sdk
{
label: '控制增益',
value: 'controlGain',
type: 'input',
comp: 'el-input',
bind: { maxlength: 100 },
isHideItem: (data) => {
return data.imageSource !== '本地图像'
}
},
//
{
placeholder: '请输入SN初始值',
labelRender: () => {
return (
<div>
<span>SN初始值</span>
<span className="ds-form-des-text">上限不超过100000</span>
</div>
)
},
value: 'snInitialValue',
comp: 'DSInputNumber',
isSelfCom: true,
bind: {
min: 0,
max: 99999
}
},
// sdk
{
value: 'outputMono8',
comp: 'DsSwitch',
isSelfCom: true,
widthSize: 1,
bind: {
label: '输出Mono8'
},
isHideItem: (data) => {
return data.imageSource !== '本地图像'
}
},
//
{
label: '图片缓存',
value: 'imageCache',
type: 'input',
comp: 'el-input',
bind: { maxlength: 100 },
isHideItem: (data) => { isHideItem: (data) => {
return data.imageSource === '本地图像' return data.imageSource === '本地图像'
} }
}, },
//
{ {
label: '', value: 'stitchingEnabled',
value: 'accountType', comp: 'DsSwitch',
type: 'select-obj', isSelfCom: true,
comp: 'el-switch',
list: 'accountTypeList',
widthSize: 1, widthSize: 1,
append: 'ms' bind: {
label: '拼接使能'
}
}, },
//
{ {
label: '状态', placeholder: '请输入起始高度',
value: 'status', labelRender: () => {
type: 'select-arr', return (
list: 'statusList', <div>
comp: 'el-select', <span>起始高度</span>
arrLabel: 'key', <span className="ds-form-des-text">上限不超过20000</span>
arrKey: 'value' </div>
)
},
value: 'startHeight',
comp: 'DSInputNumber',
isSelfCom: true,
bind: {
min: 0,
max: 19999
},
isHideItem: (data) => {
return data.stitchingEnabled
}
}, },
//
{ {
placeholder: '请输入', placeholder: '拼接高度',
labelRender: () => { labelRender: () => {
return <div style="color:red;">SN初始值 (上限不超过100000)</div> return (
<div>
<span>拼接高度</span>
<span className="ds-form-des-text">上限不超过20000</span>
</div>
)
}, },
value: 'snInitialValue', value: 'stitchingHeight',
type: 'input-number', comp: 'DSInputNumber',
comp: 'el-input-number', isSelfCom: true,
bind: { bind: {
min: 0, min: 0,
max: 99999, max: 19999
controlsPosition: 'right', },
clearable: false, isHideItem: (data) => {
suffix: () => { return data.stitchingEnabled
return <span>ms</span>
}
} }
}, },
//
{ {
label: '爱好', value: 'triggerClear',
value: 'hobby', comp: 'DsSwitch',
type: 'checkbox', isSelfCom: true,
comp: 'el-checkbox-group', widthSize: 1,
list: 'hobbyList', bind: {
event: 'checkbox', label: '触发清空'
arrKey: 'value', },
widthSize: 1 isHideItem: (data) => {
return data.stitchingEnabled
}
},
//
{
label: '触发变量',
value: 'triggerVariable',
type: 'input',
comp: 'el-input',
bind: { maxlength: 100 },
isHideItem: (data) => {
return data.stitchingEnabled && data.triggerClear
}
},
//
{
label: '触发值',
value: 'triggerValue',
type: 'input',
comp: 'el-input',
bind: { maxlength: 100 },
isHideItem: (data) => {
return data.stitchingEnabled && data.triggerClear
}
} }
], ],
// //
@ -240,26 +404,6 @@ const formOpts: any = reactive({
{ key: '本地图像', value: '本地图像' }, { key: '本地图像', value: '本地图像' },
{ key: '相机', value: '相机' }, { key: '相机', value: '相机' },
{ key: 'SDK', value: 'SDK' } { key: 'SDK', value: 'SDK' }
],
hobbyList: [
{ label: '吉他', value: '0' },
{ label: '看书', value: '1' },
{ label: '美剧', value: '2' },
{ label: '旅游', value: '3' },
{ label: '音乐', value: '4' }
],
sexList: [
{ key: '女', value: 1 },
{ key: '男', value: 0 }
],
accountTypeList: {
0: '手机用户',
1: '论坛用户',
2: '平台用户'
},
statusList: [
{ key: '启用', value: 1 },
{ key: '停用', value: 0 }
] ]
} }
} }
@ -271,74 +415,66 @@ const formOpts: any = reactive({
opts: { opts: {
labelPosition: 'top', // labelPosition: 'top', //
formData: { formData: {
phone: null, // /**触发设置-本地图像字段**/
createDate: null, // autoSwitch: false, // *
valDate: null, // el stopOnLast: false, // *
wechat: 0, // characterTriggerFilter: false, // *
qq: null, // qq inputCharacter: '', // *
email: null, // triggerCharacter: '' // *
desc: null, //
number: 2 //
}, },
fieldList: [ fieldList: [
{ {
label: '手机号码', value: 'autoSwitch',
value: 'phone', comp: 'DsSwitch',
type: 'input', isSelfCom: true,
comp: 'el-input', widthSize: 3,
bind: { maxlength: 11 } bind: {
}, label: '自动切换'
{ },
label: '创建时间', isHideItem: (data) => {
value: 'createDate', return formOpts.baseConfig.opts.formData.imageSource === '本地图像'
type: 'year', }
bind: { valueFormat: 'YYYY' },
comp: 'el-date-picker'
}, },
{ {
label: 'element日期', value: 'stopOnLast',
value: 'valDate', comp: 'DsSwitch',
type: 'daterange', isSelfCom: true,
comp: 'el-date-picker', widthSize: 3,
bind: { bind: {
rangeSeparator: '-', label: '最后一张停止'
startPlaceholder: '开始日期', },
endPlaceholder: '结束日期', isHideItem: (data) => {
valueFormat: 'YYYY-MM-DD' return formOpts.baseConfig.opts.formData.imageSource === '本地图像' && data.autoSwitch
} }
}, },
{ {
label: '测试自定义组件1', value: 'characterTriggerFilter',
value: 'wechat', comp: 'DsSwitch',
placeholder: '测试自定义组件1',
comp: 'DSInputNumber',
isSelfCom: true, isSelfCom: true,
widthSize: 1,
bind: { bind: {
min: 1, label: '字符触发过滤'
max: 10,
controlsPosition: 'right',
clearable: false,
suffixIconType: 'default'
},
eventHandle: {
change: (val: any) => {}
} }
}, },
{ label: 'QQ', value: 'qq', type: 'input', comp: 'el-input' },
{ label: '邮箱', value: 'email', type: 'input', comp: 'el-input' },
{ {
label: '计数器', label: '输入字符',
value: 'number', value: 'inputCharacter',
type: 'inputNumber', type: 'input',
bind: { controlsPosition: 'right', min: 2, max: 99, append: '123' }, comp: 'el-input',
comp: 'el-input-number' bind: { maxlength: 100 },
isHideItem: (data) => {
return data.characterTriggerFilter
}
}, },
{ {
label: '描述', label: '触发字符',
value: 'desc', value: 'triggerCharacter',
type: 'textarea', type: 'input',
comp: 'el-input', comp: 'el-input',
widthSize: 1 bind: { maxlength: 100 },
isHideItem: (data) => {
return data.characterTriggerFilter
}
} }
] ]
} }

Loading…
Cancel
Save