add 动态表结构处理相关工具

This commit is contained in:
lb 2023-08-18 14:06:44 +08:00
förälder 5cc3fb758e
incheckning 54ce9639ab
4 ändrade filer med 162 tillägg och 116 borttagningar

4
src/utils/dynamicData.js Normal file
Visa fil

@ -0,0 +1,4 @@
/**
* 用于调整服务器返回的动态数据
*/
export default function handleDynamicData() {}

44
src/utils/dynamicProps.js Normal file
Visa fil

@ -0,0 +1,44 @@
/**
* 用于动态表结构的 tableProps 生成
* @param {*} nameData
* @returns
*/
export default function handleNameData(nameData) {
const props = step1(nameData.filter((item) => item.tree == 1));
step2(
props,
nameData.filter((item) => item.tree == 2)
);
// console.log('level 1', JSON.stringify(props, null, 2));
return props;
}
function step1(tree1) {
return Array.from(new Set(tree1.map((item) => item.name)))
.sort()
.map((item) => ({
prop: item,
label: item,
align: 'center',
children: [],
}));
}
function step2(firstTierProps, tree2) {
tree2.map((nd) => {
const parent = firstTierProps.find(
({ prop }) => nd.parentId.indexOf(prop) > -1
);
if (notRepeat(parent.children, nd.name)) {
parent.children.push({
label: nd.name,
prop: `${parent.prop}-${nd.name}`,
align: 'center',
});
}
});
}
function notRepeat(propArray, name) {
return propArray.every((item) => item.label !== name);
}

Visa fil

@ -10,7 +10,7 @@
<SearchBar
:formConfigs="[{ label: '近24小时检测记录', type: 'title' }]"
ref="search-bar" />
<pre><code v-html="jsondemo"></code></pre>
<!-- <pre><code v-html="jsondemo"></code></pre> -->
<base-table
:table-props="tableProps"
:page="queryParams.pageNo"
@ -21,11 +21,14 @@
</template>
<script>
import hljs from 'highlight.js/lib/highlight';
import json from 'highlight.js/lib/languages/json';
import 'highlight.js/styles/github-gist.css';
import response from './response.json';
import handleNameData from '@/utils/dynamicProps';
import handleDynamicData from '@/utils/dynamicData';
// import hljs from 'highlight.js/lib/highlight';
// import json from 'highlight.js/lib/languages/json';
// import 'highlight.js/styles/github-gist.css';
hljs.registerLanguage('json', json);
// hljs.registerLanguage('json', json);
export default {
name: 'QualityRecentHours',
@ -37,7 +40,7 @@ export default {
pageNo: 1,
pageSize: 10,
},
jsondemo: '',
// jsondemo: '',
list: [
{
inspectionContent: '检测内容1',
@ -47,84 +50,15 @@ export default {
},
],
tableProps: [
{
type: 'index',
label: '序号'
},
{
prop: 'inspectionContent',
label: '检测内容',
align: 'center',
},
//
// mock
{
prop: '2023-03-18T00:00:00',
label: '2023-03-18T00:00:00',
align: 'center',
children: [
{
prop: '2023-03-18T00:00:00-产线1',
label: '产线1',
align: 'center',
},
{
prop: '2023-03-18T00:00:00-产线2',
label: '产线2',
align: 'center',
},
{
prop: '2023-03-18T00:00:00-产线3',
label: '产线3',
align: 'center',
},
{
prop: '2023-03-18T00:00:00-产线4',
label: '产线4',
align: 'center',
},
{
prop: '2023-03-18T00:00:00-产线5',
label: '产线5',
align: 'center',
},
],
},
{
prop: '2023-03-18T01:00:00',
label: '2023-03-18T01:00:00',
align: 'center',
children: [
{
prop: '2023-03-18T01:00:00-产线1',
label: '产线1',
align: 'center',
},
{
prop: '2023-03-18T01:00:00-产线2',
label: '产线2',
align: 'center',
},
{
prop: '2023-03-18T01:00:00-产线3',
label: '产线3',
align: 'center',
},
],
},
{
prop: '2023-03-18T02:00:00',
label: '2023-03-18T02:00:00',
align: 'center',
children: [
{
prop: '2023-03-18T02:00:00-产线1',
label: '产线1',
align: 'center',
},
{
prop: '2023-03-18T02:00:00-产线2',
label: '产线2',
align: 'center',
},
],
},
],
};
},
@ -134,47 +68,31 @@ export default {
},
methods: {
async getList() {
const response = await this.$axios({
url: '/monitoring/record-in-one-day/get',
method: 'get',
});
// const response = await this.$axios({
// url: '/monitoring/record-in-one-day/get',
// method: 'get',
// });
console.log(response);
// const {
// // data: { nameData },
// code,
// } = response;
// this.jsondemo = hljs.highlight(
// 'json',
// JSON.stringify(response, null, 2),
// true
// ).value;
const {
// data: { nameData },
code,
data: { data: dyanmicData, nameData },
} = response;
this.jsondemo = hljs.highlight(
'json',
JSON.stringify(response, null, 2),
true
).value;
},
filterNameData(nameData) {
const ndSet = new Set();
nameData.forEach((nd) => {
ndSet.add(nd.name);
});
return Array.from(ndSet.values())
.sort()
.map((name) => ({
prop: name,
label: name,
}));
},
filterData(data) {
return data.map((item) => {
const { data: innerData } = item;
const keyValuePairs = {};
innerData.map((d) => {
keyValuePairs[d.dynamicName] = d.dynamicValue;
});
return {
inspectionContent: item.inspectionContent,
...keyValuePairs,
sumInput: item.sumInput,
};
});
const dynamicProps = handleNameData(nameData);
this.tableProps.push(...dynamicProps)
const [dataList, length] = handleDynamicData(dyanmicData);
this.list = dataList;
this.queryParams.pageSize = length;
},
handleEmitFun(payload) {
console.log('payload', payload);
},

Visa fil

@ -0,0 +1,80 @@
{
"tableProps": [
{
"prop": "inspectionContent",
"label": "检测内容",
"align": "center"
},
{
"prop": "2023-03-18T00:00:00",
"label": "2023-03-18T00:00:00",
"align": "center",
"children": [
{
"prop": "2023-03-18T00:00:00-产线1",
"label": "产线1",
"align": "center"
},
{
"prop": "2023-03-18T00:00:00-产线2",
"label": "产线2",
"align": "center"
},
{
"prop": "2023-03-18T00:00:00-产线3",
"label": "产线3",
"align": "center"
},
{
"prop": "2023-03-18T00:00:00-产线4",
"label": "产线4",
"align": "center"
},
{
"prop": "2023-03-18T00:00:00-产线5",
"label": "产线5",
"align": "center"
}
]
},
{
"prop": "2023-03-18T01:00:00",
"label": "2023-03-18T01:00:00",
"align": "center",
"children": [
{
"prop": "2023-03-18T01:00:00-产线1",
"label": "产线1",
"align": "center"
},
{
"prop": "2023-03-18T01:00:00-产线2",
"label": "产线2",
"align": "center"
},
{
"prop": "2023-03-18T01:00:00-产线3",
"label": "产线3",
"align": "center"
}
]
},
{
"prop": "2023-03-18T02:00:00",
"label": "2023-03-18T02:00:00",
"align": "center",
"children": [
{
"prop": "2023-03-18T02:00:00-产线1",
"label": "产线1",
"align": "center"
},
{
"prop": "2023-03-18T02:00:00-产线2",
"label": "产线2",
"align": "center"
}
]
}
]
}