|
|
@@ -0,0 +1,276 @@
|
|
|
+<template>
|
|
|
+ <bs-modal
|
|
|
+ :visible="modalOptions.visible"
|
|
|
+ :width="modalOptions.width"
|
|
|
+ :title="modalOptions.title"
|
|
|
+ :modal-extra-props="modalOptions.modalExtraProps"
|
|
|
+ @cancel="handleCancel"
|
|
|
+ @ok="handleOk"
|
|
|
+ >
|
|
|
+ <div class="content">
|
|
|
+ <bs-form
|
|
|
+ :form-data="formOptions.formData"
|
|
|
+ :form-fields="formOptions.formFields"
|
|
|
+ :form-extra-props="formOptions.formExtraProps"
|
|
|
+ :footer-render="() => null"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </bs-modal>
|
|
|
+</template>
|
|
|
+<script setup lang="jsx">
|
|
|
+ import { BsModal, useBsModal, useBsForm, BsForm } from '/@/components/BsUi/index.js';
|
|
|
+ import { REQUIRED_STATE, SCENE_TYPE, SELECT_MULTIPLE } from '/@/components/BsUi/constant.js';
|
|
|
+ const {
|
|
|
+ modalOptions,
|
|
|
+ getModalPropsValue: getMVal,
|
|
|
+ setModalPropsValue: setMVal,
|
|
|
+ } = useBsModal({
|
|
|
+ modalOptions: {
|
|
|
+ title: '创建拜访计划',
|
|
|
+ visible: false,
|
|
|
+ size: 'middle',
|
|
|
+ modalExtraProps: {
|
|
|
+ destroyOnClose: true,
|
|
|
+ okButtonProps: {
|
|
|
+ loading: false,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ const { formOptions } = useBsForm({
|
|
|
+ formOptions: {
|
|
|
+ formId: 'formId',
|
|
|
+ formExtraProps: {},
|
|
|
+ formData: {},
|
|
|
+ formFields: [
|
|
|
+ {
|
|
|
+ id: '1',
|
|
|
+ label: '计划名称',
|
|
|
+ component: 'a-input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ },
|
|
|
+ field: 'name',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '2',
|
|
|
+ label: '预计时间',
|
|
|
+ component: 'a-date-picker',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请选择',
|
|
|
+ disabled: false,
|
|
|
+ },
|
|
|
+ field: 'name2',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ span: 12,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '3',
|
|
|
+ label: '提前提醒时间',
|
|
|
+ component: 'a-input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入',
|
|
|
+ disabled: false,
|
|
|
+ slots: [
|
|
|
+ {
|
|
|
+ slotName: 'addonAfter',
|
|
|
+ customRender() {
|
|
|
+ return <a-select options={[{ value: '20', label: '分钟' }]} value='20'></a-select>;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ field: 'name3',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ span: 12,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '4',
|
|
|
+ label: '客户名称',
|
|
|
+ component: 'a-select',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '自动带出',
|
|
|
+ disabled: false,
|
|
|
+ },
|
|
|
+ field: 'name4',
|
|
|
+ span: 12,
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ id: '100',
|
|
|
+ label: '拜访责任人',
|
|
|
+ component: 'bs-org-user-selector',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请选择',
|
|
|
+ disabled: true,
|
|
|
+ sceneType: SCENE_TYPE.USER,
|
|
|
+ multiple: SELECT_MULTIPLE.ONE,
|
|
|
+ },
|
|
|
+ span: 12,
|
|
|
+ field: 'name100',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '101',
|
|
|
+ label: '项目名称',
|
|
|
+ component: 'a-select',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请选择',
|
|
|
+ disabled: false,
|
|
|
+ },
|
|
|
+ field: 'name101',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ required: REQUIRED_STATE.REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '102',
|
|
|
+ label: '拜访地址(省市区)',
|
|
|
+ component: 'a-select',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请选择',
|
|
|
+ disabled: false,
|
|
|
+ },
|
|
|
+ field: 'name102',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ span: 12,
|
|
|
+ required: REQUIRED_STATE.NO_REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '103',
|
|
|
+ label: '详细地址',
|
|
|
+ component: 'a-input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请选择',
|
|
|
+ disabled: false,
|
|
|
+ },
|
|
|
+ field: 'name103',
|
|
|
+ sort: '1',
|
|
|
+ visible: '1',
|
|
|
+ span: 12,
|
|
|
+ required: REQUIRED_STATE.NO_REQUIRED,
|
|
|
+ formItemExtraProps: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ validator: (_, value) => {
|
|
|
+ // return Promise.reject(new Error('报错'));
|
|
|
+ return Promise.resolve();
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ const showModal = () => {
|
|
|
+ setMVal('visible', true);
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleCancel = () => {
|
|
|
+ setMVal('visible', false);
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleOk = ({}) => {
|
|
|
+ setMVal('modalExtraProps.okButtonProps.loading', true);
|
|
|
+ setTimeout(() => {
|
|
|
+ setMVal('modalExtraProps.okButtonProps.loading', false);
|
|
|
+ setMVal('visible', false);
|
|
|
+ }, 1000);
|
|
|
+ };
|
|
|
+
|
|
|
+ defineExpose({
|
|
|
+ showModal,
|
|
|
+ });
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .content {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+</style>
|