diff --git a/mobile-oa-h5/src/oa/components/OaStubField.vue b/mobile-oa-h5/src/oa/components/OaStubField.vue
new file mode 100644
index 00000000..5927ba23
--- /dev/null
+++ b/mobile-oa-h5/src/oa/components/OaStubField.vue
@@ -0,0 +1,55 @@
+
+
+
{{ title || typeName }}
+
+
+
+
+
+
+
diff --git a/mobile-oa-h5/src/oa/kitchen-sink-rule.js b/mobile-oa-h5/src/oa/kitchen-sink-rule.js
new file mode 100644
index 00000000..c3661ed6
--- /dev/null
+++ b/mobile-oa-h5/src/oa/kitchen-sink-rule.js
@@ -0,0 +1,84 @@
+/** 按 zkxw-sc 已发布模板实际出现的 type 构造;非设计器理论全集 */
+export const kitchenSinkRule = [
+ { type: 'input', field: 'title', title: '单行文本', value: '', $required: true },
+ { type: 'textarea', field: 'remark', title: '多行文本', value: '' },
+ {
+ type: 'select',
+ field: 'level',
+ title: '下拉',
+ value: '',
+ options: [
+ { label: '普通', value: 'normal' },
+ { label: '紧急', value: 'urgent' }
+ ]
+ },
+ { type: 'inputNumber', field: 'qty', title: '数字', value: 1 },
+ {
+ type: 'datePicker',
+ field: 'bizDate',
+ title: '日期',
+ value: '',
+ props: { type: 'date' }
+ },
+ { type: 'upload', field: 'files', title: '附件 upload', value: [] },
+ { type: 'money', field: 'amount', title: '金额 money', value: '' },
+ {
+ type: 'relatedApproval',
+ field: 'related',
+ title: '关联审批 relatedApproval',
+ value: []
+ },
+ {
+ type: 'receiveAccount',
+ field: 'payAccount',
+ title: '收款账户 receiveAccount',
+ value: []
+ },
+ { type: 'dept', field: 'deptId', title: '部门 dept', value: '' },
+ { type: 'person', field: 'personIds', title: '人员 person', value: [] },
+ {
+ type: 'ownerPerson',
+ field: 'ownerPerson',
+ title: '所属人 ownerPerson',
+ value: ''
+ },
+ {
+ type: 'ownerDept',
+ field: 'ownerDept',
+ title: '所属部门 ownerDept',
+ value: ''
+ },
+ { type: 'post', field: 'postId', title: '岗位 post', value: '' },
+ { type: 'leaveKit', field: 'leaveKit', title: '请假套件 leaveKit', value: {} },
+ {
+ type: 'overtimeKit',
+ field: 'overtimeKit',
+ title: '加班套件 overtimeKit',
+ value: {}
+ },
+ {
+ type: 'confirmationKit',
+ field: 'confirmationKit',
+ title: '转正套件 confirmationKit',
+ value: {}
+ },
+ {
+ type: 'resignationKit',
+ field: 'resignationKit',
+ title: '离职套件 resignationKit',
+ value: {}
+ },
+ { type: 'tripKit', field: 'tripKit', title: '差旅套件 tripKit', value: {} },
+ {
+ type: 'tripItinerary',
+ field: 'tripItinerary',
+ title: '行程 tripItinerary',
+ value: []
+ }
+]
+
+export const kitchenSinkOption = {
+ submitBtn: false,
+ resetBtn: false,
+ form: { labelPosition: 'top' }
+}
diff --git a/mobile-oa-h5/src/oa/register-components.js b/mobile-oa-h5/src/oa/register-components.js
index c5d8db7b..7a7ac34f 100644
--- a/mobile-oa-h5/src/oa/register-components.js
+++ b/mobile-oa-h5/src/oa/register-components.js
@@ -1,3 +1,27 @@
+import OaStubField from './components/OaStubField.vue'
+
+/** 与 web-admin formCreate.component 名称对齐;阶段一可用 stub */
+const CUSTOM_TYPES = [
+ 'upload',
+ 'money',
+ 'relatedApproval',
+ 'receiveAccount',
+ 'dept',
+ 'person',
+ 'ownerPerson',
+ 'ownerDept',
+ 'post',
+ 'leaveKit',
+ 'overtimeKit',
+ 'confirmationKit',
+ 'resignationKit',
+ 'tripKit',
+ 'tripItinerary'
+]
+
export function registerOaComponents(formCreate) {
- // Task 3 will replace with real registrations
+ if (!formCreate || typeof formCreate.component !== 'function') return
+ for (const name of CUSTOM_TYPES) {
+ formCreate.component(name, OaStubField)
+ }
}
diff --git a/mobile-oa-h5/src/views/FormSink.vue b/mobile-oa-h5/src/views/FormSink.vue
index 8b856cb9..ae1912b5 100644
--- a/mobile-oa-h5/src/views/FormSink.vue
+++ b/mobile-oa-h5/src/views/FormSink.vue
@@ -1,3 +1,75 @@
- FormSink 占位(Task 3 实现)
+
+
+
+
+