Source/ProjectWeb/src/api/base/actions.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/components/actions/AddEditDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/components/actions/RevisionDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/components/actions/base/RevisionAction.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/components/actions/handlers.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/configDoc/Action.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/configDoc/Action/img_del.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/configDoc/Action/img_rev.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/configDoc/Action/img_view.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Source/ProjectWeb/src/configDoc/UI.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Source/ProjectWeb/src/api/base/actions.js
@@ -24,3 +24,11 @@ data }) } // åç export const upRevision = (data,url,method) => { return request({ url: url || '/api/uiDataController/upRevision', method: method || 'put', data }) } Source/ProjectWeb/src/components/actions/AddEditDialog.vue
@@ -241,6 +241,16 @@ if(that.saveCallback){ that.saveCallback(that.type,that.form); } if (this.paramVOS.saveafterevent) { let urlobj = parseEventByUrl(this.paramVOS.saveafterevent,null,null,'doAction'); import(`./${urlobj.jsPath}.js`).then(module => { module[urlobj.methodName]({ paramVOS: this.paramVOS, dataStore: this.dataStore, sourceData:this.sourceData }); }) } that.dialogClose(); }); }else{ @@ -252,6 +262,16 @@ if(that.saveCallback){ that.saveCallback(that.type,that.form); } if (this.paramVOS.saveafterevent) { let urlobj = parseEventByUrl(this.paramVOS.saveafterevent,null,null,'doAction'); import(`./${urlobj.jsPath}.js`).then(module => { module[urlobj.methodName]({ paramVOS: this.paramVOS, dataStore: this.dataStore, sourceData:this.sourceData }); }) } that.dialogClose(); }); } Source/ProjectWeb/src/components/actions/RevisionDialog.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,285 @@ <template> <el-dialog v-dialogDrag :title="title" :visible.sync="visible" :width="width" :fullscreen="fullscreen" :append-to-body="true" top="0" class="avue-dialog" :destroy-on-close="true" @close="dialogClose"> <basic-form ref="formRef" v-if="paramVOS.form" :key="'dialog-'+paramVOS.form" :span="span" :style="fullscreen?'':'height:'+height" :isEdit="true" :formItems="formItems" :formData="form" :initValue="paramVOS.initvalue" :uploadattachment="paramVOS.uploadattachment || false" @getFormData="getFormData"> </basic-form> <ui-view ref="uiViewRef" v-else-if="paramVOS.context" :key="'RevisionDialog-'+type" :style="fullscreen?'':'height:'+height" :btmType="paramVOS.type" :context="paramVOS.context" :inDialog="true" :canEdit="true" :actionType="type" :sourceData="sourceData" :dataStore="dataStore" :paramVOS="paramVOS" @getFormData="getFormData" ></ui-view> <div v-if="showSave" class="dialog-footer avue-dialog__footer"> <el-button type="primary" plain size="small" @click="formSave" v-if="paramVOS.form">ä¿ å</el-button> <el-button type="primary" plain size="small" @click="contextSave" v-else>ä¿ å</el-button> <el-button size="small" @click="dialogClose">å æ¶</el-button> <el-button size="small" @click="resetValue" v-if="paramVOS.form">é ç½®</el-button> </div> </el-dialog> </template> <script> import uiView from "@/views/base/UIContentViewerInDialog" import {parseEventByUrl} from "@/components/actions/base/BaseAction" import {getFormDefineById,dataForm} from "@/api/base/ui"; import {upRevision} from "@/api/base/actions" import {validatenull} from "@/util/validate" export default { name: "RevisionDialog", components:{uiView}, props: { sourceData: { //æå±åºåçä¸ä¸åºåé䏿°æ® type: Object, default: {} }, dataStore: { //å¼¹çªæ¶æé®æå±åºåé䏿°æ® type: Array, default: [] }, paramVOS: { type: Object, default: {} } }, data(){ return { type:"add", visible:false, showSave:this.paramVOS.customBtn || true, span:12, formItems:[], form:{}, btmDefaultKeys : ['oid', 'id', 'name', 'description', 'revisionoid', 'nameoid', 'btmname', 'lastr', 'firstr', 'lastv', 'firstv', 'creator', 'createtime', 'lastModifier', 'lastmodifytime', 'revisionrule', 'revisionseq', 'revisionvalue', 'versionrule', 'versionseq', 'versionvalue', 'lcstatus', 'ts', 'owner', 'checkinby', 'checkintime', 'checkoutby', 'checkouttime', 'copyfromversion', 'secretgrade'], linkDefaultKeys :['oid','creator','createtime','lastmodifier','lastmodifytime','f_oid','foid','f_revisionoid','frevisionoid','f_nameoid','fnameoid','f_btmname','fbtmname','t_oid','toid','t_revisionoid','trevisionoid','t_nameoid','tnameoid','t_btmname','tbtmname','ts'] } }, computed:{ title(){ return this.paramVOS.title || "åç" }, width() { if (!validatenull(this.paramVOS.width)) { if (this.paramVOS.width.includes("px") || this.paramVOS.width.includes("%")) { return this.paramVOS.width; } else { return this.paramVOS.width + "px"; } } else { return "60%"; } }, height(){ if (!validatenull(this.paramVOS.height)) { if (this.paramVOS.height.includes("px") || this.paramVOS.height.includes("%")) { return this.paramVOS.height; } else { return this.paramVOS.height + "px"; } } else { return "auto" } }, fullscreen(){ if(this.paramVOS.width || this.paramVOS.height){ return false; }else if(this.paramVOS.form){ return false; } return true; } }, created() { }, watch: { paramVOS: { handler(val) { if (this.paramVOS.form) { this.onLoad(); } }, deep: true, immediate: true }, }, methods: { dialogClose() { this.visible = false; }, onLoad: function () { if (Object.keys(this.sourceData).length > 0) { this.loading = true; getFormDefineById(this.paramVOS.type,this.paramVOS.form).then(result => { this.formItems=result.data.obj.items; this.span=result.data.obj.columnOneRow?(24/result.data.obj.columnOneRow) : 12; if (this.paramVOS.initvalue) { this.form=this.paramVOS.initvalue; } //å è½½è¡¨åæ°æ® let sourceDataMap = {}; for (let i in this.sourceData) { const item = this.sourceData[i] if (item.constructor === Object) return; sourceDataMap['sourceData["' + i + '"]'] = item; } dataForm(Object.assign({ btmname: this.paramVOS.type, formDefineId: this.paramVOS.form, oid: this.dataStore[0].oid }, sourceDataMap), this.paramVOS.getdataurl, this.paramVOS.getdatamethod).then(res => { this.form=res.data.obj; this.loading = false; }).catch(error => { this.$message.error(error); this.loading = false; }) }).catch(error => { this.$message.error(error); this.loading = false; }); } }, contextSave(){ const useDataType=this.paramVOS["useDataType"] || "form";//使ç¨uiä¸ä¸æä¸çåªä¸ªç±»åæ°æ®ï¼é»è®¤formãå¼ï¼formãtreeãtableãTreeTable for(let key in this.$refs.uiViewRef.data){ if(this.$refs.uiViewRef.data[key].type== useDataType){ this.form=this.$refs.uiViewRef.data[key].data; this.formDefineId=this.$refs.uiViewRef.data[key].DefineVO.id; if (this.paramVOS.savebeforeevent) { var urlobj = parseEventByUrl(this.paramVOS.savebeforeevent,null,null,'doAction'); import(`./${urlobj.jsPath}.js`).then(module => { module[urlobj.methodName]({ paramVOS: this.paramVOS, dataStore: this.dataStore, sourceData:this.sourceData },this.formSaveHandle); }) } else { this.formSaveHandle(); } return; } } }, formSave() { let that=this; this.$refs.formRef.validate((valid, done) => { if (valid) { this.formDefineId=this.paramVOS.form; if (this.paramVOS.savebeforeevent) { var urlobj = parseEventByUrl(this.paramVOS.savebeforeevent,null,null,'doAction'); import(`./${urlobj.jsPath}.js`).then(module => { module[urlobj.methodName]({ paramVOS: this.paramVOS, dataStore: this.dataStore, sourceData:this.sourceData },that.formSaveHandle); }) } else { that.formSaveHandle(); } } else { return false; } }); }, formSaveHandle(){ let that=this; let formValues = this.getValues(); if(formValues.otherValue.releaseFileOids){ formValues.otherValue.releaseFileOids=formValues.otherValue.releaseFileOids.split(','); } if (!formValues.defaultValues.btmname) { formValues.defaultValues.btmname = this.paramVOS.type; } let datas = { formDefineId: this.formDefineId, upVersion:paramVOS.upversion, preEvent: this.paramVOS.preevent, afterEvent: this.paramVOS.afterevent, beforeServerEvent: this.paramVOS.beforeserverevent, afterServerEvent: this.paramVOS.afterserverevent, releaseFileOids: formValues.otherValue.releaseFileOids||[], data: formValues.otherValue } Object.assign(datas, formValues.defaultValues); datas['copyfromversion']=formValues.defaultValues.oid; datas.oid=undefined; upRevision(datas,that.paramVOS.url,that.paramVOS.method).then(() => { that.$message({ type: "success", message: that.paramVOS.successmsg||"åçæå!" }); if(that.saveCallback){ that.saveCallback(that.form); } if (this.paramVOS.saveafterevent) { let urlobj = parseEventByUrl(this.paramVOS.saveafterevent,null,null,'doAction'); import(`./${urlobj.jsPath}.js`).then(module => { module[urlobj.methodName]({ paramVOS: this.paramVOS, dataStore: this.dataStore, sourceData:this.sourceData }); }) } that.dialogClose(); }); }, getValues(){ let defaultValues = {}, otherValue = {}; for (var key in this.form) { if (this.btmDefaultKeys.indexOf(key.toLowerCase()) > -1) { defaultValues[key] = this.form[key]; } else { otherValue[key] = this.form[key]; } } return { defaultValues:defaultValues, otherValue:otherValue } }, resetValue() { if (this.paramVOS.form) { this.$refs.formRef.resetFields(); } }, getFormData(form) { this.form = form; } } } </script> <style scoped> </style> Source/ProjectWeb/src/components/actions/base/RevisionAction.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,102 @@ /** * æé®å¤ç ä¸å¡ç±»ååçº§çæ¬ */ import {paramLow,callPreEvent,callPostEvent} from './BaseAction'; import {validatenull} from "@/util/validate"; import Vue from "vue"; import RevisionDialog from "@/components/actions/RevisionDialog"; export const doAction = (options,callback) => { const paramVOS = Object.assign({ getdataurl: '/api/uiDataController/dataFormQuery', getdatamethod: 'post', url: '/api/uiDataController/upRevision', method: 'put', uploadfileurl: 'vciFileUploadController/uploadFile' }, options.paramVOS) options.paramVOS = paramVOS; options.sourceData = options.sourceData || {}; options.dataStore = options.dataStore || []; if (!options.dataStore || options.dataStore.length < 1) { Vue.prototype.$message.error("è¯·éæ©éè¦åççæ°æ®"); return false; } if (!paramVOS.multi && options.dataStore.length > 1) { Vue.prototype.$message.error("ä» è½éæ©ä¸æ¡æ°æ®æ¥æä½"); return false; } if(!validatenull(paramVOS.checknotedit)) { let notedit = paramVOS.checknotedit.split('&'); let checknotedit=false; notedit.forEach((item,i)=>{ if (options.dataStore[0][item.split('=')[0]] == item.split('=')[1]) { checknotedit=true; return false; } }) if (checknotedit) { Vue.prototype.$message.error(replaceFreeMarker(paramVOS.checknoteditmsg,options.dataStore,{}) || "å½åæ°æ®ä¸å 许åç"); return false; } } callPreEvent(options, doBefore, function (options) { doRev(options, function (formData) { callPostEvent(options, doAfter,'rev', callback); }); }); }; /** * æ§è¡ * @param options æé®çé ç½®ä¿¡æ¯ * @param callback åè° */ export const doRev = (options,callback)=> { const paramVOS = options.paramVOS; if (!paramVOS['form'] && !paramVOS['context']) { Vue.prototype.$message.error("æé®é ç½®ä¸æ£ç¡®"); return false; } const dialogConstructor = Vue.extend(RevisionDialog); let instance = new dialogConstructor(); instance.sourceData = options.sourceData; instance.dataStore = options.dataStore; instance.paramVOS = paramVOS; instance.dialogClose = function () { vm.visible = false; document.body.removeChild(vm.$el); instance.$destroy(); instance = null; }; if (callback) { instance.saveCallback = callback; } let vm = instance.$mount(); document.body.appendChild(vm.$el); instance.visible = true; } /** * åç½®äºä»¶ * @param options æé®çé ç½®ä¿¡æ¯ * @param callback åè° */ export const doBefore = (options,callback)=> { console.log('æ§è¡åçåç½®äºä»¶'); if(callback){ callback(options); } } /** * åç½®äºä»¶ * @param options æé®çé ç½®ä¿¡æ¯ * @param callback åè° */ export const doAfter = (options,callback,actionType)=> { console.log('æ§è¡åçåç½®äºä»¶'); if(callback){ callback(actionType); } } Source/ProjectWeb/src/components/actions/handlers.js
@@ -18,10 +18,15 @@ //å é¤ delete: () => {import("@/components/actions/base/DeleteAction").then(module => { module.doAction(options,callback); })}, //å é¤ })}, //å é¤ del: () => {import("@/components/actions/base/DeleteAction").then(module => { module.doAction(options,callback); })}, //åç rev: () => {import("@/components/actions/base/RevisionAction").then(module => { module.doAction(options,callback); })}, }; if (handlers[type]) { handlers[type]() Source/ProjectWeb/src/configDoc/Action.md
@@ -5,34 +5,123 @@ å建ä¸å¡å¯¹è±¡ãç¼å·ï¼addï¼ç±»åï¼ä¸å¡ç±»å åæ°å¯å¨åæ°å表é ç½®ï¼ä¹å¯å¨æé®ä½¿ç¨æ¶é ç½®ãåæ°ä¿¡æ¯ï¼ >* typeï¼å建çé¢çä¸å¡ç±»åï¼å¿ å¡« >* typeï¼å¿ å¡«ï¼å建çé¢çä¸å¡ç±»å >* formï¼æ·»å ç表å对象ï¼å¿ é¡»è¦é ç½®formæè contextï¼ä¼å 使ç¨form >* contextï¼å建çé¢çUIä¸ä¸æï¼æformåæ°æ¶è¯¥å¼æ æãè¥UIä¸ä¸æä» é æè¡¨åå±ç¤ºï¼åæ·»å å¼¹çªä¼é»è®¤æä¿åæé® >* useDataTypeï¼ä½¿ç¨UIä¸ä¸æä¸çåªä¸ªç±»åæ°æ®,弿formãtreeãtableãTreeTableï¼ä¸å¡«æ¶é»è®¤ä¸ºform >* initvalueï¼è¡¨åé¢è®¾valueï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼rootoid=root.${oid}&rootname=root.${name}&name=${name}ãsourceoid=sourceData.${oid}&sourcename=sourceData.${name}&oid=${oid}&name=${name} >* needselectï¼æ¯å¦å¿ é¡»éæ©æ°æ®ï¼ä¸initvalueé å使ç¨ã >* initValueï¼è¡¨åé¢è®¾valueï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼rootoid=root.${oid}&rootname=root.${name}&name=${name}ãsourceoid=sourceData.${oid}&sourcename=sourceData.${name}&oid=${oid}&name=${name} >* needSelectï¼æ¯å¦å¿ é¡»éæ©æ°æ®ï¼ä¸initvalueé å使ç¨ã å¼ä¸ºfalseæ¶å 许initvalue对åºç屿§å¼ä¸ºç©ºã å¼ä¸ºtrueæè æªé ç½®åæ°åå¿ é¡»æä¸ä¸æçsourceDataædataStoreï¼ç¨ä»¥ä¸initvalueå»ºç«æ å°å ³ç³» >* successMsgï¼æ·»å æååæç¤ºï¼é»è®¤âä¿åæåâ >* url: å建çé¢çä¿åæé®è¯·æ±è·¯å¾ï¼é»è®¤'uiDataController/addSave' >* method: å建çé¢çä¿åæé®è¯·æ±è·¯å¾ç±»åï¼é»è®¤'post' >* uploadfileurl: ææä»¶ä¸ä¼ æ¶å¯é ç½®ï¼é»è®¤'vciFileUploadController/uploadFile' >* method: å建çé¢çä¿åæé®è¯·æ±methodï¼é»è®¤'post' >* uploadFileUrl: ææä»¶ä¸ä¼ æ¶å¯é ç½®ï¼é»è®¤'vciFileUploadController/uploadFile' >* acceptï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* extsï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* uploadattachmentï¼æéä»¶ä¸ä¼ æ¶é¡»é ç½®ï¼æ¯å¦æ¾ç¤ºä¸ä¼ éä»¶ï¼é»è®¤false >* preeventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"preevent.js"ãâxxx/preevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸>* preeventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"preevent.js"ãâxxx/preevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* aftereventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"afterevent.js"ãâxxx/afterevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* >* preEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"preevent.js"ãâxxx/preevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* afterEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"afterevent.js"ãâxxx/afterevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* beforeServerEventï¼æå¡ç«¯åç½®äºä»¶ >* afterServerEventï¼æå¡ç«¯åç½®äºä»¶ >* saveBeforeEventï¼æ§è¡ä¿ååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"savebeforeevent.js"ãâxxx/savebeforeevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* saveAfterEventï¼ä¿åæååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"saveAfterEvent.js"ãâxxx/saveAfterEvent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ ### editï¼ä¿®æ¹  >* typeï¼ä¿®æ¹çé¢çä¸å¡ç±»åï¼å¿ å¡« ä¿®æ¹ä¸å¡å¯¹è±¡ãç¼å·ï¼editï¼ç±»åï¼ä¸å¡ç±»å >* typeï¼å¿ å¡«ï¼ä¿®æ¹çé¢çä¸å¡ç±»å >* formï¼ä¿®æ¹ç表å对象ï¼å¿ é¡»è¦é ç½®formæè contextï¼ä¼å 使ç¨form >* contextï¼ä¿®æ¹çé¢çUIä¸ä¸æï¼æformåæ°æ¶è¯¥å¼æ æãè¥UIä¸ä¸æä» é æè¡¨åå±ç¤ºï¼åä¿®æ¹å¼¹çªä¼é»è®¤æä¿åæé® >* useDataTypeï¼ä½¿ç¨UIä¸ä¸æä¸çåªä¸ªç±»åæ°æ®,弿formãtreeãtableãTreeTableï¼ä¸å¡«æ¶é»è®¤ä¸ºform >* initvalueï¼è¡¨åé¢è®¾valueï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼rootoid=root.${oid}&rootname=root.${name}&name=${name}ãsourceoid=sourceData.${oid}&sourcename=sourceData.${name}&oid=${oid}&name=${name} >* needselectï¼æ¯å¦å¿ é¡»éæ©æ°æ®ï¼ä¸initvalueé å使ç¨ã >* multiï¼å¼ä¸ºtrueæ¶å¯éæ©å¤æ¡æ°æ®ä¿®æ¹ >* initValueï¼è¡¨åé¢è®¾valueï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼rootoid=root.${oid}&rootname=root.${name}&name=${name}ãsourceoid=sourceData.${oid}&sourcename=sourceData.${name}&oid=${oid}&name=${name} >* needSelectï¼æ¯å¦å¿ é¡»éæ©æ°æ®ï¼ä¸initvalueé å使ç¨ã å¼ä¸ºfalseæ¶å 许initvalue对åºç屿§å¼ä¸ºç©ºã å¼ä¸ºtrueæè æªé ç½®åæ°åå¿ é¡»æä¸ä¸æçsourceDataædataStoreï¼ç¨ä»¥ä¸initvalueå»ºç«æ å°å ³ç³» >* checkNotEditï¼æ£æ¥ä¸å 许修æ¹çæ°æ®ï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼oid=xxx&name=yyyï¼è§£æå½ä¿®æ¹æ°æ®oid为xxxæè name为yyyæ¶ï¼è¯¥æ¡æ°æ®ä¸å è®¸ä¿®æ¹ >* checkNotEditMsgï¼åºç°ä¸å è®¸ä¿®æ¹æ°æ®æ¶çæç¤ºï¼é»è®¤âå½åæ°æ®ä¸å 许修æ¹â >* successMsgï¼ä¿®æ¹æååæç¤ºï¼é»è®¤âä¿®æ¹æåâ >* getDataUrlï¼è·åè¡¨åæ°æ®ï¼é»è®¤âuiDataController/dataFormQueryâ >* getDataMethodï¼è·åè¡¨åæ°æ®è¯·æ±çmethodï¼é»è®¤âpostâ >* url: ä¿®æ¹çé¢çä¿åæé®è¯·æ±è·¯å¾ï¼é»è®¤'uiDataController/editSave' >* method: ä¿®æ¹çé¢çä¿åæé®è¯·æ±methodï¼é»è®¤'put' >* uploadFileUrl: æä»¶ä¸ä¼ å°åï¼é»è®¤'vciFileUploadController/uploadFile' >* acceptï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* extsï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* uploadattachmentï¼æéä»¶ä¸ä¼ æ¶é¡»é ç½®ï¼æ¯å¦æ¾ç¤ºä¸ä¼ éä»¶ï¼é»è®¤false >* preEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"preevent.js"ãâxxx/preevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* afterEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"afterevent.js"ãâxxx/afterevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* beforeServerEventï¼æå¡ç«¯åç½®äºä»¶ >* afterServerEventï¼æå¡ç«¯åç½®äºä»¶ >* saveBeforeEventï¼æ§è¡ä¿ååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"savebeforeevent.js"ãâxxx/savebeforeevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* saveAfterEventï¼ä¿åæååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"saveAfterEvent.js"ãâxxx/saveAfterEvent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ ### delï¼å é¤  å é¤ä¸å¡å¯¹è±¡ãç¼å·ï¼delæè deleteï¼ç±»åï¼ä¸å¡ç±»å >* multiï¼å¼ä¸ºtrueæ¶å¯éæ©å¤æ¡æ°æ®å é¤ >* checkNotDeleteï¼æ£æ¥ä¸å 许å é¤çæ°æ®ï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼oid=xxx&name=yyyï¼è§£æå½å 餿°æ®oid为xxxæè name为yyyæ¶ï¼è¯¥æ¡æ°æ®ä¸å 许å é¤ >* checkNotDeleteMsgï¼åºç°ä¸å 许å 餿°æ®æ¶çæç¤ºï¼é»è®¤âå½åæ°æ®ä¸å 许å é¤â >* cascadeï¼ å端éªè¯çº§èå é¤ä¸çº§æ°æ® >* adminCascadeï¼ æå¡ç«¯éªè¯çº§èå é¤ä¸çº§æ°æ® >* checkLinkedFlag >* successMsgï¼å 餿ååæç¤ºï¼é»è®¤âå 餿åâ >* url: å é¤è¯·æ±è·¯å¾ï¼é»è®¤'uiDataController/deleteData' >* method: å é¤è¯·æ±methodï¼é»è®¤'delete' > ### viewï¼æ¥ç  æ¥çä¸å¡å¯¹è±¡ãç¼å·ï¼viewï¼ç±»åï¼ä¸å¡ç±»å >* typeï¼å¿ å¡«ï¼æ¥ççé¢çä¸å¡ç±»å >* formï¼æ¥çç表å对象ï¼å¿ é¡»è¦é ç½®formæè contextï¼ä¼å 使ç¨form >* contextï¼æ¥ççé¢çUIä¸ä¸æï¼æformåæ°æ¶è¯¥å¼æ æã >* multiï¼å¼ä¸ºtrueæ¶å¯éæ©å¤æ¡æ°æ®æ¥ç >* getDataUrlï¼è·åè¡¨åæ°æ®ï¼é»è®¤âuiDataController/dataFormQueryâ >* getDataMethodï¼è·åè¡¨åæ°æ®è¯·æ±çmethodï¼é»è®¤âpostâ ### revï¼åç  åçº§çæ¬ãç¼å·ï¼revï¼ç±»åï¼ä¸å¡ç±»å >* typeï¼å¿ å¡«ï¼åççé¢çä¸å¡ç±»å >* formï¼åçç表å对象ï¼å¿ é¡»è¦é ç½®formæè contextï¼ä¼å 使ç¨form >* contextï¼åççé¢çUIä¸ä¸æï¼æformåæ°æ¶è¯¥å¼æ æãè¥UIä¸ä¸æä» é æè¡¨åå±ç¤ºï¼åä¿®æ¹å¼¹çªä¼é»è®¤æä¿åæé® >* multiï¼å¼ä¸ºtrueæ¶å¯éæ©å¤æ¡æ°æ®åç >* initValueï¼è¡¨åé¢è®¾valueï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼rootoid=root.${oid}&rootname=root.${name}&name=${name}ãsourceoid=sourceData.${oid}&sourcename=sourceData.${name}&oid=${oid}&name=${name} >* needSelectï¼æ¯å¦å¿ é¡»éæ©æ°æ®ï¼ä¸initvalueé å使ç¨ã å¼ä¸ºfalseæ¶å 许initvalue对åºç屿§å¼ä¸ºç©ºã å¼ä¸ºtrueæè æªé ç½®åæ°åå¿ é¡»æä¸ä¸æçsourceDataædataStoreï¼ç¨ä»¥ä¸initvalueå»ºç«æ å°å ³ç³» >* checkNotEditï¼æ£æ¥ä¸å 许åççæ°æ®ï¼éå¿ å¡«ãæ ¼å¼ç¤ºä¾ï¼oid=xxx&name=yyyï¼è§£æå½åçæ°æ®oid为xxxæè name为yyyæ¶ï¼è¯¥æ¡æ°æ®ä¸å 许åç >* checkNotEditMsgï¼åºç°ä¸å 许åçæ°æ®æ¶çæç¤ºï¼é»è®¤âå½åæ°æ®ä¸å 许åçâ >* upVersionï¼è¦å级å°ççæ¬ãé»è®¤æç §åçè§ååç >* successMsgï¼åçæååæç¤ºï¼é»è®¤âåçæåâ >* getDataUrlï¼è·åè¡¨åæ°æ®ï¼é»è®¤âuiDataController/dataFormQueryâ >* getDataMethodï¼è·åè¡¨åæ°æ®è¯·æ±çmethodï¼é»è®¤âpostâ >* url: åççé¢çä¿åæé®è¯·æ±è·¯å¾ï¼é»è®¤'uiDataController/upRevision' >* method: åççé¢çä¿åæé®è¯·æ±methodï¼é»è®¤'put' >* uploadFileUrl: æä»¶ä¸ä¼ å°åï¼é»è®¤'vciFileUploadController/uploadFile' >* acceptï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* extsï¼ææä»¶ä¸ä¼ æ¶å¯é ç½® >* uploadattachmentï¼æéä»¶ä¸ä¼ æ¶é¡»é ç½®ï¼æ¯å¦æ¾ç¤ºä¸ä¼ éä»¶ï¼é»è®¤false >* preEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"preevent.js"ãâxxx/preevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* afterEventï¼å¼¹çªåç½®äºä»¶ï¼é ç½®åç½®äºä»¶çjså°åï¼å¦"afterevent.js"ãâxxx/afterevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* beforeServerEventï¼æå¡ç«¯åç½®äºä»¶ >* afterServerEventï¼æå¡ç«¯åç½®äºä»¶ >* saveBeforeEventï¼æ§è¡ä¿ååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"savebeforeevent.js"ãâxxx/savebeforeevent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ >* saveAfterEventï¼ä¿åæååçåç½®äºä»¶ï¼é ç½®jså°åï¼å¦"saveAfterEvent.js"ãâxxx/saveAfterEvent.jsâï¼æä»¶æ¾å¨src/components/actionsä¸ ## 龿¥ç±»åAction ### linkadd ### linkedit ### linkdel ## èªå®ä¹Action Source/ProjectWeb/src/configDoc/Action/img_del.png
Source/ProjectWeb/src/configDoc/Action/img_rev.png
Source/ProjectWeb/src/configDoc/Action/img_view.png
Source/ProjectWeb/src/configDoc/UI.md
@@ -4,14 +4,18 @@  >1. æ¾ç¤ºè¡¨è¾¾å¼é ç½®æ¹å¼å¦ä¸å¾ >2. 页ç¾é ç½®å¤ä¸ªæ¶ï¼é¡µé¢ä»¥tabå±ç¤º > ### 页ç¾çé¢é ç½® éä¸é¡µç¾ï¼ç¹å»ä¸é¢çâæ·»å âæé®åå»ºé¡µé¢  >1. è¡¨æ ¼ãæ è¡¨ã表åãæ é ç½®æ¹å¼ä¸C/S端ä¸è´ >2. èªå®ä¹æ¨¡æ¿å¿ é¡»é ç½®æ§å¶è·¯å¾ï¼å¯é 置为UIä¸ä¸ææèªå®ä¹ç»ä»¶ä¸¤ç§ãé ç½®æ ¼å¼âç»ä»¶name?param=xxxâï¼èªå®ä¹ç»ä»¶ï¼æè â?type=xxx&context=yyy&pparam=zzzâï¼UI弿ï¼ï¼ä¸èåé ç½®æ¹å¼ä¸è´ã >3. 页é¢é ç½®å¤ä¸ªæ¶ï¼é¡µé¢ä»¥collapseæå 颿¿å±ç¤º > ### æé®é ç½® éä¸é¡µé¢ï¼ç¹å»ä¸é¢ç"æé®è®¾è®¡"æé®å建æé®  >1. éå å建Action,Actionå建æ¹å¼è§Actioné ç½®ææ¡£ >2. Actionæåæ°æ¶å¯ä¸é ç½®åæ°ä¿¡æ¯ãåæ°ä¿¡æ¯é ç½®ä¸Actionåæ°é ç½®ä¸è´ï¼è¯¦è§Actioné ç½®ææ¡£ã >3. æ¯ä¸ªé¡µé¢é»è®¤æâå·æ°"æé®ï¼å¯ä¸é ç½® >4. å表页é¢é»è®¤æâæ¥çâãâ导åºâæé®ï¼å¯ä¸é ç½®