cuiqian2004
10 天以前 90e4076a8adf5dac4384f10d9ce22398580eaf34
pages/modal/form/index.vue
@@ -1,10 +1,10 @@
<template>
   <view class="uni-page-modal-form">
   <view class="uni-page-modal-form" :class="largeMode?'large-mode':''">
      <view class="view-content">
         <!-- 表头样式 -->
         <OIForm ref="refBaseForm" class="v-head-style" :form="head_styledef.form" :focusId="focusFieldId"
            @click="onClick" @focus="ontap" @change="onEnterChange" @click-prefix="classAttr_extButton"
            @click-suffix="classAttr_extButton"></OIForm>
         <OIForm ref="refBaseForm" class="v-head-style" :form="head_styledef.form" :hiddenIds="head_styledef.hiddenIds ?head_styledef.hiddenIds :[] " :focusId="focusFieldId"
            @on-click="onClick" @on-focus="ontap" @on-change="onEnterChange" @on-click-prefix="classAttr_extButton"
            @on-click-suffix="classAttr_extButton"></OIForm>
      </view>
      <view class="view-bottom">
         <button type="primary" @tap="ok" class="btn_add" :class="okLoading?'btn_disabled':''"
@@ -41,7 +41,9 @@
</template>
<script>
   import Base64 from '../../../components/js-base64/base64.js'
   import {
      Base64
   } from '@/js/Base64.js';
   import {
      dictGetInfo
   } from "@/api/mobox.js"
@@ -57,14 +59,12 @@
   export default {
      name: "PageModalForm",
      modules: {
         Base64,
      },
      components: {
         OIForm
      },
      data() {
         return {
            largeMode: getApp().globalData.largeMode || false,
            okLoading: false,
            title: this.translateSys('add2'),
            type: '',
@@ -83,7 +83,6 @@
            global_attr: [],
            ext_info: {},
            data_json: [],
            refdatastore: [], //引用数据存储区// {attr:'G_PRJ_' + bindattr + '_ID', value:info.id}
            popupType: "center",
            check_list: {},
            popupParam: {},
@@ -295,6 +294,25 @@
                        }
                     }
                  }
                  const app = getApp()
                  if (app.globalData.bindClasses) {
                     styledefHead.form.items.push({
                        name: "Input",
                        label: this.translate("classes"),
                        labelWidth: 100,
                        disabled: true,
                        value: app.globalData.classes,
                        setting: {
                           width: 100,
                           height: 50,
                        },
                        bind: {
                           attr: "",
                        },
                        fieldId: "S_CLASSES",
                     })
                     styledefHead.form.model["S_CLASSES"] = app.globalData.classes
                  }
               }
               this.setData({
@@ -491,6 +509,10 @@
                              // value = {"attr":"xxx", "value":"xxx"}
                              var data = item.value;
                              $this.setFormValues(data)
                           } else if (action.action_type == 'set_dlg_attr_show') {
                              var data = action.value;
                              $this.setFormItemVisible(data)
                           }
                        });
                     } else {
@@ -531,8 +553,8 @@
            //console.log(e.target)
            this.focusOldFieldId = item.fieldId
            getApp().onScan((result) => {
               console.log(result.decodedata);
               item.value = result.decodedata;
               console.log(result);
               item.value = result;
               var $this = this;
               let newVal = item.value.trim()
               if (newVal) {
@@ -624,8 +646,12 @@
            let newVal = item.value
            if (typeof item.value == "string") {
               newVal = item.value.trim()
               if (!newVal)
               if (!newVal) {
                  item.oldvalue = newVal;
                  var attr = item.fieldId;
                  this.head_styledef.form.model[attr] = newVal;
                  return
               }
            }
            if (item.oldvalue != newVal) {
               item.oldvalue = newVal;
@@ -660,7 +686,7 @@
               });
               return;
            }
            this.$data.popupType = 'right'
            this.popupType = 'right'
            // open 方法传入参数 等同在 uni-popup 组件上绑定 type属性
            this.$refs.popup.open(this.popupType);
@@ -793,6 +819,11 @@
                                 var data = item.value;
                                 $this.setFormValues(data)
                              }
                              else if (action.action_type == 'set_dlg_attr_show') {
                                 var data = action.value;
                                 $this.setFormItemVisible(data)
                              }
                           });
                        } else {
@@ -898,11 +929,32 @@
               //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据
            })
            console.log(head_styledef)
            this.setData({
               head_styledef: head_styledef
            })
         },
         setFormItemVisible(attrs) {
            if (!Array.isArray(attrs)) {
               return
            }
            const head_styledef = this.head_styledef
            if (!head_styledef.hiddenIds) {
               head_styledef.hiddenIds = []
            }
            attrs.forEach((attr) => {
               let index = head_styledef.hiddenIds.findIndex((id) => id == attr.attr);
               if (attr.show) {
                  if (index > -1) head_styledef.hiddenIds.splice(index, 1);
               } else {
                  if (index == -1) head_styledef.hiddenIds.push(attr.attr);
               }
            });
            this.setData({
               head_styledef: head_styledef
            })
         },
         popupChange(e) {
            console.log('当前模式:' + e.type + ',状态:' + e.show);
         },
@@ -910,15 +962,15 @@
            // console.log(e.target.dataset);
            var index = e.target.dataset.index;
            var ischeck = e.target.dataset.ischeck;
            var data = this.$data.check_list.items;
            // this.$data.check_list.items=[];
            if (this.$data.check_list.multiple_choice == "0") { //判断时单选还是多选
            var data = this.check_list.items;
            // this.check_list.items=[];
            if (this.check_list.multiple_choice == "0") { //判断时单选还是多选
               for (var i in data) {
                  data[i].check = false;
               }
            }
            data[index].check = ischeck ? false : true;
            this.$data.check_list.items = data;
            this.check_list.items = data;
         },
         popup_cancel(e) { //弹框取消
@@ -926,7 +978,7 @@
         },
         popup_sava(e) { //弹框确定
            var $this = this;
            var items = $this.$data.check_list.items;
            var items = $this.check_list.items;
            var data = [];
            var name = "";
            for (var i = 0; i < items.length; i++) {
@@ -940,7 +992,7 @@
                  });
               }
            }
            if (!$this.$data.popupParam) {
            if (!$this.popupParam) {
               uni.showModal({
                  title: this.translateSys("tip"),
                  content: "popupParam为空!",
@@ -961,7 +1013,7 @@
            let global_attr = Base64.encode(JSON.stringify(this.global_attr))
            let data_json = Base64.encode(JSON.stringify(this.data_json))
            let ext_info = Base64.encode(JSON.stringify(this.ext_info))
            var callback_eventid = $this.$data.popupParam.button_callback.trim();
            var callback_eventid = $this.popupParam.button_callback.trim();
            var info = {
               eventid: callback_eventid,
               edtype: "0",
@@ -971,10 +1023,10 @@
               userlogin: '',
               clsid: $this.clsId,
               objid: "",
               attr: $this.$data.popupParam.req,
               attr: $this.popupParam.req,
               dataJson: data
            }
            $this.DataObjRunCustomEvent(info, $this.$data.popupParam.data_attr);
            $this.DataObjRunCustomEvent(info, $this.popupParam.data_attr);
            this.$refs.popup.close();
         },
@@ -1085,45 +1137,10 @@
                           $this.setFormValues(result)
                        } else if (action.action_type == 'set_dlg_attr_show') {
                           var result = action.value;
                           result.forEach(async (attr, key) => {
                              $this.$data.head_styledef.form.items
                                 .forEach(
                                    async (ele,
                                       index) => {
                                       //判断是否是栅格表单
                                       if (ele.name != 'Layout') {
                                          if (ele.fieldId == attr
                                             .attr) {
                                             ele.show = attr
                                                .show;
                                          }
                                       } else if (ele.name ==
                                          'Layout') {
                                          ele.setting.colList
                                             .forEach(
                                                col => {
                                                   if (col) {
                                                      if (col
                                                         .fieldId ==
                                                         attr
                                                         .attr
                                                      ) {
                                                         col.show =
                                                            attr
                                                            .show;
                                                      }
                                                   }
                                                });
                                       }
                                    });
                           });
                           var head_styledef = JSON.parse(JSON.stringify($this.$data
                              .head_styledef));
                           $this.$data.head_styledef = [];
                           $this.$data.head_styledef = head_styledef;
                           // console.log($this.$data.head_styledef);
                           $this.setFormItemVisible(result)
                        } else if (action.action_type == 'set_global_attr') {
                           $this.$data.global_attr = action.value || [];
                           $this.global_attr = action.value || [];
                        } else {
                           uni.showModal({
                              title: this.translateSys("tip"),
@@ -1142,63 +1159,7 @@
                  }
                  console.log($this.head_styledef);
                  if (data.result) {
                     var result = data.result;
                     for (var i = 0; i < result.length; i++) {
                        for (var c = 0; c < $this.$data.head_styledef.form.items
                           .length; c++) {
                           var attr = $this.$data.head_styledef.form.items[c];
                           //判断表单里是否有返回字段,没有就装载到model里,点击确定提交的时候带上这些数据
                           if ($this.head_styledef.form.model[result[i].attr] ==
                              undefined) {
                              $this.head_styledef.form.model[result[i].attr] =
                                 result[i]
                                 .value;
                           }
                           //判断是否是栅格表单
                           if (attr.name != 'Layout') {
                              if (attr.fieldId == result[i].attr) {
                                 attr.value = '';
                                 attr.oldvalue = '';
                                 attr.value = result[i].value;
                                 attr.oldvalue = result[i].value;
                                 $this.head_styledef.form.model[attr.fieldId] =
                                    result[i]
                                    .value;
                              }
                           } else if (attr.name == 'Layout') {
                              attr.setting.colList.forEach(col => {
                                 if (col) {
                                    if (col.fieldId == result[i].attr) {
                                       col.value = '';
                                       col.oldvalue = '';
                                       col.value = result[i].value;
                                       col.oldvalue = result[i].value;
                                       $this.head_styledef.form.model[col
                                             .fieldId] =
                                          result[i].value;
                                    }
                                 }
                              });
                           }
                        }
                        var length = 0;
                        if (!$this.$data.refdatastore.filter(function(s) {
                              return result[i].attr == s.attr
                           }).length) {
                           length = 1;
                           $this.$data.refdatastore.push(result[i]);
                        }
                        if (length == 0) {
                           for (var j = 0; j < $this.$data.refdatastore.length; j++) {
                              if ($this.$data.refdatastore[j].attr == result[i]
                                 .attr) {
                                 $this.$data.refdatastore[j].value = result[i]
                                    .value;
                              }
                           }
                        }
                     }
                     $this.setFormValues(data.result)
                  }
               }
@@ -1235,18 +1196,6 @@
               attr: a,
               value: obj_attr[a] || "",
            }));
            if ($this.refdatastore.length > 0) {
               for (var i = 0; i < $this.refdatastore.length; i++) {
                  if (!req.filter(function(s) {
                        return $this.refdatastore[i].attr == s.name
                     }).length) {
                     req.push({
                        'attr': $this.refdatastore[i].attr,
                        'value': $this.refdatastore[i].value
                     });
                  }
               }
            }
            let global_attr = Base64.encode(JSON.stringify(this.global_attr))
            let data_json = Base64.encode(JSON.stringify(this.data_json))
            let ext_info = Base64.encode(JSON.stringify(this.ext_info))
@@ -1458,8 +1407,8 @@
                                          data[0].ID +
                                          ';' + data[0].Name;
                                       // $this.$data.classAttrList[param.index].Attr[param.iindex].Value=data[0].Name;
                                       // $this.$data.classAttrList[param.index].Attr[param.iindex].ValID=data[0].ID+';'+data[0].Name;
                                       // $this.classAttrList[param.index].Attr[param.iindex].Value=data[0].Name;
                                       // $this.classAttrList[param.index].Attr[param.iindex].ValID=data[0].ID+';'+data[0].Name;
                                       var callback_eventid = param
                                          .button_callback
                                          .trim();
@@ -1533,19 +1482,23 @@
                  mask: true
               });
               this.okLoading = true
               console.log(obj_attr)
               var obj_attr = this.head_styledef.form.model || {};
               console.log(obj_attr)
               let ret = await this.sava();
               this.okLoading = false
               uni.hideLoading();
               if (!ret) return;
               obj_attr.id = this.objId || "";
               const eventChannel = this.$scope.eventChannel;
               console.log(this.$scope)
               const eventChannel = this.getOpenerEventChannel();
               // const eventChannel = this.getOpenerEventChannel();
               eventChannel.emit(this.type, obj_attr);
               uni.navigateBack()
            } catch (ex) {
               this.okLoading = true
               return false;
            }
         },
@@ -1581,6 +1534,8 @@
               }
               return true;
            } catch (ex) {
               console.log("sava", ex)
               this.showError(ex)
               return false;
            }
@@ -1861,6 +1816,14 @@
               return false
            }
         },
         showError(ex) {
            uni.showModal({
               title: this.translateSys('error'),
               content: typeof ex == "string" ? ex : typeof ex.errMsg == "string" ? ex.errMsg : "",
               showCancel: false,
               confirmText: this.translateSys('cancel')
            })
         },
         translate(t) {
            if (typeof this.$t == "function") return this.$t(
               `page.${t}`)
@@ -1890,39 +1853,6 @@
         flex-direction: column;
      }
      .v-head-style {
         width: 98%;
         .uni-forms-item {
            margin-bottom: 11rpx;
         }
         .input-wrapper {
            border: 1px solid #d5d5d5;
            width: 100%;
            display: flex;
            flex-direction: row;
            .uni-input {
               flex: 1;
               padding: 12rpx 8rpx;
               color: #2d8cf0;
               // height: 40rpx;
               // line-height: 40rpx;
            }
            .uni-icon {
               padding: 10rpx 5rpx;
               font-size: 32rpx;
               color: rgb(192, 196, 204);
            }
         }
         .input-wrapper:hover {
            border: 1px solid rgb(41, 121, 255);
         }
      }
      .view-content {
         display: flex;