jiangping
2024-06-07 8a266df75e912cc4ff49bc504db5b6b26f152892
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<template>
    <GlobalWindow
        :title="title"
        width="30%"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
        <el-form class="demo-form-inline">
            <el-form-item label="上传名单" required>
                <div style="width: 100%;display: flex;align-items: center;">
                    <el-button type="primary" @click="clickRef" :loading="importing">点击上传</el-button>
                    <el-button type="text" @click="exportTemplate">名单模板.EXCEL</el-button>
                </div>
                <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
            </el-form-item>
        </el-form>
        <input type="file"   @cancel="importing=false"  style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
      <template  v-slot:footer>
        <el-button type="primary"   :loading="confirming" @click="confirm">确定</el-button>
        <el-button @click="visible=false">返回</el-button>
      </template>
    </GlobalWindow>
</template>
 
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { importExcel } from '@/api/business/member'
export default {
  name: 'importEmployees',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      importing:false,
      confirming:false,
      list: [],
      price: 0,
      type: null,
      solutionId: null,
      addList: [],
      fileName: ''
    }
  },
  methods: {
    open (title, obj) {
      this.title = title
      this.addList = []
      this.fileName = ''
      this.type = obj.type
      this.visible = true
      this.solutionId = obj.solutionId
      this.list = obj.arr
      this.price = obj.price
      this.importing=false
      this.confirming=false
    },
    // 导出模板
    exportTemplate () {
      // 投保申请
      if (this.type === 1) {
        window.open(process.env.VUE_APP_MEMBER1_URL)
      } else {
        window.open(process.env.VUE_APP_MEMBER_URL)
      }
    },
    clickRef () {
      if(this.importing){
        return
      }
      this.importing=true
      this.$refs.fileExcel.click()
    },
    result (e) {
      const data = new FormData()
      data.append('file', e.target.files[0])
      data.append('solutionId', this.solutionId)
      importExcel(data)
        .then(res => {
          res.forEach(item => {
            item.memberName = item.name
            item.fee = ''
          })
          this.addList = res
          this.fileName = e.target.files[0].name
          this.importing =false
        })
        .catch(err => {
          this.importing =false
          this.$message.error(err)
          this.fileName = ''
        })
        .finally(() => {
          this.importing =false
          this.$refs.fileExcel.value = null
        })
    },
    confirm () {
      if(this.addList==null || this.addList.length ==0){
        this.$message.error('导入人员名单为空,请先上传人员名单')
        return;
      }
      if(this.confirming){
        return
      }
      this.confirming = true
      for (let i = 0; i < this.addList.length; i++) {
        for (let a = 0; a < this.list.length; a++) {
          if (this.addList[i].idCard === this.list[a].idcardNo) {
            this.$message.warning(`[${this.addList[i].name}]员工重复`)
            return
          }
        }
      }
      this.addList.forEach(item => {
        item.fee = this.price
      })
 
      // this.confirming = false
      this.visible = false
      this.$emit('result', this.addList)
    }
  }
}
</script>
 
<style lang="scss" scoped>
 
</style>