liyu-pc-base 1.0.554 → 1.0.562
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{aiGenModel-CNwUTMNL.js → aiGenModel-C7SZpnoO.js} +506 -471
- package/dist/{aiGenModel-CNwUTMNL.js.map → aiGenModel-C7SZpnoO.js.map} +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/remotePages/index.js +1 -1
- package/dist/index.js +1 -1
- package/dist/liyu-pc-base.css +1 -1
- package/dist/{remotePages-CbLpjalw.js → remotePages-CiKzUQeL.js} +3 -3
- package/dist/remotePages-CiKzUQeL.js.map +1 -0
- package/dist/syncDataSourceConfig-BXAolK4f.js +443 -0
- package/dist/syncDataSourceConfig-BXAolK4f.js.map +1 -0
- package/dist/{syncExportRawData-dtLd_SL2.js → syncExportRawData-B8xySuut.js} +107 -102
- package/dist/syncExportRawData-B8xySuut.js.map +1 -0
- package/package.json +1 -1
- package/dist/remotePages-CbLpjalw.js.map +0 -1
- package/dist/syncDataSourceConfig-AlcjBERC.js +0 -465
- package/dist/syncDataSourceConfig-AlcjBERC.js.map +0 -1
- package/dist/syncExportRawData-dtLd_SL2.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as e } from "./_plugin-vue_export-helper-B3ysoDQm.js";
|
|
2
2
|
import { t } from "./lodash-CC0qDxjV.js";
|
|
3
3
|
import { getApiData as n } from "./api/api-model.js";
|
|
4
|
-
import { Fragment as r, computed as i, createBlock as a,
|
|
5
|
-
import
|
|
4
|
+
import { Fragment as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, onMounted as f, onUnmounted as p, openBlock as m, ref as h, renderList as g, resolveComponent as _, toDisplayString as v, withCtx as y } from "vue";
|
|
5
|
+
import b from "dayjs";
|
|
6
6
|
//#region src/components/lysync/syncConditionGroup.vue?vue&type=script&lang.ts
|
|
7
|
-
var
|
|
7
|
+
var x = t(), S = d({
|
|
8
8
|
name: "ConditionGroup",
|
|
9
9
|
props: {
|
|
10
10
|
group: {
|
|
@@ -86,17 +86,17 @@ var y = t(), b = u({
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
}),
|
|
89
|
+
}), C = { class: "qb-group" }, w = { class: "qb-group-head" }, T = { class: "qb-group-body" }, E = {
|
|
90
90
|
key: 0,
|
|
91
91
|
class: "qb-subgroup"
|
|
92
|
-
},
|
|
92
|
+
}, D = {
|
|
93
93
|
key: 1,
|
|
94
94
|
class: "qb-rule"
|
|
95
95
|
};
|
|
96
|
-
function
|
|
97
|
-
let f =
|
|
98
|
-
return
|
|
99
|
-
|
|
96
|
+
function O(e, t, n, i, o, d) {
|
|
97
|
+
let f = _("a-select"), p = _("a-button"), h = _("ConditionGroup"), v = _("a-input"), b = _("a-space"), x = _("a-select-option");
|
|
98
|
+
return m(), s("div", C, [c("div", w, [
|
|
99
|
+
u(f, {
|
|
100
100
|
style: { width: "110px" },
|
|
101
101
|
value: e.group.type || "and",
|
|
102
102
|
options: [{
|
|
@@ -108,34 +108,34 @@ function E(e, t, n, i, u, d) {
|
|
|
108
108
|
}],
|
|
109
109
|
"onUpdate:value": t[0] ||= (t) => e.group.type = t
|
|
110
110
|
}, null, 8, ["value"]),
|
|
111
|
-
|
|
111
|
+
u(p, {
|
|
112
112
|
size: "small",
|
|
113
113
|
onClick: e.addRule
|
|
114
114
|
}, {
|
|
115
|
-
default:
|
|
115
|
+
default: y(() => t[1] ||= [l(" 添加条件 ")]),
|
|
116
116
|
_: 1
|
|
117
117
|
}, 8, ["onClick"]),
|
|
118
|
-
|
|
118
|
+
u(p, {
|
|
119
119
|
size: "small",
|
|
120
120
|
style: { "margin-left": "8px" },
|
|
121
121
|
onClick: e.addGroup
|
|
122
122
|
}, {
|
|
123
|
-
default:
|
|
123
|
+
default: y(() => t[2] ||= [l(" 添加分组 ")]),
|
|
124
124
|
_: 1
|
|
125
125
|
}, 8, ["onClick"])
|
|
126
|
-
]),
|
|
126
|
+
]), c("div", T, [(m(!0), s(r, null, g(e.group.conditions, (n, i) => (m(), s(r, { key: i }, [n && typeof n == "object" && "type" in n ? (m(), s("div", E, [u(h, {
|
|
127
127
|
group: n,
|
|
128
128
|
columns: e.columns
|
|
129
|
-
}, null, 8, ["group", "columns"]),
|
|
129
|
+
}, null, 8, ["group", "columns"]), u(p, {
|
|
130
130
|
danger: "",
|
|
131
131
|
size: "small",
|
|
132
132
|
style: { margin: "4px 0" },
|
|
133
133
|
onClick: (t) => e.removeAt(i)
|
|
134
134
|
}, {
|
|
135
|
-
default:
|
|
135
|
+
default: y(() => t[3] ||= [l(" 删除分组 ")]),
|
|
136
136
|
_: 2
|
|
137
|
-
}, 1032, ["onClick"])])) : (
|
|
138
|
-
|
|
137
|
+
}, 1032, ["onClick"])])) : (m(), s("div", D, [
|
|
138
|
+
u(f, {
|
|
139
139
|
value: n.field,
|
|
140
140
|
style: { "min-width": "200px" },
|
|
141
141
|
placeholder: "选择字段",
|
|
@@ -146,7 +146,7 @@ function E(e, t, n, i, u, d) {
|
|
|
146
146
|
"options",
|
|
147
147
|
"onUpdate:value"
|
|
148
148
|
]),
|
|
149
|
-
|
|
149
|
+
u(f, {
|
|
150
150
|
value: n.op,
|
|
151
151
|
style: { width: "200px" },
|
|
152
152
|
options: e.operators,
|
|
@@ -156,29 +156,29 @@ function E(e, t, n, i, u, d) {
|
|
|
156
156
|
"options",
|
|
157
157
|
"onUpdate:value"
|
|
158
158
|
]),
|
|
159
|
-
n.op === "in" ? (
|
|
159
|
+
n.op === "in" ? (m(), a(f, {
|
|
160
160
|
key: 0,
|
|
161
161
|
mode: "tags",
|
|
162
162
|
style: { "min-width": "220px" },
|
|
163
163
|
value: Array.isArray(n.value) ? n.value : [],
|
|
164
164
|
placeholder: "输入多个值后回车",
|
|
165
165
|
"onUpdate:value": (e) => n.value = e
|
|
166
|
-
}, null, 8, ["value", "onUpdate:value"])) : n.op === "between" ? (
|
|
166
|
+
}, null, 8, ["value", "onUpdate:value"])) : n.op === "between" ? (m(), a(b, {
|
|
167
167
|
key: 1,
|
|
168
168
|
size: 4
|
|
169
169
|
}, {
|
|
170
|
-
default:
|
|
171
|
-
|
|
170
|
+
default: y(() => [
|
|
171
|
+
u(v, {
|
|
172
172
|
style: { width: "120px" },
|
|
173
173
|
value: Array.isArray(n.value) ? n.value?.[0] : void 0,
|
|
174
174
|
placeholder: "起始值",
|
|
175
175
|
"onUpdate:value": (t) => e.updateBetween(n, 0, t)
|
|
176
176
|
}, null, 8, ["value", "onUpdate:value"]),
|
|
177
|
-
t[4] ||=
|
|
177
|
+
t[4] ||= c("span", { style: {
|
|
178
178
|
padding: "0 4px",
|
|
179
179
|
color: "#999"
|
|
180
180
|
} }, "~", -1),
|
|
181
|
-
|
|
181
|
+
u(v, {
|
|
182
182
|
style: { width: "120px" },
|
|
183
183
|
value: Array.isArray(n.value) ? n.value?.[1] : void 0,
|
|
184
184
|
placeholder: "结束值",
|
|
@@ -186,50 +186,50 @@ function E(e, t, n, i, u, d) {
|
|
|
186
186
|
}, null, 8, ["value", "onUpdate:value"])
|
|
187
187
|
]),
|
|
188
188
|
_: 2
|
|
189
|
-
}, 1024)) : n.op === "is" ? (
|
|
189
|
+
}, 1024)) : n.op === "is" ? (m(), a(f, {
|
|
190
190
|
key: 2,
|
|
191
191
|
style: { "min-width": "160px" },
|
|
192
192
|
value: n.value,
|
|
193
193
|
placeholder: "选择 NULL/TRUE/FALSE",
|
|
194
194
|
"onUpdate:value": (e) => n.value = e
|
|
195
195
|
}, {
|
|
196
|
-
default:
|
|
197
|
-
|
|
198
|
-
default:
|
|
196
|
+
default: y(() => [
|
|
197
|
+
u(x, { value: null }, {
|
|
198
|
+
default: y(() => t[5] ||= [l("NULL")]),
|
|
199
199
|
_: 1
|
|
200
200
|
}),
|
|
201
|
-
|
|
202
|
-
default:
|
|
201
|
+
u(x, { value: !0 }, {
|
|
202
|
+
default: y(() => t[6] ||= [l("TRUE")]),
|
|
203
203
|
_: 1
|
|
204
204
|
}),
|
|
205
|
-
|
|
206
|
-
default:
|
|
205
|
+
u(x, { value: !1 }, {
|
|
206
|
+
default: y(() => t[7] ||= [l("FALSE")]),
|
|
207
207
|
_: 1
|
|
208
208
|
})
|
|
209
209
|
]),
|
|
210
210
|
_: 2
|
|
211
|
-
}, 1032, ["value", "onUpdate:value"])) : (
|
|
211
|
+
}, 1032, ["value", "onUpdate:value"])) : (m(), a(v, {
|
|
212
212
|
key: 3,
|
|
213
213
|
style: { "min-width": "220px" },
|
|
214
214
|
value: n.value,
|
|
215
215
|
placeholder: "输入值",
|
|
216
216
|
"onUpdate:value": (e) => n.value = e
|
|
217
217
|
}, null, 8, ["value", "onUpdate:value"])),
|
|
218
|
-
|
|
218
|
+
u(p, {
|
|
219
219
|
danger: "",
|
|
220
220
|
size: "small",
|
|
221
221
|
onClick: (t) => e.removeAt(i)
|
|
222
222
|
}, {
|
|
223
|
-
default:
|
|
223
|
+
default: y(() => t[8] ||= [l(" 删除 ")]),
|
|
224
224
|
_: 2
|
|
225
225
|
}, 1032, ["onClick"])
|
|
226
226
|
]))], 64))), 128))])]);
|
|
227
227
|
}
|
|
228
228
|
//#endregion
|
|
229
229
|
//#region src/components/lysync/syncExportRawData.vue?vue&type=script&lang.ts
|
|
230
|
-
var
|
|
230
|
+
var k = d({
|
|
231
231
|
name: "ExportRawData",
|
|
232
|
-
components: { ConditionGroup: /* @__PURE__ */ e(
|
|
232
|
+
components: { ConditionGroup: /* @__PURE__ */ e(S, [["render", O], ["__scopeId", "data-v-1c5e0123"]]) },
|
|
233
233
|
props: {
|
|
234
234
|
title: {
|
|
235
235
|
type: String,
|
|
@@ -243,26 +243,29 @@ var D = u({
|
|
|
243
243
|
}
|
|
244
244
|
},
|
|
245
245
|
setup(e, { emit: t }) {
|
|
246
|
-
let r =
|
|
246
|
+
let r = h(window.innerHeight - 550), a = (0, x.debounce)(() => {
|
|
247
247
|
r.value = window.innerHeight - 550;
|
|
248
|
-
}, 200), o =
|
|
248
|
+
}, 200), o = h(!1), s = h([]), c = h(!0), l = h({}), u = i(() => {
|
|
249
249
|
let e = [];
|
|
250
|
-
if (s.value?.length)
|
|
251
|
-
let
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
250
|
+
if (s.value?.length) {
|
|
251
|
+
for (let t of Object.keys(s.value[0])) if (t != "_id") {
|
|
252
|
+
let n = l.value[t] || t;
|
|
253
|
+
e.push({
|
|
254
|
+
title: n,
|
|
255
|
+
dataIndex: t,
|
|
256
|
+
key: t,
|
|
257
|
+
isMatch: !!l.value[t]
|
|
258
|
+
});
|
|
259
|
+
}
|
|
257
260
|
}
|
|
258
261
|
return e;
|
|
259
|
-
}),
|
|
262
|
+
}), d = async () => {
|
|
260
263
|
let t = await n({ export_task_id: e.record?.id }, `${e.record.model_app}/query_sync_model_field_list`);
|
|
261
|
-
if (t?.data?.length) for (let e of t.data) l.value[e.field_name] = e.name;
|
|
262
|
-
},
|
|
264
|
+
if (t?.data?.length) for (let e of t.data) l.value[e.field_name] = e.name, l.value[e.name] = e.name;
|
|
265
|
+
}, m = h(1), g = h(10), _ = h(0), v = i(() => {
|
|
263
266
|
let e = u.value.length * 200;
|
|
264
267
|
return e < 1e3 ? 1e3 : e;
|
|
265
|
-
}),
|
|
268
|
+
}), y = h([
|
|
266
269
|
"10",
|
|
267
270
|
"20",
|
|
268
271
|
"50",
|
|
@@ -272,48 +275,49 @@ var D = u({
|
|
|
272
275
|
"2000",
|
|
273
276
|
"5000",
|
|
274
277
|
"10000"
|
|
275
|
-
]), S =
|
|
278
|
+
]), S = h({
|
|
276
279
|
type: "and",
|
|
277
280
|
conditions: []
|
|
278
|
-
}), C =
|
|
281
|
+
}), C = h(null), w = h([]), T = () => {
|
|
279
282
|
t("cancel");
|
|
280
283
|
}, E = async () => {
|
|
281
284
|
o.value = !0;
|
|
282
285
|
try {
|
|
283
286
|
let t = {
|
|
284
287
|
export_task_id: e.record?.id,
|
|
285
|
-
current:
|
|
288
|
+
current: m.value,
|
|
286
289
|
pageSize: g.value,
|
|
287
290
|
conditions: S.value,
|
|
288
291
|
sort_fields: w.value.length > 0 ? w.value : void 0
|
|
289
292
|
};
|
|
290
293
|
C.value && C.value.length === 2 && C.value[0] && C.value[1] && (t.time_range = C.value);
|
|
291
|
-
let r = await n(t, `${e.record.model_app}/query_raw_data`);
|
|
292
|
-
|
|
294
|
+
let r = await n(t, `${e.record.model_app}/query_raw_data`), i = r?.data || [], a = 0;
|
|
295
|
+
for (let e of i) e._id = a, a++;
|
|
296
|
+
s.value = i, m.value = r?.current ?? m.value, g.value = r?.pageSize ?? g.value, _.value = r?.total ?? 0;
|
|
293
297
|
} finally {
|
|
294
298
|
o.value = !1;
|
|
295
299
|
}
|
|
296
300
|
};
|
|
297
|
-
return
|
|
298
|
-
window.addEventListener("resize", a), a(),
|
|
301
|
+
return f(() => {
|
|
302
|
+
window.addEventListener("resize", a), a(), d();
|
|
299
303
|
let t = "";
|
|
300
|
-
t = e.record?.data_start_date ? e.record?.data_start_date + " 00:00:00" :
|
|
301
|
-
}),
|
|
304
|
+
t = e.record?.data_start_date ? e.record?.data_start_date + " 00:00:00" : b().subtract(1, "day").format("YYYY-MM-DD HH:mm:ss"), C.value = [t, b().format("YYYY-MM-DD HH:mm:ss")];
|
|
305
|
+
}), p(() => {
|
|
302
306
|
window.removeEventListener("resize", a);
|
|
303
307
|
}), {
|
|
304
308
|
height: r,
|
|
305
309
|
handleCancel: T,
|
|
306
310
|
open: c,
|
|
307
311
|
column: u,
|
|
308
|
-
width:
|
|
312
|
+
width: v,
|
|
309
313
|
datasource: s,
|
|
310
|
-
current:
|
|
314
|
+
current: m,
|
|
311
315
|
pageSize: g,
|
|
312
316
|
total: _,
|
|
313
317
|
handlePageChange: (e, t) => {
|
|
314
|
-
|
|
318
|
+
m.value = e, t && t !== g.value && (g.value = t), E();
|
|
315
319
|
},
|
|
316
|
-
pageOptions:
|
|
320
|
+
pageOptions: y,
|
|
317
321
|
conditionsRoot: S,
|
|
318
322
|
resetConditions: () => {
|
|
319
323
|
S.value = {
|
|
@@ -322,27 +326,27 @@ var D = u({
|
|
|
322
326
|
}, C.value = null;
|
|
323
327
|
},
|
|
324
328
|
applySearch: () => {
|
|
325
|
-
|
|
329
|
+
m.value = 1, E();
|
|
326
330
|
},
|
|
327
331
|
loading: o,
|
|
328
332
|
handleTableChange: (e, t, n, { action: r }) => {
|
|
329
333
|
r === "sort" && (n?.field ? w.value = [{
|
|
330
334
|
field: n.field,
|
|
331
335
|
order: n.order === "ascend" ? "asc" : "desc"
|
|
332
|
-
}] : w.value = [],
|
|
336
|
+
}] : w.value = [], m.value = 1, E());
|
|
333
337
|
},
|
|
334
338
|
timeRange: C
|
|
335
339
|
};
|
|
336
340
|
}
|
|
337
|
-
}),
|
|
341
|
+
}), A = { style: {
|
|
338
342
|
display: "flex",
|
|
339
343
|
"justify-content": "space-between",
|
|
340
344
|
"align-items": "center"
|
|
341
|
-
} },
|
|
342
|
-
function
|
|
343
|
-
let
|
|
344
|
-
return
|
|
345
|
-
title: "原始数据",
|
|
345
|
+
} }, j = { class: "conditions-scroll" }, M = { class: "time-range-row" }, N = { key: 1 };
|
|
346
|
+
function P(e, t, n, r, i, d) {
|
|
347
|
+
let f = _("a-button"), p = _("ConditionGroup"), h = _("a-range-picker"), g = _("a-space"), b = _("a-card"), x = _("a-tag"), S = _("s-table"), C = _("a-spin"), w = _("a-modal");
|
|
348
|
+
return m(), a(w, {
|
|
349
|
+
title: "原始数据 (仅返回50条数据)",
|
|
346
350
|
width: "1300px",
|
|
347
351
|
open: e.open,
|
|
348
352
|
"onUpdate:open": t[1] ||= (t) => e.open = t,
|
|
@@ -350,52 +354,52 @@ function j(e, t, n, r, i, o) {
|
|
|
350
354
|
centered: "",
|
|
351
355
|
onCancel: e.handleCancel
|
|
352
356
|
}, {
|
|
353
|
-
footer:
|
|
357
|
+
footer: y(() => [u(f, {
|
|
354
358
|
key: "back",
|
|
355
359
|
onClick: e.handleCancel
|
|
356
360
|
}, {
|
|
357
|
-
default:
|
|
361
|
+
default: y(() => t[6] ||= [l(" 关闭 ")]),
|
|
358
362
|
_: 1
|
|
359
|
-
}, 8, ["onClick"]),
|
|
363
|
+
}, 8, ["onClick"]), u(f, {
|
|
360
364
|
key: "ok",
|
|
361
365
|
type: "primary",
|
|
362
366
|
onClick: e.handleCancel
|
|
363
367
|
}, {
|
|
364
|
-
default:
|
|
368
|
+
default: y(() => t[7] ||= [l(" 确定 ")]),
|
|
365
369
|
_: 1
|
|
366
370
|
}, 8, ["onClick"])]),
|
|
367
|
-
default:
|
|
371
|
+
default: y(() => [c("div", null, [u(b, {
|
|
368
372
|
size: "small",
|
|
369
373
|
bordered: !1,
|
|
370
374
|
style: { "margin-bottom": "12px" }
|
|
371
375
|
}, {
|
|
372
|
-
default:
|
|
376
|
+
default: y(() => [u(g, {
|
|
373
377
|
direction: "vertical",
|
|
374
378
|
size: 8,
|
|
375
379
|
style: { width: "100%" }
|
|
376
380
|
}, {
|
|
377
|
-
default:
|
|
378
|
-
|
|
381
|
+
default: y(() => [
|
|
382
|
+
c("div", A, [t[4] ||= c("div", { style: { "font-weight": "600" } }, "查询条件", -1), c("div", null, [u(f, {
|
|
379
383
|
size: "small",
|
|
380
384
|
onClick: e.resetConditions
|
|
381
385
|
}, {
|
|
382
|
-
default:
|
|
386
|
+
default: y(() => t[2] ||= [l(" 重置 ")]),
|
|
383
387
|
_: 1
|
|
384
|
-
}, 8, ["onClick"]),
|
|
388
|
+
}, 8, ["onClick"]), u(f, {
|
|
385
389
|
type: "primary",
|
|
386
390
|
size: "small",
|
|
387
391
|
style: { "margin-left": "8px" },
|
|
388
392
|
onClick: e.applySearch
|
|
389
393
|
}, {
|
|
390
|
-
default:
|
|
394
|
+
default: y(() => t[3] ||= [l(" 查询 ")]),
|
|
391
395
|
_: 1
|
|
392
396
|
}, 8, ["onClick"])])]),
|
|
393
|
-
|
|
397
|
+
c("div", j, [u(p, {
|
|
394
398
|
group: e.conditionsRoot,
|
|
395
399
|
columns: e.column,
|
|
396
400
|
"is-root": !0
|
|
397
401
|
}, null, 8, ["group", "columns"])]),
|
|
398
|
-
|
|
402
|
+
c("div", M, [t[5] ||= c("span", { class: "field-label" }, "时间范围:", -1), u(h, {
|
|
399
403
|
value: e.timeRange,
|
|
400
404
|
"onUpdate:value": t[0] ||= (t) => e.timeRange = t,
|
|
401
405
|
"show-time": { format: "HH:mm:ss" },
|
|
@@ -408,37 +412,38 @@ function j(e, t, n, r, i, o) {
|
|
|
408
412
|
_: 1
|
|
409
413
|
})]),
|
|
410
414
|
_: 1
|
|
411
|
-
}),
|
|
412
|
-
default:
|
|
415
|
+
}), u(C, { spinning: e.loading }, {
|
|
416
|
+
default: y(() => [e.datasource?.length ? (m(), a(S, {
|
|
417
|
+
key: 0,
|
|
413
418
|
columns: e.column,
|
|
414
419
|
dataSource: e.datasource,
|
|
415
|
-
rowKey: "
|
|
416
|
-
pagination:
|
|
417
|
-
current: e.current,
|
|
418
|
-
pageSize: e.pageSize,
|
|
419
|
-
total: e.total,
|
|
420
|
-
onChange: e.handlePageChange,
|
|
421
|
-
showSizeChanger: !0,
|
|
422
|
-
showQuickJumper: !0,
|
|
423
|
-
pageSizeOptions: e.pageOptions
|
|
424
|
-
},
|
|
420
|
+
rowKey: "_id",
|
|
421
|
+
pagination: !1,
|
|
425
422
|
scroll: {
|
|
426
423
|
y: e.height,
|
|
427
424
|
x: e.width
|
|
428
425
|
},
|
|
429
426
|
onChange: e.handleTableChange
|
|
430
|
-
},
|
|
427
|
+
}, {
|
|
428
|
+
headerCell: y(({ title: e, column: t }) => [t.isMatch ? (m(), a(x, {
|
|
429
|
+
key: 0,
|
|
430
|
+
color: "blue"
|
|
431
|
+
}, {
|
|
432
|
+
default: y(() => [l(v(e), 1)]),
|
|
433
|
+
_: 2
|
|
434
|
+
}, 1024)) : o("", !0), t.isMatch ? o("", !0) : (m(), s("span", N, v(e), 1))]),
|
|
435
|
+
_: 1
|
|
436
|
+
}, 8, [
|
|
431
437
|
"columns",
|
|
432
438
|
"dataSource",
|
|
433
|
-
"pagination",
|
|
434
439
|
"scroll",
|
|
435
440
|
"onChange"
|
|
436
|
-
])]),
|
|
441
|
+
])) : o("", !0)]),
|
|
437
442
|
_: 1
|
|
438
443
|
}, 8, ["spinning"])])]),
|
|
439
444
|
_: 1
|
|
440
445
|
}, 8, ["open", "onCancel"]);
|
|
441
446
|
}
|
|
442
|
-
var
|
|
447
|
+
var F = /*#__PURE__*/ e(k, [["render", P], ["__scopeId", "data-v-1f8cf6f5"]]);
|
|
443
448
|
//#endregion
|
|
444
|
-
export {
|
|
449
|
+
export { F as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncExportRawData-B8xySuut.js","names":[],"sources":["../src/components/lysync/syncConditionGroup.vue","../src/components/lysync/syncConditionGroup.vue","../src/components/lysync/syncExportRawData.vue","../src/components/lysync/syncExportRawData.vue"],"sourcesContent":["<template>\n <div class=\"qb-group\">\n <div class=\"qb-group-head\">\n <a-select\n style=\"width: 110px\"\n :value=\"group.type || 'and'\"\n :options=\"[\n { label: '并且', value: 'and' },\n { label: '或者', value: 'or' },\n ]\"\n @update:value=\"(v:string) => (group.type = v)\"\n />\n <a-button\n size=\"small\"\n @click=\"addRule\"\n >\n 添加条件\n </a-button>\n <a-button\n size=\"small\"\n style=\"margin-left: 8px\"\n @click=\"addGroup\"\n >\n 添加分组\n </a-button>\n </div>\n\n <div class=\"qb-group-body\">\n <template\n v-for=\"(child, idx) in group.conditions\"\n :key=\"idx\"\n >\n <!-- 分组 -->\n <div\n v-if=\"child && typeof child === 'object' && 'type' in child\"\n class=\"qb-subgroup\"\n >\n <ConditionGroup\n :group=\"child\"\n :columns=\"columns\"\n />\n <a-button\n danger\n size=\"small\"\n style=\"margin: 4px 0\"\n @click=\"removeAt(idx)\"\n >\n 删除分组\n </a-button>\n </div>\n <!-- 规则 -->\n <div\n v-else\n class=\"qb-rule\"\n >\n <a-select\n :value=\"child.field\"\n style=\"min-width: 200px\"\n placeholder=\"选择字段\"\n :options=\"fieldOptions\"\n @update:value=\"(v:string)=> (child.field = v)\"\n />\n <a-select\n :value=\"child.op\"\n style=\"width: 200px\"\n :options=\"operators\"\n @update:value=\"(v:string)=> (child.op = v)\"\n />\n\n <!-- 值输入区域 -->\n <template v-if=\"child.op === 'in'\">\n <a-select\n mode=\"tags\"\n style=\"min-width: 220px\"\n :value=\"Array.isArray(child.value) ? child.value : []\"\n placeholder=\"输入多个值后回车\"\n @update:value=\"(v:any)=> (child.value = v)\"\n />\n </template>\n <template v-else-if=\"child.op === 'between'\">\n <a-space :size=\"4\">\n <a-input\n style=\"width: 120px\"\n :value=\"Array.isArray(child.value) ? child.value?.[0] : undefined\"\n placeholder=\"起始值\"\n @update:value=\"(v:any)=> updateBetween(child, 0, v)\"\n />\n <span style=\"padding: 0 4px; color: #999\">~</span>\n <a-input\n style=\"width: 120px\"\n :value=\"Array.isArray(child.value) ? child.value?.[1] : undefined\"\n placeholder=\"结束值\"\n @update:value=\"(v:any)=> updateBetween(child, 1, v)\"\n />\n </a-space>\n </template>\n <template v-else-if=\"child.op === 'is'\">\n <a-select\n style=\"min-width: 160px\"\n :value=\"child.value\"\n placeholder=\"选择 NULL/TRUE/FALSE\"\n @update:value=\"(v:any)=> (child.value = v)\"\n >\n <a-select-option :value=\"null\">NULL</a-select-option>\n <a-select-option :value=\"true\">TRUE</a-select-option>\n <a-select-option :value=\"false\">FALSE</a-select-option>\n </a-select>\n </template>\n <template v-else>\n <a-input\n style=\"min-width: 220px\"\n :value=\"child.value\"\n placeholder=\"输入值\"\n @update:value=\"(v:any)=> (child.value = v)\"\n />\n </template>\n\n <a-button\n danger\n size=\"small\"\n @click=\"removeAt(idx)\"\n >\n 删除\n </a-button>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue';\n\nexport default defineComponent({\n name: 'ConditionGroup',\n props: {\n group: { type: Object as any, required: true },\n columns: { type: Array as any, required: true },\n isRoot: { type: Boolean, default: false },\n },\n setup(props) {\n const operators = [\n { label: '等于', value: '=' },\n { label: '不等于', value: '!=' },\n { label: '大于', value: '>' },\n { label: '大于或等于', value: '>=' },\n { label: '小于', value: '<' },\n { label: '小于或等于', value: '<=' },\n { label: '包含', value: 'in' },\n { label: '模糊匹配', value: 'like' },\n { label: '介于', value: 'between' },\n ];\n\n const fieldOptions = computed(() =>\n (props.columns as any[]).map((c: any) => ({ label: c.title, value: c.dataIndex })),\n );\n\n const addRule = () => {\n (props.group as any).conditions.push({ field: '', op: '=', value: '' });\n };\n const addGroup = () => {\n (props.group as any).conditions.push({ type: 'and', conditions: [] });\n };\n const removeAt = (idx: number) => {\n (props.group as any).conditions.splice(idx, 1);\n };\n const updateBetween = (rule: any, pos: number, v: any) => {\n const arr = Array.isArray(rule.value) ? rule.value : [undefined, undefined];\n arr[pos] = v;\n rule.value = arr;\n };\n\n return {\n operators,\n fieldOptions,\n addRule,\n addGroup,\n removeAt,\n updateBetween,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.qb-group {\n border-left: 2px solid #f0f0f0;\n padding-left: 8px;\n}\n.qb-group-head {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n}\n.qb-group-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.qb-rule {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.qb-subgroup {\n padding: 6px 0 6px 8px;\n border-left: 2px dashed #f0f0f0;\n}\n</style>\n","<template>\n <div class=\"qb-group\">\n <div class=\"qb-group-head\">\n <a-select\n style=\"width: 110px\"\n :value=\"group.type || 'and'\"\n :options=\"[\n { label: '并且', value: 'and' },\n { label: '或者', value: 'or' },\n ]\"\n @update:value=\"(v:string) => (group.type = v)\"\n />\n <a-button\n size=\"small\"\n @click=\"addRule\"\n >\n 添加条件\n </a-button>\n <a-button\n size=\"small\"\n style=\"margin-left: 8px\"\n @click=\"addGroup\"\n >\n 添加分组\n </a-button>\n </div>\n\n <div class=\"qb-group-body\">\n <template\n v-for=\"(child, idx) in group.conditions\"\n :key=\"idx\"\n >\n <!-- 分组 -->\n <div\n v-if=\"child && typeof child === 'object' && 'type' in child\"\n class=\"qb-subgroup\"\n >\n <ConditionGroup\n :group=\"child\"\n :columns=\"columns\"\n />\n <a-button\n danger\n size=\"small\"\n style=\"margin: 4px 0\"\n @click=\"removeAt(idx)\"\n >\n 删除分组\n </a-button>\n </div>\n <!-- 规则 -->\n <div\n v-else\n class=\"qb-rule\"\n >\n <a-select\n :value=\"child.field\"\n style=\"min-width: 200px\"\n placeholder=\"选择字段\"\n :options=\"fieldOptions\"\n @update:value=\"(v:string)=> (child.field = v)\"\n />\n <a-select\n :value=\"child.op\"\n style=\"width: 200px\"\n :options=\"operators\"\n @update:value=\"(v:string)=> (child.op = v)\"\n />\n\n <!-- 值输入区域 -->\n <template v-if=\"child.op === 'in'\">\n <a-select\n mode=\"tags\"\n style=\"min-width: 220px\"\n :value=\"Array.isArray(child.value) ? child.value : []\"\n placeholder=\"输入多个值后回车\"\n @update:value=\"(v:any)=> (child.value = v)\"\n />\n </template>\n <template v-else-if=\"child.op === 'between'\">\n <a-space :size=\"4\">\n <a-input\n style=\"width: 120px\"\n :value=\"Array.isArray(child.value) ? child.value?.[0] : undefined\"\n placeholder=\"起始值\"\n @update:value=\"(v:any)=> updateBetween(child, 0, v)\"\n />\n <span style=\"padding: 0 4px; color: #999\">~</span>\n <a-input\n style=\"width: 120px\"\n :value=\"Array.isArray(child.value) ? child.value?.[1] : undefined\"\n placeholder=\"结束值\"\n @update:value=\"(v:any)=> updateBetween(child, 1, v)\"\n />\n </a-space>\n </template>\n <template v-else-if=\"child.op === 'is'\">\n <a-select\n style=\"min-width: 160px\"\n :value=\"child.value\"\n placeholder=\"选择 NULL/TRUE/FALSE\"\n @update:value=\"(v:any)=> (child.value = v)\"\n >\n <a-select-option :value=\"null\">NULL</a-select-option>\n <a-select-option :value=\"true\">TRUE</a-select-option>\n <a-select-option :value=\"false\">FALSE</a-select-option>\n </a-select>\n </template>\n <template v-else>\n <a-input\n style=\"min-width: 220px\"\n :value=\"child.value\"\n placeholder=\"输入值\"\n @update:value=\"(v:any)=> (child.value = v)\"\n />\n </template>\n\n <a-button\n danger\n size=\"small\"\n @click=\"removeAt(idx)\"\n >\n 删除\n </a-button>\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed } from 'vue';\n\nexport default defineComponent({\n name: 'ConditionGroup',\n props: {\n group: { type: Object as any, required: true },\n columns: { type: Array as any, required: true },\n isRoot: { type: Boolean, default: false },\n },\n setup(props) {\n const operators = [\n { label: '等于', value: '=' },\n { label: '不等于', value: '!=' },\n { label: '大于', value: '>' },\n { label: '大于或等于', value: '>=' },\n { label: '小于', value: '<' },\n { label: '小于或等于', value: '<=' },\n { label: '包含', value: 'in' },\n { label: '模糊匹配', value: 'like' },\n { label: '介于', value: 'between' },\n ];\n\n const fieldOptions = computed(() =>\n (props.columns as any[]).map((c: any) => ({ label: c.title, value: c.dataIndex })),\n );\n\n const addRule = () => {\n (props.group as any).conditions.push({ field: '', op: '=', value: '' });\n };\n const addGroup = () => {\n (props.group as any).conditions.push({ type: 'and', conditions: [] });\n };\n const removeAt = (idx: number) => {\n (props.group as any).conditions.splice(idx, 1);\n };\n const updateBetween = (rule: any, pos: number, v: any) => {\n const arr = Array.isArray(rule.value) ? rule.value : [undefined, undefined];\n arr[pos] = v;\n rule.value = arr;\n };\n\n return {\n operators,\n fieldOptions,\n addRule,\n addGroup,\n removeAt,\n updateBetween,\n };\n },\n});\n</script>\n\n<style lang=\"less\" scoped>\n.qb-group {\n border-left: 2px solid #f0f0f0;\n padding-left: 8px;\n}\n.qb-group-head {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n}\n.qb-group-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.qb-rule {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.qb-subgroup {\n padding: 6px 0 6px 8px;\n border-left: 2px dashed #f0f0f0;\n}\n</style>\n","<template>\n <a-modal\n title=\"原始数据 (仅返回50条数据)\"\n width=\"1300px\"\n v-model:open=\"open\"\n :maskClosable=\"false\"\n centered\n @cancel=\"handleCancel\"\n >\n <div>\n <a-card\n size=\"small\"\n :bordered=\"false\"\n style=\"margin-bottom: 12px\"\n >\n <a-space\n direction=\"vertical\"\n :size=\"8\"\n style=\"width: 100%\"\n >\n <div style=\"display: flex; justify-content: space-between; align-items: center\">\n <div style=\"font-weight: 600\">查询条件</div>\n <div>\n <a-button\n size=\"small\"\n @click=\"resetConditions\"\n >\n 重置\n </a-button>\n <a-button\n type=\"primary\"\n size=\"small\"\n style=\"margin-left: 8px\"\n @click=\"applySearch\"\n >\n 查询\n </a-button>\n </div>\n </div>\n <div class=\"conditions-scroll\">\n <ConditionGroup\n :group=\"conditionsRoot\"\n :columns=\"column\"\n :is-root=\"true\"\n />\n </div>\n <div class=\"time-range-row\">\n <span class=\"field-label\">时间范围:</span>\n <a-range-picker\n v-model:value=\"timeRange\"\n :show-time=\"{ format: 'HH:mm:ss' }\"\n format=\"YYYY-MM-DD HH:mm:ss\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n :placeholder=\"['开始时间', '结束时间']\"\n style=\"width: 440px\"\n />\n </div>\n </a-space>\n </a-card>\n <a-spin :spinning=\"loading\">\n <s-table\n v-if=\"datasource?.length\"\n :columns=\"column\"\n :dataSource=\"datasource\"\n rowKey=\"_id\"\n :pagination=\"false\"\n :scroll=\"{ y: height, x: width }\"\n @change=\"handleTableChange\"\n >\n <template #headerCell=\"{ title, column }\">\n <a-tag\n color=\"blue\"\n v-if=\"column.isMatch\"\n >\n {{ title }}\n </a-tag>\n <span v-if=\"!column.isMatch\">\n {{ title }}\n </span>\n </template>\n </s-table>\n </a-spin>\n </div>\n <template #footer>\n <a-button\n key=\"back\"\n @click=\"handleCancel\"\n >\n 关闭\n </a-button>\n <a-button\n key=\"ok\"\n type=\"primary\"\n @click=\"handleCancel\"\n >\n 确定\n </a-button>\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onUnmounted, ref, onMounted, computed } from 'vue';\nimport { debounce } from 'lodash';\nimport ConditionGroup from './syncConditionGroup.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport dayjs from 'dayjs';\n\nexport default defineComponent({\n name: 'ExportRawData',\n components: { ConditionGroup },\n props: {\n title: {\n type: String,\n required: false,\n default: () => '',\n },\n record: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n },\n setup(props, { emit }) {\n const height = ref(window.innerHeight - 550);\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 550;\n }, 200);\n const loading = ref(false);\n\n const datasource = ref<any[]>([]);\n const open = ref(true);\n const titleMap = ref({});\n\n const column = computed(() => {\n const res = [];\n if (datasource.value?.length) {\n for (const key of Object.keys(datasource.value[0])) {\n if (key != '_id') {\n const title = titleMap.value[key] || key;\n res.push({\n title: title,\n dataIndex: key,\n key: key,\n isMatch: !!titleMap.value[key],\n });\n }\n }\n }\n return res;\n });\n\n const get_column_config = async () => {\n const res: any = await getApiData(\n {\n export_task_id: (props as any).record?.id,\n },\n `${props.record.model_app}/query_sync_model_field_list`,\n );\n if (res?.data?.length) {\n for (const item of res.data) {\n titleMap.value[item.field_name] = item.name;\n titleMap.value[item.name] = item.name;\n }\n }\n };\n const current = ref<number>(1);\n const pageSize = ref<number>(10);\n const total = ref<number>(0);\n const width = computed(() => {\n let w = column.value.length * 200;\n return w < 1000 ? 1000 : w;\n });\n const pageOptions = ref<string[]>([\n '10',\n '20',\n '50',\n '100',\n '500',\n '1000',\n '2000',\n '5000',\n '10000',\n ]);\n\n // 条件构建器根\n const conditionsRoot = ref<any>({ type: 'and', conditions: [] });\n\n // 时间范围([start, end] 字符串,格式 YYYY-MM-DD HH:mm:ss;用于后端 start_time/end_time)\n const timeRange = ref<any>(null);\n\n // 排序状态 - 支持多字段排序\n const sortFields = ref<Array<{ field: string; order: string }>>([]);\n\n const handleCancel = () => {\n emit('cancel');\n };\n\n const get_datasource = async () => {\n loading.value = true;\n try {\n const params: any = {\n export_task_id: (props as any).record?.id,\n current: current.value,\n pageSize: pageSize.value,\n conditions: conditionsRoot.value,\n sort_fields: sortFields.value.length > 0 ? sortFields.value : undefined,\n };\n // 时间范围:前端传则带上(供后端作为 start_time/end_time 渲染 SQL),不传则回退默认区间\n if (\n timeRange.value &&\n timeRange.value.length === 2 &&\n timeRange.value[0] &&\n timeRange.value[1]\n ) {\n params.time_range = timeRange.value;\n }\n const res: any = await getApiData(params, `${props.record.model_app}/query_raw_data`);\n\n const tmpData = res?.data || [];\n let index = 0;\n for (const item of tmpData) {\n item._id = index;\n index++;\n }\n datasource.value = tmpData;\n current.value = res?.current ?? current.value;\n pageSize.value = res?.pageSize ?? pageSize.value;\n total.value = res?.total ?? 0;\n } finally {\n loading.value = false;\n }\n };\n\n const handlePageChange = (page: number, size?: number) => {\n current.value = page;\n if (size && size !== pageSize.value) pageSize.value = size;\n get_datasource();\n };\n\n const handleTableChange = (pagination: any, filters: any, sorter: any, { action }: any) => {\n if (action === 'sort') {\n if (sorter?.field) {\n const field = sorter.field;\n const order = sorter.order === 'ascend' ? 'asc' : 'desc';\n sortFields.value = [{ field: field, order: order }];\n } else {\n // 清除所有排序\n sortFields.value = [];\n }\n\n // 重置到第一页并重新查询\n current.value = 1;\n get_datasource();\n }\n };\n\n const resetConditions = () => {\n conditionsRoot.value = { type: 'and', conditions: [] };\n timeRange.value = null;\n };\n const applySearch = () => {\n current.value = 1;\n get_datasource();\n };\n\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n get_column_config();\n let start_time = '';\n if (props.record?.data_start_date) {\n start_time = props.record?.data_start_date + ' 00:00:00';\n } else {\n start_time = dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss');\n }\n timeRange.value = [start_time, dayjs().format('YYYY-MM-DD HH:mm:ss')];\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n height,\n handleCancel,\n open,\n column,\n width,\n datasource,\n current,\n pageSize,\n total,\n handlePageChange,\n pageOptions,\n // 条件\n conditionsRoot,\n resetConditions,\n applySearch,\n loading,\n handleTableChange,\n // 时间范围\n timeRange,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.qb-group {\n border-left: 2px solid #f0f0f0;\n padding-left: 8px;\n}\n.qb-group-head {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n}\n.qb-group-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.qb-rule {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.qb-subgroup {\n padding: 6px 0 6px 8px;\n border-left: 2px dashed #f0f0f0;\n}\n.conditions-scroll {\n max-height: 200px;\n overflow-y: auto;\n padding-right: 8px;\n}\n.time-range-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n.field-label {\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n}\n</style>\n","<template>\n <a-modal\n title=\"原始数据 (仅返回50条数据)\"\n width=\"1300px\"\n v-model:open=\"open\"\n :maskClosable=\"false\"\n centered\n @cancel=\"handleCancel\"\n >\n <div>\n <a-card\n size=\"small\"\n :bordered=\"false\"\n style=\"margin-bottom: 12px\"\n >\n <a-space\n direction=\"vertical\"\n :size=\"8\"\n style=\"width: 100%\"\n >\n <div style=\"display: flex; justify-content: space-between; align-items: center\">\n <div style=\"font-weight: 600\">查询条件</div>\n <div>\n <a-button\n size=\"small\"\n @click=\"resetConditions\"\n >\n 重置\n </a-button>\n <a-button\n type=\"primary\"\n size=\"small\"\n style=\"margin-left: 8px\"\n @click=\"applySearch\"\n >\n 查询\n </a-button>\n </div>\n </div>\n <div class=\"conditions-scroll\">\n <ConditionGroup\n :group=\"conditionsRoot\"\n :columns=\"column\"\n :is-root=\"true\"\n />\n </div>\n <div class=\"time-range-row\">\n <span class=\"field-label\">时间范围:</span>\n <a-range-picker\n v-model:value=\"timeRange\"\n :show-time=\"{ format: 'HH:mm:ss' }\"\n format=\"YYYY-MM-DD HH:mm:ss\"\n value-format=\"YYYY-MM-DD HH:mm:ss\"\n :placeholder=\"['开始时间', '结束时间']\"\n style=\"width: 440px\"\n />\n </div>\n </a-space>\n </a-card>\n <a-spin :spinning=\"loading\">\n <s-table\n v-if=\"datasource?.length\"\n :columns=\"column\"\n :dataSource=\"datasource\"\n rowKey=\"_id\"\n :pagination=\"false\"\n :scroll=\"{ y: height, x: width }\"\n @change=\"handleTableChange\"\n >\n <template #headerCell=\"{ title, column }\">\n <a-tag\n color=\"blue\"\n v-if=\"column.isMatch\"\n >\n {{ title }}\n </a-tag>\n <span v-if=\"!column.isMatch\">\n {{ title }}\n </span>\n </template>\n </s-table>\n </a-spin>\n </div>\n <template #footer>\n <a-button\n key=\"back\"\n @click=\"handleCancel\"\n >\n 关闭\n </a-button>\n <a-button\n key=\"ok\"\n type=\"primary\"\n @click=\"handleCancel\"\n >\n 确定\n </a-button>\n </template>\n </a-modal>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onUnmounted, ref, onMounted, computed } from 'vue';\nimport { debounce } from 'lodash';\nimport ConditionGroup from './syncConditionGroup.vue';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport dayjs from 'dayjs';\n\nexport default defineComponent({\n name: 'ExportRawData',\n components: { ConditionGroup },\n props: {\n title: {\n type: String,\n required: false,\n default: () => '',\n },\n record: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n },\n setup(props, { emit }) {\n const height = ref(window.innerHeight - 550);\n const onresize: any = debounce(() => {\n height.value = window.innerHeight - 550;\n }, 200);\n const loading = ref(false);\n\n const datasource = ref<any[]>([]);\n const open = ref(true);\n const titleMap = ref({});\n\n const column = computed(() => {\n const res = [];\n if (datasource.value?.length) {\n for (const key of Object.keys(datasource.value[0])) {\n if (key != '_id') {\n const title = titleMap.value[key] || key;\n res.push({\n title: title,\n dataIndex: key,\n key: key,\n isMatch: !!titleMap.value[key],\n });\n }\n }\n }\n return res;\n });\n\n const get_column_config = async () => {\n const res: any = await getApiData(\n {\n export_task_id: (props as any).record?.id,\n },\n `${props.record.model_app}/query_sync_model_field_list`,\n );\n if (res?.data?.length) {\n for (const item of res.data) {\n titleMap.value[item.field_name] = item.name;\n titleMap.value[item.name] = item.name;\n }\n }\n };\n const current = ref<number>(1);\n const pageSize = ref<number>(10);\n const total = ref<number>(0);\n const width = computed(() => {\n let w = column.value.length * 200;\n return w < 1000 ? 1000 : w;\n });\n const pageOptions = ref<string[]>([\n '10',\n '20',\n '50',\n '100',\n '500',\n '1000',\n '2000',\n '5000',\n '10000',\n ]);\n\n // 条件构建器根\n const conditionsRoot = ref<any>({ type: 'and', conditions: [] });\n\n // 时间范围([start, end] 字符串,格式 YYYY-MM-DD HH:mm:ss;用于后端 start_time/end_time)\n const timeRange = ref<any>(null);\n\n // 排序状态 - 支持多字段排序\n const sortFields = ref<Array<{ field: string; order: string }>>([]);\n\n const handleCancel = () => {\n emit('cancel');\n };\n\n const get_datasource = async () => {\n loading.value = true;\n try {\n const params: any = {\n export_task_id: (props as any).record?.id,\n current: current.value,\n pageSize: pageSize.value,\n conditions: conditionsRoot.value,\n sort_fields: sortFields.value.length > 0 ? sortFields.value : undefined,\n };\n // 时间范围:前端传则带上(供后端作为 start_time/end_time 渲染 SQL),不传则回退默认区间\n if (\n timeRange.value &&\n timeRange.value.length === 2 &&\n timeRange.value[0] &&\n timeRange.value[1]\n ) {\n params.time_range = timeRange.value;\n }\n const res: any = await getApiData(params, `${props.record.model_app}/query_raw_data`);\n\n const tmpData = res?.data || [];\n let index = 0;\n for (const item of tmpData) {\n item._id = index;\n index++;\n }\n datasource.value = tmpData;\n current.value = res?.current ?? current.value;\n pageSize.value = res?.pageSize ?? pageSize.value;\n total.value = res?.total ?? 0;\n } finally {\n loading.value = false;\n }\n };\n\n const handlePageChange = (page: number, size?: number) => {\n current.value = page;\n if (size && size !== pageSize.value) pageSize.value = size;\n get_datasource();\n };\n\n const handleTableChange = (pagination: any, filters: any, sorter: any, { action }: any) => {\n if (action === 'sort') {\n if (sorter?.field) {\n const field = sorter.field;\n const order = sorter.order === 'ascend' ? 'asc' : 'desc';\n sortFields.value = [{ field: field, order: order }];\n } else {\n // 清除所有排序\n sortFields.value = [];\n }\n\n // 重置到第一页并重新查询\n current.value = 1;\n get_datasource();\n }\n };\n\n const resetConditions = () => {\n conditionsRoot.value = { type: 'and', conditions: [] };\n timeRange.value = null;\n };\n const applySearch = () => {\n current.value = 1;\n get_datasource();\n };\n\n onMounted(() => {\n window.addEventListener('resize', onresize);\n onresize();\n get_column_config();\n let start_time = '';\n if (props.record?.data_start_date) {\n start_time = props.record?.data_start_date + ' 00:00:00';\n } else {\n start_time = dayjs().subtract(1, 'day').format('YYYY-MM-DD HH:mm:ss');\n }\n timeRange.value = [start_time, dayjs().format('YYYY-MM-DD HH:mm:ss')];\n });\n onUnmounted(() => {\n window.removeEventListener('resize', onresize);\n });\n return {\n height,\n handleCancel,\n open,\n column,\n width,\n datasource,\n current,\n pageSize,\n total,\n handlePageChange,\n pageOptions,\n // 条件\n conditionsRoot,\n resetConditions,\n applySearch,\n loading,\n handleTableChange,\n // 时间范围\n timeRange,\n };\n },\n});\n</script>\n<style lang=\"less\" scoped>\n.qb-group {\n border-left: 2px solid #f0f0f0;\n padding-left: 8px;\n}\n.qb-group-head {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n}\n.qb-group-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.qb-rule {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.qb-subgroup {\n padding: 6px 0 6px 8px;\n border-left: 2px dashed #f0f0f0;\n}\n.conditions-scroll {\n max-height: 200px;\n overflow-y: auto;\n padding-right: 8px;\n}\n.time-range-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n.field-label {\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n}\n</style>\n"],"mappings":"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"}
|