提交 125d0c16 编写于 作者: Cano1997's avatar Cano1997

update: 更新插件代码

上级 9fdf4344
var ce = Object.defineProperty;
var de = (e, t, s) => t in e ? ce(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
var E = (e, t, s) => (de(e, typeof t != "symbol" ? t + "" : t, s), s);
var U = (e, t, s) => (de(e, typeof t != "symbol" ? t + "" : t, s), s);
import { IndexViewModel as ue, GridModel as he, ViewType as me, ModelUtil as pe } from "@ibiz-template/model";
import { GridFieldColumnController as Z, GridRowController as X, WFStepTraceViewController as fe, UploadEditorController as J, GridController as ge, GridNotifyState as ve, WFDynaEditView3Controller as we } from "@ibiz-template/controller";
import { defineComponent as k, computed as T, h as c, getCurrentInstance as R, ref as g, watch as N, toRefs as B, onUnmounted as be } from "vue";
import { useNamespace as U, useViewController as Q, usePropsWatch as z, getUploadProps as ye, getEditorEmits as K, getGridUploadProps as _, getGridEditorEmits as $, useClickOutside as Ce, useEventListener as Fe, getInputProps as xe, getGridInputProps as Se, useGridCellEditor as ke, useControlController as Le, useWFStepTraceViewController as Ue, useEditView3Controller as Ee } from "@ibiz-template/vue-util";
import { colorBlend as Ne, HttpError as Y, isImage as Pe, uploadFile as Ie, RuntimeError as Te } from "@ibiz-template/core";
import { GridFieldColumnController as Z, GridRowController as X, WFStepTraceViewController as fe, UploadEditorController as J, GridController as ge, GridNotifyState as we, WFDynaEditView3Controller as ve } from "@ibiz-template/controller";
import { defineComponent as L, computed as D, h as c, getCurrentInstance as A, ref as g, watch as P, toRefs as $, onUnmounted as be } from "vue";
import { useNamespace as E, useViewController as Q, usePropsWatch as B, getUploadProps as ye, getEditorEmits as K, getGridUploadProps as z, getGridEditorEmits as _, useClickOutside as Ce, useEventListener as xe, getInputProps as ke, getGridInputProps as Fe, useGridCellEditor as Se, useControlController as Le, useWFStepTraceViewController as Ee, useEditView3Controller as Ue } from "@ibiz-template/vue-util";
import { colorBlend as Pe, HttpError as Y, isImage as Ne, uploadFile as Ie, RuntimeError as Te } from "@ibiz-template/core";
import { getCookie as De, createUUID as W } from "qx-util";
import { debounce as Re } from "lodash-es";
import { ViewMode as ee, UIActionHandler as te, PluginStaticResource as Ae } from "@ibiz-template/runtime";
const Me = k({
import { debounce as Me } from "lodash-es";
import { ViewMode as ee, UIActionHandler as te, PluginStaticResource as Re } from "@ibiz-template/runtime";
const Ae = L({
name: "CodeListGridColumn",
props: {
controller: {
......@@ -22,28 +22,28 @@ const Me = k({
}
},
setup(e) {
const t = U("grid-field-column"), s = T(() => {
const t = E("grid-field-column"), s = D(() => {
var r;
if (e.controller.model.source.cLConvertMode !== "FRONT")
return [];
const n = e.row.data[e.controller.model.codeName];
return (r = e.controller.codeListItems) != null && r.length && n ? n.split(",").map((h) => {
const m = e.controller.codeListItems.find((f) => f.value === h);
if (m) {
const f = m.color || "#515a6e";
return (r = e.controller.codeListItems) != null && r.length && n ? n.split(",").map((m) => {
const p = e.controller.codeListItems.find((f) => f.value === m);
if (p) {
const f = p.color || "#515a6e";
return {
text: m.text,
text: p.text,
colorStyle: t.cssVarBlock({
color: f,
"border-color": f,
"bg-color": Ne(f, "#fff")
"bg-color": Pe(f, "#fff")
})
};
}
}).filter(Boolean) : [];
}), o = (n) => {
e.controller.isLinkColumn && e.controller.openLinkView(e.row, n);
}, i = T(() => {
}, i = D(() => {
let n = "";
switch (e.controller.model.align) {
case "LEFT":
......@@ -92,7 +92,7 @@ class Ge extends fe {
* @type {string}
* @memberof PresetWFChartViewController
*/
E(this, "imgSrc");
U(this, "imgSrc");
}
async getUIData() {
const s = Object.assign(this.context.clone(), this.params), o = await this.entityService.wf.getWFProcessDiagram(s), i = new Blob([o.data], {
......@@ -101,7 +101,7 @@ class Ge extends fe {
this.imgSrc = URL.createObjectURL(i);
}
}
const Oe = k({
const Oe = L({
name: "PresetWFChartView",
props: {
context: Object,
......@@ -121,10 +121,10 @@ const Oe = k({
}
},
setup(e) {
const t = U("preset-wf-chart-view"), {
const t = E("preset-wf-chart-view"), {
proxy: s
} = R(), o = Q(s, (i, n) => new Ge(e.modelPath, i, n));
return z(s, "deName", o.setDeName.bind(o)), {
} = A(), o = Q(s, (i, n) => new Ge(e.modelPath, i, n));
return B(s, "deName", o.setDeName.bind(o)), {
c: o,
ns: t
};
......@@ -139,7 +139,7 @@ const Oe = k({
})]);
}
});
const Be = k({
const $e = L({
name: "WFToolbar",
props: {
wfLinks: {
......@@ -150,7 +150,7 @@ const Be = k({
setup(e, {
emit: t
}) {
const s = U("wf-toolbar"), o = async (n, r) => {
const s = E("wf-toolbar"), o = async (n, r) => {
t("wf-link-click", n, r);
};
return {
......@@ -181,161 +181,166 @@ const Be = k({
}, [t.sequenceFlowName || ""])]);
})]);
}
}), ze = typeof btoa == "function", j = typeof Buffer == "function";
}), Be = typeof btoa == "function", j = typeof Buffer == "function";
typeof TextDecoder == "function" && new TextDecoder();
const V = typeof TextEncoder == "function" ? new TextEncoder() : void 0, _e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", D = Array.prototype.slice.call(_e);
const V = typeof TextEncoder == "function" ? new TextEncoder() : void 0, ze = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", R = Array.prototype.slice.call(ze);
((e) => {
let t = {};
return e.forEach((s, o) => t[s] = o), t;
})(D);
const P = String.fromCharCode.bind(String);
})(R);
const T = String.fromCharCode.bind(String);
typeof Uint8Array.from == "function" && Uint8Array.from.bind(Uint8Array);
const $e = (e) => e.replace(/=/g, "").replace(/[+\/]/g, (t) => t == "+" ? "-" : "_"), je = (e) => {
const _e = (e) => e.replace(/=/g, "").replace(/[+\/]/g, (t) => t == "+" ? "-" : "_"), je = (e) => {
let t, s, o, i, n = "";
const r = e.length % 3;
for (let a = 0; a < e.length; ) {
if ((s = e.charCodeAt(a++)) > 255 || (o = e.charCodeAt(a++)) > 255 || (i = e.charCodeAt(a++)) > 255)
throw new TypeError("invalid character found");
t = s << 16 | o << 8 | i, n += D[t >> 18 & 63] + D[t >> 12 & 63] + D[t >> 6 & 63] + D[t & 63];
t = s << 16 | o << 8 | i, n += R[t >> 18 & 63] + R[t >> 12 & 63] + R[t >> 6 & 63] + R[t & 63];
}
return r ? n.slice(0, r - 3) + "===".substring(r) : n;
}, se = ze ? (e) => btoa(e) : j ? (e) => Buffer.from(e, "binary").toString("base64") : je, We = j ? (e) => Buffer.from(e).toString("base64") : (e) => {
}, se = Be ? (e) => btoa(e) : j ? (e) => Buffer.from(e, "binary").toString("base64") : je, We = j ? (e) => Buffer.from(e).toString("base64") : (e) => {
let s = [];
for (let o = 0, i = e.length; o < i; o += 4096)
s.push(P.apply(null, e.subarray(o, o + 4096)));
s.push(T.apply(null, e.subarray(o, o + 4096)));
return se(s.join(""));
}, Ve = (e) => {
if (e.length < 2) {
var t = e.charCodeAt(0);
return t < 128 ? e : t < 2048 ? P(192 | t >>> 6) + P(128 | t & 63) : P(224 | t >>> 12 & 15) + P(128 | t >>> 6 & 63) + P(128 | t & 63);
return t < 128 ? e : t < 2048 ? T(192 | t >>> 6) + T(128 | t & 63) : T(224 | t >>> 12 & 15) + T(128 | t >>> 6 & 63) + T(128 | t & 63);
} else {
var t = 65536 + (e.charCodeAt(0) - 55296) * 1024 + (e.charCodeAt(1) - 56320);
return P(240 | t >>> 18 & 7) + P(128 | t >>> 12 & 63) + P(128 | t >>> 6 & 63) + P(128 | t & 63);
return T(240 | t >>> 18 & 7) + T(128 | t >>> 12 & 63) + T(128 | t >>> 6 & 63) + T(128 | t & 63);
}
}, qe = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, He = (e) => e.replace(qe, Ve), q = j ? (e) => Buffer.from(e, "utf8").toString("base64") : V ? (e) => We(V.encode(e)) : (e) => se(He(e)), oe = (e, t = !1) => t ? $e(q(e)) : q(e);
}, qe = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, He = (e) => e.replace(qe, Ve), q = j ? (e) => Buffer.from(e, "utf8").toString("base64") : V ? (e) => We(V.encode(e)) : (e) => se(He(e)), oe = (e, t = !1) => t ? _e(q(e)) : q(e);
function Ze(e, t, s) {
var S;
var k;
const o = g([]), i = g({
Authorization: `Bearer ${De("access_token")}`
}), n = g(""), r = g(""), a = {
count: 0,
cacheFiles: []
// iview上传过程中不能改default-file-list,所以需要缓存
}, d = (S = s.editorParams) == null ? void 0 : S.blackList;
let h = [];
d && typeof d == "string" && (h = d.split(",")), N(
}, d = (k = s.editorParams) == null ? void 0 : k.blackList;
let m = [];
d && typeof d == "string" && (m = d.split(",")), P(
() => e.value,
(l) => {
o.value = l ? JSON.parse(l) : [];
},
{ immediate: !0 }
), N(
), P(
() => e.data,
(l) => {
if (l) {
const u = s.calcBaseUrl(l);
n.value = u.uploadUrl, r.value = u.downloadUrl;
const h = s.calcBaseUrl(l);
n.value = h.uploadUrl, r.value = h.downloadUrl;
}
},
{ immediate: !0, deep: !0 }
), N(
), P(
o,
(l) => {
l != null && l.length && r.value && l.forEach((u) => {
u.url = u.url || r.value.replace("%fileId%", u.id);
l != null && l.length && r.value && l.forEach((h) => {
h.url = h.url || r.value.replace("%fileId%", h.id);
});
},
{ immediate: !0 }
), N(
), P(
r,
(l) => {
l && o.value.length && o.value.forEach((u) => {
u.url = r.value.replace("%fileId%", u.id);
l && o.value.length && o.value.forEach((h) => {
h.url = r.value.replace("%fileId%", h.id);
});
},
{ immediate: !0 }
);
const m = () => {
const l = [...o.value, ...a.cacheFiles], u = l.length > 0 ? JSON.stringify(l.map((w) => ({ name: w.name, id: w.id }))) : null;
a.cacheFiles = [], t(u);
const p = () => {
const l = [...o.value, ...a.cacheFiles], h = l.length > 0 ? JSON.stringify(l.map((b) => ({ name: b.name, id: b.id }))) : null;
a.cacheFiles = [], t(h);
}, f = (l) => {
const u = l.name.trim().toLowerCase();
if (h.some((x) => u.endsWith(`.${x}`)))
return ibiz.message.error(`不可上传 ${h.join("、")}类型的文件!`), !1;
const h = l.name.trim().toLowerCase();
if (m.some((C) => h.endsWith(`.${C}`)))
return ibiz.message.error(`不可上传 ${m.join("、")}类型的文件!`), !1;
a.count += 1;
}, C = (l) => {
}, F = (l) => {
l && (a.cacheFiles.push({
name: l.filename,
id: l.fileid
}), a.count -= 1, a.count === 0 && m());
}, b = (l, u) => {
}), a.count -= 1, a.count === 0 && p());
}, y = (l, h) => {
throw a.count -= 1, new Y({
response: { data: u, status: l.status }
response: { data: h, status: l.status }
// eslint-disable-next-line @typescript-eslint/no-explicit-any
});
}, F = (l) => {
}, x = (l) => {
if (e.disabled)
return;
const u = o.value.findIndex((w) => w.id === l.id);
u !== -1 && o.value.splice(u, 1), m();
}, v = (l) => {
const u = l.url || r.value.replace("%fileId%", l.id);
s.fileDownload({ url: u, name: l.name });
}, p = g(!1), y = g(""), I = g("");
const h = o.value.findIndex((b) => b.id === l.id);
h !== -1 && o.value.splice(h, 1), p();
}, w = (l) => {
const b = (s.parent.form || s.parent.grid).model.appEntity.deName, C = `${l.id}|${b}|${e.data.srfkey}|${s.context.srfpersonid || s.context.srfuserid}`, M = l.url || r.value.replace("%fileId%", l.id);
s.fileDownload({
url: `${M}?key=${window.btoa(C)}${Math.floor(
1e3 + Math.random() * 9e3
)}`,
name: l.name
});
}, u = g(!1), v = g(""), N = g("");
return {
uploadUrl: n,
downloadUrl: r,
headers: i,
files: o,
onDownload: v,
onError: b,
onRemove: F,
onSuccess: C,
onDownload: w,
onError: y,
onRemove: x,
onSuccess: F,
beforeUpload: f,
showModal: p,
modalTitle: y,
iframeUrl: I,
showModal: u,
modalTitle: v,
iframeUrl: N,
onModalCancel: () => {
p.value = !1, y.value = "", I.value = "";
u.value = !1, v.value = "", N.value = "";
},
previewFile: (l) => {
p.value = !0, y.value = l.name;
const u = window.Environment.previewFileUrl;
if (u) {
const w = encodeURIComponent(
u.value = !0, v.value = l.name;
const h = window.Environment.previewFileUrl;
if (h) {
const b = encodeURIComponent(
oe(
`${window.location.origin}${l.url}?fullfilename=${l.name}`
)
);
I.value = `${u}/onlinePreview?url=${w}`;
N.value = `${h}/onlinePreview?url=${b}`;
}
}
};
}
const Xe = k({
const Xe = L({
name: "SyFileUpload",
props: ye(),
emits: K(),
setup(e, {
emit: t
}) {
const s = U("sy-file-upload"), o = e.controller, {
const s = E("sy-file-upload"), o = e.controller, {
uploadUrl: i,
headers: n,
files: r,
onDownload: a,
onError: d,
onRemove: h,
onSuccess: m,
onRemove: m,
onSuccess: p,
beforeUpload: f,
showModal: C,
modalTitle: b,
iframeUrl: F,
onModalCancel: v,
previewFile: p
} = Ze(e, (y) => {
t("change", y);
}, o);
showModal: F,
modalTitle: y,
iframeUrl: x,
onModalCancel: w,
previewFile: u
} = Ze(e, (I) => {
t("change", I);
}, o), v = D(() => o.editorParams.showPreview ? o.editorParams.showPreview === "true" : window.Environment.kkviewon);
return {
ns: s,
c: o,
......@@ -344,14 +349,17 @@ const Xe = k({
files: r,
onDownload: a,
onError: d,
onRemove: h,
onSuccess: m,
onRemove: m,
onSuccess: p,
beforeUpload: f,
showModal: C,
modalTitle: b,
iframeUrl: F,
onModalCancel: v,
previewFile: p
showModal: F,
modalTitle: y,
iframeUrl: x,
onModalCancel: w,
onPreview: (I) => {
v.value && u(I);
},
showPreview: v
};
},
render(e) {
......@@ -441,13 +449,13 @@ const Xe = k({
attrs: {
d: "M8,6.25590375 C9.72432306,6.25590375 11.1277921,7.62964308 11.175675,9.34238963 L11.1769379,9.43284162 L11.1769379,12.7456325 C11.1769379,14.5002069 9.75457434,15.9225704 8,15.9225704 C6.27567694,15.9225704 4.8722079,14.5488311 4.824325,12.8360845 L4.82306213,12.7456325 L4.82306213,10.7559037 C4.82306213,10.4797614 5.04691975,10.2559037 5.32306213,10.2559037 C5.58296083,10.2559037 5.79654502,10.4541998 5.82077327,10.7077504 L5.82306213,10.7559037 L5.82306213,12.7456325 C5.82306213,13.9479221 6.79771041,14.9225704 8,14.9225704 C9.17615286,14.9225704 10.1344543,13.9898375 10.1755637,12.8237123 L10.1769379,12.7456325 L10.1769379,9.43284162 C10.1769379,8.23055203 9.20228959,7.25590375 8,7.25590375 C7.72385763,7.25590375 7.5,7.03204612 7.5,6.75590375 C7.5,6.47976137 7.72385763,6.25590375 8,6.25590375 Z M8,0.0774295852 C9.72432306,0.0774295852 11.1277921,1.45116892 11.175675,3.16391546 L11.1769379,3.25436746 L11.1769379,5.24409625 C11.1769379,5.52023863 10.9530802,5.74409625 10.6769379,5.74409625 C10.4170392,5.74409625 10.203455,5.54580022 10.1792267,5.29224959 L10.1769379,5.24409625 L10.1769379,3.25436746 C10.1769379,2.05207787 9.20228959,1.07742959 8,1.07742959 C6.82384714,1.07742959 5.86554572,2.01016247 5.82443628,3.17628769 L5.82306213,3.25436746 L5.82306213,6.56715838 C5.82306213,7.76944797 6.79771041,8.74409625 8,8.74409625 C8.27614237,8.74409625 8.5,8.96795388 8.5,9.24409625 C8.5,9.52023863 8.27614237,9.74409625 8,9.74409625 C6.27567694,9.74409625 4.8722079,8.37035692 4.824325,6.65761037 L4.82306213,6.56715838 L4.82306213,3.25436746 C4.82306213,1.49979312 6.24542566,0.0774295852 8,0.0774295852 Z",
id: "形状结合",
fill: "#000000",
fill: "currentColor",
transform: "translate(8.000000, 8.000000) rotate(-315.000000) translate(-8.000000, -8.000000) "
}
})])])])])]), e("div", {
class: this.ns.b("file-item-right-title"),
on: {
click: () => this.previewFile(t)
click: () => this.onPreview(t)
}
}, [t.name]), e("div", {
class: this.ns.b("file-item-right-action")
......@@ -493,10 +501,10 @@ const Xe = k({
width: "16",
height: "16"
}
})])])])]), e("span", {
})])])])]), this.showPreview ? e("span", {
class: this.ns.e("icon-preview"),
on: {
click: () => this.previewFile(t)
click: () => this.onPreview(t)
}
}, [e("svg", {
attrs: {
......@@ -542,7 +550,7 @@ const Xe = k({
width: "16",
height: "16"
}
})])])])])]), this.disabled || this.readonly ? null : e("span", {
})])])])])]) : null, this.disabled || this.readonly ? null : e("span", {
class: this.ns.e("icon-remove"),
on: {
click: () => this.onRemove(t)
......@@ -608,16 +616,16 @@ const Xe = k({
})])]);
}
});
function G(e, t) {
function O(e, t) {
if (e.url = t.replace("%fileId%", e.id), e.status || (e.status = "finished"), !e.fileName) {
const s = e.name.lastIndexOf(".");
e.fileName = e.name.substring(0, s), e.fileExt = e.name.substring(s), e.isImage = Pe(e.name);
e.fileName = e.name.substring(0, s), e.fileExt = e.name.substring(s), e.isImage = Ne(e.name);
}
return e;
}
function ie(e) {
const t = g(""), s = g(""), o = g([]);
return N(
return P(
e.data,
(i) => {
if (i) {
......@@ -626,19 +634,19 @@ function ie(e) {
}
},
{ immediate: !0, deep: !0 }
), N(
), P(
e.value,
(i) => {
o.value = i ? JSON.parse(i) : [], o.value.length && s.value && o.value.forEach((n) => {
G(n, s.value);
O(n, s.value);
});
},
{ immediate: !0 }
), N(
), P(
s,
(i) => {
i && o.value.length && o.value.forEach((n) => {
G(n, i);
O(n, i);
});
},
{ immediate: !0 }
......@@ -649,14 +657,14 @@ function ie(e) {
};
}
function ne(e) {
var L, S;
const t = g("undo"), s = g([]), { downloadUrl: o, value: i, uploadUrl: n, controller: r } = e, a = (S = (L = r == null ? void 0 : r.value) == null ? void 0 : L.editorParams) == null ? void 0 : S.blackList;
var S, k;
const t = g("undo"), s = g([]), { downloadUrl: o, value: i, uploadUrl: n, controller: r } = e, a = (k = (S = r == null ? void 0 : r.value) == null ? void 0 : S.editorParams) == null ? void 0 : k.blackList;
let d = [];
a && typeof a == "string" && (d = a.split(",")), N(
a && typeof a == "string" && (d = a.split(",")), P(
i,
(l) => {
l.length > 0 && (s.value = [], l.forEach((u) => {
s.value.push(G(u, o.value));
l.length > 0 && (s.value = [], l.forEach((h) => {
s.value.push(O(h, o.value));
}));
},
{
......@@ -664,90 +672,90 @@ function ne(e) {
deep: !0
}
);
const h = (l, u) => {
const w = [];
return u.forEach((x, A) => {
const M = x.name.trim().toLowerCase();
if (d.some((le) => M.endsWith(`.${le}`))) {
w.push(A);
const m = (l, h) => {
const b = [];
return h.forEach((C, M) => {
const G = C.name.trim().toLowerCase();
if (d.some((le) => G.endsWith(`.${le}`))) {
b.push(M);
return;
}
s.value.push({
name: x.name,
status: x.status,
percentage: x.percentage,
id: x.uid,
name: C.name,
status: C.status,
percentage: C.percentage,
id: C.uid,
url: ""
});
}), w.length === u.length ? (ibiz.message.error(`不可上传 ${d.join("、")}类型的文件!`), !1) : (w.length && (w.forEach((x) => {
l.splice(x, 1), u.splice(x, 1);
}), b.length === h.length ? (ibiz.message.error(`不可上传 ${d.join("、")}类型的文件!`), !1) : (b.length && (b.forEach((C) => {
l.splice(C, 1), h.splice(C, 1);
}), ibiz.message.error(`不可上传 ${d.join("、")}类型的文件!`)), !0);
}, m = (l) => {
l.forEach((u) => {
s.value.find((w) => w.id === u.uid ? (w.percentage = u.percentage, !0) : !1);
}, p = (l) => {
l.forEach((h) => {
s.value.find((b) => b.id === h.uid ? (b.percentage = h.percentage, !0) : !1);
});
}, f = (l, u) => {
l.forEach((w) => {
s.value.find((x) => x.id === w.uid ? (x.status = w.status, x.id = u.data.fileid, x.name = u.data.filename, G(x, o.value), !0) : !1);
}, f = (l, h) => {
l.forEach((b) => {
s.value.find((C) => C.id === b.uid ? (C.status = b.status, C.id = h.data.fileid, C.name = h.data.filename, O(C, o.value), !0) : !1);
});
}, C = (l, u) => {
var x;
l.forEach((A) => {
s.value.find((M) => M.id === A.uid ? (M.status = A.status, !0) : !1);
}, F = (l, h) => {
var C;
l.forEach((M) => {
s.value.find((G) => G.id === M.uid ? (G.status = M.status, !0) : !1);
});
const w = new Y(u);
const b = new Y(h);
ibiz.notification.error({
title: (x = w.status) == null ? void 0 : x.toString(),
desc: w.message,
title: (C = b.status) == null ? void 0 : C.toString(),
desc: b.message,
duration: 10
});
}, b = (l) => {
s.value = s.value.filter((u) => u.status === "finished"), t.value = "done";
}, F = () => {
}, y = (l) => {
s.value = s.value.filter((h) => h.status === "finished"), t.value = "done";
}, x = () => {
Ie({
multiple: e.multiple,
accept: e.accept,
uploadUrl: n.value,
beforeUpload: h,
progress: m,
beforeUpload: m,
progress: p,
success: f,
error: C,
finish: b
error: F,
finish: y
});
}, v = g(!1), p = g(""), y = g("");
}, w = g(!1), u = g(""), v = g("");
return {
selectFile: F,
selectFile: x,
fileList: s,
uploadState: t,
showModal: v,
modalTitle: p,
iframeUrl: y,
showModal: w,
modalTitle: u,
iframeUrl: v,
onModalCancel: () => {
v.value = !1, p.value = "", y.value = "";
w.value = !1, u.value = "", v.value = "";
},
previewFile: (l) => {
v.value = !0, p.value = l.name;
const u = window.Environment.previewFileUrl;
if (u) {
const w = encodeURIComponent(
w.value = !0, u.value = l.name;
const h = window.Environment.previewFileUrl;
if (h) {
const b = encodeURIComponent(
oe(
`${window.location.origin}${l.url}?fullfilename=${l.name}`
)
);
y.value = `${u}/onlinePreview?url=${w}`;
v.value = `${h}/onlinePreview?url=${b}`;
}
}
};
}
const Je = k({
const Je = L({
name: "SyGridFileUpload",
props: _(),
props: z(),
setup(e) {
const t = U("sy-grid-file-upload"), {
const t = E("sy-grid-file-upload"), {
value: s,
data: o,
controller: i
} = B(e), {
} = $(e), {
downloadUrl: n,
uploadUrl: r,
valueList: a
......@@ -757,27 +765,33 @@ const Je = k({
controller: i
}), {
fileList: d,
showModal: h,
modalTitle: m,
showModal: m,
modalTitle: p,
iframeUrl: f,
previewFile: C,
onModalCancel: b
previewFile: F,
onModalCancel: y
} = ne({
downloadUrl: n,
uploadUrl: r,
value: a
});
value: a,
controller: i
}), x = (u) => {
const v = e.controller, I = v.parent.grid.model.appEntity.deName, S = `${u.id}|${I}|${o.value.srfkey}|${v.context.srfpersonid || v.context.srfuserid}`, k = u.url || n.value.replace("%fileId%", u.id);
v.fileDownload({
url: `${k}?key=${window.btoa(S)}${Math.floor(1e3 + Math.random() * 9e3)}`,
name: u.name
});
}, w = D(() => e.controller.editorParams.showPreview ? e.controller.editorParams.showPreview === "true" : window.Environment.kkviewon);
return {
ns: t,
fileList: d,
showModal: h,
modalTitle: m,
showModal: m,
modalTitle: p,
iframeUrl: f,
downloadFile: (v) => {
e.controller.fileDownload(v);
},
previewFile: C,
onModalCancel: b
showPreview: w,
downloadFile: x,
previewFile: F,
onModalCancel: y
};
},
render() {
......@@ -806,14 +820,14 @@ const Je = k({
on: {
click: () => this.downloadFile(e)
}
}), c("i-icon", {
}), this.showPreview ? c("i-icon", {
attrs: {
type: "md-eye"
},
on: {
click: () => this.previewFile(e)
}
})])]))]), c("i-modal", {
}) : null])]))]), c("i-modal", {
attrs: {
value: this.showModal,
title: this.modalTitle,
......@@ -832,10 +846,10 @@ const Je = k({
}
})])]);
}
}), Qe = k({
}), Qe = L({
name: "SyGridFileUploadContainer",
props: _(),
emits: $(),
props: z(),
emits: _(),
render(e) {
return this.disabled || this.readonly ? e("SyGridFileUpload", {
props: {
......@@ -856,7 +870,7 @@ const Je = k({
});
}
});
const Ke = k({
const Ke = L({
name: "SyEditGridFileUploadPopover",
props: {
uploadUrl: {
......@@ -874,6 +888,10 @@ const Ke = k({
controller: {
type: J,
required: !0
},
data: {
type: Object,
required: !0
}
},
emits: {
......@@ -882,39 +900,43 @@ const Ke = k({
setup(e, {
emit: t
}) {
const s = U("sy-edit-grid-file-upload-popover"), {
const s = E("sy-edit-grid-file-upload-popover"), {
downloadUrl: o,
value: i,
uploadUrl: n,
controller: r
} = B(e), {
} = $(e), {
fileList: a,
uploadState: d,
selectFile: h
selectFile: m
} = ne({
downloadUrl: o,
value: i,
uploadUrl: n,
controller: r
}), m = g(), f = g(!1), C = Ce(m, async (v) => {
}), p = g(), f = g(!1), F = Ce(p, async (w) => {
t("close", {
isModified: f.value,
resultFiles: a.value
});
});
return N(d, (v) => {
v === "done" ? (f.value = !0, C.proceed()) : v === "loading" && C.pause();
return P(d, (w) => {
w === "done" ? (f.value = !0, F.proceed()) : w === "loading" && F.pause();
}), {
ns: s,
componentRef: m,
componentRef: p,
fileList: a,
deleteFile: (v) => {
const p = a.value.findIndex((y) => y.id === v.id);
a.value.splice(p, 1), f.value = !0;
deleteFile: (w) => {
const u = a.value.findIndex((v) => v.id === w.id);
a.value.splice(u, 1), f.value = !0;
},
selectFile: h,
downloadFile: (v) => {
e.controller.fileDownload(v);
selectFile: m,
downloadFile: (w) => {
const u = e.controller, N = u.parent.grid.model.appEntity.deName, I = `${w.id}|${N}|${e.data.srfkey}|${u.context.srfpersonid || u.context.srfuserid}`, S = w.url || o.value.replace("%fileId%", w.id);
u.fileDownload({
url: `${S}?key=${window.btoa(I)}${Math.floor(1e3 + Math.random() * 9e3)}`,
name: w.name
});
}
};
},
......@@ -954,18 +976,18 @@ const Ke = k({
}), "添加文件"])]);
}
});
const Ye = k({
const Ye = L({
name: "SyEditGridFileUpload",
props: _(),
emits: $(),
props: z(),
emits: _(),
setup(e, {
emit: t
}) {
const s = U("sy-edit-grid-file-upload"), {
const s = E("sy-edit-grid-file-upload"), {
value: o,
data: i,
controller: n
} = B(e), {
} = $(e), {
downloadUrl: r,
uploadUrl: a,
valueList: d
......@@ -973,48 +995,49 @@ const Ye = k({
value: o,
data: i,
controller: n
}), h = g(), m = async () => {
if (!h.value)
}), m = g(), p = async () => {
if (!m.value)
throw new Te("容器元素不存在");
const f = h.value.$el, C = f.offsetHeight, b = ibiz.overlay.createPopover((p) => p(Ke, {
const f = m.value.$el, F = f.offsetHeight, y = ibiz.overlay.createPopover((u) => u(Ke, {
props: {
value: d.value,
data: i.value,
uploadUrl: a.value,
downloadUrl: r.value,
controller: n.value
},
on: {
close: (y) => {
b.dismiss(y);
close: (v) => {
y.dismiss(v);
}
}
}), void 0, {
noArrow: !0,
placement: "bottom-start",
offsetOpts: {
mainAxis: -C,
mainAxis: -F,
crossAxis: 0
}
});
await b.present(f);
await y.present(f);
const {
isModified: F,
resultFiles: v
} = await b.onWillDismiss();
if (F) {
const p = v.length > 0 ? JSON.stringify(v.map((y) => ({
name: y.name,
id: y.id
isModified: x,
resultFiles: w
} = await y.onWillDismiss();
if (x) {
const u = w.length > 0 ? JSON.stringify(w.map((v) => ({
name: v.name,
id: v.id
}))) : null;
t("change", p), t("rowSave");
t("change", u), t("rowSave");
}
};
return Fe(h, "click", (f) => {
e.disabled || m();
return xe(m, "click", (f) => {
e.disabled || p();
}), {
ns: s,
valueList: d,
componentRef: h
componentRef: m
};
},
render() {
......@@ -1035,16 +1058,16 @@ const Ye = k({
}, [e.name])]))])]);
}
});
k({
L({
name: "SyInput",
props: xe(),
props: ke(),
emits: K(),
setup(e, {
emit: t
}) {
const s = U("input"), i = e.controller.model, n = g(), r = g(2);
const s = E("input"), i = e.controller.model, n = g(), r = g(2);
i.editorType === "TEXTAREA_10" && (r.value = 10);
const a = T(() => {
const a = D(() => {
switch (i.editorType) {
case "TEXTBOX":
return "text";
......@@ -1057,35 +1080,35 @@ k({
return "string";
}
}), d = g("");
N(() => e.value, (p, y) => {
p !== y && (p ? d.value = p : d.value = "");
P(() => e.value, (u, v) => {
u !== v && (u ? d.value = u : d.value = "");
}, {
immediate: !0
});
let h = !1, m, f;
const C = Re((p) => {
f !== p.target.value && t("change", p.target.value), f = void 0, h = !1, m && m();
let m = !1, p, f;
const F = Me((u) => {
f !== u.target.value && t("change", u.target.value), f = void 0, m = !1, p && p();
}, 300, {
leading: !0
}), b = (p) => {
h = !0, C(p);
}, F = (p) => {
p && p.code === "Enter" && h && (m = () => {
n.value.$el.dispatchEvent(p);
}), y = (u) => {
m = !0, F(u);
}, x = (u) => {
u && u.code === "Enter" && m && (p = () => {
n.value.$el.dispatchEvent(u);
});
}, v = () => {
}, w = () => {
f = n.value.currentValue, t("change", f);
};
return e.autoFocus && N(n, (p) => {
p && p.$el.getElementsByTagName("input")[0].focus();
return e.autoFocus && P(n, (u) => {
u && u.$el.getElementsByTagName("input")[0].focus();
}), {
ns: s,
rows: r,
type: a,
currentVal: d,
handleChange: b,
handleKeyUp: F,
handleBlur: v,
handleChange: y,
handleKeyUp: x,
handleBlur: w,
inputRef: n
};
},
......@@ -1116,20 +1139,20 @@ k({
}, [this.controller.model.unitName])])]);
}
});
k({
L({
name: "SyGridInput",
props: Se(),
emits: $(),
props: Fe(),
emits: _(),
setup(e, {
emit: t
}) {
const s = U("grid-input"), {
const s = E("grid-input"), {
isInfoMode: o,
autoFocus: i,
componentRef: n,
onOperateChange: r,
onChange: a
} = ke(e, {
} = Se(e, {
emit: t
});
return {
......@@ -1175,7 +1198,7 @@ function H(e, t) {
class: e.e("logo-caption")
}, [t.caption])]);
}
const et = k({
const et = L({
name: "UserAppLayout",
props: {
model: {
......@@ -1196,9 +1219,9 @@ const et = k({
setup(e, {
emit: t
}) {
const s = U("layout"), o = g(!1), i = () => {
const s = E("layout"), o = g(!1), i = () => {
o.value = !o.value, t("onCollapseChange", o.value);
}, n = T(() => e.model.source.blankMode === !0), r = T(() => !!(window.Environment.manualdownloadurl || ibiz.env.manualdownloadurl));
}, n = D(() => e.model.source.blankMode === !0), r = D(() => !!(window.Environment.manualdownloadurl || ibiz.env.manualdownloadurl));
return {
ns: s,
collapseChange: o,
......@@ -1296,7 +1319,7 @@ function st(e) {
const t = g([]);
return e.nerve.self.evt.on("created", () => {
t.value = tt(e);
}), [T(() => {
}), [D(() => {
const o = [...t.value];
if (!o.find((r) => !r.width)) {
let r = o.length - 1;
......@@ -1322,14 +1345,14 @@ function ot(e) {
if (!e.singleSelect) {
const a = [];
r.forEach((d) => {
const h = t(d);
h && a.push(h);
const m = t(d);
m && a.push(m);
}), e.onSelectionChange(a);
}
}
function n(r) {
const { column: a, order: d } = r, h = d === "asc" || d === "desc" ? d : void 0;
e.setSort(a.fieldName, h), e.load();
const { column: a, order: d } = r, m = d === "asc" || d === "desc" ? d : void 0;
e.setSort(a.fieldName, m), e.load();
}
return { onRowClick: s, onDbRowClick: o, onSelectionChange: i, onSortChange: n };
}
......@@ -1354,7 +1377,7 @@ class nt extends ge {
* @author: zhujiamin
* @Date: 2023-10-09 14:00:38
*/
E(this, "groups", []);
U(this, "groups", []);
/**
* 分组名称属性
*
......@@ -1362,7 +1385,7 @@ class nt extends ge {
* @date 2024-12-19 10:12:56
* @type {string}
*/
E(this, "groupField", "");
U(this, "groupField", "");
/**
* 第一列名称
*
......@@ -1370,7 +1393,7 @@ class nt extends ge {
* @date 2024-12-19 10:12:30
* @type {string}
*/
E(this, "firstColName", "");
U(this, "firstColName", "");
}
async onInit() {
const s = this.model.columns.find(
......@@ -1396,7 +1419,7 @@ class nt extends ge {
})
), this.rows = s.map((o) => {
const i = new X(o, this);
return this.gridStateNotify(i, ve.LOAD), i;
return this.gridStateNotify(i, we.LOAD), i;
}), this.handleGroup(s), s;
}
/**
......@@ -1423,10 +1446,10 @@ class nt extends ge {
function rt(e, t, s, o = {}) {
return Le(e, () => {
const i = new nt(t, s, o);
return z(e, "gridRowActiveMode", i.setGridRowActiveMode.bind(i)), i;
return B(e, "gridRowActiveMode", i.setGridRowActiveMode.bind(i)), i;
});
}
const at = k({
const at = L({
props: {
modelData: he,
context: {
......@@ -1456,68 +1479,68 @@ const at = k({
setup(e) {
const {
proxy: t
} = R(), s = U("grid"), o = rt(t, e.modelData, e.context, e.params), [i] = st(o), {
} = A(), s = E("grid"), o = rt(t, e.modelData, e.context, e.params), [i] = st(o), {
onRowClick: n,
onDbRowClick: r,
onSelectionChange: a,
onSortChange: d
} = ot(o), {
onPageChange: h,
onPageReset: m,
onPageChange: m,
onPageReset: p,
onPageSizeChange: f
} = it(o), C = (L, S) => {
} = it(o), F = (S, k) => {
const l = t.$refs.grid;
l && (l.toggleSelect && l.toggleSelect(S), l.highlightCurrentRow && l.highlightCurrentRow(S)), n(L);
}, b = g(0), F = g(null), v = g(null);
let p = null, y = 0;
const I = () => {
var L;
if (F.value && ((L = e.modal) == null ? void 0 : L.mode) !== "EMBED")
if (o.model.source.enablePagingBar && v.value) {
const S = v.value.$el, l = S.offsetHeight + parseFloat(window.getComputedStyle(S).paddingTop);
b.value = F.value.offsetHeight - l;
l && (l.toggleSelect && l.toggleSelect(k), l.highlightCurrentRow && l.highlightCurrentRow(k)), n(S);
}, y = g(0), x = g(null), w = g(null);
let u = null, v = 0;
const N = () => {
var S;
if (x.value && ((S = e.modal) == null ? void 0 : S.mode) !== "EMBED")
if (o.model.source.enablePagingBar && w.value) {
const k = w.value.$el, l = k.offsetHeight + parseFloat(window.getComputedStyle(k).paddingTop);
y.value = x.value.offsetHeight - l;
} else
b.value = F.value.offsetHeight;
o.model.source.height > 0 && (b.value = o.model.source.height);
y.value = x.value.offsetHeight;
o.model.source.height > 0 && (y.value = o.model.source.height);
};
N(F, (L, S) => {
L && L !== S && (I(), window.ResizeObserver && F.value && (p = new ResizeObserver((l) => {
const u = l[0].contentRect.height;
u !== y && (I(), y = u);
}), p.observe(F.value)));
P(x, (S, k) => {
S && S !== k && (N(), window.ResizeObserver && x.value && (u = new ResizeObserver((l) => {
const h = l[0].contentRect.height;
h !== v && (N(), v = h);
}), u.observe(x.value)));
}), be(() => {
p && p.disconnect();
u && u.disconnect();
});
const O = T(() => {
const L = [];
return o.groups.forEach((S) => {
if (!S.children.length)
const I = D(() => {
const S = [];
return o.groups.forEach((k) => {
if (!k.children.length)
return;
const u = [...S.children].shift();
L.push({
srfkey: S.caption,
const h = [...k.children].shift();
S.push({
srfkey: k.caption,
isGroupData: !0,
first: u,
children: S.children,
first: h,
children: k.children,
_showChildren: !0
});
}), L;
}), S;
});
return {
c: o,
ns: s,
columns: i,
tableData: O,
tableData: I,
onDbRowClick: r,
onUIRowClick: C,
onUIRowClick: F,
onSelectionChange: a,
onSortChange: d,
onPageChange: h,
onPageChange: m,
onPageSizeChange: f,
onPageReset: m,
tableHeight: b,
gridRef: F,
girdPaginationRef: v
onPageReset: p,
tableHeight: y,
gridRef: x,
girdPaginationRef: w
};
},
render() {
......@@ -1592,12 +1615,12 @@ const at = k({
});
class lt {
constructor() {
E(this, "component", Oe);
U(this, "component", Oe);
}
}
class ct {
constructor() {
E(this, "component", Me);
U(this, "component", Ae);
}
async createController(t, s) {
const o = new Z(t, s);
......@@ -1606,10 +1629,10 @@ class ct {
}
class dt {
constructor() {
E(this, "component", "IndexView");
U(this, "component", "IndexView");
}
}
const ae = k({
const ae = L({
name: "WFStepTraceGrid",
props: {
context: Object,
......@@ -1631,19 +1654,19 @@ const ae = k({
setup(e) {
const {
proxy: t
} = R(), s = Ue(t, e.modelPath);
z(t, "deName", s.setDeName.bind(s));
const o = U("wf-step-trace-grid"), i = g([]), n = (a, d, h = !1) => {
a.identitylinks.length > 0 || a.comments.length > 0 && a.comments.forEach((m) => {
var f, C, b;
h && m.type === "启动流程" || d.push({
} = A(), s = Ee(t, e.modelPath);
B(t, "deName", s.setDeName.bind(s));
const o = E("wf-step-trace-grid"), i = g([]), n = (a, d, m = !1) => {
a.identitylinks.length > 0 || a.comments.length > 0 && a.comments.forEach((p) => {
var f, F, y;
m && p.type === "启动流程" || d.push({
id: W(),
nodeName: a.userTaskName,
personName: (f = m.authorName) == null ? void 0 : f.replace(/\([^)]*\)[^(]*$/, ""),
deptName: ((b = (C = m.authorName) == null ? void 0 : C.match(/.*\(([^)]*)\)[^(]*$/)) == null ? void 0 : b[1]) || "",
time: m.time,
content: m.type,
comment: m.fullMessage
personName: (f = p.authorName) == null ? void 0 : f.replace(/\([^)]*\)[^(]*$/, ""),
deptName: ((y = (F = p.authorName) == null ? void 0 : F.match(/.*\(([^)]*)\)[^(]*$/)) == null ? void 0 : y[1]) || "",
time: p.time,
content: p.type,
comment: p.fullMessage
});
});
};
......@@ -1651,9 +1674,9 @@ const ae = k({
var a;
s.data && ((a = s.data.usertasks) == null || a.forEach((d) => {
if (d.usertasks && d.usertasks.length > 0) {
const h = [];
d.usertasks.forEach((m) => {
n(m, h, !0);
const m = [];
d.usertasks.forEach((p) => {
n(p, m, !0);
}), i.value.push({
id: W(),
nodeName: `${d.userTaskName}`,
......@@ -1662,19 +1685,19 @@ const ae = k({
time: "",
content: "",
comment: "",
children: h,
children: m,
_showChildren: !0
});
} else
n(d, i.value);
}), i.value.sort((d, h) => Date.parse(d.time) - Date.parse(h.time)));
}), i.value.sort((d, m) => Date.parse(d.time) - Date.parse(m.time)));
});
const r = g([{
title: "序号",
key: "index",
width: 60,
resizable: !0,
render: (a, d) => i.value.findIndex((m) => m.id === d.row.id) === -1 ? null : a("span", {
render: (a, d) => i.value.findIndex((p) => p.id === d.row.id) === -1 ? null : a("span", {
style: {
textAlign: "center"
}
......@@ -1734,7 +1757,7 @@ const ae = k({
})]);
}
});
class ut extends we {
class ut extends ve {
async calcWfToolbar() {
await super.calcWfToolbar(), this.isEditable && this.wfLinks.unshift({
sequenceFlowName: "保存",
......@@ -1745,7 +1768,7 @@ class ut extends we {
t.type === "FORM_SAVE" ? await this.save() : super.onLinkClick(t);
}
}
k({
L({
props: {
context: Object,
params: {
......@@ -1762,7 +1785,7 @@ k({
setup(e) {
const {
proxy: t
} = R(), s = Q(t, (r, a) => new ut(e.modelPath, r, a)), o = U(`view-${me.DE_WF_DYNA_EDIT_VIEW3}`.toLowerCase()), i = g(["mainForm"]);
} = A(), s = Q(t, (r, a) => new ut(e.modelPath, r, a)), o = E(`view-${me.DE_WF_DYNA_EDIT_VIEW3}`.toLowerCase()), i = g(["mainForm"]);
return {
c: s,
ns: o,
......@@ -1864,7 +1887,7 @@ k({
})])]);
}
});
k({
L({
name: "SyEditView3",
props: {
context: Object,
......@@ -1882,7 +1905,7 @@ k({
setup(e) {
const {
proxy: t
} = R(), s = Ee(t, e.modelPath), o = U("view-deeditview3"), i = g(["mainForm"]);
} = A(), s = Ue(t, e.modelPath), o = E("view-deeditview3"), i = g(["mainForm"]);
return {
c: s,
ns: o,
......@@ -1964,8 +1987,8 @@ k({
});
class ht {
constructor() {
E(this, "formEditor", "SyFileUpload");
E(this, "gridEditor", "SyGridFileUploadContainer");
U(this, "formEditor", "SyFileUpload");
U(this, "gridEditor", "SyGridFileUploadContainer");
}
async createController(t, s) {
const o = new J(t, s);
......@@ -1977,8 +2000,8 @@ class mt extends te {
if (o && o.length > 0) {
const a = (await ibiz.entityService.getService("XQFBXQPS", s)).local.getList(s);
o.forEach((d) => {
const h = a.find((m) => m.srfkey === d.srfkey);
h && (h.psjg = "10", d.psjg = "10");
const m = a.find((p) => p.srfkey === d.srfkey);
m && (m.psjg = "10", d.psjg = "10");
});
}
return {
......@@ -1989,7 +2012,7 @@ class mt extends te {
}
class pt {
constructor() {
E(this, "handler");
U(this, "handler");
}
async getHandler() {
return this.handler || (this.handler = new mt()), this.handler;
......@@ -2000,8 +2023,8 @@ class ft extends te {
if (o && o.length > 0) {
const a = (await ibiz.entityService.getService("XQFBXQPS", s)).local.getList(s);
o.forEach((d) => {
const h = a.find((m) => m.srfkey === d.srfkey);
h && (h.psjg = "20", d.psjg = "20");
const m = a.find((p) => p.srfkey === d.srfkey);
m && (m.psjg = "20", d.psjg = "20");
});
}
return {
......@@ -2012,24 +2035,24 @@ class ft extends te {
}
class gt {
constructor() {
E(this, "handler");
U(this, "handler");
}
async getHandler() {
return this.handler || (this.handler = new ft()), this.handler;
}
}
class vt {
class wt {
constructor() {
E(this, "component", "GroupGrid");
U(this, "component", "GroupGrid");
}
}
const wt = new Ae(import.meta.url), Nt = {
const vt = new Re(import.meta.url), Pt = {
mateUrl: import.meta.url,
install(e) {
pe.getModelService().then((t) => {
var o;
((o = t.app.userParams) == null ? void 0 : o.autoWidth) === "true" && document.getElementsByClassName("app")[0].classList.add("auto-width");
}), wt.loadStyle(["/style.css"]), ibiz.config.enableDataInfoBar = !1, ibiz.config.gridEditShowMode = "all", e.component("WfToolbar", Be), ibiz.register.view.register(
}), vt.loadStyle(["/style.css"]), ibiz.config.enableDataInfoBar = !1, ibiz.config.gridEditShowMode = "all", e.component("WfToolbar", $e), ibiz.register.view.register(
"VIEW_CUSTOM_SyWebIndexView",
new dt()
), ibiz.register.view.register(
......@@ -2049,10 +2072,10 @@ const wt = new Ae(import.meta.url), Nt = {
new gt()
), e.component("GroupGrid", at), ibiz.register.control.register(
"GRID_RENDER_GROUP_GRID",
new vt()
new wt()
);
}
};
export {
Nt as default
Pt as default
};
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册