初始代码

This commit is contained in:
wangmingwei
2026-04-21 17:19:25 +08:00
parent ac9bea0b65
commit fb2bc3165b
1320 changed files with 17009 additions and 0 deletions

View File

@@ -0,0 +1,443 @@
#parse("PublicMacro/AppFormMarco.vm")
<template>
<view class="zero-wrap zero-wrap-form dynamicModel-form-v" v-if="!loading">
<u-form :model="${context.formModel}" :rules="${context.formRules}" ref="${context.formModel}" :errorType="['toast']"
#set($position='left')
#if(${context.labelPosition}=='top')
#set($position='top')
#end
#set($align='left')
#if(${context.labelPosition}=='right')
#set($align='right')
#end
label-position="${position}" label-align="${align}" :label-width="labelwidth" class="zero-form">
#AppDetailRendering()
</u-form>
<view class="buttom-actions" >
<template v-if="btnList.includes('btn_edit')">
<CustomButton :btnText="$t('common.cancelText')" btnIcon="icon-ym icon-ym-add-cancel" customIcon />
<u-button class="buttom-btn" type="primary" @click.stop="submitForm">{{$t('common.editText','编辑')}}</u-button>
</template>
<u-button v-else class="buttom-btn" @click="resetForm">{{$t('common.cancelText','取消')}}</u-button>
</view>
<u-modal v-model="show" :content="content" width='70%' border-radius="16" :content-style="{fontSize: '28rpx',padding: '20rpx',lineHeight: '44rpx',textAlign: 'left'}"
:titleStyle="{padding: '20rpx'}" :confirm-style="{height: '80rpx',lineHeight: '80rpx'}" :title="title" confirm-text="确定">
</u-modal>
</view>
</template>
<script>
import {
getDictionaryDataSelector,
getDataInterfaceRes
} from '@/api/common'
import {
getRelationFormDetail,
getDataInterfaceDataInfoByIds
} from '@/api/common.js'
import request from '@/utils/request'
import DisplayList from '@/components/displayList'
import CustomButton from '@/components/CustomButton'
export default {
components:{
DisplayList,
CustomButton
},
data(){
return{
btnLoading: false,
loading: false,
text: '提示:测试文本',
tableKey:'',
timeKey : +new Date(),
${context.formModel}:{
${pKeyName}:"",
},
${context.formRules}:{},
#foreach($fieLdsModel in ${context.form})
#set($zerokey = "${fieLdsModel.zeroKey}")
#set($isEnd = "${fieLdsModel.isEnd}")
#set($formModel = ${fieLdsModel.formModel})
#set($model = "${formModel.model}")
#set($outermost = ${formModel.outermost})
#set($children = ${formModel.children})
#if(${layoutList.contains($zerokey)})
#if(${isEnd}=='0')
#if(${outermost}=='0')
#if($zerokey=='collapse')
${model}active: #if($formModel.accordion) '${formModel.active}' #else ${formModel.active} #end,
#end
${model}Current:${formModel.activeIndex},
${model}Data:[
#foreach($childrenList in $children)
{
title: #if(${childrenList.titleI18nCode}) this.$t('${childrenList.titleI18nCode}')#else "${childrenList.title}" #end
},
#end
],
#end
#end
#end
#end
interfaceRes:{
#foreach($html in ${context.fields})
#set($fieLdsModel = $html.formColumnModel.fieLdsModel)
#faceRes($fieLdsModel,'')
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($html in ${fieldsAll})
#set($fieLdsModel = $html.formMastTableModel.mastTable.fieLdsModel)
#faceRes($fieLdsModel,'')
#end
#end
#foreach($child in ${context.children})
#set($className = "${child.className}")
#foreach($childList in ${child.childList})
#set($fieLdsModel = $childList.fieLdsModel)
#faceRes($fieLdsModel,$className)
#end
#end
},
extraOptions:{
#foreach($html in ${context.fields})
#set($fieLdsModel = $html.formColumnModel.fieLdsModel)
#extraOptions($fieLdsModel,'')
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($html in ${fieldsAll})
#set($fieLdsModel = $html.formMastTableModel.mastTable.fieLdsModel)
#extraOptions($fieLdsModel,'')
#end
#end
#foreach($child in ${context.children})
#set($className = "${child.className}")
#foreach($childList in ${child.childList})
#set($fieLdsModel = $childList.fieLdsModel)
#extraOptions($fieLdsModel,$className)
#end
#end
},
extraData:{
#foreach($fieLdsModel in ${context.fields})
#set($html = $fieLdsModel.formColumnModel.fieLdsModel)
#set($vModel = "${html.vModel}")
#if($vModel)
$!{vModel} : {},
#end
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($fieLdsModel in ${fieldsAll})
#set($mastTableModel = $fieLdsModel.formMastTableModel)
#set($html = $fieLdsModel.formMastTableModel.mastTable.fieLdsModel)
#set($vModel = "${mastTableModel.vModel}")
#if($vModel)
$!{vModel} : {},
#end
#end
#end
},
maskConfig:{
#foreach($html in ${context.fields})
#set($fieLdsModel = $html.formColumnModel.fieLdsModel)
#maskConfig($fieLdsModel,'')
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($html in ${fieldsAll})
#set($fieLdsModel = $html.formMastTableModel.mastTable.fieLdsModel)
#maskConfig($fieLdsModel,'')
#end
#end
#foreach($child in ${context.children})
#set($className = "${child.className}")
#foreach($childList in ${child.childList})
#set($fieLdsModel = $childList.fieLdsModel)
#maskConfig($fieLdsModel,$className)
#end
#end
},
labelwidth:${context.labelWidth}*1.5,
menuId:'',
btnList:[],
idList:[],
ruleList:{},
childIndex:-1,
content:'',
title:'',
show:false,
}
},
onLoad(option) {
this.menuId=option.menuId
this.btnList=option.btnList.split(",")
uni.setNavigationBarTitle({
title: this.$t('common.detailText','详情')
})
this.${context.formModel}.${pKeyName} = option.id || 0
this.idList = option.idList?option.idList.split(","):[]
this.initData()
uni.$on('refresh', () => {
#foreach($fieLdsModel in ${context.form})
#set($zerokey = "${fieLdsModel.zeroKey}")
#set($isEnd = "${fieLdsModel.isEnd}")
#set($formModel = ${fieLdsModel.formModel})
#set($model = "${formModel.model}")
#set($outermost = ${formModel.outermost})
#set($children = ${formModel.children})
#if(${layoutList.contains($zerokey)})
#if(${isEnd}=='0')
#if(${outermost}=='0')
#if($zerokey=='collapse')
this.${model}active=#if($formModel.accordion) '${formModel.active}' #else ${formModel.active} #end
#end
this.${model}Current=${formModel.activeIndex}
#end
#end
#end
#end
//执行接口更新数据
this.initData()
})
uni.$on('initCollapse', () => {
//初始化折叠面板高度高度
this.collapse()
})
},
beforeDestroy() {
uni.$off('refresh')
},
onReady() {
#set($rulesAll = "this."+${context.formRules})
this.$refs.${context.formModel}.setRules(${rulesAll});
},
onShow(){
this.collapse()
},
watch:{
dataForm: {
handler(val, oldVal) {
#foreach($child in ${context.children})
#set($className = "${child.className}")
this.${className}()
#end
},
deep: true
}
},
methods:{
getParamList(key) {
let templateJson = this.interfaceRes[key];
if (!templateJson || !templateJson.length || !this.dataForm) return templateJson;
for (let i = 0; i < templateJson.length; i++) {
if (templateJson[i].relationField && templateJson[i].sourceType == 1) {
templateJson[i].defaultValue = this.dataForm[templateJson[i].relationField + '_id'] || '';
}
}
return templateJson;
},
#foreach($html in ${context.fields})
#set($fieLdsModel = $html.formColumnModel.fieLdsModel)
#extraData($fieLdsModel,'','data')
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($html in ${fieldsAll})
#set($fieLdsModel = $html.formMastTableModel.mastTable.fieLdsModel)
#extraData($fieLdsModel,'','data')
#end
#end
doPreviewImage(url,imagesList) {
const images = imagesList.map(item => this.define.baseURL + item.url);
uni.previewImage({
urls: images,
current: url,
success: () => {},
fail: () => {
uni.showToast({
title: '预览图片失败',
icon: 'none'
});
}
});
},
onCollapseChange() {
uni.$emit('initCollapse')
},
toDetail(id, modelId) {
if (!id) return
let config = {
modelId: modelId,
id: id,
formTitle: this.$t('common.detailText','详情'),
noShowBtn: 1,
noDataLog: 1,
}
this.$nextTick(() => {
const url ='/pages/apply/dynamicModel/detail?config=' + this.com.zero.base64.encode(JSON.stringify(config),"UTF-8")
uni.navigateTo({
url: url
})
})
},
clickIcon(label,tipLabel) {
this.content = tipLabel
this.title = label
this.show = true
},
checkChildRule() {
let title = [];
let _ruleList = this.ruleList
for (let k in _ruleList) {
let childData = this.${context.formModel}[k]
childData.forEach((item, index) => {
for (let model in _ruleList[k]) {
if (item[model] instanceof Array) {
if (item[model].length == 0) {
title.push(_ruleList[k][model])
}
} else if (!item[model]) {
title.push(_ruleList[k][model])
}
}
})
}
if (title.length > 0) {
return title[0]
}
},
resetForm(){
uni.navigateBack()
},
dataAll(){
},
#foreach($child in ${context.children})
#set($tableModel = "${child.tableModel}")
#set($className = "${child.className}")
${className}(){
let table = this.${context.formModel}.${tableModel}
let summaryField =${child.summaryField}
let summaryFieldName =${child.summaryFieldName}
#if($useFormPermission)
for(let i=0;i<summaryField.length;i++){
if(!this.${setPermission}.hasFormP("${tableModel}-"+summaryField[i],this.menuId)){
summaryField.splice(i)
}
}
#end
let data ={}
if(!table) return data
let thousandsField = ${child.thousandsField}
for (let i in summaryField) {
let map = {}
let val = 0
for (let j = 0; j < table.length; j++) {
let summary = table[j][summaryField[i]];
if (summary) {
let data = isNaN(summary) ? 0 : Number(summary)
val += data
}
}
map.id = summaryField[i];
map.name = summaryFieldName[summaryField[i]+"_i18n"] ? this.$t(summaryFieldName[summaryField[i]+"_i18n"]):summaryFieldName[summaryField[i]];
map.val = (thousandsField.includes(summaryField[i]))? Number(val).toLocaleString('zh', {
maximumFractionDigits: '2',
minimumFractionDigits: '2'
}): val.toFixed(2);
data[summaryField[i]]=map;
}
return data;
},
#end
#foreach($fieLdsModel in ${context.form})
#set($zerokey = "${fieLdsModel.zeroKey}")
#set($isEnd = "${fieLdsModel.isEnd}")
#set($formModel = ${fieLdsModel.formModel})
#set($outermost = ${formModel.outermost})
#if($zerokey=='tab' || $zerokey=='steps')
#if(${isEnd}=='0')
#if(${outermost}=='0')
${formModel.model}(index) {
this.${formModel.model}Current = index;
this.timeKey = +new Date()
#if($zerokey=='tab')
this.collapse()
setTimeout(() => {
uni.$emit('initCollapse')
}, 1000)
#end
},
#end
#end
#end
#end
initData(){
#set($nextTick='$'+"nextTick")
this.$nextTick(function(){
if (this.${context.formModel}.${pKeyName}) {
this.loading = true
request({
url: '/api/${context.module}/${context.className}/'+'detail/'+this.${context.formModel}.${pKeyName},
method: 'get',
}).then(res => {
this.dataInfo(res.data)
this.loading = false
})
}
})
},
submitForm(){
uni.navigateTo({
url: "./form?menuId=" + this.menuId + "&jurisdictionType=btn_edit&id="+this.${context.formModel}.${pKeyName}+"&idList="+this.idList
})
},
selfInit() {
this.$store.commit('base/UPDATE_RELATION_DATA', {})
},
dataInfo(dataAll){
let _dataAll =dataAll
this.${context.formModel}=_dataAll
#foreach($html in ${context.fields})
#set($fieLdsModel = $html.formColumnModel.fieLdsModel)
#extraData($fieLdsModel,'','')
#end
#foreach($masetkey in $mastTableList.entrySet())
#set($fieldsAll = $masetkey.value)
#foreach($html in ${fieldsAll})
#set($fieLdsModel = $html.formMastTableModel.mastTable.fieLdsModel)
#extraData($fieLdsModel,'','')
#end
#end
this.collapse()
},
collapse(){
setTimeout(()=> {
#foreach($fieLdsModel in ${context.form})
#set($zerokey = "${fieLdsModel.zeroKey}")
#set($isEnd = "${fieLdsModel.isEnd}")
#set($formModel = ${fieLdsModel.formModel})
#set($outermost = ${formModel.outermost})
#set($config=$formModel.config)
#if(${layoutList.contains($zerokey)})
#if(${config.app}==true)
#if(${isEnd}=='0')
#if(${outermost}=='0')
this.$refs.${formModel.model}Current && this.$refs.${formModel.model}Current.init()
#end
#end
#end
#end
#end
}, 1000);
},
},
}
</script>
<style>
page{
background-color: #f0f2f6;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,361 @@
#parse("PublicMacro/DetailMarco.vm")
#parse("PublicMacro/ConstantMarco.vm")
##参数
#ConstantParams()
<template>
## 全屏弹窗
#if(${context.popupType}=="fullScreen")
<BasicPopup v-bind="$attrs" @register="registerPopup" :title="title" destroyOnClose>
<template #insertToolbar>
#if(${context.HasPrintBtn})
<a-button type="primary" @click="handlePrint">#if(${context.printButtonTextI18nCode}){{t('${context.printButtonTextI18nCode}','${context.printButtonText}')}}#else${context.printButtonText}#end</a-button>
#end
</template>
<a-row class="p-10px dynamic-form ${context.formStyle}" :style="{ margin: '0 auto', width: '${context.fullScreenWidth}' }">
<!-- 表单 -->
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" ref="formRef" >
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#DetailFormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicPopup>
#end
## 普通弹窗
#if(${context.popupType}=="general")
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="${context.generalWidth}"
:minHeight="100" :showOkBtn="false">
<template #insertFooter>
#if(${context.HasPrintBtn})
<a-button type="primary" @click="handlePrint">#if(${context.printButtonTextI18nCode}){{t('${context.printButtonTextI18nCode}','${context.printButtonText}')}}#else${context.printButtonText}#end</a-button>
#end
</template>
<!-- 表单 -->
<a-row class="dynamic-form ${context.formStyle}">
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" ref="formRef">
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#DetailFormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicModal>
#end
## 右侧弹窗
#if(${context.popupType}=="drawer")
<BasicDrawer v-bind="$attrs" @register="registerDrawer" :title="title" width="${context.drawerWidth}" showFooter
:showOkBtn="false">
<template #insertFooter>
#if(${context.HasPrintBtn})
<a-button type="primary" @click="handlePrint">#if(${context.printButtonTextI18nCode}){{t('${context.printButtonTextI18nCode}','${context.printButtonText}')}}#else${context.printButtonText}#end</a-button>
#end
</template>
<a-row class="p-10px dynamic-form ${context.formStyle}">
<!-- 表单 -->
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" ref="formRef" >
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#DetailFormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicDrawer>
#end
<!-- 有关联表单详情:开始 -->
<RelationDetail ref="relationDetailRef" />
<!-- 有关联表单详情:结束 -->
#if(${context.HasPrintBtn})
<PrintSelect @register="registerPrintSelect" @change="handleShowBrowse" />
<PrintBrowse @register="registerPrintBrowse" />
#end
</template>
<script lang="ts" setup>
import { getDetailInfo } from './helper/api';
import { getConfigData } from '@/api/onlineDev/visualDev';
import { reactive, toRefs, nextTick, ref, computed, unref ,toRaw} from 'vue';
#if(${context.popupType}=="fullScreen")
import { BasicPopup, usePopup } from '@/components/Popup';
#end
import { BasicModal, useModal } from '@/components/Modal';
#if(${context.popupType}=="drawer")
import { BasicDrawer, useDrawer } from '@/components/Drawer';
#end
#if($childSummary == true)
import { thousandsFormat } from '@/utils/yunzhupaas';
#end
// 有关联表单详情
import RelationDetail from '@/views/common/dynamicModel/list/detail/index.vue';
// 表单权限
import { usePermission } from '@/hooks/web/usePermission';
#if(${context.HasPrintBtn})
// 打印模板多条生成PrintSelect
import PrintSelect from '@/components/PrintDesign/printSelect/index.vue';
import PrintBrowse from '@/components/PrintDesign/printBrowse/index.vue';
#end
import { useMessage } from '@/hooks/web/useMessage';
import { CaretRightOutlined } from '@ant-design/icons-vue';
import { buildUUID } from '@/utils/uuid';
import { useI18n } from '@/hooks/web/useI18n';
import { getDataChange } from '@/api/onlineDev/visualDev';
import { getDataInterfaceDataInfoByIds } from '@/api/systemData/dataInterface';
import ExtraRelationInfo from '@/components/yunzhupaas/RelationForm/src/ExtraRelationInfo.vue';
interface State {
dataForm: any;
title: string;
maskConfig: any;
interfaceRes: any;
locationScope: any;
extraOptions: any;
extraData: any;
## 活动面板参数
#foreach($fieLdsModel in ${context.form})
#set($yunzhupaasKey = "${fieLdsModel.yunzhupaasKey}")
#set($formModel = ${fieLdsModel.formModel})
#set($outermost = ${formModel.outermost})
#set($isEnd = "${fieLdsModel.isEnd}")
#if(${isEnd}=='0')
#if($yunzhupaasKey=='collapse')
#if(${outermost}=='0')
${formModel.model}:any;
#end
#end
#if($yunzhupaasKey=='tab')
#if(${outermost}=='0')
${formModel.model}:any;
#end
#end
#if($yunzhupaasKey=='steps')
#if(${outermost}=='0')
${formModel.model}:any;
#end
#end
#end
#end
## 子表平铺活动面板变量
#foreach($children in ${context.children})
#set($aliasname = "${children.aliasLowName}")
#if($!{children.layoutType} == 'list')
${aliasname}outerActiveKey: any;
${aliasname}innerActiveKey: any;
#end
#end
}
defineOptions({ name: 'Detail' });
const { createMessage, createConfirm } = useMessage();
#if(${context.popupType}=="fullScreen")
const [registerPopup, { openPopup, setPopupProps, closePopup }] = usePopup();
#end
#if(${context.popupType}=="general")
const [registerModal, { openModal, setModalProps, closeModal }] = useModal();
#end
#if(${context.popupType}=="drawer")
const [registerDrawer, { openDrawer, setDrawerProps, closeDrawer }] = useDrawer();
#end
#if(${context.HasPrintBtn})
const [registerPrintSelect, { openModal: openPrintSelect }] = useModal();
const [registerPrintBrowse, { openModal: openPrintBrowse }] = useModal();
#end
##子表列表字段-及合计方法
#DetailChildTableColumns()
const { t } = useI18n();
const relationDetailRef = ref<any>(null);
const state = reactive<State>({
dataForm:{},
title: t('common.detailText','详情'),
maskConfig:#CreateMaskConfig(),
interfaceRes: ${context.templateJsonAll},
locationScope:#CreateLocationScope(),
extraOptions: #CreateExtraOptions(),
extraData: #CreateExtraData(),
## 活动面板参数
#foreach($fieLdsModel in ${context.form})
#set($yunzhupaasKey = "${fieLdsModel.yunzhupaasKey}")
#set($formModel = ${fieLdsModel.formModel})
#set($outermost = ${formModel.outermost})
#set($isEnd = "${fieLdsModel.isEnd}")
#if(${isEnd}=='0')
#if($yunzhupaasKey=='collapse')
#if(${outermost}=='0')
${formModel.model}:${formModel.active},
#end
#end
#if($yunzhupaasKey=='tab')
#if(${outermost}=='0')
${formModel.model}:'${formModel.active}',
#end
#end
#if($yunzhupaasKey=='steps')
#if(${outermost}=='0')
${formModel.model}:${formModel.active},
#end
#end
#end
#end
## 子表平铺活动面板变量
#foreach($children in ${context.children})
#set($aliasname = "${children.aliasLowName}")
#if($!{children.layoutType} == 'list')
${aliasname}outerActiveKey: [0],
${aliasname}innerActiveKey: [],
#end
#end
});
const { title, dataForm, maskConfig } = toRefs(state);
// 表单权限
const { hasFormP } = usePermission();
defineExpose({ init });
function init(data) {
state.dataForm.id = data.id;
#if(${context.popupType}=="fullScreen")
openPopup();
#end
#if(${context.popupType}=="general")
openModal();
#end
#if(${context.popupType}=="drawer")
openDrawer();
#end
nextTick(() => {
setTimeout(initData, 0);
});
}
function initData() {
changeLoading(true);
#InitActiveValue()
if (state.dataForm.id) {
getData(state.dataForm.id);
} else {
#if(${context.popupType}=="fullScreen")
closePopup();
#end
#if(${context.popupType}=="general")
closeModal();
#end
#if(${context.popupType}=="drawer")
closeDrawer();
#end
}
}
function getData(id) {
getDetailInfo(id).then((res) => {
state.dataForm = res.data || {};
nextTick(() => {
## 子表平铺,默认展开
#foreach($itemModel in ${context.children})
#set($aliasname =$itemModel.aliasLowName)
#if($!{itemModel.layoutType} == 'list')
if (state.dataForm.${aliasname}List) {
for (let i = 0; i < state.dataForm.${aliasname}List.length; i++) {
state.dataForm.${aliasname}List[i].yunzhupaasId = buildUUID();
}
}
set${aliasname}ActiveKey();
#end
#end
#runAllExtraFun()
changeLoading(false);
});
});
}
## 平铺布局时设置默认展开
#foreach($itemModel in ${context.children})
#if(${itemModel.layoutType} == 'list')
#set($aliasname =$itemModel.aliasLowName)
// 平铺布局时设置默认展开
function set${aliasname}ActiveKey() {
state.${aliasname}outerActiveKey = [0];
state.${aliasname}innerActiveKey = [];
#if(${itemModel.defaultExpandAll})
state.${aliasname}innerActiveKey = ['summary'];
if (!state.dataForm.${aliasname}List.length) return;
for (let i = 0; i < state.dataForm.${aliasname}List.length; i++) {
state.${aliasname}innerActiveKey.push(state.dataForm.${aliasname}List[i].yunzhupaasId);
}
#end
}
#end
#end
function toDetail(modelId, id, propsValue) {
if (!id) return;
getConfigData(modelId).then((res) => {
if (!res.data || !res.data.formData) return;
const formConf = JSON.parse(res.data.formData);
formConf.popupType = 'general';
formConf.hasPrintBtn = false;
formConf.customBtns = [];
const data = { id, formConf, modelId, propsValue};
relationDetailRef.value?.init(data);
});
}
#if($context.HasPrintBtn)
function handlePrint() {
let printId=#if(${context.PrintId})${context.PrintId}#else [] #end
if (!printId?.length) return createMessage.error('未配置打印模板');
if (printId?.length === 1) return handleShowBrowse(printId[0]);
openPrintSelect(true, printId);
}
function handleShowBrowse(id) {
openPrintBrowse(true, { id, formInfo: [{ formId: state.dataForm.id }] });
}
#end
function setFormProps(data) {
#if(${context.popupType}=="fullScreen")
setPopupProps(data);
#end
#if(${context.popupType}=="general")
setModalProps(data);
#end
#if(${context.popupType}=="drawer")
setDrawerProps(data);
#end
}
function changeLoading(loading) {
setFormProps({ loading });
}
##合计方法
#if($childSummary==true)
//子表合计方法
function getCmpValOfRow(row, key, summaryField) {
if (!summaryField.length) return '';
const isSummary = key => summaryField.includes(key);
const target = row[key];
if (!target) return '';
let data = isNaN(target) ? 0 : Number(target);
if (isSummary(key)) return data || 0;
return '';
}
#end
function getParamList(key) {
let templateJson: any[] = state.interfaceRes[key];
if (!templateJson || !templateJson.length || !state.dataForm) return templateJson;
for (let i = 0; i < templateJson.length; i++) {
if (templateJson[i].relationField && templateJson[i].sourceType == 1) {
templateJson[i].defaultValue = state.dataForm[templateJson[i].relationField + '_id'] || '';
}
}
return templateJson;
}
## 生成关联表单弹窗初始化数据方法
#ExtraInfoFun()
</script>

View File

@@ -0,0 +1,169 @@
#parse("PublicMacro/FormMarco.vm")
## 行内-弹窗编辑生成表单字段
#macro(FormRenderingExtra)
#foreach($html in ${context.columnList})
#set($vModel = "${html.vModel}")
#set($beforeVmodel = "${html.vModel}")
#set($mastModel="${context.formModel}.${beforeVmodel}")
#set($config = $html.config)
#set($mastKey = "${config.yunzhupaasKey}")
#set($show = $config.noShow)
#set($pcshow = $config.pc)
#set($startTime=${html.startTime})
#set($endTime=${html.endTime})
#if(${mastKey}=='datePicker'||${mastKey}=='timePicker')
#GetStartAndEndTime($mastKey,$config,$html,$startTime,$endTime)
#end
#if($show == false && $pcshow == true && !$html.prop.toLowerCase().startsWith("tablefield"))
<a-col :span="24" class="ant-col-item" #if($context.isFlow) v-if="judgeShow('${beforeVmodel}')"
#elseif(${context.columnData.useFormPermission}) #if(${vModel}) v-if="com.yunzhupaas.hasFormP('${beforeVmodel}')"
#elseif($mastKey == 'relationFormAttr' || $mastKey == 'popupAttr') v-if="com.yunzhupaas.hasFormP('${html.relationField}')" #end #end >
<a-form-item #if($config.showLabel == true) #if($config.labelWidth && ${context.labelPosition}!="top") :labelCol="{ style: { width: '${config.labelWidth}px' } }"#end
#else :labelCol="{ style: { width: '0px' } }"#end #if($vModel) name="${beforeVmodel}" #end>
<template #label>#if(${config.labelI18nCode}) {{t('${config.labelI18nCode}','${config.label}')}} #else${config.label} #end
#if((${config.label} || ${config.labelI18nCode}) && ${context.labelSuffix})${context.labelSuffix}#end
#if((${config.label} || ${config.labelI18nCode}) && (${config.tipLabel} || ${config.tipLabelI18nCode}))
<BasicHelp #if(${config.tipLabelI18nCode}) :text="t('${config.tipLabelI18nCode}','${config.tipLabel}')" #else text="${config.tipLabel}" #end />#end</template>
#CreateFieldTag($mastKey,$html,$config,$mastModel,$beforeVmodel,-1,false)
</a-form-item>
</a-col>
#end
#end
#end
<template>
##
##<!-- 普通弹窗 -->
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" width="${context.generalWidth}"
#if(${context.cancelButtonText} || ${context.cancelButtonTextI18nCode})
#if(${context.cancelButtonTextI18nCode}):cancelText="t('${context.cancelButtonTextI18nCode}','${context.cancelButtonText}')"
#else cancelText="${context.CancelButton}"#end
#end
#if(${context.confirmButtonText} || ${context.confirmButtonTextI18nCode})
#if(${context.confirmButtonTextI18nCode}):okText="t('${context.confirmButtonTextI18nCode}','${context.confirmButtonText}')"
#else okText="${context.confirmButtonText}"#end
#end
:minHeight="100" @ok="handleSubmit(0)" @continue="handleSubmit(1)" :closeFunc="onClose">
<a-row class="dynamic-form ${context.formStyle}">
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" :rules="dataRule" ref="formRef" class="${context.formStyle}">
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#FormRenderingExtra()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicModal>
##<!-- 普通弹窗 -->
</template>
<script lang="ts" setup>
import { create, update, getInfo } from './helper/api';
import { reactive, toRefs, nextTick, ref, unref, computed } from 'vue';
import { BasicModal, useModal } from '@/components/Modal';
import { useMessage } from '@/hooks/web/useMessage';
import { useUserStore } from '@/store/modules/user';
import type { FormInstance } from 'ant-design-vue';
import { yunzhupaasRelationForm } from '@/components/yunzhupaas';
import { getDictionaryDataSelector } from '@/api/systemData/dictionary';
import { getDataInterfaceRes } from '@/api/systemData/dataInterface';
import { thousandsFormat , getDateTimeUnit, getTimeUnit} from '@/utils/yunzhupaas';
import dayjs from 'dayjs';
import { useI18n } from '@/hooks/web/useI18n';
interface State {
#createStateParam("any")
title: string;
}
const emit = defineEmits(['reload']);
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const { createMessage } = useMessage();
const { t } = useI18n();
const [registerModal, { openModal, setModalProps }] = useModal();
const formRef = ref<FormInstance>();
const state = reactive<State>({
#createStateParam()
title: '',
});
const { title, dataRule, dataForm, optionsObj, ableAll, maskConfig } = toRefs(state);
defineExpose({ init });
function init(data) {
state.title = !data.id || data.id === 'yunzhupaasAdd' ? t('common.add2Text','新增') : t('common.editText','编辑');
setFormProps({ continueLoading: false });
openModal();
##主表options
#foreach($fieLdsModel in ${context.fields})
#set($html = $fieLdsModel.formColumnModel.fieLdsModel)
#set($vModel = "${html.vModel}")
#set($config = $html.config)
#set($dataType = "$!{config.dataType}")
#if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
get${vModel}Options();
#end
#end
##副表options
#foreach($ColumnFieldModel in ${context.mastTable})
#set($html =${ColumnFieldModel.formMastTableModel})
#set($vModel = "${html.vModel}")
#set($config = $html.mastTable.fieLdsModel.config)
#if($!{config.dataType}=='dictionary'||$!{config.dataType}=='dynamic')
get${vModel}Options();
#end
#end
nextTick(() => {
getForm().resetFields();
state.dataForm = JSON.parse(JSON.stringify(data.formData));
state.dataForm.id = !data.id || data.id === 'yunzhupaasAdd' ? '' :data.id;
});
}
function getForm() {
const form = unref(formRef);
if (!form) {
throw new Error('form is null!');
}
return form;
}
async function handleSubmit() {
try {
const values = await getForm()?.validate();
if (!values) return;
setFormProps({ continueLoading: true });
const formMethod = state.dataForm.id ? update : create;
formMethod(state.dataForm)
.then((res) => {
createMessage.success(res.msg);
setFormProps({ continueLoading: false });
setFormProps({ open: false });
emit('reload');
})
.catch(() => {
setFormProps({ continueLoading: false });
});
} catch (_) {}
}
function setFormProps(data) {
setModalProps(data);
}
function changeLoading(loading) {
setModalProps({ loading });
}
async function onClose() {
if (state.isContinue) emit('reload');
return true;
}
//option方法
#GetDataOptionsMethod()
##动态时间处理
#GetRelationDate()
</script>

View File

@@ -0,0 +1,416 @@
#parse("PublicMacro/FormMarco.vm")
<template>
## 全屏弹窗
#if(${context.popupType}=="fullScreen")
##<!-- 全屏弹窗 -->
<BasicPopup v-bind="$attrs" @register="registerPopup" showOkBtn destroyOnClose
#if(${context.cancelButtonText} || ${context.cancelButtonTextI18nCode})
#if(${context.cancelButtonTextI18nCode}):cancelText="t('${context.cancelButtonTextI18nCode}','${context.cancelButtonText}')"
#else cancelText="${context.CancelButton}"#end
#end
#if(${context.confirmButtonText} || ${context.confirmButtonTextI18nCode})
#if(${context.confirmButtonTextI18nCode}):okText="t('${context.confirmButtonTextI18nCode}','${context.confirmButtonText}')"
#else okText="${context.confirmButtonText}"#end
#end
@ok="handleSubmit" :closeFunc="onClose">
<template #title>
<a-space :size="10">
<div class="text-16px font-medium">{{ title }}</div>
## <!-- 分组和树形不展示 -->
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
<a-space-compact size="small" block v-if="dataForm.id">
<a-tooltip :title="t('common.prevRecord')">
<a-button size="small" :disabled="getPrevDisabled" @click="handlePrev">
<i class="icon-ym icon-ym-caret-left text-10px"></i>
</a-button>
</a-tooltip>
<a-tooltip :title="t('common.nextRecord')">
<a-button size="small" :disabled="getNextDisabled" @click="handleNext">
<i class="icon-ym icon-ym-caret-right text-10px"></i>
</a-button>
</a-tooltip>
</a-space-compact>
#end
</a-space>
</template>
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
## <!-- 分组和树形不展示 -->
<template #insertToolbar>
<yunzhupaasCheckboxSingle v-model:value="submitType" :label="continueText" v-if="showContinueBtn" />
</template>
## <!-- 分组和树形不展示 -->
#end
<a-row class="p-10px dynamic-form ${context.formStyle}" :style="{ margin: '0 auto', width: '${context.fullScreenWidth}' }">
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" :rules="dataRule" ref="formRef" >
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#FormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicPopup>
##<!-- 全屏弹窗 -->
#end
## 普通弹窗
#if(${context.popupType}=="general")
##<!-- 普通弹窗 -->
<BasicModal v-bind="$attrs" @register="registerModal" width="${context.generalWidth}"
:minHeight="100"
#if(${context.cancelButtonText} || ${context.cancelButtonTextI18nCode})
#if(${context.cancelButtonTextI18nCode}):cancelText="t('${context.cancelButtonTextI18nCode}','${context.cancelButtonText}')"
#else cancelText="${context.CancelButton}"#end
#end
#if(${context.confirmButtonText} || ${context.confirmButtonTextI18nCode})
#if(${context.confirmButtonTextI18nCode}):okText="t('${context.confirmButtonTextI18nCode}','${context.confirmButtonText}')"
#else okText="${context.confirmButtonText}"#end
#end
@ok="handleSubmit" :closeFunc="onClose">
<template #title>
<a-space :size="10">
<div class="text-16px font-medium">{{ title }}</div>
## <!-- 分组和树形不展示 -->
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
<a-space-compact size="small" block v-if="dataForm.id">
<a-tooltip :title="t('common.prevRecord')">
<a-button size="small" :disabled="getPrevDisabled" @click="handlePrev">
<i class="icon-ym icon-ym-caret-left text-10px"></i>
</a-button>
</a-tooltip>
<a-tooltip :title="t('common.nextRecord')">
<a-button size="small" :disabled="getNextDisabled" @click="handleNext">
<i class="icon-ym icon-ym-caret-right text-10px"></i>
</a-button>
</a-tooltip>
</a-space-compact>
#end
</a-space>
</template>
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
## <!-- 分组和树形不展示 -->
<template #insertFooter>
<div class="float-left mt-5px">
<yunzhupaasCheckboxSingle v-model:value="submitType" :label="continueText" />
</div>
</template>
## <!-- 分组和树形不展示 -->
#end
<a-row class="dynamic-form ${context.formStyle}">
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" :rules="dataRule" ref="formRef">
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#FormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicModal>
##<!-- 普通弹窗 -->
#end
## 右侧弹窗
#if(${context.popupType}=="drawer")
##<!-- 右侧弹窗 -->
<BasicDrawer v-bind="$attrs" @register="registerDrawer" width="${context.drawerWidth}" showFooter
#if(${context.cancelButtonText} || ${context.cancelButtonTextI18nCode})
#if(${context.cancelButtonTextI18nCode}):cancelText="t('${context.cancelButtonTextI18nCode}','${context.cancelButtonText}')"
#else cancelText="${context.CancelButton}"#end
#end
#if(${context.confirmButtonText} || ${context.confirmButtonTextI18nCode})
#if(${context.confirmButtonTextI18nCode}):okText="t('${context.confirmButtonTextI18nCode}','${context.confirmButtonText}')"
#else okText="${context.confirmButtonText}"#end
#end
@ok="handleSubmit" :closeFunc="onClose">
<template #title>
<a-space :size="10">
<div class="text-16px font-medium">{{ title }}</div>
## <!-- 分组和树形不展示 -->
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
<a-space-compact size="small" block v-if="dataForm.id">
<a-tooltip :title="t('common.prevRecord')">
<a-button size="small" :disabled="getPrevDisabled" @click="handlePrev">
<i class="icon-ym icon-ym-caret-left text-10px"></i>
</a-button>
</a-tooltip>
<a-tooltip :title="t('common.nextRecord')">
<a-button size="small" :disabled="getNextDisabled" @click="handleNext">
<i class="icon-ym icon-ym-caret-right text-10px"></i>
</a-button>
</a-tooltip>
</a-space-compact>
#end
</a-space>
</template>
#if(${context.hasConfirmAndAddBtn} && (!${context.groupTable} && !${context.treeTable}))
## <!-- 分组和树形不展示 -->
<template #insertFooter>
<div class="float-left mt-5px">
<yunzhupaasCheckboxSingle v-model:value="submitType" :label="continueText" />
</div>
</template>
## <!-- 分组和树形不展示 -->
#end
<a-row class="p-10px dynamic-form ${context.formStyle}">
<!-- 表单 -->
<a-form :colon="false" size="${context.size}" layout=#if(${context.labelPosition}=="top") "vertical" #else "horizontal" #end
labelAlign=#if(${context.labelPosition}=="right") "right" #else "left" #end
#if(${context.labelPosition}!="top") :labelCol="{ style: { width: '${context.labelWidth}px' } }" #end
:model="dataForm" :rules="dataRule" ref="formRef" >
<a-row :gutter="#if(${context.formStyle}=='word-form')0#else${context.gutter}#end">
<!-- 具体表单 -->
#FormRendering()
<!-- 表单结束 -->
</a-row>
</a-form>
</a-row>
</BasicDrawer>
##<!-- 右侧弹窗 -->
#end
#if($isSelectDialog == true)
<SelectModal :config="state.currTableConf" :formData="state.dataForm" ref="selectModal" @select="addForSelect"/>
#end
</template>
<script lang="ts" setup>
import { create, update, getInfo } from './helper/api';
import { reactive, toRefs, nextTick, ref, unref, computed,toRaw, inject } from 'vue';
#if(${context.popupType}=="fullScreen")
import { BasicPopup, usePopup } from '@/components/Popup';
#end
#if(${context.popupType}=="general")
import { BasicModal, useModal } from '@/components/Modal';
#end
#if(${context.popupType}=="drawer")
import { BasicDrawer, useDrawer } from '@/components/Drawer';
#end
import { yunzhupaasRelationForm } from '@/components/yunzhupaas';
import { useMessage } from '@/hooks/web/useMessage';
import { useI18n } from '@/hooks/web/useI18n';
import { useUserStore } from '@/store/modules/user';
import type { FormInstance } from 'ant-design-vue';
#if($isSelectDialog == true)
import SelectModal from '@/components/CommonModal/src/SelectModal.vue';
#end
import { thousandsFormat , getDateTimeUnit, getTimeUnit} from '@/utils/yunzhupaas';
import { getDictionaryDataSelector } from '@/api/systemData/dictionary';
import { getDataInterfaceRes } from '@/api/systemData/dataInterface';
import dayjs from 'dayjs';
// 表单权限
import { usePermission } from '@/hooks/web/usePermission';
import { cloneDeep } from 'lodash-es';
import { buildUUID } from '@/utils/uuid';
import { CaretRightOutlined } from '@ant-design/icons-vue';
interface State {
#createStateParam("any")
title: string;
#if(${context.hasConfirmAndAddBtn})continueText: string; #end
allList: any[];
currIndex: number;
isContinue: boolean;
submitType: number;
showContinueBtn: boolean;
}
const emit = defineEmits(['reload']);
const getLeftTreeActiveInfo: (() => any) | null = inject('getLeftTreeActiveInfo', null);
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const { createMessage, createConfirm } = useMessage();
const { t } = useI18n();
#if(${context.popupType}=="fullScreen")
const [registerPopup, { openPopup, setPopupProps }] = usePopup();
#end
#if(${context.popupType}=="general")
const [registerModal, { openModal, setModalProps }] = useModal();
#end
#if(${context.popupType}=="drawer")
const [registerDrawer, { openDrawer, setDrawerProps }] = useDrawer();
#end
const formRef = ref<FormInstance>();
#if($isSelectDialog == true)
// 子表弹窗数据
const selectModal = ref(null);
#end
#GetChildTableColumns()
const state = reactive<State>({
#createStateParam()
title: "",
#if(${context.hasConfirmAndAddBtn}) continueText: "", #end
allList: [],
currIndex: 0,
isContinue: false,
submitType: 0,
showContinueBtn: #if(${context.hasConfirmAndAddBtn}) true #else false #end,
});
const { title, #if(${context.hasConfirmAndAddBtn}) continueText, #end showContinueBtn, dataRule, dataForm, optionsObj, ableAll, maskConfig,submitType } = toRefs(state);
const getPrevDisabled = computed(() => state.currIndex === 0);
const getNextDisabled = computed(() => state.currIndex === state.allList.length - 1);
// 表单权限
const { hasFormP } = usePermission();
defineExpose({ init });
function init(data) {
state.submitType = 0;
state.isContinue = false;
state.title = !data.id ? t('common.add2Text','新增') : t('common.editText','编辑');
#if(${context.hasConfirmAndAddBtn}) state.continueText = !data.id ? t('common.continueAndAddText','确定并新增') : t('common.continueText','确定并继续'); #end
setFormProps({ continueLoading: false });
state.dataForm.id = data.id;
#if(${context.popupType}=="fullScreen")
openPopup();
#end
#if(${context.popupType}=="general")
openModal();
#end
#if(${context.popupType}=="drawer")
openDrawer();
#end
state.allList = data.allList;
state.currIndex = state.allList.length && data.id ? state.allList.findIndex((item) => item.id === data.id) : 0;
nextTick(() => {
getForm().resetFields();
#foreach($child in ${context.children})
state.dataForm.${child.aliasLowName}List = [];
#end
setTimeout(initData, 0);
});
}
function initData() {
changeLoading(true);
#InitActiveValue()
if (state.dataForm.id) {
getData(state.dataForm.id);
} else {
//初始化options
#EditGetOption(false)
// 设置默认值
state.dataForm={
#CreateDataform()
};
if (getLeftTreeActiveInfo) state.dataForm = {...state.dataForm, ...(getLeftTreeActiveInfo() || {}) };
state.childIndex = -1;
changeLoading(false);
}
}
function getForm() {
const form = unref(formRef);
if (!form) {
throw new Error('form is null!');
}
return form;
}
function getData(id) {
getInfo(id).then((res) => {
state.dataForm = res.data || {};
## 初始化options
#EditGetOption(true)
state.childIndex = -1;
changeLoading(false);
});
}
async function handleSubmit(type) {
try {
const values = await getForm()?.validate();
if (!values) return;
### 非流程子表字段验证
#if(!$context.isFlow)
#foreach($itemModel in ${context.children})
if(!$!{itemModel.aliasLowName}Exist()) return;
#end
#end
setFormProps({ confirmLoading: true });
const formMethod = state.dataForm.id ? update : create;
formMethod(state.dataForm)
.then((res) => {
createMessage.success(res.msg);
setFormProps({ confirmLoading: false });
if (state.submitType == 1) {
initData();
state.isContinue = true;
} else {
setFormProps({ open: false });
emit('reload');
}
})
.catch(() => {
setFormProps({ confirmLoading: false });
});
} catch (_) {}
}
function handlePrev() {
state.currIndex--;
handleGetNewInfo();
}
function handleNext() {
state.currIndex++;
handleGetNewInfo();
}
function handleGetNewInfo() {
changeLoading(true);
getForm().resetFields();
const id = state.allList[state.currIndex].id;
getData(id);
}
function setFormProps(data) {
#if(${context.popupType}=="fullScreen")
setPopupProps(data);
#end
#if(${context.popupType}=="general")
setModalProps(data);
#end
#if(${context.popupType}=="drawer")
setDrawerProps(data);
#end
}
function changeLoading(loading) {
#if(${context.popupType}=="fullScreen")
setPopupProps({ loading });
#end
#if(${context.popupType}=="general")
setModalProps({ loading });
#end
#if(${context.popupType}=="drawer")
setDrawerProps({ loading });
#end
}
async function onClose() {
if (state.isContinue) emit('reload');
return true;
}
##合计方法
#if($childSummary==true)
//子表合计方法
function getCmpValOfRow(row, key, summaryField) {
if (!summaryField.length) return '';
const isSummary = key => summaryField.includes(key);
const target = row[key];
if (!target) return '';
let data = isNaN(target) ? 0 : Number(target);
if (isSummary(key)) return data || 0;
return '';
}
#end
##数据联动changeData方法
#ChangeData()
##子表其他方法
#CreateChildTableMethod()
##子表弹窗数据方法
#if($isSelectDialog == true)
#ChildDialogMethod()
#end
##数据选项--数据字典和远端数据初始化方法
#GetDataOptionsMethod()
##动态时间处理
#GetRelationDate()
</script>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff