<template>
|
<el-dialog v-dialogDrag
|
:append-to-body="true"
|
:close-on-click-modal="false"
|
:destroy-on-close="true"
|
:fullscreen="fullscreen"
|
:title="title"
|
:visible.sync="visible"
|
:width="width"
|
class="avue-dialog"
|
top="0"
|
@close="dialogClose">
|
<basic-form v-if="paramVOS.form" :key="'dialog-'+paramVOS.form"
|
ref="formRef"
|
v-loading="loading"
|
:formData="form"
|
:formItems="formItems"
|
:initValue="paramVOS.initvalue"
|
:isEdit="true"
|
:span="span"
|
:style="fullscreen?'':'height:'+height"
|
:uploadattachment="paramVOS.uploadattachment || false"
|
@getFormData="getFormData">
|
</basic-form>
|
<ui-view v-else-if="paramVOS.context" :key="'AddEditDialog-'+type"
|
ref="uiViewRef"
|
:actionType="type"
|
:btmType="paramVOS.type"
|
:canEdit="true"
|
:context="paramVOS.context"
|
:dataStore="dataStore"
|
:inDialog="true"
|
:paramVOS="paramVOS"
|
:sourceData="sourceData"
|
:style="fullscreen?'':'height:'+height"
|
@getFormData="getFormData"
|
></ui-view>
|
<div v-if="showSave" class="dialog-footer avue-dialog__footer">
|
<el-button v-if="paramVOS.form" plain size="small" type="primary" @click="formSave">保 存</el-button>
|
<el-button v-else plain size="small" type="primary" @click="contextSave">保 存</el-button>
|
<el-button size="small" @click="dialogClose">取 消</el-button>
|
<el-button v-if="paramVOS.form" size="small" @click="resetValue">重 置</el-button>
|
</div>
|
</el-dialog>
|
</template>
|
|
<script>
|
import uiView from "@/views/base/UIContentViewerInDialog"
|
import {parseEventByUrl} from "@/components/actions/BaseAction"
|
import {getFormDefineById, dataForm} from "@/api/base/ui";
|
import {addSave, editSave} from "@/api/base/actions"
|
import {validatenull} from "@/util/validate"
|
|
export default {
|
name: "AddEditDialog",
|
components: {uiView},
|
props: {
|
sourceData: {
|
//所属区域的上一区域选中数据
|
type: Object,
|
default: {}
|
},
|
dataStore: {
|
//弹窗时按钮所属区域选中数据
|
type: Array,
|
default: []
|
},
|
paramVOS: {
|
type: Object,
|
default: {}
|
}
|
},
|
data() {
|
return {
|
loading: false,
|
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 || (this.type == 'add' ? '添加' : '修改')
|
},
|
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;
|
}
|
if (this.type == "edit") {
|
//加载表单数据
|
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.data;
|
this.loading = false;
|
}).catch(error => {
|
this.loading = false;
|
})
|
}
|
this.loading = false;
|
}).catch(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');
|
if (urlobj.params) {
|
Object.assign(this.paramVOS, urlobj.params);
|
}
|
if (validatenull(urlobj.jsPath)) {
|
this.saveBforeHandle(this.paramVOS);
|
} else {
|
try {
|
import(`./${urlobj.jsPath}.js`).then(module => {
|
module[urlobj.methodName]({
|
paramVOS: this.paramVOS,
|
dataStore: this.dataStore,
|
sourceData: this.sourceData
|
}, this.formSaveHandle);
|
})
|
} catch (error) {
|
this.$message.error('未找到保存前置事件执行js');
|
}
|
}
|
} 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');
|
if (urlobj.params) {
|
Object.assign(this.paramVOS, urlobj.params);
|
}
|
if (validatenull(urlobj.jsPath)) {
|
this.saveBforeHandle(this.paramVOS);
|
} else {
|
try {
|
import(`./${urlobj.jsPath}.js`).then(module => {
|
module[urlobj.methodName]({
|
paramVOS: this.paramVOS,
|
dataStore: this.dataStore,
|
sourceData: this.sourceData
|
}, that.formSaveHandle);
|
})
|
} catch (error) {
|
this.$message.error('未找到保存前置事件执行js');
|
}
|
}
|
} 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,
|
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);
|
if (that.type == "add") {
|
addSave(datas, that.paramVOS.url, that.paramVOS.method).then(() => {
|
that.$message({
|
type: "success",
|
message: that.paramVOS.successmsg || "保存成功!"
|
});
|
if (that.saveCallback) {
|
that.saveCallback(that.type, that.form);
|
}
|
if (this.paramVOS.saveafterevent) {
|
let urlobj = parseEventByUrl(this.paramVOS.saveafterevent, null, null, 'doAction');
|
if (urlobj.params) {
|
Object.assign(this.paramVOS, urlobj.params);
|
}
|
if (validatenull(urlobj.jsPath)) {
|
this.saveAfterHandle(this.paramVOS);
|
} else {
|
try {
|
import(`./${urlobj.jsPath}.js`).then(module => {
|
module[urlobj.methodName]({
|
paramVOS: this.paramVOS,
|
dataStore: this.dataStore,
|
sourceData: this.sourceData
|
});
|
})
|
} catch (error) {
|
this.$message.error('未找到保存后置事件执行js');
|
}
|
}
|
}
|
that.dialogClose();
|
});
|
} else {
|
editSave(datas, that.paramVOS.url, that.paramVOS.method).then(() => {
|
that.$message({
|
type: "success",
|
message: that.paramVOS.successmsg || "修改成功!"
|
});
|
if (that.saveCallback) {
|
that.saveCallback(that.type, that.form);
|
}
|
if (this.paramVOS.saveafterevent) {
|
let urlobj = parseEventByUrl(this.paramVOS.saveafterevent, null, null, 'doAction');
|
if (urlobj.params) {
|
Object.assign(this.paramVOS, urlobj.params);
|
}
|
if (validatenull(urlobj.jsPath)) {
|
this.saveAfterHandle(this.paramVOS);
|
} else {
|
try {
|
import(`./${urlobj.jsPath}.js`).then(module => {
|
module[urlobj.methodName]({
|
paramVOS: this.paramVOS,
|
dataStore: this.dataStore,
|
sourceData: this.sourceData
|
});
|
})
|
} catch (error) {
|
this.$message.error('未找到保存后置事件执行js');
|
}
|
}
|
}
|
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;
|
},
|
//保存前置事件
|
saveBforeHandle(params) {
|
this.$message.info('执行保存前置事件');
|
},
|
//保存后置事件
|
saveAfterHandle(params) {
|
this.$message.info('保存后置事件执行');
|
},
|
}
|
}
|
</script>
|
|
<style scoped>
|
|
</style>
|