5875 lines
242 KiB
JavaScript
5875 lines
242 KiB
JavaScript
import { version, ref, watchEffect, watch, getCurrentInstance, defineComponent, computed, provide, renderSlot, inject, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle, withDirectives, cloneVNode, Fragment, Text, Comment, createVNode, createBlock, mergeProps, withCtx, createCommentVNode, toRef, Teleport, Transition, vShow, readonly, toDisplayString, createTextVNode, hasInjectionContext, warn, useSSRContext, createApp, effectScope, reactive, shallowRef, onUnmounted, nextTick, isRef, defineAsyncComponent, onErrorCaptured, onServerPrefetch, resolveDynamicComponent, h, isReadonly, isShallow, isReactive, toRaw, withModifiers, renderList } from 'vue';
|
|
import { d as useRuntimeConfig$1, $ as $fetch, w as withQuery, l as hasProtocol, p as parseURL, m as isScriptProtocol, j as joinURL, h as createError$1, n as sanitizeStatusCode, o as createHooks, q as isEqual, r as stringifyParsedURL, t as stringifyQuery, v as parseQuery } from '../nitro/node-server.mjs';
|
|
import { getActiveHead } from 'unhead';
|
|
import { defineHeadPlugin, composableNames } from '@unhead/shared';
|
|
import { onClickOutside, tryOnScopeDispose, isClient, unrefElement } from '@vueuse/core';
|
|
import { NOOP, isObject, isString, hasOwn, isFunction, isArray } from '@vue/shared';
|
|
import { isNil, fromPairs, pick, isUndefined } from 'lodash-unified';
|
|
import { ssrRenderSuspense, ssrRenderComponent, ssrRenderVNode, ssrInterpolate, ssrRenderAttr, ssrRenderList, ssrRenderClass, ssrRenderStyle, ssrIncludeBooleanAttr, ssrRenderAttrs } from 'vue/server-renderer';
|
|
import { placements, createPopper } from '@popperjs/core';
|
|
import axios from 'axios';
|
|
import 'node:http';
|
|
import 'node:https';
|
|
import 'fs';
|
|
import 'path';
|
|
import 'node:fs';
|
|
import 'node:url';
|
|
|
|
function createContext$1(opts = {}) {
|
|
let currentInstance;
|
|
let isSingleton = false;
|
|
const checkConflict = (instance) => {
|
|
if (currentInstance && currentInstance !== instance) {
|
|
throw new Error("Context conflict");
|
|
}
|
|
};
|
|
let als;
|
|
if (opts.asyncContext) {
|
|
const _AsyncLocalStorage = opts.AsyncLocalStorage || globalThis.AsyncLocalStorage;
|
|
if (_AsyncLocalStorage) {
|
|
als = new _AsyncLocalStorage();
|
|
} else {
|
|
console.warn("[unctx] `AsyncLocalStorage` is not provided.");
|
|
}
|
|
}
|
|
const _getCurrentInstance = () => {
|
|
if (als && currentInstance === void 0) {
|
|
const instance = als.getStore();
|
|
if (instance !== void 0) {
|
|
return instance;
|
|
}
|
|
}
|
|
return currentInstance;
|
|
};
|
|
return {
|
|
use: () => {
|
|
const _instance = _getCurrentInstance();
|
|
if (_instance === void 0) {
|
|
throw new Error("Context is not available");
|
|
}
|
|
return _instance;
|
|
},
|
|
tryUse: () => {
|
|
return _getCurrentInstance();
|
|
},
|
|
set: (instance, replace) => {
|
|
if (!replace) {
|
|
checkConflict(instance);
|
|
}
|
|
currentInstance = instance;
|
|
isSingleton = true;
|
|
},
|
|
unset: () => {
|
|
currentInstance = void 0;
|
|
isSingleton = false;
|
|
},
|
|
call: (instance, callback) => {
|
|
checkConflict(instance);
|
|
currentInstance = instance;
|
|
try {
|
|
return als ? als.run(instance, callback) : callback();
|
|
} finally {
|
|
if (!isSingleton) {
|
|
currentInstance = void 0;
|
|
}
|
|
}
|
|
},
|
|
async callAsync(instance, callback) {
|
|
currentInstance = instance;
|
|
const onRestore = () => {
|
|
currentInstance = instance;
|
|
};
|
|
const onLeave = () => currentInstance === instance ? onRestore : void 0;
|
|
asyncHandlers$1.add(onLeave);
|
|
try {
|
|
const r = als ? als.run(instance, callback) : callback();
|
|
if (!isSingleton) {
|
|
currentInstance = void 0;
|
|
}
|
|
return await r;
|
|
} finally {
|
|
asyncHandlers$1.delete(onLeave);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function createNamespace$1(defaultOpts = {}) {
|
|
const contexts = {};
|
|
return {
|
|
get(key, opts = {}) {
|
|
if (!contexts[key]) {
|
|
contexts[key] = createContext$1({ ...defaultOpts, ...opts });
|
|
}
|
|
contexts[key];
|
|
return contexts[key];
|
|
}
|
|
};
|
|
}
|
|
const _globalThis$1 = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : {};
|
|
const globalKey$2 = "__unctx__";
|
|
const defaultNamespace$1 = _globalThis$1[globalKey$2] || (_globalThis$1[globalKey$2] = createNamespace$1());
|
|
const getContext = (key, opts = {}) => defaultNamespace$1.get(key, opts);
|
|
const asyncHandlersKey$1 = "__unctx_async_handlers__";
|
|
const asyncHandlers$1 = _globalThis$1[asyncHandlersKey$1] || (_globalThis$1[asyncHandlersKey$1] = /* @__PURE__ */ new Set());
|
|
|
|
const appConfig = useRuntimeConfig$1().app;
|
|
const baseURL = () => appConfig.baseURL;
|
|
if (!globalThis.$fetch) {
|
|
globalThis.$fetch = $fetch.create({
|
|
baseURL: baseURL()
|
|
});
|
|
}
|
|
const nuxtAppCtx = /* @__PURE__ */ getContext("nuxt-app", {
|
|
asyncContext: false
|
|
});
|
|
const NuxtPluginIndicator = "__nuxt_plugin";
|
|
function createNuxtApp(options) {
|
|
let hydratingCount = 0;
|
|
const nuxtApp = {
|
|
_scope: effectScope(),
|
|
provide: void 0,
|
|
globalName: "nuxt",
|
|
versions: {
|
|
get nuxt() {
|
|
return "3.8.2";
|
|
},
|
|
get vue() {
|
|
return nuxtApp.vueApp.version;
|
|
}
|
|
},
|
|
payload: reactive({
|
|
data: {},
|
|
state: {},
|
|
_errors: {},
|
|
...{ serverRendered: true }
|
|
}),
|
|
static: {
|
|
data: {}
|
|
},
|
|
runWithContext: (fn) => nuxtApp._scope.run(() => callWithNuxt(nuxtApp, fn)),
|
|
isHydrating: false,
|
|
deferHydration() {
|
|
if (!nuxtApp.isHydrating) {
|
|
return () => {
|
|
};
|
|
}
|
|
hydratingCount++;
|
|
let called = false;
|
|
return () => {
|
|
if (called) {
|
|
return;
|
|
}
|
|
called = true;
|
|
hydratingCount--;
|
|
if (hydratingCount === 0) {
|
|
nuxtApp.isHydrating = false;
|
|
return nuxtApp.callHook("app:suspense:resolve");
|
|
}
|
|
};
|
|
},
|
|
_asyncDataPromises: {},
|
|
_asyncData: {},
|
|
_payloadRevivers: {},
|
|
...options
|
|
};
|
|
nuxtApp.hooks = createHooks();
|
|
nuxtApp.hook = nuxtApp.hooks.hook;
|
|
{
|
|
const contextCaller = async function(hooks, args) {
|
|
for (const hook of hooks) {
|
|
await nuxtApp.runWithContext(() => hook(...args));
|
|
}
|
|
};
|
|
nuxtApp.hooks.callHook = (name, ...args) => nuxtApp.hooks.callHookWith(contextCaller, name, ...args);
|
|
}
|
|
nuxtApp.callHook = nuxtApp.hooks.callHook;
|
|
nuxtApp.provide = (name, value) => {
|
|
const $name = "$" + name;
|
|
defineGetter(nuxtApp, $name, value);
|
|
defineGetter(nuxtApp.vueApp.config.globalProperties, $name, value);
|
|
};
|
|
defineGetter(nuxtApp.vueApp, "$nuxt", nuxtApp);
|
|
defineGetter(nuxtApp.vueApp.config.globalProperties, "$nuxt", nuxtApp);
|
|
{
|
|
if (nuxtApp.ssrContext) {
|
|
nuxtApp.ssrContext.nuxt = nuxtApp;
|
|
nuxtApp.ssrContext._payloadReducers = {};
|
|
nuxtApp.payload.path = nuxtApp.ssrContext.url;
|
|
}
|
|
nuxtApp.ssrContext = nuxtApp.ssrContext || {};
|
|
if (nuxtApp.ssrContext.payload) {
|
|
Object.assign(nuxtApp.payload, nuxtApp.ssrContext.payload);
|
|
}
|
|
nuxtApp.ssrContext.payload = nuxtApp.payload;
|
|
nuxtApp.ssrContext.config = {
|
|
public: options.ssrContext.runtimeConfig.public,
|
|
app: options.ssrContext.runtimeConfig.app
|
|
};
|
|
}
|
|
const runtimeConfig = options.ssrContext.runtimeConfig;
|
|
nuxtApp.provide("config", runtimeConfig);
|
|
return nuxtApp;
|
|
}
|
|
async function applyPlugin(nuxtApp, plugin) {
|
|
if (plugin.hooks) {
|
|
nuxtApp.hooks.addHooks(plugin.hooks);
|
|
}
|
|
if (typeof plugin === "function") {
|
|
const { provide: provide2 } = await nuxtApp.runWithContext(() => plugin(nuxtApp)) || {};
|
|
if (provide2 && typeof provide2 === "object") {
|
|
for (const key in provide2) {
|
|
nuxtApp.provide(key, provide2[key]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
async function applyPlugins(nuxtApp, plugins2) {
|
|
var _a, _b;
|
|
const parallels = [];
|
|
const errors = [];
|
|
for (const plugin of plugins2) {
|
|
if (((_a = nuxtApp.ssrContext) == null ? void 0 : _a.islandContext) && ((_b = plugin.env) == null ? void 0 : _b.islands) === false) {
|
|
continue;
|
|
}
|
|
const promise = applyPlugin(nuxtApp, plugin);
|
|
if (plugin.parallel) {
|
|
parallels.push(promise.catch((e) => errors.push(e)));
|
|
} else {
|
|
await promise;
|
|
}
|
|
}
|
|
await Promise.all(parallels);
|
|
if (errors.length) {
|
|
throw errors[0];
|
|
}
|
|
}
|
|
/*! @__NO_SIDE_EFFECTS__ */
|
|
// @__NO_SIDE_EFFECTS__
|
|
function defineNuxtPlugin(plugin) {
|
|
if (typeof plugin === "function") {
|
|
return plugin;
|
|
}
|
|
delete plugin.name;
|
|
return Object.assign(plugin.setup || (() => {
|
|
}), plugin, { [NuxtPluginIndicator]: true });
|
|
}
|
|
function callWithNuxt(nuxt, setup, args) {
|
|
const fn = () => args ? setup(...args) : setup();
|
|
{
|
|
return nuxt.vueApp.runWithContext(() => nuxtAppCtx.callAsync(nuxt, fn));
|
|
}
|
|
}
|
|
/*! @__NO_SIDE_EFFECTS__ */
|
|
// @__NO_SIDE_EFFECTS__
|
|
function useNuxtApp() {
|
|
var _a;
|
|
let nuxtAppInstance;
|
|
if (hasInjectionContext()) {
|
|
nuxtAppInstance = (_a = getCurrentInstance()) == null ? void 0 : _a.appContext.app.$nuxt;
|
|
}
|
|
nuxtAppInstance = nuxtAppInstance || nuxtAppCtx.tryUse();
|
|
if (!nuxtAppInstance) {
|
|
{
|
|
throw new Error("[nuxt] instance unavailable");
|
|
}
|
|
}
|
|
return nuxtAppInstance;
|
|
}
|
|
/*! @__NO_SIDE_EFFECTS__ */
|
|
// @__NO_SIDE_EFFECTS__
|
|
function useRuntimeConfig() {
|
|
return (/* @__PURE__ */ useNuxtApp()).$config;
|
|
}
|
|
function defineGetter(obj, key, val) {
|
|
Object.defineProperty(obj, key, { get: () => val });
|
|
}
|
|
version.startsWith("3");
|
|
function resolveUnref(r) {
|
|
return typeof r === "function" ? r() : unref(r);
|
|
}
|
|
function resolveUnrefHeadInput(ref2, lastKey = "") {
|
|
if (ref2 instanceof Promise)
|
|
return ref2;
|
|
const root = resolveUnref(ref2);
|
|
if (!ref2 || !root)
|
|
return root;
|
|
if (Array.isArray(root))
|
|
return root.map((r) => resolveUnrefHeadInput(r, lastKey));
|
|
if (typeof root === "object") {
|
|
return Object.fromEntries(
|
|
Object.entries(root).map(([k, v]) => {
|
|
if (k === "titleTemplate" || k.startsWith("on"))
|
|
return [k, unref(v)];
|
|
return [k, resolveUnrefHeadInput(v, k)];
|
|
})
|
|
);
|
|
}
|
|
return root;
|
|
}
|
|
defineHeadPlugin({
|
|
hooks: {
|
|
"entries:resolve": function(ctx) {
|
|
for (const entry2 of ctx.entries)
|
|
entry2.resolvedInput = resolveUnrefHeadInput(entry2.input);
|
|
}
|
|
}
|
|
});
|
|
const headSymbol = "usehead";
|
|
const _global = typeof globalThis !== "undefined" ? globalThis : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
const globalKey$1 = "__unhead_injection_handler__";
|
|
function setHeadInjectionHandler(handler) {
|
|
_global[globalKey$1] = handler;
|
|
}
|
|
function injectHead() {
|
|
if (globalKey$1 in _global) {
|
|
return _global[globalKey$1]();
|
|
}
|
|
const head = inject(headSymbol);
|
|
if (!head && "production" !== "production")
|
|
console.warn("Unhead is missing Vue context, falling back to shared context. This may have unexpected results.");
|
|
return head || getActiveHead();
|
|
}
|
|
function useHead(input, options = {}) {
|
|
const head = options.head || injectHead();
|
|
if (head) {
|
|
if (!head.ssr)
|
|
return clientUseHead(head, input, options);
|
|
return head.push(input, options);
|
|
}
|
|
}
|
|
function clientUseHead(head, input, options = {}) {
|
|
const deactivated = ref(false);
|
|
const resolvedInput = ref({});
|
|
watchEffect(() => {
|
|
resolvedInput.value = deactivated.value ? {} : resolveUnrefHeadInput(input);
|
|
});
|
|
const entry2 = head.push(resolvedInput.value, options);
|
|
watch(resolvedInput, (e) => {
|
|
entry2.patch(e);
|
|
});
|
|
getCurrentInstance();
|
|
return entry2;
|
|
}
|
|
const coreComposableNames = [
|
|
"injectHead"
|
|
];
|
|
({
|
|
"@unhead/vue": [...coreComposableNames, ...composableNames]
|
|
});
|
|
const unhead_KgADcZ0jPj = /* @__PURE__ */ defineNuxtPlugin({
|
|
name: "nuxt:head",
|
|
enforce: "pre",
|
|
setup(nuxtApp) {
|
|
const head = nuxtApp.ssrContext.head;
|
|
setHeadInjectionHandler(
|
|
// need a fresh instance of the nuxt app to avoid parallel requests interfering with each other
|
|
() => (/* @__PURE__ */ useNuxtApp()).vueApp._context.provides.usehead
|
|
);
|
|
nuxtApp.vueApp.use(head);
|
|
}
|
|
});
|
|
const PageRouteSymbol = Symbol("route");
|
|
const useRouter = () => {
|
|
var _a;
|
|
return (_a = /* @__PURE__ */ useNuxtApp()) == null ? void 0 : _a.$router;
|
|
};
|
|
const useRoute = () => {
|
|
if (hasInjectionContext()) {
|
|
return inject(PageRouteSymbol, (/* @__PURE__ */ useNuxtApp())._route);
|
|
}
|
|
return (/* @__PURE__ */ useNuxtApp())._route;
|
|
};
|
|
/*! @__NO_SIDE_EFFECTS__ */
|
|
// @__NO_SIDE_EFFECTS__
|
|
function defineNuxtRouteMiddleware(middleware) {
|
|
return middleware;
|
|
}
|
|
const isProcessingMiddleware = () => {
|
|
try {
|
|
if ((/* @__PURE__ */ useNuxtApp())._processingMiddleware) {
|
|
return true;
|
|
}
|
|
} catch {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
const navigateTo = (to, options) => {
|
|
if (!to) {
|
|
to = "/";
|
|
}
|
|
const toPath = typeof to === "string" ? to : withQuery(to.path || "/", to.query || {}) + (to.hash || "");
|
|
if (options == null ? void 0 : options.open) {
|
|
return Promise.resolve();
|
|
}
|
|
const isExternal = (options == null ? void 0 : options.external) || hasProtocol(toPath, { acceptRelative: true });
|
|
if (isExternal) {
|
|
if (!(options == null ? void 0 : options.external)) {
|
|
throw new Error("Navigating to an external URL is not allowed by default. Use `navigateTo(url, { external: true })`.");
|
|
}
|
|
const protocol = parseURL(toPath).protocol;
|
|
if (protocol && isScriptProtocol(protocol)) {
|
|
throw new Error(`Cannot navigate to a URL with '${protocol}' protocol.`);
|
|
}
|
|
}
|
|
const inMiddleware = isProcessingMiddleware();
|
|
const router = useRouter();
|
|
const nuxtApp = /* @__PURE__ */ useNuxtApp();
|
|
{
|
|
if (nuxtApp.ssrContext) {
|
|
const fullPath = typeof to === "string" || isExternal ? toPath : router.resolve(to).fullPath || "/";
|
|
const location2 = isExternal ? toPath : joinURL((/* @__PURE__ */ useRuntimeConfig()).app.baseURL, fullPath);
|
|
const redirect = async function(response) {
|
|
await nuxtApp.callHook("app:redirected");
|
|
const encodedLoc = location2.replace(/"/g, "%22");
|
|
nuxtApp.ssrContext._renderResponse = {
|
|
statusCode: sanitizeStatusCode((options == null ? void 0 : options.redirectCode) || 302, 302),
|
|
body: `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=${encodedLoc}"></head></html>`,
|
|
headers: { location: location2 }
|
|
};
|
|
return response;
|
|
};
|
|
if (!isExternal && inMiddleware) {
|
|
router.afterEach((final) => final.fullPath === fullPath ? redirect(false) : void 0);
|
|
return to;
|
|
}
|
|
return redirect(!inMiddleware ? void 0 : (
|
|
/* abort route navigation */
|
|
false
|
|
));
|
|
}
|
|
}
|
|
if (isExternal) {
|
|
nuxtApp._scope.stop();
|
|
if (options == null ? void 0 : options.replace) {
|
|
location.replace(toPath);
|
|
} else {
|
|
location.href = toPath;
|
|
}
|
|
if (inMiddleware) {
|
|
if (!nuxtApp.isHydrating) {
|
|
return false;
|
|
}
|
|
return new Promise(() => {
|
|
});
|
|
}
|
|
return Promise.resolve();
|
|
}
|
|
return (options == null ? void 0 : options.replace) ? router.replace(to) : router.push(to);
|
|
};
|
|
const useError = () => toRef((/* @__PURE__ */ useNuxtApp()).payload, "error");
|
|
const showError = (_err) => {
|
|
const err = createError(_err);
|
|
try {
|
|
const nuxtApp = /* @__PURE__ */ useNuxtApp();
|
|
const error = useError();
|
|
if (false)
|
|
;
|
|
error.value = error.value || err;
|
|
} catch {
|
|
throw err;
|
|
}
|
|
return err;
|
|
};
|
|
const isNuxtError = (err) => !!(err && typeof err === "object" && "__nuxt_error" in err);
|
|
const createError = (err) => {
|
|
const _err = createError$1(err);
|
|
_err.__nuxt_error = true;
|
|
return _err;
|
|
};
|
|
function createContext(opts = {}) {
|
|
let currentInstance;
|
|
let isSingleton = false;
|
|
const checkConflict = (instance) => {
|
|
if (currentInstance && currentInstance !== instance) {
|
|
throw new Error("Context conflict");
|
|
}
|
|
};
|
|
let als;
|
|
if (opts.asyncContext) {
|
|
const _AsyncLocalStorage = opts.AsyncLocalStorage || globalThis.AsyncLocalStorage;
|
|
if (_AsyncLocalStorage) {
|
|
als = new _AsyncLocalStorage();
|
|
} else {
|
|
console.warn("[unctx] `AsyncLocalStorage` is not provided.");
|
|
}
|
|
}
|
|
const _getCurrentInstance = () => {
|
|
if (als && currentInstance === void 0) {
|
|
const instance = als.getStore();
|
|
if (instance !== void 0) {
|
|
return instance;
|
|
}
|
|
}
|
|
return currentInstance;
|
|
};
|
|
return {
|
|
use: () => {
|
|
const _instance = _getCurrentInstance();
|
|
if (_instance === void 0) {
|
|
throw new Error("Context is not available");
|
|
}
|
|
return _instance;
|
|
},
|
|
tryUse: () => {
|
|
return _getCurrentInstance();
|
|
},
|
|
set: (instance, replace) => {
|
|
if (!replace) {
|
|
checkConflict(instance);
|
|
}
|
|
currentInstance = instance;
|
|
isSingleton = true;
|
|
},
|
|
unset: () => {
|
|
currentInstance = void 0;
|
|
isSingleton = false;
|
|
},
|
|
call: (instance, callback) => {
|
|
checkConflict(instance);
|
|
currentInstance = instance;
|
|
try {
|
|
return als ? als.run(instance, callback) : callback();
|
|
} finally {
|
|
if (!isSingleton) {
|
|
currentInstance = void 0;
|
|
}
|
|
}
|
|
},
|
|
async callAsync(instance, callback) {
|
|
currentInstance = instance;
|
|
const onRestore = () => {
|
|
currentInstance = instance;
|
|
};
|
|
const onLeave = () => currentInstance === instance ? onRestore : void 0;
|
|
asyncHandlers.add(onLeave);
|
|
try {
|
|
const r = als ? als.run(instance, callback) : callback();
|
|
if (!isSingleton) {
|
|
currentInstance = void 0;
|
|
}
|
|
return await r;
|
|
} finally {
|
|
asyncHandlers.delete(onLeave);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function createNamespace(defaultOpts = {}) {
|
|
const contexts = {};
|
|
return {
|
|
get(key, opts = {}) {
|
|
if (!contexts[key]) {
|
|
contexts[key] = createContext({ ...defaultOpts, ...opts });
|
|
}
|
|
contexts[key];
|
|
return contexts[key];
|
|
}
|
|
};
|
|
}
|
|
const _globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : {};
|
|
const globalKey = "__unctx__";
|
|
_globalThis[globalKey] || (_globalThis[globalKey] = createNamespace());
|
|
const asyncHandlersKey = "__unctx_async_handlers__";
|
|
const asyncHandlers = _globalThis[asyncHandlersKey] || (_globalThis[asyncHandlersKey] = /* @__PURE__ */ new Set());
|
|
const manifest_45route_45rule = /* @__PURE__ */ defineNuxtRouteMiddleware(async (to) => {
|
|
{
|
|
return;
|
|
}
|
|
});
|
|
const globalMiddleware = [
|
|
manifest_45route_45rule
|
|
];
|
|
function getRouteFromPath(fullPath) {
|
|
if (typeof fullPath === "object") {
|
|
fullPath = stringifyParsedURL({
|
|
pathname: fullPath.path || "",
|
|
search: stringifyQuery(fullPath.query || {}),
|
|
hash: fullPath.hash || ""
|
|
});
|
|
}
|
|
const url = parseURL(fullPath.toString());
|
|
return {
|
|
path: url.pathname,
|
|
fullPath,
|
|
query: parseQuery(url.search),
|
|
hash: url.hash,
|
|
// stub properties for compat with vue-router
|
|
params: {},
|
|
name: void 0,
|
|
matched: [],
|
|
redirectedFrom: void 0,
|
|
meta: {},
|
|
href: fullPath
|
|
};
|
|
}
|
|
const router_CaKIoANnI2 = /* @__PURE__ */ defineNuxtPlugin({
|
|
name: "nuxt:router",
|
|
enforce: "pre",
|
|
setup(nuxtApp) {
|
|
const initialURL = nuxtApp.ssrContext.url;
|
|
const routes = [];
|
|
const hooks = {
|
|
"navigate:before": [],
|
|
"resolve:before": [],
|
|
"navigate:after": [],
|
|
error: []
|
|
};
|
|
const registerHook = (hook, guard) => {
|
|
hooks[hook].push(guard);
|
|
return () => hooks[hook].splice(hooks[hook].indexOf(guard), 1);
|
|
};
|
|
(/* @__PURE__ */ useRuntimeConfig()).app.baseURL;
|
|
const route = reactive(getRouteFromPath(initialURL));
|
|
async function handleNavigation(url, replace) {
|
|
try {
|
|
const to = getRouteFromPath(url);
|
|
for (const middleware of hooks["navigate:before"]) {
|
|
const result = await middleware(to, route);
|
|
if (result === false || result instanceof Error) {
|
|
return;
|
|
}
|
|
if (typeof result === "string" && result.length) {
|
|
return handleNavigation(result, true);
|
|
}
|
|
}
|
|
for (const handler of hooks["resolve:before"]) {
|
|
await handler(to, route);
|
|
}
|
|
Object.assign(route, to);
|
|
if (false)
|
|
;
|
|
for (const middleware of hooks["navigate:after"]) {
|
|
await middleware(to, route);
|
|
}
|
|
} catch (err) {
|
|
for (const handler of hooks.error) {
|
|
await handler(err);
|
|
}
|
|
}
|
|
}
|
|
const router = {
|
|
currentRoute: route,
|
|
isReady: () => Promise.resolve(),
|
|
// These options provide a similar API to vue-router but have no effect
|
|
options: {},
|
|
install: () => Promise.resolve(),
|
|
// Navigation
|
|
push: (url) => handleNavigation(url),
|
|
replace: (url) => handleNavigation(url),
|
|
back: () => window.history.go(-1),
|
|
go: (delta) => window.history.go(delta),
|
|
forward: () => window.history.go(1),
|
|
// Guards
|
|
beforeResolve: (guard) => registerHook("resolve:before", guard),
|
|
beforeEach: (guard) => registerHook("navigate:before", guard),
|
|
afterEach: (guard) => registerHook("navigate:after", guard),
|
|
onError: (handler) => registerHook("error", handler),
|
|
// Routes
|
|
resolve: getRouteFromPath,
|
|
addRoute: (parentName, route2) => {
|
|
routes.push(route2);
|
|
},
|
|
getRoutes: () => routes,
|
|
hasRoute: (name) => routes.some((route2) => route2.name === name),
|
|
removeRoute: (name) => {
|
|
const index = routes.findIndex((route2) => route2.name === name);
|
|
if (index !== -1) {
|
|
routes.splice(index, 1);
|
|
}
|
|
}
|
|
};
|
|
nuxtApp.vueApp.component("RouterLink", {
|
|
functional: true,
|
|
props: {
|
|
to: String,
|
|
custom: Boolean,
|
|
replace: Boolean,
|
|
// Not implemented
|
|
activeClass: String,
|
|
exactActiveClass: String,
|
|
ariaCurrentValue: String
|
|
},
|
|
setup: (props, { slots }) => {
|
|
const navigate = () => handleNavigation(props.to, props.replace);
|
|
return () => {
|
|
var _a;
|
|
const route2 = router.resolve(props.to);
|
|
return props.custom ? (_a = slots.default) == null ? void 0 : _a.call(slots, { href: props.to, navigate, route: route2 }) : h("a", { href: props.to, onClick: (e) => {
|
|
e.preventDefault();
|
|
return navigate();
|
|
} }, slots);
|
|
};
|
|
}
|
|
});
|
|
nuxtApp._route = route;
|
|
nuxtApp._middleware = nuxtApp._middleware || {
|
|
global: [],
|
|
named: {}
|
|
};
|
|
const initialLayout = nuxtApp.payload.state._layout;
|
|
nuxtApp.hooks.hookOnce("app:created", async () => {
|
|
router.beforeEach(async (to, from) => {
|
|
var _a;
|
|
to.meta = reactive(to.meta || {});
|
|
if (nuxtApp.isHydrating && initialLayout && !isReadonly(to.meta.layout)) {
|
|
to.meta.layout = initialLayout;
|
|
}
|
|
nuxtApp._processingMiddleware = true;
|
|
if (!((_a = nuxtApp.ssrContext) == null ? void 0 : _a.islandContext)) {
|
|
const middlewareEntries = /* @__PURE__ */ new Set([...globalMiddleware, ...nuxtApp._middleware.global]);
|
|
for (const middleware of middlewareEntries) {
|
|
const result = await nuxtApp.runWithContext(() => middleware(to, from));
|
|
{
|
|
if (result === false || result instanceof Error) {
|
|
const error = result || createError$1({
|
|
statusCode: 404,
|
|
statusMessage: `Page Not Found: ${initialURL}`
|
|
});
|
|
delete nuxtApp._processingMiddleware;
|
|
return nuxtApp.runWithContext(() => showError(error));
|
|
}
|
|
}
|
|
if (result === true) {
|
|
continue;
|
|
}
|
|
if (result || result === false) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
router.afterEach(() => {
|
|
delete nuxtApp._processingMiddleware;
|
|
});
|
|
await router.replace(initialURL);
|
|
if (!isEqual(route.fullPath, initialURL)) {
|
|
await nuxtApp.runWithContext(() => navigateTo(route.fullPath));
|
|
}
|
|
});
|
|
return {
|
|
provide: {
|
|
route,
|
|
router
|
|
}
|
|
};
|
|
}
|
|
});
|
|
function definePayloadReducer(name, reduce) {
|
|
{
|
|
(/* @__PURE__ */ useNuxtApp()).ssrContext._payloadReducers[name] = reduce;
|
|
}
|
|
}
|
|
const reducers = {
|
|
NuxtError: (data) => isNuxtError(data) && data.toJSON(),
|
|
EmptyShallowRef: (data) => isRef(data) && isShallow(data) && !data.value && (typeof data.value === "bigint" ? "0n" : JSON.stringify(data.value) || "_"),
|
|
EmptyRef: (data) => isRef(data) && !data.value && (typeof data.value === "bigint" ? "0n" : JSON.stringify(data.value) || "_"),
|
|
ShallowRef: (data) => isRef(data) && isShallow(data) && data.value,
|
|
ShallowReactive: (data) => isReactive(data) && isShallow(data) && toRaw(data),
|
|
Ref: (data) => isRef(data) && data.value,
|
|
Reactive: (data) => isReactive(data) && toRaw(data)
|
|
};
|
|
const revive_payload_server_eJ33V7gbc6 = /* @__PURE__ */ defineNuxtPlugin({
|
|
name: "nuxt:revive-payload:server",
|
|
setup() {
|
|
for (const reducer in reducers) {
|
|
definePayloadReducer(reducer, reducers[reducer]);
|
|
}
|
|
}
|
|
});
|
|
const components_plugin_KR1HBZs4kY = /* @__PURE__ */ defineNuxtPlugin({
|
|
name: "nuxt:global-components"
|
|
});
|
|
const element_plus_teleports_plugin_h4Dmekbj62 = /* @__PURE__ */ defineNuxtPlugin((nuxtApp) => {
|
|
nuxtApp.hook("app:rendered", (ctx) => {
|
|
var _a;
|
|
if ((_a = ctx.ssrContext) == null ? void 0 : _a.teleports) {
|
|
ctx.ssrContext.teleports = renderTeleports(ctx.ssrContext.teleports);
|
|
}
|
|
});
|
|
});
|
|
function renderTeleports(teleports) {
|
|
const body = Object.entries(teleports).reduce((all, [key, value]) => {
|
|
if (key.startsWith("#el-popper-container-") || [].includes(key)) {
|
|
return `${all}<div id="${key.slice(1)}">${value}</div>`;
|
|
}
|
|
return all;
|
|
}, teleports.body || "");
|
|
return { ...teleports, body };
|
|
}
|
|
const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => {
|
|
const handleEvent = (event) => {
|
|
const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event);
|
|
if (checkForDefaultPrevented === false || !shouldPrevent) {
|
|
return oursHandler == null ? void 0 : oursHandler(event);
|
|
}
|
|
};
|
|
return handleEvent;
|
|
};
|
|
const isBoolean = (val) => typeof val === "boolean";
|
|
const isNumber = (val) => typeof val === "number";
|
|
const isStringNumber = (val) => {
|
|
if (!isString(val)) {
|
|
return false;
|
|
}
|
|
return !Number.isNaN(Number(val));
|
|
};
|
|
function addUnit(value, defaultUnit = "px") {
|
|
if (!value)
|
|
return "";
|
|
if (isNumber(value) || isStringNumber(value)) {
|
|
return `${value}${defaultUnit}`;
|
|
} else if (isString(value)) {
|
|
return value;
|
|
}
|
|
}
|
|
const epPropKey = "__epPropKey";
|
|
const definePropType = (val) => val;
|
|
const isEpProp = (val) => isObject(val) && !!val[epPropKey];
|
|
const buildProp = (prop, key) => {
|
|
if (!isObject(prop) || isEpProp(prop))
|
|
return prop;
|
|
const { values, required, default: defaultValue, type, validator } = prop;
|
|
const _validator = values || validator ? (val) => {
|
|
let valid = false;
|
|
let allowedValues = [];
|
|
if (values) {
|
|
allowedValues = Array.from(values);
|
|
if (hasOwn(prop, "default")) {
|
|
allowedValues.push(defaultValue);
|
|
}
|
|
valid || (valid = allowedValues.includes(val));
|
|
}
|
|
if (validator)
|
|
valid || (valid = validator(val));
|
|
if (!valid && allowedValues.length > 0) {
|
|
const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", ");
|
|
warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);
|
|
}
|
|
return valid;
|
|
} : void 0;
|
|
const epProp = {
|
|
type,
|
|
required: !!required,
|
|
validator: _validator,
|
|
[epPropKey]: true
|
|
};
|
|
if (hasOwn(prop, "default"))
|
|
epProp.default = defaultValue;
|
|
return epProp;
|
|
};
|
|
const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [
|
|
key,
|
|
buildProp(option, key)
|
|
]));
|
|
const iconPropType = definePropType([
|
|
String,
|
|
Object,
|
|
Function
|
|
]);
|
|
const withInstall = (main, extra) => {
|
|
main.install = (app) => {
|
|
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
app.component(comp.name, comp);
|
|
}
|
|
};
|
|
if (extra) {
|
|
for (const [key, comp] of Object.entries(extra)) {
|
|
main[key] = comp;
|
|
}
|
|
}
|
|
return main;
|
|
};
|
|
const withInstallDirective = (directive, name) => {
|
|
directive.install = (app) => {
|
|
app.directive(name, directive);
|
|
};
|
|
return directive;
|
|
};
|
|
const EVENT_CODE = {
|
|
tab: "Tab",
|
|
enter: "Enter",
|
|
space: "Space",
|
|
left: "ArrowLeft",
|
|
up: "ArrowUp",
|
|
right: "ArrowRight",
|
|
down: "ArrowDown",
|
|
esc: "Escape",
|
|
delete: "Delete",
|
|
backspace: "Backspace",
|
|
numpadEnter: "NumpadEnter",
|
|
pageUp: "PageUp",
|
|
pageDown: "PageDown",
|
|
home: "Home",
|
|
end: "End"
|
|
};
|
|
const defaultNamespace = "el";
|
|
const statePrefix = "is-";
|
|
const _bem = (namespace, block, blockSuffix, element, modifier) => {
|
|
let cls = `${namespace}-${block}`;
|
|
if (blockSuffix) {
|
|
cls += `-${blockSuffix}`;
|
|
}
|
|
if (element) {
|
|
cls += `__${element}`;
|
|
}
|
|
if (modifier) {
|
|
cls += `--${modifier}`;
|
|
}
|
|
return cls;
|
|
};
|
|
const namespaceContextKey = Symbol("namespaceContextKey");
|
|
const useGetDerivedNamespace = (namespaceOverrides) => {
|
|
const derivedNamespace = namespaceOverrides || (getCurrentInstance() ? inject(namespaceContextKey, ref(defaultNamespace)) : ref(defaultNamespace));
|
|
const namespace = computed(() => {
|
|
return unref(derivedNamespace) || defaultNamespace;
|
|
});
|
|
return namespace;
|
|
};
|
|
const useNamespace = (block, namespaceOverrides) => {
|
|
const namespace = useGetDerivedNamespace(namespaceOverrides);
|
|
const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", "");
|
|
const e = (element) => element ? _bem(namespace.value, block, "", element, "") : "";
|
|
const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : "";
|
|
const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : "";
|
|
const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : "";
|
|
const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : "";
|
|
const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : "";
|
|
const is = (name, ...args) => {
|
|
const state = args.length >= 1 ? args[0] : true;
|
|
return name && state ? `${statePrefix}${name}` : "";
|
|
};
|
|
const cssVar = (object) => {
|
|
const styles = {};
|
|
for (const key in object) {
|
|
if (object[key]) {
|
|
styles[`--${namespace.value}-${key}`] = object[key];
|
|
}
|
|
}
|
|
return styles;
|
|
};
|
|
const cssVarBlock = (object) => {
|
|
const styles = {};
|
|
for (const key in object) {
|
|
if (object[key]) {
|
|
styles[`--${namespace.value}-${block}-${key}`] = object[key];
|
|
}
|
|
}
|
|
return styles;
|
|
};
|
|
const cssVarName = (name) => `--${namespace.value}-${name}`;
|
|
const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;
|
|
return {
|
|
namespace,
|
|
b,
|
|
e,
|
|
m,
|
|
be,
|
|
em,
|
|
bm,
|
|
bem,
|
|
is,
|
|
cssVar,
|
|
cssVarName,
|
|
cssVarBlock,
|
|
cssVarBlockName
|
|
};
|
|
};
|
|
const _prop = buildProp({
|
|
type: definePropType(Boolean),
|
|
default: null
|
|
});
|
|
const _event = buildProp({
|
|
type: definePropType(Function)
|
|
});
|
|
const createModelToggleComposable = (name) => {
|
|
const updateEventKey = `update:${name}`;
|
|
const updateEventKeyRaw2 = `onUpdate:${name}`;
|
|
const useModelToggleEmits2 = [updateEventKey];
|
|
const useModelToggleProps2 = {
|
|
[name]: _prop,
|
|
[updateEventKeyRaw2]: _event
|
|
};
|
|
const useModelToggle2 = ({
|
|
indicator,
|
|
toggleReason,
|
|
shouldHideWhenRouteChanges,
|
|
shouldProceed,
|
|
onShow,
|
|
onHide
|
|
}) => {
|
|
const instance = getCurrentInstance();
|
|
const { emit } = instance;
|
|
const props = instance.props;
|
|
const hasUpdateHandler = computed(() => isFunction(props[updateEventKeyRaw2]));
|
|
const isModelBindingAbsent = computed(() => props[name] === null);
|
|
const doShow = (event) => {
|
|
if (indicator.value === true) {
|
|
return;
|
|
}
|
|
indicator.value = true;
|
|
if (toggleReason) {
|
|
toggleReason.value = event;
|
|
}
|
|
if (isFunction(onShow)) {
|
|
onShow(event);
|
|
}
|
|
};
|
|
const doHide = (event) => {
|
|
if (indicator.value === false) {
|
|
return;
|
|
}
|
|
indicator.value = false;
|
|
if (toggleReason) {
|
|
toggleReason.value = event;
|
|
}
|
|
if (isFunction(onHide)) {
|
|
onHide(event);
|
|
}
|
|
};
|
|
const show = (event) => {
|
|
if (props.disabled === true || isFunction(shouldProceed) && !shouldProceed())
|
|
return;
|
|
const shouldEmit = hasUpdateHandler.value && isClient;
|
|
if (shouldEmit) {
|
|
emit(updateEventKey, true);
|
|
}
|
|
if (isModelBindingAbsent.value || !shouldEmit) {
|
|
doShow(event);
|
|
}
|
|
};
|
|
const hide = (event) => {
|
|
if (props.disabled === true || !isClient)
|
|
return;
|
|
const shouldEmit = hasUpdateHandler.value && isClient;
|
|
if (shouldEmit) {
|
|
emit(updateEventKey, false);
|
|
}
|
|
if (isModelBindingAbsent.value || !shouldEmit) {
|
|
doHide(event);
|
|
}
|
|
};
|
|
const onChange = (val) => {
|
|
if (!isBoolean(val))
|
|
return;
|
|
if (props.disabled && val) {
|
|
if (hasUpdateHandler.value) {
|
|
emit(updateEventKey, false);
|
|
}
|
|
} else if (indicator.value !== val) {
|
|
if (val) {
|
|
doShow();
|
|
} else {
|
|
doHide();
|
|
}
|
|
}
|
|
};
|
|
const toggle = () => {
|
|
if (indicator.value) {
|
|
hide();
|
|
} else {
|
|
show();
|
|
}
|
|
};
|
|
watch(() => props[name], onChange);
|
|
if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) {
|
|
watch(() => ({
|
|
...instance.proxy.$route
|
|
}), () => {
|
|
if (shouldHideWhenRouteChanges.value && indicator.value) {
|
|
hide();
|
|
}
|
|
});
|
|
}
|
|
return {
|
|
hide,
|
|
show,
|
|
toggle,
|
|
hasUpdateHandler
|
|
};
|
|
};
|
|
return {
|
|
useModelToggle: useModelToggle2,
|
|
useModelToggleProps: useModelToggleProps2,
|
|
useModelToggleEmits: useModelToggleEmits2
|
|
};
|
|
};
|
|
const usePopper = (referenceElementRef, popperElementRef, opts = {}) => {
|
|
const stateUpdater = {
|
|
name: "updateState",
|
|
enabled: true,
|
|
phase: "write",
|
|
fn: ({ state }) => {
|
|
const derivedState = deriveState(state);
|
|
Object.assign(states.value, derivedState);
|
|
},
|
|
requires: ["computeStyles"]
|
|
};
|
|
const options = computed(() => {
|
|
const { onFirstUpdate, placement, strategy, modifiers } = unref(opts);
|
|
return {
|
|
onFirstUpdate,
|
|
placement: placement || "bottom",
|
|
strategy: strategy || "absolute",
|
|
modifiers: [
|
|
...modifiers || [],
|
|
stateUpdater,
|
|
{ name: "applyStyles", enabled: false }
|
|
]
|
|
};
|
|
});
|
|
const instanceRef = shallowRef();
|
|
const states = ref({
|
|
styles: {
|
|
popper: {
|
|
position: unref(options).strategy,
|
|
left: "0",
|
|
top: "0"
|
|
},
|
|
arrow: {
|
|
position: "absolute"
|
|
}
|
|
},
|
|
attributes: {}
|
|
});
|
|
const destroy = () => {
|
|
if (!instanceRef.value)
|
|
return;
|
|
instanceRef.value.destroy();
|
|
instanceRef.value = void 0;
|
|
};
|
|
watch(options, (newOptions) => {
|
|
const instance = unref(instanceRef);
|
|
if (instance) {
|
|
instance.setOptions(newOptions);
|
|
}
|
|
}, {
|
|
deep: true
|
|
});
|
|
watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => {
|
|
destroy();
|
|
if (!referenceElement || !popperElement)
|
|
return;
|
|
instanceRef.value = createPopper(referenceElement, popperElement, unref(options));
|
|
});
|
|
return {
|
|
state: computed(() => {
|
|
var _a;
|
|
return { ...((_a = unref(instanceRef)) == null ? void 0 : _a.state) || {} };
|
|
}),
|
|
styles: computed(() => unref(states).styles),
|
|
attributes: computed(() => unref(states).attributes),
|
|
update: () => {
|
|
var _a;
|
|
return (_a = unref(instanceRef)) == null ? void 0 : _a.update();
|
|
},
|
|
forceUpdate: () => {
|
|
var _a;
|
|
return (_a = unref(instanceRef)) == null ? void 0 : _a.forceUpdate();
|
|
},
|
|
instanceRef: computed(() => unref(instanceRef))
|
|
};
|
|
};
|
|
function deriveState(state) {
|
|
const elements = Object.keys(state.elements);
|
|
const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}]));
|
|
const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]]));
|
|
return {
|
|
styles,
|
|
attributes
|
|
};
|
|
}
|
|
function useTimeout() {
|
|
let timeoutHandle;
|
|
const registerTimeout = (fn, delay) => {
|
|
cancelTimeout();
|
|
timeoutHandle = window.setTimeout(fn, delay);
|
|
};
|
|
const cancelTimeout = () => window.clearTimeout(timeoutHandle);
|
|
tryOnScopeDispose(() => cancelTimeout());
|
|
return {
|
|
registerTimeout,
|
|
cancelTimeout
|
|
};
|
|
}
|
|
const defaultIdInjection = {
|
|
prefix: Math.floor(Math.random() * 1e4),
|
|
current: 0
|
|
};
|
|
const ID_INJECTION_KEY = Symbol("elIdInjection");
|
|
const useIdInjection = () => {
|
|
return getCurrentInstance() ? inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;
|
|
};
|
|
const useId = (deterministicId) => {
|
|
const idInjection = useIdInjection();
|
|
const namespace = useGetDerivedNamespace();
|
|
const idRef = computed(() => unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);
|
|
return idRef;
|
|
};
|
|
const usePopperContainerId = () => {
|
|
const namespace = useGetDerivedNamespace();
|
|
const idInjection = useIdInjection();
|
|
const id = computed(() => {
|
|
return `${namespace.value}-popper-container-${idInjection.prefix}`;
|
|
});
|
|
const selector = computed(() => `#${id.value}`);
|
|
return {
|
|
id,
|
|
selector
|
|
};
|
|
};
|
|
const usePopperContainer = () => {
|
|
const { id, selector } = usePopperContainerId();
|
|
return {
|
|
id,
|
|
selector
|
|
};
|
|
};
|
|
const useDelayedToggleProps = buildProps({
|
|
showAfter: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
hideAfter: {
|
|
type: Number,
|
|
default: 200
|
|
},
|
|
autoClose: {
|
|
type: Number,
|
|
default: 0
|
|
}
|
|
});
|
|
const useDelayedToggle = ({
|
|
showAfter,
|
|
hideAfter,
|
|
autoClose,
|
|
open,
|
|
close
|
|
}) => {
|
|
const { registerTimeout } = useTimeout();
|
|
const {
|
|
registerTimeout: registerTimeoutForAutoClose,
|
|
cancelTimeout: cancelTimeoutForAutoClose
|
|
} = useTimeout();
|
|
const onOpen = (event) => {
|
|
registerTimeout(() => {
|
|
open(event);
|
|
const _autoClose = unref(autoClose);
|
|
if (isNumber(_autoClose) && _autoClose > 0) {
|
|
registerTimeoutForAutoClose(() => {
|
|
close(event);
|
|
}, _autoClose);
|
|
}
|
|
}, unref(showAfter));
|
|
};
|
|
const onClose = (event) => {
|
|
cancelTimeoutForAutoClose();
|
|
registerTimeout(() => {
|
|
close(event);
|
|
}, unref(hideAfter));
|
|
};
|
|
return {
|
|
onOpen,
|
|
onClose
|
|
};
|
|
};
|
|
const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef");
|
|
const useForwardRef = (forwardRef) => {
|
|
const setForwardRef = (el) => {
|
|
forwardRef.value = el;
|
|
};
|
|
provide(FORWARD_REF_INJECTION_KEY, {
|
|
setForwardRef
|
|
});
|
|
};
|
|
const useForwardRefDirective = (setForwardRef) => {
|
|
return {
|
|
mounted(el) {
|
|
setForwardRef(el);
|
|
},
|
|
updated(el) {
|
|
setForwardRef(el);
|
|
},
|
|
unmounted() {
|
|
setForwardRef(null);
|
|
}
|
|
};
|
|
};
|
|
const initial = {
|
|
current: 0
|
|
};
|
|
const zIndex = ref(0);
|
|
const defaultInitialZIndex = 2e3;
|
|
const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey");
|
|
const zIndexContextKey = Symbol("zIndexContextKey");
|
|
const useZIndex = (zIndexOverrides) => {
|
|
const increasingInjection = getCurrentInstance() ? inject(ZINDEX_INJECTION_KEY, initial) : initial;
|
|
const zIndexInjection = zIndexOverrides || (getCurrentInstance() ? inject(zIndexContextKey, void 0) : void 0);
|
|
const initialZIndex = computed(() => {
|
|
const zIndexFromInjection = unref(zIndexInjection);
|
|
return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;
|
|
});
|
|
const currentZIndex = computed(() => initialZIndex.value + zIndex.value);
|
|
const nextZIndex = () => {
|
|
increasingInjection.current++;
|
|
zIndex.value = increasingInjection.current;
|
|
return currentZIndex.value;
|
|
};
|
|
if (!isClient && !inject(ZINDEX_INJECTION_KEY)) ;
|
|
return {
|
|
initialZIndex,
|
|
currentZIndex,
|
|
nextZIndex
|
|
};
|
|
};
|
|
const ariaProps = buildProps({
|
|
ariaLabel: String,
|
|
ariaOrientation: {
|
|
type: String,
|
|
values: ["horizontal", "vertical", "undefined"]
|
|
},
|
|
ariaControls: String
|
|
});
|
|
const useAriaProps = (arias) => {
|
|
return pick(ariaProps, arias);
|
|
};
|
|
var _export_sfc$1 = (sfc, props) => {
|
|
const target = sfc.__vccOpts || sfc;
|
|
for (const [key, val] of props) {
|
|
target[key] = val;
|
|
}
|
|
return target;
|
|
};
|
|
const formItemContextKey = Symbol("formItemContextKey");
|
|
const POPPER_INJECTION_KEY = Symbol("popper");
|
|
const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent");
|
|
const roleTypes = [
|
|
"dialog",
|
|
"grid",
|
|
"group",
|
|
"listbox",
|
|
"menu",
|
|
"navigation",
|
|
"tooltip",
|
|
"tree"
|
|
];
|
|
const popperProps = buildProps({
|
|
role: {
|
|
type: String,
|
|
values: roleTypes,
|
|
default: "tooltip"
|
|
}
|
|
});
|
|
const __default__$7 = defineComponent({
|
|
name: "ElPopper",
|
|
inheritAttrs: false
|
|
});
|
|
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
...__default__$7,
|
|
props: popperProps,
|
|
setup(__props, { expose }) {
|
|
const props = __props;
|
|
const triggerRef = ref();
|
|
const popperInstanceRef = ref();
|
|
const contentRef = ref();
|
|
const referenceRef = ref();
|
|
const role = computed(() => props.role);
|
|
const popperProvides = {
|
|
triggerRef,
|
|
popperInstanceRef,
|
|
contentRef,
|
|
referenceRef,
|
|
role
|
|
};
|
|
expose(popperProvides);
|
|
provide(POPPER_INJECTION_KEY, popperProvides);
|
|
return (_ctx, _cache) => {
|
|
return renderSlot(_ctx.$slots, "default");
|
|
};
|
|
}
|
|
});
|
|
var Popper = /* @__PURE__ */ _export_sfc$1(_sfc_main$f, [["__file", "popper.vue"]]);
|
|
const popperArrowProps = buildProps({
|
|
arrowOffset: {
|
|
type: Number,
|
|
default: 5
|
|
}
|
|
});
|
|
const __default__$6 = defineComponent({
|
|
name: "ElPopperArrow",
|
|
inheritAttrs: false
|
|
});
|
|
const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
...__default__$6,
|
|
props: popperArrowProps,
|
|
setup(__props, { expose }) {
|
|
const props = __props;
|
|
const ns = useNamespace("popper");
|
|
const { arrowOffset, arrowRef, arrowStyle } = inject(POPPER_CONTENT_INJECTION_KEY, void 0);
|
|
watch(() => props.arrowOffset, (val) => {
|
|
arrowOffset.value = val;
|
|
});
|
|
expose({
|
|
arrowRef
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createElementBlock("span", {
|
|
ref_key: "arrowRef",
|
|
ref: arrowRef,
|
|
class: normalizeClass(unref(ns).e("arrow")),
|
|
style: normalizeStyle(unref(arrowStyle)),
|
|
"data-popper-arrow": ""
|
|
}, null, 6);
|
|
};
|
|
}
|
|
});
|
|
var ElPopperArrow = /* @__PURE__ */ _export_sfc$1(_sfc_main$e, [["__file", "arrow.vue"]]);
|
|
const NAME = "ElOnlyChild";
|
|
const OnlyChild = defineComponent({
|
|
name: NAME,
|
|
setup(_, {
|
|
slots,
|
|
attrs
|
|
}) {
|
|
var _a;
|
|
const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY);
|
|
const forwardRefDirective = useForwardRefDirective((_a = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a : NOOP);
|
|
return () => {
|
|
var _a2;
|
|
const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots, attrs);
|
|
if (!defaultSlot)
|
|
return null;
|
|
if (defaultSlot.length > 1) {
|
|
return null;
|
|
}
|
|
const firstLegitNode = findFirstLegitChild(defaultSlot);
|
|
if (!firstLegitNode) {
|
|
return null;
|
|
}
|
|
return withDirectives(cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]);
|
|
};
|
|
}
|
|
});
|
|
function findFirstLegitChild(node) {
|
|
if (!node)
|
|
return null;
|
|
const children = node;
|
|
for (const child of children) {
|
|
if (isObject(child)) {
|
|
switch (child.type) {
|
|
case Comment:
|
|
continue;
|
|
case Text:
|
|
case "svg":
|
|
return wrapTextContent(child);
|
|
case Fragment:
|
|
return findFirstLegitChild(child.children);
|
|
default:
|
|
return child;
|
|
}
|
|
}
|
|
return wrapTextContent(child);
|
|
}
|
|
return null;
|
|
}
|
|
function wrapTextContent(s) {
|
|
const ns = useNamespace("only-child");
|
|
return createVNode("span", {
|
|
"class": ns.e("content")
|
|
}, [s]);
|
|
}
|
|
const popperTriggerProps = buildProps({
|
|
virtualRef: {
|
|
type: definePropType(Object)
|
|
},
|
|
virtualTriggering: Boolean,
|
|
onMouseenter: {
|
|
type: definePropType(Function)
|
|
},
|
|
onMouseleave: {
|
|
type: definePropType(Function)
|
|
},
|
|
onClick: {
|
|
type: definePropType(Function)
|
|
},
|
|
onKeydown: {
|
|
type: definePropType(Function)
|
|
},
|
|
onFocus: {
|
|
type: definePropType(Function)
|
|
},
|
|
onBlur: {
|
|
type: definePropType(Function)
|
|
},
|
|
onContextmenu: {
|
|
type: definePropType(Function)
|
|
},
|
|
id: String,
|
|
open: Boolean
|
|
});
|
|
const __default__$5 = defineComponent({
|
|
name: "ElPopperTrigger",
|
|
inheritAttrs: false
|
|
});
|
|
const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
...__default__$5,
|
|
props: popperTriggerProps,
|
|
setup(__props, { expose }) {
|
|
const props = __props;
|
|
const { role, triggerRef } = inject(POPPER_INJECTION_KEY, void 0);
|
|
useForwardRef(triggerRef);
|
|
const ariaControls = computed(() => {
|
|
return ariaHaspopup.value ? props.id : void 0;
|
|
});
|
|
const ariaDescribedby = computed(() => {
|
|
if (role && role.value === "tooltip") {
|
|
return props.open && props.id ? props.id : void 0;
|
|
}
|
|
return void 0;
|
|
});
|
|
const ariaHaspopup = computed(() => {
|
|
if (role && role.value !== "tooltip") {
|
|
return role.value;
|
|
}
|
|
return void 0;
|
|
});
|
|
const ariaExpanded = computed(() => {
|
|
return ariaHaspopup.value ? `${props.open}` : void 0;
|
|
});
|
|
expose({
|
|
triggerRef
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return !_ctx.virtualTriggering ? (openBlock(), createBlock(unref(OnlyChild), mergeProps({ key: 0 }, _ctx.$attrs, {
|
|
"aria-controls": unref(ariaControls),
|
|
"aria-describedby": unref(ariaDescribedby),
|
|
"aria-expanded": unref(ariaExpanded),
|
|
"aria-haspopup": unref(ariaHaspopup)
|
|
}), {
|
|
default: withCtx(() => [
|
|
renderSlot(_ctx.$slots, "default")
|
|
]),
|
|
_: 3
|
|
}, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : createCommentVNode("v-if", true);
|
|
};
|
|
}
|
|
});
|
|
var ElPopperTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$d, [["__file", "trigger.vue"]]);
|
|
const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented";
|
|
const FOCUSOUT_PREVENTED_OPTS = {
|
|
cancelable: true,
|
|
bubbles: false
|
|
};
|
|
const ON_TRAP_FOCUS_EVT = "focusAfterTrapped";
|
|
const ON_RELEASE_FOCUS_EVT = "focusAfterReleased";
|
|
const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap");
|
|
const focusReason = ref();
|
|
const lastUserFocusTimestamp = ref(0);
|
|
const lastAutomatedFocusTimestamp = ref(0);
|
|
const obtainAllFocusableElements = (element) => {
|
|
const nodes = [];
|
|
const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, {
|
|
acceptNode: (node) => {
|
|
const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
|
|
if (node.disabled || node.hidden || isHiddenInput)
|
|
return NodeFilter.FILTER_SKIP;
|
|
return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
|
|
}
|
|
});
|
|
while (walker.nextNode())
|
|
nodes.push(walker.currentNode);
|
|
return nodes;
|
|
};
|
|
const getVisibleElement = (elements, container) => {
|
|
for (const element of elements) {
|
|
if (!isHidden(element, container))
|
|
return element;
|
|
}
|
|
};
|
|
const isHidden = (element, container) => {
|
|
if (getComputedStyle(element).visibility === "hidden")
|
|
return true;
|
|
while (element) {
|
|
if (container && element === container)
|
|
return false;
|
|
if (getComputedStyle(element).display === "none")
|
|
return true;
|
|
element = element.parentElement;
|
|
}
|
|
return false;
|
|
};
|
|
const getEdges = (container) => {
|
|
const focusable = obtainAllFocusableElements(container);
|
|
const first = getVisibleElement(focusable, container);
|
|
const last = getVisibleElement(focusable.reverse(), container);
|
|
return [first, last];
|
|
};
|
|
const isSelectable = (element) => {
|
|
return element instanceof HTMLInputElement && "select" in element;
|
|
};
|
|
const tryFocus = (element, shouldSelect) => {
|
|
if (element && element.focus) {
|
|
const prevFocusedElement = document.activeElement;
|
|
element.focus({ preventScroll: true });
|
|
lastAutomatedFocusTimestamp.value = window.performance.now();
|
|
if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) {
|
|
element.select();
|
|
}
|
|
}
|
|
};
|
|
const useFocusReason = () => {
|
|
return {
|
|
focusReason,
|
|
lastUserFocusTimestamp,
|
|
lastAutomatedFocusTimestamp
|
|
};
|
|
};
|
|
const createFocusOutPreventedEvent = (detail) => {
|
|
return new CustomEvent(FOCUSOUT_PREVENTED, {
|
|
...FOCUSOUT_PREVENTED_OPTS,
|
|
detail
|
|
});
|
|
};
|
|
const _sfc_main$c = defineComponent({
|
|
name: "ElFocusTrap",
|
|
inheritAttrs: false,
|
|
props: {
|
|
loop: Boolean,
|
|
trapped: Boolean,
|
|
focusTrapEl: Object,
|
|
focusStartEl: {
|
|
type: [Object, String],
|
|
default: "first"
|
|
}
|
|
},
|
|
emits: [
|
|
ON_TRAP_FOCUS_EVT,
|
|
ON_RELEASE_FOCUS_EVT,
|
|
"focusin",
|
|
"focusout",
|
|
"focusout-prevented",
|
|
"release-requested"
|
|
],
|
|
setup(props, { emit }) {
|
|
const forwardRef = ref();
|
|
let lastFocusAfterTrapped;
|
|
const { focusReason: focusReason2 } = useFocusReason();
|
|
const onKeydown = (e) => {
|
|
if (!props.loop && !props.trapped)
|
|
return;
|
|
const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;
|
|
const { loop } = props;
|
|
const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;
|
|
const currentFocusingEl = document.activeElement;
|
|
if (isTabbing && currentFocusingEl) {
|
|
const container = currentTarget;
|
|
const [first, last] = getEdges(container);
|
|
const isTabbable = first && last;
|
|
if (!isTabbable) {
|
|
if (currentFocusingEl === container) {
|
|
const focusoutPreventedEvent = createFocusOutPreventedEvent({
|
|
focusReason: focusReason2.value
|
|
});
|
|
emit("focusout-prevented", focusoutPreventedEvent);
|
|
if (!focusoutPreventedEvent.defaultPrevented) {
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
} else {
|
|
if (!shiftKey && currentFocusingEl === last) {
|
|
const focusoutPreventedEvent = createFocusOutPreventedEvent({
|
|
focusReason: focusReason2.value
|
|
});
|
|
emit("focusout-prevented", focusoutPreventedEvent);
|
|
if (!focusoutPreventedEvent.defaultPrevented) {
|
|
e.preventDefault();
|
|
if (loop)
|
|
tryFocus(first, true);
|
|
}
|
|
} else if (shiftKey && [first, container].includes(currentFocusingEl)) {
|
|
const focusoutPreventedEvent = createFocusOutPreventedEvent({
|
|
focusReason: focusReason2.value
|
|
});
|
|
emit("focusout-prevented", focusoutPreventedEvent);
|
|
if (!focusoutPreventedEvent.defaultPrevented) {
|
|
e.preventDefault();
|
|
if (loop)
|
|
tryFocus(last, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
provide(FOCUS_TRAP_INJECTION_KEY, {
|
|
focusTrapRef: forwardRef,
|
|
onKeydown
|
|
});
|
|
watch(() => props.focusTrapEl, (focusTrapEl) => {
|
|
if (focusTrapEl) {
|
|
forwardRef.value = focusTrapEl;
|
|
}
|
|
}, { immediate: true });
|
|
watch([forwardRef], ([forwardRef2], [oldForwardRef]) => {
|
|
if (forwardRef2) {
|
|
forwardRef2.addEventListener("keydown", onKeydown);
|
|
forwardRef2.addEventListener("focusin", onFocusIn);
|
|
forwardRef2.addEventListener("focusout", onFocusOut);
|
|
}
|
|
if (oldForwardRef) {
|
|
oldForwardRef.removeEventListener("keydown", onKeydown);
|
|
oldForwardRef.removeEventListener("focusin", onFocusIn);
|
|
oldForwardRef.removeEventListener("focusout", onFocusOut);
|
|
}
|
|
});
|
|
const onFocusIn = (e) => {
|
|
const trapContainer = unref(forwardRef);
|
|
if (!trapContainer)
|
|
return;
|
|
const target = e.target;
|
|
const relatedTarget = e.relatedTarget;
|
|
const isFocusedInTrap = target && trapContainer.contains(target);
|
|
if (!props.trapped) {
|
|
relatedTarget && trapContainer.contains(relatedTarget);
|
|
}
|
|
if (isFocusedInTrap)
|
|
emit("focusin", e);
|
|
if (props.trapped) {
|
|
if (isFocusedInTrap) {
|
|
lastFocusAfterTrapped = target;
|
|
} else {
|
|
tryFocus(lastFocusAfterTrapped, true);
|
|
}
|
|
}
|
|
};
|
|
const onFocusOut = (e) => {
|
|
const trapContainer = unref(forwardRef);
|
|
if (!trapContainer)
|
|
return;
|
|
if (props.trapped) {
|
|
const relatedTarget = e.relatedTarget;
|
|
if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) {
|
|
setTimeout(() => {
|
|
if (props.trapped) {
|
|
const focusoutPreventedEvent = createFocusOutPreventedEvent({
|
|
focusReason: focusReason2.value
|
|
});
|
|
emit("focusout-prevented", focusoutPreventedEvent);
|
|
if (!focusoutPreventedEvent.defaultPrevented) {
|
|
tryFocus(lastFocusAfterTrapped, true);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
} else {
|
|
const target = e.target;
|
|
const isFocusedInTrap = target && trapContainer.contains(target);
|
|
if (!isFocusedInTrap)
|
|
emit("focusout", e);
|
|
}
|
|
};
|
|
return {
|
|
onKeydown
|
|
};
|
|
}
|
|
});
|
|
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
|
|
}
|
|
var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$c, [["render", _sfc_render$2], ["__file", "focus-trap.vue"]]);
|
|
const POSITIONING_STRATEGIES = ["fixed", "absolute"];
|
|
const popperCoreConfigProps = buildProps({
|
|
boundariesPadding: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
fallbackPlacements: {
|
|
type: definePropType(Array),
|
|
default: void 0
|
|
},
|
|
gpuAcceleration: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
offset: {
|
|
type: Number,
|
|
default: 12
|
|
},
|
|
placement: {
|
|
type: String,
|
|
values: placements,
|
|
default: "bottom"
|
|
},
|
|
popperOptions: {
|
|
type: definePropType(Object),
|
|
default: () => ({})
|
|
},
|
|
strategy: {
|
|
type: String,
|
|
values: POSITIONING_STRATEGIES,
|
|
default: "absolute"
|
|
}
|
|
});
|
|
const popperContentProps = buildProps({
|
|
...popperCoreConfigProps,
|
|
id: String,
|
|
style: {
|
|
type: definePropType([String, Array, Object])
|
|
},
|
|
className: {
|
|
type: definePropType([String, Array, Object])
|
|
},
|
|
effect: {
|
|
type: definePropType(String),
|
|
default: "dark"
|
|
},
|
|
visible: Boolean,
|
|
enterable: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
pure: Boolean,
|
|
focusOnShow: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
trapping: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
popperClass: {
|
|
type: definePropType([String, Array, Object])
|
|
},
|
|
popperStyle: {
|
|
type: definePropType([String, Array, Object])
|
|
},
|
|
referenceEl: {
|
|
type: definePropType(Object)
|
|
},
|
|
triggerTargetEl: {
|
|
type: definePropType(Object)
|
|
},
|
|
stopPopperMouseEvent: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
virtualTriggering: Boolean,
|
|
zIndex: Number,
|
|
...useAriaProps(["ariaLabel"])
|
|
});
|
|
const popperContentEmits = {
|
|
mouseenter: (evt) => evt instanceof MouseEvent,
|
|
mouseleave: (evt) => evt instanceof MouseEvent,
|
|
focus: () => true,
|
|
blur: () => true,
|
|
close: () => true
|
|
};
|
|
const buildPopperOptions = (props, modifiers = []) => {
|
|
const { placement, strategy, popperOptions } = props;
|
|
const options = {
|
|
placement,
|
|
strategy,
|
|
...popperOptions,
|
|
modifiers: [...genModifiers(props), ...modifiers]
|
|
};
|
|
deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers);
|
|
return options;
|
|
};
|
|
const unwrapMeasurableEl = ($el) => {
|
|
if (!isClient)
|
|
return;
|
|
return unrefElement($el);
|
|
};
|
|
function genModifiers(options) {
|
|
const { offset, gpuAcceleration, fallbackPlacements } = options;
|
|
return [
|
|
{
|
|
name: "offset",
|
|
options: {
|
|
offset: [0, offset != null ? offset : 12]
|
|
}
|
|
},
|
|
{
|
|
name: "preventOverflow",
|
|
options: {
|
|
padding: {
|
|
top: 2,
|
|
bottom: 2,
|
|
left: 5,
|
|
right: 5
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: "flip",
|
|
options: {
|
|
padding: 5,
|
|
fallbackPlacements
|
|
}
|
|
},
|
|
{
|
|
name: "computeStyles",
|
|
options: {
|
|
gpuAcceleration
|
|
}
|
|
}
|
|
];
|
|
}
|
|
function deriveExtraModifiers(options, modifiers) {
|
|
if (modifiers) {
|
|
options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []];
|
|
}
|
|
}
|
|
const DEFAULT_ARROW_OFFSET = 0;
|
|
const usePopperContent = (props) => {
|
|
const { popperInstanceRef, contentRef, triggerRef, role } = inject(POPPER_INJECTION_KEY, void 0);
|
|
const arrowRef = ref();
|
|
const arrowOffset = ref();
|
|
const eventListenerModifier = computed(() => {
|
|
return {
|
|
name: "eventListeners",
|
|
enabled: !!props.visible
|
|
};
|
|
});
|
|
const arrowModifier = computed(() => {
|
|
var _a;
|
|
const arrowEl = unref(arrowRef);
|
|
const offset = (_a = unref(arrowOffset)) != null ? _a : DEFAULT_ARROW_OFFSET;
|
|
return {
|
|
name: "arrow",
|
|
enabled: !isUndefined(arrowEl),
|
|
options: {
|
|
element: arrowEl,
|
|
padding: offset
|
|
}
|
|
};
|
|
});
|
|
const options = computed(() => {
|
|
return {
|
|
onFirstUpdate: () => {
|
|
update();
|
|
},
|
|
...buildPopperOptions(props, [
|
|
unref(arrowModifier),
|
|
unref(eventListenerModifier)
|
|
])
|
|
};
|
|
});
|
|
const computedReference = computed(() => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef));
|
|
const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options);
|
|
watch(instanceRef, (instance) => popperInstanceRef.value = instance);
|
|
return {
|
|
attributes,
|
|
arrowRef,
|
|
contentRef,
|
|
instanceRef,
|
|
state,
|
|
styles,
|
|
role,
|
|
forceUpdate,
|
|
update
|
|
};
|
|
};
|
|
const usePopperContentDOM = (props, {
|
|
attributes,
|
|
styles,
|
|
role
|
|
}) => {
|
|
const { nextZIndex } = useZIndex();
|
|
const ns = useNamespace("popper");
|
|
const contentAttrs = computed(() => unref(attributes).popper);
|
|
const contentZIndex = ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex());
|
|
const contentClass = computed(() => [
|
|
ns.b(),
|
|
ns.is("pure", props.pure),
|
|
ns.is(props.effect),
|
|
props.popperClass
|
|
]);
|
|
const contentStyle = computed(() => {
|
|
return [
|
|
{ zIndex: unref(contentZIndex) },
|
|
unref(styles).popper,
|
|
props.popperStyle || {}
|
|
];
|
|
});
|
|
const ariaModal = computed(() => role.value === "dialog" ? "false" : void 0);
|
|
const arrowStyle = computed(() => unref(styles).arrow || {});
|
|
const updateZIndex = () => {
|
|
contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex();
|
|
};
|
|
return {
|
|
ariaModal,
|
|
arrowStyle,
|
|
contentAttrs,
|
|
contentClass,
|
|
contentStyle,
|
|
contentZIndex,
|
|
updateZIndex
|
|
};
|
|
};
|
|
const usePopperContentFocusTrap = (props, emit) => {
|
|
const trapped = ref(false);
|
|
const focusStartRef = ref();
|
|
const onFocusAfterTrapped = () => {
|
|
emit("focus");
|
|
};
|
|
const onFocusAfterReleased = (event) => {
|
|
var _a;
|
|
if (((_a = event.detail) == null ? void 0 : _a.focusReason) !== "pointer") {
|
|
focusStartRef.value = "first";
|
|
emit("blur");
|
|
}
|
|
};
|
|
const onFocusInTrap = (event) => {
|
|
if (props.visible && !trapped.value) {
|
|
if (event.target) {
|
|
focusStartRef.value = event.target;
|
|
}
|
|
trapped.value = true;
|
|
}
|
|
};
|
|
const onFocusoutPrevented = (event) => {
|
|
if (!props.trapping) {
|
|
if (event.detail.focusReason === "pointer") {
|
|
event.preventDefault();
|
|
}
|
|
trapped.value = false;
|
|
}
|
|
};
|
|
const onReleaseRequested = () => {
|
|
trapped.value = false;
|
|
emit("close");
|
|
};
|
|
return {
|
|
focusStartRef,
|
|
trapped,
|
|
onFocusAfterReleased,
|
|
onFocusAfterTrapped,
|
|
onFocusInTrap,
|
|
onFocusoutPrevented,
|
|
onReleaseRequested
|
|
};
|
|
};
|
|
const __default__$4 = defineComponent({
|
|
name: "ElPopperContent"
|
|
});
|
|
const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
...__default__$4,
|
|
props: popperContentProps,
|
|
emits: popperContentEmits,
|
|
setup(__props, { expose, emit }) {
|
|
const props = __props;
|
|
const {
|
|
focusStartRef,
|
|
trapped,
|
|
onFocusAfterReleased,
|
|
onFocusAfterTrapped,
|
|
onFocusInTrap,
|
|
onFocusoutPrevented,
|
|
onReleaseRequested
|
|
} = usePopperContentFocusTrap(props, emit);
|
|
const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props);
|
|
const {
|
|
ariaModal,
|
|
arrowStyle,
|
|
contentAttrs,
|
|
contentClass,
|
|
contentStyle,
|
|
updateZIndex
|
|
} = usePopperContentDOM(props, {
|
|
styles,
|
|
attributes,
|
|
role
|
|
});
|
|
const formItemContext = inject(formItemContextKey, void 0);
|
|
const arrowOffset = ref();
|
|
provide(POPPER_CONTENT_INJECTION_KEY, {
|
|
arrowStyle,
|
|
arrowRef,
|
|
arrowOffset
|
|
});
|
|
if (formItemContext) {
|
|
provide(formItemContextKey, {
|
|
...formItemContext,
|
|
addInputId: NOOP,
|
|
removeInputId: NOOP
|
|
});
|
|
}
|
|
const updatePopper = (shouldUpdateZIndex = true) => {
|
|
update();
|
|
shouldUpdateZIndex && updateZIndex();
|
|
};
|
|
expose({
|
|
popperContentRef: contentRef,
|
|
popperInstanceRef: instanceRef,
|
|
updatePopper,
|
|
contentStyle
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createElementBlock("div", mergeProps({
|
|
ref_key: "contentRef",
|
|
ref: contentRef
|
|
}, unref(contentAttrs), {
|
|
style: unref(contentStyle),
|
|
class: unref(contentClass),
|
|
tabindex: "-1",
|
|
onMouseenter: _cache[0] || (_cache[0] = (e) => _ctx.$emit("mouseenter", e)),
|
|
onMouseleave: _cache[1] || (_cache[1] = (e) => _ctx.$emit("mouseleave", e))
|
|
}), [
|
|
createVNode(unref(ElFocusTrap), {
|
|
trapped: unref(trapped),
|
|
"trap-on-focus-in": true,
|
|
"focus-trap-el": unref(contentRef),
|
|
"focus-start-el": unref(focusStartRef),
|
|
onFocusAfterTrapped: unref(onFocusAfterTrapped),
|
|
onFocusAfterReleased: unref(onFocusAfterReleased),
|
|
onFocusin: unref(onFocusInTrap),
|
|
onFocusoutPrevented: unref(onFocusoutPrevented),
|
|
onReleaseRequested: unref(onReleaseRequested)
|
|
}, {
|
|
default: withCtx(() => [
|
|
renderSlot(_ctx.$slots, "default")
|
|
]),
|
|
_: 3
|
|
}, 8, ["trapped", "focus-trap-el", "focus-start-el", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusin", "onFocusoutPrevented", "onReleaseRequested"])
|
|
], 16);
|
|
};
|
|
}
|
|
});
|
|
var ElPopperContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$b, [["__file", "content.vue"]]);
|
|
const ElPopper = withInstall(Popper);
|
|
const TOOLTIP_INJECTION_KEY = Symbol("elTooltip");
|
|
const useTooltipContentProps = buildProps({
|
|
...useDelayedToggleProps,
|
|
...popperContentProps,
|
|
appendTo: {
|
|
type: definePropType([String, Object])
|
|
},
|
|
content: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
rawContent: Boolean,
|
|
persistent: Boolean,
|
|
visible: {
|
|
type: definePropType(Boolean),
|
|
default: null
|
|
},
|
|
transition: String,
|
|
teleported: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
disabled: Boolean,
|
|
...useAriaProps(["ariaLabel"])
|
|
});
|
|
const useTooltipTriggerProps = buildProps({
|
|
...popperTriggerProps,
|
|
disabled: Boolean,
|
|
trigger: {
|
|
type: definePropType([String, Array]),
|
|
default: "hover"
|
|
},
|
|
triggerKeys: {
|
|
type: definePropType(Array),
|
|
default: () => [EVENT_CODE.enter, EVENT_CODE.space]
|
|
}
|
|
});
|
|
const {
|
|
useModelToggleProps: useTooltipModelToggleProps,
|
|
useModelToggleEmits: useTooltipModelToggleEmits,
|
|
useModelToggle: useTooltipModelToggle
|
|
} = createModelToggleComposable("visible");
|
|
const useTooltipProps = buildProps({
|
|
...popperProps,
|
|
...useTooltipModelToggleProps,
|
|
...useTooltipContentProps,
|
|
...useTooltipTriggerProps,
|
|
...popperArrowProps,
|
|
showArrow: {
|
|
type: Boolean,
|
|
default: true
|
|
}
|
|
});
|
|
const tooltipEmits = [
|
|
...useTooltipModelToggleEmits,
|
|
"before-show",
|
|
"before-hide",
|
|
"show",
|
|
"hide",
|
|
"open",
|
|
"close"
|
|
];
|
|
const isTriggerType = (trigger, type) => {
|
|
if (isArray(trigger)) {
|
|
return trigger.includes(type);
|
|
}
|
|
return trigger === type;
|
|
};
|
|
const whenTrigger = (trigger, type, handler) => {
|
|
return (e) => {
|
|
isTriggerType(unref(trigger), type) && handler(e);
|
|
};
|
|
};
|
|
const __default__$3 = defineComponent({
|
|
name: "ElTooltipTrigger"
|
|
});
|
|
const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
...__default__$3,
|
|
props: useTooltipTriggerProps,
|
|
setup(__props, { expose }) {
|
|
const props = __props;
|
|
const ns = useNamespace("tooltip");
|
|
const { controlled, id, open, onOpen, onClose, onToggle } = inject(TOOLTIP_INJECTION_KEY, void 0);
|
|
const triggerRef = ref(null);
|
|
const stopWhenControlledOrDisabled = () => {
|
|
if (unref(controlled) || props.disabled) {
|
|
return true;
|
|
}
|
|
};
|
|
const trigger = toRef(props, "trigger");
|
|
const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onOpen));
|
|
const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose));
|
|
const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => {
|
|
if (e.button === 0) {
|
|
onToggle(e);
|
|
}
|
|
}));
|
|
const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen));
|
|
const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose));
|
|
const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => {
|
|
e.preventDefault();
|
|
onToggle(e);
|
|
}));
|
|
const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {
|
|
const { code } = e;
|
|
if (props.triggerKeys.includes(code)) {
|
|
e.preventDefault();
|
|
onToggle(e);
|
|
}
|
|
});
|
|
expose({
|
|
triggerRef
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createBlock(unref(ElPopperTrigger), {
|
|
id: unref(id),
|
|
"virtual-ref": _ctx.virtualRef,
|
|
open: unref(open),
|
|
"virtual-triggering": _ctx.virtualTriggering,
|
|
class: normalizeClass(unref(ns).e("trigger")),
|
|
onBlur: unref(onBlur),
|
|
onClick: unref(onClick),
|
|
onContextmenu: unref(onContextMenu),
|
|
onFocus: unref(onFocus),
|
|
onMouseenter: unref(onMouseenter),
|
|
onMouseleave: unref(onMouseleave),
|
|
onKeydown: unref(onKeydown)
|
|
}, {
|
|
default: withCtx(() => [
|
|
renderSlot(_ctx.$slots, "default")
|
|
]),
|
|
_: 3
|
|
}, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]);
|
|
};
|
|
}
|
|
});
|
|
var ElTooltipTrigger = /* @__PURE__ */ _export_sfc$1(_sfc_main$a, [["__file", "trigger.vue"]]);
|
|
const __default__$2 = defineComponent({
|
|
name: "ElTooltipContent",
|
|
inheritAttrs: false
|
|
});
|
|
const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
...__default__$2,
|
|
props: useTooltipContentProps,
|
|
setup(__props, { expose }) {
|
|
const props = __props;
|
|
const { selector } = usePopperContainerId();
|
|
const ns = useNamespace("tooltip");
|
|
const contentRef = ref(null);
|
|
const destroyed = ref(false);
|
|
const {
|
|
controlled,
|
|
id,
|
|
open,
|
|
trigger,
|
|
onClose,
|
|
onOpen,
|
|
onShow,
|
|
onHide,
|
|
onBeforeShow,
|
|
onBeforeHide
|
|
} = inject(TOOLTIP_INJECTION_KEY, void 0);
|
|
const transitionClass = computed(() => {
|
|
return props.transition || `${ns.namespace.value}-fade-in-linear`;
|
|
});
|
|
const persistentRef = computed(() => {
|
|
return props.persistent;
|
|
});
|
|
const shouldRender = computed(() => {
|
|
return unref(persistentRef) ? true : unref(open);
|
|
});
|
|
const shouldShow = computed(() => {
|
|
return props.disabled ? false : unref(open);
|
|
});
|
|
const appendTo = computed(() => {
|
|
return props.appendTo || selector.value;
|
|
});
|
|
const contentStyle = computed(() => {
|
|
var _a;
|
|
return (_a = props.style) != null ? _a : {};
|
|
});
|
|
const ariaHidden = computed(() => !unref(open));
|
|
const onTransitionLeave = () => {
|
|
onHide();
|
|
};
|
|
const stopWhenControlled = () => {
|
|
if (unref(controlled))
|
|
return true;
|
|
};
|
|
const onContentEnter = composeEventHandlers(stopWhenControlled, () => {
|
|
if (props.enterable && unref(trigger) === "hover") {
|
|
onOpen();
|
|
}
|
|
});
|
|
const onContentLeave = composeEventHandlers(stopWhenControlled, () => {
|
|
if (unref(trigger) === "hover") {
|
|
onClose();
|
|
}
|
|
});
|
|
const onBeforeEnter = () => {
|
|
var _a, _b;
|
|
(_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);
|
|
onBeforeShow == null ? void 0 : onBeforeShow();
|
|
};
|
|
const onBeforeLeave = () => {
|
|
onBeforeHide == null ? void 0 : onBeforeHide();
|
|
};
|
|
const onAfterShow = () => {
|
|
onShow();
|
|
stopHandle = onClickOutside(computed(() => {
|
|
var _a;
|
|
return (_a = contentRef.value) == null ? void 0 : _a.popperContentRef;
|
|
}), () => {
|
|
if (unref(controlled))
|
|
return;
|
|
const $trigger = unref(trigger);
|
|
if ($trigger !== "hover") {
|
|
onClose();
|
|
}
|
|
});
|
|
};
|
|
const onBlur = () => {
|
|
if (!props.virtualTriggering) {
|
|
onClose();
|
|
}
|
|
};
|
|
let stopHandle;
|
|
watch(() => unref(open), (val) => {
|
|
if (!val) {
|
|
stopHandle == null ? void 0 : stopHandle();
|
|
}
|
|
}, {
|
|
flush: "post"
|
|
});
|
|
watch(() => props.content, () => {
|
|
var _a, _b;
|
|
(_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);
|
|
});
|
|
expose({
|
|
contentRef
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createBlock(Teleport, {
|
|
disabled: !_ctx.teleported,
|
|
to: unref(appendTo)
|
|
}, [
|
|
createVNode(Transition, {
|
|
name: unref(transitionClass),
|
|
onAfterLeave: onTransitionLeave,
|
|
onBeforeEnter,
|
|
onAfterEnter: onAfterShow,
|
|
onBeforeLeave
|
|
}, {
|
|
default: withCtx(() => [
|
|
unref(shouldRender) ? withDirectives((openBlock(), createBlock(unref(ElPopperContent), mergeProps({
|
|
key: 0,
|
|
id: unref(id),
|
|
ref_key: "contentRef",
|
|
ref: contentRef
|
|
}, _ctx.$attrs, {
|
|
"aria-label": _ctx.ariaLabel,
|
|
"aria-hidden": unref(ariaHidden),
|
|
"boundaries-padding": _ctx.boundariesPadding,
|
|
"fallback-placements": _ctx.fallbackPlacements,
|
|
"gpu-acceleration": _ctx.gpuAcceleration,
|
|
offset: _ctx.offset,
|
|
placement: _ctx.placement,
|
|
"popper-options": _ctx.popperOptions,
|
|
strategy: _ctx.strategy,
|
|
effect: _ctx.effect,
|
|
enterable: _ctx.enterable,
|
|
pure: _ctx.pure,
|
|
"popper-class": _ctx.popperClass,
|
|
"popper-style": [_ctx.popperStyle, unref(contentStyle)],
|
|
"reference-el": _ctx.referenceEl,
|
|
"trigger-target-el": _ctx.triggerTargetEl,
|
|
visible: unref(shouldShow),
|
|
"z-index": _ctx.zIndex,
|
|
onMouseenter: unref(onContentEnter),
|
|
onMouseleave: unref(onContentLeave),
|
|
onBlur,
|
|
onClose: unref(onClose)
|
|
}), {
|
|
default: withCtx(() => [
|
|
!destroyed.value ? renderSlot(_ctx.$slots, "default", { key: 0 }) : createCommentVNode("v-if", true)
|
|
]),
|
|
_: 3
|
|
}, 16, ["id", "aria-label", "aria-hidden", "boundaries-padding", "fallback-placements", "gpu-acceleration", "offset", "placement", "popper-options", "strategy", "effect", "enterable", "pure", "popper-class", "popper-style", "reference-el", "trigger-target-el", "visible", "z-index", "onMouseenter", "onMouseleave", "onClose"])), [
|
|
[vShow, unref(shouldShow)]
|
|
]) : createCommentVNode("v-if", true)
|
|
]),
|
|
_: 3
|
|
}, 8, ["name"])
|
|
], 8, ["disabled", "to"]);
|
|
};
|
|
}
|
|
});
|
|
var ElTooltipContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__file", "content.vue"]]);
|
|
const _hoisted_1 = ["innerHTML"];
|
|
const _hoisted_2 = { key: 1 };
|
|
const __default__$1 = defineComponent({
|
|
name: "ElTooltip"
|
|
});
|
|
const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
...__default__$1,
|
|
props: useTooltipProps,
|
|
emits: tooltipEmits,
|
|
setup(__props, { expose, emit }) {
|
|
const props = __props;
|
|
usePopperContainer();
|
|
const id = useId();
|
|
const popperRef = ref();
|
|
const contentRef = ref();
|
|
const updatePopper = () => {
|
|
var _a;
|
|
const popperComponent = unref(popperRef);
|
|
if (popperComponent) {
|
|
(_a = popperComponent.popperInstanceRef) == null ? void 0 : _a.update();
|
|
}
|
|
};
|
|
const open = ref(false);
|
|
const toggleReason = ref();
|
|
const { show, hide, hasUpdateHandler } = useTooltipModelToggle({
|
|
indicator: open,
|
|
toggleReason
|
|
});
|
|
const { onOpen, onClose } = useDelayedToggle({
|
|
showAfter: toRef(props, "showAfter"),
|
|
hideAfter: toRef(props, "hideAfter"),
|
|
autoClose: toRef(props, "autoClose"),
|
|
open: show,
|
|
close: hide
|
|
});
|
|
const controlled = computed(() => isBoolean(props.visible) && !hasUpdateHandler.value);
|
|
provide(TOOLTIP_INJECTION_KEY, {
|
|
controlled,
|
|
id,
|
|
open: readonly(open),
|
|
trigger: toRef(props, "trigger"),
|
|
onOpen: (event) => {
|
|
onOpen(event);
|
|
},
|
|
onClose: (event) => {
|
|
onClose(event);
|
|
},
|
|
onToggle: (event) => {
|
|
if (unref(open)) {
|
|
onClose(event);
|
|
} else {
|
|
onOpen(event);
|
|
}
|
|
},
|
|
onShow: () => {
|
|
emit("show", toggleReason.value);
|
|
},
|
|
onHide: () => {
|
|
emit("hide", toggleReason.value);
|
|
},
|
|
onBeforeShow: () => {
|
|
emit("before-show", toggleReason.value);
|
|
},
|
|
onBeforeHide: () => {
|
|
emit("before-hide", toggleReason.value);
|
|
},
|
|
updatePopper
|
|
});
|
|
watch(() => props.disabled, (disabled) => {
|
|
if (disabled && open.value) {
|
|
open.value = false;
|
|
}
|
|
});
|
|
const isFocusInsideContent = (event) => {
|
|
var _a, _b;
|
|
const popperContent = (_b = (_a = contentRef.value) == null ? void 0 : _a.contentRef) == null ? void 0 : _b.popperContentRef;
|
|
const activeElement = (event == null ? void 0 : event.relatedTarget) || document.activeElement;
|
|
return popperContent && popperContent.contains(activeElement);
|
|
};
|
|
expose({
|
|
popperRef,
|
|
contentRef,
|
|
isFocusInsideContent,
|
|
updatePopper,
|
|
onOpen,
|
|
onClose,
|
|
hide
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createBlock(unref(ElPopper), {
|
|
ref_key: "popperRef",
|
|
ref: popperRef,
|
|
role: _ctx.role
|
|
}, {
|
|
default: withCtx(() => [
|
|
createVNode(ElTooltipTrigger, {
|
|
disabled: _ctx.disabled,
|
|
trigger: _ctx.trigger,
|
|
"trigger-keys": _ctx.triggerKeys,
|
|
"virtual-ref": _ctx.virtualRef,
|
|
"virtual-triggering": _ctx.virtualTriggering
|
|
}, {
|
|
default: withCtx(() => [
|
|
_ctx.$slots.default ? renderSlot(_ctx.$slots, "default", { key: 0 }) : createCommentVNode("v-if", true)
|
|
]),
|
|
_: 3
|
|
}, 8, ["disabled", "trigger", "trigger-keys", "virtual-ref", "virtual-triggering"]),
|
|
createVNode(ElTooltipContent, {
|
|
ref_key: "contentRef",
|
|
ref: contentRef,
|
|
"aria-label": _ctx.ariaLabel,
|
|
"boundaries-padding": _ctx.boundariesPadding,
|
|
content: _ctx.content,
|
|
disabled: _ctx.disabled,
|
|
effect: _ctx.effect,
|
|
enterable: _ctx.enterable,
|
|
"fallback-placements": _ctx.fallbackPlacements,
|
|
"hide-after": _ctx.hideAfter,
|
|
"gpu-acceleration": _ctx.gpuAcceleration,
|
|
offset: _ctx.offset,
|
|
persistent: _ctx.persistent,
|
|
"popper-class": _ctx.popperClass,
|
|
"popper-style": _ctx.popperStyle,
|
|
placement: _ctx.placement,
|
|
"popper-options": _ctx.popperOptions,
|
|
pure: _ctx.pure,
|
|
"raw-content": _ctx.rawContent,
|
|
"reference-el": _ctx.referenceEl,
|
|
"trigger-target-el": _ctx.triggerTargetEl,
|
|
"show-after": _ctx.showAfter,
|
|
strategy: _ctx.strategy,
|
|
teleported: _ctx.teleported,
|
|
transition: _ctx.transition,
|
|
"virtual-triggering": _ctx.virtualTriggering,
|
|
"z-index": _ctx.zIndex,
|
|
"append-to": _ctx.appendTo
|
|
}, {
|
|
default: withCtx(() => [
|
|
renderSlot(_ctx.$slots, "content", {}, () => [
|
|
_ctx.rawContent ? (openBlock(), createElementBlock("span", {
|
|
key: 0,
|
|
innerHTML: _ctx.content
|
|
}, null, 8, _hoisted_1)) : (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(_ctx.content), 1))
|
|
]),
|
|
_ctx.showArrow ? (openBlock(), createBlock(unref(ElPopperArrow), {
|
|
key: 0,
|
|
"arrow-offset": _ctx.arrowOffset
|
|
}, null, 8, ["arrow-offset"])) : createCommentVNode("v-if", true)
|
|
]),
|
|
_: 3
|
|
}, 8, ["aria-label", "boundaries-padding", "content", "disabled", "effect", "enterable", "fallback-placements", "hide-after", "gpu-acceleration", "offset", "persistent", "popper-class", "popper-style", "placement", "popper-options", "pure", "raw-content", "reference-el", "trigger-target-el", "show-after", "strategy", "teleported", "transition", "virtual-triggering", "z-index", "append-to"])
|
|
]),
|
|
_: 3
|
|
}, 8, ["role"]);
|
|
};
|
|
}
|
|
});
|
|
var Tooltip = /* @__PURE__ */ _export_sfc$1(_sfc_main$8, [["__file", "tooltip.vue"]]);
|
|
const ElTooltip = withInstall(Tooltip);
|
|
const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
inheritAttrs: false
|
|
});
|
|
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return renderSlot(_ctx.$slots, "default");
|
|
}
|
|
var Collection = /* @__PURE__ */ _export_sfc$1(_sfc_main$7, [["render", _sfc_render$1], ["__file", "collection.vue"]]);
|
|
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
name: "ElCollectionItem",
|
|
inheritAttrs: false
|
|
});
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return renderSlot(_ctx.$slots, "default");
|
|
}
|
|
var CollectionItem = /* @__PURE__ */ _export_sfc$1(_sfc_main$6, [["render", _sfc_render], ["__file", "collection-item.vue"]]);
|
|
const COLLECTION_ITEM_SIGN = `data-el-collection-item`;
|
|
const createCollectionWithScope = (name) => {
|
|
const COLLECTION_NAME = `El${name}Collection`;
|
|
const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`;
|
|
const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME);
|
|
const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME);
|
|
const ElCollection = {
|
|
...Collection,
|
|
name: COLLECTION_NAME,
|
|
setup() {
|
|
const collectionRef = ref(null);
|
|
const itemMap = /* @__PURE__ */ new Map();
|
|
const getItems = () => {
|
|
const collectionEl = unref(collectionRef);
|
|
if (!collectionEl)
|
|
return [];
|
|
const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`));
|
|
const items = [...itemMap.values()];
|
|
return items.sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref));
|
|
};
|
|
provide(COLLECTION_INJECTION_KEY, {
|
|
itemMap,
|
|
getItems,
|
|
collectionRef
|
|
});
|
|
}
|
|
};
|
|
const ElCollectionItem = {
|
|
...CollectionItem,
|
|
name: COLLECTION_ITEM_NAME,
|
|
setup(_, { attrs }) {
|
|
const collectionItemRef = ref(null);
|
|
inject(COLLECTION_INJECTION_KEY, void 0);
|
|
provide(COLLECTION_ITEM_INJECTION_KEY, {
|
|
collectionItemRef
|
|
});
|
|
}
|
|
};
|
|
return {
|
|
COLLECTION_INJECTION_KEY,
|
|
COLLECTION_ITEM_INJECTION_KEY,
|
|
ElCollection,
|
|
ElCollectionItem
|
|
};
|
|
};
|
|
const dropdownProps = buildProps({
|
|
trigger: useTooltipTriggerProps.trigger,
|
|
effect: {
|
|
...useTooltipContentProps.effect,
|
|
default: "light"
|
|
},
|
|
type: {
|
|
type: definePropType(String)
|
|
},
|
|
placement: {
|
|
type: definePropType(String),
|
|
default: "bottom"
|
|
},
|
|
popperOptions: {
|
|
type: definePropType(Object),
|
|
default: () => ({})
|
|
},
|
|
id: String,
|
|
size: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
splitButton: Boolean,
|
|
hideOnClick: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
loop: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
showTimeout: {
|
|
type: Number,
|
|
default: 150
|
|
},
|
|
hideTimeout: {
|
|
type: Number,
|
|
default: 150
|
|
},
|
|
tabindex: {
|
|
type: definePropType([Number, String]),
|
|
default: 0
|
|
},
|
|
maxHeight: {
|
|
type: definePropType([Number, String]),
|
|
default: ""
|
|
},
|
|
popperClass: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
disabled: Boolean,
|
|
role: {
|
|
type: String,
|
|
default: "menu"
|
|
},
|
|
buttonProps: {
|
|
type: definePropType(Object)
|
|
},
|
|
teleported: useTooltipContentProps.teleported
|
|
});
|
|
buildProps({
|
|
command: {
|
|
type: [Object, String, Number],
|
|
default: () => ({})
|
|
},
|
|
disabled: Boolean,
|
|
divided: Boolean,
|
|
textValue: String,
|
|
icon: {
|
|
type: iconPropType
|
|
}
|
|
});
|
|
buildProps({
|
|
onKeydown: { type: definePropType(Function) }
|
|
});
|
|
createCollectionWithScope("Dropdown");
|
|
const popoverProps = buildProps({
|
|
trigger: useTooltipTriggerProps.trigger,
|
|
placement: dropdownProps.placement,
|
|
disabled: useTooltipTriggerProps.disabled,
|
|
visible: useTooltipContentProps.visible,
|
|
transition: useTooltipContentProps.transition,
|
|
popperOptions: dropdownProps.popperOptions,
|
|
tabindex: dropdownProps.tabindex,
|
|
content: useTooltipContentProps.content,
|
|
popperStyle: useTooltipContentProps.popperStyle,
|
|
popperClass: useTooltipContentProps.popperClass,
|
|
enterable: {
|
|
...useTooltipContentProps.enterable,
|
|
default: true
|
|
},
|
|
effect: {
|
|
...useTooltipContentProps.effect,
|
|
default: "light"
|
|
},
|
|
teleported: useTooltipContentProps.teleported,
|
|
title: String,
|
|
width: {
|
|
type: [String, Number],
|
|
default: 150
|
|
},
|
|
offset: {
|
|
type: Number,
|
|
default: void 0
|
|
},
|
|
showAfter: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
hideAfter: {
|
|
type: Number,
|
|
default: 200
|
|
},
|
|
autoClose: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
showArrow: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
persistent: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
"onUpdate:visible": {
|
|
type: Function
|
|
}
|
|
});
|
|
const popoverEmits = {
|
|
"update:visible": (value) => isBoolean(value),
|
|
"before-enter": () => true,
|
|
"before-leave": () => true,
|
|
"after-enter": () => true,
|
|
"after-leave": () => true
|
|
};
|
|
const updateEventKeyRaw = `onUpdate:visible`;
|
|
const __default__ = defineComponent({
|
|
name: "ElPopover"
|
|
});
|
|
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
...__default__,
|
|
props: popoverProps,
|
|
emits: popoverEmits,
|
|
setup(__props, { expose, emit }) {
|
|
const props = __props;
|
|
const onUpdateVisible = computed(() => {
|
|
return props[updateEventKeyRaw];
|
|
});
|
|
const ns = useNamespace("popover");
|
|
const tooltipRef = ref();
|
|
const popperRef = computed(() => {
|
|
var _a;
|
|
return (_a = unref(tooltipRef)) == null ? void 0 : _a.popperRef;
|
|
});
|
|
const style = computed(() => {
|
|
return [
|
|
{
|
|
width: addUnit(props.width)
|
|
},
|
|
props.popperStyle
|
|
];
|
|
});
|
|
const kls = computed(() => {
|
|
return [ns.b(), props.popperClass, { [ns.m("plain")]: !!props.content }];
|
|
});
|
|
const gpuAcceleration = computed(() => {
|
|
return props.transition === `${ns.namespace.value}-fade-in-linear`;
|
|
});
|
|
const hide = () => {
|
|
var _a;
|
|
(_a = tooltipRef.value) == null ? void 0 : _a.hide();
|
|
};
|
|
const beforeEnter = () => {
|
|
emit("before-enter");
|
|
};
|
|
const beforeLeave = () => {
|
|
emit("before-leave");
|
|
};
|
|
const afterEnter = () => {
|
|
emit("after-enter");
|
|
};
|
|
const afterLeave = () => {
|
|
emit("update:visible", false);
|
|
emit("after-leave");
|
|
};
|
|
expose({
|
|
popperRef,
|
|
hide
|
|
});
|
|
return (_ctx, _cache) => {
|
|
return openBlock(), createBlock(unref(ElTooltip), mergeProps({
|
|
ref_key: "tooltipRef",
|
|
ref: tooltipRef
|
|
}, _ctx.$attrs, {
|
|
trigger: _ctx.trigger,
|
|
placement: _ctx.placement,
|
|
disabled: _ctx.disabled,
|
|
visible: _ctx.visible,
|
|
transition: _ctx.transition,
|
|
"popper-options": _ctx.popperOptions,
|
|
tabindex: _ctx.tabindex,
|
|
content: _ctx.content,
|
|
offset: _ctx.offset,
|
|
"show-after": _ctx.showAfter,
|
|
"hide-after": _ctx.hideAfter,
|
|
"auto-close": _ctx.autoClose,
|
|
"show-arrow": _ctx.showArrow,
|
|
"aria-label": _ctx.title,
|
|
effect: _ctx.effect,
|
|
enterable: _ctx.enterable,
|
|
"popper-class": unref(kls),
|
|
"popper-style": unref(style),
|
|
teleported: _ctx.teleported,
|
|
persistent: _ctx.persistent,
|
|
"gpu-acceleration": unref(gpuAcceleration),
|
|
"onUpdate:visible": unref(onUpdateVisible),
|
|
onBeforeShow: beforeEnter,
|
|
onBeforeHide: beforeLeave,
|
|
onShow: afterEnter,
|
|
onHide: afterLeave
|
|
}), {
|
|
content: withCtx(() => [
|
|
_ctx.title ? (openBlock(), createElementBlock("div", {
|
|
key: 0,
|
|
class: normalizeClass(unref(ns).e("title")),
|
|
role: "title"
|
|
}, toDisplayString(_ctx.title), 3)) : createCommentVNode("v-if", true),
|
|
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
createTextVNode(toDisplayString(_ctx.content), 1)
|
|
])
|
|
]),
|
|
default: withCtx(() => [
|
|
_ctx.$slots.reference ? renderSlot(_ctx.$slots, "reference", { key: 0 }) : createCommentVNode("v-if", true)
|
|
]),
|
|
_: 3
|
|
}, 16, ["trigger", "placement", "disabled", "visible", "transition", "popper-options", "tabindex", "content", "offset", "show-after", "hide-after", "auto-close", "show-arrow", "aria-label", "effect", "enterable", "popper-class", "popper-style", "teleported", "persistent", "gpu-acceleration", "onUpdate:visible"]);
|
|
};
|
|
}
|
|
});
|
|
var Popover = /* @__PURE__ */ _export_sfc$1(_sfc_main$5, [["__file", "popover.vue"]]);
|
|
const attachEvents = (el, binding) => {
|
|
const popperComponent = binding.arg || binding.value;
|
|
const popover = popperComponent == null ? void 0 : popperComponent.popperRef;
|
|
if (popover) {
|
|
popover.triggerRef = el;
|
|
}
|
|
};
|
|
var PopoverDirective = {
|
|
mounted(el, binding) {
|
|
attachEvents(el, binding);
|
|
},
|
|
updated(el, binding) {
|
|
attachEvents(el, binding);
|
|
}
|
|
};
|
|
const VPopover = "popover";
|
|
const ElPopoverDirective = withInstallDirective(PopoverDirective, VPopover);
|
|
const ElPopover = withInstall(Popover, {
|
|
directive: ElPopoverDirective
|
|
});
|
|
const element_plus_injection_plugin_1RNPi6ogby = /* @__PURE__ */ defineNuxtPlugin((nuxtApp) => {
|
|
nuxtApp.vueApp.provide(ID_INJECTION_KEY, { "prefix": 1024, "current": 0 }).provide(ZINDEX_INJECTION_KEY, { "current": 0 });
|
|
});
|
|
const plugins = [
|
|
unhead_KgADcZ0jPj,
|
|
router_CaKIoANnI2,
|
|
revive_payload_server_eJ33V7gbc6,
|
|
components_plugin_KR1HBZs4kY,
|
|
element_plus_teleports_plugin_h4Dmekbj62,
|
|
element_plus_injection_plugin_1RNPi6ogby
|
|
];
|
|
const removeUndefinedProps = (props) => Object.fromEntries(Object.entries(props).filter(([, value]) => value !== void 0));
|
|
const setupForUseMeta = (metaFactory, renderChild) => (props, ctx) => {
|
|
useHead(() => metaFactory({ ...removeUndefinedProps(props), ...ctx.attrs }, ctx));
|
|
return () => {
|
|
var _a, _b;
|
|
return renderChild ? (_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a) : null;
|
|
};
|
|
};
|
|
const globalProps = {
|
|
accesskey: String,
|
|
autocapitalize: String,
|
|
autofocus: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
class: [String, Object, Array],
|
|
contenteditable: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
contextmenu: String,
|
|
dir: String,
|
|
draggable: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
enterkeyhint: String,
|
|
exportparts: String,
|
|
hidden: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
id: String,
|
|
inputmode: String,
|
|
is: String,
|
|
itemid: String,
|
|
itemprop: String,
|
|
itemref: String,
|
|
itemscope: String,
|
|
itemtype: String,
|
|
lang: String,
|
|
nonce: String,
|
|
part: String,
|
|
slot: String,
|
|
spellcheck: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
style: String,
|
|
tabindex: String,
|
|
title: String,
|
|
translate: String
|
|
};
|
|
defineComponent({
|
|
name: "NoScript",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
title: String,
|
|
body: Boolean,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((props, { slots }) => {
|
|
var _a;
|
|
const noscript = { ...props };
|
|
const textContent = (((_a = slots.default) == null ? void 0 : _a.call(slots)) || []).filter(({ children }) => children).map(({ children }) => children).join("");
|
|
if (textContent) {
|
|
noscript.children = textContent;
|
|
}
|
|
return {
|
|
noscript: [noscript]
|
|
};
|
|
})
|
|
});
|
|
defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Link",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
as: String,
|
|
crossorigin: String,
|
|
disabled: Boolean,
|
|
fetchpriority: String,
|
|
href: String,
|
|
hreflang: String,
|
|
imagesizes: String,
|
|
imagesrcset: String,
|
|
integrity: String,
|
|
media: String,
|
|
prefetch: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
referrerpolicy: String,
|
|
rel: String,
|
|
sizes: String,
|
|
title: String,
|
|
type: String,
|
|
/** @deprecated **/
|
|
methods: String,
|
|
/** @deprecated **/
|
|
target: String,
|
|
body: Boolean,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((link) => ({
|
|
link: [link]
|
|
}))
|
|
});
|
|
defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Base",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
href: String,
|
|
target: String
|
|
},
|
|
setup: setupForUseMeta((base2) => ({
|
|
base: base2
|
|
}))
|
|
});
|
|
const Title = defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Title",
|
|
inheritAttrs: false,
|
|
setup: setupForUseMeta((_, { slots }) => {
|
|
var _a, _b, _c;
|
|
return {
|
|
title: ((_c = (_b = (_a = slots.default) == null ? void 0 : _a.call(slots)) == null ? void 0 : _b[0]) == null ? void 0 : _c.children) || null
|
|
};
|
|
})
|
|
});
|
|
const Meta = defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Meta",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
charset: String,
|
|
content: String,
|
|
httpEquiv: String,
|
|
name: String,
|
|
body: Boolean,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((props) => {
|
|
const meta = { ...props };
|
|
if (meta.httpEquiv) {
|
|
meta["http-equiv"] = meta.httpEquiv;
|
|
delete meta.httpEquiv;
|
|
}
|
|
return {
|
|
meta: [meta]
|
|
};
|
|
})
|
|
});
|
|
defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Style",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
type: String,
|
|
media: String,
|
|
nonce: String,
|
|
title: String,
|
|
/** @deprecated **/
|
|
scoped: {
|
|
type: Boolean,
|
|
default: void 0
|
|
},
|
|
body: Boolean,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((props, { slots }) => {
|
|
var _a, _b, _c;
|
|
const style = { ...props };
|
|
const textContent = (_c = (_b = (_a = slots.default) == null ? void 0 : _a.call(slots)) == null ? void 0 : _b[0]) == null ? void 0 : _c.children;
|
|
if (textContent) {
|
|
style.children = textContent;
|
|
}
|
|
return {
|
|
style: [style]
|
|
};
|
|
})
|
|
});
|
|
const Head = defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Head",
|
|
inheritAttrs: false,
|
|
setup: (_props, ctx) => () => {
|
|
var _a, _b;
|
|
return (_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a);
|
|
}
|
|
});
|
|
defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Html",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
manifest: String,
|
|
version: String,
|
|
xmlns: String,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((htmlAttrs) => ({ htmlAttrs }), true)
|
|
});
|
|
defineComponent({
|
|
// eslint-disable-next-line vue/no-reserved-component-names
|
|
name: "Body",
|
|
inheritAttrs: false,
|
|
props: {
|
|
...globalProps,
|
|
renderPriority: [String, Number]
|
|
},
|
|
setup: setupForUseMeta((bodyAttrs) => ({ bodyAttrs }), true)
|
|
});
|
|
const __nuxt_component_3 = defineComponent({
|
|
name: "ClientOnly",
|
|
inheritAttrs: false,
|
|
// eslint-disable-next-line vue/require-prop-types
|
|
props: ["fallback", "placeholder", "placeholderTag", "fallbackTag"],
|
|
setup(_, { slots, attrs }) {
|
|
const mounted = ref(false);
|
|
return (props) => {
|
|
var _a;
|
|
if (mounted.value) {
|
|
return (_a = slots.default) == null ? void 0 : _a.call(slots);
|
|
}
|
|
const slot = slots.fallback || slots.placeholder;
|
|
if (slot) {
|
|
return slot();
|
|
}
|
|
const fallbackStr = props.fallback || props.placeholder || "";
|
|
const fallbackTag = props.fallbackTag || props.placeholderTag || "span";
|
|
return createElementBlock(fallbackTag, attrs, fallbackStr);
|
|
};
|
|
}
|
|
});
|
|
const _imports_0$1 = "" + __buildAssetsURL("plus-sign.4260c2a7.svg");
|
|
const _sfc_main$4 = {
|
|
__name: "RespondAdd",
|
|
__ssrInlineRender: true,
|
|
props: {
|
|
riposteoptions: Array,
|
|
index: Number
|
|
},
|
|
emits: ["selectEomji"],
|
|
setup(__props, { emit: __emit }) {
|
|
const props = __props;
|
|
const add = ref(null);
|
|
const top = ref(0);
|
|
const left = ref(0);
|
|
const close = () => {
|
|
selectEomjiPop.value = false;
|
|
};
|
|
let selectEomjiPop = ref(false);
|
|
const emit = __emit;
|
|
const selectEomji = (key) => {
|
|
close();
|
|
emit("selectEomji", key, props.index, true);
|
|
};
|
|
const jointriposte = (item) => {
|
|
return `&#x${item};`;
|
|
};
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
const _component_el_popover = ElPopover;
|
|
_push(ssrRenderComponent(_component_el_popover, mergeProps({
|
|
placement: "bottom",
|
|
width: 470,
|
|
trigger: "click",
|
|
visible: unref(selectEomjiPop),
|
|
"onUpdate:visible": ($event) => isRef(selectEomjiPop) ? selectEomjiPop.value = $event : selectEomjiPop = $event
|
|
}, _attrs), {
|
|
reference: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(`<div class="respond-add flexcenter"${_scopeId}><img class="respond-add-icon"${ssrRenderAttr("src", _imports_0$1)}${_scopeId}></div>`);
|
|
} else {
|
|
return [
|
|
createVNode("div", {
|
|
class: "respond-add flexcenter",
|
|
ref_key: "add",
|
|
ref: add
|
|
}, [
|
|
createVNode("img", {
|
|
class: "respond-add-icon",
|
|
src: _imports_0$1
|
|
})
|
|
], 512)
|
|
];
|
|
}
|
|
}),
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(`<div class="respond-list-box" style="${ssrRenderStyle({ "top": unref(top) + "px", "left": unref(left) + "px" })}"${_scopeId}><div class="respond-list-title"${_scopeId}>选择你的回应:</div><div class="respond-list"${_scopeId}><!--[-->`);
|
|
ssrRenderList(__props.riposteoptions, (item) => {
|
|
_push2(`<!--[--><!--[-->`);
|
|
ssrRenderList(item.data, (item2, key) => {
|
|
_push2(`<div class="respond-item flexcenter"${_scopeId}><div class="respond-item-key"${_scopeId}>${jointriposte(key)}</div></div>`);
|
|
});
|
|
_push2(`<!--]--><!--]-->`);
|
|
});
|
|
_push2(`<!--]--></div></div>`);
|
|
} else {
|
|
return [
|
|
createVNode("div", {
|
|
class: "respond-list-box",
|
|
style: { "top": unref(top) + "px", "left": unref(left) + "px" },
|
|
onClick: withModifiers(() => {
|
|
}, ["stop"])
|
|
}, [
|
|
createVNode("div", { class: "respond-list-title" }, "选择你的回应:"),
|
|
createVNode("div", { class: "respond-list" }, [
|
|
(openBlock(true), createBlock(Fragment, null, renderList(__props.riposteoptions, (item) => {
|
|
return openBlock(), createBlock(Fragment, { key: item }, [
|
|
(openBlock(true), createBlock(Fragment, null, renderList(item.data, (item2, key) => {
|
|
return openBlock(), createBlock("div", {
|
|
class: "respond-item flexcenter",
|
|
key
|
|
}, [
|
|
createVNode("div", {
|
|
class: "respond-item-key",
|
|
innerHTML: jointriposte(key),
|
|
onClick: ($event) => selectEomji(key)
|
|
}, null, 8, ["innerHTML", "onClick"])
|
|
]);
|
|
}), 128))
|
|
], 64);
|
|
}), 128))
|
|
])
|
|
], 12, ["onClick"])
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$4 = _sfc_main$4.setup;
|
|
_sfc_main$4.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/RespondAdd.vue");
|
|
return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
|
|
};
|
|
const __nuxt_component_4 = _sfc_main$4;
|
|
const _sfc_main$3 = {
|
|
__name: "RespondPop",
|
|
__ssrInlineRender: true,
|
|
props: {
|
|
respondDetail: Array,
|
|
respondPopObj: Object
|
|
},
|
|
emits: ["closePopList", "selectEomji"],
|
|
setup(__props, { emit: __emit }) {
|
|
ref(false);
|
|
const jointriposte = (item) => {
|
|
return `&#x${item};`;
|
|
};
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
_push(`<div${ssrRenderAttrs(mergeProps({ class: "respond-pop-mask" }, _attrs))}><div class="respond-pop">`);
|
|
if (JSON.stringify(__props.respondDetail) == "{}") {
|
|
_push(`<div class="respond-pop-no flexcenter"><img class="respond-title-icon" src="//app.gter.net/image/gter/offer/imgdetails/cross-grey.png?v=5.1.78_206050707"><img src="//app.gter.net/image/gter/offer/imgdetails/no-discussion.png?v=5.1.78_206050707" class="respond-pop-no-icon"><div class="respond-pop-no-text">- 暂无数据 -</div></div>`);
|
|
} else {
|
|
_push(`<!--[--><div class="respond-pop-title"> 共<span class="respond-pop-amount">${ssrInterpolate(__props.respondPopObj.user)}</span>人回应 <img class="respond-title-icon" src="//app.gter.net/image/gter/offer/imgdetails/cross-grey.png?v=5.1.78_206050707"></div><div class="respond-list"><!--[-->`);
|
|
ssrRenderList(__props.respondDetail, (item, index) => {
|
|
_push(`<div class="respond-item"><div class="${ssrRenderClass([{ "pitch": item.selected }, "respond-code"])}">${jointriposte(item.item)}</div><div class="respond-content flex1"><div class="respond-total">${ssrInterpolate(item.user.length)} 人作此回应</div><!--[-->`);
|
|
ssrRenderList(item.user, (item2, index2) => {
|
|
_push(`<div class="user-item"><img class="user-avatar"${ssrRenderAttr("src", item2.avatar)}> ${ssrInterpolate(item2.nickname || item2.username)}</div>`);
|
|
});
|
|
_push(`<!--]--></div></div>`);
|
|
});
|
|
_push(`<!--]--></div><!--]-->`);
|
|
}
|
|
_push(`</div></div>`);
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$3 = _sfc_main$3.setup;
|
|
_sfc_main$3.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/RespondPop.vue");
|
|
return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
|
|
};
|
|
const __nuxt_component_5 = _sfc_main$3;
|
|
const useStateKeyPrefix = "$s";
|
|
function useState(...args) {
|
|
const autoKey = typeof args[args.length - 1] === "string" ? args.pop() : void 0;
|
|
if (typeof args[0] !== "string") {
|
|
args.unshift(autoKey);
|
|
}
|
|
const [_key, init] = args;
|
|
if (!_key || typeof _key !== "string") {
|
|
throw new TypeError("[nuxt] [useState] key must be a string: " + _key);
|
|
}
|
|
if (init !== void 0 && typeof init !== "function") {
|
|
throw new Error("[nuxt] [useState] init must be a function: " + init);
|
|
}
|
|
const key = useStateKeyPrefix + _key;
|
|
const nuxt = /* @__PURE__ */ useNuxtApp();
|
|
const state = toRef(nuxt.payload.state, key);
|
|
if (state.value === void 0 && init) {
|
|
const initialValue = init();
|
|
if (isRef(initialValue)) {
|
|
nuxt.payload.state[key] = initialValue;
|
|
return initialValue;
|
|
}
|
|
state.value = initialValue;
|
|
}
|
|
return state;
|
|
}
|
|
const _imports_0 = "" + __buildAssetsURL("logo.6622f82d.png");
|
|
const _imports_1 = "data:image/png;base64,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";
|
|
const _imports_2 = "data:image/png;base64,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";
|
|
const _imports_3 = "" + __buildAssetsURL("add-icon.0b0b5313.svg");
|
|
const _imports_4 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAED0lEQVRYCe2Wu09UQRTGdwlYWWMAIzEhWhCJhRgVAbHzAWil1sT/gKcKLAqG159AYimVgIFSeVOglSYmRhPFEEiIlTQ2sP6+y5zr3OUuLFDqJLPnzHce883MmdmbSPzrLXmQDRgaGjqNfyO9Op1OFyFPuvjVZDK5Dja3tbU10dHR8d3h+4qcCDDxdZL3ku3yvhlxgMwS4nFLS8vMfv57Eujr6zuRn5//goQ3vESf0Sch9BW55vBifMrA6pFnPN9Jxk0Q2fCwiJqVwODg4Hk8J+inXMQYyVIk+xDJkDFgtyogkgK+60wrxDVki4sloMkJmifRcZJsoN/LZTvdhIEYGBioI26UQSF9E/1qHIldBLTtBQUFywRp5Z/y8vJuNjc3r6AfuA0PD5dub29PEVhOX4HERUhEjiMvM6vOHEyTbxxlcuUVcXLcUi56KTs6ItxvEQKqdlgGBYfz/cOu3J9AOcj5wGH1HG+tb48QYNI+Zxxra2ub9h2lc64XSFCVidtYNvnY2CTb/hZ9XGPIPDdcMiTgHplLAnFKSfqN86wEV20s4Nvp26Q7bEE+cSTAu+XHIq+oNqSrhQQw3NmBEl/iqpViOoY9KFp8n7LaLuefkC7MjZPo8o00l1NviEjoNQ1aSACGVx322smIaG1tXSSw1QN7WHU3q20D6zGcPF3t7e1LNvYl8boRatU7IroDwbtOgi9mzJTUxZBPAj2Ff7/5aXJW+szGMTLITVyJ2cIdAChy4JoZ42QmCfPJYfIEV3Ld+RdbnE8gLZCz3vU4mbMn/TiD4zCzBdLLHcwl0A+ylYfsItFuoDP3t918dByqCRvHSeKCXUbaXH8JGIgsiwsWpmrHHp45kK5jeCVFwr8divEbdsu9mwDGOTkzQXhF/GASq3LDakfv5Gb0qkv3fHv6+/vtRnlwoN7WL0cxa4bwCPQlI1As2coKczBJAf2WWWNIPnETB2bpwoIBPujyjTTlBD8DyBTp8KqHBPQZhcOSonBISfqNN/0dJCphX8VVsyc7dBEmm3y4Ke9Dg1PIGewecyzyTvwwe6TiYXkNx2kZkdfj/g8s8CCSvPqke+NiatixeYsPd0AAq5hBTEqH6aj/Zgs7TFMOJn/pYsf9yYVFCAhg4ibECr2QLZ06CgnFKody0b9xPA+RkbaLALugT7AGvDbp5SRY1tFEonIY8F7UKVY56L/QG6mjn5mhkRrwjapatk7VWiocUq+4KSkK6KPvl6lzBc+xUhWcfZR+0+TZ4rISUGJIFEJiBLVeY9f0l6rPbf2xBA8KE5Qw1iOje36Wbm1c2x63cnPYk4A58QjVouvqVRm2l4TMAsQfZRZcXExOBCzQVXQjyWuYpAhpf+Gr6Pqnm2U3Jvx7brH/ZbYd+APZxM/2zgvhdQAAAABJRU5ErkJggg==";
|
|
const _imports_34 = "" + __buildAssetsURL("tick-no.179037b3.svg");
|
|
const _imports_35 = "" + __buildAssetsURL("tick-option.e092d22f.svg");
|
|
const _imports_7 = "" + __buildAssetsURL("dot.1026a040.svg");
|
|
const _imports_8 = "data:image/png;base64,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";
|
|
const _imports_9 = "" + __buildAssetsURL("dot-yellow.4b5e135b.svg");
|
|
const _imports_10 = "" + __buildAssetsURL("dot-gray.86cdd7b5.svg");
|
|
const _imports_11 = "" + __buildAssetsURL("empty-icon.24a01ae2.svg");
|
|
const _imports_12 = "" + __buildAssetsURL("close-icon.86743366.svg");
|
|
const _imports_13 = "data:image/png;base64,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";
|
|
const _imports_14 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAYAAABWk2cPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFT0lEQVRIiZ2Wa2wUVRTHf3NntmsL3T6wEFChQkRFigRsQF5iVDSYKGhMjBGNj2jiBxMfTdUExGgiTUkImCgGY0BAjS8CHzRqTIxULcZgQUUwFpZCASnQdtvO7DzuvX7Yzri7szxPMsnMueec//zPueeea/i+z0WKBUwARgMS6B5+LirAhchUYDGwBLi5xPpRYCfQBmwDjp8rmHEepjOBx4BnAOMCf/AUsB5YDfSfF7Q53Rq9t9Q3PQusvUCgUtIFrGhOt27KiwmAKGXdUt/0wdkAFZozQR9d7jGOuifIyMGzgY4HNrbUN71WvBCraUt90yZgWbH+sNvNz5kO9jsHcVS2YK3aquSGimuYm5rJKKu62HVFS31T0JxufT1UFNc0ltIh6bDtzLf8PnTgbIwiEYZgQaqRRdXzMI1YEh8BNheDzgR+zbc6HfSx4cQn9AYl98NZZdJl43l09FKSoixfvXsYo6Cmj+dbDEmH9y4BEKAz28Xmnu0odKRTSs1wHOfl06dPR0ynAnvJa4stPTtKpvT+y+/gyuS46HtXpoP2gT0lwe+uXciCVGMIiud5f9i23RBupMX5gGm3OwY4u/JGlo5ehGUU7r3x5eO4p+521nS9T0/QW7D2Xd9PNI6cRrlIYhgGhmFMBRaG6V2Sb9ye6ShwrrNqIsAu5xir0ut54Z832dD9Mb1+P0lRxnPjC6oDQFZ57B78EwCtNVprgHmCXNtER5tCs985WOB8X92dEeDa7k0Ro/3OId44/DaD0iYpylhUPTcGXBwLmC/INXEkfUEm1ocTyq8A4MN/d8SCAuwd2AfA9MopsbXj3smCb611gwDG5CsH5VDMMSFydSyuWSg/9OU6rTqRiq0N5MUbTvFYAQT5RqL0yXjJIob3Z1hTrbWyyI2lSKqsypijrwKSoow6qyZiW2fV8OKEJ/mlv4OBwAagz8/EfKusyghQKYXW+qggN/u6QqNKcwTVVmGaDju5GX1f3Z2RLgSfU30TC2tnA9DppGOgVyXHRkyVUiildoW5bMs3bKiYXOD4Rc/XAEwecTXLRt8b6Vcffg+ApCgj0AGfn/o2Bjq1YnI+IEqpnWGntwEPhYZzUjP4aWA3UquI1af/fskDYxYzPTWF6akpBDooOChC23ypsapoqJiMVjnQIAhQSrWFTD8DToTGtVYVC6tmFQRoH9jDqvR6/h46xKC0kVrR6/fTkdlHR2YfSVHG02MfjOwN4N7a2zAw0FoTBAFSynat9W/hr/YAG4DlodNtVXNIZ7vpzEblpifo5d3jH8cYhbL55Pbo/ZaqWVxfMQmlFFLKEHSj1rpgtI0gd+hP1FpjGAae9vnk1FcXNEvzGd5SNYu7ahaA1kgpcV0X27Y/cl33ISllbIg/CmyUUiKEwDAMNLBroINv+n5kSNrnBByTGMXdtbdybfnVQG6y+L6P4zhdjuNM832/v5gpzelWWuqbVjqO86plWZimGU4HPOWxxz7AX3YnR93jZOQQwhCkzJFMuuwqbqi4huvKJyKGbwzhxnFdF8dxHl55cN3Wl8Y9hdY6fkdqTreubE49cSaRSKxNJBJYloUQgoSRoHFkA40jG87JNmwPKSWe53W5rvvKa4fe2oqKpkzpM2/5P2vW2bb9sG3bP2azWTzPCzdCeKqUfEJ2nueRzWa3ZLPZaa8eXLtVK43+/xJR+rJ95MgRAEzTxLKs5y3LWmZZ1nTTNDFNM6p3voTNHwRBu+/77/i+/0H4ozof8VygSqmonkIITNOcJYSYZ5rmfCFEo2EYYw3DCAzDOKa13qmUapNSfi+lPCCljMCKAQH+A/fWzoKMpJtKAAAAAElFTkSuQmCC";
|
|
const _imports_15 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEZ0lEQVR4nO2ZUU4bMRCGvUi8gcgNmp6giwCJN8wJmp6g9AQNJ0h6AsIJGk7Q9ARZ3pAAZTkBuUGD4A3B9rMW0kzWXhaSTRPiTxrNLHhizx/biZ1ALTleAGyp8QJgS00hAXZ3d6v39/d7QRBU1QKQJEl/dXX19OzsrK9eIMCc7OzshLzYEabVAsIbFmGH5+fnMY9WnAJQ/MHj4+NPwoVnZWXlGyK0lQWrAFtbWzXcL+w98eXy8rKDF2QE0FpXbm9vrwkr2HtisL6+/jGKogHxkIwA29vbddb8EeG7w+wHFxcXLcIhNgF6CBASjnPCWmqxlmLiuYW9K2TvqhN+xQQIECPAJuGQjACs/wQ3zhXrJ8QvDNQR4z5hAuoQNYsHA4k2AY5JrOMXBupo4b5jAuoQNYsHA4kZAZg6P5g6TbVAsJSbLOUGocAL4AXwAoiaxYPBC+AF8AIkOIEXwAvgBfACuASgfY3/f6czjY+xNifGY/7lRKd3DkeENWyARZzVD8fP6qPofzlapXcVEfd+h657v5kIQCeuuwPn4UmnhVwTVrBRrBcWBp3m9AirSjJAhE2bCIytfAFo+wdXwTJwd7DJTIgJBeS0leWs/sQJAzxQY1CMS2gztt+MrUYoIKdcAehA00GX0Ao5h+S0CAXk9cgLCTOQk7mwMJATkbNHaKNPUR/xAnKa5DQIBbQNcEPEg6GoAE83Lz1CK8wA600sA4sY2B5hBvo5pR+txiCnQ85nQhtXFJURlJwmOQ1CAW1FzeLBUFQAA237SqkP2Dg3rM3wNWvT4OoHsfOu6I8pqo4XuPqhrahZPBgoKsEJXAOjE00nHcINbIjr3X+GPmLcJ2yUKwYX4q3Ql20WXLFx6siycdK+SfsGoYA+RM3iwcDgEpzAJYDh6WezOm1COuzj27SN1AswwDpOq5SInBY+FzMT6KNGWME6eTm8fpO2DULB1AWYV7wAXgAvgBfAC+AF8AI0CAVeAC/AGwQA6zl9nkGADgKMnx0KCTDAbWCjDDjg7HPAiYnnHs4M5qjeJaxgo9wggPibTYC2st/YDLAOy6GvCkA70/50UtFMMbZ30gVtqyq9a6xg42RmckYApo7mRbqEUwEhWmtraz9sR9Y8NPeAd3d3vxiLVlOCseyzl0VqhIwABkTo0HFh1V+CjmNE2C8qgk6L7yaOq7O3wBh+U3yNUGAVQDMAbmEjlb20mIQ20+8bPhdN39MuHpwXJwFmRacDaTOQzzxOi1wRdNpnN5li8eadZ/YdRJbiDQGWC8tBM6ADlW4sG9ikWEXQ0y3+BjMbdptpH6kcAmzqmJ2bj6FIuQXLiIDQvZzib/gY1pN+otgIsFIoIgJFHeM3KLyJaWWntOINpQlgQIS86+wilFq8oVQBDBOIUHrxhtIFMLxBhJkUb5iJAIZXiDCz4g0zE8CACCGbXQvb49HGCT+pNW0/qZXFTAV4xvya9PDwoBGiqgAf802N7yr2Lytl8l8EmCe8ANhS4wXAlpq/sWppbrWv2fQAAAAASUVORK5CYII=";
|
|
const _imports_16 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAE40lEQVR4nO3ZjVHbSBiH8f9WEKeCiAoiKshSQZwKTq4gpgJMBZgKMBXEVwFSBSgVRK7gTAV7j27ZwQLklWTMx8Ez8xvPxF/xK61XgNE772MAeNd9DADvuqEDSPEdibyXrJL3N0r0yqBPVtIFEr3O6gEcI1fHDLqWyX/4t9AEC3XIoEuZ3s6HD02wUCSDWCP8QX0bWmEmf8rVXrL01hyfEFrjAPVtawaxpjhD6DesIi/8Ao2QS/qK0DHmaK3LAHJJ3xA6RInXWIprhApYbckglkNohUSvu0rSF4QMWtt6520OoQJWr7slviNk0NrWO2977gEk8ksu0V2V/HtXijfGL9SdY4rWDGI5hApY7acUJxijrVzSKXJtL721xBqtGcRyCBWwevpOMFP3FvL7/M4ZxHIIFbB62i6QqX8lDrFTBrEcQgWsfCnqtZaoe3McIzSTP/qbrVA/rkQl//oppviCzc5R//vgDGI5hApY+RaS/kLfDlEikb/C3OwSU6zxWDM9HNgRcg3MIJZDqICVb46f6NsBKj0c4CUyxZupOYRcfgiDMojlECpg5UvkhzBC15aYo+4fjFB3g0TtR/5+lZrL4QCVBmQQyyFUwGr3UlwjdI4pulY/9gyhCRYakEGsfQxgjF8I/cASXbOSrhA6xUwDMojlECpgtXuZ/PYXOkKu7qW4RugUMw3IIJZDqIDV7lk1j+AEC3XPqvn8U8w0IINYDqECVruXqLkFXiJT96Y4Q+gIuQZkEMshVMDKZ+XX8QhtVfL7/hr3qzTsm3yEP6hvQ5+xRu8MYjmEClj5Fmru421NsNDDZmru5yUOEesCme66RKaBGcRyCBWw8s3xE7F+YIn7jVCp+Xu8EvXjKz1shDNkanaASgMziNU2gPo/NEei9nL5I92WVfPLLLSQf24l/z7jWyNsdow5BmcQyyFUwOppy+RP675dItOOGcRyCBWwerqs/DIao2+5/PaXa4cMYu1jACOcYIpdW2KCNXpnEMshVMBqt1JcoL59rBUqNY+slZSouW1utsYRSvTKIJZDqIDV8FJcYYTNbrCQ/0Kr1F4iv+4zPT6MCRbqkUEsh1ABq2GluMIIm51jJn8UuzbCFCe43xFydcwglkOogFX/RrhCitANxsg1vBS5mtcSaxyiUocMYjmEClj1b46fCN3AasCafaREfghfEMrlz4RoBrEcQgWs+mXlj/5mR8j1dKXI1TwTJlgokkEsh1ABq35dwequU8z09GXyu0uokr9M3ppBLIdQAavuJfI/uYVWqI/WGvuoxFeEfmCJ1gxiOYQKWHVvijOEjjHHvsrUPAsukWlLBrEcQgWsupfL/6Ez9Blr7LP69T+hrlJkGRjEcggVsOperrsBlDjEvst19551Bq1tvfM2h1ABq+4t8R2hCRbaXymuEVoh0ZYMYu0ygEzNNfncnWKmLRnEcggVsOpXia947m6QyH8ntGYQa9cBjLDENzxXK4xRYmsGsRxCBayGlck/N9H+WmN5a41oBrGeagCvMoNYmwOoFNlX31oGsXI11+8hSvwv6jKAKc4QKnGENd58BrFGqHR3eVlXye+vv1HizdZlAHWZXvaCpksTLNQzg65lev1D6PN5/qvvE6z8lL/gtbVCop4ZDCnFGIm8l66S/z1DiV4ZvOs+BoB33ccA8K77F/DNI1Ad1eJHAAAAAElFTkSuQmCC";
|
|
const _imports_17 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAAECklEQVRoBe1YS2tTQRTOowmND1wYEl26Cc2jWVhXBUvEqlDqMq2KCzdaf4ArcSEIWlB3LkTpqq0IAQVRd2pUbFwY+kif2bRQKDTGhViTJsbE76QzdW7M497k5uaCGbg9Z+bOPef7zpyZnozB0G7tCPzfETC2mr7f73fk8/mbhUJhw+Px3AmFQr+VYGopAQb+DQD7GOiQ3W6/EA6Hc3JJmOVOVHteGfDkwptKpdxYiedra2t5OT5NciapPcfn8zmRNu9gl0c+I/gIJpPJ8WAwKCu4siYJxhtWKfLId0obLzP2E3LAaDTGIM+wMR9IyFoJTQmUSRsCPzg/Px9OJBIRp9P5QyAhK500I1ANPIu6gUg4HI4t9E+zsZokNCEgB3y9JJpOQAn4ekg0lQCdNtiwdNrwDbtlMpkGYrHYBw6WSyLa19e3vbi4WKAxlk5ZqCfZHEqnDMY/sn5RNO0YJfDw8BaPhzksgp+bm5MAoHder/c8jtX15eXlMTaXiwgUIsGbgytcdnBFTakUPI7Qcfg341nnOGAjAP0VHisbm83lcreYvitULyXK5HwKaTS4sLBAqSRpADmEgUk8FMgxHKdXIPOwcRwr8hr6PjzUZrPZbH88Hk/udP/+VZWA1uCJhmoEWgFeNQKtAq8KgVaCb5hAq8E3REAP4OsmoBfwdRHQE3jFBPQGXhEBPYInAlR/1GxdXV0HUa+8x0ReVf5EfwD/+mlM0iqVByjYTmAilQd72QczqG36V1ZWvkkMKOzIKubMZvNt2OVVJUqbwlmA/6ckrgYehF/Cxh6Grwge1WdD4MmWnHLaBOfDzDEJdI1XA4GAhDzA+/HuCZ4OvH8MgpehFwsz9F9A5+CpMDulBnjYrE0AwOjq4wBNFtoQbg0mRRJYlRSAbkI+wA+WEcwtYN/IrioF24rUmsVcd3f3CEA9ZFZXIY8IHibcbvelcteBlPMg1JS0EfzXXgGA7+UfANAN6Nd4H/Li0tKSZCXoHUUec8W0mVEzbQT/tQlgskgggty+jzGRxDDSaYKnU5m0KW7Ycj9GRCD16lVTyOVy2a1WawLGad4mwB/ijrA1iMRd3od8itV6xCLPf0mpdtoIfiRq1VPIYrFQ9DnJKfFLkLmH/nVh7BzA05WhZuDJt+QoFMBwdTd9MEA3BMXW09NjSafTRxHxNEBvYpBuIKhxsk2P/I47BQQAdj9OllF82JvJZI7hfsfGjZRIzcCTXx6xEgwGA0UZQL/jRSWgkm9AMI6BZ52dnaPRaJS+06RVTCGkiKtKlNMA/AXvI7j++ISNHpmenv6qCeISJxUJ2Gy21e3t7Thy3IVnA99NEVjURZ+xuRHk6K8SW/rrUhrhP+1h/SFrI2pHoB2BdgT0EoE/XD0Yrfi3Ps4AAAAASUVORK5CYII=";
|
|
const _imports_18 = "" + __buildAssetsURL("edit-icon-white.29b27582.svg");
|
|
const _imports_19 = "" + __buildAssetsURL("view-icon.da7fef35.svg");
|
|
const _imports_20 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAAEk0lEQVRoBd2YW6hVVRSGzXtw8pJkYeU5aZqVIWKgYdDxAkUpYqGJgdhDEliKCYqYGfRi2YV6SBQUxKAbPYRXEMQEfSuULkIXFBMpE6zUvKX1/bLH4W+59t5rudfu7O2Af8855hxzjH/MOddcc+0uXZpcutWRf298TwTnwKk6xqmb6814/gecAG2gqWQSbEU+sL6p2EP2CyOvJC6Au0BTSDssY+a9XNsU7CG5q0wCWoU20NDyMOx81t9FP29taxqaPeR2GtnfqLeAddamZFpBQ8o4WPnsLymxFGFfhfcakj2ktoNIQGf/TUZ0g/WdpX679TVEdQwsLoNIYFmC1VD0i9b/TqK/09UtRu4k9b4pjDaajVZhUIpNpzSNJqrP/ooyLO6m3VfhzTJ2/3vz50SMrfM79X4VGHxgtmeoD6xgW9cuBR4PXgQ++6+iV5J76bwEIuGPqD8G9Ix0B7nlhgojbqZvWAnDS6W2gdrS9vgftOu+o2egkoj00ykG2l6HwA/g+1L5Y6k8QqmJukqUQE/wBBgJgqhIKoE88hrGr2QYcD82B0C3DLZhovfIT8AT08FxTAbbQCxp3vI0Y/eDt4EmIqvMxHA3+AXkjRn2fzL2Dq3AcXALKCfKPpZSyxtQ29Fyg3K098E2tmqU2gnargOq+Jms/hdAZBXlZ7Spsw10BZ0l2sZjwUvAH37x3AM6tuFiFD9NNOtPgkaQWyHxNYjJDfJ+VbnC83l+Pcu/0Z+50tN5P7cR+lvg5Hejt4BUeY7WZBJzUi3r3ziYEHrenPx29BurhZ6NwUUbqJV4ttqggvtb8adj08lvRe+dNc4sDD0JPR/zsw6u0U4n0c/AyW9G75XX7wwGXDBHSmJhXic57e/BXkezk/8YvUdOPx3mU6jpn7VwqCQWdfQWW9E9SW/WiKXyQ9Ad1CTJJOR4SU0erx48iiZ9Qzv59eiFvYMexdlfFkAroTtNUaLriJNfg65bQqEyDW8eZEKB3n3r6LaamXyeJTqVIHwwodeiui9dEDVRmSRPAg+YxxPUdZMsSvS2Dcm1NfMk4I6/iWgFlZ7ASHzWZQvJcUjRCbi/FoK0RqBqZdYV0IzcZ858xqz5mqtKwPe9T1ZFp1kTuBMvfc2Tz5g1/6f6ENpbYC6o9ibV97TewCGZE4gB1crHMfAjVB8a5UQr9QnQuyLGHKY+D3R8gFBPin/abkp21qrrzRtkdNFKk1Ya1wLdXsM2WWrrzQBpD+kbNu4r6oXKRrwFmR0Jz4PQ9eb0i1/YprWpbx9oBy5zUGLcWeo134Hc+ZfmfHWpQ9toFfArRhA4XerrTzkV6G+U6PNyJ+0PAskY4H26mRYi2rdOcj76UnASeEDV9S2tbaRPQRcdFto6yY+UGK9ExgLffk+hFyL6wIhAQdJ11RV4AxgMKkkvOheAX0Gaj0vWvpJ6ITIdL8lgoeuk+RSMyBlJL6uXgf4MDl/JUn4LkRV4STqXrodZ+7YW0XP0OjgDkjG+q8Wxj12ecL4X/RE3KKCuk+x94KdWlpdlptA6SfRduhVMyTTi2o2GMFSHwC7QDq5/+RffN6xPYNWQnAAAAABJRU5ErkJggg==";
|
|
const _imports_21 = "" + __buildAssetsURL("collect-icon-colours.6d2ade7f.svg");
|
|
const _imports_22 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAADpUlEQVRoBe2ZO2gVQRSGTXxEo4UJYuEjGkHBoCjaKqIWViKIKFgJVkpANGlErGORSkUURBAFGy3FwkZFfKOJDxBBBG0EwfiM78f3x2wye+7c3b25s5uL5MB/d845M3P+M7MzO7u3blyyNCW7U72fqfE9tVa8wlRUtRuRTKFVJ+gBCvynSqiPE6AOpMlsKjwGinkJNIOKpIXaj0C1pH3t12Zg0m1iP0EXp0SpH/Rq5C+CJYm1R+5UUmnSbyq0od8AS43dq3Zg9Y1ctbZv9HsMZLmFplOv18OjD9sakCgP8Lpkr6FrBLSIq8Ek2lciSuIKcLmo/AVsAV7R6NgFu8hbsxjjZMKcBzaJX9jaLQWRbwR225qI7aetnJOu3UaLfCVYDLQbzQCtwCddGA8AJTggSsBmO2HQl9dFe/0OoFtVA2Xjp+mnaDMkRSYwjaj7wRuQRjLNvz7KoKgENhLwZQDiUWKbi0qggUDHU4g/x38S7AYbgNbDMnAQRITd623sQztcnjOgBXqzDAltHEfBCuCT7Rj1HHGJq6xjhm7FIckrgZlE8B1NtB1qRuQvJ/tw/AaW/Gls2iFjkkcCGqG7wBLQGlgVix5XtK13A9tO+iEgf4nkkcAFolgSt7Bpfy8n9TjOAttOM7anXCPZQyewiz4tCe332vuTZCtO2+4rtm1JjeQLmcAs+vsAXCI6FuuMkybtVHDbvUdfl9ZI/pAJnKE/l8Qn9DYFySBK8iFQ+xdgOcgkoRJYSDR7LOjMxGC40niKC0DJTjNcpbQUKgGd+93Rf1YpkVJq2SwhEtDT9i1wE9iZLXxFteZSWw+/I2BO1DJEApvozCX/Dl2vqaHlHh1Gce5EnYdI4LDTsQLEjrtRoCqvmmX36axygx4eIWS16eSy0UOoWuDuk1hl2areRjUI/SCaWl3ngdDiu1MaQ8yAFpN7vyuZV6HZl+svRALNpvPX6Lo/C5EQCWhqXfnoKnmXQyTwFJI6MkRyPSoUdfUtjkq/SuiMfw50Ab0L5CE+ngOz73NUmkAehG2fPp5BdiEbqFA9xBoolLANNpaAHZGi9bEZKHrEbbyxGbAjUrT+X8yAPh79MCPXYvRaUOcbEvpbTP+dDUgPv+4Lid6o8ngp+Ret8t9WmlwFLsf7bjcdxulWrNXyXjcBvVH5PoXXKvle+OrfzJjovo8+7dUqcfESeX0f8oqy0tToj2/fvyOjlZi46J4Xt9jIu58p8JVIU4lldAx95cL+BRfIP0NGsZjIAAAAAElFTkSuQmCC";
|
|
const _imports_23 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAACWUlEQVRoBe2Zyy4sURSGm7QBI2dESI4WyTFhxuQ8BPEQLhPEROI2FzPxHNIJOZwnOE9gSjsuESNDA9f/a7WS1a2LiC69S/ZK/uy1V7H3vy5VvatWofBaumSaE/4KF8Kd8JSCBdk/K6yRtj57w+FQmBU6hTdlSlcvhbQF6+1ZO1C/H85MeA/a3WRJ+q7Q52yhqf0iVBYWjVhbohB5yNscc0XYS8ZbDA3kn2xHDewfMY3oj3+n/AMlMyhMCiXB5FEKnOFXoOZ92TxoviIUhVCkQ0RWBbhZWZ1Lr94T3LBmZIR8qLImYp7rDER52pjxWHpIkYefFzJREYzvATcxNWiyL+XeJgGOPFardZ9wG8WBHkf0zOmhqv8dsV4c8CUTcvSNt+dYxIFcS3Sg1emLGWh1Bjj7VH/NEiLNONtk7dNbZ6es947rxwjECMQI1EWAx+i4sCx0110LfXojgls4wAtCScijVDhK8HaTV3kiA2MCJfQjZ15QQps54xzpxgjECHy7CPAYzf0LjX2mY2zG9/6ss1zTEIkv9VmH+731Ywbei1DW179FBmq+9mYdsSasX/M1nQxcu0V/Oj1UteSIXaHTRLbfghPptHFCFbidCsb3D0TpgJuBkW5gqLIhYp7rNERpVV64C7Qy6QaGlAm4rAu+zXqmeSdnIYT2fVnwT6VTzWn60blsZaN7SPvDb0AwodGNrVpCZlyU4j30qUrTOZd8Vlgjbf1GdjjO26Y+4tsy0r6nnEIVuvNEfscIegew0YP9JXBjHwiXgv+d0PRLhb3hQKlw7B9OdA0v8gypmLKP2lSLggAAAABJRU5ErkJggg==";
|
|
const _imports_24 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD+ElEQVRIiaWWz2sdVRTHP3NnJkkDmlaCeWlsAgF5LYI2vhjQJqAgFTdqEpVukoWFgii6849wJf5AKOgiXSnYBHfV7hJd1Px4uChm86BNayYakr7Nm5c3M+e6mHffm3mZSaJ+N8Pcc+75nu+5d84ZKwgCToBngUlgCngROAs0gC2gDCwDK8DvxwWyjiG8ClwDJk6SFXAHuA58828J+4GvgbdPSNSJH4D3gb87DSrDeQ7Y+B9kALPAejNWCp0K54CFTqdQoLxjUd5RVPahemBhW3DmlObc4zA2IDw3oHGy0od54EYW4QCwCjyV9N7wLG7+ofirZh0p6clezcx5YaygO00PgHFgp5PwJjBtXkTD0qbiViU77Ty8Niq8VRRUOr9F3/dnoH2GHyTJ4L+RAdyqKJY20/tEZBr4MEk4n3RY96wjycYK8GYRiv35pOteWqJlWXO+76OAEonvLBT4/q59pIr3xuCNIlx5Jt/nu7s2obTIsCxrAhhXxB2khTXPYr+eH2isAL0u7NZguA/6e7P9HtVhbTtWqbVGaw0wqYjbVQtl7+hzuzQcP78tx89XR/N9yzuHYk0p4IXkyr1q/vXvdWOFGx5s7sYqL53LJ+yMpbUeV0AhuVg9yA9ggm9sx8/blXYSWUjGapZ1UBF3/RZyugUQl68WwC9bTWKvmchw/p4EGVprHGAbeNoY+7o19fBwWc0FqQXwyUtpm7lItY450NfdJhMRtNbbio4ZNvRYvjqArWp6/X7zPessR/p0S6GIICKrDvHwnDVOFwvCupf+Ds057dbg0185ZPvi9Tihnytp28UBSZIhIsuKeFK3UCpozvSkN5qSmTNLwpxpf29cdoPTPVAabJczDENEZEUBa8STGogvzTsXokNBf9yMb2UWbldi+ym3vfbuhQjbignDMCSKot+AVadpXyDR3kqDmstV4admP93wstUZ3K+2zxLg8qhQGtSIaKIoMoQLSqlW8/4KWAJMC2K6KLwyIvksOXh5RJguSqqUYRguAV9Ceh4WgNUoioaUUlhW/GmsexaLJxzA0+eF55sDWEQIggDf9x/6vj8OeJ2EAHO+7y84joNt26bLE0rc1Mue4l4VHtVj8tM9mpG++GaXCu1fDKPs4OAA3/fnoyjK/MUAYG9vb8513c9c133CcRyMWqP4KJgyRlFEo9HYr9frH4vIjShqX8IsQoIgGHJd9/Ourq4Zo/Y4Yq3bFyQIgsVGo/ER8MAkYOBk7oaHwGytVrvqOM41x3EmbNtOESdhPuwwDO8EQXDdcZyT/wg3FeK6LmEY4jgOjUZjXCk1adv2lFKqZFnW2abaP7XWayKyHEXRSnd392oQBGZPK5mkwn8AJekF2afMgmEAAAAASUVORK5CYII=";
|
|
const _imports_25 = "" + __buildAssetsURL("title.98892974.png");
|
|
const _imports_26 = "" + __buildAssetsURL("bi-icon.c9939802.png");
|
|
const _imports_27 = "" + __buildAssetsURL("arrowsRight.59ee73d7.svg");
|
|
const _imports_28 = "" + __buildAssetsURL("menu-icon-gray.d61f02b1.svg");
|
|
const _imports_29 = "" + __buildAssetsURL("comment-icon-gray.2c8779f9.svg");
|
|
const _imports_30 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMKADAAQAAAABAAAAMAAAAADbN2wMAAAFFklEQVRoBdWZW2icRRTHdze7MVsviblYRVEbr4iihnjpmnuCxEARtQYFxZc+ircHfUygUkXQPlnQKuibBEEkNRISkxDazUNDQLBREW0pPtikmsqa2N1ks/5OzLecmb0k+/ml+zkw7DlnZs78/zNn5puZDQZ2KI2MjFwVjUZfxf1+8q3ki+STmUzm/a6uri+RPUlBT7xYTsbHx+8Kh8NfA/ZGq8hRP0U40NnZueYY3P6G3DYs1G5ycrKmoqLiqyLgpekL5DcL+SjF7jkBOn+ZfLMF4i90e7RfGxsbKzRDVvPC6k4QeFp3FwwGjywuLtYRUtcgx1VZBJtRV5VtW/ScACBv070TSgf7+/tTra2tS+vr6+/qMuT7LL1k1VMCs7OzEQBHFIo0C/U3R2dtfO/I8gvZ27XuRvaUwPLy8g2CSwFZUnIAAr9qHbI3ad2N7CkBQuQWDYIRPqv1lpaWBLaUslUq2ZXoKQEQ9GoUjLARMlKGLUsAMhW6vhvZMwKDg4Pi60kLxJjWh4aGBPDljg0yq47s9tczAu3t7c8CYo8CcjGdTh9TeqChoeFqdL1GzupyN7InBEZHR2VUD1oAPu/p6fld21gjTVonhE5r3Y3sCYHKysqP6FyPfprweNsGFAqFHrVs31l6yWq45BaqASCDU1NThzA9o8wiHuXEecqyiWoQIMS+yVOnJJNrAsPDw7sA/wG9PWf1+FMkEnndsgUmJiYewnaPsieqq6tnlO5KLJmA7DZtbW1PEA7vMQP2YewCo7qfr2/CRkO8v2LZrkwkEilOr3LQ285uJPeJefJn5E+co7jeEbDnT3RyLSV3k9vJz5PzfUETEHqM0DlBuZHkiAHYPzFGjQL3yixN98kxRWK4lY6PYLi+gD9Z6NUFyjbMjO4v+Hgch3kXZTwej6ZSqfPU2VXMTyll9Dm3sLCwN4TTj2kooyt7dL5cDHwGRx+urq42FQIvoGKx2N/08xJ1/xDdi4S/pvr6+gNBwkPir9S1kKbNF+zrb3V3d89tF5CsH+oXG5CCrpLJ5HXcHw4DXO9kM24IvMhClY/UuYK97VABd+3dnGizx3O6SeR8yIjV3TCtdTKVZLSzidvV0XKAFwCAT2aB/CtEJHSMnaiurm6pubk5u60RYkabxsbGjGG4hApr6H5CSPd4OmcG2O6MGjQwCNrl2ttOy2B5xOrjRA4Bq4KvVGZgrwYEoRnZRo0RJsaNGdANyilv4nxYY2BNzPxvZmB6evpOSNQqAkuszx+3JMC0+WKG+ObEFHgR43xX1rckYDUqp2rEP0A2TrI5BObn5325BgBszACBEZfRzCEgxmKpHASJ9Rri/w6FS258J0UP2zGuKvlGBGwMnNnBRv62o6ND7hGlz0A5WAHYiH8IbYRPXgIDAwO+WwMQMOIfAtmraHZaioyssY1eaoLyGAbgBzU+CBWeAV3RDzKHy3vBcYXCco7L0xlH384MOHXL8svjgRH/gDiugQgBI0SYnqJrYKty7dwj2SaQjX/x7/sZAKOxgHX8+56AXCEBuUeAbqbkysqKcQf37QzwR/llXGsPOcg3f+f6+vqS2pbzGsE70c+6AluYVgN2uVHooUK/teQa7RL9mNZFziFApUa7kta3Ktd1PZZ/qKqqOmz7lBA6bxt9qJ/hKecpeSCzscmV8g2M8nDqu8SOs0B+B2AP8JQjD7s5aeMbIE/lpAbI/Oc/3XJ6cGlYW1u70Nvb69lTpEsYO9/sHwHIu0q4cL20AAAAAElFTkSuQmCC";
|
|
const _imports_31 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAQAAAAABGUUKwAAAD30lEQVR4AeVa7XXaMBSVDANkBDxB6QRxJmg6QVmANp2gZAOaDBCYoGwQugGZAGUD+F9Q7zPIxxAZy7ZkG0vn5Ejoy/fe954+7HDWgrRbf/8FGPeMySFyIRmf9MOneR3QeB0PufQMkJ+AOAlwlvgqYMEdD6ebswarPwOrs5WaTP7QD5PDPdu/6tvs1bZAAHaTTUcODx6S3aNqS6MhINcP0Z7tcq0csF6IUBBVyerGt8EDdLhO6iASFkg3qVEBEOORGS3+zaxf8V6NCmAOVw4RLhfWCvOZzns2KoBkMjoHdOH38EJb6abGBCCLYgW+NUW+Y7uBad8i/RoTACCjIkA544Mi/U37NiYALDoyBemyXyMCwP0HcP8vLomZzt2IANj+JqYAXferXQCyPi4/zvb1ooLVLgBi/6UoSOqPLVOUGZc3plYBYP17xH6UB0rX3mM9oauvWlebAOT6ONOXsv6R5KYqWd342gQ4un7p4yxugysdgap1/aoTmIzfrcdk+cikb0aft4z6ytXOPeDfejwCSvqrkLgT6xMgpwIQeSx6VeJeiSZUwXbuTACL5GGlYGmbuJoPBrKfbJIndL3w2QlOmtu6B9gmLxn7S0BdpRNl5Xp8a/ogHj5/AIa9/gZ7/RpzlN7uNM+fwUozTX3pqjT2WAA6oR0PKQWA81UvfPqcRnGc50+6rqVlgTfNX+lsEQA0PkDsCHQB8kQrfk8XUUkl3PKGqtzynE6lr+A+CHBCm7QcrCt4CNf9JEAMGMe9KyQNzvuJdoGCrt8gXOuPlpwEeLc+79VMiC/Q2GfF1eC1DlTiE7zHCVvhCosgF75qgHPAkjzASwEQ+vFJ1tsQgOcvyfOxCLp520qTtznhir0ifIGrt61tJn/EtqTcyxCg+McCuFECCCr4lFT8E+cASgifyMekWbBQnH0MgS2MHi+ABzEOUnh0H+CJ9RMBfLoPYPv7KICKBw/yLTgu0zzjNcCf+wBfqO1PiaAWQaEqupyfuz9xVQJ0mbfiRqv/SfwnAvhxH+AzpUQ6jz3Ah/sA3H+aJq7KvoTAW9aJVwkglCJdzHHO0VqfuMYCZKnTETG2/fB5lsVFeUBWewfqeab1iVxagE7eB7D4zS5ZMRGgm/cBPs8L70SASypda1vW1pfmkwjQtfvA8bXXKk1WV04EQKPQdbjWOhzuHkywJwJ06zjMHxH7udYngRIBoNgSv+m+fOWJz/GvOxNTEokAtFoibozcJjX5JlWGmoePDem6GstkvJ8gPyryzEQAGkQnJnwxvaMFJGeS+GHnbobfC8b475yxNpvfD1j5I3AP8P+E06KT/wdPOffX7me6UQAAAABJRU5ErkJggg==";
|
|
const _imports_33 = "data:image/png;base64,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";
|
|
const _imports_36 = "" + __buildAssetsURL("QRCode-icon.a105d5fc.svg");
|
|
const _imports_37 = "" + __buildAssetsURL("delete-icon.4d386dce.svg");
|
|
const _imports_38 = "" + __buildAssetsURL("arrows-icon.271dd0d3.svg");
|
|
const _imports_39 = "" + __buildAssetsURL("tick-orange.233abc69.svg");
|
|
const _imports_40 = "" + __buildAssetsURL("issue-bj.44adad8c.svg");
|
|
const _imports_41 = "" + __buildAssetsURL("cross-gray.2c215ff3.svg");
|
|
const _imports_42 = "" + __buildAssetsURL("arrows-black.688ffbe9.svg");
|
|
const _export_sfc = (sfc, props) => {
|
|
const target = sfc.__vccOpts || sfc;
|
|
for (const [key, val] of props) {
|
|
target[key] = val;
|
|
}
|
|
return target;
|
|
};
|
|
const _sfc_main$2 = {
|
|
name: "#answer-app",
|
|
async setup() {
|
|
const $ajax = (url, data) => {
|
|
url = url.indexOf("//") > -1 ? url : baseURL2 + url;
|
|
return new Promise(function(resolve, reject) {
|
|
axios.post(url, data, {
|
|
emulateJSON: true,
|
|
withCredentials: true,
|
|
headers: {
|
|
authorization: "production" !== "production"
|
|
// 头部标记
|
|
}
|
|
}).then(function(res) {
|
|
var data2 = null;
|
|
try {
|
|
data2 = typeof res.data == "string" ? JSON.parse(res.data) : res.data;
|
|
if (data2["code"] == 401) {
|
|
goLogin();
|
|
}
|
|
if (data2["code"] != 200)
|
|
handleMsg("error", data2["message"] || "报错了,请重试!!!");
|
|
} catch (error) {
|
|
}
|
|
resolve(data2);
|
|
}).catch((err) => {
|
|
if (err.response.status == 401)
|
|
;
|
|
resolve(err.response.data);
|
|
});
|
|
});
|
|
};
|
|
const $ajaxGET = (url, data) => {
|
|
url = url.indexOf("//") > -1 ? url : baseURL2 + url;
|
|
return new Promise(function(resolve, reject) {
|
|
axios.get(url, data, {
|
|
emulateJSON: true,
|
|
withCredentials: true,
|
|
headers: {
|
|
authorization: "production" !== "production"
|
|
// 头部标记
|
|
}
|
|
}).then(function(res) {
|
|
var data2 = null;
|
|
try {
|
|
data2 = typeof res.data == "string" ? JSON.parse(res.data) : res.data;
|
|
if (data2["code"] == 401) {
|
|
goLogin();
|
|
}
|
|
if (data2["code"] != 200)
|
|
handleMsg("error", data2["message"] || "报错了,请重试!!!");
|
|
} catch (error) {
|
|
}
|
|
resolve(data2);
|
|
}).catch((err) => {
|
|
if (err.response.status == 401)
|
|
;
|
|
resolve(err.response.data);
|
|
});
|
|
});
|
|
};
|
|
let isNeedLogin = ref(true);
|
|
const goLogin = () => {
|
|
return;
|
|
};
|
|
const route = useRoute();
|
|
let detailsInfoDataVuex = useState("detailsInfoData", () => {
|
|
});
|
|
const baseURL2 = "https://ask.gter.net";
|
|
let type = ref("list");
|
|
let originUrl = ref("");
|
|
onUnmounted(() => {
|
|
window.removeEventListener("keydown", handleKeydown);
|
|
window.removeEventListener("scroll", handleScroll);
|
|
});
|
|
const getCurrentUrl = () => {
|
|
return `${window.location["origin"]}?uniqid=${detailsInfo.value["uniqid"] || ""}`;
|
|
};
|
|
let myCount = ref({});
|
|
const getUserData = (key) => {
|
|
$ajax("/api/user").then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
myCount.value = data.count;
|
|
handleMy(key);
|
|
});
|
|
};
|
|
let isSearchMode = ref(false);
|
|
const setHistoricalSearchList = () => {
|
|
if (!keyword.value)
|
|
return;
|
|
historicalSearchList.value.unshift(keyword.value);
|
|
historicalSearchList.value = [...new Set(historicalSearchList.value)];
|
|
historicalSearchList.value = historicalSearchList.value.slice(0, 10);
|
|
localStorage.setItem("historical-Search", JSON.stringify(historicalSearchList.value));
|
|
};
|
|
const searchClick = () => {
|
|
setHistoricalSearchList();
|
|
page = 1;
|
|
list.value = [];
|
|
backupsList = [];
|
|
listHeight.value = 0;
|
|
type.value = "list";
|
|
pitchIndex.value = null;
|
|
openBottom();
|
|
myModelState.value = false;
|
|
replaceState({
|
|
keyword: keyword.value
|
|
});
|
|
searchBlur();
|
|
getList();
|
|
};
|
|
const searchFocus = () => {
|
|
if (historicalSearchList.value.length == 0)
|
|
return;
|
|
historicalSearchState.value = true;
|
|
};
|
|
const searchBlur = () => {
|
|
setTimeout(() => historicalSearchState.value = false, 300);
|
|
};
|
|
const handleClickHistoricalItem = (value) => {
|
|
keyword.value = value;
|
|
searchClick();
|
|
};
|
|
const handleClickClear = () => {
|
|
keyword.value = "";
|
|
page = 1;
|
|
list.value = [];
|
|
backupsList = [];
|
|
listHeight.value = 0;
|
|
type.value = "list";
|
|
openBottom();
|
|
pitchIndex.value = null;
|
|
getList();
|
|
};
|
|
let historicalSearchState = ref(false);
|
|
let historicalSearchList = ref([]);
|
|
let tabListFixeState = ref(false);
|
|
const handleScroll = () => {
|
|
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
|
const scrollHeight = document.documentElement.scrollHeight;
|
|
const clientHeight = document.documentElement.clientHeight;
|
|
if (scrollTop + clientHeight >= scrollHeight - 40 && type.value == "list")
|
|
getList();
|
|
if (scrollTop > 115)
|
|
tabListFixeState.value = true;
|
|
else
|
|
tabListFixeState.value = false;
|
|
};
|
|
let keyword = ref("");
|
|
let keywordText = ref("");
|
|
let list = ref([]);
|
|
let backupsList = [];
|
|
let page = 1;
|
|
let total = ref(0);
|
|
let loading = ref(false);
|
|
let inTheEndState = ref(false);
|
|
let isListEmptyState = ref();
|
|
let zeroreply = ref(0);
|
|
const getList = () => {
|
|
if (page == 0 || loading.value)
|
|
return;
|
|
loading.value = true;
|
|
$ajax("/api/lists", {
|
|
page,
|
|
limit: 20,
|
|
keyword: keyword.value,
|
|
type: typePitch.value,
|
|
zeroreply: zeroreply.value
|
|
}).then((res) => {
|
|
if (res.code == 401)
|
|
;
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
data.data.forEach((element) => {
|
|
element["content"] = element["content"].replace(/<[^>]*>/g, "");
|
|
element["content"] = element["content"].replace(/ /g, "");
|
|
});
|
|
list.value = list.value.concat(data.data || []);
|
|
backupsList = backupsList.concat(data.data || []);
|
|
total.value = data.count || 0;
|
|
keywordText.value = keyword.value || "";
|
|
if (list.value.length >= data["count"])
|
|
page = 0;
|
|
else
|
|
page++;
|
|
if (page == 0 && list.value.length != 0)
|
|
inTheEndState.value = true;
|
|
else
|
|
inTheEndState.value = false;
|
|
if (list.value.length == 0)
|
|
isListEmptyState.value = true;
|
|
else
|
|
isListEmptyState.value = false;
|
|
if (keyword.value)
|
|
isSearchMode.value = true;
|
|
else
|
|
isSearchMode.value = false;
|
|
if (type.value == "details")
|
|
handleInsertRelatedlist();
|
|
if (list.value.length == 0)
|
|
type.value = "list";
|
|
}).finally(() => loading.value = false);
|
|
};
|
|
let typeList = ref([]);
|
|
let typePitch = ref(null);
|
|
let pageHeaderHeight = ref(0);
|
|
let pageListHeight = ref(0);
|
|
let detailsInfo = ref({});
|
|
let detailsIsanswered = ref(0);
|
|
let detailsIscollection = ref(0);
|
|
let detailsIsmyself = ref(0);
|
|
let detailsToken = "";
|
|
let detailShare = ref({});
|
|
let detailLoading = ref(false);
|
|
const getDetails = (uniqid, index, isOpenAnswer) => {
|
|
if (detailLoading.value)
|
|
return;
|
|
detailLoading.value = true;
|
|
detailsInfo.value = {};
|
|
answerList.value = [];
|
|
answerPage.value = 0;
|
|
$ajax("/api/details", { uniqid }).then((res) => {
|
|
if (res.code != 200) {
|
|
type.value = "list";
|
|
openBottom();
|
|
pitchIndex.value = null;
|
|
return;
|
|
}
|
|
let data = res.data;
|
|
data["info"]["uniqid"] = uniqid;
|
|
detailsInfo.value = data["info"] || {};
|
|
detailsIsanswered.value = data["isanswered"] || 0;
|
|
detailsIscollection.value = data["iscollection"] || 0;
|
|
detailsIsmyself.value = data["ismyself"] || 0;
|
|
detailsToken = data["token"] || "";
|
|
detailShare.value = data["share"] || {};
|
|
type.value = "details";
|
|
if (index !== null && index !== void 0)
|
|
cut(index);
|
|
else
|
|
calculateListIndex(data.info, uniqid);
|
|
answerList.value = [];
|
|
answerPage.value = 1;
|
|
getAnswerList();
|
|
closeAllTransmitState();
|
|
if (isOpenAnswer)
|
|
openIAnswer();
|
|
seo.value = data.seo;
|
|
yourAnswer.value = {
|
|
text: "",
|
|
anonymous: 0
|
|
};
|
|
nextTick(() => detailsAreaScrollTop());
|
|
handleInsertRelatedlist(uniqid);
|
|
}).finally(() => detailLoading.value = false);
|
|
};
|
|
const detailsAreaScrollTop = () => {
|
|
let detailsArea = document.querySelector(".details-area-box");
|
|
detailsArea.scrollTo({
|
|
top: 0,
|
|
behavior: "smooth"
|
|
});
|
|
};
|
|
const calculateListIndex = (info, uniqid) => {
|
|
let targetList = [...list.value];
|
|
if (targetList.length == 0 && isSearchMode.value == false && myModelState.value == false) {
|
|
setTimeout(() => calculateListIndex(info, uniqid), 200);
|
|
return;
|
|
}
|
|
let valve = false;
|
|
list.value.forEach((element, index) => {
|
|
if (element["uniqid"] == uniqid) {
|
|
cut(index);
|
|
pitchIndex.value = index;
|
|
valve = true;
|
|
}
|
|
});
|
|
if (!valve) {
|
|
let content = "";
|
|
if (info["content"].indexOf("<img") == -1)
|
|
content = info["content"];
|
|
content = content.replace(/<[^>]*>/g, "");
|
|
content = content.replace(/ /g, "");
|
|
const obj = {
|
|
answers: info["answers"],
|
|
content,
|
|
publicationdate: info["publicationdate"],
|
|
title: info["title"],
|
|
typename: info["typename"],
|
|
uniqid
|
|
};
|
|
list.value.unshift(obj);
|
|
if (!myModelState.value)
|
|
backupsList.unshift(obj);
|
|
cut(0);
|
|
}
|
|
};
|
|
let answerList = ref([]);
|
|
let answerPage = ref(1);
|
|
let answerLoading = false;
|
|
const getAnswerList = () => {
|
|
if (answerLoading || answerPage.value == 0)
|
|
return;
|
|
answerLoading = true;
|
|
$ajax("/api/details/answerList", {
|
|
token: detailsToken,
|
|
limit: 20,
|
|
page: answerPage.value
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
data.data.forEach((element, index) => {
|
|
element.coinnum = element.reward;
|
|
element["commentList"] = [];
|
|
element["tab"] = "riposte";
|
|
nextTick(() => {
|
|
getRiposte(index);
|
|
});
|
|
});
|
|
answerList.value = answerList.value.concat(data.data);
|
|
if (answerList.value.length == data["count"])
|
|
answerPage.value = 0;
|
|
else
|
|
answerPage.value++;
|
|
detailsInfo.value["answers"] = data["count"];
|
|
if (pitchIndex.value !== null)
|
|
list.value[pitchIndex.value]["answers"] = data["count"];
|
|
}).finally(() => answerLoading = false);
|
|
};
|
|
const operateLike = (token, index) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
$ajax("/api/operate/like", { token }).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
answerList.value[index]["islike"] = data["status"];
|
|
answerList.value[index]["likenum"] = data["count"];
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
const operateCollect = (token = detailsToken, index) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
$ajax("/api/operate/collect", {
|
|
token
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
myCollectionPage = 1;
|
|
myCollectionList.value = [];
|
|
if (data["type"] == "askquestioncollection") {
|
|
detailsIscollection.value = data["status"];
|
|
detailsInfo.value["collectionnum"] = data["count"];
|
|
} else {
|
|
answerList.value[index]["iscollection"] = data["status"];
|
|
answerList.value[index]["collectionnum"] = data["count"];
|
|
}
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
if (data["status"])
|
|
myCount.value["collect"]++;
|
|
else
|
|
myCount.value["collect"]--;
|
|
});
|
|
};
|
|
let IAnswerState = ref(false);
|
|
let IAnswerEditState = ref(false);
|
|
let IAnswerInfo = ref({});
|
|
const openIAnswer = (index, type2) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
if (index == null) {
|
|
IAnswerInfo.value = {
|
|
title: detailsInfo.value["title"],
|
|
content: detailsInfo.value["content"],
|
|
anonymous: 0
|
|
};
|
|
IAnswerState.value = true;
|
|
nextTick(() => handleInput());
|
|
} else {
|
|
if (type2 == "my") {
|
|
IAnswerInfo.value = {
|
|
title: detailsInfo.value["title"],
|
|
...myAnswerList.value[index],
|
|
text: myAnswerList.value[index]["content"],
|
|
content: detailsInfo.value["content"]
|
|
};
|
|
myType.value = "";
|
|
} else {
|
|
IAnswerInfo.value = {
|
|
title: detailsInfo.value["title"],
|
|
...answerList.value[index],
|
|
text: answerList.value[index]["content"],
|
|
content: detailsInfo.value["content"]
|
|
};
|
|
}
|
|
IAnswerEditState.value = true;
|
|
nextTick(() => handleInput());
|
|
}
|
|
};
|
|
const closeIAnswer = () => {
|
|
IAnswerState.value = false;
|
|
IAnswerEditState.value = false;
|
|
isDirectlyListIAnswer = false;
|
|
};
|
|
const amendIAnswer = () => {
|
|
IAnswerInfo.value["anonymous"] = IAnswerInfo.value["anonymous"] == 0 ? 1 : 0;
|
|
};
|
|
const submitAnswer = (type2) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
let questionTextarea = null;
|
|
if (type2 == "you")
|
|
questionTextarea = document.querySelector(".your-answer-textarea");
|
|
else
|
|
questionTextarea = document.querySelector(".question-textarea");
|
|
if (questionTextarea)
|
|
IAnswerInfo.value["text"] = questionTextarea.innerHTML;
|
|
$ajax("/api/publish/answerSubmit", {
|
|
token: IAnswerInfo.value["token"] || detailsToken,
|
|
anonymous: IAnswerInfo.value["anonymous"] || 0,
|
|
content: IAnswerInfo.value["text"]
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
if (isDirectlyListIAnswer) {
|
|
getDetails(IAnswerInfo.value["uniqid"], IAnswerInfo.value["index"]);
|
|
IAnswerState.value = false;
|
|
} else {
|
|
answerList.value = [];
|
|
answerPage.value = 1;
|
|
getAnswerList();
|
|
closeIAnswer();
|
|
if (!IAnswerInfo.value["token"])
|
|
myCount.value["answer"]++;
|
|
if (type2 == "you")
|
|
questionTextarea.innerHTML = "";
|
|
}
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
const openCommentState = (index) => {
|
|
if (answerList.value[index]["commentState"])
|
|
answerList.value[index]["commentState"] = false;
|
|
else
|
|
answerList.value[index]["commentState"] = true;
|
|
if (answerList.value[index]["commentList"].length == 0 && answerList.value[index]["commentnum"] != 0)
|
|
getAnswerCommentList(index);
|
|
};
|
|
const getAnswerCommentList = (index) => {
|
|
getAnswerCommentPublic(index, 2).then((res) => {
|
|
let data = res.data;
|
|
answerList.value[index]["commentList"] = answerList.value[index]["commentList"].concat(data.data);
|
|
answerList.value[index]["commentCount"] = data["count"];
|
|
});
|
|
};
|
|
const handleAllComment = (index) => {
|
|
getAnswerCommentPublic(index, 1e3).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
let slice3 = data.data.slice(1);
|
|
let merged1 = [...answerList.value[index]["commentList"], ...slice3.filter((item2) => !answerList.value[index]["commentList"].find((item1) => item1.id == item2.id))];
|
|
answerList.value[index]["commentList"] = merged1;
|
|
answerList.value[index]["showOneCommentState"] = false;
|
|
});
|
|
};
|
|
const getAnswerCommentPublic = (index, limit) => {
|
|
return new Promise((resolve, reject) => {
|
|
$ajax("/api/comment/lists", {
|
|
token: answerList.value[index]["token"],
|
|
limit,
|
|
childlimit: 1
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
resolve(res);
|
|
});
|
|
});
|
|
};
|
|
const submitAnswerComments = (index, ind, i) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
const targetAnswerList = [...answerList.value];
|
|
let content = "";
|
|
let parentid = null;
|
|
let token = targetAnswerList[index]["token"];
|
|
if (i != null) {
|
|
content = targetAnswerList[index]["commentList"][ind]["child"][i]["commentInput"];
|
|
parentid = targetAnswerList[index]["commentList"][ind]["child"][i]["id"];
|
|
} else if (ind != null) {
|
|
content = targetAnswerList[index]["commentList"][ind]["commentInput"];
|
|
parentid = targetAnswerList[index]["commentList"][ind]["id"];
|
|
} else
|
|
content = targetAnswerList[index]["commentInput"];
|
|
$ajax("/api/comment/submit", {
|
|
content,
|
|
token,
|
|
parentid
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
if (i != null) {
|
|
let targetData = {
|
|
id: data["commentid"],
|
|
content,
|
|
isauthor: 1,
|
|
islike: 0,
|
|
likenum: 0,
|
|
reply: {
|
|
nickname: targetAnswerList[index]["commentList"][ind]["child"][i]["nickname"]
|
|
},
|
|
...data
|
|
};
|
|
targetAnswerList[index]["commentList"][ind]["child"][i]["commentInput"] = "";
|
|
targetAnswerList[index]["commentList"][ind]["child"].unshift(targetData);
|
|
targetAnswerList[index]["commentList"][ind]["childnum"]++;
|
|
} else if (ind != null) {
|
|
let targetData = {
|
|
id: data["commentid"],
|
|
content,
|
|
isauthor: 1,
|
|
islike: 0,
|
|
likenum: 0,
|
|
reply: [],
|
|
...data
|
|
};
|
|
targetAnswerList[index]["commentList"][ind]["child"].unshift(targetData);
|
|
targetAnswerList[index]["commentList"][ind]["childnum"]++;
|
|
targetAnswerList[index]["commentList"][ind]["commentInput"] = "";
|
|
} else {
|
|
let targetData = {
|
|
id: data["commentid"],
|
|
content,
|
|
isauthor: 1,
|
|
islike: 0,
|
|
likenum: 0,
|
|
...data,
|
|
child: []
|
|
};
|
|
targetAnswerList[index]["commentList"].unshift(targetData);
|
|
targetAnswerList[index]["commentCount"]++;
|
|
targetAnswerList[index]["commentInput"] = "";
|
|
}
|
|
targetAnswerList[index]["commentnum"] = data["count"];
|
|
closeAnswerCommentsChild();
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
const operateAnswerCommentsLike = (token, index, ind, i) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
$ajax("/api/comment/like", {
|
|
token
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
const targetAnswerList = [...answerList.value];
|
|
if (i == null) {
|
|
targetAnswerList[index]["commentList"][ind]["islike"] = data["status"];
|
|
targetAnswerList[index]["commentList"][ind]["likenum"] = data["likenum"];
|
|
} else {
|
|
targetAnswerList[index]["commentList"][ind]["child"][i]["islike"] = data["status"];
|
|
targetAnswerList[index]["commentList"][ind]["child"][i]["likenum"] = data["likenum"];
|
|
}
|
|
answerList.value = targetAnswerList;
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
const openAnswerCommentsChild = (index, ind, i) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
closeAnswerCommentsChild();
|
|
if (i == null)
|
|
answerList.value[index].commentList[ind]["childState"] = true;
|
|
else
|
|
answerList.value[index].commentList[ind]["child"][i]["childState"] = true;
|
|
};
|
|
const closeAnswerCommentsChild = (index, ind, i) => {
|
|
const targetAnswerList = [...answerList.value];
|
|
targetAnswerList.forEach((element) => {
|
|
if (element["commentList"] && element["commentList"].length != 0) {
|
|
element["commentList"].forEach((ele) => {
|
|
ele["childState"] = false;
|
|
if (ele["child"] && ele["child"].length != 0) {
|
|
ele["child"].forEach((el) => {
|
|
el["childState"] = false;
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
answerList.value = targetAnswerList;
|
|
};
|
|
const alsoCommentsData = (index, ind) => {
|
|
const targetAnswerList = [...answerList.value];
|
|
const parentid = targetAnswerList[index]["commentList"][ind]["id"];
|
|
const token = targetAnswerList[index]["token"];
|
|
$ajax("/api/comment/childrenList", {
|
|
token,
|
|
parentid,
|
|
limit: 20,
|
|
page: 1,
|
|
childlimit: 1
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
let merged1 = [...targetAnswerList[index]["commentList"][ind]["child"], ...data.data.filter((item2) => !targetAnswerList[index]["commentList"][ind]["child"].find((item1) => item1.id == item2.id))];
|
|
targetAnswerList[index]["commentList"][ind]["child"] = merged1;
|
|
answerList.value = targetAnswerList;
|
|
});
|
|
};
|
|
let myType = ref("");
|
|
const handleMy = (key) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
if (Object.keys(myCount.value).length === 0) {
|
|
getUserData(key);
|
|
return;
|
|
}
|
|
if (key == "collect") {
|
|
myCollectionList.value = [];
|
|
myCollectionPage = 1;
|
|
getMyCollection();
|
|
} else if (key == "answers") {
|
|
myAnswerList.value = [];
|
|
myAnswerPage = 1;
|
|
getMyAnswer();
|
|
} else if (key == "questions") {
|
|
myQuestionsList.value = [];
|
|
myQuestionsPage = 1;
|
|
getMyQuestions();
|
|
}
|
|
};
|
|
let myCollectionList = ref([]);
|
|
let myCollectionCount = ref(0);
|
|
let myCollectionPage = 1;
|
|
let myCollectionLading = false;
|
|
const getMyCollection = () => {
|
|
if (myCollectionPage == 0 || myCollectionLading)
|
|
return;
|
|
myCollectionLading = true;
|
|
$ajax("/api/user/collect", {
|
|
limit: 20,
|
|
page: myCollectionPage
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
myType.value = "collect";
|
|
data.data.forEach((element) => {
|
|
if (element["type"] == "askanswercollection") {
|
|
let content = element["data"]["content"];
|
|
element["data"]["content"] = processHtml(content);
|
|
}
|
|
});
|
|
myCollectionList.value = myCollectionList.value.concat(data.data);
|
|
myCollectionCount.value = data.count;
|
|
if (myCollectionList.value.length != data["count"])
|
|
myCollectionPage++;
|
|
else
|
|
myCollectionPage = 0;
|
|
}).finally(() => myCollectionLading = false);
|
|
};
|
|
const processHtml = (html) => {
|
|
var parser = new DOMParser();
|
|
var doc = parser.parseFromString(html, "text/html");
|
|
var img = doc.querySelector("img");
|
|
if (img)
|
|
return `<img src="${img.src}">`;
|
|
else
|
|
return doc.body.textContent;
|
|
};
|
|
const cancelCollection = (token, index) => {
|
|
$ajax("/api/user/deleteCollect", { token }).then((res) => {
|
|
if (res.code == 200) {
|
|
myCollectionList.value.splice(index, 1);
|
|
myCollectionCount.value--;
|
|
myCount.value["collect"]--;
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
}
|
|
});
|
|
};
|
|
const handleCollectionScroll = (e) => {
|
|
const el = e.target;
|
|
if (el.scrollHeight - el.scrollTop >= el.clientHeight + 10)
|
|
return;
|
|
getMyCollection();
|
|
};
|
|
let myAnswerList = ref([]);
|
|
let myAnswerCount = ref(0);
|
|
let myAnswerPage = 1;
|
|
let myAnswerloadimg = false;
|
|
const getMyAnswer = () => {
|
|
if (myAnswerPage == 0 || myAnswerloadimg)
|
|
return;
|
|
myAnswerloadimg = true;
|
|
$ajax("/api/user/answer", {
|
|
limit: 20,
|
|
page: myAnswerPage
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
data.data.forEach((element) => {
|
|
element["popupState"] = false;
|
|
});
|
|
data.data.forEach((element) => {
|
|
let content = element["content"];
|
|
element["content"] = processHtml(content);
|
|
});
|
|
myAnswerList.value = myAnswerList.value.concat(data.data);
|
|
myAnswerCount.value = data.count;
|
|
if (myAnswerList.value.length != data["count"])
|
|
myAnswerPage++;
|
|
else
|
|
myAnswerPage = 0;
|
|
myType.value = "answers";
|
|
}).finally(() => myAnswerloadimg = false);
|
|
};
|
|
const handleAnswersScroll = (e) => {
|
|
const el = e.target;
|
|
if (el.scrollHeight - el.scrollTop >= el.clientHeight + 10)
|
|
return;
|
|
getMyAnswer();
|
|
};
|
|
let answerIndexOld = null;
|
|
const cutAnswerPopupState = (index) => {
|
|
myAnswerList.value[index]["popupState"] = true;
|
|
if (answerIndexOld == index) {
|
|
myAnswerList.value[index]["popupState"] = false;
|
|
answerIndexOld = null;
|
|
} else {
|
|
myAnswerList.value[index]["popupState"] = true;
|
|
if (answerIndexOld != null)
|
|
myAnswerList.value[answerIndexOld]["popupState"] = false;
|
|
answerIndexOld = index;
|
|
}
|
|
};
|
|
const changeAnonymous = (token, anonymous, index) => {
|
|
$ajax("/api/publish/changeAnonymous", {
|
|
token,
|
|
anonymous
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
res.data;
|
|
myAnswerList.value[index]["anonymous"] = anonymous;
|
|
cutAnswerPopupState(index);
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
let myQuestionsList = ref([]);
|
|
let myQuestionsCount = ref(0);
|
|
let myQuestionsPage = 0;
|
|
let myQuestionsloading = false;
|
|
const getMyQuestions = () => {
|
|
if (myQuestionsPage == 0 || myQuestionsloading)
|
|
return;
|
|
myQuestionsloading = true;
|
|
$ajax("/api/user/questions", {
|
|
limit: 20,
|
|
page: myQuestionsPage
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
myQuestionsList.value = myQuestionsList.value.concat(data.data);
|
|
myQuestionsCount.value = data.count;
|
|
myType.value = "questions";
|
|
if (myQuestionsList.value.length != data["count"])
|
|
myQuestionsPage++;
|
|
else
|
|
myQuestionsPage = 0;
|
|
}).finally(() => myQuestionsloading = false);
|
|
};
|
|
const handleQuestionsScroll = (e) => {
|
|
const el = e.target;
|
|
if (el.scrollHeight - el.scrollTop >= el.clientHeight + 10)
|
|
return;
|
|
getMyQuestions();
|
|
};
|
|
let questionsIndexOld = null;
|
|
const cutQuestionsPopupState = (index) => {
|
|
myQuestionsList.value[index]["popupState"] = true;
|
|
if (questionsIndexOld == index) {
|
|
myQuestionsList.value[index]["popupState"] = false;
|
|
questionsIndexOld = null;
|
|
} else {
|
|
myQuestionsList.value[index]["popupState"] = true;
|
|
if (questionsIndexOld != null)
|
|
myQuestionsList.value[questionsIndexOld]["popupState"] = false;
|
|
questionsIndexOld = index;
|
|
}
|
|
};
|
|
const changeAnonymousQuestions = (token, anonymous, index) => {
|
|
$ajax("/api/publish/changeAnonymous", {
|
|
token,
|
|
anonymous
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
myQuestionsList.value[index]["anonymous"] = anonymous;
|
|
cutQuestionsPopupState(index);
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
});
|
|
};
|
|
let questionsSetp = ref(0);
|
|
const cutQuestionsSetp = (value) => questionsSetp.value = value;
|
|
let questionsTypeList = ref([]);
|
|
let questionsObj = ref({
|
|
// 提问的内容
|
|
token: "",
|
|
title: "",
|
|
content: "",
|
|
tags: "",
|
|
tid: "",
|
|
anonymous: 0
|
|
});
|
|
const questionsInit = () => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
$ajax("/api/publish/questions").then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
questionsObj.value["token"] = data["token"];
|
|
questionsTypeList.value = data["typeList"] || [];
|
|
cutQuestionsSetp(1);
|
|
});
|
|
};
|
|
const choosingTheme = (id) => {
|
|
questionsObj.value.tid = id;
|
|
cutQuestionsSetp(2);
|
|
};
|
|
const cutAnonymous = () => {
|
|
questionsObj.value.anonymous = questionsObj.value.anonymous == 0 ? 1 : 0;
|
|
};
|
|
const postingIssue = () => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
$ajax("/api/publish/questionsSubmit", questionsObj.value).then((res) => {
|
|
if (res.code == 200) {
|
|
myCount.value["questions"]++;
|
|
questionsSetp.value = 0;
|
|
questionsObj.value = {
|
|
token: "",
|
|
title: "",
|
|
content: "",
|
|
tags: "",
|
|
tid: "",
|
|
anonymous: 0
|
|
};
|
|
handleMsg("success", res["message"] || "操作成功");
|
|
let data = res.data;
|
|
getDetails(data["uniqid"]);
|
|
return;
|
|
}
|
|
handleMsg("error", res["message"] || "刷新重试!!!");
|
|
});
|
|
};
|
|
let pitchIndex = ref(null);
|
|
const cut = (index) => {
|
|
pitchIndex.value = index;
|
|
setTimeout(() => scrollLeftInMiddle(), 350);
|
|
};
|
|
const scrollLeftInMiddle = () => {
|
|
{
|
|
return;
|
|
}
|
|
};
|
|
const listStyle = () => {
|
|
const newtype = type.value;
|
|
let width = "";
|
|
let margin = "";
|
|
let height = "";
|
|
if (newtype == "list") {
|
|
width = "1200px";
|
|
margin = "0 auto";
|
|
} else {
|
|
width = "calc((100vw - 1200px) / 2 + 512px)";
|
|
margin = "initial";
|
|
}
|
|
return {
|
|
width,
|
|
margin,
|
|
height
|
|
};
|
|
};
|
|
let listHeight = ref(0);
|
|
let itemHeightLeft = 0;
|
|
let itemHeightRight = 0;
|
|
const itemStyle = (index, content, typetype) => {
|
|
if (index == 0) {
|
|
itemHeightLeft = 0;
|
|
itemHeightRight = 0;
|
|
}
|
|
const newtype = type.value;
|
|
let obj = {};
|
|
if (newtype == "list") {
|
|
if (itemHeightLeft <= itemHeightRight) {
|
|
obj["top"] = itemHeightLeft + "px";
|
|
itemHeightLeft += content == "" ? 107 : 137;
|
|
obj["left"] = 0;
|
|
} else {
|
|
obj["top"] = itemHeightRight + "px";
|
|
itemHeightRight += content == "" ? 107 : 137;
|
|
obj["left"] = "649px";
|
|
}
|
|
} else {
|
|
obj["position"] = "relative";
|
|
if (!typetype) {
|
|
itemHeightLeft += content == "" ? 107 : 137;
|
|
obj["height"] = content == "" ? "107px" : "137px";
|
|
} else {
|
|
itemHeightLeft += typetype == "vote" ? 170 : 137;
|
|
obj["height"] = typetype == "vote" ? "170px" : "137px";
|
|
}
|
|
obj["width"] = "100%";
|
|
obj["paddingLeft"] = "calc((100vw - 1200px) / 2)";
|
|
}
|
|
if (index + 1 == list.value.length)
|
|
listHeight.value = Math.max(itemHeightLeft, itemHeightRight);
|
|
return obj;
|
|
};
|
|
const bottomTpsStyle = (index, content) => {
|
|
const newtype = type.value;
|
|
let obj = {};
|
|
if (newtype == "list")
|
|
;
|
|
else {
|
|
obj["width"] = "calc(50vw - 88px)";
|
|
obj["height"] = `calc(100vh - ${list.value.length * 128}px - 268px)`;
|
|
obj["paddingLeft"] = "calc((100vw - 1200px) / 2)";
|
|
obj["borderRight"] = "1px solid #ebebeb";
|
|
obj["borderRight"] = "1px solid #ebebeb";
|
|
obj["background"] = "#fff";
|
|
}
|
|
return obj;
|
|
};
|
|
const listBoxStyle = () => {
|
|
const newtype = type.value;
|
|
let obj = {};
|
|
if (newtype == "list")
|
|
obj["overflow"] = "visible";
|
|
else
|
|
obj["height"] = pageListHeight.value + "px";
|
|
return obj;
|
|
};
|
|
const handleDate = (dateTimeStamp = /* @__PURE__ */ new Date(), ishour = true) => {
|
|
dateTimeStamp = dateTimeStamp ? dateTimeStamp : null;
|
|
var timestamp = new Date(dateTimeStamp);
|
|
timestamp = timestamp.getTime();
|
|
var minute = 1e3 * 60;
|
|
var hour = minute * 60;
|
|
var day = hour * 24;
|
|
var now = (/* @__PURE__ */ new Date()).getTime();
|
|
var diffValue = now - timestamp;
|
|
var result;
|
|
if (diffValue < 0)
|
|
return "刚刚";
|
|
var dayC = diffValue / day;
|
|
var hourC = diffValue / (hour + 1);
|
|
var minC = diffValue / minute;
|
|
if (dayC >= 7) {
|
|
let date = new Date(timestamp);
|
|
let Y = date.getFullYear() + "-";
|
|
let M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-";
|
|
let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
|
|
let h2 = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":";
|
|
let m = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
|
|
if (ishour)
|
|
result = "" + Y + M + D + h2 + m;
|
|
else
|
|
result = "" + Y + M + D;
|
|
} else if (dayC >= 1)
|
|
result = "" + Math.round(dayC) + "天前";
|
|
else if (hourC >= 1)
|
|
result = "" + Math.round(hourC) + "小时前";
|
|
else if (minC >= 1)
|
|
result = "" + Math.round(minC) + "分钟前";
|
|
else
|
|
result = "刚刚";
|
|
return result;
|
|
};
|
|
let questionsTransmitState = ref(false);
|
|
let questionsTransmitMaskState = ref(false);
|
|
const closeTransmitState = () => {
|
|
questionsTransmitState.value = true;
|
|
questionsTransmitMaskState.value = true;
|
|
countForwardingTimes(detailsToken);
|
|
};
|
|
const closeAllTransmitState = () => {
|
|
answerList.value.forEach((element) => {
|
|
element["transmitState"] = false;
|
|
});
|
|
questionsTransmitState.value = false;
|
|
questionsTransmitMaskState.value = false;
|
|
};
|
|
const handleAnswerTransmitList = (Iindex, type2) => {
|
|
answerList.value[Iindex]["transmitState"] = true;
|
|
questionsTransmitMaskState.value = true;
|
|
countForwardingTimes(answerList.value[Iindex]["token"]);
|
|
};
|
|
const countForwardingTimes = (token) => {
|
|
$ajaxGET("/api/operate/share?token=" + token);
|
|
};
|
|
const closeDetailMode = () => {
|
|
if (myModelState.value) {
|
|
closeMyModel();
|
|
return;
|
|
}
|
|
type.value = "list";
|
|
openBottom();
|
|
pitchIndex.value = null;
|
|
seo.value = {};
|
|
list.value = JSON.parse(JSON.stringify(backupsList));
|
|
};
|
|
const handleListScroll = (e) => {
|
|
const el = e.target;
|
|
if (el.scrollHeight - el.scrollTop >= el.clientHeight + 40 || myModelState.value)
|
|
return;
|
|
getList();
|
|
};
|
|
const handlePaste = (event, type2) => {
|
|
const items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
|
for (const item of items) {
|
|
if (item.type.indexOf("image") === 0) {
|
|
event.preventDefault();
|
|
handleMsg("warning", "上传图片中");
|
|
const file = item.getAsFile();
|
|
const reader = new FileReader();
|
|
reader.onload = (e) => {
|
|
const base64 = e.target.result;
|
|
uploadImg(base64).then((res) => {
|
|
let questionTextarea = null;
|
|
if (type2 == "you")
|
|
questionTextarea = document.querySelector(".your-answer-textarea");
|
|
else
|
|
questionTextarea = document.querySelector(".question-textarea");
|
|
let imgNode = document.createElement("img");
|
|
imgNode.setAttribute("src", res.url);
|
|
imgNode.setAttribute("data-aid", res.aid);
|
|
questionTextarea.appendChild(imgNode);
|
|
if (type2 == "you")
|
|
handleInputYou();
|
|
else
|
|
handleInput();
|
|
handleMsg("success", "上传成功");
|
|
});
|
|
};
|
|
reader.readAsDataURL(file);
|
|
}
|
|
}
|
|
};
|
|
const uploadImg = (base64) => {
|
|
return new Promise((resolve, reject) => {
|
|
$ajax("/api/common/upload", {
|
|
data: base64
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
resolve(data);
|
|
});
|
|
});
|
|
};
|
|
let questionPlaceholderState = ref(false);
|
|
let yourAnswerPlaceholderState = ref(true);
|
|
const handleInput = () => {
|
|
const questionTextarea = document.querySelector(".question-textarea");
|
|
const html = questionTextarea.innerHTML;
|
|
if (html)
|
|
questionPlaceholderState.value = false;
|
|
else
|
|
questionPlaceholderState.value = true;
|
|
};
|
|
const handleInputYou = () => {
|
|
const questionTextarea = document.querySelector(".your-answer-textarea");
|
|
const html = questionTextarea.innerHTML;
|
|
if (html)
|
|
yourAnswerPlaceholderState.value = false;
|
|
else
|
|
yourAnswerPlaceholderState.value = true;
|
|
};
|
|
let msg = ref({});
|
|
const handleMsg = (type2, text) => {
|
|
msg.value["state"] = true;
|
|
msg.value["type"] = type2;
|
|
msg.value["text"] = text;
|
|
};
|
|
const boxClass = () => {
|
|
msgShowTimer();
|
|
return type ? `box-item-${msg.value["type"]}` : "";
|
|
};
|
|
let msgTimer = null;
|
|
const msgShowTimer = () => {
|
|
clearTimeout(msgTimer);
|
|
msgTimer = setTimeout(() => {
|
|
msg.value["state"] = false;
|
|
}, 1e3);
|
|
};
|
|
let copyText = (text) => {
|
|
if (navigator.clipboard) {
|
|
copyText = () => {
|
|
navigator.clipboard.writeText(text);
|
|
handleMsg("success", "复制成功");
|
|
};
|
|
} else {
|
|
copyText = () => {
|
|
var tempInput = document.createElement("input");
|
|
tempInput.value = text;
|
|
document.body.appendChild(tempInput);
|
|
tempInput.select();
|
|
document.execCommand("copy");
|
|
document.body.removeChild(tempInput);
|
|
handleMsg("success", "复制成功");
|
|
};
|
|
}
|
|
copyText();
|
|
};
|
|
const replaceState = (obj = {}) => {
|
|
return;
|
|
};
|
|
let myModelState = ref(false);
|
|
let myModelList = ref([]);
|
|
let temporaryData = {};
|
|
const myOpenDetails = (uniqid) => {
|
|
if (!uniqid) {
|
|
handleMsg("error", "没有找到相关提问");
|
|
return;
|
|
}
|
|
if (!myModelState.value) {
|
|
temporaryData = {
|
|
total: total.value,
|
|
keywordText: keywordText.value,
|
|
isSearchMode: isSearchMode.value,
|
|
inTheEndState: inTheEndState.value,
|
|
type: type.value,
|
|
pitchIndex: pitchIndex.value,
|
|
listlist: JSON.parse(JSON.stringify(list.value))
|
|
};
|
|
isSearchMode.value = false;
|
|
inTheEndState.value = false;
|
|
keyword.value = "";
|
|
list.value = JSON.parse(JSON.stringify(myModelList.value));
|
|
myModelState.value = true;
|
|
pitchIndex.value = null;
|
|
}
|
|
getDetails(uniqid);
|
|
myType.value = "";
|
|
};
|
|
const closeMyModel = () => {
|
|
myModelList.value = JSON.parse(JSON.stringify(list.value));
|
|
isSearchMode.value = temporaryData["isSearchMode"];
|
|
keywordText.value = temporaryData["keywordText"];
|
|
keyword.value = temporaryData["keywordText"];
|
|
total.value = temporaryData["total"];
|
|
type.value = temporaryData["type"];
|
|
pitchIndex.value = temporaryData["pitchIndex"];
|
|
inTheEndState.value = temporaryData["inTheEndState"];
|
|
list.value = JSON.parse(JSON.stringify(temporaryData.listlist));
|
|
myModelState.value = false;
|
|
if (pitchIndex.value !== null && pitchIndex.value !== void 0) {
|
|
let uniqid = list.value[pitchIndex.value]["uniqid"];
|
|
getDetails(uniqid);
|
|
}
|
|
};
|
|
const handleDetailsScroll = (e) => {
|
|
const el = e.target;
|
|
if (el.scrollHeight - el.scrollTop !== el.clientHeight)
|
|
return;
|
|
getAnswerList();
|
|
};
|
|
let dialogSrc = ref("");
|
|
const handleAnswerText = (e) => {
|
|
if (e.target.tagName === "IMG") {
|
|
var src = e.target.getAttribute("src");
|
|
dialogSrc.value = src;
|
|
window.addEventListener("keydown", handleKeydown);
|
|
}
|
|
};
|
|
const handleKeydown = (event) => {
|
|
if (event.key !== "Escape")
|
|
return;
|
|
dialogSrc.value = "";
|
|
window.removeEventListener("keydown", handleKeydown);
|
|
};
|
|
const cutType = (id) => {
|
|
typePitch.value = id;
|
|
page = 1;
|
|
list.value = [];
|
|
backupsList = [];
|
|
listHeight.value = 0;
|
|
myModelState.value = false;
|
|
type.value = "list";
|
|
openBottom();
|
|
pitchIndex.value = null;
|
|
getList();
|
|
listHeight.value = 0;
|
|
};
|
|
const handleMenuState = (index, ind, i) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
if (i === void 0)
|
|
reportToken = answerList.value[index].commentList[ind]["token"];
|
|
else
|
|
reportToken = answerList.value[index].commentList[ind]["child"][i]["token"];
|
|
alertShow.value = true;
|
|
};
|
|
let reportToken = "";
|
|
const reasonList = ["广告", "辱骂", "重复发送", "不良信息", "其他"];
|
|
let checkList = ref([]);
|
|
let alertShow = ref(false);
|
|
let alertText = ref("");
|
|
const selectRadio = (value) => {
|
|
const index = checkList.value.indexOf(value);
|
|
if (index === -1)
|
|
checkList.value.push(value);
|
|
else
|
|
checkList.value.splice(index, 1);
|
|
};
|
|
const alertSubmit = () => {
|
|
checkList.value.push(alertText.value);
|
|
$ajax("/api/operate/report", {
|
|
message: checkList.value,
|
|
token: reportToken
|
|
}).then((res) => {
|
|
checkList.value = [];
|
|
reportToken = "";
|
|
alertShow.value = false;
|
|
handleMsg("success", "举报成功");
|
|
});
|
|
};
|
|
let recommendList = [];
|
|
let recommendPage = 1;
|
|
const getRecommend = (uniqid) => {
|
|
$ajax("/api/details/relatedlist", {
|
|
page: recommendPage,
|
|
limit: 20
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let obj = {
|
|
offer: "Offer",
|
|
mj: "面经",
|
|
vote: "投票",
|
|
thread: "帖子"
|
|
};
|
|
let data = res.data;
|
|
data.forEach((element) => {
|
|
element["typename"] = obj[element["type"]];
|
|
element["isrecom"] = true;
|
|
});
|
|
recommendList = recommendList.concat(data);
|
|
recommendPage++;
|
|
handleInsertRelatedlist(uniqid);
|
|
});
|
|
};
|
|
const handleInsertRelatedlist = (uniqid) => {
|
|
if (myModelState.value)
|
|
return;
|
|
let insertCount = Math.ceil(backupsList.length / 5);
|
|
if (recommendList.length < insertCount) {
|
|
getRecommend(uniqid);
|
|
return;
|
|
}
|
|
let target = JSON.parse(JSON.stringify(backupsList));
|
|
let result = [];
|
|
let j = 0;
|
|
for (let i = 0; i < target.length; i++) {
|
|
result.push(target[i]);
|
|
if ((i + 1) % 4 === 0 && j < recommendList.length) {
|
|
result.push(recommendList[j]);
|
|
j++;
|
|
}
|
|
}
|
|
list.value = JSON.parse(JSON.stringify(result));
|
|
nextTick(() => {
|
|
if (uniqid) {
|
|
result.forEach((element, index) => {
|
|
if (element["uniqid"] == uniqid) {
|
|
pitchIndex.value = index;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
const replaceNumberObj = {
|
|
0: "①",
|
|
1: "②",
|
|
2: "③"
|
|
};
|
|
let seo = ref({});
|
|
let initState = ref(0);
|
|
try {
|
|
const params = route.query;
|
|
if (params["keyword"])
|
|
keyword.value = params["keyword"];
|
|
if (params["tid"])
|
|
typePitch.value = params["tid"];
|
|
if (params["uniqid"]) {
|
|
await axios.post(baseURL2 + "/api/details", { uniqid: params["uniqid"] }).then((response) => {
|
|
let res = response.data;
|
|
let data = res.data;
|
|
data["info"]["uniqid"] = params["uniqid"];
|
|
detailsInfoDataVuex.value = data;
|
|
detailsInfo.value = data["info"] || {};
|
|
detailsIsanswered.value = data["isanswered"] || 0;
|
|
detailsIscollection.value = data["iscollection"] || 0;
|
|
detailsIsmyself.value = data["ismyself"] || 0;
|
|
detailsToken = data["token"] || "";
|
|
detailShare.value = data["share"] || {};
|
|
type.value = "details";
|
|
answerList.value = [];
|
|
answerPage.value = 1;
|
|
getAnswerList();
|
|
closeAllTransmitState();
|
|
replaceState({ uniqid: params["uniqid"] });
|
|
seo.value = data.seo;
|
|
}).catch((error) => console.error(error));
|
|
}
|
|
await $ajax("/api/lists", {
|
|
page,
|
|
limit: 20,
|
|
keyword: keyword.value,
|
|
type: typePitch.value
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
data.data.forEach((element) => {
|
|
element["content"] = element["content"].replace(/<[^>]*>/g, "");
|
|
element["content"] = element["content"].replace(/ /g, "");
|
|
});
|
|
list.value = data.data;
|
|
backupsList = data.data;
|
|
total.value = data.count || 0;
|
|
keywordText.value = keyword.value || "";
|
|
if (list.value.length != data["count"])
|
|
page++;
|
|
else
|
|
page = 0;
|
|
if (page == 0 && list.value.length != 0)
|
|
inTheEndState.value = true;
|
|
else
|
|
inTheEndState.value = false;
|
|
if (list.value.length == 0)
|
|
isListEmptyState.value = true;
|
|
else
|
|
isListEmptyState.value = false;
|
|
if (keyword.value)
|
|
isSearchMode.value = true;
|
|
else
|
|
isSearchMode.value = false;
|
|
nextTick(() => {
|
|
if (list.value.length == 0)
|
|
type.value = "list";
|
|
});
|
|
});
|
|
await $ajax("/api/details/relatedlist", { page: 1, limit: 20 }).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let obj = {
|
|
offer: "Offer",
|
|
mj: "面经",
|
|
vote: "投票",
|
|
thread: "帖子"
|
|
};
|
|
let data = res.data;
|
|
data.forEach((element) => {
|
|
element["typename"] = obj[element["type"]];
|
|
element["isrecom"] = true;
|
|
});
|
|
recommendList = recommendList.concat(data);
|
|
recommendPage++;
|
|
if (params["uniqid"]) {
|
|
let target = JSON.parse(JSON.stringify(backupsList));
|
|
let result = [];
|
|
let j = 0;
|
|
for (let i = 0; i < target.length; i++) {
|
|
result.push(target[i]);
|
|
if ((i + 1) % 4 === 0 && j < recommendList.length) {
|
|
result.push(recommendList[j]);
|
|
j++;
|
|
}
|
|
}
|
|
list.value = JSON.parse(JSON.stringify(result));
|
|
initState.value++;
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
watch(initState, (newValue, oldValue) => {
|
|
if (newValue === 2) {
|
|
const params = route.query;
|
|
calculateListIndex(detailsInfo.value, params["uniqid"]);
|
|
}
|
|
});
|
|
const setItemUrl = (uniqid) => {
|
|
let url = `./index.html?uniqid=${uniqid}`;
|
|
let query = route.query;
|
|
for (const key in query) {
|
|
if (key != "uniqid")
|
|
url += `&${key}=${query[key]}`;
|
|
}
|
|
return url;
|
|
};
|
|
const handleLogo = () => {
|
|
window.location.href = window.location.origin + window.location.pathname;
|
|
};
|
|
let yourAnswer = ref({
|
|
text: "",
|
|
anonymous: 0
|
|
});
|
|
const cutYourAnswerAnonymous = () => {
|
|
yourAnswer.value["anonymous"] = yourAnswer.value["anonymous"] ? 0 : 1;
|
|
};
|
|
const handleYourAnswer = () => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
IAnswerInfo.value = { ...yourAnswer.value };
|
|
submitAnswer("you");
|
|
yourAnswer.value = {
|
|
text: "",
|
|
anonymous: 0
|
|
};
|
|
};
|
|
let isDirectlyListIAnswer = false;
|
|
const openListIAnswer = (index) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
let targetData = list.value[index];
|
|
IAnswerInfo.value = {
|
|
title: targetData["title"],
|
|
content: targetData["content"],
|
|
token: targetData["token"],
|
|
uniqid: targetData["uniqid"],
|
|
anonymous: 0,
|
|
index
|
|
};
|
|
isDirectlyListIAnswer = true;
|
|
IAnswerState.value = true;
|
|
nextTick(() => handleInput());
|
|
};
|
|
let avatarState = ref(false);
|
|
const openUserInfo = (index, ind, i) => {
|
|
if (i != null) {
|
|
if (answerList.value[index].commentList[ind]["child"][i]["uin"] > 0)
|
|
answerList.value[index].commentList[ind]["child"][i]["avatarState"] = !answerList.value[index].commentList[ind]["child"][i]["avatarState"];
|
|
} else if (ind != null) {
|
|
if (answerList.value[index].commentList[ind]["uin"] > 0)
|
|
answerList.value[index].commentList[ind]["avatarState"] = !answerList.value[index].commentList[ind]["avatarState"];
|
|
} else if (index != null) {
|
|
if (answerList.value[index]["uin"] > 0)
|
|
answerList.value[index]["avatarState"] = !answerList.value[index]["avatarState"];
|
|
} else {
|
|
if (detailsInfo.value["uin"] > 0)
|
|
avatarState.value = !avatarState.value;
|
|
}
|
|
};
|
|
const sendMessage = (uin) => {
|
|
if (uin && typeof messagePrivateItem == "function") {
|
|
messagePrivateItem({ uin });
|
|
return;
|
|
} else
|
|
redirectToExternalWebsite(`https://bbs.gter.net/home.php?mod=space&showmsg=1&uid=${uin}`);
|
|
};
|
|
const TAHomePage = (uin) => {
|
|
redirectToExternalWebsite(`https://bbs.gter.net/home.php?mod=space&uid=${uin}`);
|
|
};
|
|
const redirectToExternalWebsite = (url) => {
|
|
const link = document.createElement("a");
|
|
link.href = url;
|
|
link.target = "_blank";
|
|
link.click();
|
|
};
|
|
const openBottom = () => {
|
|
const footer = document.querySelector("body .index-footer");
|
|
if (footer)
|
|
footer.style.display = "block";
|
|
else
|
|
setTimeout(() => openBottom(), 1e3);
|
|
};
|
|
const handleLookOnly = () => {
|
|
zeroreply.value = zeroreply.value == 0 ? 1 : 0;
|
|
page = 1;
|
|
list.value = [];
|
|
backupsList = [];
|
|
listHeight.value = 0;
|
|
getList();
|
|
};
|
|
const showComments = (index) => {
|
|
answerList.value[index]["showOneCommentState"] = false;
|
|
};
|
|
const jointriposte = (item) => {
|
|
return `&#x${item};`;
|
|
};
|
|
const cutOperate = (index, key) => {
|
|
let target = answerList.value[index];
|
|
target["tab"] = key;
|
|
if (key == "coin" && !answerList.value[index].config) {
|
|
getCoinConfig(index);
|
|
}
|
|
if (key == "comment" && target["commentnum"] > 0) {
|
|
target["showOneCommentState"] = true;
|
|
target["commentList"] = [];
|
|
nextTick(() => {
|
|
openCommentState(index);
|
|
});
|
|
}
|
|
};
|
|
const getRiposte = (index) => {
|
|
let target = answerList.value[index];
|
|
$ajax("/api/riposte/riposteGet", { token: target.token }).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
let data = res.data;
|
|
target.ripostecount = data.count || {};
|
|
target.ripostelist = data.list || [];
|
|
target.riposteoptions = data.options || [];
|
|
answerList.value[index] = target;
|
|
if (target.ripostelist.length <= 3)
|
|
randomEmoji(index);
|
|
});
|
|
};
|
|
let randomEmojis = ref(["c150", "c167", "c002", "c162", "c157", "c133", "c011", "c004"]);
|
|
const randomEmoji = (index) => {
|
|
let emojiList = answerList.value[index].ripostelist;
|
|
let riposteoptions = answerList.value[index].riposteoptions || [];
|
|
let exclude = [];
|
|
emojiList.forEach((element) => {
|
|
exclude.push(element.item);
|
|
});
|
|
let selectedList = [];
|
|
for (const key in riposteoptions[0].data) {
|
|
if (key != "c150")
|
|
selectedList.push(key);
|
|
}
|
|
const random = [];
|
|
if (!exclude.includes("c150"))
|
|
random.push("c150");
|
|
selectedList = selectedList.filter((itemB) => !exclude.includes(itemB));
|
|
let indexes = [];
|
|
while (indexes.length < 7) {
|
|
let randomIndex = Math.floor(Math.random() * selectedList.length);
|
|
if (indexes.indexOf(randomIndex) === -1) {
|
|
indexes.push(randomIndex);
|
|
random.push(selectedList[randomIndex]);
|
|
}
|
|
}
|
|
answerList.value[index]["randomEmojis"] = random;
|
|
};
|
|
let riposteSubmitState = false;
|
|
const selectEomji = (code, index, ispop = false, islist = false) => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
if (riposteSubmitState)
|
|
return;
|
|
riposteSubmitState = true;
|
|
let target = answerList.value[index];
|
|
let ispitch = false;
|
|
let isindex = target.ripostelist.findIndex((element) => element.item === code);
|
|
if (isindex >= 0)
|
|
ispitch = target.ripostelist[isindex].selected;
|
|
if (ispitch && ispop) {
|
|
riposteSubmitState = false;
|
|
return;
|
|
}
|
|
riposteSubmit(code, target.token).then((res) => {
|
|
const data = res.data;
|
|
target.ripostecount = data.count;
|
|
if (isindex >= 0) {
|
|
target.ripostelist[isindex].num += ispitch ? -1 : 1;
|
|
target.ripostelist[isindex].selected = !ispitch && target.ripostelist[isindex].num !== 0;
|
|
if (target.ripostelist[isindex].num === 0) {
|
|
target.ripostelist.splice(isindex, 1);
|
|
}
|
|
} else {
|
|
target.ripostelist.push({
|
|
item: code,
|
|
num: 1,
|
|
selected: true
|
|
});
|
|
}
|
|
if (target.ripostelist.length <= 3)
|
|
randomEmoji(index);
|
|
if (islist)
|
|
handleRiposteListData(code, data);
|
|
}).finally(() => {
|
|
riposteSubmitState = false;
|
|
});
|
|
};
|
|
const handleRiposteListData = (code, data) => {
|
|
let target = respondDetail.value;
|
|
if (target[code].selected) {
|
|
target[code].user = target[code].user.filter((item) => item.uin != data.uin);
|
|
if (target[code].user.length == 0)
|
|
delete target[code];
|
|
} else {
|
|
target[code].user.push({
|
|
avatar: data.avatar,
|
|
nickname: data.username,
|
|
uid: data.uid,
|
|
uin: data.uin
|
|
});
|
|
}
|
|
if (target.hasOwnProperty(code)) {
|
|
target[code].selected = !target[code].selected;
|
|
}
|
|
};
|
|
const riposteSubmit = (item, token) => {
|
|
return new Promise((resolve, reject) => {
|
|
$ajax("/api/riposte/riposteSubmit", { token, item }).then((res) => {
|
|
if (res.code != 200) {
|
|
handleMsg("error", res["message"] || "报错了,请重试!!!");
|
|
reject(res);
|
|
} else {
|
|
resolve(res);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
let respondDetail = ref({});
|
|
let respondPopState = ref(false);
|
|
let respondPopObj = ref({});
|
|
const openRespondDetails = (index) => {
|
|
var _a;
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
let target = answerList.value[index];
|
|
respondPopObj.value.index = index;
|
|
respondPopObj.value.user = (_a = target.ripostecount) == null ? void 0 : _a.user;
|
|
$ajax("/api/riposte/riposteDetail", { token: target.token }).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
respondDetail.value = res.data;
|
|
respondPopState.value = true;
|
|
});
|
|
};
|
|
const closePopList = () => {
|
|
respondPopState.value = false;
|
|
};
|
|
const getCoinConfig = (index) => {
|
|
let target = answerList.value[index];
|
|
$ajax("/api/operate/coin", {
|
|
token: target.token
|
|
}).then((res) => {
|
|
if (res.code != 200)
|
|
return;
|
|
if (res.data.coinnumpeople > 3) {
|
|
getCoinranking(answerList.value[index].token).then((data) => {
|
|
target["ranklist"] = data;
|
|
});
|
|
}
|
|
answerList.value[index] = Object.assign({}, target, res.data);
|
|
});
|
|
};
|
|
const openInsert = (index) => {
|
|
let target = answerList.value[index];
|
|
insert.value = {
|
|
index,
|
|
token: target.token,
|
|
coinConfig: target.config,
|
|
coinMybalance: target.mybalance,
|
|
ranklist: target.ranklist
|
|
};
|
|
if (target.mybalance == 0)
|
|
insertcoinsNoState.value = true;
|
|
else
|
|
insertcoinsState.value = true;
|
|
};
|
|
const closeInsert = () => {
|
|
coinAmount.value = "";
|
|
coinMessage.value = "";
|
|
insertcoinsState.value = false;
|
|
insertcoinsNoState.value = false;
|
|
insert.value = {};
|
|
};
|
|
let coinAmount = ref("");
|
|
let coinMessage = ref("");
|
|
let insertcoinsState = ref(false);
|
|
let insertcoinsNoState = ref(false);
|
|
let insert = ref({});
|
|
const coinSelectAmountDispose = (amount) => {
|
|
coinAmount.value = amount;
|
|
};
|
|
let postCoinSbmitState = false;
|
|
const postCoinSbmit = () => {
|
|
if (isNeedLogin.value) {
|
|
return;
|
|
}
|
|
if (postCoinSbmitState)
|
|
return;
|
|
postCoinSbmitState = true;
|
|
let targetInsert = insert.value;
|
|
$ajax("/api/operate/coinsubmit", {
|
|
token: targetInsert.token,
|
|
coinnum: coinAmount.value,
|
|
message: coinMessage.value
|
|
}).then((res) => {
|
|
if (res.code != 200) {
|
|
handleMsg("error", (res == null ? void 0 : res.message) || "投币失败");
|
|
return;
|
|
}
|
|
const data = res.data;
|
|
answerList.value.forEach((element) => {
|
|
element.mybalance = data.mybalance;
|
|
});
|
|
let target = answerList.value[targetInsert.index || 0] || {};
|
|
target.coinnum += data.coinnum;
|
|
getCoinranking(targetInsert.token).then((data2) => {
|
|
target["ranklist"] = data2;
|
|
});
|
|
if (coinMessage.value)
|
|
target["commentnum"] += 1;
|
|
closeInsert();
|
|
handleMsg("success", (res == null ? void 0 : res.message) || "操作成功");
|
|
}).finally(() => {
|
|
postCoinSbmitState = false;
|
|
});
|
|
};
|
|
const getCoinranking = (token) => {
|
|
return new Promise((resolve, reject) => {
|
|
$ajax("/api/operate/coinranking", { token }).then((res) => {
|
|
if (res.code != 200) {
|
|
handleMsg("error", (res == null ? void 0 : res.message) || "请求失败");
|
|
return;
|
|
}
|
|
resolve(res.data);
|
|
});
|
|
});
|
|
};
|
|
return { handleLookOnly, zeroreply, replaceNumberObj, closeMyModel, myModelList, myModelState, listHeight, bottomTpsStyle, TAHomePage, sendMessage, avatarState, openUserInfo, isNeedLogin, handleInputYou, openListIAnswer, isListEmptyState, cutYourAnswerAnonymous, handleYourAnswer, yourAnswer, handleLogo, inTheEndState, setItemUrl, seo, originUrl, handleMenuState, reasonList, checkList, alertShow, alertText, selectRadio, alertSubmit, cutType, dialogSrc, answerPage, handleDetailsScroll, replaceState, copyText, boxClass, questionPlaceholderState, yourAnswerPlaceholderState, handleInput, handlePaste, itemStyle, listStyle, listBoxStyle, myType, type, pitchIndex, cut, list, keyword, keywordText, getList, total, typeList, typePitch, getDetails, detailsInfo, detailsIsanswered, detailsIscollection, detailsIsmyself, detailShare, detailLoading, answerList, operateLike, operateCollect, IAnswerState, IAnswerEditState, IAnswerInfo, amendIAnswer, openIAnswer, closeIAnswer, submitAnswer, openCommentState, submitAnswerComments, operateAnswerCommentsLike, openAnswerCommentsChild, closeAnswerCommentsChild, alsoCommentsData, handleAllComment, myCollectionList, myCollectionCount, myQuestionsList, myQuestionsCount, myAnswerList, myAnswerCount, cutAnswerPopupState, handleDate, handleCollectionScroll, handleAnswersScroll, handleQuestionsScroll, cancelCollection, getMyCollection, questionsSetp, questionsObj, cutAnonymous, cutQuestionsSetp, cutQuestionsPopupState, questionsTypeList, postingIssue, choosingTheme, handleMy, changeAnonymous, changeAnonymousQuestions, pageHeaderHeight, pageListHeight, questionsTransmitState, questionsTransmitMaskState, closeAllTransmitState, closeTransmitState, handleAnswerTransmitList, closeDetailMode, tabListFixeState, handleListScroll, historicalSearchState, historicalSearchList, searchFocus, searchBlur, searchClick, handleClickHistoricalItem, handleClickClear, isSearchMode, questionsInit, myCount, msg, myOpenDetails, handleAnswerText, getCurrentUrl, loading, showComments, jointriposte, randomEmojis, selectEomji, openRespondDetails, respondPopState, respondDetail, respondPopObj, closePopList, coinAmount, openInsert, insertcoinsState, insert, coinMessage, coinSelectAmountDispose, closeInsert, postCoinSbmit, cutOperate, insertcoinsNoState };
|
|
}
|
|
};
|
|
function _sfc_ssrRender(_ctx, _push, _parent, _attrs, $props, $setup, $data, $options) {
|
|
const _component_Head = Head;
|
|
const _component_Title = Title;
|
|
const _component_Meta = Meta;
|
|
const _component_ClientOnly = __nuxt_component_3;
|
|
const _component_RespondAdd = __nuxt_component_4;
|
|
const _component_RespondPop = __nuxt_component_5;
|
|
_push(`<!--[--><div id="append_parent"></div><div id="ajaxwaitid"></div><div>`);
|
|
_push(ssrRenderComponent(_component_Head, null, {
|
|
default: withCtx((_, _push2, _parent2, _scopeId) => {
|
|
if (_push2) {
|
|
_push2(ssrRenderComponent(_component_Title, null, {
|
|
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
|
|
if (_push3) {
|
|
_push3(`${ssrInterpolate(`${$setup.seo["title"] || "问答"} - 寄托天下出国留学网`)}`);
|
|
} else {
|
|
return [
|
|
createTextVNode(toDisplayString(`${$setup.seo["title"] || "问答"} - 寄托天下出国留学网`), 1)
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent2, _scopeId));
|
|
_push2(ssrRenderComponent(_component_Meta, {
|
|
name: "keyword",
|
|
content: $setup.seo["keyword"]
|
|
}, null, _parent2, _scopeId));
|
|
_push2(ssrRenderComponent(_component_Meta, {
|
|
name: "description",
|
|
content: $setup.seo["description"]
|
|
}, null, _parent2, _scopeId));
|
|
} else {
|
|
return [
|
|
createVNode(_component_Title, null, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(`${$setup.seo["title"] || "问答"} - 寄托天下出国留学网`), 1)
|
|
]),
|
|
_: 1
|
|
}),
|
|
createVNode(_component_Meta, {
|
|
name: "keyword",
|
|
content: $setup.seo["keyword"]
|
|
}, null, 8, ["content"]),
|
|
createVNode(_component_Meta, {
|
|
name: "description",
|
|
content: $setup.seo["description"]
|
|
}, null, 8, ["content"])
|
|
];
|
|
}
|
|
}),
|
|
_: 1
|
|
}, _parent));
|
|
_push(`<div class id="answer-app"><header class="flexacenter" id="pageHeader"><div class="flexacenter top"><a href="./index.html"><img class="logo" alt="寄托问答"${ssrRenderAttr("src", _imports_0)}></a><div class="right flexacenter flex1"><div class="searchInput flexacenter"><input class="input flex1" placeholder="输入搜索关键词"${ssrRenderAttr("value", $setup.keyword)}>`);
|
|
if ($setup.isSearchMode) {
|
|
_push(`<div class="clear-search flexacenter"><img class="cross-circle-black"${ssrRenderAttr("src", _imports_1)}><div class="halving-line"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<img class="input-icon"${ssrRenderAttr("src", _imports_2)}>`);
|
|
if ($setup.historicalSearchState) {
|
|
_push(`<div class="history-box"><div class="history-title">历史搜索</div><div class="history-list"><!--[-->`);
|
|
ssrRenderList($setup.historicalSearchList, (item, index) => {
|
|
_push(`<div class="history-item ellipsis">${ssrInterpolate(item)}</div>`);
|
|
});
|
|
_push(`<!--]--></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="btn-list flexacenter"><div class="item flex1">我的收藏</div><div class="item flex1">我的提问</div><div class="item flex1">我的回答</div></div><div class="add-btn flexcenter"><img class="add-icon"${ssrRenderAttr("src", _imports_3)}> 我要提问 </div></div></div><div class="${ssrRenderClass([{ "tab-list-fixed": $setup.tabListFixeState }, "tab-box flexcenter"])}"><div class="tab-list flexacenter"><!--[-->`);
|
|
ssrRenderList($setup.typeList, (item, index) => {
|
|
_push(`<!--[-->`);
|
|
if (index !== 0) {
|
|
_push(`<div class="halving-line">|</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<!--[-->`);
|
|
ssrRenderList(item, (it) => {
|
|
_push(`<div class="${ssrRenderClass([{ pitch: $setup.typePitch == it["id"] }, "item flexcenter"])}">${ssrInterpolate(it["name"])}</div>`);
|
|
});
|
|
_push(`<!--]--><!--]-->`);
|
|
});
|
|
_push(`<!--]--></div></div></header><div class="${ssrRenderClass([{ "mode-list": $setup.type == "list" }, "main flexflex"])}"><div class="list-box"><div class="main-header" style="${ssrRenderStyle({ paddingLeft: $setup.type == "list" ? 0 : "calc((100vw - 1200px) / 2)" })}"><div class="flexacenter">`);
|
|
if ($setup.myModelState) {
|
|
_push(`<div class="search-keyword flexacenter"><div class="ellipsis">我的收藏/提问/回答</div><img class="search-keyword-cross"${ssrRenderAttr("src", _imports_4)}></div>`);
|
|
} else if ($setup.isSearchMode) {
|
|
_push(`<!--[--><div class="search-keyword flexacenter"><div class="ellipsis">${ssrInterpolate($setup.keywordText)}</div><img class="search-keyword-cross"${ssrRenderAttr("src", _imports_4)}></div><div class="total grid-item">共 ${ssrInterpolate($setup.total)} 条搜索结果</div><!--]-->`);
|
|
} else {
|
|
_push(`<div class="total grid-item">共 ${ssrInterpolate($setup.total)} 条问答</div>`);
|
|
}
|
|
_push(`</div>`);
|
|
if ($setup.type != "details") {
|
|
_push(`<div class="look-only flexcenter">`);
|
|
if ($setup.zeroreply == 0) {
|
|
_push(`<img class="look-icon"${ssrRenderAttr("src", _imports_34)}>`);
|
|
} else {
|
|
_push(`<img class="look-icon"${ssrRenderAttr("src", _imports_35)}>`);
|
|
}
|
|
_push(` 只看0回答 </div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="list" id="list" style="${ssrRenderStyle([$setup.listStyle(), { height: $setup.listHeight + "px" }])}"><!--[-->`);
|
|
ssrRenderList($setup.list, (item, index) => {
|
|
_push(`<!--[-->`);
|
|
if (item["isrecom"] && $setup.type != "list") {
|
|
_push(`<a style="${ssrRenderStyle($setup.itemStyle(index, item["content"], item["type"]))}" class="${ssrRenderClass([{ pitch: index === $setup.pitchIndex, upLevel: index === $setup.pitchIndex - 1 }, "item grid-item flexflex"])}" target="_blank"${ssrRenderAttr("href", item["url"])}><img class="dot"${ssrRenderAttr("src", _imports_7)}><div class="content" style="${ssrRenderStyle({ width: $setup.type == "list" ? "531px" : "430px" })}"><div class="issue-title flexcenter"><div class="recommend flexcenter">推荐阅读</div><div class="issue ellipsis flex1">${ssrInterpolate(item["title"])}</div></div>`);
|
|
if (item["type"] == "thread") {
|
|
_push(`<!--[-->`);
|
|
if (item["message"]) {
|
|
_push(`<div class="answer ellipsis">${ssrInterpolate(item["message"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<!--]-->`);
|
|
} else if (item["type"] == "vote") {
|
|
_push(`<div class="answer" style="${ssrRenderStyle({ "height": "auto" })}"><!--[-->`);
|
|
ssrRenderList(item["option"].slice(0, 2), (ite, i) => {
|
|
_push(`<div>${ssrInterpolate($setup.replaceNumberObj[i] + ite)}</div>`);
|
|
});
|
|
_push(`<!--]--><div>${ssrInterpolate($setup.replaceNumberObj[2])} …</div></div>`);
|
|
} else {
|
|
_push(`<div class="answer ellipsis flexacenter">`);
|
|
if (item["profession"] || item["professional"]) {
|
|
_push(`<div class="value-value">${ssrInterpolate(item["profession"] || item["professional"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item["project"] || item["degree"]) {
|
|
_push(`<div class="value-value">${ssrInterpolate(item["project"] || item["degree"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item["interviewtime"] || item["semester"]) {
|
|
_push(`<div class="value-value">${ssrInterpolate(item["interviewtime"] || item["semester"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item["apply_results"]) {
|
|
_push(`<div class="value-value">${ssrInterpolate(item["apply_results"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
}
|
|
_push(`<div class="bottom flexacenter"><div class="typename flexcenter">${ssrInterpolate(item["typename"])}</div></div></div></a>`);
|
|
} else {
|
|
_push(`<a style="${ssrRenderStyle($setup.itemStyle(index, item["content"]))}" class="${ssrRenderClass([[{ pitch: index === $setup.pitchIndex, upLevel: index === $setup.pitchIndex - 1 }, `item${index}`], "item grid-item flexflex"])}"${ssrRenderAttr("href", $setup.setItemUrl(item["uniqid"]))}><img class="dot"${ssrRenderAttr("src", _imports_7)}><div class="content" style="${ssrRenderStyle({ width: $setup.type == "list" ? "531px" : "430px" })}"><div class="issue-title flexcenter">`);
|
|
if (item["ishot"] == 1) {
|
|
_push(`<img class="hot-icon"${ssrRenderAttr("src", _imports_8)}>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="issue ellipsis flex1">${ssrInterpolate(item["title"])}</div></div>`);
|
|
if (item["content"]) {
|
|
_push(`<div class="answer ellipsis">${ssrInterpolate(item["content"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="bottom flexacenter">`);
|
|
if (item["typename"]) {
|
|
_push(`<div class="typename flexcenter">${ssrInterpolate(item["typename"])}</div>`);
|
|
} else {
|
|
_push(`<div></div>`);
|
|
}
|
|
_push(`<div class="flexacenter"><div class="quantity">${ssrInterpolate($setup.handleDate(item.publicationdate, false))}提问</div><div class="longString"></div><div class="quantity">${ssrInterpolate(item["answers"] == 0 ? "暂无回答" : "共" + item["answers"] + "个回答")}</div>`);
|
|
if ($setup.type == "list") {
|
|
_push(`<!--[--><div class="longString"></div><div class="answer-btn">我来回答</div><!--]-->`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div></div></a>`);
|
|
}
|
|
_push(`<!--]-->`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
if ($setup.inTheEndState) {
|
|
_push(`<div class="bottom-tps" style="${ssrRenderStyle($setup.bottomTpsStyle())}">- 到底了 -</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.myModelState) {
|
|
_push(`<div class="bottom-tps" style="${ssrRenderStyle($setup.bottomTpsStyle())}"></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.isListEmptyState && $setup.list.length == 0) {
|
|
_push(`<div class="empty-box flexcenter"><div class="dot-list flexacenter"><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_10)}><img class="item"${ssrRenderAttr("src", _imports_10)}><img class="item"${ssrRenderAttr("src", _imports_10)}></div><img class="empty-icon"${ssrRenderAttr("src", _imports_11)}>`);
|
|
if ($setup.isSearchMode) {
|
|
_push(`<div class="empty-hint">没有找到相关结果,请更换搜索关键词</div>`);
|
|
} else {
|
|
_push(`<div class="empty-hint">暂无数据</div>`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
if ($setup.type == "details") {
|
|
_push(`<div class="details-area-box flexflex">`);
|
|
if ($setup.detailLoading) {
|
|
_push(`<div class="loading-bj flexcenter"><svg t="1642133548066" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2597" width="200" height="200"><path d="M512 249.5c-22.5 0-37.5-15-37.5-37.5V99.5c0-22.5 15-37.5 37.5-37.5s37.5 15 37.5 37.5V212c0 22.5-15 37.5-37.5 37.5z m0 712.5c-22.5 0-37.5-15-37.5-37.5V812c0-22.5 15-37.5 37.5-37.5s37.5 15 37.5 37.5v112.5c0 22.5-15 37.5-37.5 37.5zM212 549.5H99.5C77 549.5 62 534.5 62 512s15-37.5 37.5-37.5H212c22.5 0 37.5 15 37.5 37.5s-15 37.5-37.5 37.5z m712.5 0H812c-22.5 0-37.5-15-37.5-37.5s15-37.5 37.5-37.5h112.5c22.5 0 37.5 15 37.5 37.5s-15 37.5-37.5 37.5z m-153.75-150c-11.25 0-26.25-7.5-33.75-18.75-11.25-18.75-3.75-41.25 15-52.5L849.5 272c18.75-11.25 41.25-3.75 52.5 15s3.75 41.25-15 52.5l-97.5 56.25c-3.75 3.75-11.25 3.75-18.75 3.75z m-615 356.25c-11.25 0-26.25-7.5-33.75-18.75-11.25-18.75-3.75-41.25 15-52.5l97.5-56.25c18.75-11.25 41.25-3.75 52.5 15s3.75 41.25-15 52.5L174.5 752c-7.5 3.75-15 3.75-18.75 3.75z m506.25-465c-7.5 0-11.25 0-18.75-3.75-18.75-11.25-22.5-33.75-15-52.5L684.5 137c11.25-18.75 33.75-22.5 52.5-15 18.75 11.25 22.5 33.75 15 52.5L695.75 272c-7.5 11.25-22.5 18.75-33.75 18.75z m-356.25 615c-7.5 0-11.25 0-18.75-3.75-18.75-11.25-22.5-33.75-15-52.5l56.25-97.5c11.25-15 33.75-22.5 52.5-11.25s22.5 33.75 15 52.5L339.5 887c-7.5 11.25-22.5 18.75-33.75 18.75z m-52.5-506.25c-7.5 0-15 0-18.75-3.75L137 339.5c-18.75-11.25-26.25-33.75-15-52.5s33.75-22.5 52.5-15l97.5 56.25c18.75 11.25 22.5 33.75 11.25 52.5-3.75 11.25-18.75 18.75-30 18.75z m615 356.25c-7.5 0-11.25 0-18.75-3.75L752 695.75c-18.75-11.25-22.5-33.75-15-52.5 11.25-18.75 33.75-22.5 52.5-15L887 684.5c18.75 11.25 22.5 33.75 15 52.5-7.5 11.25-18.75 18.75-33.75 18.75zM362 290.75c-11.25 0-26.25-7.5-33.75-18.75L272 174.5c-7.5-18.75-3.75-41.25 15-52.5s41.25-3.75 52.5 15l56.25 97.5c7.5 18.75 3.75 41.25-15 48.75-7.5 3.75-11.25 7.5-18.75 7.5z m356.25 615c-11.25 0-26.25-7.5-33.75-18.75l-56.25-97.5c-11.25-18.75-3.75-41.25 15-52.5s41.25-3.75 52.5 15L752 849.5c11.25 18.75 3.75 41.25-15 52.5-7.5 3.75-11.25 3.75-18.75 3.75z" p-id="2598" fill="#26d79f"></path></svg></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="details-box flexflex"><div class="close-box"><div class="close-circle flexcenter"><img class="close-icon"${ssrRenderAttr("src", _imports_12)}><img class="details-cross-icon"${ssrRenderAttr("src", _imports_13)}></div></div><div class="details-issue"><img class="qq"${ssrRenderAttr("src", _imports_14)}><div class="titletitle">${ssrInterpolate($setup.detailsInfo["title"])}</div>`);
|
|
if ($setup.detailsInfo["content"]) {
|
|
_push(`<div class="hint">${$setup.detailsInfo["content"]}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="info-box flexacenter"><div class="user-info flexacenter">`);
|
|
if ($setup.detailsInfo["avatar"]) {
|
|
_push(`<img class="avatar"${ssrRenderAttr("src", $setup.detailsInfo["avatar"])}>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="user-name">${ssrInterpolate($setup.detailsInfo["nickname"])}</div>`);
|
|
if ($setup.avatarState) {
|
|
_push(`<div class="avatar-box flexflex"><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_15)}> 发送信息 </a><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_16)}> TA的主页 </a><div class="avatar-mask"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="time">${ssrInterpolate($setup.handleDate($setup.detailsInfo["publicationdate"]))}</div></div><div class="operate-box flexacenter"><div class="${ssrRenderClass([{ white: $setup.detailsInfo["answers"] == 0 }, "answer-btn flexcenter"])}"><img class="answer-btn-icon answer-icon-edit"${ssrRenderAttr("src", _imports_17)}><img class="answer-btn-icon answer-icon-white"${ssrRenderAttr("src", _imports_18)}> 我来回答 </div><div class="operate-list flexacenter"><div class="operate-item flexacenter" style="${ssrRenderStyle({ "cursor": "auto" })}"><img class="operate-icon operate-collect-icon" style="${ssrRenderStyle({ "width": "13px", "height": "8px" })}"${ssrRenderAttr("src", _imports_19)}> ${ssrInterpolate($setup.detailsInfo["viewnum"] || 0)}</div>`);
|
|
_push(ssrRenderComponent(_component_ClientOnly, null, {}, _parent));
|
|
_push(`<div class="operate-item flexacenter operate-transmit"><img class="operate-icon operate-transmit-icon"${ssrRenderAttr("src", _imports_22)}> 转发 `);
|
|
if ($setup.questionsTransmitState) {
|
|
_push(`<div class="transmit-box flexflex" style="${ssrRenderStyle({ "z-index": "10" })}"><img class="cross-icon"${ssrRenderAttr("src", _imports_13)}><div class="transmit-left transmit-web"><div class="transmit-title">转发网页版</div><div class="transmit-content"><div class="transmit-headline">${ssrInterpolate($setup.detailsInfo["title"])}</div><div class="transmit-url">${ssrInterpolate($setup.getCurrentUrl())}</div></div><div class="transmit-web-btn flexcenter">复制链接</div></div><div class="transmit-right transmit-mini"><div class="transmit-title">转发小程序版</div><div class="transmit-content flexcenter"><img class="transmit-mini-img"${ssrRenderAttr("src", $setup.detailShare["qrcode"])}><div class="flexcenter"><img class="give-sweep"${ssrRenderAttr("src", _imports_23)}> 扫码转发该问答 </div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div></div></div><div class="answer-total-amount">共 ${ssrInterpolate($setup.detailsInfo["answers"])} 个回答</div><!--[-->`);
|
|
ssrRenderList($setup.answerList, (item, index) => {
|
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
_push(`<div class="answer-box-item"><img class="aa"${ssrRenderAttr("src", _imports_24)}>`);
|
|
if (item["ismyself"] == 1) {
|
|
_push(`<div class="edit-btn flexcenter"><img class="edit-icon"${ssrRenderAttr("src", _imports_17)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="answer-text">${item["content"]}</div><div class="info-box flexacenter"><div class="user-info flexacenter"><img class="avatar"${ssrRenderAttr("src", item["avatar"])}><div class="user-name">${ssrInterpolate(item["nickname"])}</div>`);
|
|
if (item["groupid"] == 14) {
|
|
_push(`<img class="homeShare"${ssrRenderAttr("src", _imports_25)}>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item["avatarState"]) {
|
|
_push(`<div class="avatar-box flexflex"><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_15)}> 发送信息 </a><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_16)}> TA的主页 </a><div class="avatar-mask"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="time">${ssrInterpolate($setup.handleDate(item["publicationdate"]))}</div></div><div class="operate-box flexacenter"><div class="interaction-box flexacenter flex1"><div class="${ssrRenderClass([{ "pitch": item.tab == "riposte" }, "interaction-item flexacenter"])}">`);
|
|
if ((_a = item.ripostecount) == null ? void 0 : _a.total) {
|
|
_push(`<!--[--> 回应 <span class="amount">${ssrInterpolate((_b = item.ripostecount) == null ? void 0 : _b.total)}</span><!--]-->`);
|
|
} else {
|
|
_push(`<!--[-->添加回应<!--]-->`);
|
|
}
|
|
_push(`</div><div class="${ssrRenderClass([{ "pitch": item.tab == "comment" }, "interaction-item flexacenter"])}">`);
|
|
if (item.commentnum != 0) {
|
|
_push(`<!--[--> 讨论 <span class="amount">${ssrInterpolate(item.commentnum)}</span><!--]-->`);
|
|
} else {
|
|
_push(`<!--[-->添加讨论<!--]-->`);
|
|
}
|
|
_push(`</div><div class="${ssrRenderClass([{ "pitch": item.tab == "coin" }, "interaction-item flexacenter"])}">`);
|
|
if (item.coinnum > 0) {
|
|
_push(`<!--[--> 投币 <span class="amount">${ssrInterpolate(item.coinnum)}</span><!--]-->`);
|
|
} else {
|
|
_push(`<!--[-->给TA投币<!--]-->`);
|
|
}
|
|
_push(`</div></div><div class="operate-list flexacenter"><div class="operate-item flexacenter">`);
|
|
if (item["iscollection"] == 1) {
|
|
_push(`<img class="operate-icon operate-collect-icon"${ssrRenderAttr("src", _imports_21)}>`);
|
|
} else {
|
|
_push(`<img class="operate-icon operate-collect-icon"${ssrRenderAttr("src", _imports_20)}>`);
|
|
}
|
|
_push(` ${ssrInterpolate(item["collectionnum"] == 0 ? "收藏" : item["collectionnum"])}</div><div class="operate-item operate-transmit flexacenter"><img class="operate-icon operate-transmit-icon"${ssrRenderAttr("src", _imports_22)}> 转发 `);
|
|
if (item["transmitState"]) {
|
|
_push(`<div class="transmit-box flexflex"><img class="cross-icon"${ssrRenderAttr("src", _imports_13)}><div class="transmit-left transmit-web"><div class="transmit-title">转发网页版</div><div class="transmit-content"><div class="transmit-headline">${ssrInterpolate($setup.detailsInfo["title"])}</div><div class="transmit-url">${ssrInterpolate($setup.getCurrentUrl())}</div></div><div class="transmit-web-btn flexcenter">复制链接</div></div><div class="transmit-right transmit-mini"><div class="transmit-title">转发小程序版</div><div class="transmit-content flexcenter"><img class="transmit-mini-img"${ssrRenderAttr("src", item["share"]["qrcode"])}><div class="flexcenter"><img class="give-sweep"${ssrRenderAttr("src", _imports_23)}> 扫码转发该问答 </div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div></div>`);
|
|
if (item.tab == "coin") {
|
|
_push(`<div class="answer-coins"><div class="coins-show flexacenter"><img class="coins-icon"${ssrRenderAttr("src", _imports_26)}><div class="coins-text flexacenter flex1"> 该回答已获 <span class="quantity">${ssrInterpolate(item.coinnum)}</span> 个寄托币 </div><div class="coins-btn flexcenter">给TA投币</div></div>`);
|
|
if (((_c = item.ranklist) == null ? void 0 : _c.length) > 0) {
|
|
_push(`<div class="answer-coins-list"><!--[-->`);
|
|
ssrRenderList(item.ranklist, (item2, index2) => {
|
|
_push(`<div class="answer-coins-item flexacenter"><div class="ranking">${ssrInterpolate(index2 + 1)}</div><div class="coins-user flexacenter flex1"><img class="coins-user-img"${ssrRenderAttr("src", item2.avatar)}><div class="coins-user-name flex1">${ssrInterpolate(item2.nickname)}</div></div><div class="bi flexacenter"><div class="bi-amount">${ssrInterpolate(item2.coinnum)}</div> 币 </div></div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item.tab == "riposte") {
|
|
_push(`<div class="respond-area"><!--[-->`);
|
|
ssrRenderList(item.ripostelist, (it, i) => {
|
|
_push(`<div class="${ssrRenderClass([{ "pitch": it.selected }, "respond-already-item flexacenter"])}"><div class="code flexacenter">${$setup.jointriposte(it.item)}</div> ${ssrInterpolate(it.num)}</div>`);
|
|
});
|
|
_push(`<!--]-->`);
|
|
if (((_d = item.ripostelist) == null ? void 0 : _d.length) <= 3) {
|
|
_push(`<div class="respond-select flexacenter"><!--[-->`);
|
|
ssrRenderList(item.randomEmojis.slice(0, ((_e = item.ripostelist) == null ? void 0 : _e.length) == 0 ? 8 : 5), (it, i) => {
|
|
_push(`<div class="respond-select-item">${$setup.jointriposte(it)}</div>`);
|
|
});
|
|
_push(`<!--]-->`);
|
|
_push(ssrRenderComponent(_component_RespondAdd, {
|
|
riposteoptions: item.riposteoptions,
|
|
onSelectEomji: $setup.selectEomji,
|
|
index
|
|
}, null, _parent));
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(ssrRenderComponent(_component_RespondAdd, {
|
|
riposteoptions: item.riposteoptions,
|
|
index,
|
|
onSelectEomji: $setup.selectEomji
|
|
}, null, _parent));
|
|
}
|
|
if (((_f = item.ripostecount) == null ? void 0 : _f.user) > 0) {
|
|
_push(`<div class="respond-list-btn"> 共 <span class="respond-list-btn-amount">${ssrInterpolate((_g = item.ripostecount) == null ? void 0 : _g.user)}</span> 人回应 <img class="respond-list-btn-icon"${ssrRenderAttr("src", _imports_27)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (item.tab == "comment") {
|
|
_push(`<div class="comments-area"><div class="post-comment-box"><div class="${ssrRenderClass([{ "post-comment-radius": item.commentnum == 0 }, "post-comment flexacenter"])}"><textarea class="post-input flex1" placeholder="说点什么…">${ssrInterpolate(item["commentInput"])}</textarea><div class="post-ok flexcenter">OK</div></div></div>`);
|
|
if (item["commentList"] && item["commentList"].length != 0) {
|
|
_push(`<div class="${ssrRenderClass([{ "show-one-comment": item["showOneCommentState"] }, "comments-box"])}"><!--[-->`);
|
|
ssrRenderList(item["commentList"], (it, ind) => {
|
|
_push(`<div class="comments-item"><div class="comments-header flexacenter"><div class="comments-header-left flexacenter"><img class="comments-avatar"${ssrRenderAttr("src", it["avatar"])}><div class="comments-username">${ssrInterpolate(it["nickname"])}</div><div class="comments-time">${ssrInterpolate($setup.handleDate(it["timestamp"]))}</div>`);
|
|
if (it["questioner"] == 1) {
|
|
_push(`<div class="comments-identity">提问者</div>`);
|
|
} else if (it["isauthor"] == 1) {
|
|
_push(`<div class="comments-identity">回答者</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (it["avatarState"]) {
|
|
_push(`<div class="avatar-box flexflex"><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_15)}> 发送信息 </a><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_16)}> TA的主页 </a><div class="avatar-mask"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="comments-header-right flexacenter"><div class="menu-box flexacenter"><img class="menu-icon"${ssrRenderAttr("src", _imports_28)}><div class="report-box flexcenter">举报</div></div><img class="comment-icon"${ssrRenderAttr("src", _imports_29)}><div class="flexacenter like-box">`);
|
|
if (it["islike"] == 0) {
|
|
_push(`<img class="like-icon"${ssrRenderAttr("src", _imports_30)}>`);
|
|
} else {
|
|
_push(`<img class="like-icon"${ssrRenderAttr("src", _imports_31)}>`);
|
|
}
|
|
_push(`<div class="like-quantity">${ssrInterpolate(it["likenum"] || 0)}</div></div></div></div><div class="comments-content"><div class="comments-text">${ssrInterpolate(it["content"])}</div>`);
|
|
if (it["childState"]) {
|
|
_push(`<div class="comments-input-box flexacenter"><div class="comments-input flexflex"><textarea class="flex1" placeholder="回复">${ssrInterpolate(it["commentInput"])}</textarea><div class="comments-btn flexcenter">发送</div></div><img class="forkfork"${ssrRenderAttr("src", _imports_13)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
if (it["child"].length != 0) {
|
|
_push(`<div class="child-comments"><!--[-->`);
|
|
ssrRenderList(it["child"], (ite, i) => {
|
|
_push(`<div class="comments-item"><div class="comments-header flexacenter"><div class="comments-header-left flexacenter"><img class="comments-avatar"${ssrRenderAttr("src", ite["avatar"])}><div class="comments-username">${ssrInterpolate(ite["nickname"])}</div><div class="comments-time">${ssrInterpolate($setup.handleDate(ite["timestamp"]))}</div>`);
|
|
if (ite["questioner"] == 1) {
|
|
_push(`<div class="comments-identity">提问者</div>`);
|
|
} else if (ite["isauthor"] == 1) {
|
|
_push(`<div class="comments-identity">回答者</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (ite["avatarState"]) {
|
|
_push(`<div class="avatar-box flexflex"><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_15)}> 发送信息 </a><a class="avatar-item flexcenter" target="_blank"><img class="avatar-icon"${ssrRenderAttr("src", _imports_16)}> TA的主页 </a><div class="avatar-mask"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="comments-header-right flexacenter"><div class="menu-box flexacenter"><img class="menu-icon"${ssrRenderAttr("src", _imports_28)}><div class="report-box flexcenter">举报</div></div><img class="comment-icon"${ssrRenderAttr("src", _imports_29)}><div class="flexacenter like-box">`);
|
|
if (ite["islike"] == 0) {
|
|
_push(`<img class="like-icon"${ssrRenderAttr("src", _imports_30)}>`);
|
|
} else {
|
|
_push(`<img class="like-icon"${ssrRenderAttr("src", _imports_31)}>`);
|
|
}
|
|
_push(`<div class="like-quantity">${ssrInterpolate(ite["likenum"] || 0)}</div></div></div></div><div class="comments-content"><div class="comments-text">`);
|
|
if (JSON.stringify(ite["reply"]) != "[]") {
|
|
_push(`<div class="comments-reply">@${ssrInterpolate(ite["reply"]["nickname"])}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(` ${ssrInterpolate(ite["content"])}</div>`);
|
|
if (ite["childState"]) {
|
|
_push(`<div class="comments-input-box flexacenter"><div class="comments-input flexflex"><textarea class="flex1" placeholder="回复">${ssrInterpolate(ite["commentInput"])}</textarea><div class="comments-btn flexcenter">发送</div></div><img class="forkfork"${ssrRenderAttr("src", _imports_13)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div>`);
|
|
});
|
|
_push(`<!--]-->`);
|
|
if (it["childnum"] > it["child"].length) {
|
|
_push(`<div class="comments-also flexacenter"><div class>还有${ssrInterpolate(it["childnum"] - 1)}条回复</div><img class="also-icon"${ssrRenderAttr("src", _imports_33)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
});
|
|
_push(`<!--]-->`);
|
|
if (item["showOneCommentState"] && item.commentnum > 2) {
|
|
_push(`<div class="more-comments flexcenter"> 更多讨论 <img class="more-comments-icon"${ssrRenderAttr("src", _imports_33)}></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
});
|
|
_push(`<!--]-->`);
|
|
if ($setup.answerList.length > 0) {
|
|
_push(`<div class="copyright flexcenter">· 著作权归作者所有 ·</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if (!$setup.isNeedLogin) {
|
|
_push(`<div class="your-answer-box"><div class="your-answer-header flexacenter">您的答案</div><div class="${ssrRenderClass([{ placeholder: $setup.yourAnswerPlaceholderState }, "your-answer-textarea"])}" contenteditable="true">${$setup.yourAnswer["text"]}</div><div class="flexacenter your-answer-bottom"><div class="option-box flexacenter">`);
|
|
if ($setup.yourAnswer["anonymous"] == 0) {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_34)}>`);
|
|
} else {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_35)}>`);
|
|
}
|
|
_push(` 匿名发表 </div><div class="your-answer-submit flexcenter">提交回答</div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.isNeedLogin && $setup.answerList.length == 0) {
|
|
_push(`<div class="answer-empty-box flexcenter"><div class="empty-box flexcenter"><div class="dot-list flexacenter"><!--[-->`);
|
|
ssrRenderList(3, (item) => {
|
|
_push(`<img class="dot-item"${ssrRenderAttr("src", _imports_9)}>`);
|
|
});
|
|
_push(`<!--]--><!--[-->`);
|
|
ssrRenderList(3, (item) => {
|
|
_push(`<img class="dot-item"${ssrRenderAttr("src", _imports_10)}>`);
|
|
});
|
|
_push(`<!--]--></div><img class="empty-icon"${ssrRenderAttr("src", _imports_11)}></div><div class="empty-hint">我在等待你的回答</div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="mobile-phone-check flexcenter"><img class="QRCode-icon"${ssrRenderAttr("src", _imports_36)} alt> 手机查看该问答 <div class="QRCode-pop flexcenter"><img class="offer-mini-QRcode"${ssrRenderAttr("src", $setup.detailShare["qrcode"])}><div class="QRCode-hint flexacenter"><img class="QRCode-img"${ssrRenderAttr("src", _imports_23)}> 微信扫一扫 </div></div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div>`);
|
|
if ($setup.myType) {
|
|
_push(`<div class="popover-mask my-popover flexcenter"><div class="popover-box flexflex"><img class="cross-icon"${ssrRenderAttr("src", _imports_13)}><div class="tab-list flexcenter"><div class="${ssrRenderClass([{ pitch: $setup.myType == "collect" }, "tab-item flexacenter"])}"> 我的收藏 <div class="quantity">${ssrInterpolate($setup.myCollectionCount || $setup.myCount["collect"] || 0)}</div></div><div class="long-string"></div><div class="${ssrRenderClass([{ pitch: $setup.myType == "questions" }, "tab-item flexacenter"])}"> 我的提问 <div class="quantity">${ssrInterpolate($setup.myQuestionsCount || $setup.myCount["questions"] || 0)}</div></div><div class="long-string"></div><div class="${ssrRenderClass([{ pitch: $setup.myType == "answers" }, "tab-item flexacenter"])}"> 我的回答 <div class="quantity">${ssrInterpolate($setup.myAnswerCount || $setup.myCount["answer"] || 0)}</div></div></div>`);
|
|
if ($setup.myType == "collect" && $setup.myCollectionList.length == 0 || $setup.myType == "answers" && $setup.myAnswerList.length == 0 || $setup.myType == "questions" && $setup.myQuestionsList.length == 0) {
|
|
_push(`<div class="empty-box flexcenter"><div class="dot-list flexacenter"><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_9)}><img class="item"${ssrRenderAttr("src", _imports_10)}><img class="item"${ssrRenderAttr("src", _imports_10)}><img class="item"${ssrRenderAttr("src", _imports_10)}></div><img class="empty-icon"${ssrRenderAttr("src", _imports_11)}><div class="empty-hint">暂无内容</div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.myType == "collect" && $setup.myCollectionList.length != 0) {
|
|
_push(`<div class="content-box collect-list"><!--[-->`);
|
|
ssrRenderList($setup.myCollectionList, (item, index) => {
|
|
_push(`<div class="item flexflex">`);
|
|
if (item.type == "askanswercollection") {
|
|
_push(`<!--[--><div class="icon a flexcenter">A</div><div class="centre flexflex flex1"><div class="titletitle ellipsis">${item["data"]["content"]}</div><div class="text ellipsis">提问:${ssrInterpolate(item["data"]["title"])}</div></div><div class="delete-box flexacenter"><img class="delete-icon"${ssrRenderAttr("src", _imports_37)}></div><!--]-->`);
|
|
} else {
|
|
_push(`<!--[--><div class="icon q flexcenter">Q</div><div class="centre flexflex flex1"><div class="titletitle ellipsis">${ssrInterpolate(item["data"]["title"])}</div><div class="text ellipsis">${ssrInterpolate(item["data"]["answers"] > 0 ? "共" + item["data"]["answers"] + "个回答" : "暂无回答")}</div></div><div class="delete-box flexacenter"><img class="delete-icon"${ssrRenderAttr("src", _imports_37)}></div><!--]-->`);
|
|
}
|
|
_push(`</div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.myType == "answers" && $setup.myAnswerList.length != 0) {
|
|
_push(`<div class="content-box answers-list"><!--[-->`);
|
|
ssrRenderList($setup.myAnswerList, (item, index) => {
|
|
_push(`<div class="item flexflex"><div class="icon a flexcenter">A</div><div class="centre flexflex flex1"><div class="info flexacenter"><div class="name">${ssrInterpolate(item["nickname"])}</div><div class="time">${ssrInterpolate($setup.handleDate(item["publicationdate"]))}</div></div><div class="titletitle ellipsis">${item["content"]}</div><div class="text ellipsis">提问:${ssrInterpolate(item["title"])}</div></div><div class="operate-box flexacenter"><div class="state-box flexacenter"><div class="text">${ssrInterpolate(item["anonymous"] == 0 ? "公开" : "匿名")}</div><img class="arrows"${ssrRenderAttr("src", _imports_38)}>`);
|
|
if (item["popupState"]) {
|
|
_push(`<div class="state-popup flexflex"><div class="${ssrRenderClass([{ pitch: item["anonymous"] == 0 }, "state-popup-item flexacenter flex1"])}"><div class>公开发表</div><img class="state-popup-icon"${ssrRenderAttr("src", _imports_39)}></div><div class="${ssrRenderClass([{ pitch: item["anonymous"] == 1 }, "state-popup-item flexacenter flex1"])}"><div class>匿名发表</div><img class="state-popup-icon"${ssrRenderAttr("src", _imports_39)}></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><img class="edit-icon"${ssrRenderAttr("src", _imports_17)}></div></div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.myType == "questions" && $setup.myQuestionsList.length != 0) {
|
|
_push(`<div class="content-box questions-list"><!--[-->`);
|
|
ssrRenderList($setup.myQuestionsList, (item, index) => {
|
|
_push(`<div class="item flexflex"><div class="icon q flexcenter">Q</div><div class="centre flexflex flex1"><div class="info flexacenter"><div class="name">${ssrInterpolate(item["nickname"])}</div><div class="time">${ssrInterpolate($setup.handleDate(item["publicationdate"]))}</div></div><div class="titletitle ellipsis">${ssrInterpolate(item["title"])}</div><div class="text flexacenter">`);
|
|
if (item["authornewnum"] > 0) {
|
|
_push(`<div class="new-answer flexacenter"> 有${ssrInterpolate(item["authornewnum"])}个新回答 <div class="long-string"></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(` ${ssrInterpolate(item["answers"] == 0 ? "暂无回答" : "共" + item["answers"] + "个回答")}</div></div><div class="operate-box flexacenter"><div class="state-box flexacenter"><div class="text">${ssrInterpolate(item["anonymous"] == 0 ? "公开" : "匿名")}</div><img class="arrows"${ssrRenderAttr("src", _imports_38)}>`);
|
|
if (item["popupState"]) {
|
|
_push(`<div class="state-popup flexflex"><div class="${ssrRenderClass([{ pitch: item["anonymous"] == 0 }, "state-popup-item flexacenter flex1"])}"><div class>公开发表</div><img class="state-popup-icon"${ssrRenderAttr("src", _imports_39)}></div><div class="${ssrRenderClass([{ pitch: item["anonymous"] == 1 }, "state-popup-item flexacenter flex1"])}"><div class>匿名发表</div><img class="state-popup-icon"${ssrRenderAttr("src", _imports_39)}></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div></div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.questionsSetp) {
|
|
_push(`<div class="popover-mask flexcenter issue-box">`);
|
|
if ($setup.questionsSetp == 1) {
|
|
_push(`<div class="choosing-theme"><div class="titletitle">选择提问所属主题</div><div class="theme-list flexflex"><!--[-->`);
|
|
ssrRenderList($setup.questionsTypeList, (item, index) => {
|
|
_push(`<div class="theme-stair-box flexflex"><!--[-->`);
|
|
ssrRenderList(item, (item2) => {
|
|
_push(`<div class="theme-item flexcenter">${ssrInterpolate(item2.name)}</div>`);
|
|
});
|
|
_push(`<!--]--></div>`);
|
|
});
|
|
_push(`<!--]--></div></div>`);
|
|
} else {
|
|
_push(`<div class="issue-form"><img class="issue-bj"${ssrRenderAttr("src", _imports_40)}><div class="flexcenter q">Q</div><img class="cross-icon"${ssrRenderAttr("src", _imports_13)}><div class="issue-input"><textarea placeholder="一句话描述问题,以问号结尾">${ssrInterpolate($setup.questionsObj.title)}</textarea></div><textarea class="issue-replenish" placeholder="欢迎补充,清晰表达问题的关键点,可获得更有效的解答(非必填)">${ssrInterpolate($setup.questionsObj.content)}</textarea><div class="issue-bottom flexacenter"><div class="option-box flexacenter" style="${ssrRenderStyle({ "color": "#333" })}">`);
|
|
if ($setup.questionsObj.anonymous == 0) {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_34)}>`);
|
|
} else {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_35)}>`);
|
|
}
|
|
_push(` 匿名发表 <div class style="${ssrRenderStyle({ "color": "#aaa" })}">(发布后只能修改是否匿名)</div></div><div class="issue-btn flexcenter">发布问题</div></div></div>`);
|
|
}
|
|
_push(`</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.IAnswerEditState) {
|
|
_push(`<div class="popover-mask flexcenter"><div class="edit-answers"><img class="close-icon"${ssrRenderAttr("src", _imports_13)}><div class="titletitle">编辑回答</div><div class="${ssrRenderClass([{ placeholder: $setup.questionPlaceholderState }, "question-textarea"])}" contenteditable="true">${$setup.IAnswerInfo["text"]}</div><div class="issue-bottom flexacenter"><div class="option-box flexacenter">`);
|
|
if ($setup.IAnswerInfo["anonymous"] == 0) {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_34)}>`);
|
|
} else {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_35)}>`);
|
|
}
|
|
_push(` 匿名发表 </div><div class="issue-btn flexcenter">提交回答</div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.IAnswerState) {
|
|
_push(`<div class="popover-mask flexcenter"><div class="i-answer-box flexflex"><img class="close-icon"${ssrRenderAttr("src", _imports_13)}><div class="question-header"><div class="question-title flexflex"><div class="question-icon flexcenter">Q</div><div class="flex1">${$setup.IAnswerInfo["title"]}</div></div>`);
|
|
if ($setup.IAnswerInfo["content"]) {
|
|
_push(`<div class="question-replenish">${$setup.IAnswerInfo["content"]}</div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div><div class="question-middle flexflex"><div class="question-icon flexcenter">A</div><div class="${ssrRenderClass([{ placeholder: $setup.questionPlaceholderState }, "question-textarea"])}" contenteditable="true">${$setup.IAnswerInfo["text"]}</div></div><div class="issue-bottom flexacenter"><div class="option-box flexacenter">`);
|
|
if ($setup.IAnswerInfo["anonymous"] == 0) {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_34)}>`);
|
|
} else {
|
|
_push(`<img class="option-icon"${ssrRenderAttr("src", _imports_35)}>`);
|
|
}
|
|
_push(` 匿名发表 </div><div class="issue-btn flexcenter">提交回答</div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<template><div class="${ssrRenderClass([$setup.boxClass(), "box-item"])}" style="${ssrRenderStyle({ top: "20px" })}"><div class="msg-container">${ssrInterpolate($setup.msg["text"])}</div></div></template>`);
|
|
if ($setup.dialogSrc) {
|
|
_push(`<div class="detail-image-mask flexcenter"><div class="detail-image flexcenter"><img class="detail-img"${ssrRenderAttr("src", $setup.dialogSrc)}></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`<div class="alert-form" style="${ssrRenderStyle($setup.alertShow ? null : { display: "none" })}"><div class="comments reports"><div class="head"><span style="${ssrRenderStyle({ "display": "flex", "align-items": "center" })}"><img style="${ssrRenderStyle({ "width": "25px", "margin-right": "7px" })}" src="//app.gter.net/image/gter/offer/img/exclamationpoint.png?v=4.2.08_331040000">举报投诉 </span><div class="close icon-close iconfont"></div></div><div class="form"><div class="radio-area flexacenter"><!--[-->`);
|
|
ssrRenderList($setup.reasonList, (s, i) => {
|
|
_push(`<div class="${ssrRenderClass([{ pitch: $setup.checkList.includes(s) }, "radio-area-item flexacenter"])}"><div cdivlass="radio-area-frame"></div> ${ssrInterpolate(s)}</div>`);
|
|
});
|
|
_push(`<!--]--></div><div class="text-box"><textarea placeholder="请输入举报原因" maxlength="200">${ssrInterpolate($setup.alertText)}</textarea><div class="text-num">${ssrInterpolate(200 - $setup.alertText.length)}</div></div><div class="footer"><button type="button">取消</button><button type="submit"${ssrIncludeBooleanAttr($setup.checkList.length == 0) ? " disabled" : ""}>提交</button></div></div></div></div>`);
|
|
if ($setup.respondPopState) {
|
|
_push(ssrRenderComponent(_component_RespondPop, {
|
|
respondDetail: $setup.respondDetail,
|
|
respondPopObj: $setup.respondPopObj,
|
|
onClosePopList: $setup.closePopList,
|
|
onSelectEomji: $setup.selectEomji
|
|
}, null, _parent));
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.insertcoinsState) {
|
|
_push(`<div class="respond-pop-mask"><div class="slit-pop-box"><div class="slit-left"><img class="slit-left-icon"${ssrRenderAttr("src", _imports_26)}></div><div class="slit-box"><div class="slit-head" style="${ssrRenderStyle({})}"><div class="slit-head-title flexflex" style="${ssrRenderStyle({})}"><span>投币</span> <a target="_blank"${ssrRenderAttr("href", $setup.insert.coinConfig.strategy.url)} style="${ssrRenderStyle({})}">${ssrInterpolate($setup.insert.coinConfig.strategy.button)}</a></div><div class="in-all"> 你共有 <span>${ssrInterpolate($setup.insert.coinMybalance)}</span> 寄托币 </div></div><div class="coin-quantity flex-items"><!--[-->`);
|
|
ssrRenderList($setup.insert.coinConfig.list, (item) => {
|
|
_push(`<div class="${ssrRenderClass([{ "coin-pitch": $setup.coinAmount == item }, "coin-quantity-item"])}">${ssrInterpolate(item)} <span>${ssrInterpolate($setup.insert.coinConfig.unit)}</span></div>`);
|
|
});
|
|
_push(`<!--]--></div><input class="slit-input" type="number"${ssrRenderAttr("value", $setup.coinAmount)} placeholder="自定义投币金额"><div class="message-box"><div class="message-hint">顺便说点什么</div><input class="slit-input"${ssrRenderAttr("value", $setup.coinMessage)} placeholder="请输入" maxlength="500"></div><div class="operation"><div class="operation-item flexcenter">取消</div><div class="operation-item flexcenter greenBj">确定</div></div></div></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
if ($setup.insertcoinsNoState) {
|
|
_push(`<div class="respond-pop-mask"><div class="no-jituobi-pop-box"><img class="no-jituobi-close"${ssrRenderAttr("src", _imports_41)}><div class="no-jituobi-head flexacenter"><img class="bi-icon"${ssrRenderAttr("src", _imports_26)} style="${ssrRenderStyle({ "margin-right": "12px" })}"><span style="${ssrRenderStyle({ "margin-top": "10px" })}">${ssrInterpolate($setup.insert.coinConfig.strategy.tips)}</span></div><a${ssrRenderAttr("href", $setup.insert.coinConfig.strategy.url)} target="_blank"><div class="strategy-btn greenBj flexcenter">${ssrInterpolate($setup.insert.coinConfig.strategy.button)}<img class="strategy-icon"${ssrRenderAttr("src", _imports_42)}></div></a></div></div>`);
|
|
} else {
|
|
_push(`<!---->`);
|
|
}
|
|
_push(`</div></div><!--]-->`);
|
|
}
|
|
const _sfc_setup$2 = _sfc_main$2.setup;
|
|
_sfc_main$2.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("app.vue");
|
|
return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
|
|
};
|
|
const AppComponent = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["ssrRender", _sfc_ssrRender]]);
|
|
const _sfc_main$1 = {
|
|
__name: "nuxt-error-page",
|
|
__ssrInlineRender: true,
|
|
props: {
|
|
error: Object
|
|
},
|
|
setup(__props) {
|
|
const props = __props;
|
|
const _error = props.error;
|
|
(_error.stack || "").split("\n").splice(1).map((line) => {
|
|
const text = line.replace("webpack:/", "").replace(".vue", ".js").trim();
|
|
return {
|
|
text,
|
|
internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
|
|
};
|
|
}).map((i) => `<span class="stack${i.internal ? " internal" : ""}">${i.text}</span>`).join("\n");
|
|
const statusCode = Number(_error.statusCode || 500);
|
|
const is404 = statusCode === 404;
|
|
const statusMessage = _error.statusMessage ?? (is404 ? "Page Not Found" : "Internal Server Error");
|
|
const description = _error.message || _error.toString();
|
|
const stack = void 0;
|
|
const _Error404 = defineAsyncComponent(() => import('./static/error-404-0f1ab5c8.mjs').then((r) => r.default || r));
|
|
const _Error = defineAsyncComponent(() => import('./static/error-500-081e433d.mjs').then((r) => r.default || r));
|
|
const ErrorTemplate = is404 ? _Error404 : _Error;
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
_push(ssrRenderComponent(unref(ErrorTemplate), mergeProps({ statusCode: unref(statusCode), statusMessage: unref(statusMessage), description: unref(description), stack: unref(stack) }, _attrs), null, _parent));
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup$1 = _sfc_main$1.setup;
|
|
_sfc_main$1.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("node_modules/nuxt/dist/app/components/nuxt-error-page.vue");
|
|
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
|
};
|
|
const ErrorComponent = _sfc_main$1;
|
|
const _sfc_main = {
|
|
__name: "nuxt-root",
|
|
__ssrInlineRender: true,
|
|
setup(__props) {
|
|
const IslandRenderer = defineAsyncComponent(() => import('./static/island-renderer-ce17c7fc.mjs').then((r) => r.default || r));
|
|
const nuxtApp = /* @__PURE__ */ useNuxtApp();
|
|
nuxtApp.deferHydration();
|
|
nuxtApp.ssrContext.url;
|
|
const SingleRenderer = false;
|
|
provide(PageRouteSymbol, useRoute());
|
|
nuxtApp.hooks.callHookWith((hooks) => hooks.map((hook) => hook()), "vue:setup");
|
|
const error = useError();
|
|
onErrorCaptured((err, target, info) => {
|
|
nuxtApp.hooks.callHook("vue:error", err, target, info).catch((hookError) => console.error("[nuxt] Error in `vue:error` hook", hookError));
|
|
{
|
|
const p = nuxtApp.runWithContext(() => showError(err));
|
|
onServerPrefetch(() => p);
|
|
return false;
|
|
}
|
|
});
|
|
const islandContext = nuxtApp.ssrContext.islandContext;
|
|
return (_ctx, _push, _parent, _attrs) => {
|
|
ssrRenderSuspense(_push, {
|
|
default: () => {
|
|
if (unref(error)) {
|
|
_push(ssrRenderComponent(unref(ErrorComponent), { error: unref(error) }, null, _parent));
|
|
} else if (unref(islandContext)) {
|
|
_push(ssrRenderComponent(unref(IslandRenderer), { context: unref(islandContext) }, null, _parent));
|
|
} else if (unref(SingleRenderer)) {
|
|
ssrRenderVNode(_push, createVNode(resolveDynamicComponent(unref(SingleRenderer)), null, null), _parent);
|
|
} else {
|
|
_push(ssrRenderComponent(unref(AppComponent), null, null, _parent));
|
|
}
|
|
},
|
|
_: 1
|
|
});
|
|
};
|
|
}
|
|
};
|
|
const _sfc_setup = _sfc_main.setup;
|
|
_sfc_main.setup = (props, ctx) => {
|
|
const ssrContext = useSSRContext();
|
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("node_modules/nuxt/dist/app/components/nuxt-root.vue");
|
|
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
|
};
|
|
const RootComponent = _sfc_main;
|
|
let entry;
|
|
{
|
|
entry = async function createNuxtAppServer(ssrContext) {
|
|
const vueApp = createApp(RootComponent);
|
|
const nuxt = createNuxtApp({ vueApp, ssrContext });
|
|
try {
|
|
await applyPlugins(nuxt, plugins);
|
|
await nuxt.hooks.callHook("app:created", vueApp);
|
|
} catch (err) {
|
|
await nuxt.hooks.callHook("app:error", err);
|
|
nuxt.payload.error = nuxt.payload.error || err;
|
|
}
|
|
if (ssrContext == null ? void 0 : ssrContext._renderResponse) {
|
|
throw new Error("skipping render");
|
|
}
|
|
return vueApp;
|
|
};
|
|
}
|
|
const entry$1 = (ctx) => entry(ctx);
|
|
|
|
export { _export_sfc as _, useRuntimeConfig as a, useHead as b, createError as c, entry$1 as default, navigateTo as n, useRouter as u };
|
|
//# sourceMappingURL=server.mjs.map
|