Browse Source

智能报表中选择导出字段

luckysheet_xiaowang
mk 8 months ago
parent
commit
9dfd1383bd
  1. 34
      src/views/modules/base/smartExcel/cpts/excel-upload-data.vue
  2. 1
      src/views/modules/base/smartExcel/cpts/excel-view.vue
  3. 203
      src/views/modules/base/smartExcel/cpts/export-process-two.vue
  4. 108
      src/views/modules/base/smartExcel/cpts/export-view.vue
  5. 10
      src/views/modules/base/smartExcel/report.vue

34
src/views/modules/base/smartExcel/cpts/excel-upload-data.vue

@ -22,7 +22,7 @@
</div>
</div>
</div>
<div v-show="dataList.length > 0 && progress == 2" style="height: 400px; overflow-y: scroll;margin: 60px 0;">
<div v-show="dataList.length > 0 && progress == 2 && pageType === 'excel'" style="height: 400px; overflow-y: scroll;margin: 60px 0;">
<el-table ref="ref_table" :data="dataList" border class="m-table-item" style="width: 100%">
<el-table-column label="序号" header-align="center" align="center" type="index" width="100"></el-table-column>
<el-table-column prop="userTableHeader" header-align="center" align="center" label="上传表格列" min-width="60">
@ -56,6 +56,9 @@
</el-table-column>
</el-table>
</div>
<div v-show="progress == 2 && pageType === 'report'">
<export-process-two ref="report_form"></export-process-two>
</div>
<div v-show="progress == 3" style="height: 400px; overflow-y: scroll;margin: 60px 0;">
<div v-if="formData1.importCategory === 'BASEINFO'">
<resi-search ref="resi_form"></resi-search>
@ -79,6 +82,7 @@ import { requestPost } from "@/js/dai/request";
import resiSearch from "./export-search.vue";
import HoseSearch from "./hose-search.vue";
import { Loading } from "element-ui";
import exportProcessTwo from './export-process-two.vue'
export default {
data() {
return {
@ -135,7 +139,8 @@ export default {
groupList: [],
fileCode: null,
dataList: [],
dataListLoading:false
dataListLoading:false,
reportForm:[],//2
};
},
props: {
@ -155,6 +160,10 @@ export default {
type: Array,
default: () => []
},
pageType:{
type:String,
default:"excel"//excel report
}
},
created() {
this.loadPersonGroup();
@ -179,11 +188,13 @@ export default {
},
onClickNext() {
if (this.progress === 1) {
this.dataListLoading = true;
this.progress = 2;
this.checkExtractExcelHead()
if(this.pageType === 'excel'){
this.dataListLoading = true;
this.checkExtractExcelHead()
}
} else if (this.progress === 2) {
let obj = this.dataList.reduce((acc, item) => {
let obj = this.dataList.reduce((acc, item) => {
if (item.userTableHeader) {
acc[item.userTableHeader] = item.itemId;
}
@ -198,6 +209,17 @@ export default {
}else{
this.formData.searchForm= this.$refs['house_form'].form;
}
if(this.pageType === 'report'){
this.reportForm = this.$refs['report_form'].rightList.map(item => {
return {
itemId: item.id,
label: item.label,
tableName: item.queryItemList[0].tableName,
children: item.queryItemList,
supportAdd: item.supportAdd
}
})
}
this.saveUploadForm()
}
},
@ -306,7 +328,7 @@ export default {
this.createdTime = createdTime;
},
},
components: {resiSearch,HoseSearch},
components: {resiSearch,HoseSearch,exportProcessTwo},
computed: {},
watch: {},
};

1
src/views/modules/base/smartExcel/cpts/excel-view.vue

@ -61,6 +61,7 @@ export default {
currentTable: null,
currentId: '',
btnLoading: false,
sheetR:0
};
},
props: {

203
src/views/modules/base/smartExcel/cpts/export-process-two.vue

@ -0,0 +1,203 @@
<template>
<div class="diy-wr">
<div class="left">
<el-tabs v-model.trim="leftActive" tab-position="left" class="left-h" @tab-click="handleTabsClick">
<el-tab-pane v-for="item in leftList" :key="item.id" :label="item.label" :name="item.id">
<div class="pd10 check-boxwr scroll-h">
<checkBox v-if="item.queryItemList.length > 0" :ref="'checkbox' + item.id"
:list="item.queryItemList" @change="handleChangeBox" />
</div>
</el-tab-pane>
</el-tabs>
</div>
<div class="right">
<div class="right-header">
<div class="title">已选字段</div>
</div>
<div class="h80 scroll-h">
<el-collapse v-model.trim="activeCollapse" id="collapsWrs">
<el-collapse-item v-for="item in rightList" :key="item.id" :title="item.label" :name="item.id"
class="col-h">
<dragItem :ref="'drags' + item.id" :list="item.queryItemList" :id="item.id"
@del="handleDelItem" @drag="handleDrag($event, item)"></dragItem>
</el-collapse-item>
</el-collapse>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import checkBox from '@/views/components/checkBox.vue'
import Sortable from 'sortablejs'
import nextTick from 'dai-js/tools/nextTick'
import dragItem from '@/views/components/dragItem.vue'
export default {
data() {
return {
leftActive: '',
leftList: [],
rightList: [],
activeCollapse: ['1'],
};
},
created() {
this.getLeftList()
},
methods: {
async getLeftList() {
const url = "/oper/customize/icformitemgroup/list";
let params = {
formCode: "resident_base_info,community_info",
display: 1
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
data.forEach((item) => {
((id) => {
item.queryItemList = [];
})(item.id);
});
this.leftList = [...data];
} else {
this.$message.error(msg);
}
},
handleTabsClick(val) {
console.log('tabs-----', val)
this.leftList.forEach(async item => {
if (item.id == val.name) {
if (item.queryItemList.length == 0) item.queryItemList = await this.getExportChildList(item.id)
}
})
},
async handleChangeBox({ list, pid }) {
console.log(list,pid);
// if (list.length == 0) return
let obj = {}
this.leftList.forEach(item => {
if (item.id == pid) obj = { ...item, queryItemList: [...list] }
})
const groups = this.rightList.map(item => item.id)
if (groups.includes(pid)) {
this.rightList.forEach((item, i) => {
if (item.id == pid) {
item.queryItemList = [...list]
if (list.length == 0) this.rightList.splice(i, 1)
}
})
} else {
this.rightList.push(obj)
await nextTick(2000)
this.$nextTick(() => {
console.log('itemttt------', this.$refs[`drag${pid}`])
this.$refs[`drags${pid}`][0].dragSort()
})
}
this.activeCollapse = [...this.activeCollapse, pid]
},
handleDelItem(val) {
const { item, index } = val
console.log('item------', item, this.$refs[`checkbox${item.itemGroupId}`])
let checkList = this.$refs[`checkbox${item.itemGroupId}`][0].checkedList
checkList.forEach((n, i) => {
if (n == item.itemId) {
checkList.splice(i, 1)
this.$refs[`checkbox${item.itemGroupId}`][0].handleChange(checkList)
}
})
this.rightList.forEach((n, i) => {
if (n.id === item.itemGroupId) {
n.queryItemList.splice(index, 1)
if (n.queryItemList.length === 0) this.rightList.splice(i, 1)
}
})
},
handleDrag(val, item) {
console.log('drag-----', val)
console.log('drag-----', item)
this.rightList.forEach((n, i) => {
if (item.id == n.id) n.queryItemList = [...val]
})
},
async getExportChildList(groupId) {
const url = `/oper/customize/icformitem/getItemList/${groupId}`
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
return data
} else {
this.$message.error(msg)
}
},
dragSort() {
const el = document.getElementById('collapsWrs')
this.sortTable = Sortable.create(el, {
group: 'el-collapse-item',
ghostClass: 'sortable-ghost', // Class name for the drop placeholder,
animation: 500,
delay: 0,
onEnd: evt => {
console.log('evt----', evt)
const targetRow = this.rightList.splice(evt.oldIndex, 1)[0]
this.rightList.splice(evt.newIndex, 0, targetRow)
}
})
},
},
components: { checkBox,dragItem },
computed: {},
watch: {
rightList: {
handler(val) {
if (val.length > 0) this.dragSort()
},
deep: true
},
},
}
</script>
<style lang='scss' scoped>
.diy-wr {
display: flex;
width: 100%;
margin-top: 20px;
.left {
width: 30%;
height: 100%;
.check-boxwr {
overflow: auto;
}
.left-h{
height: 450px;
overflow-y: scroll;
}
}
.right {
flex-shrink: 0;
width: 50%;
height: 100%;
box-sizing: border-box;
margin-left: 20px;
padding: 0 20px;
border-left: 1px solid #eee;
.right-header {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 10px;
// border-bottom: 1px solid #eee;
.title {
font-weight: 500;
}
}
}
}
</style>

108
src/views/modules/base/smartExcel/cpts/export-view.vue

@ -1,6 +1,6 @@
<template>
<div class='flex'>
<div :class="['flex', 'flex-y', 'flex1', sheetTotal ? 'luckysheet-wrap' : 'luckysheet-wrap-all']">
<div :class="['flex', 'flex-y', 'flex1', 'luckysheet-wrap-all']">
<div class="top_btn flex flex-end">
<div>
<el-button type="text" round @click="handelClickBack"
@ -10,10 +10,8 @@
<el-button type="success" @click="onClickUplond()"> 数据列表导出</el-button>
</div>
<div>
<el-button type="danger"
@click="handleClickCurrencyEvent('rejected')"> 取消</el-button>
<el-button type="primary"
@click="handleClickCurrencyEvent('submit')"> 提交</el-button>
@click="handleClickCurrencyEvent('submit')"> 导出</el-button>
</div>
</div>
<div id="luckysheet"></div>
@ -21,7 +19,7 @@
<el-dialog title="数据列表导出" v-if="showUploadData" :visible.sync="showUploadData" width="60%"
:close-on-click-modal="false">
<excelUploadData @handleUploadDataHide="handleUploadDataHide" :currentTable="currentTable"
:btnLoading="btnLoading">
:btnLoading="btnLoading" :pageType='`report`'>
</excelUploadData>
</el-dialog>
</div>
@ -45,37 +43,11 @@ export default {
currentTable: null,
currentId: '',
btnLoading: false,
sheetR:0
};
},
props: {
workbookId: {
type: String,
default: ''
},
pageType: {
type: String,
default: ''
},
sheetTotal: {
type: Boolean,
default: false
},
infoObj: {
type: Object,
default: () => { }
},
mergeObj: {
type: Object,
default: () => { }
},
userId: {
type: String,
default: ''
},
taskStateName: {
type: String,
default: ""
},
},
computed: {
tableHeight() {
@ -83,72 +55,25 @@ export default {
},
...mapGetters(['clientHeight', 'resolution']),
},
async created() {
created() {
},
watch: {},
async mounted() {
console.log( "dskjlfsdklf");
// if (this.sheetTotal) {
// this.currentId = this.workbookId;
// this.loadWorkBook()
// } else {
// this.getTaskList()
// }
this.loadWorkBook()
},
methods: {
handleClickCurrencyEvent(){
var objsheet = luckysheet.getAllSheets()[0] //
console.log(objsheet,"打算离开房间四点零分");
// this.options = objsheet //
// this.postsheet()
exportSheetExcel(luckysheet.getAllSheets(),'导出文件')
},
// async postsheet() {
// var strsheet = await JSON.stringify(this.options)//
// const sheetinfo = { id: 1, filename: strsheet }//
// // await updata(sheetinfo)//
// },
async handleClickInspect() {
// celldatalist
const list = luckysheet.getAllSheets()[0].celldata.map(item => ({
r: item.r,
c: item.c,
v: item.v.v || ''
}));
//
let { data, code, msg } = await requestPost('/actual/base/intelligentImportData/checkData', list);
if (code === 0) {
if (data && data.length > 0) {
for (const { r, c } of data) {
luckysheet.setCellFormat(r, c, 'bg', '#f5504a');
}
const findArr = this.findUniqueElements(luckysheet.getAllSheets()[0].celldata, data);
findArr.forEach(({ r, c, v }) => {
if (v.bg === "#f5504a") {
luckysheet.setCellFormat(r, c, 'bg', '#ffffff');
}
});
} else {
this.$message.success('没有找到异常');
}
}
},
findUniqueElements(A, B) {
// Brc
const bCombinations = new Set(B.map(item => `${item.r},${item.c}`));
// AB
return A.filter(item => !bCombinations.has(`${item.r},${item.c}`));
},
onClickUplond() {
this.showUploadData = true;
let list = luckysheet.getAllSheets()
this.currentTable = list.filter(item => item.status == '1')
},
async handleUploadDataHide(val) {
this.showUploadData = false;
@ -188,11 +113,6 @@ export default {
}
return letter;
},
handleCellEditBefore(){
console.log("sdfk;s.dkf");
},
loadWorkBook() {
window.luckysheet.destroy();
const { id } = this.$store.state.user;
@ -201,25 +121,13 @@ export default {
options.container = 'luckysheet'
// options.loadUrl = `${process.env.VUE_APP_API_SERVER}/actual/base/luckySheet/workbook/load?workbookId=${this.currentId}`
// options.updateUrl = `${process.env.VUE_APP_SOCKET_SERVER}/actual/base/ws/luckysheet/${this.currentId}/${id}`
// options.loadSheetUrl = `${process.env.VUE_APP_API_SERVER}/actual/base/luckySheet/workbook/loadSheets`
window.luckysheet.create({
...options,
hook: {
cellEditBefore: this.handleCellEditBefore,
sheetCreateAfter: this.handleSheetCreateAfter,
},
});
},
handleSheetCreateAfter(e) {
console.log('setsheet', e);
},
handelClickBack() {
this.$emit('close')
},
},
components: {
excelUploadData
},
components: {
excelUploadData

10
src/views/modules/base/smartExcel/report.vue

@ -190,7 +190,7 @@
handleRecord() {
this.showRecord="ture"
},
async handleCancel(item) {
handleCancel(item) {
let parms = {
id: item.id,
};
@ -230,18 +230,14 @@
},
handleAdd() {
this.pageType = 'add';
console.log("dsfdsf");
},
handleInfo(item) {
console.log(item, "dkljsfdlk");
this.task = item.id
this.pageType = 'info'
},
getLastItem(list, vals, key) {
let LIST = list || [];
for (let item of LIST) {
// console.log(item[key]);
for (let i of vals) {
if (item[key] === i) {
this.sarr.push(item);
@ -283,7 +279,7 @@
this.pageNo = 1;
this.getTableData();
},
async handleDel(item) {
handleDel(item) {
let parms = {
id: item.id,
};
@ -304,7 +300,7 @@
}
});
},
async resetSearch() {
resetSearch() {
this.$refs.ref_searchform.resetFields();
this.pageNo = 1;
const user = this.$store.state.user;

Loading…
Cancel
Save