zenglf
2023-08-17 7442a435d058bd17d6fc679e1b7956bf3a5d32ae
src/components/jeecg/JEditableTable.vue
@@ -117,8 +117,9 @@
              <!-- tr 只加载可见的和预加载的总共十条数据 -->
              <div
                v-if="
                rowIndex >= parseInt(`${(scrollTop-rowHeight) / rowHeight}`) &&
                  (parseInt(`${scrollTop / rowHeight}`) + 9) > rowIndex
                maxHeight == null ||
                (rowIndex >= parseInt(`${(scrollTop-rowHeight) / rowHeight}`) &&
                  (parseInt(`${scrollTop / rowHeight}`) + 9) > rowIndex)
              "
                :id="`${caseId}tbody-tr-${rowIndex}`"
                :data-idx="rowIndex"
@@ -387,7 +388,7 @@
                                <a-menu-item v-if="col.allowDownload!==false" @click="handleClickDownloadFile(id)">
                                  <span><a-icon type="download"/>&nbsp;下载</span>
                                </a-menu-item>
                                <a-menu-item v-if="col.allowRemove!==false" @click="handleClickDelFile(id)">
                                <a-menu-item v-if="col.allowRemove!==false" @click="handleClickDelFile(id, row, col)">
                                  <span><a-icon type="delete"/>&nbsp;删除</span>
                                </a-menu-item>
                              </a-menu>
@@ -475,7 +476,7 @@
                                <a-menu-item v-if="col.allowDownload!==false" @click="handleClickDownFileByUrl(id)">
                                  <span><a-icon type="download"/>&nbsp;下载</span>
                                </a-menu-item>
                                <a-menu-item @click="handleClickDelFile(id)">
                                <a-menu-item @click="handleClickDelFile(id, row, col)">
                                  <span><a-icon type="delete"/>&nbsp;删除</span>
                                </a-menu-item>
                                <a-menu-item @click="handleMoreOperation(id,col,col)">
@@ -532,7 +533,7 @@
                                <a-menu-item v-if="col.allowDownload!==false" @click="handleClickDownFileByUrl(id)">
                                  <span><a-icon type="download"/>&nbsp;下载</span>
                                </a-menu-item>
                                <a-menu-item @click="handleClickDelFile(id)">
                                <a-menu-item @click="handleClickDelFile(id, row, col)">
                                  <span><a-icon type="delete"/>&nbsp;删除</span>
                                </a-menu-item>
                                <a-menu-item @click="handleMoreOperation(id,'img',col)">
@@ -666,6 +667,7 @@
                    <div v-else-if="col.type === formTypes.slot" :key="i">
                      <a-tooltip v-bind="buildTooltipProps(row, col, id)">
                        <!--  update:sunjianlei date:2022-1-17 for:buildProps新增参数 -->
                        <slot
                          :name="(col.slot || col.slotName) || col.key"
                          :index="rowIndex"
@@ -679,6 +681,7 @@
                          :target="getVM()"
                          :handleChange="(v)=>handleChangeSlotCommon(v,id,row,col)"
                          :isNotPass="notPassedIds.includes(col.key+row.id)"
                          :buildProps="()=>buildProps(row,col)"
                        />
                      </a-tooltip>
                    </div>
@@ -834,6 +837,14 @@
        required: false,
        default: ''
      },
      //删除前校验数据
      beforeDelete:{
        type: Function,
        required: false,
        default: ()=>{
          return Promise.resolve(true);
        }
      }
    },
    data() {
      return {
@@ -1519,8 +1530,14 @@
      },
      /** 删除被选中的行 */
      removeSelectedRows() {
        this.removeRows(this.selectedRowIds)
        this.selectedRowIds = []
        //update-begin-author:taoyan date:2022-8-5 for: VUEN-1767【bug】vue2 未控制住
        this.beforeDelete().then(()=>{
          this.removeRows(this.selectedRowIds)
          this.selectedRowIds = []
        }).catch(e=>{
          this.$message.error(e);
        });
        //update-end-author:taoyan date:2022-8-5 for: VUEN-1767【bug】vue2 未控制住
      },
      /** 删除一行或多行 */
      removeRows(id) {
@@ -1849,7 +1866,9 @@
                    }
                  }
                  if (edited) {
                    this.elemValueChange(column.type, {[newValueKey]: newValue}, column, newValue)
                    // update-begin-author:sunjianlei date:20211222 for: 修复 setValues 触发的 valueChange 事件没有id的问题
                    this.elemValueChange(column.type, {id: rowKey}, column, newValue)
                    // update-end-author:sunjianlei date:20211222 for: 修复 setValues 触发的 valueChange 事件没有id的问题
                  }
                }
              }
@@ -1861,6 +1880,8 @@
        })
        // 强制更新formValues
        this.forceUpdateFormValues()
        // 【issues/3828】重新计算统计列
        this.recalcAllStatisticsColumns()
      },
      /**
       * 设置单个组件的值
@@ -2012,7 +2033,7 @@
                { title: '网址', value: 'url', pattern: /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/ },
                { title: '电子邮件', value: 'e', pattern: /^([\w]+\.*)([\w]+)@[\w]+\.\w{3}(\.\w{2}|)$/ },
                { title: '手机号码', value: 'm', pattern: /^1[3456789]\d{9}$/ },
                { title: '邮政编码', value: 'p', pattern: /^[1-9]\d{5}$/ },
                { title: '邮政编码', value: 'p', pattern: /^[0-9]{6}$/ },
                { title: '字母', value: 's', pattern: /^[A-Z|a-z]+$/ },
                { title: '数字', value: 'n', pattern: /^-?\d+(\.?\d+|\d?)$/ },
                { title: '整数', value: 'z', pattern: /^-?\d+$/ },
@@ -2586,8 +2607,9 @@
        return id;
      },
      handleClickDelFile(id) {
      handleClickDelFile(id, row, col) {
        this.uploadValues[id] = null
        this.elemValueChange(col.type, row, col, null);
      },
      handleClickDownloadFile(id) {
        let { path } = this.uploadValues[id] || {}
@@ -3070,7 +3092,11 @@
          return false
        }
        return true;
      }
      },
      // 根据id获取dataSource中的一行数据
      getOriginData(id){
        return this.dataSource.filter(item=>item.id == id);
      },
    },
    beforeDestroy() {