更新企业列表

This commit is contained in:
xiaozhang 2024-03-05 16:14:31 +08:00
parent db23c98040
commit e560788e56
5 changed files with 184 additions and 131 deletions

View File

@ -18,6 +18,11 @@ const router = createRouter({
path: '/show',
name: 'show',
component: () => import('../views/show.vue')
},
{
path: '/test',
name: 'test',
component: () => import('../views/test.vue')
}
]
})

View File

@ -1,30 +1,51 @@
<template>
<div>
<p style="color: blue; font-size: 24px;">贵州智信云科技有限公司</p>
<div v-if="jsonData">
<div v-for="(field, fieldName) in jsonData.root.kczy.row[0]" :key="fieldName">
<p v-if="getFieldLabel(fieldName)">{{ getFieldLabel(fieldName) }}: {{ field['#text'] }}</p>
<div class="background">
<p class="company-name">贵州智信云科技有限公司</p>
<div v-if="jsonData" style="padding-top: 20px;">
<div v-if="fieldLabels" v-for="fieldName in Object.keys(fieldLabels)" :key="fieldName">
<p v-if="fieldLabels[fieldName]">{{ fieldLabels[fieldName] }}: {{ jsonData.root.kczy.row[0][fieldName]['#text'] }}</p>
</div>
</div>
<!-- <div>
<div v-if="jsonData">
<div v-for="(field, fieldName) in jsonData.root.kczy.row[0]" :key="fieldName">
<p>{{ fieldName }}: {{ field['#text'] }}</p>
</div>
</div>
</div> -->
<div>
<img :src="qrCodeUrls[0].qrCodeUrl" class="custom-qr-code" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { ref, onMounted } from 'vue';
import axios from 'axios';
import { fetchToken } from '../utils/getToken'; // fetchToken
import { xmlToJson } from '../utils/xmlToJson'; // xmlToJson
import useQRCodeGenerator from '../utils/QRCodeGenerator';// useQRCodeGenerator
const token = ref('');
const data = ref('');
const jsonData = ref(null);
//
const fieldLabels = {
FIELD0035: '联系人',
FIELD0037: '电话',
FIELD0033: '地址',
FIELD0013: '规划 ',
FIELD0006: '建设条件',
FIELD0007: '产业条件',
ID: 'id',
//
}
//
const qrCodeUrls = ref([
useQRCodeGenerator('https://zwy.guizhoujc.com/inc/xmtzk/kc/show-kc.html?id=974420865978944870')
]);
//
onMounted(() => {
qrCodeUrls.value.forEach((generator) => {
generator.generateQRCode(generator.initialUrl);
});
});
// fetchToken
fetchToken().then((response) => {
if (response) {
@ -38,9 +59,9 @@ const fetchData = async (token) => {
try {
const response = await axios.get(`api/seeyon/rest/dee/task/getMineral?token=${token.id}`);
data.value = response.data;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(response.data, 'text/xml');
const json = xmlToJson(xmlDoc);
// console.log(data.value);
//xmljson
const json = xmlToJson(response.data);
jsonData.value = json;
console.log(jsonData.value);
} catch (error) {
@ -48,56 +69,24 @@ const fetchData = async (token) => {
}
};
// XML JSON
function xmlToJson(xml) {
let obj = {};
if (xml.nodeType === 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj['@attributes'] = {};
for (let j = 0; j < xml.attributes.length; j++) {
const attribute = xml.attributes.item(j);
obj['@attributes'][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType === 3) { // text
obj = xml.nodeValue;
}
// do children
if (xml.hasChildNodes()) {
for (let i = 0; i < xml.childNodes.length; i++) {
const item = xml.childNodes.item(i);
const nodeName = item.nodeName;
if (typeof obj[nodeName] === 'undefined') {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof obj[nodeName].push === 'undefined') {
const old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
}
//
function getFieldLabel(fieldName) {
const fieldLabels = {
FIELD0033: '地址',
FIELD0013: '规划 ',
FIELD0035: '联系人',
FIELD0037: '电话',
FIELD0006: '建设条件',
FIELD0007: '产业条件',
ID: 'id',
//
};
return fieldLabels[fieldName] || '';
}
</script>
<style scoped>
.background {
background-image: url("../assets/img/index.png");
background-size:100% 100%;
background-position: center;
/* 其他样式属性 */
}
*{
margin: 0;
padding: 0;
}
.company-name {
color: blue;
font-size: 24px;
text-align: center;
padding-top: 110px; /* 设置文本内容距离顶部的距离为 50 像素 */
font-weight: bold;
}
</style>

View File

@ -1,31 +1,93 @@
<template>
<div>
<div v-if="data">{{ data }}</div>
<div class="background">
<p class="company-name">贵州智信云科技有限公司</p>
<div v-if="companyData" style="padding-top: 20px;">
<div v-for="fieldName in Object.keys(fieldLabels)" :key="fieldName">
<p v-if="fieldLabels[fieldName]">{{ fieldLabels[fieldName] }}: {{ companyData[fieldName]['#text'] }}</p>
</div>
</div>
<div>
<img :src="qrCodeUrls[0].qrCodeUrl" class="custom-qr-code" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { ref, onMounted } from 'vue';
import axios from 'axios';
import { fetchToken } from '../utils/getToken'; // fetchToken
import { xmlToJson } from '../utils/xmlToJson'; // xmlToJson
import useQRCodeGenerator from '../utils/QRCodeGenerator'; // useQRCodeGenerator
const token = ref('');
const data = ref('');
const companyData = ref(null);
//
const fieldLabels = {
FIELD0035: '联系人',
FIELD0037: '电话',
FIELD0033: '地址',
FIELD0013: '规划 ',
FIELD0006: '建设条件',
FIELD0007: '产业条件',
ID: 'id',
//
};
//
const qrCodeUrls = ref([
useQRCodeGenerator('https://zwy.guizhoujc.com/inc/xmtzk/kc/show-kc.html?id=974420865978944870')
]);
// fetchToken
fetchToken().then((response) => {
if (response) {
token.value = response;
fetchData(response); // token fetchData
}
onMounted(() => {
fetchToken().then((response) => {
if (response) {
token.value = response;
fetchData(response); // token fetchData
}
});
});
//token
// token
const fetchData = async (token) => {
try {
const response = await axios.get(`api/seeyon/rest/dee/task/getMineral?token=${token.id}`);
data.value = response.data;
const jsonData = xmlToJson(response.data);
console.log(jsonData);
// IDID
const companyId = '974420865978944870'; // ID
const company = jsonData.root.kczy.row.find((row) => row.ID['#text'] === companyId);
console.log(company);
if (company) {
companyData.value = company;
} else {
console.error('Company not found');
}
} catch (error) {
console.error(error);
}
};
</script>
<style scoped>
.background {
background-image: url("../assets/img/index.png");
background-size: 100% 100%;
background-position: center;
/* 其他样式属性 */
}
* {
margin: 0;
padding: 0;
}
.company-name {
color: blue;
font-size: 24px;
text-align: center;
padding-top: 110px; /* 设置文本内容距离顶部的距离为 50 像素 */
font-weight: bold;
}
</style>

View File

@ -24,7 +24,7 @@
const jsonData = ref(null);
//
const fieldLabels = {
const fieldLabels = ({
FIELD0033: '地址',
FIELD0013: '规划 ',
FIELD0035: '联系人',
@ -33,7 +33,7 @@
FIELD0007: '产业条件',
// ID: 'id',
//
};
});
//
const qrCodeUrls = ref([
@ -88,6 +88,7 @@
font-size: 24px;
text-align: center;
padding-top: 110px; /* 设置文本内容距离顶部的距离为 50 像素 */
font-weight: bold;
}
</style>

View File

@ -1,8 +1,13 @@
<template>
<div>
<div v-if="jsonData">
<div v-for="(field, fieldName) in jsonData.root.kczy.row[0]" :key="fieldName">
<p v-if="fieldLabels[fieldName]">{{ fieldLabels[fieldName] }}: {{ field['#text'] }}</p>
<div class="background">
<p class="company-name">企业列表</p>
<div v-if="jsonData" style="padding-top: 20px;">
<div v-for="(row, rowIndex) in jsonData.root.kczy.row" :key="rowIndex">
<div v-for="(value, fieldName) in row" :key="fieldName">
<p v-if="fieldLabels[fieldName]" @click="showCompanyInfo(value['#text'])">
{{ fieldLabels[fieldName] }}: {{ value['#text'] }}
</p>
</div>
</div>
</div>
</div>
@ -10,21 +15,30 @@
<script setup>
import { ref } from 'vue';
import { useRouter } from 'vue-router'; // 使 useRouter router
import axios from 'axios';
import { fetchToken } from '../utils/getToken'; // fetchToken
import { xmlToJson } from '../utils/xmlToJson'; // xmlToJson
const router = useRouter(); // 使 useRouter router
const token = ref('');
const data = ref('');
const jsonData = ref(null);
//
const fieldLabels = {
FIELD0013: '计划',
FIELD0033: '地址',
FIELD0006: '建设条件',
FIELD0007: '产业条件'
FIELD0033: '公司',
// ID: 'id',
//
};
const showCompanyInfo = (companyId, idValue) => {
// IDID
router.push({ name: 'index', params: { id: companyId} });
};
// fetchToken
fetchToken().then((response) => {
if (response) {
@ -38,51 +52,33 @@ const fetchData = async (token) => {
try {
const response = await axios.get(`api/seeyon/rest/dee/task/getMineral?token=${token.id}`);
data.value = response.data;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(response.data, 'text/xml');
const json = xmlToJson(xmlDoc);
// console.log(data.value);
//xmljson
const json = xmlToJson(response.data);
jsonData.value = json;
console.log(jsonData.value); // jsonData.value
console.log(jsonData.value);
} catch (error) {
console.error(error);
}
};
// XML JSON
function xmlToJson(xml) {
let obj = {};
if (xml.nodeType === 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj['@attributes'] = {};
for (let j = 0; j < xml.attributes.length; j++) {
const attribute = xml.attributes.item(j);
obj['@attributes'][attribute.nodeName] = attribute.nodeValue;
}
}
} else if (xml.nodeType === 3) { // text
obj = xml.nodeValue;
}
// do children
if (xml.hasChildNodes()) {
for (let i = 0; i < xml.childNodes.length; i++) {
const item = xml.childNodes.item(i);
const nodeName = item.nodeName;
if (typeof obj[nodeName] === 'undefined') {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof obj[nodeName].push === 'undefined') {
const old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
}
</script>
<style scoped>
.background {
background-image: url("../assets/img/index.png");
background-size: 100% 100%;
background-position: center;
/* 其他样式属性 */
}
*{
margin: 0;
padding: 0;
}
.company-name {
color: blue;
font-size: 24px;
text-align: center;
padding-top: 110px; /* 设置文本内容距离顶部的距离为 50 像素 */
font-weight: bold;
}
</style>