xy 9 months ago
parent 8213571520
commit d4e374401d

@ -26,10 +26,9 @@
<el-checkbox v-for="field in mainFields" :label="field.name" :key="field.id">{{ field.label }}</el-checkbox>
</el-checkbox-group>
<h4>存在子表单</h4>
<h4 style="color: var(--theme-color);">存在子表单</h4>
<div v-for="field in relationsFields" :key="field.id" style="padding-left: 10px;">
<h5>{{ field.label }}</h5>
<FieldExportItem :custom-model-id="field.sub_custom_model_id"></FieldExportItem>
</div>
</div>
</vxe-modal>
@ -37,12 +36,16 @@
</template>
<script>
import FieldExportItem from "./FieldExportItem.vue";
import {fieldConfig} from "@/api/flow"
import {defaultModalSize} from "@/settings";
import {PopupManager} from "element-ui/lib/utils/popup";
import {download} from "@/utils/downloadRequest"
export default {
components: {
FieldExportItem
},
props: {
isShow: {
type: Boolean,
@ -146,7 +149,7 @@ export default {
export_fields[key] = this.config?.fields?.find(j => j.name === key)?.label
})
await download('/api/oa/flow/list-groups', 'get', {
...this.select,
custom_model_id: this.select.custom_model_id,
type: this.$route.params.type,
is_export: 1,
export_name: this.fileName,
@ -164,7 +167,9 @@ export default {
}
},
"select.custom_model_id"(newVal) {
this.getFields(newVal)
if(newVal) {
this.getFields(newVal)
}
}
},
}

@ -0,0 +1,141 @@
<template>
<div>
<h5>当前导出流程 {{ config.name }} {{ customModelId }}</h5>
<h4 style="display: inline-block;">导出文件名</h4>
<el-input style="max-width: 220px;" size="small" v-model="fileName"></el-input>
<el-button style="margin-left: 10px;" type="primary" size="small" icon="el-icon-download" @click="confirm"></el-button>
<h4>需要导出字段</h4>
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange"></el-checkbox>
<div style="margin: 15px 0;"></div>
<el-checkbox-group v-model="selectedFields" @change="handleCheckedFieldsChange">
<el-checkbox v-for="field in mainFields" :label="field.name" :key="field.id">{{ field.label }}</el-checkbox>
</el-checkbox-group>
</div>
</template>
<script>
import {fieldConfig} from "@/api/flow";
import {download} from "@/utils/downloadRequest";
export default {
props: {
customModelId: {
type: [String, Number],
default: ''
}
},
data() {
return {
loading: false,
config: {
fields: []
},
fileName: `导出_${this.$moment().valueOf()}`,
selectedFields: [],
checkAll: false,
isIndeterminate: false,
}
},
methods: {
handleCheckedFieldsChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.config?.fields?.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.config?.fields?.length;
},
handleCheckAllChange(val) {
this.selectedFields = val ? this.config.fields?.map(i => i.name) : [];
this.isIndeterminate = false;
},
async getFields(id) {
try {
const { customModel } = await fieldConfig(id)
this.config = customModel
this.config.fields.forEach(i => {
i.name = 'data.' + i.name
})
this.fileName = `${customModel.name}_${this.$moment().valueOf()}`
} catch (err) {
console.error(id)
}
},
async confirm() {
// paramsSerializer
const paramsSerializer = (params) => {
const parts = [];
//
const serialize = (obj, parentKey) => {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const value = obj[key];
const fullKey = parentKey ? `${parentKey}[${key}]` : key;
if (value && typeof value === 'object' && !Array.isArray(value)) {
//
serialize(value, fullKey);
} else if (Array.isArray(value)) {
//
value.forEach((item, index) => {
if (item && typeof item === 'object') {
//
serialize(item, `${fullKey}[${index}]`);
} else {
//
parts.push(`${encodeURIComponent(`${fullKey}[${index}]`)}=${encodeURIComponent(item)}`);
}
});
} else {
//
parts.push(`${encodeURIComponent(fullKey)}=${encodeURIComponent(value)}`);
}
}
}
};
//
serialize(params, '');
//
return parts.join('&');
};
try {
let export_fields = {}
this.selectedFields?.forEach(field => {
let key = field
export_fields[key] = this.config?.fields?.find(j => j.name === key)?.label
})
await download('/api/oa/flow/list-groups', 'get', {
custom_model_id: this.customModelId,
type: this.$route.params.type,
is_export: 1,
export_name: this.fileName,
export_fields
}, this.fileName+'.xlsx', paramsSerializer)
} catch (err) {
console.error(err)
}
}
},
computed: {
mainFields() {
return this.config?.fields?.filter(i => i.type !== 'relation')
},
},
watch: {
customModelId: {
handler: function (newVal,oldVal) {
console.log(33, newVal,oldVal)
if(newVal) {
this.getFields(newVal)
}
},
immediate: true
},
},
}
</script>
<style scoped lang="scss">
</style>
Loading…
Cancel
Save