zss
2024-07-18 00c9c554fcfbb1755af6c41f19dc5ae6f8294075
src/components/tool/value-table.vue
@@ -49,6 +49,9 @@
  .handleBtn.is-disabled {
    color: #C0C4CC;
  }
  .red{
    color: red !important;
  }
</style>
<style>
  /* .value-table .highlight-warning-row-border td {
@@ -112,12 +115,12 @@
        :summary-method="getSummaries" :row-class-name="tableRowClassName" :row-key="record=>record.id"
        :current-row-key="data.currentId" :highlight-current-row="data.highlight===undefined||data.highlight"
        :span-method="spanMethod" :key="specialKey">
        <el-table-column type="selection" width="65" v-if="data.showSelect" :key="Math.random()">
        <el-table-column type="selection" :width="selectionWidth" v-if="data.showSelect" :key="Math.random()">
        </el-table-column>
        <el-table-column type="index" align="center" label="序号" width="65" v-if="data.isIndex" :key="Math.random()">
        <el-table-column type="index" align="center" label="序号" :width="selectionWidth" v-if="data.isIndex" :key="Math.random()">
        </el-table-column>
        <el-table-column :prop="a.label" :label="a.value" :sortable="data.sort==false?false:'custom'"
          v-for="(a, ai) in tableHead" :key="ai" show-overflow-tooltip min-width="155">
        <el-table-column :prop="a.label" :label="a.value" :sortable="data.sort==false?false:'custom'" :isColumnWidth="isColumnWidth" :width="a.width"
          v-for="(a, ai) in tableHead" :key="ai" show-overflow-tooltip :min-width="columnMinWidth" v-if="!data.headNoShow||(data.headNoShow&&data.headNoShow.length==0)||(data.headNoShow&&data.headNoShow.length>0&&!data.headNoShow.find(d=>d==a.label))">
          <template slot-scope="scope">
            <div v-if="showType(a.label, data.tagField) != null">
              <template v-if="typeof(scope.row[a.label]) == 'object'">
@@ -136,7 +139,7 @@
              @click="handleLinkEvent(scope.row,data.linkEvent[a.label])">{{scope.row[a.label]}}</span>
            <img style="width: 40px;height: 40px;margin-top: 10px;" :src="javaApi+'/img/'+scope.row[a.label]"
              v-else-if="showUpload(a.label)&&scope.row[a.label]" alt="">
            <span v-else>{{scope.row[a.label]}}</span>
            <span v-else :class="{red:getRedColor(a.label,scope.row)}" >{{scope.row[a.label]}}</span>
          </template>
        </el-table-column>
        <el-table-column fixed="right" align="center" label="操作" :width="getWidth()" v-if="data.do.length > 0">
@@ -309,7 +312,7 @@
    <el-dialog title="数据导入" :visible.sync="uploadDia" width="500px">
      <div style="margin: 0 auto;">
        <el-upload ref="upload" drag :action="javaApi + inputUrl" :headers="token" :file-list="fileList" name="file"
          :auto-upload="false" accept=".csv" :limit="1" :on-change="beforeUpload" :on-success="onSuccess"
          :auto-upload="false" :accept="data.accept===undefined?'.csv':data.accept" :limit="1" :on-change="beforeUpload" :on-success="onSuccess"
          :on-error="onError" :data="{param: data.uploadStr}">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
@@ -332,6 +335,18 @@
  } from 'jquery';
  export default {
    props: {
      selectionWidth: {
        type: String,
        default: () => '65'
      },
      columnMinWidth: {
        type: String,
        default: () => '155'
      },
      isColumnWidth: {
        type: Boolean,
        default: () => false
      },
      tableRowClassName: {
        type: Function
      },
@@ -571,9 +586,14 @@
        this.selectList('page')
      },
      selectList(val) {
        console.log('val---', val)
        console.log('this.page---', this.page)
        this.loading = true
        if(val===undefined){
          this.page.current = 1;
        }
        if (val === 'lastPage') {
          this.page.current = this.page.current - 1 // 例如删除本页最后一条数据,将当前页面定为上一页,除第一页外
        }
        if (this.data.isPage != undefined && this.data.isPage != true) {
          this.page = {
@@ -596,6 +616,26 @@
          this.total = res.data.body.total
          this.tableHead = res.data.head
          this.tableData = res.data.body.records
          if (this.tableData.length === 0 && this.page.current > 1) {
            this.selectList('lastPage')
          }
          if (this.isColumnWidth) {
            this.tableHead.forEach(item => {
              if (item.value.length === 4) {
                item.width = 120
              } else if (item.value.length === 3){
                item.width = 100
              } else if (item.value.length === 5){
                item.width = 130
              } else if (item.value.length === 7){
                item.width = 160
              } else if (item.value.length === 6){
                item.width = 150
              } else {
                item.width = 86
              }
            })
          }
          // console.log(JSON.stringify(this.tableHead)+"---------"+JSON.stringify(this.tableData))
          for (var a in this.data.selectField) {
            if (this.data.selectField[a].choose == true) {
@@ -763,7 +803,8 @@
                  return
                }
                this.$message.success('删除成功')
                this.selectList()
                this.selectList('page')
                this.$emit('delete')
              }).catch(e => {
                this.$message.error('删除失败')
              })
@@ -789,21 +830,30 @@
            return
          }
        }
        this.upLoad = true
        for (var a in this.data.selectField) {
          if (this.data.selectField[a].choose == true) {
            this.upData[a] = JSON.stringify(this.upData[a])
          }
        }
        this.upHead.forEach((item, index) => {
          if (this.data.cascaderField && this.data.cascaderField[item.label]) {
            if (this.upData[item.label]) {
              this.upData[item.label] = JSON.stringify(this.upData[item.label])
            } else {
              this.upData[item.label] = ''
        for (var i = 0; i < this.upHead.length; i++) {
          if(this.upHead[i].label == 'password'){
            if(this.upData[this.upHead[i].label]){
              const reg2 =/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[~!#@$%^*&()_+{}\[\]|\\;:'",<.>\/?])[a-zA-Z\d~!#@$%^*&()_+{}\[\]|\\;:'",<.>\/?]*$/;
              if (!reg2.test(this.upData[this.upHead[i].label])) {
                this.$message.error('密码必须包括数字、大小写字母以及特殊字符')
                return
              }
            }
          }
        })
          if (this.data.cascaderField && this.data.cascaderField[this.upHead[i].label]) {
            if (this.upData[this.upHead[i].label]) {
              this.upData[this.upHead[i].label] = JSON.stringify(this.upData[this.upHead[i].label])
            } else {
              this.upData[this.upHead[i].label] = ''
            }
          }
        }
        this.upLoad = true
        this.$axios.post(this.upUrl, this.upData, {
          headers: {
            'Content-Type': 'application/json'
@@ -815,7 +865,7 @@
          }
          this.$message.success('修改成功')
          this.upDia = false
          this.selectList()
          this.selectList('page')
          this.$refs.eltable.doLayout();
          this.upLoad = false
        }).catch(e => {
@@ -907,7 +957,7 @@
          }
          this.$message.success('添加成功')
          this.addDia = false
          this.selectList()
          this.selectList('page')
          this.addLoad = false
        }).catch(e => {
          this.addDia = false
@@ -964,7 +1014,8 @@
        this.uploadDia = true
      },
      beforeUpload(file, fileList) {
        if (file.raw.type != 'text/csv') {
        console.log(file.raw.type);
        if (file.raw.type != (this.data.inputType===undefined?'text/csv':this.data.inputType)) {
          this.$message.error('上传文件格式不正确');
          this.$refs.upload.clearFiles()
          return false;
@@ -1092,6 +1143,38 @@
          this.$message.error('请选择要删除的数据')
        }
      },
      // 日工时管理辅助工时--批量审核和批准
      batchCheck(e) {
        if (this.multipleSelection && this.multipleSelection.length > 0) {
          const list = JSON.parse(JSON.stringify(this.multipleSelection))
          const url = e === 0 ? this.$api.auxiliaryWorkingHoursDay.check : this.$api.auxiliaryWorkingHoursDay.approve
          const state = e === 0 ? '已审核' : '已批准'
          list.forEach(item => {
            this.$axios.post(url, {id: item.id, state: state
              },{
                headers: {
                  'Content-Type': 'application/json'
                }
              }
            ).then(res => {
              if (res.code === 201) {
                return
              }
              this.$parent.submitBatchCheckDialog()
              this.$message.success('操作成功')
            })
          })
        } else {
          this.$message.error('请选择至少一条数据')
        }
      },
      getRedColor(label,row){
        if(this.data.cellSpecialStyle&&this.data.cellSpecialStyle.redColorByKey&&label.includes(this.data.cellSpecialStyle.redColorByKey)&&row[(label.replace(this.data.cellSpecialStyle.redColorByKey, ""))]){
          return true
        }else{
          return false
        }
      }
    }
  }
</script>