From c4d9e7a20dac267c5496ad3586c5053be279a17a Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 26 四月 2024 20:09:59 +0800
Subject: [PATCH] 添加action,表单组件

---
 Source/ProjectWeb/src/actions/base/AddAction.js                        |    6 
 Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue |   11 +-
 Source/ProjectWeb/src/actions/base/BaseAction.js                       |   14 +-
 Source/ProjectWeb/src/views/base/UIContentArea.vue                     |   13 ++
 Source/ProjectWeb/src/App.vue                                          |   13 ++
 Source/ProjectWeb/src/components/PLT-basic-component/formUpload.vue    |   13 ++
 Source/ProjectWeb/src/components/actions/AddEditDialog.vue             |  115 +++++++++++++---------
 Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue   |    8 +
 Source/ProjectWeb/src/components/PLT-basic-component/richText.vue      |   12 ++
 Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue  |    4 
 Source/ProjectWeb/src/components/PLT-basic-component/basicForm.vue     |   35 +++++-
 Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue   |    1 
 12 files changed, 164 insertions(+), 81 deletions(-)

diff --git a/Source/ProjectWeb/src/App.vue b/Source/ProjectWeb/src/App.vue
index e909b77..7e3593f 100644
--- a/Source/ProjectWeb/src/App.vue
+++ b/Source/ProjectWeb/src/App.vue
@@ -28,7 +28,18 @@
 .el-card__body {
   padding: 15px;
 }
-
+.el-dialog{
+  margin: 50px auto;
+}
+.avue-dialog .el-dialog{
+  top:50%;
+  max-height: calc(100% - 100px);
+  -webkit-transform: translate(-50%, 0);
+  transform: translate(-50%, -50%);
+}
+.avue-dialog .el-dialog__body{
+  padding: 20px;
+}
 .avue--detail .el-col{
   margin-bottom: 0;
 }
diff --git a/Source/ProjectWeb/src/actions/base/AddAction.js b/Source/ProjectWeb/src/actions/base/AddAction.js
index e233a7e..5ac9b70 100644
--- a/Source/ProjectWeb/src/actions/base/AddAction.js
+++ b/Source/ProjectWeb/src/actions/base/AddAction.js
@@ -6,7 +6,7 @@
 import Vue from "vue";
 import AddEditDialog from "@/components/actions/AddEditDialog"
 
-export const doAction = (options) => {
+export const doAction = (options,callback) => {
   options.paramVOS = paramLow(options.paramVOS)
   const paramVOS = Object.assign({
     url: '/api/uiDataController/addSave',
@@ -19,7 +19,7 @@
 
   callPreEvent(options, doBefore, function (options) {
     doAdd(options, function () {
-      callPostEvent(options, doAfter, options.callback);
+      callPostEvent(options, doAfter, callback);
     });
   });
 };
@@ -50,7 +50,7 @@
     instance = null;
   };
   if (callback) {
-    instance.saveCallback = callback(options);
+    instance.saveCallback = callback;
   }
   let vm = instance.$mount();
   document.body.appendChild(vm.$el);
diff --git a/Source/ProjectWeb/src/actions/base/BaseAction.js b/Source/ProjectWeb/src/actions/base/BaseAction.js
index 93c5db0..c4cec61 100644
--- a/Source/ProjectWeb/src/actions/base/BaseAction.js
+++ b/Source/ProjectWeb/src/actions/base/BaseAction.js
@@ -8,13 +8,13 @@
 /**
  * action閫氱敤鍏ュ彛
  */
-export const doAction = (button,options) => {
+export const doAction = (button,options,callback) => {
   options.paramVOS['title']=replaceFreeMarker(options.paramVOS.title,options.dataStore,options.sourceData);
 
   if(button.url && button.url!='null'){
     //鏈夐厤缃產ction璺緞锛屼娇鐢ㄨ矾寰勫搴旂殑js
     import("../"+button.url+".js").then(module => {
-      module.doAction(options);
+      module.doAction(options,callback);
     })
   }else {
     //閫氱敤action
@@ -23,15 +23,15 @@
       view: () => {},
       //鍒涘缓
       add: () => {import("@/actions/base/AddAction").then(module => {
-        module.doAction(options);
+        module.doAction(options,callback);
       })},
       //淇敼
       edit: () =>  {import("@/actions/base/EditAction").then(module => {
-        module.doAction(options);
+        module.doAction(options,callback);
       })},
       //鍒犻櫎
       delete: () =>  {import("@/actions/base/DeleteAction").then(module => {
-        module.doAction(options);
+        module.doAction(options,callback);
       })},
     };
     if(validatenull(options.paramVOS.context)) {
@@ -124,7 +124,7 @@
       fnTarget(buttonParse,callback);
     }else{
       try {
-        import("../"+buttonParse.jsPath).then(module => {
+        import("../"+buttonParse.jsPath+".js").then(module => {
           module[buttonParse.methodName](options,callback);
         })
       } catch (error) {
@@ -152,7 +152,7 @@
       fnTarget(buttonParse,callback);
     }else{
       try {
-        import("../"+buttonParse.jsPath).then(module => {
+        import("../"+buttonParse.jsPath+".js").then(module => {
           module[buttonParse.methodName](options,callback);
         })
       } catch (error) {
diff --git a/Source/ProjectWeb/src/components/PLT-basic-component/basicForm.vue b/Source/ProjectWeb/src/components/PLT-basic-component/basicForm.vue
index cf56bf7..fd07194 100644
--- a/Source/ProjectWeb/src/components/PLT-basic-component/basicForm.vue
+++ b/Source/ProjectWeb/src/components/PLT-basic-component/basicForm.vue
@@ -3,7 +3,7 @@
   <avue-form ref="formRef" :option="option" v-model="form">
     <template v-for="item in allColumn" :slot="item.prop+ ''">
       <vciWebRefer
-        v-if="item.propType === 'refer' || item.type === 'refer'"
+        v-if="item.type === 'refer'"
         :key="item.prop"
         referType="master"
         :data-key="item.prop"
@@ -16,9 +16,18 @@
         @setReferValue="setReferValue"
       ></vciWebRefer>
       <!--   瀵屾枃鏈帶浠�       -->
-      <rich-text v-if="item.type === 'richText'" :value="form[subitemName]" @input="form[subitemName] = $event"></rich-text>
+      <rich-text v-else-if="item.type === 'richText'"
+                 :key="item.prop"
+                 :data-key="item.prop"
+                 :disabled="item.disabled || false"
+                 :display="item.display || true"
+                 :value="form[subitemName]" @input="form[subitemName] = $event"></rich-text>
       <!--   琛ㄥ崟涓婁紶鏂囦欢缁勪欢       -->
-      <form-upload v-if="item.type === 'upload'"></form-upload>
+      <form-upload v-else-if="item.type === 'upload'"
+                   :key="item.prop"
+                   :data-key="item.prop"
+                   :disabled="item.disabled || false"
+                   :display="item.display || true"></form-upload>
     </template>
   </avue-form>
 </template>
@@ -57,6 +66,11 @@
       type:Boolean,
       default:false
     },
+    isEdit:{
+      //琛ㄥ崟鏄惁鍙紪杈�
+      type:Boolean,
+      default:true
+    }
   },
   data() {
     return {
@@ -107,7 +121,7 @@
       handler(val) {
         for (let code of this.option.column) {
           if (
-              (code.propType == "refer"  || code.type == 'refer' )&&
+            code.type == 'refer' &&
             code.referConfig &&
             code.referConfig.useFormKey
           ) {
@@ -118,7 +132,7 @@
         for (let code of this.option.group) {
           for (let col of code.column) {
             if (
-                (col.propType == "refer"  || col.type == 'refer')&&
+              col.type == 'refer'&&
               col.referConfig &&
               col.referConfig.useFormKey
             ) {
@@ -158,7 +172,7 @@
       this.option.group = group;
     },
     initItem(item){
-      const type=this.columnType[item.type] || item.type
+      const type=this.columnType[item.type] || item.type;
       const col= {
         ...item,
         label: item.text,
@@ -179,11 +193,14 @@
         suffixIcon: item.prefix,
         tip: item.tooltips,
         dictCode: item.comboxKey,
-        rules: [{
+        rules: this.isEdit?[{
           required: item.required,
           message: `璇疯緭鍏�${item.text}!`,
           trigger: "blur"
-        }]
+        }]:[]
+      };
+      if(!this.isEdit){
+        col.placeholder=col.label;
       }
       if(col.type === 'richText'){
         this.subitemName = col.field;
@@ -211,7 +228,7 @@
           });
         }
       }
-      if (col.propType === "refer"|| col.type==='refer') {
+      if (col.type==='refer') {
         if (col.referConfig && col.referConfig.useFormKey) {
           if (validatenull(col.referConfig.formValuesKey)) {
             col.referConfig.formValuesKey = "form";
diff --git a/Source/ProjectWeb/src/components/PLT-basic-component/formUpload.vue b/Source/ProjectWeb/src/components/PLT-basic-component/formUpload.vue
index 8783f13..1728191 100644
--- a/Source/ProjectWeb/src/components/PLT-basic-component/formUpload.vue
+++ b/Source/ProjectWeb/src/components/PLT-basic-component/formUpload.vue
@@ -2,10 +2,11 @@
   <!--
   directory 寮�鍚洰褰�
   -->
-  <el-upload
+  <el-upload v-if="display"
     ref="uploadRef"
     :before-upload="handleBeforeUpload"
     :directory="true"
+    :disabled="disabled"
     :headers="uploadHeaders"
     :on-change="handleFileChange"
     :on-error="onError"
@@ -34,6 +35,16 @@
   //   fileAccpet:String,
   //   defalut:'.img,.xls,.png,.xlsx'
   // },
+  props: {
+    disabled:{
+      type:Boolean,
+      default:false
+    },
+    display:{
+      type:Boolean,
+      default:true
+    }
+  },
   data() {
     return {
       pageLoading: null,
diff --git a/Source/ProjectWeb/src/components/PLT-basic-component/richText.vue b/Source/ProjectWeb/src/components/PLT-basic-component/richText.vue
index 36cddd7..025248d 100644
--- a/Source/ProjectWeb/src/components/PLT-basic-component/richText.vue
+++ b/Source/ProjectWeb/src/components/PLT-basic-component/richText.vue
@@ -1,5 +1,5 @@
 <template>
-  <div id='quillEditorQiniu'>
+  <div id='quillEditorQiniu' v-if="display">
     <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload begin-->
     <el-upload
       :accept="'image'"
@@ -12,7 +12,7 @@
       class="avatar-uploader">
     </el-upload>
     <!-- 鍩轰簬elementUi鐨勪笂浼犵粍浠� el-upload end-->
-    <quill-editor ref="customQuillEditor" v-model="value" :options="editorOption" class="editor">
+    <quill-editor ref="customQuillEditor" v-model="value" :disabled="disabled" :options="editorOption" class="editor">
     </quill-editor>
   </div>
   <!--    <template #footer>-->
@@ -48,6 +48,14 @@
     },
     value: {
       type: String
+    },
+    disabled:{
+      type:Boolean,
+      default:false
+    },
+    display:{
+      type:Boolean,
+      default:true
     }
   },
   data() {
diff --git a/Source/ProjectWeb/src/components/actions/AddEditDialog.vue b/Source/ProjectWeb/src/components/actions/AddEditDialog.vue
index 54343ca..a051c80 100644
--- a/Source/ProjectWeb/src/components/actions/AddEditDialog.vue
+++ b/Source/ProjectWeb/src/components/actions/AddEditDialog.vue
@@ -1,31 +1,33 @@
 <template>
   <el-dialog v-dialogDrag
-             :title="paramVOS.title"
+             :title="title"
              :visible.sync="visible"
              :width="width"
-             :fullscreen="paramVOS.content || paramVOS.context"
+             :fullscreen="fullscreen"
              :append-to-body="true"
-             class="avue-dialog avue-dialog--top"
+             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"
                 :formItems="formItems"
                 :formData="form">
     </basic-form>
-    <ui-view ref="uiViewRef" v-else-if="paramVOS.content || paramVOS.context"
+    <ui-view ref="uiViewRef" v-else-if="paramVOS.context"
+             :key="'AddEditDialog-'+type"
              :btmType="paramVOS.type"
              :context="paramVOS.context"
              :inDialog="true"
-             :key="'AddEditDialog-'+type"
              :sourceData="sourceData"
              :dataStore="dataStore"
              :paramVOS="paramVOS"
     ></ui-view>
-    <div slot="footer" class="dialog-footer avue-dialog__footer">
+    <div class="dialog-footer avue-dialog__footer">
       <el-button type="primary" plain size="small" @click="saveHandler">淇� 瀛�</el-button>
       <el-button size="small" @click="dialogClose">鍙� 娑�</el-button>
-      <el-button size="small" @click="resetValue">閲� 缃�</el-button>
+      <el-button size="small" @click="resetValue" v-if="paramVOS.form">閲� 缃�</el-button>
     </div>
   </el-dialog>
 </template>
@@ -52,10 +54,6 @@
     paramVOS: {
       type: Object,
       default: {}
-    },
-    width: {
-      type: String,
-      default:'60%'
     }
   },
   data(){
@@ -70,6 +68,20 @@
   computed:{
     title(){
       return this.paramVOS.title || (this.type=='add'?'娣诲姞':'淇敼')
+    },
+    width(){
+      return this.paramVOS.width || "60%"
+    },
+    height(){
+      return this.paramVOS.height || "500px"
+    },
+    fullscreen(){
+      if(this.paramVOS.width || this.paramVOS.height){
+        return false;
+      }else if(this.paramVOS.form){
+        return false;
+      }
+      return false;
     }
   },
   created() {
@@ -117,49 +129,60 @@
       }
     },
     saveHandler() {
-      this.$refs.formRef.validate((valid, done) => {
-        if (valid) {
-          if(this.type=="add"){
-            addSave(this.form,this.paramVOS.url,this.paramVOS.method).then(() => {
-              this.$message({
-                type: "success",
-                message: "淇濆瓨鎴愬姛!"
-              });
-              if(this.saveCallback){
-                this.saveCallback();
-              }
-              this.dialogClose();
-            }).error((e) => {
-              this.$message.error(e||"淇濆瓨澶辫触")
-            });
-          }else{
-            editSave(this.form,this.paramVOS.url,this.paramVOS.method).then(() => {
-              this.$message({
-                type: "success",
-                message: "淇敼鎴愬姛!"
-              });
-              if(this.saveCallback){
-                this.saveCallback();
-              }
-              this.dialogClose();
-            }).error((e) => {
-              this.$message.error(e||"淇敼澶辫触")
-            });
-          }
-        } else {
+      if(this.paramVOS.form){
+        this.$refs.formRef.validate((valid, done) => {
+          if (valid) {
+            this.saveValue(this.form)
+          } else {
 
+          }
+        });
+      }else{
+        //this.$refs.uiViewRef.
+        if(this.saveCallback){
+          this.saveCallback({});
         }
-      });
+      }
+
+    },
+    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);
+          }
+          this.dialogClose();
+        }).error((e) => {
+          this.$message.error(e||"淇濆瓨澶辫触")
+        });
+      }else{
+        editSave(savedata,this.paramVOS.url,this.paramVOS.method).then(() => {
+          this.$message({
+            type: "success",
+            message: "淇敼鎴愬姛!"
+          });
+          if(this.saveCallback){
+            this.saveCallback(savedata);
+          }
+          this.dialogClose();
+        }).error((e) => {
+          this.$message.error(e||"淇敼澶辫触")
+        });
+      }
     },
     resetValue() {
-      this.$refs.formRef.resetFields();
+      if (this.paramVOS.form) {
+        this.$refs.formRef.resetFields();
+      }
     }
   }
 }
 </script>
 
 <style scoped>
-.avue-dialog__footer{
-  margin-bottom: 20px;
-}
+
 </style>
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
index c190cd4..00548e2 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-button.vue
@@ -176,15 +176,14 @@
       }
 
       const that=this;
-      if(isShow){
+      if(isShow) {
         doAction(buttonitem, {
           paramVOS: paramVOS,
           dataStore: this.dataStore || [],
-          sourceData: this.sourceData || {},
-          callback: function () {
-            if (that.$parent.handleRefresh) {
-              that.$parent.handleRefresh()
-            }
+          sourceData: this.sourceData || {}
+        },function (){
+          if (that.$parent.handleRefresh) {
+            that.$parent.handleRefresh()
           }
         });
       }
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
index 3e51d12..0ae6114 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue
@@ -1,8 +1,12 @@
 <template>
   <div :id="'UI-dynamic-'+areasName+componentVO.oid" class="UI-dynamic">
-    <dynamic-button v-if="componentVO && componentVO.buttons" :componentVO="componentVO" :butttonList="componentVO.buttons" :dataStore="[form]" :sourceData="sourceData" type="form"></dynamic-button>
-    <basic-form :span="this.componentVO.formDefineVO.columnOneRow?(24/this.componentVO.formDefineVO.columnOneRow) : 12"
+    <dynamic-button v-if="componentVO && componentVO.buttons" :key="areasName+'buttons-'+componentVO.oid"
+                    :componentVO="componentVO" :butttonList="componentVO.buttons" :dataStore="[form]" :sourceData="sourceData" type="form"></dynamic-button>
+    <basic-form :key="areasName+'basicForm-'+componentVO.oid"
+                :span="this.componentVO.formDefineVO.columnOneRow?(24/this.componentVO.formDefineVO.columnOneRow) : 12"
                 :formItems="this.componentVO.formDefineVO && this.componentVO.formDefineVO.items"
+                :disabled="!inDialog"
+                :isEdit="inDialog"
                 :formData="form">
     </basic-form>
   </div>
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
index 43bde97..92ee092 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-table.vue
@@ -16,7 +16,9 @@
                @selection-change="selectChange">
       <!--top鍖哄煙鎸夐挳-->
       <template slot="menuLeft" slot-scope="scope">
-        <dynamic-button :componentVO="componentVO" :butttonList="componentVO.buttons" :dataStore="selectList" LocationType="top" :sourceData="sourceData"
+        <dynamic-button :componentVO="componentVO"
+                        :key="areasName+'buttons-'+componentVO.oid"
+                        :butttonList="componentVO.buttons" :dataStore="selectList" LocationType="top" :sourceData="sourceData"
                         type="table"></dynamic-button>
       </template>
 
diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
index 5eb4afb..a51cb18 100644
--- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
+++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-tree.vue
@@ -1,6 +1,7 @@
 <template>
   <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid">
     <dynamic-button v-if="componentVO.buttons && componentVO.buttons.length>0" :componentVO="componentVO"
+                    :key="areasName+'buttons-'+componentVO.oid"
                     :butttonList="componentVO.buttons" :dataStore="checkDatas"
                     :sourceData="sourceData" type="tree" style="margin-bottom: 5px;"></dynamic-button>
     <el-input
diff --git a/Source/ProjectWeb/src/views/base/UIContentArea.vue b/Source/ProjectWeb/src/views/base/UIContentArea.vue
index d6c7056..3978afc 100644
--- a/Source/ProjectWeb/src/views/base/UIContentArea.vue
+++ b/Source/ProjectWeb/src/views/base/UIContentArea.vue
@@ -84,12 +84,19 @@
         description="璇ュ尯鍩熸病鏈夐厤缃樉绀虹殑鍐呭">
       </el-alert>
       <el-alert
-        v-else-if="Object.keys(newSourceData).length> 0"
+        v-else-if="Object.keys(newSourceData).length== 0"
         class="alert"
         :closable="false"
         title=""
-        type="error"
-        show-icon
+        type="info"
+        description="娌℃湁鍙樉绀虹殑鍐呭锛岃閫夋嫨鏉ユ簮鏁版嵁銆�">
+      </el-alert>
+      <el-alert
+        v-else-if="newAreasData.length== 0"
+        class="alert"
+        :closable="false"
+        title=""
+        type="info"
         description="涓嶆弧瓒虫樉绀鸿〃杈惧紡鏉′欢锛屾病鏈夊彲鏄剧ず鐨勫唴瀹广��">
       </el-alert>
     </div>

--
Gitblit v1.9.3