Bladeren bron

feat: 选择人员 自定义表单嵌入

lanceJiang 10 maanden geleden
bovenliggende
commit
d61e7c45a2

+ 18 - 0
src/components/packages/formEditor/components/FormTypes/SelectUser/mobile.vue

@@ -0,0 +1,18 @@
+<script>
+import hooks from '@ER/hooks'
+export default {
+	name: 'ErSelectUser',
+	inheritAttrs: false,
+	customOptions: {}
+}
+</script>
+<script setup>
+const props = defineProps(['data', 'params'])
+const ns = hooks.useNamespace('FormTypesSelectUser_mobile')
+import SelectUser from '@/components/SelectUser.vue'
+</script>
+<template>
+	<SelectUser v-model="data.options.defaultValue" :class="[ns.b()]" v-bind="params" />
+</template>
+
+<style scoped></style>

+ 25 - 0
src/components/packages/formEditor/components/FormTypes/SelectUser/pc.vue

@@ -0,0 +1,25 @@
+<script>
+import hooks from '@ER/hooks'
+export default {
+	name: 'ErSelectUser',
+	inheritAttrs: false,
+	customOptions: {}
+}
+</script>
+<script setup>
+// import { watch } from 'vue'
+const props = defineProps(['data', 'params'])
+const ns = hooks.useNamespace('FormTypesSelectUser_pc')
+import SelectUser from '@/components/SelectUser.vue'
+/*watch(
+	() => props.params,
+	v => {
+		console.error(v, 'SelectUser params')
+	}
+)*/
+</script>
+<template>
+	<SelectUser v-model="data.options.defaultValue" :class="[ns.b()]" v-bind="params"/>
+</template>
+
+<style scoped></style>

+ 1 - 1
src/components/packages/formEditor/components/Layout/DragGable.jsx

@@ -93,7 +93,7 @@ export default defineComponent({
 				findComponent(type, element) {
 					let info = componentMap[type + element]
 					if (!info) {
-						info = componentMap[type + element] = defineAsyncComponent(() => import(`../${type}/${_.startCase(element)}/${state.platform}.vue`))
+						info = componentMap[type + element] = defineAsyncComponent(() => import(`../${type}/${_.upperFirst(element)}/${state.platform}.vue`))
 					}
 					return info
 				}

+ 1 - 1
src/components/packages/formEditor/components/Panels/Config/components/PropsPanel.vue

@@ -710,7 +710,7 @@ onMounted(() => {
 		/>
 		<PanelsConfigComponentsCheckboxComponent
 			v-if="
-				(checkTypeBySelected(['input'], 'wordLimit') && target.options.renderType === 1) || checkTypeBySelected(['textarea', 'number'], 'wordLimit')
+				(checkTypeBySelected(['input'], 'wordLimit') && target.options.renderType === 1) || checkTypeBySelected(['textarea', 'number', 'selectUser'], 'wordLimit')
 			"
 			:label="t('er.config.propsPanel.wordLimit')"
 			field="isShowWordLimit"

+ 8 - 6
src/components/packages/formEditor/componentsConfig.js

@@ -112,23 +112,25 @@ export const fieldsConfig = [
 				}
 			},
 			{
-				type: 'select',
+				type: 'selectUser',
 				label: '员工',
 				icon: 'employee',
 				key: '',
 				id: '',
 				options: {
 					dataKey: '',
-					filterable: true,
-					multiple: false,
-					defaultValue: '',
+					// filterable: true,
+					// multiple: false,
+					defaultValue: undefined,
 					placeholder: '',
 					labelWidth: 100,
 					isShowLabel: true,
 					disabled: false,
-					clearable: true,
+					// clearable: true,
 					required: false,
-					renderType: 2
+					min: undefined,
+					max: 999999
+					// renderType: 2
 				}
 			},
 			{

+ 1 - 0
src/components/packages/formEditor/locale/en.js

@@ -10,6 +10,7 @@ export default {
 			radio: 'Radio',
 			checkbox: 'Checkbox',
 			select: ['Select', 'Employee', 'Role', 'Dict'], //, 'Department'
+			selectUser: 'Employee',
 			time: 'Time',
 			date: 'Date',
 			rate: 'Rate',

+ 1 - 0
src/components/packages/formEditor/locale/zh-cn.js

@@ -10,6 +10,7 @@ export default {
 			radio: '单选框',
 			checkbox: '复选框',
 			select: ['下拉框', '人员', '角色', '字典'], //, '部门'
+			selectUser: '员工',
 			time: '时间',
 			date: '日期',
 			rate: '评分',

+ 5 - 0
src/components/packages/hooks/use-props/index.js

@@ -174,6 +174,7 @@ const getLogicStateByField = (field, fieldsLogicState) => {
 		readOnly
 	}
 }
+// 给选中类型 将 options 配置 铺设为  params 注入给 组件使用
 export const useProps = (state, data, isPc = true, isRoot = false, specialHandling, t, ExtraParams) => {
 	if (!t) {
 		t = useI18n().t
@@ -294,6 +295,10 @@ export const useProps = (state, data, isPc = true, isRoot = false, specialHandli
 			case 'checkbox':
 				result.options = _.get(state, `data[${options.dataKey}].list`, [])
 				break
+			case 'selectUser':
+				result.min = options.min
+				result.max = options.max
+				break
 			case 'select':
 				// 当前选中的值,如果是人员就获取人员的api,部门就获取部门的api
 				if ([2, 3].indexOf(renderType) > -1) {

+ 2 - 1
src/components/packages/utils/field.js

@@ -1,7 +1,8 @@
 import _ from 'lodash-es'
 import { nanoid } from './nanoid'
 // 正则匹配type(itemType 类型)
-const fieldsRe = /^(input|textarea|number|radio|checkbox|select|time|date|rate|switch|slider|html|cascader|uploadfile|signature|region|subform|iframe)$/
+const fieldsRe =
+	/^(input|textarea|number|radio|checkbox|select|selectUser|time|date|rate|switch|slider|html|cascader|uploadfile|signature|region|subform|iframe)$/
 const deepTraversal = (node, fn) => {
 	fn(node)
 	const nodes = node.type === 'subform' ? node.list[0] : node.list || node.rows || node.columns || node.children || []