| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="" :style="{height:mainHeight+'px'}"> |
| | | |
| | | <div style="display: flex;margin: 20px 10px;"> |
| | | |
| | | <el-select |
| | | v-model="excelCode" |
| | | style="width:200px" |
| | | placeholder="è¯·éæ©æ¨¡æ¿æä»¶" |
| | | :popper-append-to-body="false" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in excelArr" |
| | | :key="item.fileCode" |
| | | :label="item.fileName" |
| | | :value="item.fileCode" |
| | | /> |
| | | </el-select> |
| | | |
| | | <el-button |
| | | type="primary" |
| | | style="margin-left: 20px" |
| | | :disabled="excelCode===''" |
| | | @click="getExcel" |
| | | >ä¸è½½æ¨¡æ¿ |
| | | </el-button> |
| | | |
| | | <upload-excel-component |
| | | :on-success="handleSuccess" |
| | | :before-upload="beforeUpload" |
| | | :disabled="excelCode===''" |
| | | /> |
| | | |
| | | <el-button |
| | | type="info" |
| | | style="margin-left: 20px" |
| | | :disabled="excelCode===''" |
| | | @click="reset" |
| | | >éç½® |
| | | </el-button> |
| | | |
| | | <el-button |
| | | type="primary" |
| | | style="margin-left: 20px" |
| | | :disabled="excelCode===''" |
| | | @click="submit" |
| | | >æäº¤ |
| | | </el-button> |
| | | |
| | | </div> |
| | | |
| | | <div |
| | | v-if="sheetName.length>0" |
| | | style="margin: 10px" |
| | | > |
| | | |
| | | <el-tabs type="border-card"> |
| | | <el-tab-pane |
| | | v-for="(i,j) in sheetName" |
| | | :key="i+j" |
| | | :label="i" |
| | | > |
| | | <!-- height:(mainHeight-180)+'px',--> |
| | | <el-table |
| | | ref="tableDataRef" |
| | | :data="tableData[j]" |
| | | border |
| | | :height="(mainHeight-180)+'px'" |
| | | :header-cell-style="headerCellStyle" |
| | | :cell-style="cellStyle" |
| | | :style="{width: 100+'%',height:(mainHeight-180)+'px',zIndex:10}" |
| | | style="overflow-y: scroll;" |
| | | highlight-current-row |
| | | > |
| | | <!-- <el-table-column--> |
| | | <!-- type="selection"--> |
| | | <!-- width="55"--> |
| | | <!-- />--> |
| | | <el-table-column |
| | | type="index" |
| | | label="åºå·" |
| | | width="55" |
| | | fixed |
| | | align="center" |
| | | /> |
| | | |
| | | <el-table-column |
| | | v-for="item of tableHeader[j]" |
| | | :key="item" |
| | | :prop="item" |
| | | :label="item" |
| | | align="center" |
| | | :render-header="addRedStar" |
| | | width="220" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | |
| | | <div |
| | | v-if="item.indexOf('ç¨æ·ç¼å·(å¯ä¸)')!==-1|| |
| | | item.indexOf('ç¨æ·å§å')!==-1|| |
| | | item.indexOf('å¯ç ')!==-1|| |
| | | item.indexOf('ææºå·')!==-1|| |
| | | item.indexOf('é®ç®±')!==-1 |
| | | " |
| | | > |
| | | <el-input v-model="row[item]" placeholder="请è¾å
¥" /> |
| | | </div> |
| | | <div v-else-if="item.indexOf('å¨èç¶æ')!==-1"> |
| | | <el-select |
| | | v-model="row[item]" |
| | | placeholder="è¯·éæ©" |
| | | filterable |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in statusArr" |
| | | :key="item.code" |
| | | :label="item.name" |
| | | :value="item.code" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | |
| | | <div v-else-if="item.indexOf('æå±å²ä½ç¼ç ')!==-1"> |
| | | <el-select |
| | | v-model="row[item]" |
| | | style="width: 100%;" |
| | | placeholder="è¯·éæ©" |
| | | multiple |
| | | filterable |
| | | collapse-tags |
| | | clearable |
| | | > |
| | | |
| | | <el-option |
| | | v-for="item in postArr" |
| | | :key="item.postcode" |
| | | :label="item.postname" |
| | | :value="item.postcode" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div v-else-if="item.indexOf('æå±è§è²ç¼ç ')!==-1"> |
| | | <el-select |
| | | v-model="row[item]" |
| | | style="width: 100%;" |
| | | placeholder="è¯·éæ©" |
| | | multiple |
| | | filterable |
| | | collapse-tags |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in roleArr" |
| | | :key="item.rolecode" |
| | | :label="item.rolename" |
| | | :value="item.rolecode" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div v-else-if="item.indexOf('æå±çç»ç¼ç ')!==-1"> |
| | | <el-select |
| | | v-model="row[item]" |
| | | style="width: 100%;" |
| | | placeholder="è¯·éæ©" |
| | | collapse-tags |
| | | multiple |
| | | filterable |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in groupArr" |
| | | :key="item.usergroupcode" |
| | | :label="item.usergroupname" |
| | | :value="item.usergroupcode" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div v-else-if="item.indexOf('æå±ç»ç»ç¼ç ')!==-1"> |
| | | <el-select |
| | | v-model="row[item]" |
| | | style="width: 100%;" |
| | | placeholder="è¯·éæ©" |
| | | filterable |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="item in orgArr" |
| | | :key="item.torg_code" |
| | | :label="item.torg_name" |
| | | :value="item.torg_code" |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | <div v-else> {{ row[item] }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | | width="120" |
| | | fixed="right" |
| | | /> |
| | | </el-table> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | |
| | | </div> |
| | | |
| | | <!-- <div v-for="(i,j) in tableHeader" :key="i">--> |
| | | <!-- <el-table :data="tableData[j]" border highlight-current-row style="width: 100%;margin-top:20px;">--> |
| | | <!-- <el-table-column v-for="item of tableHeader[j]" :key="item" :prop="item" :label="item" />--> |
| | | <!-- </el-table>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import UploadExcelComponent from '@/components/UploadExcel/index.vue' |
| | | import { DownLoadExcel, ExcelModelCheck, ExcelModelData } from '@/api/Excel' |
| | | import { GroupsPermissions, PostPermissions, PrentOrganization, RolePermissions } from '@/api/GeneralBasicData' |
| | | |
| | | export default { |
| | | name: 'UploadExcel', |
| | | components: { UploadExcelComponent }, |
| | | data() { |
| | | return { |
| | | mainHeight: window.innerHeight - 85, |
| | | |
| | | tableData: [], |
| | | tableHeader: [], |
| | | sheetName: [], |
| | | |
| | | excelCode: '', |
| | | excelArr: [], |
| | | |
| | | statusArr: [ |
| | | { code: 'Y', name: 'å¨è' }, |
| | | { code: 'N', name: '离è' } |
| | | ], |
| | | orgArr: [], // ç»ç» |
| | | postArr: [], // å²ä½ |
| | | roleArr: [], // è§è² |
| | | groupArr: []// çç» |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getExcelModelData() |
| | | |
| | | this.getSelectArr() |
| | | window.addEventListener('resize', this.getHeight) |
| | | }, |
| | | methods: { // è·å页é¢é«åº¦ |
| | | getHeight() { |
| | | this.$nextTick(() => { |
| | | this.mainHeight = window.innerHeight - 85 |
| | | |
| | | // this.$nextTick(() => { |
| | | // this.$refs.tableDataRef.doLayout() |
| | | // }) |
| | | }) |
| | | }, |
| | | async beforeUpload(file) { |
| | | const isLt1M = file.size / 1024 / 1024 < 1 |
| | | if (isLt1M) { |
| | | return true |
| | | } |
| | | |
| | | this.$message({ |
| | | message: 'Please do not upload files larger than 1m in size.', |
| | | type: 'warning' |
| | | }) |
| | | return false |
| | | }, |
| | | async handleSuccess({ results, header, sheetName }) { |
| | | this.tableData = results |
| | | this.tableHeader = header |
| | | this.sheetName = sheetName |
| | | |
| | | // ç¨æ·æ¸
å导å
¥å¤æ |
| | | if (this.sheetName.indexOf('ç¨æ·æ¸
å') !== -1) { |
| | | const postArr = this.postArr.map(i => i.postcode) |
| | | const roleArr = this.roleArr.map(i => i.rolecode) |
| | | const groupArr = this.groupArr.map(i => i.usergroupcode) |
| | | const orgArr = this.orgArr.map(i => i.torg_code) |
| | | this.tableData[this.sheetName.indexOf('ç¨æ·æ¸
å')].forEach(j => { |
| | | j.æå±å²ä½ç¼ç = j.æå±å²ä½ç¼ç .split(',').filter(e => postArr.includes(e)) |
| | | j.æå±è§è²ç¼ç = j.æå±è§è²ç¼ç .split(',').filter(e => roleArr.includes(e)) |
| | | j.æå±çç»ç¼ç = j.æå±çç»ç¼ç .split(',').filter(e => groupArr.includes(e)) |
| | | j['*æå±ç»ç»ç¼ç '] = orgArr.includes(j['*æå±ç»ç»ç¼ç ']) ? j['*æå±ç»ç»ç¼ç '] : '' |
| | | j['*å¨èç¶æ'] = this.statusArr.find(e => e.name === j['*å¨èç¶æ']).code |
| | | }) |
| | | } |
| | | }, |
| | | async getExcelModelData() { |
| | | const { data: res } = await ExcelModelData() |
| | | this.excelArr = res |
| | | }, |
| | | async getExcel() { |
| | | const res = await DownLoadExcel({ FileCode: this.excelCode }) |
| | | window.location.href = res.data |
| | | }, |
| | | submit() { |
| | | // console.log(this.excelCode) |
| | | // console.log(JSON.stringify(this.sheetName)) |
| | | // console.log(JSON.stringify(this.tableHeader)) |
| | | // console.log(JSON.stringify(this.tableData)) |
| | | |
| | | this.$confirm('æ¯å¦ç¡®è®¤æäº¤?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | let flag = true |
| | | let msg = '' |
| | | if (this.sheetName.indexOf('ç¨æ·æ¸
å') !== -1) { |
| | | // if ([...new Set(this.tableData[0].filter(i => i['*ç¨æ·ç¼å·(å¯ä¸)'] !== '').map(i => i['*ç¨æ·ç¼å·(å¯ä¸)']))].length !== this.tableData[0].length) { |
| | | if ([...new Set(this.tableData[0].map(i => i['*ç¨æ·ç¼å·(å¯ä¸)']))].length !== this.tableData[0].length) { |
| | | return this.$message.info('ç¼ç ä¸è½éå¤ï¼') |
| | | } |
| | | this.tableData[0].forEach(j => { |
| | | if (j['*ç¨æ·ç¼å·(å¯ä¸)'].trim() === '') { |
| | | flag = false |
| | | msg = '*ç¨æ·ç¼å·(å¯ä¸)' |
| | | } |
| | | if (j['*ç¨æ·å§å'].trim() === '') { |
| | | flag = false |
| | | msg = '*ç¨æ·å§å' |
| | | } |
| | | if (j['*å¯ç '].trim() === '') { |
| | | flag = false |
| | | msg = '*å¯ç ' |
| | | } |
| | | if (j['*å¨èç¶æ'].trim() === '') { |
| | | flag = false |
| | | msg = '*å¨èç¶æ' |
| | | } |
| | | if (j['*æå±ç»ç»ç¼ç '].trim() === '') { |
| | | flag = false |
| | | msg = '*æå±ç»ç»ç¼ç ' |
| | | } |
| | | }) |
| | | |
| | | if (!flag) { |
| | | return this.$message.info(msg + 'ä¸è½ä¸ºç©ºï¼') |
| | | } |
| | | |
| | | this.tableData[0].forEach(j => { |
| | | j.æå±å²ä½ç¼ç = j.æå±å²ä½ç¼ç .join(',') |
| | | j.æå±çç»ç¼ç = j.æå±çç»ç¼ç .join(',') |
| | | j.æå±è§è²ç¼ç = j.æå±è§è²ç¼ç .join(',') |
| | | }) |
| | | } |
| | | const data = { |
| | | fileCode: this.excelCode, |
| | | tableData: this.tableData |
| | | } |
| | | // console.log(JSON.stringify(this.tableData)) |
| | | ExcelModelCheck(data).then(res => { |
| | | if (res.code === '200') { |
| | | this.$notify.success('æäº¤æå!') |
| | | this.tableData = [] |
| | | this.tableHeader = [] |
| | | this.sheetName = [] |
| | | this.excelCode = '' |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$notify.info('已忶æäº¤ï¼') |
| | | }) |
| | | }, |
| | | reset() { |
| | | this.tableData = [] |
| | | this.tableHeader = [] |
| | | this.sheetName = [] |
| | | this.excelCode = '' |
| | | }, |
| | | async getSelectArr() { |
| | | await this.getPrentOrganization() |
| | | await this.getPostPermissions() |
| | | await this.getRolePermissions() |
| | | await this.getGroupsPermissions() |
| | | }, |
| | | // ç»ç»æ¶æçº§èéæ©å¨ |
| | | async getPrentOrganization() { |
| | | const { data: res } = await PrentOrganization() |
| | | this.orgArr = res |
| | | // this.cascaderOptions = arrayToTree(res, { |
| | | // parentProperty: 'parent_id', |
| | | // customID: 'torg_code', |
| | | // childrenProperty: 'children' |
| | | // }) |
| | | }, |
| | | // è·åå²ä½ä¸ææ°ç» |
| | | async getPostPermissions() { |
| | | const { data: res } = await PostPermissions() |
| | | this.postArr = res |
| | | }, |
| | | // è·åè§è²ä¸ææ°ç» |
| | | async getRolePermissions() { |
| | | const { data: res } = await RolePermissions() |
| | | this.roleArr = res |
| | | }, |
| | | // è·åçç»ä¸ææ°ç» |
| | | async getGroupsPermissions() { |
| | | const { data: res } = await GroupsPermissions() |
| | | this.groupArr = res |
| | | }, |
| | | headerCellStyle({ row, column, rowIndex, columnIndex }) { |
| | | let string = '' |
| | | if (column.label.indexOf('*') !== -1 && rowIndex === 0) { |
| | | string = 'background:#ffc000;' |
| | | } else if (column.label.indexOf('*') === -1 && rowIndex === 0) { |
| | | string = 'background:#00b0f0;' |
| | | } |
| | | return string + 'padding: 5px 0; fontWeight: 500;' |
| | | }, |
| | | cellStyle() { |
| | | const option = { |
| | | padding: '5px 0' |
| | | } |
| | | return option |
| | | }, |
| | | addRedStar(h, { column }) { |
| | | if (column.label.indexOf('*') !== -1) { // å¿
å¡«åæ®µ |
| | | return [ |
| | | h('span', { style: 'color:#F56C6C' }, ' * '), |
| | | h('span', { style: 'color:#FFF' }, column.label.substring(1)) |
| | | ] |
| | | } else { // éå¿
å¡«åæ®µ |
| | | return [ |
| | | // h('span', { style: 'color:#F56C6C' }, ' * '), |
| | | h('span', { style: 'color:#FFF' }, column.label) |
| | | ] |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | //::v-deep .el-table__body-wrapper { |
| | | //overflow-y: auto; |
| | | //overflow-x: scroll !important; |
| | | //height: calc(100% - 34px); |
| | | //width: 100% !important; |
| | | //} |
| | | |
| | | </style> |
| | | |