You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
4.8 KiB

<template>
<div>
<vxe-modal
title="查看"
:z-index="zIndex"
:value="isShow"
@input="e => $emit('update:isShow', e)"
size="mini"
:loading="loading"
id="flow-list-popover"
:lock-view="false"
:lock-scroll="false"
:mask="false"
:min-height="300"
resize
:fullscreen="$store.getters.device === 'mobile'"
show-zoom
draggable
storage
:padding="false"
:position="$store.getters.device === 'mobile' ? {} : pos">
<div :style="$store.getters.device === 'desktop' ? 'max-height: 60vh' : '' ">
<DesktopForm
device="mobile"
ref="mobileForm"
:config="config"
:is-first-node="false"
:sub-form="subConfig"
:fields="fields"
:original-form="form"
:readable="config.customModel ? config.customModel.fields.map(i => i.id) : []"
:writeable="[]"
:needFlowTitle="false"
:logs="config.logs"
></DesktopForm>
</div>
</vxe-modal>
</div>
</template>
<script>
import {
fieldConfig,
view,
} from "@/api/flow";
import DesktopForm from "@/views/flow/DesktopForm.vue";
import { PopupManager } from 'element-ui/lib/utils/popup'
export default {
components: {
DesktopForm
},
props: {
isShow: {
type: Boolean,
default: false
},
id: {
type: [String,Number],
default: ""
},
pos: {
type: Object,
default: () => ({ top: 0, left: 0 })
}
},
data() {
return {
zIndex: PopupManager.nextZIndex(),
loading: false,
form: {},
subConfig: new Map(),
config: {},
fields: [],
}
},
methods: {
generateForm(object, fields, relation = false, pname) {
fields.forEach((field) => {
if (field.type === "relation") {
object[field.name] = [{}];
this.generateForm(
object[field.name][0],
this.subConfig.get(field.sub_custom_model_id)?.customModel?.fields,
true,
field.name
);
} else {
object[field.name] = "";
}
});
},
async getConfig() {
this.loading = true
try {
const res = await view(this.id);
let { fields } = res?.customModel;
fields = fields.filter(i => i.show_in_list)
this.fields = fields
let subFormRequest = [];
const getSubForm = async (id) => {
subFormRequest.push(fieldConfig(id));
};
for (let j = 0;j < fields.length;j++) {
let field = fields[j]
if (field.sub_custom_model_id) {
await getSubForm(field.sub_custom_model_id);
}
}
const subConfigs = await Promise.all(subFormRequest);
subConfigs.forEach((sub) => {
if (sub.customModel?.id) {
this.subConfig.set(sub.customModel?.id, sub);
}
});
this.config = res;
this.generateForm(this.form, fields);
this.form = Object.assign({}, this.form);
const { data } = res?.flow;
for (let key in data) {
try {
let jsonObj = JSON.parse(data[key]);
jsonObj.forEach(item => {
// 遍历对象中的每个键值对
for (const key in item) {
if (typeof item[key] === 'string') {
try {
// 尝试解析字符串为 JSON 对象
const parsedValue = JSON.parse(item[key]);
// 如果解析成功,替换原始字符串
item[key] = parsedValue;
} catch (e) {
// 如果解析失败,继续保持原始字符串
}
}
}
})
if (this.form.hasOwnProperty(key)) {
this.form[key] = jsonObj;
}
} catch (err) {
if (this.form.hasOwnProperty(key)) {
if (data[key] instanceof Array) {
if (data[key].length > 0 && data[key][0].hasOwnProperty('url')) {
this.form[key] = data[key].map(i => ({
name: i.original_name,
url: i.url,
response: i,
}))
} else {
this.form[key] = ''
}
}
this.form[key] = data[key];
}
}
}
this.loading = false
} catch (err) {
console.error(err);
this.$message.error("配置失败");
this.loading = false
}
}
},
computed: {},
watch: {
id(newVal) {
if (!!newVal) {
this.getConfig()
}
},
isShow(newVal) {
if (newVal) {
this.zIndex = PopupManager.nextZIndex()
}
}
}
}
</script>
<style scoped lang="scss">
</style>