wangting
2024-05-15 540acddabc14a8fef98cd91035ae6653afb9b765
Source/ProjectWeb/src/components/actions/AddEditDialog.vue
@@ -12,20 +12,30 @@
    <basic-form ref="formRef" v-if="paramVOS.form"
                :key="'dialog-'+paramVOS.form"
                :span="span"
                :style="fullscreen?'':'height:'+height"
                :isEdit="true"
                :formItems="formItems"
                :formData="form">
                :formData="form"
                :initValue="paramVOS.initvalue"
                :uploadattachment="paramVOS.uploadattachment || false"
                @getFormData="getFormData">
    </basic-form>
    <ui-view ref="uiViewRef" v-else-if="paramVOS.context"
             :key="'AddEditDialog-'+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 class="dialog-footer avue-dialog__footer">
      <el-button type="primary" plain size="small" @click="saveHandler">保 存</el-button>
    <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>
@@ -34,8 +44,10 @@
<script>
import uiView from "@/views/base/UIContentViewerInDialog"
import {parseEventByUrl} from "@/components/actions/base/BaseAction"
import {getFormDefineById,dataForm} from "@/api/base/ui";
import {addSave,editSave} from "@/api/base/actions"
import {validatenull} from "@/util/validate"
export default {
  name: "AddEditDialog",
@@ -60,20 +72,40 @@
    return {
      type:"add",
      visible:false,
      showSave:this.paramVOS.customBtn || true,
      span:12,
      formItems:[],
      form:{}
      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(){
      return this.paramVOS.width || "60%"
    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(){
      return this.paramVOS.height || "500px"
      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){
@@ -81,13 +113,13 @@
      }else if(this.paramVOS.form){
        return false;
      }
      return false;
      return true;
    }
  },
  created() {
  },
  watch: {
    sourceData: {
    paramVOS: {
      handler(val) {
        if (this.paramVOS.form) {
          this.onLoad();
@@ -107,19 +139,28 @@
        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"){
          if(this.type=="edit") {
            //加载表单数据
            dataForm(this.params,this.paramVOS.getdataurl,this.paramVOS.getdatamethod).then(res => {
              this.form = res.data.obj;
            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);
@@ -128,56 +169,134 @@
      }
    },
    saveHandler() {
      if(this.paramVOS.form){
        this.$refs.formRef.validate((valid, done) => {
          if (valid) {
            this.saveValue(this.form)
    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();
          }
        });
      }else{
        //this.$refs.uiViewRef.
        if(this.saveCallback){
          this.saveCallback({});
          return;
        }
      }
    },
    saveValue(savedata){
      if(this.type=="add"){
        addSave(savedata,this.paramVOS.url,this.paramVOS.method).then(() => {
          this.$message({
            type: "success",
            message: "保存成功!"
          });
          if(this.saveCallback){
            this.saveCallback(savedata);
    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();
          }
          this.dialogClose();
        }).error((e) => {
          this.$message.error(e||"保存失败")
        } 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');
            import(`./${urlobj.jsPath}.js`).then(module => {
              module[urlobj.methodName]({
                paramVOS: this.paramVOS,
                dataStore: this.dataStore,
                sourceData:this.sourceData
              });
            })
          }
          that.dialogClose();
        });
      }else{
        editSave(savedata,this.paramVOS.url,this.paramVOS.method).then(() => {
          this.$message({
        editSave(datas,that.paramVOS.url,that.paramVOS.method).then(() => {
          that.$message({
            type: "success",
            message: "修改成功!"
            message: that.paramVOS.successmsg||"修改成功!"
          });
          if(this.saveCallback){
            this.saveCallback(savedata);
          if(that.saveCallback){
            that.saveCallback(that.type,that.form);
          }
          this.dialogClose();
        }).error((e) => {
          this.$message.error(e||"修改失败")
          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;
    }
  }
}