zzq 2024-05-31 17:01:48 +08:00
commit 1f3bcdc6ba
5 changed files with 219 additions and 1 deletions

View File

@ -93,6 +93,9 @@
:options="linkOptions"
/>
</FormItem>
<FormItem label="脚本" v-if="['Button'].includes(formConfig.currentItem.component)">
<a-button type="primary" size="mini" @click="handleButtonClick"> </a-button>
</FormItem>
<FormItem
label="选项"
@ -123,6 +126,26 @@
</Form>
</div>
</div>
<BasicModal
@register="buttonScriptModal"
title="按钮点击脚本"
:height="700"
:width="1000"
@ok="handleSubmit"
>
<div style="display: flex">
<div calss="propsScript" style="width: 50%">
<a-textarea v-model:value="formContent" :rows="29" />
</div>
<div calss="propsScript" style="width: 50%">
<a-alert message="脚本参数说明,只支持ES5语法兼容小程序" type="warning">
<template #description>
<div v-html="description"></div>
</template>
</a-alert>
</div>
</div>
</BasicModal>
</template>
<script lang="ts">
import {
@ -137,6 +160,7 @@
RadioGroup,
Col,
Row,
message,
} from 'ant-design-vue';
import RadioButtonGroup from '@/components/Form/src/components/RadioButtonGroup.vue';
import { computed, defineComponent, ref, watch, inject } from 'vue';
@ -153,6 +177,8 @@
import { formItemsForEach, remove } from '../../../utils';
import { IBaseFormAttrs } from '../config/formItemPropsConfig';
import { getOutKeyList } from '@/api/formdesign/index';
import { BasicModal, useModal } from '@/components/Modal';
import { formItemPropsScript } from '../../VFormDesign/config/formItemPropsScript';
export default defineComponent({
name: 'ComponentProps',
@ -170,6 +196,9 @@
RadioButtonGroup,
Col,
Row,
message,
BasicModal,
useModal,
},
setup() {
let fieldTableValue = ref();
@ -400,6 +429,26 @@
.map(({ label, field }) => ({ label: label + '/' + field, value: field }))
);
});
//
const formContent: any = ref('');
const description = ref(formItemPropsScript);
//
const [buttonScriptModal, { openModal, closeModal }] = useModal();
//
function handleButtonClick() {
formContent.value = formConfig.value.currentItem.componentProps?.clickCode;
openModal();
}
//
function handleSubmit() {
if (formContent.value.indexOf('=>') != -1) {
//
message.warning('脚本没有更新为最新的版本!');
return;
}
formConfig.value.currentItem.componentProps.clickCode = formContent.value;
closeModal();
}
return {
formConfig,
showControlAttrs,
@ -413,7 +462,23 @@
ChlidTableOptions,
handleFieldTableChange,
fetch,
BasicModal,
formContent,
description,
buttonScriptModal,
openModal,
closeModal,
handleButtonClick,
handleSubmit,
};
},
});
</script>
<style scoped>
.propsScript {
width: 50%;
overflow: auto;
height: calc(100%);
}
</style>

View File

@ -72,11 +72,70 @@
<Col><Checkbox v-model:checked="formConfig.disabled">禁用</Checkbox></Col>
<Col><Checkbox v-model:checked="formConfig.hideRequiredMark">隐藏必选标记</Checkbox></Col>
</FormItem>
<FormItem label="脚本">
<a-space direction="vertical">
<a-button
v-model:value="formConfig.beforeSetData"
type="primary"
size="mini"
@click="handleBtnClick('beforeSetData')"
>
添加赋值前脚本
</a-button>
<a-button
v-model:value="formConfig.afterValidateForm"
type="primary"
size="mini"
@click="handleBtnClick('afterValidateForm')"
>
添加校验后脚本
</a-button>
<a-button
v-model:value="formConfig.afterSaveEvent"
type="primary"
size="mini"
@click="handleBtnClick('afterSaveEvent')"
>
添加保存后脚本
</a-button>
<a-button
v-model:value="formConfig.changeDataEvent"
type="primary"
size="mini"
@click="handleBtnClick('changeDataEvent')"
>
添加数据改变脚本
</a-button>
</a-space>
</FormItem>
</Form>
</div>
<BasicModal
@register="propsScriptModal"
:title="formTitle"
:height="700"
:width="1000"
@ok="handleSubmit"
>
<div style="display: flex">
<div calss="propsScript" style="width: 50%">
<a-textarea v-model:value="formContent" :rows="29" />
</div>
<div calss="propsScript" style="width: 50%">
<a-alert message="脚本参数说明,只支持ES5语法兼容小程序" type="warning">
<template #description>
<div v-html="formItemPropsScript"></div>
</template>
</a-alert>
</div>
</div>
</BasicModal>
</template>
<script lang="ts" setup name="FormProps">
import { computed } from 'vue';
import { ref, computed } from 'vue';
import { BasicModal, useModal } from '@/components/Modal';
import { message } from 'ant-design-vue';
import { formItemPropsScript } from '../../VFormDesign/config/formItemPropsScript';
import { useFormDesignState } from '../../../hooks/useFormDesignState';
import {
InputNumber,
@ -109,4 +168,72 @@
}
return 0;
});
//
let formTitle: any = ref('');
let btnClickEvent_now = '';
let formContent: any = ref('');
let description = ref(formItemPropsScript);
//
const [propsScriptModal, { openModal, closeModal }] = useModal();
//
function handleBtnClick(btnClickEvent: string) {
switch (btnClickEvent) {
case 'beforeSetData':
formTitle.value = '添加赋值前脚本';
btnClickEvent_now = 'beforeSetData';
formContent.value = formConfig.value?.beforeSetData;
break;
case 'afterValidateForm':
formTitle.value = '添加校验后脚本';
btnClickEvent_now = 'afterValidateForm';
formContent.value = formConfig.value?.afterValidateForm;
break;
case 'afterSaveEvent':
formTitle.value = '添加保存后脚本';
btnClickEvent_now = 'afterSaveEvent';
formContent.value = formConfig.value?.afterSaveEvent;
break;
case 'changeDataEvent':
formTitle.value = '添加数据改变脚本';
btnClickEvent_now = 'changeDataEvent';
formContent.value = formConfig.value?.changeDataEvent;
break;
default:
formTitle.value = '';
break;
}
// console.log(formConfig.value);
// console.log(description);
openModal();
}
//
function handleSubmit() {
if (formContent.value.indexOf('=>') != -1) {
//
message.warning('脚本没有更新为最新的版本!');
return;
// } else if() {
}
if (btnClickEvent_now) {
if (btnClickEvent_now == 'beforeSetData') {
formConfig.value.beforeSetData = formContent.value;
} else if (btnClickEvent_now == 'afterValidateForm') {
formConfig.value.afterValidateForm = formContent.value;
} else if (btnClickEvent_now == 'afterSaveEvent') {
formConfig.value.afterSaveEvent = formContent.value;
} else if (btnClickEvent_now == 'changeDataEvent') {
formConfig.value.changeDataEvent = formContent.value;
}
}
closeModal();
}
</script>
<style scoped>
.propsScript {
width: 50%;
overflow: auto;
height: calc(100%);
}
</style>

View File

@ -0,0 +1,21 @@
export const formItemPropsScript = `
prop:id;<br />
data:;<br />
isUpdate:,;<br />
get(path):, pathid, id., id..id;<br />
set(path,value):,pathget;<br />
getLabel(prop):,propid;<br />
setRequired(prop,isRequired):,propid,isRequired true,false<br />
setDisabled(prop,isDisabled):,propid,isDisabled true,false<br />
setHide(prop,isHide):,isHide true,false<br />
httpGet(option):get<br />
httpPost(option):post<br />
httpDelete(option):delete<br />
httpPut(option):put<br />
option::url:,data:(get),params:url,errorTips:,callback <br />
loading:<br />
hideLoading:<br />
message:<br />
loginUser:<br />
callback:,使http使';<br />
`;

View File

@ -473,6 +473,7 @@ export const baseComponents: IVFormComponent[] = [
shape: 'default',
size: 'middle',
icon: '',
clickCode: '',
},
},
// {

View File

@ -136,6 +136,10 @@ export interface IFormConfig extends PickAntFormConfig {
activeKey?: PropsTabKey;
status?: string;
defaultValue?: string;
beforeSetData?: string;
afterValidateForm?: string;
afterSaveEvent?: string;
changeDataEvent?: string;
}
export interface AForm {