|
@@ -1,5 +1,7 @@
|
|
|
<script setup lang="ts">
|
|
|
import { magicApi } from "@/utils/database/magic-api-request";
|
|
|
+import { useResizeObserver } from "@vueuse/core";
|
|
|
+import { stringIsBlank } from "@/utils/blank-utils";
|
|
|
|
|
|
defineOptions({
|
|
|
name: "RenderTable",
|
|
@@ -15,32 +17,42 @@ const store = reactive({
|
|
|
data: [],
|
|
|
spans: [] as { span: HTMLSpanElement; code: string }[],
|
|
|
business: new Set(),
|
|
|
+
|
|
|
+ businessData: {},
|
|
|
});
|
|
|
|
|
|
-const dataMap = computed(() => {
|
|
|
- const tmp = {};
|
|
|
- store.data.forEach(item => {
|
|
|
- tmp[item.code] = item;
|
|
|
+const divRaf = ref<HTMLDivElement>();
|
|
|
+
|
|
|
+useResizeObserver(divRaf, () => {
|
|
|
+ if (stringIsBlank(props.htmlData)) return;
|
|
|
+ nextTick(() => {
|
|
|
+ if (props.htmlData) renderTable(false);
|
|
|
});
|
|
|
- return tmp;
|
|
|
});
|
|
|
|
|
|
-const divRaf = ref<HTMLDivElement>();
|
|
|
+async function replace(query = true) {
|
|
|
+ if (query) {
|
|
|
+ store.businessData = await magicApi({
|
|
|
+ url: "/public/dashboard/dataSource",
|
|
|
+ method: "post",
|
|
|
+ data: {
|
|
|
+ isSource: false,
|
|
|
+ business: Array.from(store.business.values()),
|
|
|
+ wardCode: props.wardCode,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ return res;
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ return {};
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
-async function replace() {
|
|
|
- await magicApi({
|
|
|
- url: "/public/dashboard/dataSource",
|
|
|
- method: "post",
|
|
|
- data: {
|
|
|
- isSource: false,
|
|
|
- business: Array.from(store.business.values()),
|
|
|
- wardCode: props.wardCode,
|
|
|
- },
|
|
|
- }).then(res => {
|
|
|
- store.spans.forEach(item => {
|
|
|
- item.span.innerHTML = res[item.code] ?? "";
|
|
|
- });
|
|
|
+ store.spans.forEach(item => {
|
|
|
+ item.span.innerHTML = store.businessData[item.code] ?? "";
|
|
|
});
|
|
|
+
|
|
|
await nextTick();
|
|
|
store.spans.forEach(item => {
|
|
|
const td = (item.span as Element).closest("td");
|
|
@@ -68,7 +80,7 @@ async function replace() {
|
|
|
function getBusiness(spans: HTMLSpanElement[]) {
|
|
|
spans.forEach(span => {
|
|
|
const code = span.getAttribute("data-element-code");
|
|
|
- span.innerHTML = dataMap.value?.[code]?.data || "";
|
|
|
+ span.innerHTML = "";
|
|
|
store.business.add(code);
|
|
|
store.spans.push({
|
|
|
span,
|
|
@@ -77,7 +89,7 @@ function getBusiness(spans: HTMLSpanElement[]) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-async function renderTable() {
|
|
|
+async function renderTable(query = true) {
|
|
|
await nextTick();
|
|
|
store.business = new Set();
|
|
|
store.spans = [];
|
|
@@ -96,7 +108,7 @@ async function renderTable() {
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
- replace();
|
|
|
+ replace(query);
|
|
|
}
|
|
|
|
|
|
watch(
|