update
5
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
6
.idea/inspectionProfiles/Project_Default.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
.idea/jsLinters/eslint.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="EslintConfiguration">
|
||||||
|
<option name="fix-on-save" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
13
.idea/material_theme_project_new.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MaterialThemeProjectNewConfig">
|
||||||
|
<option name="metadata">
|
||||||
|
<MTProjectMetadataState>
|
||||||
|
<option name="migrated" value="true" />
|
||||||
|
<option name="pristineConfig" value="false" />
|
||||||
|
<option name="userId" value="-15b39f1f:197abca9a0e:-8000" />
|
||||||
|
<option name="version" value="8.12.6" />
|
||||||
|
</MTProjectMetadataState>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/vuepress-starter.iml" filepath="$PROJECT_DIR$/.idea/vuepress-starter.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
12
.idea/vuepress-starter.iml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
3615
docs/.vuepress/.cache/deps/@vue_devtools-api.js
Normal file
7
docs/.vuepress/.cache/deps/@vue_devtools-api.js.map
Normal file
138
docs/.vuepress/.cache/deps/@vuepress_shared.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
import "./chunk-PZ5AY32C.js";
|
||||||
|
|
||||||
|
// node_modules/@vuepress/shared/dist/index.js
|
||||||
|
var isLinkWithProtocol = (link) => /^[a-z][a-z0-9+.-]*:/.test(link) || link.startsWith("//");
|
||||||
|
var markdownLinkRegexp = /.md((\?|#).*)?$/;
|
||||||
|
var isLinkExternal = (link, base = "/") => isLinkWithProtocol(link) || // absolute link that does not start with `base` and does not end with `.md`
|
||||||
|
link.startsWith("/") && !link.startsWith(base) && !markdownLinkRegexp.test(link);
|
||||||
|
var isLinkHttp = (link) => /^(https?:)?\/\//.test(link);
|
||||||
|
var inferRoutePath = (rawPath) => {
|
||||||
|
if (!rawPath || rawPath.endsWith("/")) return rawPath;
|
||||||
|
let routePath = rawPath.replace(/(^|\/)README.md$/i, "$1index.html");
|
||||||
|
if (routePath.endsWith(".md")) {
|
||||||
|
routePath = `${routePath.substring(0, routePath.length - 3)}.html`;
|
||||||
|
} else if (!routePath.endsWith(".html")) {
|
||||||
|
routePath = `${routePath}.html`;
|
||||||
|
}
|
||||||
|
if (routePath.endsWith("/index.html")) {
|
||||||
|
routePath = routePath.substring(0, routePath.length - 10);
|
||||||
|
}
|
||||||
|
return routePath;
|
||||||
|
};
|
||||||
|
var FAKE_HOST = "http://.";
|
||||||
|
var normalizeRoutePath = (pathname, current) => {
|
||||||
|
if (!pathname.startsWith("/") && current) {
|
||||||
|
const loc = current.slice(0, current.lastIndexOf("/"));
|
||||||
|
return inferRoutePath(new URL(`${loc}/${pathname}`, FAKE_HOST).pathname);
|
||||||
|
}
|
||||||
|
return inferRoutePath(pathname);
|
||||||
|
};
|
||||||
|
var resolveLocalePath = (locales, routePath) => {
|
||||||
|
const localePaths = Object.keys(locales).sort((a, b) => {
|
||||||
|
const levelDelta = b.split("/").length - a.split("/").length;
|
||||||
|
if (levelDelta !== 0) {
|
||||||
|
return levelDelta;
|
||||||
|
}
|
||||||
|
return b.length - a.length;
|
||||||
|
});
|
||||||
|
for (const localePath of localePaths) {
|
||||||
|
if (routePath.startsWith(localePath)) {
|
||||||
|
return localePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "/";
|
||||||
|
};
|
||||||
|
var resolveRoutePathFromUrl = (url, base = "/") => {
|
||||||
|
const pathname = url.replace(/^(?:https?:)?\/\/[^/]*/, "");
|
||||||
|
return pathname.startsWith(base) ? `/${pathname.slice(base.length)}` : pathname;
|
||||||
|
};
|
||||||
|
var SPLIT_CHAR_REGEXP = /(#|\?)/;
|
||||||
|
var splitPath = (path) => {
|
||||||
|
const [pathname, ...hashAndQueries] = path.split(SPLIT_CHAR_REGEXP);
|
||||||
|
return {
|
||||||
|
pathname,
|
||||||
|
hashAndQueries: hashAndQueries.join("")
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var TAGS_ALLOWED = ["link", "meta", "script", "style", "noscript", "template"];
|
||||||
|
var TAGS_UNIQUE = ["title", "base"];
|
||||||
|
var resolveHeadIdentifier = ([tag, attrs, content]) => {
|
||||||
|
if (TAGS_UNIQUE.includes(tag)) {
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
if (!TAGS_ALLOWED.includes(tag)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (tag === "meta" && attrs.name) {
|
||||||
|
return `${tag}.${attrs.name}`;
|
||||||
|
}
|
||||||
|
if (tag === "template" && attrs.id) {
|
||||||
|
return `${tag}.${attrs.id}`;
|
||||||
|
}
|
||||||
|
return JSON.stringify([
|
||||||
|
tag,
|
||||||
|
Object.entries(attrs).map(([key, value]) => {
|
||||||
|
if (typeof value === "boolean") {
|
||||||
|
return value ? [key, ""] : null;
|
||||||
|
}
|
||||||
|
return [key, value];
|
||||||
|
}).filter((item) => item != null).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)),
|
||||||
|
content
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
var dedupeHead = (head) => {
|
||||||
|
const identifierSet = /* @__PURE__ */ new Set();
|
||||||
|
const result = [];
|
||||||
|
head.forEach((item) => {
|
||||||
|
const identifier = resolveHeadIdentifier(item);
|
||||||
|
if (identifier && !identifierSet.has(identifier)) {
|
||||||
|
identifierSet.add(identifier);
|
||||||
|
result.push(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
var ensureLeadingSlash = (str) => str.startsWith("/") ? str : `/${str}`;
|
||||||
|
var ensureEndingSlash = (str) => str.endsWith("/") || str.endsWith(".html") ? str : `${str}/`;
|
||||||
|
var formatDateString = (str, defaultDateString = "") => {
|
||||||
|
const dateMatch = str.match(/\b(\d{4})-(\d{1,2})-(\d{1,2})\b/);
|
||||||
|
if (dateMatch === null) {
|
||||||
|
return defaultDateString;
|
||||||
|
}
|
||||||
|
const [, yearStr, monthStr, dayStr] = dateMatch;
|
||||||
|
return [yearStr, monthStr.padStart(2, "0"), dayStr.padStart(2, "0")].join("-");
|
||||||
|
};
|
||||||
|
var omit = (obj, ...keys) => {
|
||||||
|
const result = { ...obj };
|
||||||
|
for (const key of keys) {
|
||||||
|
delete result[key];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
var removeEndingSlash = (str) => str.endsWith("/") ? str.slice(0, -1) : str;
|
||||||
|
var removeLeadingSlash = (str) => str.startsWith("/") ? str.slice(1) : str;
|
||||||
|
var isFunction = (val) => typeof val === "function";
|
||||||
|
var isPlainObject = (val) => Object.prototype.toString.call(val) === "[object Object]";
|
||||||
|
var isString = (val) => typeof val === "string";
|
||||||
|
export {
|
||||||
|
dedupeHead,
|
||||||
|
ensureEndingSlash,
|
||||||
|
ensureLeadingSlash,
|
||||||
|
formatDateString,
|
||||||
|
inferRoutePath,
|
||||||
|
isFunction,
|
||||||
|
isLinkExternal,
|
||||||
|
isLinkHttp,
|
||||||
|
isLinkWithProtocol,
|
||||||
|
isPlainObject,
|
||||||
|
isString,
|
||||||
|
normalizeRoutePath,
|
||||||
|
omit,
|
||||||
|
removeEndingSlash,
|
||||||
|
removeLeadingSlash,
|
||||||
|
resolveHeadIdentifier,
|
||||||
|
resolveLocalePath,
|
||||||
|
resolveRoutePathFromUrl,
|
||||||
|
splitPath
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=@vuepress_shared.js.map
|
||||||
7
docs/.vuepress/.cache/deps/@vuepress_shared.js.map
Normal file
61
docs/.vuepress/.cache/deps/_metadata.json
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"hash": "dbfb4ebf",
|
||||||
|
"configHash": "f19bc6d0",
|
||||||
|
"lockfileHash": "3f2b08de",
|
||||||
|
"browserHash": "913e5fce",
|
||||||
|
"optimized": {
|
||||||
|
"@vue/devtools-api": {
|
||||||
|
"src": "../../../../node_modules/@vuepress/client/node_modules/@vue/devtools-api/dist/index.js",
|
||||||
|
"file": "@vue_devtools-api.js",
|
||||||
|
"fileHash": "edf09bec",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"@vuepress/shared": {
|
||||||
|
"src": "../../../../node_modules/@vuepress/shared/dist/index.js",
|
||||||
|
"file": "@vuepress_shared.js",
|
||||||
|
"fileHash": "699ebd3d",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
|
||||||
|
"file": "vue.js",
|
||||||
|
"fileHash": "c41e6cb4",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"vue-router": {
|
||||||
|
"src": "../../../../node_modules/vue-router/dist/vue-router.mjs",
|
||||||
|
"file": "vue-router.js",
|
||||||
|
"fileHash": "a66ef908",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"pinia": {
|
||||||
|
"src": "../../../../node_modules/pinia/dist/pinia.mjs",
|
||||||
|
"file": "pinia.js",
|
||||||
|
"fileHash": "ac20dbc2",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"axios": {
|
||||||
|
"src": "../../../../node_modules/axios/index.js",
|
||||||
|
"file": "axios.js",
|
||||||
|
"fileHash": "589b1bb8",
|
||||||
|
"needsInterop": false
|
||||||
|
},
|
||||||
|
"medium-zoom": {
|
||||||
|
"src": "../../../../node_modules/medium-zoom/dist/medium-zoom.esm.js",
|
||||||
|
"file": "medium-zoom.js",
|
||||||
|
"fileHash": "cee69026",
|
||||||
|
"needsInterop": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chunks": {
|
||||||
|
"chunk-IIQZHHRC": {
|
||||||
|
"file": "chunk-IIQZHHRC.js"
|
||||||
|
},
|
||||||
|
"chunk-S2UQT6C7": {
|
||||||
|
"file": "chunk-S2UQT6C7.js"
|
||||||
|
},
|
||||||
|
"chunk-PZ5AY32C": {
|
||||||
|
"file": "chunk-PZ5AY32C.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2639
docs/.vuepress/.cache/deps/axios.js
Normal file
7
docs/.vuepress/.cache/deps/axios.js.map
Normal file
213
docs/.vuepress/.cache/deps/chunk-IIQZHHRC.js
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
// node_modules/hookable/dist/index.mjs
|
||||||
|
function flatHooks(configHooks, hooks = {}, parentName) {
|
||||||
|
for (const key in configHooks) {
|
||||||
|
const subHook = configHooks[key];
|
||||||
|
const name = parentName ? `${parentName}:${key}` : key;
|
||||||
|
if (typeof subHook === "object" && subHook !== null) {
|
||||||
|
flatHooks(subHook, hooks, name);
|
||||||
|
} else if (typeof subHook === "function") {
|
||||||
|
hooks[name] = subHook;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hooks;
|
||||||
|
}
|
||||||
|
var defaultTask = { run: (function_) => function_() };
|
||||||
|
var _createTask = () => defaultTask;
|
||||||
|
var createTask = typeof console.createTask !== "undefined" ? console.createTask : _createTask;
|
||||||
|
function serialTaskCaller(hooks, args) {
|
||||||
|
const name = args.shift();
|
||||||
|
const task = createTask(name);
|
||||||
|
return hooks.reduce(
|
||||||
|
(promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),
|
||||||
|
Promise.resolve()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
function parallelTaskCaller(hooks, args) {
|
||||||
|
const name = args.shift();
|
||||||
|
const task = createTask(name);
|
||||||
|
return Promise.all(hooks.map((hook) => task.run(() => hook(...args))));
|
||||||
|
}
|
||||||
|
function callEachWith(callbacks, arg0) {
|
||||||
|
for (const callback of [...callbacks]) {
|
||||||
|
callback(arg0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var Hookable = class {
|
||||||
|
constructor() {
|
||||||
|
this._hooks = {};
|
||||||
|
this._before = void 0;
|
||||||
|
this._after = void 0;
|
||||||
|
this._deprecatedMessages = void 0;
|
||||||
|
this._deprecatedHooks = {};
|
||||||
|
this.hook = this.hook.bind(this);
|
||||||
|
this.callHook = this.callHook.bind(this);
|
||||||
|
this.callHookWith = this.callHookWith.bind(this);
|
||||||
|
}
|
||||||
|
hook(name, function_, options = {}) {
|
||||||
|
if (!name || typeof function_ !== "function") {
|
||||||
|
return () => {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const originalName = name;
|
||||||
|
let dep;
|
||||||
|
while (this._deprecatedHooks[name]) {
|
||||||
|
dep = this._deprecatedHooks[name];
|
||||||
|
name = dep.to;
|
||||||
|
}
|
||||||
|
if (dep && !options.allowDeprecated) {
|
||||||
|
let message = dep.message;
|
||||||
|
if (!message) {
|
||||||
|
message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : "");
|
||||||
|
}
|
||||||
|
if (!this._deprecatedMessages) {
|
||||||
|
this._deprecatedMessages = /* @__PURE__ */ new Set();
|
||||||
|
}
|
||||||
|
if (!this._deprecatedMessages.has(message)) {
|
||||||
|
console.warn(message);
|
||||||
|
this._deprecatedMessages.add(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!function_.name) {
|
||||||
|
try {
|
||||||
|
Object.defineProperty(function_, "name", {
|
||||||
|
get: () => "_" + name.replace(/\W+/g, "_") + "_hook_cb",
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._hooks[name] = this._hooks[name] || [];
|
||||||
|
this._hooks[name].push(function_);
|
||||||
|
return () => {
|
||||||
|
if (function_) {
|
||||||
|
this.removeHook(name, function_);
|
||||||
|
function_ = void 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
hookOnce(name, function_) {
|
||||||
|
let _unreg;
|
||||||
|
let _function = (...arguments_) => {
|
||||||
|
if (typeof _unreg === "function") {
|
||||||
|
_unreg();
|
||||||
|
}
|
||||||
|
_unreg = void 0;
|
||||||
|
_function = void 0;
|
||||||
|
return function_(...arguments_);
|
||||||
|
};
|
||||||
|
_unreg = this.hook(name, _function);
|
||||||
|
return _unreg;
|
||||||
|
}
|
||||||
|
removeHook(name, function_) {
|
||||||
|
if (this._hooks[name]) {
|
||||||
|
const index = this._hooks[name].indexOf(function_);
|
||||||
|
if (index !== -1) {
|
||||||
|
this._hooks[name].splice(index, 1);
|
||||||
|
}
|
||||||
|
if (this._hooks[name].length === 0) {
|
||||||
|
delete this._hooks[name];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deprecateHook(name, deprecated) {
|
||||||
|
this._deprecatedHooks[name] = typeof deprecated === "string" ? { to: deprecated } : deprecated;
|
||||||
|
const _hooks = this._hooks[name] || [];
|
||||||
|
delete this._hooks[name];
|
||||||
|
for (const hook of _hooks) {
|
||||||
|
this.hook(name, hook);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deprecateHooks(deprecatedHooks) {
|
||||||
|
Object.assign(this._deprecatedHooks, deprecatedHooks);
|
||||||
|
for (const name in deprecatedHooks) {
|
||||||
|
this.deprecateHook(name, deprecatedHooks[name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addHooks(configHooks) {
|
||||||
|
const hooks = flatHooks(configHooks);
|
||||||
|
const removeFns = Object.keys(hooks).map(
|
||||||
|
(key) => this.hook(key, hooks[key])
|
||||||
|
);
|
||||||
|
return () => {
|
||||||
|
for (const unreg of removeFns.splice(0, removeFns.length)) {
|
||||||
|
unreg();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
removeHooks(configHooks) {
|
||||||
|
const hooks = flatHooks(configHooks);
|
||||||
|
for (const key in hooks) {
|
||||||
|
this.removeHook(key, hooks[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
removeAllHooks() {
|
||||||
|
for (const key in this._hooks) {
|
||||||
|
delete this._hooks[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
callHook(name, ...arguments_) {
|
||||||
|
arguments_.unshift(name);
|
||||||
|
return this.callHookWith(serialTaskCaller, name, ...arguments_);
|
||||||
|
}
|
||||||
|
callHookParallel(name, ...arguments_) {
|
||||||
|
arguments_.unshift(name);
|
||||||
|
return this.callHookWith(parallelTaskCaller, name, ...arguments_);
|
||||||
|
}
|
||||||
|
callHookWith(caller, name, ...arguments_) {
|
||||||
|
const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;
|
||||||
|
if (this._before) {
|
||||||
|
callEachWith(this._before, event);
|
||||||
|
}
|
||||||
|
const result = caller(
|
||||||
|
name in this._hooks ? [...this._hooks[name]] : [],
|
||||||
|
arguments_
|
||||||
|
);
|
||||||
|
if (result instanceof Promise) {
|
||||||
|
return result.finally(() => {
|
||||||
|
if (this._after && event) {
|
||||||
|
callEachWith(this._after, event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (this._after && event) {
|
||||||
|
callEachWith(this._after, event);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
beforeEach(function_) {
|
||||||
|
this._before = this._before || [];
|
||||||
|
this._before.push(function_);
|
||||||
|
return () => {
|
||||||
|
if (this._before !== void 0) {
|
||||||
|
const index = this._before.indexOf(function_);
|
||||||
|
if (index !== -1) {
|
||||||
|
this._before.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
afterEach(function_) {
|
||||||
|
this._after = this._after || [];
|
||||||
|
this._after.push(function_);
|
||||||
|
return () => {
|
||||||
|
if (this._after !== void 0) {
|
||||||
|
const index = this._after.indexOf(function_);
|
||||||
|
if (index !== -1) {
|
||||||
|
this._after.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function createHooks() {
|
||||||
|
return new Hookable();
|
||||||
|
}
|
||||||
|
|
||||||
|
// node_modules/birpc/dist/index.mjs
|
||||||
|
var { clearTimeout, setTimeout } = globalThis;
|
||||||
|
var random = Math.random.bind(Math);
|
||||||
|
|
||||||
|
export {
|
||||||
|
createHooks
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=chunk-IIQZHHRC.js.map
|
||||||
7
docs/.vuepress/.cache/deps/chunk-IIQZHHRC.js.map
Normal file
9
docs/.vuepress/.cache/deps/chunk-PZ5AY32C.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
__export
|
||||||
|
};
|
||||||
7
docs/.vuepress/.cache/deps/chunk-PZ5AY32C.js.map
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": [],
|
||||||
|
"sourcesContent": [],
|
||||||
|
"mappings": "",
|
||||||
|
"names": []
|
||||||
|
}
|
||||||
12824
docs/.vuepress/.cache/deps/chunk-S2UQT6C7.js
Normal file
7
docs/.vuepress/.cache/deps/chunk-S2UQT6C7.js.map
Normal file
471
docs/.vuepress/.cache/deps/medium-zoom.js
Normal file
@ -0,0 +1,471 @@
|
|||||||
|
import "./chunk-PZ5AY32C.js";
|
||||||
|
|
||||||
|
// node_modules/medium-zoom/dist/medium-zoom.esm.js
|
||||||
|
var _extends = Object.assign || function(target) {
|
||||||
|
for (var i = 1; i < arguments.length; i++) {
|
||||||
|
var source = arguments[i];
|
||||||
|
for (var key in source) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
var isSupported = function isSupported2(node) {
|
||||||
|
return node.tagName === "IMG";
|
||||||
|
};
|
||||||
|
var isNodeList = function isNodeList2(selector) {
|
||||||
|
return NodeList.prototype.isPrototypeOf(selector);
|
||||||
|
};
|
||||||
|
var isNode = function isNode2(selector) {
|
||||||
|
return selector && selector.nodeType === 1;
|
||||||
|
};
|
||||||
|
var isSvg = function isSvg2(image) {
|
||||||
|
var source = image.currentSrc || image.src;
|
||||||
|
return source.substr(-4).toLowerCase() === ".svg";
|
||||||
|
};
|
||||||
|
var getImagesFromSelector = function getImagesFromSelector2(selector) {
|
||||||
|
try {
|
||||||
|
if (Array.isArray(selector)) {
|
||||||
|
return selector.filter(isSupported);
|
||||||
|
}
|
||||||
|
if (isNodeList(selector)) {
|
||||||
|
return [].slice.call(selector).filter(isSupported);
|
||||||
|
}
|
||||||
|
if (isNode(selector)) {
|
||||||
|
return [selector].filter(isSupported);
|
||||||
|
}
|
||||||
|
if (typeof selector === "string") {
|
||||||
|
return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
} catch (err) {
|
||||||
|
throw new TypeError("The provided selector is invalid.\nExpects a CSS selector, a Node element, a NodeList or an array.\nSee: https://github.com/francoischalifour/medium-zoom");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var createOverlay = function createOverlay2(background) {
|
||||||
|
var overlay = document.createElement("div");
|
||||||
|
overlay.classList.add("medium-zoom-overlay");
|
||||||
|
overlay.style.background = background;
|
||||||
|
return overlay;
|
||||||
|
};
|
||||||
|
var cloneTarget = function cloneTarget2(template) {
|
||||||
|
var _template$getBounding = template.getBoundingClientRect(), top = _template$getBounding.top, left = _template$getBounding.left, width = _template$getBounding.width, height = _template$getBounding.height;
|
||||||
|
var clone = template.cloneNode();
|
||||||
|
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||||
|
var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
|
||||||
|
clone.removeAttribute("id");
|
||||||
|
clone.style.position = "absolute";
|
||||||
|
clone.style.top = top + scrollTop + "px";
|
||||||
|
clone.style.left = left + scrollLeft + "px";
|
||||||
|
clone.style.width = width + "px";
|
||||||
|
clone.style.height = height + "px";
|
||||||
|
clone.style.transform = "";
|
||||||
|
return clone;
|
||||||
|
};
|
||||||
|
var createCustomEvent = function createCustomEvent2(type, params) {
|
||||||
|
var eventParams = _extends({
|
||||||
|
bubbles: false,
|
||||||
|
cancelable: false,
|
||||||
|
detail: void 0
|
||||||
|
}, params);
|
||||||
|
if (typeof window.CustomEvent === "function") {
|
||||||
|
return new CustomEvent(type, eventParams);
|
||||||
|
}
|
||||||
|
var customEvent = document.createEvent("CustomEvent");
|
||||||
|
customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);
|
||||||
|
return customEvent;
|
||||||
|
};
|
||||||
|
var mediumZoom = function mediumZoom2(selector) {
|
||||||
|
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
||||||
|
var Promise2 = window.Promise || function Promise3(fn) {
|
||||||
|
function noop() {
|
||||||
|
}
|
||||||
|
fn(noop, noop);
|
||||||
|
};
|
||||||
|
var _handleClick = function _handleClick2(event) {
|
||||||
|
var target = event.target;
|
||||||
|
if (target === overlay) {
|
||||||
|
close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (images.indexOf(target) === -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toggle({ target });
|
||||||
|
};
|
||||||
|
var _handleScroll = function _handleScroll2() {
|
||||||
|
if (isAnimating || !active.original) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||||
|
if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {
|
||||||
|
setTimeout(close, 150);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _handleKeyUp = function _handleKeyUp2(event) {
|
||||||
|
var key = event.key || event.keyCode;
|
||||||
|
if (key === "Escape" || key === "Esc" || key === 27) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var update = function update2() {
|
||||||
|
var options2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
||||||
|
var newOptions = options2;
|
||||||
|
if (options2.background) {
|
||||||
|
overlay.style.background = options2.background;
|
||||||
|
}
|
||||||
|
if (options2.container && options2.container instanceof Object) {
|
||||||
|
newOptions.container = _extends({}, zoomOptions.container, options2.container);
|
||||||
|
}
|
||||||
|
if (options2.template) {
|
||||||
|
var template = isNode(options2.template) ? options2.template : document.querySelector(options2.template);
|
||||||
|
newOptions.template = template;
|
||||||
|
}
|
||||||
|
zoomOptions = _extends({}, zoomOptions, newOptions);
|
||||||
|
images.forEach(function(image) {
|
||||||
|
image.dispatchEvent(createCustomEvent("medium-zoom:update", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
var clone = function clone2() {
|
||||||
|
var options2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
||||||
|
return mediumZoom2(_extends({}, zoomOptions, options2));
|
||||||
|
};
|
||||||
|
var attach = function attach2() {
|
||||||
|
for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {
|
||||||
|
selectors[_key] = arguments[_key];
|
||||||
|
}
|
||||||
|
var newImages = selectors.reduce(function(imagesAccumulator, currentSelector) {
|
||||||
|
return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
|
||||||
|
}, []);
|
||||||
|
newImages.filter(function(newImage) {
|
||||||
|
return images.indexOf(newImage) === -1;
|
||||||
|
}).forEach(function(newImage) {
|
||||||
|
images.push(newImage);
|
||||||
|
newImage.classList.add("medium-zoom-image");
|
||||||
|
});
|
||||||
|
eventListeners.forEach(function(_ref) {
|
||||||
|
var type = _ref.type, listener = _ref.listener, options2 = _ref.options;
|
||||||
|
newImages.forEach(function(image) {
|
||||||
|
image.addEventListener(type, listener, options2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
var detach = function detach2() {
|
||||||
|
for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||||||
|
selectors[_key2] = arguments[_key2];
|
||||||
|
}
|
||||||
|
if (active.zoomed) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
var imagesToDetach = selectors.length > 0 ? selectors.reduce(function(imagesAccumulator, currentSelector) {
|
||||||
|
return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
|
||||||
|
}, []) : images;
|
||||||
|
imagesToDetach.forEach(function(image) {
|
||||||
|
image.classList.remove("medium-zoom-image");
|
||||||
|
image.dispatchEvent(createCustomEvent("medium-zoom:detach", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
images = images.filter(function(image) {
|
||||||
|
return imagesToDetach.indexOf(image) === -1;
|
||||||
|
});
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
var on = function on2(type, listener) {
|
||||||
|
var options2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
||||||
|
images.forEach(function(image) {
|
||||||
|
image.addEventListener("medium-zoom:" + type, listener, options2);
|
||||||
|
});
|
||||||
|
eventListeners.push({ type: "medium-zoom:" + type, listener, options: options2 });
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
var off = function off2(type, listener) {
|
||||||
|
var options2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
||||||
|
images.forEach(function(image) {
|
||||||
|
image.removeEventListener("medium-zoom:" + type, listener, options2);
|
||||||
|
});
|
||||||
|
eventListeners = eventListeners.filter(function(eventListener) {
|
||||||
|
return !(eventListener.type === "medium-zoom:" + type && eventListener.listener.toString() === listener.toString());
|
||||||
|
});
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
var open = function open2() {
|
||||||
|
var _ref2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, target = _ref2.target;
|
||||||
|
var _animate = function _animate2() {
|
||||||
|
var container = {
|
||||||
|
width: document.documentElement.clientWidth,
|
||||||
|
height: document.documentElement.clientHeight,
|
||||||
|
left: 0,
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0
|
||||||
|
};
|
||||||
|
var viewportWidth = void 0;
|
||||||
|
var viewportHeight = void 0;
|
||||||
|
if (zoomOptions.container) {
|
||||||
|
if (zoomOptions.container instanceof Object) {
|
||||||
|
container = _extends({}, container, zoomOptions.container);
|
||||||
|
viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;
|
||||||
|
viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;
|
||||||
|
} else {
|
||||||
|
var zoomContainer = isNode(zoomOptions.container) ? zoomOptions.container : document.querySelector(zoomOptions.container);
|
||||||
|
var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(), _width = _zoomContainer$getBou.width, _height = _zoomContainer$getBou.height, _left = _zoomContainer$getBou.left, _top = _zoomContainer$getBou.top;
|
||||||
|
container = _extends({}, container, {
|
||||||
|
width: _width,
|
||||||
|
height: _height,
|
||||||
|
left: _left,
|
||||||
|
top: _top
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;
|
||||||
|
viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;
|
||||||
|
var zoomTarget = active.zoomedHd || active.original;
|
||||||
|
var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;
|
||||||
|
var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;
|
||||||
|
var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(), top = _zoomTarget$getBoundi.top, left = _zoomTarget$getBoundi.left, width = _zoomTarget$getBoundi.width, height = _zoomTarget$getBoundi.height;
|
||||||
|
var scaleX = Math.min(Math.max(width, naturalWidth), viewportWidth) / width;
|
||||||
|
var scaleY = Math.min(Math.max(height, naturalHeight), viewportHeight) / height;
|
||||||
|
var scale = Math.min(scaleX, scaleY);
|
||||||
|
var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;
|
||||||
|
var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;
|
||||||
|
var transform = "scale(" + scale + ") translate3d(" + translateX + "px, " + translateY + "px, 0)";
|
||||||
|
active.zoomed.style.transform = transform;
|
||||||
|
if (active.zoomedHd) {
|
||||||
|
active.zoomedHd.style.transform = transform;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return new Promise2(function(resolve) {
|
||||||
|
if (target && images.indexOf(target) === -1) {
|
||||||
|
resolve(zoom);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var _handleOpenEnd = function _handleOpenEnd2() {
|
||||||
|
isAnimating = false;
|
||||||
|
active.zoomed.removeEventListener("transitionend", _handleOpenEnd2);
|
||||||
|
active.original.dispatchEvent(createCustomEvent("medium-zoom:opened", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
resolve(zoom);
|
||||||
|
};
|
||||||
|
if (active.zoomed) {
|
||||||
|
resolve(zoom);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (target) {
|
||||||
|
active.original = target;
|
||||||
|
} else if (images.length > 0) {
|
||||||
|
var _images = images;
|
||||||
|
active.original = _images[0];
|
||||||
|
} else {
|
||||||
|
resolve(zoom);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
active.original.dispatchEvent(createCustomEvent("medium-zoom:open", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
|
||||||
|
isAnimating = true;
|
||||||
|
active.zoomed = cloneTarget(active.original);
|
||||||
|
document.body.appendChild(overlay);
|
||||||
|
if (zoomOptions.template) {
|
||||||
|
var template = isNode(zoomOptions.template) ? zoomOptions.template : document.querySelector(zoomOptions.template);
|
||||||
|
active.template = document.createElement("div");
|
||||||
|
active.template.appendChild(template.content.cloneNode(true));
|
||||||
|
document.body.appendChild(active.template);
|
||||||
|
}
|
||||||
|
if (active.original.parentElement && active.original.parentElement.tagName === "PICTURE" && active.original.currentSrc) {
|
||||||
|
active.zoomed.src = active.original.currentSrc;
|
||||||
|
}
|
||||||
|
document.body.appendChild(active.zoomed);
|
||||||
|
window.requestAnimationFrame(function() {
|
||||||
|
document.body.classList.add("medium-zoom--opened");
|
||||||
|
});
|
||||||
|
active.original.classList.add("medium-zoom-image--hidden");
|
||||||
|
active.zoomed.classList.add("medium-zoom-image--opened");
|
||||||
|
active.zoomed.addEventListener("click", close);
|
||||||
|
active.zoomed.addEventListener("transitionend", _handleOpenEnd);
|
||||||
|
if (active.original.getAttribute("data-zoom-src")) {
|
||||||
|
active.zoomedHd = active.zoomed.cloneNode();
|
||||||
|
active.zoomedHd.removeAttribute("srcset");
|
||||||
|
active.zoomedHd.removeAttribute("sizes");
|
||||||
|
active.zoomedHd.removeAttribute("loading");
|
||||||
|
active.zoomedHd.src = active.zoomed.getAttribute("data-zoom-src");
|
||||||
|
active.zoomedHd.onerror = function() {
|
||||||
|
clearInterval(getZoomTargetSize);
|
||||||
|
console.warn("Unable to reach the zoom image target " + active.zoomedHd.src);
|
||||||
|
active.zoomedHd = null;
|
||||||
|
_animate();
|
||||||
|
};
|
||||||
|
var getZoomTargetSize = setInterval(function() {
|
||||||
|
if (active.zoomedHd.complete) {
|
||||||
|
clearInterval(getZoomTargetSize);
|
||||||
|
active.zoomedHd.classList.add("medium-zoom-image--opened");
|
||||||
|
active.zoomedHd.addEventListener("click", close);
|
||||||
|
document.body.appendChild(active.zoomedHd);
|
||||||
|
_animate();
|
||||||
|
}
|
||||||
|
}, 10);
|
||||||
|
} else if (active.original.hasAttribute("srcset")) {
|
||||||
|
active.zoomedHd = active.zoomed.cloneNode();
|
||||||
|
active.zoomedHd.removeAttribute("sizes");
|
||||||
|
active.zoomedHd.removeAttribute("loading");
|
||||||
|
var loadEventListener = active.zoomedHd.addEventListener("load", function() {
|
||||||
|
active.zoomedHd.removeEventListener("load", loadEventListener);
|
||||||
|
active.zoomedHd.classList.add("medium-zoom-image--opened");
|
||||||
|
active.zoomedHd.addEventListener("click", close);
|
||||||
|
document.body.appendChild(active.zoomedHd);
|
||||||
|
_animate();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
_animate();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var close = function close2() {
|
||||||
|
return new Promise2(function(resolve) {
|
||||||
|
if (isAnimating || !active.original) {
|
||||||
|
resolve(zoom);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var _handleCloseEnd = function _handleCloseEnd2() {
|
||||||
|
active.original.classList.remove("medium-zoom-image--hidden");
|
||||||
|
document.body.removeChild(active.zoomed);
|
||||||
|
if (active.zoomedHd) {
|
||||||
|
document.body.removeChild(active.zoomedHd);
|
||||||
|
}
|
||||||
|
document.body.removeChild(overlay);
|
||||||
|
active.zoomed.classList.remove("medium-zoom-image--opened");
|
||||||
|
if (active.template) {
|
||||||
|
document.body.removeChild(active.template);
|
||||||
|
}
|
||||||
|
isAnimating = false;
|
||||||
|
active.zoomed.removeEventListener("transitionend", _handleCloseEnd2);
|
||||||
|
active.original.dispatchEvent(createCustomEvent("medium-zoom:closed", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
active.original = null;
|
||||||
|
active.zoomed = null;
|
||||||
|
active.zoomedHd = null;
|
||||||
|
active.template = null;
|
||||||
|
resolve(zoom);
|
||||||
|
};
|
||||||
|
isAnimating = true;
|
||||||
|
document.body.classList.remove("medium-zoom--opened");
|
||||||
|
active.zoomed.style.transform = "";
|
||||||
|
if (active.zoomedHd) {
|
||||||
|
active.zoomedHd.style.transform = "";
|
||||||
|
}
|
||||||
|
if (active.template) {
|
||||||
|
active.template.style.transition = "opacity 150ms";
|
||||||
|
active.template.style.opacity = 0;
|
||||||
|
}
|
||||||
|
active.original.dispatchEvent(createCustomEvent("medium-zoom:close", {
|
||||||
|
detail: { zoom }
|
||||||
|
}));
|
||||||
|
active.zoomed.addEventListener("transitionend", _handleCloseEnd);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var toggle = function toggle2() {
|
||||||
|
var _ref3 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, target = _ref3.target;
|
||||||
|
if (active.original) {
|
||||||
|
return close();
|
||||||
|
}
|
||||||
|
return open({ target });
|
||||||
|
};
|
||||||
|
var getOptions = function getOptions2() {
|
||||||
|
return zoomOptions;
|
||||||
|
};
|
||||||
|
var getImages = function getImages2() {
|
||||||
|
return images;
|
||||||
|
};
|
||||||
|
var getZoomedImage = function getZoomedImage2() {
|
||||||
|
return active.original;
|
||||||
|
};
|
||||||
|
var images = [];
|
||||||
|
var eventListeners = [];
|
||||||
|
var isAnimating = false;
|
||||||
|
var scrollTop = 0;
|
||||||
|
var zoomOptions = options;
|
||||||
|
var active = {
|
||||||
|
original: null,
|
||||||
|
zoomed: null,
|
||||||
|
zoomedHd: null,
|
||||||
|
template: null
|
||||||
|
// If the selector is omitted, it's replaced by the options
|
||||||
|
};
|
||||||
|
if (Object.prototype.toString.call(selector) === "[object Object]") {
|
||||||
|
zoomOptions = selector;
|
||||||
|
} else if (selector || typeof selector === "string") {
|
||||||
|
attach(selector);
|
||||||
|
}
|
||||||
|
zoomOptions = _extends({
|
||||||
|
margin: 0,
|
||||||
|
background: "#fff",
|
||||||
|
scrollOffset: 40,
|
||||||
|
container: null,
|
||||||
|
template: null
|
||||||
|
}, zoomOptions);
|
||||||
|
var overlay = createOverlay(zoomOptions.background);
|
||||||
|
document.addEventListener("click", _handleClick);
|
||||||
|
document.addEventListener("keyup", _handleKeyUp);
|
||||||
|
document.addEventListener("scroll", _handleScroll);
|
||||||
|
window.addEventListener("resize", close);
|
||||||
|
var zoom = {
|
||||||
|
open,
|
||||||
|
close,
|
||||||
|
toggle,
|
||||||
|
update,
|
||||||
|
clone,
|
||||||
|
attach,
|
||||||
|
detach,
|
||||||
|
on,
|
||||||
|
off,
|
||||||
|
getOptions,
|
||||||
|
getImages,
|
||||||
|
getZoomedImage
|
||||||
|
};
|
||||||
|
return zoom;
|
||||||
|
};
|
||||||
|
function styleInject(css2, ref) {
|
||||||
|
if (ref === void 0) ref = {};
|
||||||
|
var insertAt = ref.insertAt;
|
||||||
|
if (!css2 || typeof document === "undefined") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var head = document.head || document.getElementsByTagName("head")[0];
|
||||||
|
var style = document.createElement("style");
|
||||||
|
style.type = "text/css";
|
||||||
|
if (insertAt === "top") {
|
||||||
|
if (head.firstChild) {
|
||||||
|
head.insertBefore(style, head.firstChild);
|
||||||
|
} else {
|
||||||
|
head.appendChild(style);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
head.appendChild(style);
|
||||||
|
}
|
||||||
|
if (style.styleSheet) {
|
||||||
|
style.styleSheet.cssText = css2;
|
||||||
|
} else {
|
||||||
|
style.appendChild(document.createTextNode(css2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var css = ".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";
|
||||||
|
styleInject(css);
|
||||||
|
var medium_zoom_esm_default = mediumZoom;
|
||||||
|
export {
|
||||||
|
medium_zoom_esm_default as default
|
||||||
|
};
|
||||||
|
/*! Bundled license information:
|
||||||
|
|
||||||
|
medium-zoom/dist/medium-zoom.esm.js:
|
||||||
|
(*! medium-zoom 1.1.0 | MIT License | https://github.com/francoischalifour/medium-zoom *)
|
||||||
|
*/
|
||||||
|
//# sourceMappingURL=medium-zoom.js.map
|
||||||
7
docs/.vuepress/.cache/deps/medium-zoom.js.map
Normal file
3
docs/.vuepress/.cache/deps/package.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
5686
docs/.vuepress/.cache/deps/pinia.js
Normal file
7
docs/.vuepress/.cache/deps/pinia.js.map
Normal file
2396
docs/.vuepress/.cache/deps/vue-router.js
Normal file
7
docs/.vuepress/.cache/deps/vue-router.js.map
Normal file
347
docs/.vuepress/.cache/deps/vue.js
Normal file
@ -0,0 +1,347 @@
|
|||||||
|
import {
|
||||||
|
BaseTransition,
|
||||||
|
BaseTransitionPropsValidators,
|
||||||
|
Comment,
|
||||||
|
DeprecationTypes,
|
||||||
|
EffectScope,
|
||||||
|
ErrorCodes,
|
||||||
|
ErrorTypeStrings,
|
||||||
|
Fragment,
|
||||||
|
KeepAlive,
|
||||||
|
ReactiveEffect,
|
||||||
|
Static,
|
||||||
|
Suspense,
|
||||||
|
Teleport,
|
||||||
|
Text,
|
||||||
|
TrackOpTypes,
|
||||||
|
Transition,
|
||||||
|
TransitionGroup,
|
||||||
|
TriggerOpTypes,
|
||||||
|
VueElement,
|
||||||
|
assertNumber,
|
||||||
|
callWithAsyncErrorHandling,
|
||||||
|
callWithErrorHandling,
|
||||||
|
camelize,
|
||||||
|
capitalize,
|
||||||
|
cloneVNode,
|
||||||
|
compatUtils,
|
||||||
|
compile,
|
||||||
|
computed,
|
||||||
|
createApp,
|
||||||
|
createBaseVNode,
|
||||||
|
createBlock,
|
||||||
|
createCommentVNode,
|
||||||
|
createElementBlock,
|
||||||
|
createHydrationRenderer,
|
||||||
|
createPropsRestProxy,
|
||||||
|
createRenderer,
|
||||||
|
createSSRApp,
|
||||||
|
createSlots,
|
||||||
|
createStaticVNode,
|
||||||
|
createTextVNode,
|
||||||
|
createVNode,
|
||||||
|
customRef,
|
||||||
|
defineAsyncComponent,
|
||||||
|
defineComponent,
|
||||||
|
defineCustomElement,
|
||||||
|
defineEmits,
|
||||||
|
defineExpose,
|
||||||
|
defineModel,
|
||||||
|
defineOptions,
|
||||||
|
defineProps,
|
||||||
|
defineSSRCustomElement,
|
||||||
|
defineSlots,
|
||||||
|
devtools,
|
||||||
|
effect,
|
||||||
|
effectScope,
|
||||||
|
getCurrentInstance,
|
||||||
|
getCurrentScope,
|
||||||
|
getCurrentWatcher,
|
||||||
|
getTransitionRawChildren,
|
||||||
|
guardReactiveProps,
|
||||||
|
h,
|
||||||
|
handleError,
|
||||||
|
hasInjectionContext,
|
||||||
|
hydrate,
|
||||||
|
hydrateOnIdle,
|
||||||
|
hydrateOnInteraction,
|
||||||
|
hydrateOnMediaQuery,
|
||||||
|
hydrateOnVisible,
|
||||||
|
initCustomFormatter,
|
||||||
|
initDirectivesForSSR,
|
||||||
|
inject,
|
||||||
|
isMemoSame,
|
||||||
|
isProxy,
|
||||||
|
isReactive,
|
||||||
|
isReadonly,
|
||||||
|
isRef,
|
||||||
|
isRuntimeOnly,
|
||||||
|
isShallow,
|
||||||
|
isVNode,
|
||||||
|
markRaw,
|
||||||
|
mergeDefaults,
|
||||||
|
mergeModels,
|
||||||
|
mergeProps,
|
||||||
|
nextTick,
|
||||||
|
nodeOps,
|
||||||
|
normalizeClass,
|
||||||
|
normalizeProps,
|
||||||
|
normalizeStyle,
|
||||||
|
onActivated,
|
||||||
|
onBeforeMount,
|
||||||
|
onBeforeUnmount,
|
||||||
|
onBeforeUpdate,
|
||||||
|
onDeactivated,
|
||||||
|
onErrorCaptured,
|
||||||
|
onMounted,
|
||||||
|
onRenderTracked,
|
||||||
|
onRenderTriggered,
|
||||||
|
onScopeDispose,
|
||||||
|
onServerPrefetch,
|
||||||
|
onUnmounted,
|
||||||
|
onUpdated,
|
||||||
|
onWatcherCleanup,
|
||||||
|
openBlock,
|
||||||
|
patchProp,
|
||||||
|
popScopeId,
|
||||||
|
provide,
|
||||||
|
proxyRefs,
|
||||||
|
pushScopeId,
|
||||||
|
queuePostFlushCb,
|
||||||
|
reactive,
|
||||||
|
readonly,
|
||||||
|
ref,
|
||||||
|
registerRuntimeCompiler,
|
||||||
|
render,
|
||||||
|
renderList,
|
||||||
|
renderSlot,
|
||||||
|
resolveComponent,
|
||||||
|
resolveDirective,
|
||||||
|
resolveDynamicComponent,
|
||||||
|
resolveFilter,
|
||||||
|
resolveTransitionHooks,
|
||||||
|
setBlockTracking,
|
||||||
|
setDevtoolsHook,
|
||||||
|
setTransitionHooks,
|
||||||
|
shallowReactive,
|
||||||
|
shallowReadonly,
|
||||||
|
shallowRef,
|
||||||
|
ssrContextKey,
|
||||||
|
ssrUtils,
|
||||||
|
stop,
|
||||||
|
toDisplayString,
|
||||||
|
toHandlerKey,
|
||||||
|
toHandlers,
|
||||||
|
toRaw,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
transformVNodeArgs,
|
||||||
|
triggerRef,
|
||||||
|
unref,
|
||||||
|
useAttrs,
|
||||||
|
useCssModule,
|
||||||
|
useCssVars,
|
||||||
|
useHost,
|
||||||
|
useId,
|
||||||
|
useModel,
|
||||||
|
useSSRContext,
|
||||||
|
useShadowRoot,
|
||||||
|
useSlots,
|
||||||
|
useTemplateRef,
|
||||||
|
useTransitionState,
|
||||||
|
vModelCheckbox,
|
||||||
|
vModelDynamic,
|
||||||
|
vModelRadio,
|
||||||
|
vModelSelect,
|
||||||
|
vModelText,
|
||||||
|
vShow,
|
||||||
|
version,
|
||||||
|
warn,
|
||||||
|
watch,
|
||||||
|
watchEffect,
|
||||||
|
watchPostEffect,
|
||||||
|
watchSyncEffect,
|
||||||
|
withAsyncContext,
|
||||||
|
withCtx,
|
||||||
|
withDefaults,
|
||||||
|
withDirectives,
|
||||||
|
withKeys,
|
||||||
|
withMemo,
|
||||||
|
withModifiers,
|
||||||
|
withScopeId
|
||||||
|
} from "./chunk-S2UQT6C7.js";
|
||||||
|
import "./chunk-PZ5AY32C.js";
|
||||||
|
export {
|
||||||
|
BaseTransition,
|
||||||
|
BaseTransitionPropsValidators,
|
||||||
|
Comment,
|
||||||
|
DeprecationTypes,
|
||||||
|
EffectScope,
|
||||||
|
ErrorCodes,
|
||||||
|
ErrorTypeStrings,
|
||||||
|
Fragment,
|
||||||
|
KeepAlive,
|
||||||
|
ReactiveEffect,
|
||||||
|
Static,
|
||||||
|
Suspense,
|
||||||
|
Teleport,
|
||||||
|
Text,
|
||||||
|
TrackOpTypes,
|
||||||
|
Transition,
|
||||||
|
TransitionGroup,
|
||||||
|
TriggerOpTypes,
|
||||||
|
VueElement,
|
||||||
|
assertNumber,
|
||||||
|
callWithAsyncErrorHandling,
|
||||||
|
callWithErrorHandling,
|
||||||
|
camelize,
|
||||||
|
capitalize,
|
||||||
|
cloneVNode,
|
||||||
|
compatUtils,
|
||||||
|
compile,
|
||||||
|
computed,
|
||||||
|
createApp,
|
||||||
|
createBlock,
|
||||||
|
createCommentVNode,
|
||||||
|
createElementBlock,
|
||||||
|
createBaseVNode as createElementVNode,
|
||||||
|
createHydrationRenderer,
|
||||||
|
createPropsRestProxy,
|
||||||
|
createRenderer,
|
||||||
|
createSSRApp,
|
||||||
|
createSlots,
|
||||||
|
createStaticVNode,
|
||||||
|
createTextVNode,
|
||||||
|
createVNode,
|
||||||
|
customRef,
|
||||||
|
defineAsyncComponent,
|
||||||
|
defineComponent,
|
||||||
|
defineCustomElement,
|
||||||
|
defineEmits,
|
||||||
|
defineExpose,
|
||||||
|
defineModel,
|
||||||
|
defineOptions,
|
||||||
|
defineProps,
|
||||||
|
defineSSRCustomElement,
|
||||||
|
defineSlots,
|
||||||
|
devtools,
|
||||||
|
effect,
|
||||||
|
effectScope,
|
||||||
|
getCurrentInstance,
|
||||||
|
getCurrentScope,
|
||||||
|
getCurrentWatcher,
|
||||||
|
getTransitionRawChildren,
|
||||||
|
guardReactiveProps,
|
||||||
|
h,
|
||||||
|
handleError,
|
||||||
|
hasInjectionContext,
|
||||||
|
hydrate,
|
||||||
|
hydrateOnIdle,
|
||||||
|
hydrateOnInteraction,
|
||||||
|
hydrateOnMediaQuery,
|
||||||
|
hydrateOnVisible,
|
||||||
|
initCustomFormatter,
|
||||||
|
initDirectivesForSSR,
|
||||||
|
inject,
|
||||||
|
isMemoSame,
|
||||||
|
isProxy,
|
||||||
|
isReactive,
|
||||||
|
isReadonly,
|
||||||
|
isRef,
|
||||||
|
isRuntimeOnly,
|
||||||
|
isShallow,
|
||||||
|
isVNode,
|
||||||
|
markRaw,
|
||||||
|
mergeDefaults,
|
||||||
|
mergeModels,
|
||||||
|
mergeProps,
|
||||||
|
nextTick,
|
||||||
|
nodeOps,
|
||||||
|
normalizeClass,
|
||||||
|
normalizeProps,
|
||||||
|
normalizeStyle,
|
||||||
|
onActivated,
|
||||||
|
onBeforeMount,
|
||||||
|
onBeforeUnmount,
|
||||||
|
onBeforeUpdate,
|
||||||
|
onDeactivated,
|
||||||
|
onErrorCaptured,
|
||||||
|
onMounted,
|
||||||
|
onRenderTracked,
|
||||||
|
onRenderTriggered,
|
||||||
|
onScopeDispose,
|
||||||
|
onServerPrefetch,
|
||||||
|
onUnmounted,
|
||||||
|
onUpdated,
|
||||||
|
onWatcherCleanup,
|
||||||
|
openBlock,
|
||||||
|
patchProp,
|
||||||
|
popScopeId,
|
||||||
|
provide,
|
||||||
|
proxyRefs,
|
||||||
|
pushScopeId,
|
||||||
|
queuePostFlushCb,
|
||||||
|
reactive,
|
||||||
|
readonly,
|
||||||
|
ref,
|
||||||
|
registerRuntimeCompiler,
|
||||||
|
render,
|
||||||
|
renderList,
|
||||||
|
renderSlot,
|
||||||
|
resolveComponent,
|
||||||
|
resolveDirective,
|
||||||
|
resolveDynamicComponent,
|
||||||
|
resolveFilter,
|
||||||
|
resolveTransitionHooks,
|
||||||
|
setBlockTracking,
|
||||||
|
setDevtoolsHook,
|
||||||
|
setTransitionHooks,
|
||||||
|
shallowReactive,
|
||||||
|
shallowReadonly,
|
||||||
|
shallowRef,
|
||||||
|
ssrContextKey,
|
||||||
|
ssrUtils,
|
||||||
|
stop,
|
||||||
|
toDisplayString,
|
||||||
|
toHandlerKey,
|
||||||
|
toHandlers,
|
||||||
|
toRaw,
|
||||||
|
toRef,
|
||||||
|
toRefs,
|
||||||
|
toValue,
|
||||||
|
transformVNodeArgs,
|
||||||
|
triggerRef,
|
||||||
|
unref,
|
||||||
|
useAttrs,
|
||||||
|
useCssModule,
|
||||||
|
useCssVars,
|
||||||
|
useHost,
|
||||||
|
useId,
|
||||||
|
useModel,
|
||||||
|
useSSRContext,
|
||||||
|
useShadowRoot,
|
||||||
|
useSlots,
|
||||||
|
useTemplateRef,
|
||||||
|
useTransitionState,
|
||||||
|
vModelCheckbox,
|
||||||
|
vModelDynamic,
|
||||||
|
vModelRadio,
|
||||||
|
vModelSelect,
|
||||||
|
vModelText,
|
||||||
|
vShow,
|
||||||
|
version,
|
||||||
|
warn,
|
||||||
|
watch,
|
||||||
|
watchEffect,
|
||||||
|
watchPostEffect,
|
||||||
|
watchSyncEffect,
|
||||||
|
withAsyncContext,
|
||||||
|
withCtx,
|
||||||
|
withDefaults,
|
||||||
|
withDirectives,
|
||||||
|
withKeys,
|
||||||
|
withMemo,
|
||||||
|
withModifiers,
|
||||||
|
withScopeId
|
||||||
|
};
|
||||||
7
docs/.vuepress/.cache/deps/vue.js.map
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"sources": [],
|
||||||
|
"sourcesContent": [],
|
||||||
|
"mappings": "",
|
||||||
|
"names": []
|
||||||
|
}
|
||||||
9
docs/.vuepress/.temp/git/config.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { GitContributors } from "D:/xue/dma_handbook/node_modules/@vuepress/plugin-git/lib/client/components/GitContributors.js";
|
||||||
|
import { GitChangelog } from "D:/xue/dma_handbook/node_modules/@vuepress/plugin-git/lib/client/components/GitChangelog.js";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
enhance: ({ app }) => {
|
||||||
|
app.component("GitContributors", GitContributors);
|
||||||
|
app.component("GitChangelog", GitChangelog);
|
||||||
|
},
|
||||||
|
};
|
||||||
29
docs/.vuepress/.temp/internal/clientConfigs.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import * as clientConfig0 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-active-header-links/lib/client/config.js'
|
||||||
|
import * as clientConfig1 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-back-to-top/lib/client/config.js'
|
||||||
|
import * as clientConfig2 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-copy-code/lib/client/config.js'
|
||||||
|
import * as clientConfig3 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-markdown-hint/lib/client/config.js'
|
||||||
|
import * as clientConfig4 from 'D:/xue/dma_handbook/docs/.vuepress/.temp/git/config.js'
|
||||||
|
import * as clientConfig5 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-medium-zoom/lib/client/config.js'
|
||||||
|
import * as clientConfig6 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-nprogress/lib/client/config.js'
|
||||||
|
import * as clientConfig7 from 'D:/xue/dma_handbook/docs/.vuepress/.temp/prismjs/config.js'
|
||||||
|
import * as clientConfig8 from 'D:/xue/dma_handbook/docs/.vuepress/.temp/markdown-tab/config.js'
|
||||||
|
import * as clientConfig9 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-theme-data/lib/client/config.js'
|
||||||
|
import * as clientConfig10 from 'D:/xue/dma_handbook/node_modules/@vuepress/theme-default/lib/client/config.js'
|
||||||
|
import * as clientConfig11 from 'D:/xue/dma_handbook/node_modules/@vuepress/plugin-search/lib/client/config.js'
|
||||||
|
import * as clientConfig12 from 'D:/xue/dma_handbook/docs/.vuepress/client.js'
|
||||||
|
|
||||||
|
export const clientConfigs = [
|
||||||
|
clientConfig0,
|
||||||
|
clientConfig1,
|
||||||
|
clientConfig2,
|
||||||
|
clientConfig3,
|
||||||
|
clientConfig4,
|
||||||
|
clientConfig5,
|
||||||
|
clientConfig6,
|
||||||
|
clientConfig7,
|
||||||
|
clientConfig8,
|
||||||
|
clientConfig9,
|
||||||
|
clientConfig10,
|
||||||
|
clientConfig11,
|
||||||
|
clientConfig12,
|
||||||
|
].map((m) => m.default).filter(Boolean)
|
||||||
23
docs/.vuepress/.temp/internal/routes.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
export const redirects = JSON.parse("{}")
|
||||||
|
|
||||||
|
export const routes = Object.fromEntries([
|
||||||
|
["/login.html", { loader: () => import(/* webpackChunkName: "login.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/login.html.js"), meta: {"title":"DMA手册 - 登录"} }],
|
||||||
|
["/", { loader: () => import(/* webpackChunkName: "index.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/index.html.js"), meta: {"title":"首页"} }],
|
||||||
|
["/posts/administrative.html", { loader: () => import(/* webpackChunkName: "posts_administrative.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/administrative.html.js"), meta: {"title":"行政"} }],
|
||||||
|
["/posts/agent.html", { loader: () => import(/* webpackChunkName: "posts_agent.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/agent.html.js"), meta: {"title":"代理商添加方式说明"} }],
|
||||||
|
["/posts/appCorrelation.html", { loader: () => import(/* webpackChunkName: "posts_appCorrelation.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/appCorrelation.html.js"), meta: {"title":""} }],
|
||||||
|
["/posts/assistantCoach.html", { loader: () => import(/* webpackChunkName: "posts_assistantCoach.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/assistantCoach.html.js"), meta: {"title":"副教练"} }],
|
||||||
|
["/posts/behaviorRecord.html", { loader: () => import(/* webpackChunkName: "posts_behaviorRecord.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/behaviorRecord.html.js"), meta: {"title":"服务人员行为记录"} }],
|
||||||
|
["/posts/changelog.html", { loader: () => import(/* webpackChunkName: "posts_changelog.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/changelog.html.js"), meta: {"title":"更新日志"} }],
|
||||||
|
["/posts/changelogV2.html", { loader: () => import(/* webpackChunkName: "posts_changelogV2.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/changelogV2.html.js"), meta: {"title":"更新日志"} }],
|
||||||
|
["/posts/chiefCoach.html", { loader: () => import(/* webpackChunkName: "posts_chiefCoach.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/chiefCoach.html.js"), meta: {"title":"主教练"} }],
|
||||||
|
["/posts/DMAModule.html", { loader: () => import(/* webpackChunkName: "posts_DMAModule.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/DMAModule.html.js"), meta: {"title":""} }],
|
||||||
|
["/posts/examReservation.html", { loader: () => import(/* webpackChunkName: "posts_examReservation.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/examReservation.html.js"), meta: {"title":"🧾 健康DMA人体驾照考试报名操作指南"} }],
|
||||||
|
["/posts/helpCenter.html", { loader: () => import(/* webpackChunkName: "posts_helpCenter.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/helpCenter.html.js"), meta: {"title":"常见问题"} }],
|
||||||
|
["/posts/overview.html", { loader: () => import(/* webpackChunkName: "posts_overview.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/overview.html.js"), meta: {"title":"核心操作流程"} }],
|
||||||
|
["/posts/service.html", { loader: () => import(/* webpackChunkName: "posts_service.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/service.html.js"), meta: {"title":"客服"} }],
|
||||||
|
["/posts/shareBenefit.html", { loader: () => import(/* webpackChunkName: "posts_shareBenefit.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/shareBenefit.html.js"), meta: {"title":"分润提现操作说明"} }],
|
||||||
|
["/posts/teacher.html", { loader: () => import(/* webpackChunkName: "posts_teacher.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/teacher.html.js"), meta: {"title":"健康管理师"} }],
|
||||||
|
["/posts/userServiceProcess.html", { loader: () => import(/* webpackChunkName: "posts_userServiceProcess.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/userServiceProcess.html.js"), meta: {"title":"用户服务流程说明"} }],
|
||||||
|
["/404.html", { loader: () => import(/* webpackChunkName: "404.html" */"D:/xue/dma_handbook/docs/.vuepress/.temp/pages/404.html.js"), meta: {"title":""} }],
|
||||||
|
]);
|
||||||
1732
docs/.vuepress/.temp/internal/searchIndex.js
Normal file
1
docs/.vuepress/.temp/internal/siteData.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const siteData = JSON.parse("{\"base\":\"/dma_handbook/\",\"lang\":\"zh-CN\",\"title\":\"DMA服务人员服务操作手册\",\"description\":\"DMA服务人员服务操作手册\",\"head\":[[\"meta\",{\"name\":\"og:type\",\"content\":\"website\"}],[\"meta\",{\"property\":\"og:title\",\"content\":\"DMA服务人员操作手册\"}],[\"meta\",{\"name\":\"description\",\"content\":\"DMA服务操作手册\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"DMA服务全流程操作指南\"}],[\"meta\",{\"property\":\"og:image\",\"content\":\"https://images.health.ufutx.com/202503/12/1f227399ffc2ddbf6c58eafa80627d19.png?v=1774594211470\"}],[\"link\",{\"rel\":\"icon\",\"href\":\"https://images.health.ufutx.com/202503/12/1f227399ffc2ddbf6c58eafa80627d19.png?v=1774594211470\"}]],\"locales\":{}}")
|
||||||
1
docs/.vuepress/.temp/internal/themeData.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const themeData = JSON.parse("{\"navbar\":[\"/\",{\"text\":\"核心操作\",\"link\":\"/posts/overview\",\"activeMatch\":\"^/posts/overview\"},{\"text\":\"角色文档\",\"children\":[{\"text\":\"主教练\",\"link\":\"/posts/chiefCoach.html\"},{\"text\":\"副教练\",\"link\":\"/posts/assistantCoach.html\"},{\"text\":\"客服\",\"link\":\"/posts/service.html\"},{\"text\":\"健康管理师\",\"link\":\"/posts/teacher.html\"}]},{\"text\":\"操作指南\",\"children\":[{\"text\":\"分润提现\",\"link\":\"/posts/shareBenefit\"},{\"text\":\"APP相关\",\"link\":\"/posts/appCorrelation\"},{\"text\":\"DMA模块\",\"link\":\"/posts/DMAModule\"},{\"text\":\"考试预约\",\"link\":\"/posts/examReservation\"},{\"text\":\"代理商\",\"link\":\"/posts/agent\"},{\"text\":\"用户服务流程\",\"link\":\"/posts/userServiceProcess\"},{\"text\":\"行为记录\",\"link\":\"/posts/behaviorRecord\"}]},{\"text\":\"常见问题\",\"link\":\"/posts/helpCenter\"},{\"text\":\"更新日志\",\"link\":\"/posts/changelogV2\"}],\"locales\":{\"/\":{\"selectLanguageName\":\"English\"}},\"colorMode\":\"auto\",\"colorModeSwitch\":true,\"logo\":null,\"repo\":null,\"selectLanguageText\":\"Languages\",\"selectLanguageAriaLabel\":\"Select language\",\"sidebarDepth\":2,\"editLink\":true,\"editLinkText\":\"Edit this page\",\"lastUpdated\":true,\"contributors\":true,\"contributorsText\":\"Contributors\",\"notFound\":[\"There's nothing here.\",\"How did we get here?\",\"That's a Four-Oh-Four.\",\"Looks like we've got some broken links.\"],\"backToHome\":\"Take me home\",\"openInNewWindow\":\"open in new window\",\"toggleColorMode\":\"toggle color mode\",\"toggleSidebar\":\"toggle sidebar\"}")
|
||||||
10
docs/.vuepress/.temp/markdown-tab/config.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { CodeTabs } from "D:/xue/dma_handbook/node_modules/@vuepress/plugin-markdown-tab/lib/client/components/CodeTabs.js";
|
||||||
|
import { Tabs } from "D:/xue/dma_handbook/node_modules/@vuepress/plugin-markdown-tab/lib/client/components/Tabs.js";
|
||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-markdown-tab/lib/client/styles/vars.css";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
enhance: ({ app }) => {
|
||||||
|
app.component("CodeTabs", CodeTabs);
|
||||||
|
app.component("Tabs", Tabs);
|
||||||
|
},
|
||||||
|
};
|
||||||
3
docs/.vuepress/.temp/pages/404.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/404.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/404.html\",\"title\":\"\",\"lang\":\"zh-CN\",\"frontmatter\":{\"layout\":\"NotFound\"},\"git\":{},\"filePathRelative\":null}")
|
||||||
|
export { comp, data }
|
||||||
4
docs/.vuepress/.temp/pages/404.html.vue
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<template><div><p>404 Not Found</p>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/index.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/index.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/\",\"title\":\"首页\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1774516081000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":6}],\"changelog\":[{\"hash\":\"a7258d9980759323c9eba6e62638cab1c17523f3\",\"time\":1774516081000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"长图裁剪和查看\"},{\"hash\":\"118aab4f3bb5c4790ce2ecfc3c5897cfd7146161\",\"time\":1770258280000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加登录功能和权限验证\"},{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"169908d04e7a4ef15ffea1d8ca58004c9c7451c4\",\"time\":1762222814000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"7799842e4c8bfd3bbd24d9cbc89c8ac4c28c918b\",\"time\":1761103662000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"README.md\"}")
|
||||||
|
export { comp, data }
|
||||||
254
docs/.vuepress/.temp/pages/index.html.vue
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
<template><div><h1 id="首页" tabindex="-1"><a class="header-anchor" href="#首页"><span>首页</span></a></h1>
|
||||||
|
<h2 id="一、手册目的" tabindex="-1"><a class="header-anchor" href="#一、手册目的"><span>一、手册目的</span></a></h2>
|
||||||
|
<p>本手册旨在明确 DMA 服务全流程中各岗位服务人员的工作规范、操作流程及注意事项,确保服务高效、有序开展,提升客户满意度与服务质量。</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/13436ad291528078f59fc005904f2960.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="二、适用范围" tabindex="-1"><a class="header-anchor" href="#二、适用范围"><span>二、适用范围</span></a></h2>
|
||||||
|
<p>本手册适用于参与 DMA 服务的行政、客服、健康管理师、系统审核员、主教练、副教练等所有服务人员。</p>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/53298d3707ebe157d633384bafe7462d.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="三、核心原则" tabindex="-1"><a class="header-anchor" href="#三、核心原则"><span>三、核心原则</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>客户至上:以客户需求为导向,积极响应客户诉求,提供优质服务。</li>
|
||||||
|
<li>流程合规:严格按照既定流程操作,确保各项工作符合规范,保障服务质量与数据准确性。</li>
|
||||||
|
<li>高效协同:各岗位人员需密切配合,及时沟通,确保流程顺畅衔接。</li>
|
||||||
|
<li>信息保密:妥善保管客户信息,不得泄露客户隐私及服务相关敏感数据。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/2d20f6d13e4f21a04ee802b0d03f5c38.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="四、岗位权责" tabindex="-1"><a class="header-anchor" href="#四、岗位权责"><span>四、岗位权责</span></a></h2>
|
||||||
|
<h3 id="一-行政" tabindex="-1"><a class="header-anchor" href="#一-行政"><span>(一)行政</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>主要职责:负责合同相关处理、服务团队进群邀请、配货物流跟进及发货确认记录等工作。</li>
|
||||||
|
<li>关键权限:可在后台系统进行合同状态确认、发起服务团队进群邀请、录入物流信息等操作。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/c57324096c9f64637ba121c38b4e82f7.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="二-客服" tabindex="-1"><a class="header-anchor" href="#二-客服"><span>(二)客服</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>主要职责:负责健康档案引导与跟进、审核及闭环处理、方案与收货衔接、收货状态跟进等工作。</li>
|
||||||
|
<li>关键权限:可审核健康档案、与客户沟通确认收货方式、跟进客户收货状态等。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/c898f51a24c2247a7ebe4932ea56e2f9.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="三-健康管理师" tabindex="-1"><a class="header-anchor" href="#三-健康管理师"><span>(三)健康管理师</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>主要职责:深度解读客户健康档案、健康评估表及相关健康数据,结合 AI 健康方案工具,制定个性化、可落地的健康方案(涵盖饮食、运动、作息、心理等维度);</li>
|
||||||
|
<li>关键权限:查看客户健康档案,在系统中提交制定的健康方案。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/9ef373b5336e95fd0fa1221b8b578391.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="四-系统审核员" tabindex="-1"><a class="header-anchor" href="#四-系统审核员"><span>(四)系统审核员</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>主要职责:审核客户提交的方案前健康评估表。</li>
|
||||||
|
<li>关键权限:对健康评估表进行审核,反馈审核结果。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/0823f09de9e474fc4735cdb1f187a51d.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="五-主教练、副教练" tabindex="-1"><a class="header-anchor" href="#五-主教练、副教练"><span>(五)主教练、副教练</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>主要职责:查看客户信息,协助开展健康方案执行相关工作。</li>
|
||||||
|
<li>关键权限:在客服确认健康信息完善后,可查看客户信息。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/fbd3591f80c55c2404822f198df93d9a.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="五、服务规范与沟通话术" tabindex="-1"><a class="header-anchor" href="#五、服务规范与沟通话术"><span>五、服务规范与沟通话术</span></a></h2>
|
||||||
|
<h3 id="一-仪容仪表规范" tabindex="-1"><a class="header-anchor" href="#一-仪容仪表规范"><span>(一)仪容仪表规范</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>着装整洁、得体,保持良好精神面貌。</li>
|
||||||
|
<li>言行举止文明、礼貌,态度热情、诚恳。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/f2e3617bc15333e8d9642b539ee67f0d.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="二-沟通话术规范" tabindex="-1"><a class="header-anchor" href="#二-沟通话术规范"><span>(二)沟通话术规范</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>首次接待客户:“您好,我是您的专属服务人员 [姓名],很高兴为您提供 DMA 健康服务,有任何问题都可以找我哦~”</li>
|
||||||
|
<li>处理客户投诉:“非常抱歉给您带来不好的体验,您先消消气,能详细说一下具体情况吗?我会尽快为您解决。”</li>
|
||||||
|
<li>结束服务沟通:“感谢您选择我们的 DMA 健康服务,后续有任何健康相关的问题,欢迎随时联系我们,祝您健康愉快~”</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/38ea89ce387c01a1133e1e98b987eccd.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="六、系统工具使用说明" tabindex="-1"><a class="header-anchor" href="#六、系统工具使用说明"><span>六、系统工具使用说明</span></a></h2>
|
||||||
|
<h3 id="一-后台系统常用功能" tabindex="-1"><a class="header-anchor" href="#一-后台系统常用功能"><span>(一)后台系统常用功能</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>订单管理模块:查看订单信息、确认合同类型等。</li>
|
||||||
|
<li>合同管理模块:处理合同签署、查看合同状态等。</li>
|
||||||
|
<li>客户群聊管理模块:邀请成员进群、查看群聊记录等。</li>
|
||||||
|
<li>健康档案管理模块:审核健康档案、查看健康信息等。</li>
|
||||||
|
<li>方案设置模块:制定、提交健康方案等。</li>
|
||||||
|
<li>配送管理模块:确认收货方式、录入配送信息等。</li>
|
||||||
|
<li>物流管理模块:录入快递单号、跟踪物流信息等。</li>
|
||||||
|
<li>发货记录模块:上传发货照片、确认发货等。</li>
|
||||||
|
<li>收货管理模块:跟进收货状态、处理收货确认等。</li>
|
||||||
|
<li>方案管理模块:标记方案状态、转发调查问卷等。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="/images/home/后台系统常用功能.jpg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="二-群聊管理工具使用" tabindex="-1"><a class="header-anchor" href="#二-群聊管理工具使用"><span>(二)群聊管理工具使用</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>发送消息:在群聊界面输入文字、图片、链接等内容,点击发送即可。</li>
|
||||||
|
<li>查看已读状态:发送消息后,可查看群成员的已读情况。</li>
|
||||||
|
<li>邀请成员:通过后台系统群聊管理模块或群聊界面的邀请功能添加成员。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/05646d55936cdc15a47d4f62dcb3269a.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="七、考核与反馈机制" tabindex="-1"><a class="header-anchor" href="#七、考核与反馈机制"><span>七、考核与反馈机制</span></a></h2>
|
||||||
|
<h3 id="一-考核指标" tabindex="-1"><a class="header-anchor" href="#一-考核指标"><span>(一)考核指标</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>流程执行时效性:各环节操作是否在规定时间内完成。</li>
|
||||||
|
<li>工作准确性:如合同类型确认、健康档案审核等是否准确无误。</li>
|
||||||
|
<li>客户满意度:通过客户调查问卷、投诉情况等进行评估。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/cdee4f1644682551bd7a9ae744213301.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="二-反馈渠道" tabindex="-1"><a class="header-anchor" href="#二-反馈渠道"><span>(二)反馈渠道</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>内部反馈:服务人员在工作中遇到问题可向直属上级反馈。</li>
|
||||||
|
<li>客户反馈:客户可通过群聊、客服电话等渠道反馈服务问题。</li>
|
||||||
|
</ol>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202512/23/47eb804b453608113442bebfc525cdf7.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="八、更新日志" tabindex="-1"><a class="header-anchor" href="#八、更新日志"><span>八、更新日志</span></a></h2>
|
||||||
|
<p>为了方便服务人员了解手册的最新更新内容,我们提供了详细的更新日志。您可以通过以下方式查看:</p>
|
||||||
|
<ol>
|
||||||
|
<li>点击顶部导航栏中的「更新日志」选项</li>
|
||||||
|
<li>直接访问 <RouteLink to="/posts/changelog.html">更新日志页面</RouteLink></li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="附录-流程节点时效汇总表" tabindex="-1"><a class="header-anchor" href="#附录-流程节点时效汇总表"><span>附录:流程节点时效汇总表</span></a></h2>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程节点(版本:2026/3/25)</td>
|
||||||
|
<td>时效要求</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政确认合同类型</td>
|
||||||
|
<td>收到支付成功通知后 1 个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政邀请服务团队进群</td>
|
||||||
|
<td>合同类型确认后 2 小时内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服确认用户使用电子或纸质版本;<br>客服跟进电子版,用户端合同签署</td>
|
||||||
|
<td>电子版合同,3 个工作日内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政代表公司端签署合同</td>
|
||||||
|
<td>收到 “待公司签署” 通知后 1 个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政跟进线下纸质合同:附上操作指引、邮寄、签署</td>
|
||||||
|
<td>客服通知合同版本后 1 个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>审核团队审核《用户方案前问卷》</td>
|
||||||
|
<td>1个工作日内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服审核健康档案是否完善</td>
|
||||||
|
<td>收到【健康档案待确认】通知后 1 个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>健康管理师制定健康方案</td>
|
||||||
|
<td>收到 “健康档案已确认” 通知后 3 个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服确认收货方式(自提或是邮寄)</td>
|
||||||
|
<td>收到方案完成通知后 1 小时内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政配货(手环统一配送测试版本)</td>
|
||||||
|
<td>收到配送发货通知后1个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>行政发货确认与记录</td>
|
||||||
|
<td>发货后 1 小时内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服跟进收货状态(首次提醒)<br>服务群通知用户:包裹发出,预计到达的大约时间。</td>
|
||||||
|
<td>系统触发 “已发货” 通知后 24 小时内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服跟进收货状态(超期提醒)</td>
|
||||||
|
<td>超 48 小时未确认收货时</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练核对用户包裹物料是否齐全</td>
|
||||||
|
<td>方案启动前1个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练填写方案启动和结束时间</td>
|
||||||
|
<td>用户确认方案启动时间后1个工作日内</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服/主教练/副教练 标记方案开始</td>
|
||||||
|
<td>用户方案开启前1个工作日至当日</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>方案前视频沟通(第一次)<br>副教练发起会议;<br>主/副教练/客服:参会;</td>
|
||||||
|
<td>系统通知后 24 小时内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练跟进体脂称使用指导</td>
|
||||||
|
<td>客户收货确认后 24 小时内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练跟进手环使用指导 <br>建议:收到后先充电10小时以上,再操作绑定连接</td>
|
||||||
|
<td>客户收货确认后 24 小时内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练每日餐单发送与解读</td>
|
||||||
|
<td>每日 18:00 前完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>方案中视频沟通(第二次)<br>副教练发起会议;<br>主/副教练/客服:参会;</td>
|
||||||
|
<td>方案第三周结束后 24 小时内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>主教练指引:用户是否需要做身体复检?<br>当不需要时,主教练需在内部沟通群留言</td>
|
||||||
|
<td>第 49 天 方案后第三次视频会议沟通前</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>方案后视频沟通(第三次)<br>副教练发起会议;<br>主/副教练/客服:参会;</td>
|
||||||
|
<td>方案结束的最后一天(第49天)完成,教练团队需要提前5分钟进入会议室,先内部沟通会议内容与用户是否需要去体检</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>方案后毕业结束语<br>第一发送人:副教练(巩固期生活指导)<br>第二发送人:客服(邀请填写系统问卷及上传照片)<br>第三发送人:主教练(查缺补漏)</td>
|
||||||
|
<td>第 50 天 12:00 前完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服处理方案结束事宜(教练团队一起跟进用户完成)<br>1、邀请用户填写《方案后用户调查问卷》<br>2、邀请用户上传《方案后身体照片》链接</td>
|
||||||
|
<td>第 50 天 11:00 前完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客服/主教练/副教练,标记方案结束</td>
|
||||||
|
<td>用户方案结束第50天</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>主/副教练/客服:填写内部教练复盘服务评价表</td>
|
||||||
|
<td>方案结束后 3 个工作日内完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>主/副教练/客服:第一次对用户做方案后评估表</td>
|
||||||
|
<td>方案结束后第 3 天 18:00 前完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>系统通知,提醒主教练和副教练提醒用户每周做清洁日</td>
|
||||||
|
<td>周日晚上20:00点</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>系统通知,提醒主教练和副教练提醒用户做复检</td>
|
||||||
|
<td>方案结束后第 23、26、29 天发送</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>主教练和副教练根据实际情况,在服务群提醒用户做复检并上传报告</td>
|
||||||
|
<td>副教练/主教练:在第28天在服务群里提醒用户做体检</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>主/副教练/客服:第二次对用户做方案后评估表</td>
|
||||||
|
<td>方案结束后第 60 天 18:00 前完成</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>副教练:方案后巩固期,不定时问候</td>
|
||||||
|
<td>方案结束后3个月内 <code v-pre> </code></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div v-auth="'coach'">
|
||||||
|
</div>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/login.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/login.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/login.html\",\"title\":\"DMA手册 - 登录\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"DMA手册 - 登录\",\"layout\":\"LoginLayout\"},\"git\":{\"updatedTime\":1770258280000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":1}],\"changelog\":[{\"hash\":\"118aab4f3bb5c4790ce2ecfc3c5897cfd7146161\",\"time\":1770258280000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加登录功能和权限验证\"}]},\"filePathRelative\":\"login.md\"}")
|
||||||
|
export { comp, data }
|
||||||
3
docs/.vuepress/.temp/pages/login.html.vue
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<template><div></div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/DMAModule.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/DMAModule.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/DMAModule.html\",\"title\":\"\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1764209898000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":2}],\"changelog\":[{\"hash\":\"0d2f55f94a3eee13f09e8cc2505c98c31ef6437a\",\"time\":1764209898000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"6e27dcce01edcc47b1f9ceaf1fe1ec4485400ef7\",\"time\":1763004968000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/DMAModule.md\"}")
|
||||||
|
export { comp, data }
|
||||||
39
docs/.vuepress/.temp/pages/posts/DMAModule.html.vue
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<template><div><h2 id="一、特殊价格购买-20000及25800" tabindex="-1"><a class="header-anchor" href="#一、特殊价格购买-20000及25800"><span>一、特殊价格购买(20000及25800)</span></a></h2>
|
||||||
|
<h3 id="_1-设置特定的sku" tabindex="-1"><a class="header-anchor" href="#_1-设置特定的sku"><span>1. 设置特定的sku</span></a></h3>
|
||||||
|
<h4 id="扫描下面二维码后-通过选择一个sku-生成二维码发送给用户-用户通过扫码后-只能选择购买设置的sku-无法选择其他sku" tabindex="-1"><a class="header-anchor" href="#扫描下面二维码后-通过选择一个sku-生成二维码发送给用户-用户通过扫码后-只能选择购买设置的sku-无法选择其他sku"><span>扫描下面二维码后,通过选择一个sku,生成二维码发送给用户,用户通过扫码后,只能选择购买设置的sku,无法选择其他sku</span></a></h4>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/13/d65ead6595ba330b5795d71cf645358e.png" alt="img.png"></p>
|
||||||
|
<h3 id="_2-通用页面" tabindex="-1"><a class="header-anchor" href="#_2-通用页面"><span>2. 通用页面</span></a></h3>
|
||||||
|
<h4 id="用户扫描以下二维码-可自由选择sku进行购买" tabindex="-1"><a class="header-anchor" href="#用户扫描以下二维码-可自由选择sku进行购买"><span>用户扫描以下二维码,可自由选择sku进行购买</span></a></h4>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/13/070b2d87bc78fb37563466265cb1e41e.png" alt="img.png"></p>
|
||||||
|
<h2 id="二、-营养素使用方法-快捷图片查找与发送" tabindex="-1"><a class="header-anchor" href="#二、-营养素使用方法-快捷图片查找与发送"><span>二、“营养素使用方法”快捷图片查找与发送</span></a></h2>
|
||||||
|
<h4 id="操作方法如下" tabindex="-1"><a class="header-anchor" href="#操作方法如下"><span>操作方法如下:</span></a></h4>
|
||||||
|
<p>友福商务端—进入用户群—底部胶囊“快捷回复”—找到“营养素”—搜索或选择需要产品名称—点击:转发图片—返回当前用户群查看</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/dmaModule/nature1.png" alt="img.png">
|
||||||
|
<img src="@source/.vuepress/public/images/dmaModule/nature2.png" alt="img.png"></p>
|
||||||
|
<h2 id="三、复盘评估" tabindex="-1"><a class="header-anchor" href="#三、复盘评估"><span>三、复盘评估</span></a></h2>
|
||||||
|
<h4 id="用户方案结束后-我们需要对用户进行-复盘评估-分别是3天和60天的评估表。" tabindex="-1"><a class="header-anchor" href="#用户方案结束后-我们需要对用户进行-复盘评估-分别是3天和60天的评估表。"><span>用户方案结束后,我们需要对用户进行“复盘评估”,分别是3天和60天的评估表。</span></a></h4>
|
||||||
|
<p>操作方法:
|
||||||
|
友福商务端 —进入需要评估的用户群 — 点击右下脚 “+”图标 — 复盘评估—选择方案结束3天后或6天后</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/dmaModule/pan1.jpg" alt="img.png">
|
||||||
|
<img src="@source/.vuepress/public/images/dmaModule/pan2.jpg" alt="img.png"></p>
|
||||||
|
<h2 id="四、设置用户方案起始日与结束日" tabindex="-1"><a class="header-anchor" href="#四、设置用户方案起始日与结束日"><span>四、设置用户方案起始日与结束日</span></a></h2>
|
||||||
|
<h4 id="与服务费挂钩。" tabindex="-1"><a class="header-anchor" href="#与服务费挂钩。"><span>与服务费挂钩。</span></a></h4>
|
||||||
|
<h4 id="操作人-副教练" tabindex="-1"><a class="header-anchor" href="#操作人-副教练"><span>操作人:副教练;</span></a></h4>
|
||||||
|
<p>操作方法:
|
||||||
|
进入需要设置的用户群 — 点击右上角“...”— 点击并输入“方案开始与结束时间”</p>
|
||||||
|
<p>作用:用于分配教练服务费。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/dmaModule/time1.jpg" alt="img.png">
|
||||||
|
<img src="@source/.vuepress/public/images/dmaModule/time2.jpg" alt="img.png"></p>
|
||||||
|
<h2 id="五、用户上传数据查看" tabindex="-1"><a class="header-anchor" href="#五、用户上传数据查看"><span>五、用户上传数据查看</span></a></h2>
|
||||||
|
<p>如果用户上传体脂数据,服务群里查阅只能看到:体重及BMI,是什么原因?(见图1)</p>
|
||||||
|
<p>答:用户在体脂秤上的时间太短。</p>
|
||||||
|
<p>建议:用户在体脂秤上站20-30秒左右,听到“测量完毕”再下秤。
|
||||||
|
完整的体脂数据(见图2)</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/dmaModule/data1.jpg" alt="img.png">
|
||||||
|
<img src="@source/.vuepress/public/images/dmaModule/data2.jpg" alt="img.png"></p>
|
||||||
|
<h2 id="六、dma价格更新" tabindex="-1"><a class="header-anchor" href="#六、dma价格更新"><span>六、DMA价格更新</span></a></h2>
|
||||||
|
<h4 id="dma价格调整-11月24日起-价格变更" tabindex="-1"><a class="header-anchor" href="#dma价格调整-11月24日起-价格变更"><span>dma价格调整,11月24日起,价格变更</span></a></h4>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/26/3128241111cfde73418faaff8618ed61.jpeg" alt="img.png"></p>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/administrative.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/administrative.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/administrative.html\",\"title\":\"行政\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1759135896000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":1}],\"changelog\":[{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/administrative.md\"}")
|
||||||
|
export { comp, data }
|
||||||
45
docs/.vuepress/.temp/pages/posts/administrative.html.vue
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<template><div><h1 id="行政" tabindex="-1"><a class="header-anchor" href="#行政"><span>行政</span></a></h1>
|
||||||
|
<h2 id="dma方案前" tabindex="-1"><a class="header-anchor" href="#dma方案前"><span>DMA方案前</span></a></h2>
|
||||||
|
<h3 id="一-用户下单缴费阶段" tabindex="-1"><a class="header-anchor" href="#一-用户下单缴费阶段"><span>(一)用户下单缴费阶段</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<p>行政确认合同类型</p>
|
||||||
|
<p>收到用户线上 / 线下支付成功通知后,1 个工作日内登录【后台系统 - 订单管理模块】,根据支付渠道(线上订单显示 “APP 支付”,线下订单显示 “线下转账”)确认合同类型(线上 / 线下),并在系统中勾选对应类型完成同步。
|
||||||
|
仔细核对支付信息与订单信息的一致性,确保合同类型判断准确。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/operatorImage/xz1.png" alt="img.png"></p>
|
||||||
|
<p>若支付信息与订单信息不一致,立即联系技术核实,待确认后再进行合同类型确认。</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="二-合同签署与群聊搭建阶段" tabindex="-1"><a class="header-anchor" href="#二-合同签署与群聊搭建阶段"><span>(二)合同签署与群聊搭建阶段</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<p>行政处理线下合同签署</p>
|
||||||
|
<p>若用户选择线下合同,在收到线下合同原件后,登录【后台系统 - 订单管理模块】,找到对应订单的合同,点击【线下合同签署】按钮。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/operatorImage/xz2.png" alt="img.png"></p>
|
||||||
|
<p>仔细核对合同内容及用户签字是否完整、清晰,扫描件需清晰可辨。</p>
|
||||||
|
<p>若合同内容有误或用户签字不清晰,联系客服与用户沟通重新签署,待收到正确合同后再进行确认签署操作。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>行政处理线上合同签署跟进</p>
|
||||||
|
<p>用户签署线上合同后,系统会发送 “待公司签署” 通知,行政需在 1 个工作日内登录【后台系统 - 订单管理模块】,找到对应订单,点击 “线上合同签署”,完成电子签名确认。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/operatorImage/img_2.png" alt="img.png"></p>
|
||||||
|
<p>签署前再次核对合同条款,确保无误。</p>
|
||||||
|
<p>若电子签名无法正常使用,检查系统设置或联系技术支持解决。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>行政邀请服务团队进群</p>
|
||||||
|
<p>合同类型确认后,2 小时内登录【后台系统 - 客户合同类型确认后,2 小时内登录【后台系统 - 订单管理模块】,选择对应客户订单,点击 “详情”,设置中选择对应的 “主教练、副教练、客服” 角色,系统自动发送进群邀请。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/operatorImage/img_1.png" alt="img.png"></p>
|
||||||
|
<p>对应客户订单详情,点击 “设置”,勾选 “主教练、副教练、客服” 角色,系统自动发送进群邀请。</p>
|
||||||
|
<p>确保邀请的人员角色准确,避免遗漏或误邀。 若系统发送邀请失败,检查网络连接,重新操作;若仍失败,联系技术支持处理。</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="三-配货" tabindex="-1"><a class="header-anchor" href="#三-配货"><span>(三)配货</span></a></h3>
|
||||||
|
<p>收到健康管理师设置完方案信息后,4 小时内根据方案内容进行配货,核对货物数量、种类与方案一致后,登录【商务端APP】,找到对应群聊,在【用户信息】中选择健康档案,点击【标记配送已完成】,若为配送订单,录入快递单号(物流公司需选择合作物流)和产品照片;若为自提订单,上传产品照片。</p>
|
||||||
|
<p><img src="@source/.vuepress/public/images/operatorImage/wuliu.png" alt="img.png"></p>
|
||||||
|
<p>照片需清晰、完整,能作为发货凭证。</p>
|
||||||
|
<p>配货时轻拿轻放,避免货物损坏,确保包装完好。</p>
|
||||||
|
<p>若发现货物短缺或损坏,及时联系仓库补充或更换,延迟发货需提前告知客服,由客服向客户说明情况。</p>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/agent.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/agent.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/agent.html\",\"title\":\"代理商添加方式说明\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"代理商添加方式说明\",\"sidebarDepth\":2},\"git\":{\"updatedTime\":1765358621000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":1}],\"changelog\":[{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/agent.md\"}")
|
||||||
|
export { comp, data }
|
||||||
129
docs/.vuepress/.temp/pages/posts/agent.html.vue
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
<template><div><h1 id="代理商添加方式说明" tabindex="-1"><a class="header-anchor" href="#代理商添加方式说明"><span>代理商添加方式说明</span></a></h1>
|
||||||
|
<p>在「商务端用户」管理模块中,支持通过以下两种方式为用户添加代理商身份:</p>
|
||||||
|
<ol>
|
||||||
|
<li><strong>新增用户并设置角色</strong></li>
|
||||||
|
<li><strong>从已有用户列表中选择并分配角色</strong></li>
|
||||||
|
</ol>
|
||||||
|
<p>所有角色设置均支持填写「推荐人」信息(非必填项),可用于追溯关系链。</p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="📌-添加方式一-新增用户注册" tabindex="-1"><a class="header-anchor" href="#📌-添加方式一-新增用户注册"><span>📌 添加方式一:新增用户注册</span></a></h2>
|
||||||
|
<p>点击顶部按钮 <code v-pre>+ 添加新用户</code>,弹出「商务端注册」对话框:</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/01/8c5e943135013233ee1ee53902f89612.png" alt="商务端注册"></p>
|
||||||
|
<h4 id="字段说明" tabindex="-1"><a class="header-anchor" href="#字段说明"><span>字段说明:</span></a></h4>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>字段</th>
|
||||||
|
<th>说明</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>姓名</td>
|
||||||
|
<td>输入用户真实姓名</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>手机号</td>
|
||||||
|
<td>输入手机号,用于登录和通知</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>选择角色</td>
|
||||||
|
<td>多选框,可勾选多个角色,包括:<br> - 主教练<br> - 副教练<br> - 客服<br> - 委员会<br> - 行政<br> - 推荐人<br> - 助攻人<br> - 助教<br> - <strong>标准代理商</strong><br> - <strong>高级代理商</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>选择推荐人</td>
|
||||||
|
<td>可输入用户名或手机号进行搜索,选择推荐人(非必填)</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<blockquote>
|
||||||
|
<p>✅ <strong>提示</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>「标准代理商」与「高级代理商」是核心代理身份,可在权限和收益上有所区分。</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
<h2 id="📌-添加方式二-选择已有用户" tabindex="-1"><a class="header-anchor" href="#📌-添加方式二-选择已有用户"><span>📌 添加方式二:选择已有用户</span></a></h2>
|
||||||
|
<p>点击顶部按钮 <code v-pre>+ 选择已有用户</code>,系统展示当前所有已注册用户列表。</p>
|
||||||
|
<p>用户可通过筛选条件(如角色、手机号等)快速查找目标用户。</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/01/38099601eed3b76222c2ed623d21311e.png" alt="用户列表"></p>
|
||||||
|
<ol start="4">
|
||||||
|
<li>点击「确定」完成角色分配。</li>
|
||||||
|
</ol>
|
||||||
|
<hr>
|
||||||
|
<h2 id="📌-添加方式三-从列表中选择" tabindex="-1"><a class="header-anchor" href="#📌-添加方式三-从列表中选择"><span>📌 添加方式三:从列表中选择</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>在用户列表中找到目标用户。</li>
|
||||||
|
<li>勾选其对应的角色列(例如「标准代理商」、「高级代理商」)。</li>
|
||||||
|
<li>点击「确定」后,系统将弹出确认提示:</li>
|
||||||
|
</ol>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/01/c60b20c319dd3c1d9f18653b82f1732f.png" alt="确认提示"></p>
|
||||||
|
<p>确认后会提示是否添加推荐人
|
||||||
|
<img src="https://images.health.ufutx.com/202512/01/92ad43d9c03e996af013998010cba6d6.png" alt="选择推荐人"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🔍-注意事项" tabindex="-1"><a class="header-anchor" href="#🔍-注意事项"><span>🔍 注意事项</span></a></h2>
|
||||||
|
<ul>
|
||||||
|
<li><strong>角色可多选</strong>:一个用户可同时拥有多个角色(如既是“客服”又是“标准代理商”)。</li>
|
||||||
|
<li><strong>推荐人非必填</strong>:但建议填写以完善组织架构。</li>
|
||||||
|
<li><strong>权限生效</strong>:角色变更后,系统将自动同步相关权限与功能访问。</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🎯-代理商身份生效后-用户端功能展示" tabindex="-1"><a class="header-anchor" href="#🎯-代理商身份生效后-用户端功能展示"><span>🎯 代理商身份生效后:用户端功能展示</span></a></h2>
|
||||||
|
<p>成功设置代理商身份后,用户可在 <strong>商务端 App 的“我的”页面</strong> 查看以下信息,例如:
|
||||||
|
<img src="https://images.health.ufutx.com/202512/03/7a5529227f1a52e181b019ae07c50459.jpeg" alt="我的邀请"></p>
|
||||||
|
<h3 id="_1-我的邀请-已邀请用户" tabindex="-1"><a class="header-anchor" href="#_1-我的邀请-已邀请用户"><span>1. 我的邀请(已邀请用户)</span></a></h3>
|
||||||
|
<p>点击「我的邀请」可查看自己已成功邀请的代理商名单,包含:</p>
|
||||||
|
<ul>
|
||||||
|
<li>用户姓名</li>
|
||||||
|
<li>手机号(部分隐藏)</li>
|
||||||
|
<li>代理级别(如“标准代理商”)</li>
|
||||||
|
<li>邀请时间</li>
|
||||||
|
</ul>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/03/69136f49e9b25d51566e3d1d4d6ebfd7.jpeg" alt="我的邀请"></p>
|
||||||
|
<hr>
|
||||||
|
<h3 id="_2-代理商邀请码-二维码分享" tabindex="-1"><a class="header-anchor" href="#_2-代理商邀请码-二维码分享"><span>2. 代理商邀请码(二维码分享)</span></a></h3>
|
||||||
|
<p>在“我的”页面右上角,点击 <strong>「代理商邀请码」</strong>,可进入二维码页面:</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/03/2b285f72ba0e78c4ea17fef35c6b6ebc.jpeg" alt="代理商邀请码"></p>
|
||||||
|
<ul>
|
||||||
|
<li>显示专属二维码,扫码后跳转至 <strong>“成为代理商”申请页面</strong></li>
|
||||||
|
<li>用户可保存二维码,用于推广邀请他人</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
<h3 id="_3-成为代理商申请页面" tabindex="-1"><a class="header-anchor" href="#_3-成为代理商申请页面"><span>3. 成为代理商申请页面</span></a></h3>
|
||||||
|
<p>被邀请人扫描二维码后,将进入以下页面:</p>
|
||||||
|
<h4 id="理创业计划介绍" tabindex="-1"><a class="header-anchor" href="#理创业计划介绍"><span>理创业计划介绍</span></a></h4>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/03/f71766460a9998f6640edd73e887322a.jpeg" alt="代理创业计划"></p>
|
||||||
|
<ul>
|
||||||
|
<li>展示项目核心亮点:
|
||||||
|
<ul>
|
||||||
|
<li>全球首创「AI+七维生命力模型」健康服务系统</li>
|
||||||
|
<li>万亿级健康市场机会</li>
|
||||||
|
<li>49天周期化改善</li>
|
||||||
|
<li>多重收益保障</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="联系咨询表单" tabindex="-1"><a class="header-anchor" href="#联系咨询表单"><span>联系咨询表单</span></a></h4>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/03/664d6a71e2ef4e38b54c0a44383dec24.jpeg" alt="联系我们"></p>
|
||||||
|
<ul>
|
||||||
|
<li>填写信息后提交咨询:
|
||||||
|
<ul>
|
||||||
|
<li>姓名</li>
|
||||||
|
<li>手机号</li>
|
||||||
|
<li>意向代理类型(如标准/高级)</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>提交后,客服团队将第一时间联系对接</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🔍-注意事项-1" tabindex="-1"><a class="header-anchor" href="#🔍-注意事项-1"><span>🔍 注意事项</span></a></h2>
|
||||||
|
<ul>
|
||||||
|
<li>✅ <strong>角色可多选</strong>:一个用户可同时拥有多个角色(如既是“客服”又是“高级代理商”)。</li>
|
||||||
|
<li>⚠️ <strong>推荐人非必填</strong>:但建议填写以完善组织架构与分润关系。</li>
|
||||||
|
<li>🔄 <strong>权限即时同步</strong>:角色变更后,系统将自动更新用户权限与功能访问范围。</li>
|
||||||
|
<li>📱 <strong>商务端可见性</strong>:仅当用户被设置为代理商后,才会在“我的”页面显示相关功能。</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/appCorrelation.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/appCorrelation.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/appCorrelation.html\",\"title\":\"\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1766471007000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":4}],\"changelog\":[{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"acc531138f97433b765b2d0a43f9edb90f646da1\",\"time\":1765524799000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"第一版\"},{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"6e27dcce01edcc47b1f9ceaf1fe1ec4485400ef7\",\"time\":1763004968000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/appCorrelation.md\"}")
|
||||||
|
export { comp, data }
|
||||||
127
docs/.vuepress/.temp/pages/posts/appCorrelation.html.vue
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<template><div><h2 id="一、app消息通知" tabindex="-1"><a class="header-anchor" href="#一、app消息通知"><span>一、APP消息通知</span></a></h2>
|
||||||
|
<h3 id="_1-app通知消息开启及平台支持" tabindex="-1"><a class="header-anchor" href="#_1-app通知消息开启及平台支持"><span>1. app通知消息开启及平台支持</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="7700" :max-width="700" src="https://images.health.ufutx.com/202511/11/be87f925a3bd08b158c0438c38aed69b.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h2 id="二、app下载" tabindex="-1"><a class="header-anchor" href="#二、app下载"><span>二、APP下载</span></a></h2>
|
||||||
|
<h3 id="_1-用户端app下载" tabindex="-1"><a class="header-anchor" href="#_1-用户端app下载"><span>1. 用户端APP下载</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="6800" :max-width="700" src="https://images.health.ufutx.com/202509/28/9a0f61ee335842d45cf2ccf193fa527a.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h3 id="_2-商务端app下载" tabindex="-1"><a class="header-anchor" href="#_2-商务端app下载"><span>2. 商务端APP下载</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="8400" :max-width="700" src="https://images.health.ufutx.com/202509/28/7c4df7f12f9a92f88de77e38209be83f.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h2 id="三、华为纯血鸿蒙" tabindex="-1"><a class="header-anchor" href="#三、华为纯血鸿蒙"><span>三、华为纯血鸿蒙</span></a></h2>
|
||||||
|
<h3 id="_1-app安装及体脂称使用说明" tabindex="-1"><a class="header-anchor" href="#_1-app安装及体脂称使用说明"><span>1.app安装及体脂称使用说明</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="7520" src="https://images.health.ufutx.com/202512/22/dcf5fbf55ab4859c92222d8436e778a1.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h2 id="四、其他业务类" tabindex="-1"><a class="header-anchor" href="#四、其他业务类"><span>四、其他业务类</span></a></h2>
|
||||||
|
<h3 id="_1-安装app时提示恶意应用怎么办" tabindex="-1"><a class="header-anchor" href="#_1-安装app时提示恶意应用怎么办"><span>1. 安装app时提示恶意应用怎么办?</span></a></h3>
|
||||||
|
<p>若安装友福同享APP时提示恶意应用,可按以下步骤处理:</p>
|
||||||
|
<ul>
|
||||||
|
<li>确认下载渠道:确保从手机官方应用商店(如苹果App Store、华为应用市场等)下载,避免第三方渠道;</li>
|
||||||
|
<li>检查APP版本:确认下载的是最新版本,旧版本可能存在误报;</li>
|
||||||
|
<li>信任应用:部分安卓手机可在「设置」→「安全」中开启「未知来源应用安装」(注意:仅信任官方渠道下载的APP);</li>
|
||||||
|
<li>反馈客服:若仍有问题,截图提示信息并联系客服(XXX-XXXXXXX)协助解决。</li>
|
||||||
|
<li>我们现在属于测试阶段,不能频繁更新到应用市场,由于个别类型手机有外来应用特殊管控,非应用商城安装包安装属于正常的风险提示,我们公司提供的下载链接和二维码本身不会携带病毒,可以放心下载安装。</li>
|
||||||
|
<li>处理方式如下:正常情况下按照提示,确认已了解风险,并点击继续安装,即可安装成功。有些手机系统中途可能会出现验证锁屏密码等隐私验证信息来确保本人手机安全,按提示操作后即可安装成功。手机自带系统在开启纯净模式情况下也会出现这样的情况,关闭纯净模式,按提示下载安装即可安装成功。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2-如何关闭纯净模式" tabindex="-1"><a class="header-anchor" href="#_2-如何关闭纯净模式"><span>2. 如何关闭纯净模式?</span></a></h3>
|
||||||
|
<p>不同手机关闭纯净模式的方法不同,以常见品牌为例:</p>
|
||||||
|
<ul>
|
||||||
|
<li>华为手机:进入「设置」→「系统和更新」→「纯净模式」,点击「退出」;</li>
|
||||||
|
<li>小米手机:进入「设置」→「隐私保护」→「特殊权限设置」→「安装未知应用」,选择对应APP并开启权限;</li>
|
||||||
|
<li>若您的手机品牌未在此列,建议在手机「设置」中搜索「纯净模式」或「未知应用安装」,根据提示操作。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_3-安装app以及开放文件访问权限会不会被恶意获取用户信息或者数据挪作他用-具有隐私信息泄露的风险" tabindex="-1"><a class="header-anchor" href="#_3-安装app以及开放文件访问权限会不会被恶意获取用户信息或者数据挪作他用-具有隐私信息泄露的风险"><span>3. 安装APP以及开放文件访问权限会不会被恶意获取用户信息或者数据挪作他用,具有隐私信息泄露的风险?</span></a></h3>
|
||||||
|
<p>友福同享APP严格遵守隐私保护法规,所有权限申请均为提供服务所需:</p>
|
||||||
|
<ul>
|
||||||
|
<li>文件访问权限:仅用于读取/存储与健康数据相关的文件(如运动记录、体检报告等),不会访问无关文件;</li>
|
||||||
|
<li>信息保护:APP采用加密传输技术,用户数据存储在安全服务器,未经授权不会泄露;</li>
|
||||||
|
<li>权限说明:在安装与使用过程中,APP会明确说明权限用途,您可根据需求选择是否授权。若仍有疑虑,可查看《用户隐私协议》或联系客服了解详情。</li>
|
||||||
|
<li>这个是完全不存在的,完全不用担心。我们的APP上线前通过了工信部ICP备案,合法合规运行,不存在非法经营活动。遵守《互联网信息服务管理办法》,有健全的网络与信息安全保障措施,包括网站安全保障措施、信息安全保密管理制度、用户信息安全管理制度。备案号为:粤ICP备12008876号,查询地址:https://beian.miit.gov.cn/#/Integrated/recordQuery</li>
|
||||||
|
</ul>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="600" src="https://images.health.ufutx.com/202408/16/d2b5ca33bd970f64a6301fa75ae2eb221723776441977.jpeg"></LongPicSplit>
|
||||||
|
<ul>
|
||||||
|
<li>非手机系统应用商城下载安装权限开放过程中会存在一些风险提醒,不排除存在对外来合法合规APP安装过程中提示过多风险提示信息,以引起用户注意,达到保护用户隐私安全目的,但这并不代表APP本身运行有问题,认准本公司提供的链接安装的APP不会存在违法违规行为,请放心使用。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_4-我反馈的问题会不会石沉大海" tabindex="-1"><a class="header-anchor" href="#_4-我反馈的问题会不会石沉大海"><span>4. 我反馈的问题会不会石沉大海?</span></a></h3>
|
||||||
|
<p>您反馈的问题我们会认真处理:</p>
|
||||||
|
<ul>
|
||||||
|
<li>反馈渠道:通过APP内「我的」→「意见反馈」提交的问题,客服将在1-3个工作日内回复;</li>
|
||||||
|
<li>进度查询:可在「意见反馈」页面查看问题处理进度;</li>
|
||||||
|
<li>投诉建议:若对处理结果不满意,可拨打客服热线(XXX-XXXXXXX)投诉,我们将重新核查并优化处理。</li>
|
||||||
|
<li>亲爱的测试官,您好!有任何问题或建议我们都会认真对待,并全力解决。感恩每一位测试官的反馈与配合,每一次反馈都会让我们的产品变得更好更优秀,让我们满心欢喜一同陪伴并见证这一成长过程。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_5-ios使用app卡在启动页怎么办" tabindex="-1"><a class="header-anchor" href="#_5-ios使用app卡在启动页怎么办"><span>5. iOS使用app卡在启动页怎么办?</span></a></h3>
|
||||||
|
<p>若iOS设备上友福同享APP卡在启动页,可尝试:</p>
|
||||||
|
<ul>
|
||||||
|
<li>强制关闭并重新打开</li>
|
||||||
|
<li>检查网络:确保手机已连接稳定的Wi-Fi或移动数据;</li>
|
||||||
|
<li>重启APP:双击 iPhone 的 “主屏幕” 按钮(全面屏设备从屏幕底部边缘向上轻扫并停顿),打开多任务处理界面。在多任务处理界面中,找到出现问题的 App 卡片,向上滑动该卡片将其关闭。然后再次点击该 App 的图标重新打开,看是否能正常进入。</li>
|
||||||
|
<li>重启手机:长按电源键重启设备后再试;</li>
|
||||||
|
<li>卸载重装:若仍未解决,卸载APP后从App Store重新下载安装(注意:卸载前请备份重要数据)。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_6-【苹果系统】友福同享app授权教程" tabindex="-1"><a class="header-anchor" href="#_6-【苹果系统】友福同享app授权教程"><span>6. 【苹果系统】友福同享App授权教程</span></a></h3>
|
||||||
|
<p>苹果系统友福同享APP授权步骤如下(含图片指引,实际请查看APP内教程或联系客服获取图文说明):</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="5850" src="https://images.health.ufutx.com/202507/29/aa09381424471a557f2605407ee935e1.png"></LongPicSplit>
|
||||||
|
<h3 id="_7-【安卓系统】友福同享app授权教程" tabindex="-1"><a class="header-anchor" href="#_7-【安卓系统】友福同享app授权教程"><span>7. 【安卓系统】友福同享App授权教程</span></a></h3>
|
||||||
|
<p>安卓系统友福同享APP授权步骤如下(含图片指引,实际请查看APP内教程或联系客服获取图文说明):</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="6200" src="https://images.health.ufutx.com/202507/29/cb6340eeacec529c6615401a55420f46.png"></LongPicSplit>
|
||||||
|
<h3 id="_8-苹果手机如何开通-友福同享-app有消息提醒" tabindex="-1"><a class="header-anchor" href="#_8-苹果手机如何开通-友福同享-app有消息提醒"><span>8. 苹果手机如何开通”友福同享“app有消息提醒?</span></a></h3>
|
||||||
|
<p>苹果系统友福同享APP开通”友福同享“app有消息提醒步骤如下(含图片指引,实际请查看APP内教程或联系客服获取图文说明):</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="10600" src="https://images.health.ufutx.com/202511/04/d063af9479225cf4246298dc0ddf20a0.jpeg"></LongPicSplit>
|
||||||
|
<h3 id="_9-苹果手机智能手环无法再境外版流畅使用" tabindex="-1"><a class="header-anchor" href="#_9-苹果手机智能手环无法再境外版流畅使用"><span>9. 苹果手机智能手环无法再境外版流畅使用?</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="12000" src="https://images.health.ufutx.com/202512/10/451a141ad0a93806b429d78b307f8613.jpeg"></LongPicSplit>
|
||||||
|
<h3 id="_10-dma用户使用腾讯视频会议-有80-用户无法顺利进入会议室。" tabindex="-1"><a class="header-anchor" href="#_10-dma用户使用腾讯视频会议-有80-用户无法顺利进入会议室。"><span>10. DMA用户使用腾讯视频会议,有80%用户无法顺利进入会议室。</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="4950" src="https://images.health.ufutx.com/202512/10/90b47e720399453dd2eab3e952566c73.jpeg"></LongPicSplit>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2200" src="https://images.health.ufutx.com/202512/10/edcbd38be82666ebf55edcbd82601666.jpeg"></LongPicSplit>
|
||||||
|
<h2 id="四、智能手环小知识分享" tabindex="-1"><a class="header-anchor" href="#四、智能手环小知识分享"><span>四、智能手环小知识分享</span></a></h2>
|
||||||
|
<h3 id="手环小知识-1-首次使用手环-应如何完成app绑定" tabindex="-1"><a class="header-anchor" href="#手环小知识-1-首次使用手环-应如何完成app绑定"><span>手环小知识-1:首次使用手环,应如何完成APP绑定?</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>手环先充电;</li>
|
||||||
|
<li>充电时,请将手环机芯背面的两个金属触点对准充电槽的触点插入,接通电源后手环侧面指示灯亮起,表示充电正常;</li>
|
||||||
|
<li>请注意:不要佩戴在手上操作。绑定时需将手环置于充电器中,并将“友福同享”APP打开,点击服务群聊中“使用手环”按钮,手机靠近手环进行激活绑定。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="手环小知识-2-手环日常使用-突然断连是什么原因" tabindex="-1"><a class="header-anchor" href="#手环小知识-2-手环日常使用-突然断连是什么原因"><span>手环小知识-2:手环日常使用,突然断连是什么原因?</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>检查蓝牙是否关掉了,请打开;</li>
|
||||||
|
<li>检查手环电池电量,如果完全耗尽手环会断开与App的连接,此时需充电10小时以上,并重新连接“友福同享”APP;</li>
|
||||||
|
<li>提醒:当电量低于5%时,蓝牙将断开,请在电量20%时及时充电。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="手环小知识-3-智能手环显示的温度是人体真实温度吗" tabindex="-1"><a class="header-anchor" href="#手环小知识-3-智能手环显示的温度是人体真实温度吗"><span>手环小知识-3:智能手环显示的温度是人体真实温度吗?</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>智能手环显示的是体表温度,即环境温度与用户体温的综合反映,它会被环境温度所影响;</li>
|
||||||
|
<li>其价值不在于提供与医用体温计同等的精确数值,而在于通过长期、连续的监测,建立个人体温基线,并及时发现偏离基线的异常趋势,实现健康预警与追踪。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="手环小知识-4-智能手环保持静止时-会被记录为睡眠数据-导致睡眠数据不准-对吗" tabindex="-1"><a class="header-anchor" href="#手环小知识-4-智能手环保持静止时-会被记录为睡眠数据-导致睡眠数据不准-对吗"><span>手环小知识-4:智能手环保持静止时,会被记录为睡眠数据,导致睡眠数据不准,对吗?</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>是的,长时间静止确实可能被计入睡眠数据;</li>
|
||||||
|
<li>手环并非直接“知道”你是否入睡,而是通过监测身体动作、心率变化等线索来推测睡眠状态。<br>
|
||||||
|
在长期睡眠趋势分析上具有较高参考价值,例如:
|
||||||
|
<ul>
|
||||||
|
<li>深睡眠时长的变化趋势;</li>
|
||||||
|
<li>夜间醒来次数的增减;</li>
|
||||||
|
<li>睡眠规律是否改善等。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="手环小知识-5-手环电池休眠原理" tabindex="-1"><a class="header-anchor" href="#手环小知识-5-手环电池休眠原理"><span>手环小知识-5:手环电池休眠原理</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>为确保电量显示准确,首次使用请连接充电器持续充电10小时以上,完成电池电路校准;</li>
|
||||||
|
<li>由于长期仓储可能导致电池进入“休眠保护”状态,电量统计芯片需通过完整充放电循环重新标定,否则电量显示可能不准确;</li>
|
||||||
|
<li>前几次充放电为手环自动校准奠定基础。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="手环小知识-6-用户使用的手环防水吗" tabindex="-1"><a class="header-anchor" href="#手环小知识-6-用户使用的手环防水吗"><span>手环小知识-6:用户使用的手环防水吗?</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>支持防水,可在10米水深内持续使用2小时,日常洗手、游泳均可佩戴;</li>
|
||||||
|
<li>不支持洗澡时佩戴,因水蒸气可能进入机芯导致损坏,即防水但不防蒸汽。</li>
|
||||||
|
</ol>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/assistantCoach.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/assistantCoach.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/assistantCoach.html\",\"title\":\"副教练\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1773297785000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":5}],\"changelog\":[{\"hash\":\"263c4a87d2a7384f0740862be100870b4396fc14\",\"time\":1773297785000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"8f0f08771e3748002699aa33318dbae7e39a397f\",\"time\":1760424178000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新职责\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/assistantCoach.md\"}")
|
||||||
|
export { comp, data }
|
||||||
162
docs/.vuepress/.temp/pages/posts/assistantCoach.html.vue
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
<template><div><h1 id="副教练" tabindex="-1"><a class="header-anchor" href="#副教练"><span>副教练</span></a></h1>
|
||||||
|
<h2 id="核心指引" tabindex="-1"><a class="header-anchor" href="#核心指引"><span>核心指引</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li><strong>以终为始</strong>:无论用户购买何种价位,体验结束时应能「自我驾驶身体这部豪华轿车」。副教练所有服务动作必须围绕这一目标展开。</li>
|
||||||
|
<li><strong>过程方向</strong>:深度了解用户生活、饮食、作息习惯,在<strong>不过度改变</strong>其原有模式下,帮助用户把方案落地,最终形成<strong>独一无二且可持续</strong>的个人健康解决方案。</li>
|
||||||
|
<li><strong>问题导向</strong>:训练并具备「遇到问题 → 解决问题」的能力,并带领用户一起经历、享受解决问题的过程,让用户不再害怕问题。</li>
|
||||||
|
<li><strong>态度要求</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>回答及时、积极主动,随时观察客户状态再回复;<strong>禁止坐等答案或装作没看见</strong>。</li>
|
||||||
|
<li>遇到不会的问题,<strong>先在内部群(不交叉)讨论</strong>,确认后回复用户。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>专业能力</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>不清楚立即寻求主教练 / 客服支持;</li>
|
||||||
|
<li>持续优化专业术语与服务精准度;</li>
|
||||||
|
<li>面对不同客户灵活应变。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>深度服务</strong>(温度 > 流程):
|
||||||
|
<ul>
|
||||||
|
<li>6-1 视频会议:客户有空立即发起,<strong>不以凑人数为由改期</strong>;会后30分钟内在内部群同步纪要。</li>
|
||||||
|
<li>6-2 生活化沟通:三餐吃什么、喜好/忌口、食材故事等。</li>
|
||||||
|
<li>6-3 深挖根源:如「不吃猪肉」→追问原因(宗教/过敏/故事)。</li>
|
||||||
|
<li>6-4 不适询问:胃疼≠简单归因为调理反应,需问频率、痛感、持续时间、既往史等。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>客户静默处理</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>7-1 先微信 → 再电话/视频,每一步操作前<strong>请示主教练或客服</strong>。</li>
|
||||||
|
<li>7-2 仍联系不上→<strong>报公司→启动服务暂停</strong>。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<hr>
|
||||||
|
<h2 id="服务红线-一经触碰-立即整改-停单-再培训" tabindex="-1"><a class="header-anchor" href="#服务红线-一经触碰-立即整改-停单-再培训"><span>服务红线(一经触碰,立即整改/停单/再培训)</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li><strong>禁止流程化、复制粘贴式服务</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>1-1 发完餐单就消失,主教练2次提醒无改善→交管理层处理:中止服务/减单/再培训。</li>
|
||||||
|
<li>1-2 群发千篇一律话术、满屏表情→视为不走心,同等处理。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>不主动让用户停药</strong>;确需调整→团队会议确认。</li>
|
||||||
|
<li><strong>禁止治病话术</strong>,杜绝「治疗、治愈、替代药物」等表述。</li>
|
||||||
|
<li><strong>不强制指令</strong>,只给「指导建议」;步数/运动达不到时引导重要性即可。</li>
|
||||||
|
<li><strong>不擅作主张</strong>,所有关键决策先内部同步。</li>
|
||||||
|
<li><strong>不打乱沟通节奏</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>6-1 用户讨论A话题时,其他教练不中途插话B话题;等A话题结束后再继续。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>禁止直接发送带AI痕迹的原文</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>7-1 AI答案需转化为「DMA逻辑 + 用户听得懂的大白话」;无法判断时→内部群把关。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>信息/图片一致性</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>8-1 蛋白粉图片前期3-5天即可,后期用语言提醒;<strong>禁止继续使用含“49天”旧图</strong>(6月起已换「友福同享」logo)。</li>
|
||||||
|
<li>8-2 不得私自制作营养素图片;如需→向公司申请统一制作。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>禁止过度图片轰炸</strong>,保持沟通专业与美观。</li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="工作职责与流程" tabindex="-1"><a class="header-anchor" href="#工作职责与流程"><span>工作职责与流程</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>49天指导用户学会使用健康DMA方案;</li>
|
||||||
|
<li>标注方案开始时间与结束时间;</li>
|
||||||
|
<li>指导用户学会使用友福体脂秤、智能手环,并分享数据在服务群;</li>
|
||||||
|
<li>每天16:00-18:00之间,给用户发第二天的餐单。向用户详细说明如何使用营养产品、餐单及注意事项等;</li>
|
||||||
|
<li>每天早上与用户打招呼问好,并在节日送上祝福和关心问候;</li>
|
||||||
|
<li>每天及时关注用户数据,如有异常需要马上跟进;</li>
|
||||||
|
<li>关注用户提出的问题及时进行解答。遇到无法解答,需要在用户聊天的内部群里寻找主教练或客服的指导与建议;</li>
|
||||||
|
<li>方案结束后,及时向用户发送结束语和后续注意事项;</li>
|
||||||
|
<li>请与教练团队确认,服务用户是否需在一个月后复检?如需,请在结束语中通知用户;</li>
|
||||||
|
<li>方案结束后,仍需持续跟进3个月,每周一与用户进行互动;</li>
|
||||||
|
<li>方案结束后,完成用户第3天、60天的《复盘评估表》;</li>
|
||||||
|
<li>方案结束后,完成内部教练的《复盘服务评价表》。</li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="如何成为副教练" tabindex="-1"><a class="header-anchor" href="#如何成为副教练"><span>如何成为副教练?</span></a></h2>
|
||||||
|
<h3 id="一、获取考试资格" tabindex="-1"><a class="header-anchor" href="#一、获取考试资格"><span>一、获取考试资格</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li><strong>操作指引</strong>:<br>
|
||||||
|
扫描下方客服二维码添加官方客服,发送“副教练考试报名”,按指引登记个人信息并支付5800元(含两项考试所有费用,无额外支出),保存缴费凭证截图。</li>
|
||||||
|
<li><strong>注意事项</strong>:<br>
|
||||||
|
客服24小时内确认报名,费用一次性收取,不可退改,报名成功后同步考试网站登录权限。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="二、完成两项必备考试" tabindex="-1"><a class="header-anchor" href="#二、完成两项必备考试"><span>二、完成两项必备考试</span></a></h3>
|
||||||
|
<h4 id="_1-身心健康管理师考试-官网直考" tabindex="-1"><a class="header-anchor" href="#_1-身心健康管理师考试-官网直考"><span>(1)身心健康管理师考试(官网直考)</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li><strong>操作指引</strong>:<br>
|
||||||
|
登录考试网站( <a href="https://www.ufutx.com/#/examHome" target="_blank" rel="noopener noreferrer">https://www.ufutx.com/#/examHome</a> ),在“认证考试”板块选择“身心健康管理师”,填写信息完成报名,按系统提示参加线上考试(90分钟,60分及格)。</li>
|
||||||
|
<li><strong>证书申请</strong>:<br>
|
||||||
|
考试通过后,在网站“我的证书”板块点击“申请电子证”,3个工作日内生成电子版证书,可自行下载保存。</li>
|
||||||
|
<li><strong>注意事项</strong>:<br>
|
||||||
|
考试需开启摄像头监考,缺考可在7天内申请1次免费补考。</li>
|
||||||
|
</ol>
|
||||||
|
<h4 id="_2-营养指导员考试-第三方组织-含在5800元内" tabindex="-1"><a class="header-anchor" href="#_2-营养指导员考试-第三方组织-含在5800元内"><span>(2)营养指导员考试(第三方组织,含在5800元内)</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li><strong>操作指引</strong>:<br>
|
||||||
|
联系客服获取第三方考试平台链接及报名指引,按要求提交资料(身份证、报名信息)后参加考试;考试合格后,将成绩截图发送给客服登记。</li>
|
||||||
|
<li><strong>证书说明</strong>:<br>
|
||||||
|
成绩确认后,第三方机构将在2-3个月内发放证书,客服会同步进度,证书寄达后需拍照反馈至客服存档。</li>
|
||||||
|
<li><strong>注意事项</strong>:<br>
|
||||||
|
考试流程以第三方平台规则为准,客服全程协助解决报名疑问,无需额外支付费用。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="三、完成认证入职" tabindex="-1"><a class="header-anchor" href="#三、完成认证入职"><span>三、完成认证入职</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li><strong>操作指引</strong>:<br>
|
||||||
|
两项考试均合格后,将身心健康管理师电子证、营养指导员成绩截图(或证书)发送给客服,审核通过后由DMA服务团队安排入职培训,培训合格即正式成为副教练。</li>
|
||||||
|
<li><strong>注意事项</strong>:<br>
|
||||||
|
证书需在有效期内(一般为2年),过期需重新考试。</li>
|
||||||
|
</ol>
|
||||||
|
<p>(客服二维码图示)<br>
|
||||||
|
<img src="https://images.health.ufutx.com/202505/14/5b720a7d07e87354b96c2094d948bb9a.png" alt="友福同享客服二维码"></p>
|
||||||
|
<p><strong>考试网站:<a href="https://www.ufutx.com/#/examHome" target="_blank" rel="noopener noreferrer">https://www.ufutx.com/#/examHome</a></strong></p>
|
||||||
|
<h2 id="dma职责" tabindex="-1"><a class="header-anchor" href="#dma职责"><span>DMA职责</span></a></h2>
|
||||||
|
<h3 id="一-转发每日餐单" tabindex="-1"><a class="header-anchor" href="#一-转发每日餐单"><span>(一)转发每日餐单</span></a></h3>
|
||||||
|
<p>登录【友福同享商务端】APP,进入对应服务群,在【服务流程】【方案中】【转发【每日餐单】】发送每日餐单</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/0b7433844c55a221c8a83db3d6e853a3.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="二-转发体脂称" tabindex="-1"><a class="header-anchor" href="#二-转发体脂称"><span>(二)转发体脂称</span></a></h3>
|
||||||
|
<p>转发友福体脂称操作视频,指导用户完成设备绑定(步骤:下载 APP→蓝牙配对→输入个人信息),确认数据可同步至服务群</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/f6c6752c08f1638e0a48bf6ebec68690.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="三-转发手环使用指导" tabindex="-1"><a class="header-anchor" href="#三-转发手环使用指导"><span>(三)转发手环使用指导</span></a></h3>
|
||||||
|
<p>参照《友福手环操作手册》,通过群聊演示设备激活、数据同步(运动 / 睡眠数据)流程,确保用户掌握每日数据查看方法</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/376c844bc594e568a06e7e7775cf0c8e.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="三-解答专业疑问" tabindex="-1"><a class="header-anchor" href="#三-解答专业疑问"><span>(三)解答专业疑问</span></a></h3>
|
||||||
|
<p>①每日 9:00 前发送个性化问候(结合天气 / 用户状态,如 “今日降温,晨练建议加件外套”)②节假日发送定制祝福(如糖尿病用户:“中秋快乐!推荐您尝试无糖月饼”)</p>
|
||||||
|
<p>解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。</p>
|
||||||
|
<p>客户对解答存疑(如 “与之前说法不一致”)→立即核对历史记录,若确有偏差,致歉并重新解释:“之前表述不够准确,正确方式是……”。</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/5323081878556e45dd22b21de9cfe3e8.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h3 id="四-解答专业疑问" tabindex="-1"><a class="header-anchor" href="#四-解答专业疑问"><span>(四)解答专业疑问</span></a></h3>
|
||||||
|
<p>解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。
|
||||||
|
解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。</p>
|
||||||
|
<h3 id="五-解答专业疑问" tabindex="-1"><a class="header-anchor" href="#五-解答专业疑问"><span>(五)解答专业疑问</span></a></h3>
|
||||||
|
<p>解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。解答需专业准确,避免提供错误指导;涉及方案核心调整的需先请示主教练。</p>
|
||||||
|
<h3 id="六-解答专业疑问" tabindex="-1"><a class="header-anchor" href="#六-解答专业疑问"><span>(六)解答专业疑问</span></a></h3>
|
||||||
|
<h2 id="信息保密规范" tabindex="-1"><a class="header-anchor" href="#信息保密规范"><span>信息保密规范</span></a></h2>
|
||||||
|
<h3 id="_1-保密范围" tabindex="-1"><a class="header-anchor" href="#_1-保密范围"><span>1. 保密范围</span></a></h3>
|
||||||
|
<p>所有工作人员必须严格保密用户在服务过程中产生的全部个人信息,包括但不限于:</p>
|
||||||
|
<ul>
|
||||||
|
<li>用户基本信息:姓名、身份证号、联系方式等;</li>
|
||||||
|
<li>职业与职务信息;</li>
|
||||||
|
<li>体检报告、健康问卷及任何身体/健康数据;</li>
|
||||||
|
<li>个人方案、服务群聊天记录、数据变化、《方案后问卷调查表》等内部资料。</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>可分享内容</strong>:本人或家人身体情况、照片;公司已正式发布的对外宣传画册。</p>
|
||||||
|
<h3 id="_2-授权要求" tabindex="-1"><a class="header-anchor" href="#_2-授权要求"><span>2. 授权要求</span></a></h3>
|
||||||
|
<p>因业务、宣传等任何目的需对外披露用户相关信息时,必须:</p>
|
||||||
|
<ol>
|
||||||
|
<li>事先取得用户本人<strong>书面授权</strong>;</li>
|
||||||
|
<li>对分享内容进行<strong>充分匿名化</strong>处理。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_3-责任与义务" tabindex="-1"><a class="header-anchor" href="#_3-责任与义务"><span>3. 责任与义务</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>保密义务在方案结束后仍然有效;</li>
|
||||||
|
<li>任何违反本规范的行为均视为<strong>严重违纪</strong>,公司保留追究<strong>法律责任</strong>的权利。</li>
|
||||||
|
</ul>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/behaviorRecord.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/behaviorRecord.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/behaviorRecord.html\",\"title\":\"服务人员行为记录\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"服务人员行为记录\",\"description\":\"指导如何在 DMA 服务群中记录服务人员的行为表现\",\"sidebarDepth\":2},\"git\":{\"updatedTime\":1768282379000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":2}],\"changelog\":[{\"hash\":\"66f79e6de026448817b55bd6969c15fd05e5a53c\",\"time\":1768282379000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"e33125e761c68b1bfc4fe2e521992fbf42c49f20\",\"time\":1768184350000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/behaviorRecord.md\"}")
|
||||||
|
export { comp, data }
|
||||||
96
docs/.vuepress/.temp/pages/posts/behaviorRecord.html.vue
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<template><div><h1 id="服务人员行为记录" tabindex="-1"><a class="header-anchor" href="#服务人员行为记录"><span>服务人员行为记录</span></a></h1>
|
||||||
|
<p>旨在指导服务人员如何在 <strong>DMA 服务群</strong> 中,根据其他服务人员发送的消息内容,正确记录其行为类型(正向激励 / 改进提醒),并提交至系统进行后续处理。</p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="一、操作流程概览" tabindex="-1"><a class="header-anchor" href="#一、操作流程概览"><span>一、操作流程概览</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>进入对应的 <strong>DMA 服务群</strong>(如:蓝志辉2服务群)。</li>
|
||||||
|
<li>观察服务人员发送的沟通内容。</li>
|
||||||
|
<li>在聊天界面底部点击「<strong>行为记录</strong>」胶囊按钮。</li>
|
||||||
|
<li>填写行为类型、人员姓名、事由及上传凭证。</li>
|
||||||
|
<li>提交记录,等待后台审核与处理。</li>
|
||||||
|
</ol>
|
||||||
|
<blockquote>
|
||||||
|
<p>✅ 提示:提交后不可修改,请确保信息真实准确。</p>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
<h2 id="二、操作步骤详解" tabindex="-1"><a class="header-anchor" href="#二、操作步骤详解"><span>二、操作步骤详解</span></a></h2>
|
||||||
|
<h3 id="步骤-1-进入服务群" tabindex="-1"><a class="header-anchor" href="#步骤-1-进入服务群"><span>步骤 1:进入服务群</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>打开 App,找到对应的服务群组,例如:
|
||||||
|
<ul>
|
||||||
|
<li><code v-pre>蓝志辉2服务群(5)</code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>确保当前群组为所要记录行为的服务对象所在群。</li>
|
||||||
|
</ul>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202601/09/4eed29dcbae2ca44c0a2e0478ad4f337.jpg" alt="服务群截图"><br>
|
||||||
|
<em>图示:服务群聊天界面,底部有「行为记录」按钮</em></p>
|
||||||
|
<hr>
|
||||||
|
<h3 id="步骤-2-识别服务人员消息" tabindex="-1"><a class="header-anchor" href="#步骤-2-识别服务人员消息"><span>步骤 2:识别服务人员消息</span></a></h3>
|
||||||
|
<p>观察服务人员发送的内容是否具备以下特征:</p>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>行为类型</th>
|
||||||
|
<th>判断依据</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><strong>正向激励</strong></td>
|
||||||
|
<td>消息内容积极正面,例如:<br>• 主动关怀客户健康<br>• 提供专业建议<br>• 及时响应需求<br>• 获得用户好评</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><strong>改进提醒</strong></td>
|
||||||
|
<td>消息存在可优化空间,例如:<br>• 内容重复发送<br>• 回应不及时<br>• 语气生硬或缺乏温度<br>• 用户反馈需调整</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<h3 id="步骤-3-点击「行为记录」按钮" tabindex="-1"><a class="header-anchor" href="#步骤-3-点击「行为记录」按钮"><span>步骤 3:点击「行为记录」按钮</span></a></h3>
|
||||||
|
<p>在聊天界面底部,点击「<strong>行为记录</strong>」按钮,进入记录页面。</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202601/09/e60c49c6bc56c7cde54c735f1c5e5c18.jpg" alt="行为记录页面"></p>
|
||||||
|
<hr>
|
||||||
|
<h3 id="步骤-4-填写行为记录表单" tabindex="-1"><a class="header-anchor" href="#步骤-4-填写行为记录表单"><span>步骤 4:填写行为记录表单</span></a></h3>
|
||||||
|
<p>进入「服务人员行为记录」页面后,按以下字段填写:</p>
|
||||||
|
<h4 id="_1-行为类型" tabindex="-1"><a class="header-anchor" href="#_1-行为类型"><span>1. 行为类型</span></a></h4>
|
||||||
|
<p>选择一项:</p>
|
||||||
|
<ul>
|
||||||
|
<li>✅ <strong>正向激励</strong></li>
|
||||||
|
<li>⚠️ <strong>改进提醒</strong></li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_2-服务人员姓名" tabindex="-1"><a class="header-anchor" href="#_2-服务人员姓名"><span>2. 服务人员姓名</span></a></h4>
|
||||||
|
<p>从列表中选择实际发送消息的服务人员:</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>💡 提示:请根据聊天记录中的昵称或头像确认姓名。</p>
|
||||||
|
</blockquote>
|
||||||
|
<h4 id="_3-行为事由" tabindex="-1"><a class="header-anchor" href="#_3-行为事由"><span>3. 行为事由</span></a></h4>
|
||||||
|
<p>简要描述行为原因</p>
|
||||||
|
<h4 id="_4-凭证上传" tabindex="-1"><a class="header-anchor" href="#_4-凭证上传"><span>4. 凭证上传</span></a></h4>
|
||||||
|
<p>点击「点击上传」,上传相关证据:</p>
|
||||||
|
<ul>
|
||||||
|
<li>聊天截图</li>
|
||||||
|
<li>对话记录</li>
|
||||||
|
<li>其他支持材料</li>
|
||||||
|
</ul>
|
||||||
|
<blockquote>
|
||||||
|
<p>🔍 建议:上传包含时间戳和完整上下文的截图,便于审核。</p>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
<h3 id="步骤-5-提交记录" tabindex="-1"><a class="header-anchor" href="#步骤-5-提交记录"><span>步骤 5:提交记录</span></a></h3>
|
||||||
|
<p>填写完毕后,点击「<strong>提交记录</strong>」按钮。</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>⚠️ 注意:提交后将由专人核验真实性,<strong>暂不支持修改</strong>,请谨慎提交。</p>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
<h2 id="三、注意事项" tabindex="-1"><a class="header-anchor" href="#三、注意事项"><span>三、注意事项</span></a></h2>
|
||||||
|
<ul>
|
||||||
|
<li>仅针对 <strong>服务人员</strong> 发送的消息进行记录,非服务人员行为不纳入。</li>
|
||||||
|
<li>每条记录需基于具体事实,避免主观臆断。</li>
|
||||||
|
<li>若发现同一行为多次出现,可分别记录不同时间段的情况。</li>
|
||||||
|
<li>所有记录将用于服务质量评估与员工成长反馈。</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/changelog.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/changelog.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/changelog.html\",\"title\":\"更新日志\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1768282379000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":9}],\"changelog\":[{\"hash\":\"66f79e6de026448817b55bd6969c15fd05e5a53c\",\"time\":1768282379000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"e33125e761c68b1bfc4fe2e521992fbf42c49f20\",\"time\":1768184350000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"acc531138f97433b765b2d0a43f9edb90f646da1\",\"time\":1765524799000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"第一版\"},{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"0d2f55f94a3eee13f09e8cc2505c98c31ef6437a\",\"time\":1764209898000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"6e27dcce01edcc47b1f9ceaf1fe1ec4485400ef7\",\"time\":1763004968000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"7799842e4c8bfd3bbd24d9cbc89c8ac4c28c918b\",\"time\":1761103662000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新\"}]},\"filePathRelative\":\"posts/changelog.md\"}")
|
||||||
|
export { comp, data }
|
||||||
80
docs/.vuepress/.temp/pages/posts/changelog.html.vue
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<template><div><h1 id="更新日志" tabindex="-1"><a class="header-anchor" href="#更新日志"><span>更新日志</span></a></h1>
|
||||||
|
<h2 id="_2026年1月" tabindex="-1"><a class="header-anchor" href="#_2026年1月"><span>2026年1月</span></a></h2>
|
||||||
|
<h3 id="_2026-01-12" tabindex="-1"><a class="header-anchor" href="#_2026-01-12"><span>2026-01-12</span></a></h3>
|
||||||
|
<h4 id="更新" tabindex="-1"><a class="header-anchor" href="#更新"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/helpCenter.html#%E4%B8%89%E3%80%81dma%E7%94%A8%E6%88%B7%E5%8F%91%E8%B4%A7%E5%8F%8A%E6%8D%A2%E8%B4%A7%E6%B5%81%E7%A8%8B-v2" target="_blank" rel="noopener noreferrer">dma用户发货及换货流程-v2</a>:dma用户发货及换货流程更新。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2026-01-09" tabindex="-1"><a class="header-anchor" href="#_2026-01-09"><span>2026-01-09</span></a></h3>
|
||||||
|
<h4 id="新增" tabindex="-1"><a class="header-anchor" href="#新增"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/behaviorRecord.html" target="_blank" rel="noopener noreferrer">服务人员行为记录</a>:服务人员行为记录,可根据服务人员的行为进行记录,后续根据对应行为进行打分。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年12月" tabindex="-1"><a class="header-anchor" href="#_2025年12月"><span>2025年12月</span></a></h2>
|
||||||
|
<h3 id="_2025-12-23" tabindex="-1"><a class="header-anchor" href="#_2025-12-23"><span>2025-12-23</span></a></h3>
|
||||||
|
<h4 id="新增-1" tabindex="-1"><a class="header-anchor" href="#新增-1"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/appCorrelation.html#%E4%B8%89%E3%80%81%E5%8D%8E%E4%B8%BA%E7%BA%AF%E8%A1%80%E9%B8%BF%E8%92%99" target="_blank" rel="noopener noreferrer">华为纯血鸿蒙</a>:华为纯血鸿蒙中安装友福同享APP操作说明,以及打开蓝牙操作,方便使用体脂称。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-11" tabindex="-1"><a class="header-anchor" href="#_2025-12-11"><span>2025-12-11</span></a></h3>
|
||||||
|
<h4 id="更新-1" tabindex="-1"><a class="header-anchor" href="#更新-1"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/overview.html#%E4%BA%8C-%E5%90%88%E5%90%8C%E7%AD%BE%E7%BD%B2%E4%B8%8E%E7%BE%A4%E8%81%8A%E6%90%AD%E5%BB%BA%E9%98%B6%E6%AE%B5" target="_blank" rel="noopener noreferrer">线下合同签署更新</a>:线下合同增加说明,需要双方签署在执行后续步骤。</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="新增-2" tabindex="-1"><a class="header-anchor" href="#新增-2"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/appCorrelation.html#%E5%9B%9B%E3%80%81%E6%99%BA%E8%83%BD%E6%89%8B%E7%8E%AF%E5%B0%8F%E7%9F%A5%E8%AF%86%E5%88%86%E4%BA%AB" target="_blank" rel="noopener noreferrer">手环小知识</a>:新增手环小知识,对手环问题进行说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-10" tabindex="-1"><a class="header-anchor" href="#_2025-12-10"><span>2025-12-10</span></a></h3>
|
||||||
|
<h4 id="新增-3" tabindex="-1"><a class="header-anchor" href="#新增-3"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/appCorrelation.html#_9-%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%99%BA%E8%83%BD%E6%89%8B%E7%8E%AF%E6%97%A0%E6%B3%95%E5%86%8D%E5%A2%83%E5%A4%96%E7%89%88%E6%B5%81%E7%95%85%E4%BD%BF%E7%94%A8" target="_blank" rel="noopener noreferrer">苹果手机智能手环无法再境外版流畅使用</a>:新增了苹果手机境外版智能手环因为时区问题无法再流畅使用的解决方法</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/appCorrelation.html#_10-dma%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91%E4%BC%9A%E8%AE%AE-%E6%9C%8980-%E7%94%A8%E6%88%B7%E6%97%A0%E6%B3%95%E9%A1%BA%E5%88%A9%E8%BF%9B%E5%85%A5%E4%BC%9A%E8%AE%AE%E5%AE%A4%E3%80%82" target="_blank" rel="noopener noreferrer">dma用户使用腾讯视频会议</a>:新增了dma用户使用腾讯视频会议详情说明</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-3" tabindex="-1"><a class="header-anchor" href="#_2025-12-3"><span>2025-12-3</span></a></h3>
|
||||||
|
<h4 id="新增-4" tabindex="-1"><a class="header-anchor" href="#新增-4"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/agent.html" target="_blank" rel="noopener noreferrer">代理商添加方式</a>:新增了有关如何添加代理商的说明。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/userServiceProcess.html" target="_blank" rel="noopener noreferrer">用户服务流程说明</a>:新增了详细的用户服务流程说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年11月" tabindex="-1"><a class="header-anchor" href="#_2025年11月"><span>2025年11月</span></a></h2>
|
||||||
|
<h3 id="_2025-11-26" tabindex="-1"><a class="header-anchor" href="#_2025-11-26"><span>2025-11-26</span></a></h3>
|
||||||
|
<h4 id="新增-5" tabindex="-1"><a class="header-anchor" href="#新增-5"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/examReservation.html" target="_blank" rel="noopener noreferrer">健康DMA人体驾照考试报名操作指南</a>:新增了关于如何报名参加健康DMA人体驾照考试的操作指南。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule.html#%E5%85%AD%E3%80%81dma%E4%BB%B7%E6%A0%BC%E6%9B%B4%E6%96%B0" target="_blank" rel="noopener noreferrer">DMA价格更新</a>:自11月24日起,DMA的价格进行了调整。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-18" tabindex="-1"><a class="header-anchor" href="#_2025-11-18"><span>2025-11-18</span></a></h3>
|
||||||
|
<h4 id="新增-6" tabindex="-1"><a class="header-anchor" href="#新增-6"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule.html#%E4%BA%8C%E3%80%81%E8%90%A5%E5%85%BB%E7%B4%A0%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95-%E5%BF%AB%E6%8D%B7%E5%9B%BE%E7%89%87%E6%9F%A5%E6%89%BE%E4%B8%8E%E5%8F%91%E9%80%81" target="_blank" rel="noopener noreferrer">DMA相关-营养素使用方法”快捷图片查找与发送</a>:增加了快捷图片查找和发送功能,方便用户查询营养素使用方法。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule#%E4%B8%89%E3%80%81%E5%A4%8D%E7%9B%98%E8%AF%84%E4%BC%B0" target="_blank" rel="noopener noreferrer">DMA相关-复盘评估</a>:方案结束后对用户的复盘评估,分别设置了3天和60天的评估表。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule#%E5%9B%9B%E3%80%81%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E6%96%B9%E6%A1%88%E8%B5%B7%E5%A7%8B%E6%97%A5%E4%B8%8E%E7%BB%93%E6%9D%9F%E6%97%A5" target="_blank" rel="noopener noreferrer">DMA相关-用户方案起始日与结束日</a>:涉及用户方案的开始和结束日期设定,与服务费挂钩,需副教练操作。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule#%E4%BA%94%E3%80%81%E7%94%A8%E6%88%B7%E4%B8%8A%E4%BC%A0%E6%95%B0%E6%8D%AE%E6%9F%A5%E7%9C%8B" target="_blank" rel="noopener noreferrer">DMA相关-用户上传数据查看</a>:提供用户上传的数据查看说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-13" tabindex="-1"><a class="header-anchor" href="#_2025-11-13"><span>2025-11-13</span></a></h3>
|
||||||
|
<h4 id="新增-7" tabindex="-1"><a class="header-anchor" href="#新增-7"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/DMAModule.html#%E4%B8%80%E3%80%81%E7%89%B9%E6%AE%8A%E4%BB%B7%E6%A0%BC%E8%B4%AD%E4%B9%B0-20000%E5%8F%8A25800" target="_blank" rel="noopener noreferrer">DMA相关-特殊价格购买</a>:允许以特殊价格(20000及25800)购买,可以设置规格限制。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-06" tabindex="-1"><a class="header-anchor" href="#_2025-11-06"><span>2025-11-06</span></a></h3>
|
||||||
|
<h4 id="更新-2" tabindex="-1"><a class="header-anchor" href="#更新-2"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/appCorrelation.html#%E4%B8%80%E3%80%81app%E6%B6%88%E6%81%AF%E9%80%9A%E7%9F%A5" target="_blank" rel="noopener noreferrer">APP相关-消息通知</a>:增加了开启APP通知消息的方式以及支持的平台,便于快速了解是否支持APP消息通知。</li>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/helpCenter.html#_18-%E5%85%B3%E4%BA%8E%E9%9A%90%E7%A7%81%E8%B4%A6%E5%8F%B7" target="_blank" rel="noopener noreferrer">DMA隐私账号相关</a>:对DMA隐私账号相关内容进行了更新。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-04" tabindex="-1"><a class="header-anchor" href="#_2025-11-04"><span>2025-11-04</span></a></h3>
|
||||||
|
<h4 id="更新-3" tabindex="-1"><a class="header-anchor" href="#更新-3"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/go_html/dma_handbook/posts/helpCenter.html#%E4%B8%89-dma%E9%80%9A%E7%94%A8%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86%E5%8E%9F%E5%88%99-2025-11-03%E6%9B%B4%E6%96%B0" target="_blank" rel="noopener noreferrer">DMA通用问题处理原则(2025-11-03更新)</a>:更新了DMA相关的通用问题处理原则。</li>
|
||||||
|
<li>增加了<a href="/go_html/dma_handbook/posts/chiefCoach.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83" target="_blank" rel="noopener noreferrer">主教练-信息保密规范</a>、<a href="/go_html/dma_handbook/posts/assistantCoach.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83" target="_blank" rel="noopener noreferrer">副教练-信息保密规范</a>、<a href="/go_html/dma_handbook/posts/service.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83" target="_blank" rel="noopener noreferrer">客服-信息保密规范</a>。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年10月" tabindex="-1"><a class="header-anchor" href="#_2025年10月"><span>2025年10月</span></a></h2>
|
||||||
|
<h3 id="_2025-10-17" tabindex="-1"><a class="header-anchor" href="#_2025-10-17"><span>2025-10-17</span></a></h3>
|
||||||
|
<h4 id="更新-4" tabindex="-1"><a class="header-anchor" href="#更新-4"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/#%E9%99%84%E5%BD%95-%E6%B5%81%E7%A8%8B%E8%8A%82%E7%82%B9%E6%97%B6%E6%95%88%E6%B1%87%E6%80%BB%E8%A1%A8" target="_blank" rel="noopener noreferrer">首页-附录</a>:对流程节点时效汇总表进行了调整。</li>
|
||||||
|
</ul>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/changelogV2.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/changelogV2.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/changelogV2.html\",\"title\":\"更新日志\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1773297785000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":11}],\"changelog\":[{\"hash\":\"263c4a87d2a7384f0740862be100870b4396fc14\",\"time\":1773297785000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"88720577da1423f5da911e33d2d9a6e5f8888191\",\"time\":1770945819000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"66f79e6de026448817b55bd6969c15fd05e5a53c\",\"time\":1768282379000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"e33125e761c68b1bfc4fe2e521992fbf42c49f20\",\"time\":1768184350000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"acc531138f97433b765b2d0a43f9edb90f646da1\",\"time\":1765524799000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"第一版\"},{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"0d2f55f94a3eee13f09e8cc2505c98c31ef6437a\",\"time\":1764209898000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"6e27dcce01edcc47b1f9ceaf1fe1ec4485400ef7\",\"time\":1763004968000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"7799842e4c8bfd3bbd24d9cbc89c8ac4c28c918b\",\"time\":1761103662000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新\"}]},\"filePathRelative\":\"posts/changelogV2.md\"}")
|
||||||
|
export { comp, data }
|
||||||
97
docs/.vuepress/.temp/pages/posts/changelogV2.html.vue
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<template><div><h1 id="更新日志" tabindex="-1"><a class="header-anchor" href="#更新日志"><span>更新日志</span></a></h1>
|
||||||
|
<h2 id="_2026年3月" tabindex="-1"><a class="header-anchor" href="#_2026年3月"><span>2026年3月</span></a></h2>
|
||||||
|
<h3 id="_2026-03-10" tabindex="-1"><a class="header-anchor" href="#_2026-03-10"><span>2026-03-10</span></a></h3>
|
||||||
|
<h4 id="更新" tabindex="-1"><a class="header-anchor" href="#更新"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/helpCenter.html#_2-%E5%8F%8B%E7%A6%8F%E5%95%86%E5%9F%8E%E8%AE%A2%E5%8D%95%E6%9F%A5%E7%9C%8B%E3%80%81%E5%92%A8%E8%AF%A2%E6%8C%87%E5%BC%95">友福商城订单查看、咨询指引</RouteLink>:友福商城增加订单查看、咨询指引。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2026年2月" tabindex="-1"><a class="header-anchor" href="#_2026年2月"><span>2026年2月</span></a></h2>
|
||||||
|
<h3 id="_2026-02-12" tabindex="-1"><a class="header-anchor" href="#_2026-02-12"><span>2026-02-12</span></a></h3>
|
||||||
|
<h4 id="更新-1" tabindex="-1"><a class="header-anchor" href="#更新-1"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/shareBenefit.html#%E4%BA%94%E3%80%81%E5%BC%80%E7%A5%A8%E6%8C%87%E5%BC%95">分润提现增加开票指引</RouteLink>:分润分成中增加开票指引,对个人和深圳公司如何开票进行说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2026-02-09" tabindex="-1"><a class="header-anchor" href="#_2026-02-09"><span>2026-02-09</span></a></h3>
|
||||||
|
<h4 id="更新-2" tabindex="-1"><a class="header-anchor" href="#更新-2"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>增加右上角搜索功能</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2026年1月" tabindex="-1"><a class="header-anchor" href="#_2026年1月"><span>2026年1月</span></a></h2>
|
||||||
|
<h3 id="_2026-01-12" tabindex="-1"><a class="header-anchor" href="#_2026-01-12"><span>2026-01-12</span></a></h3>
|
||||||
|
<h4 id="更新-3" tabindex="-1"><a class="header-anchor" href="#更新-3"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/helpCenter.html#%E4%B8%89%E3%80%81dma%E7%94%A8%E6%88%B7%E5%8F%91%E8%B4%A7%E5%8F%8A%E6%8D%A2%E8%B4%A7%E6%B5%81%E7%A8%8B-v2">dma用户发货及换货流程-v2</RouteLink>:dma用户发货及换货流程更新。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2026-01-09" tabindex="-1"><a class="header-anchor" href="#_2026-01-09"><span>2026-01-09</span></a></h3>
|
||||||
|
<h4 id="新增" tabindex="-1"><a class="header-anchor" href="#新增"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/behaviorRecord.html">服务人员行为记录</RouteLink>:服务人员行为记录,可根据服务人员的行为进行记录,后续根据对应行为进行打分。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年12月" tabindex="-1"><a class="header-anchor" href="#_2025年12月"><span>2025年12月</span></a></h2>
|
||||||
|
<h3 id="_2025-12-23" tabindex="-1"><a class="header-anchor" href="#_2025-12-23"><span>2025-12-23</span></a></h3>
|
||||||
|
<h4 id="新增-1" tabindex="-1"><a class="header-anchor" href="#新增-1"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/appCorrelation.html#%E4%B8%89%E3%80%81%E5%8D%8E%E4%B8%BA%E7%BA%AF%E8%A1%80%E9%B8%BF%E8%92%99">华为纯血鸿蒙</RouteLink>:华为纯血鸿蒙中安装友福同享APP操作说明,以及打开蓝牙操作,方便使用体脂称。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-11" tabindex="-1"><a class="header-anchor" href="#_2025-12-11"><span>2025-12-11</span></a></h3>
|
||||||
|
<h4 id="更新-4" tabindex="-1"><a class="header-anchor" href="#更新-4"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/overview.html#%E4%BA%8C-%E5%90%88%E5%90%8C%E7%AD%BE%E7%BD%B2%E4%B8%8E%E7%BE%A4%E8%81%8A%E6%90%AD%E5%BB%BA%E9%98%B6%E6%AE%B5">线下合同签署更新</RouteLink>:线下合同增加说明,需要双方签署在执行后续步骤。</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="新增-2" tabindex="-1"><a class="header-anchor" href="#新增-2"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/appCorrelation.html#%E5%9B%9B%E3%80%81%E6%99%BA%E8%83%BD%E6%89%8B%E7%8E%AF%E5%B0%8F%E7%9F%A5%E8%AF%86%E5%88%86%E4%BA%AB">手环小知识</RouteLink>:新增手环小知识,对手环问题进行说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-10" tabindex="-1"><a class="header-anchor" href="#_2025-12-10"><span>2025-12-10</span></a></h3>
|
||||||
|
<h4 id="新增-3" tabindex="-1"><a class="header-anchor" href="#新增-3"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/appCorrelation.html#_9-%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%99%BA%E8%83%BD%E6%89%8B%E7%8E%AF%E6%97%A0%E6%B3%95%E5%86%8D%E5%A2%83%E5%A4%96%E7%89%88%E6%B5%81%E7%95%85%E4%BD%BF%E7%94%A8">苹果手机智能手环无法再境外版流畅使用</RouteLink>:新增了苹果手机境外版智能手环因为时区问题无法再流畅使用的解决方法</li>
|
||||||
|
<li><RouteLink to="/posts/appCorrelation.html#_10-dma%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91%E4%BC%9A%E8%AE%AE-%E6%9C%8980-%E7%94%A8%E6%88%B7%E6%97%A0%E6%B3%95%E9%A1%BA%E5%88%A9%E8%BF%9B%E5%85%A5%E4%BC%9A%E8%AE%AE%E5%AE%A4%E3%80%82">dma用户使用腾讯视频会议</RouteLink>:新增了dma用户使用腾讯视频会议详情说明</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-12-3" tabindex="-1"><a class="header-anchor" href="#_2025-12-3"><span>2025-12-3</span></a></h3>
|
||||||
|
<h4 id="新增-4" tabindex="-1"><a class="header-anchor" href="#新增-4"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/agent.html">代理商添加方式</RouteLink>:新增了有关如何添加代理商的说明。</li>
|
||||||
|
<li><RouteLink to="/posts/userServiceProcess.html">用户服务流程说明</RouteLink>:新增了详细的用户服务流程说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年11月" tabindex="-1"><a class="header-anchor" href="#_2025年11月"><span>2025年11月</span></a></h2>
|
||||||
|
<h3 id="_2025-11-26" tabindex="-1"><a class="header-anchor" href="#_2025-11-26"><span>2025-11-26</span></a></h3>
|
||||||
|
<h4 id="新增-5" tabindex="-1"><a class="header-anchor" href="#新增-5"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/examReservation.html">健康DMA人体驾照考试报名操作指南</RouteLink>:新增了关于如何报名参加健康DMA人体驾照考试的操作指南。</li>
|
||||||
|
<li><RouteLink to="/posts/DMAModule.html#%E5%85%AD%E3%80%81dma%E4%BB%B7%E6%A0%BC%E6%9B%B4%E6%96%B0">DMA价格更新</RouteLink>:自11月24日起,DMA的价格进行了调整。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-18" tabindex="-1"><a class="header-anchor" href="#_2025-11-18"><span>2025-11-18</span></a></h3>
|
||||||
|
<h4 id="新增-6" tabindex="-1"><a class="header-anchor" href="#新增-6"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/DMAModule.html#%E4%BA%8C%E3%80%81%E8%90%A5%E5%85%BB%E7%B4%A0%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95-%E5%BF%AB%E6%8D%B7%E5%9B%BE%E7%89%87%E6%9F%A5%E6%89%BE%E4%B8%8E%E5%8F%91%E9%80%81">DMA相关-营养素使用方法”快捷图片查找与发送</RouteLink>:增加了快捷图片查找和发送功能,方便用户查询营养素使用方法。</li>
|
||||||
|
<li><a href="/dma_handbook/posts/DMAModule#%E4%B8%89%E3%80%81%E5%A4%8D%E7%9B%98%E8%AF%84%E4%BC%B0">DMA相关-复盘评估</a>:方案结束后对用户的复盘评估,分别设置了3天和60天的评估表。</li>
|
||||||
|
<li><a href="/dma_handbook/posts/DMAModule#%E5%9B%9B%E3%80%81%E8%AE%BE%E7%BD%AE%E7%94%A8%E6%88%B7%E6%96%B9%E6%A1%88%E8%B5%B7%E5%A7%8B%E6%97%A5%E4%B8%8E%E7%BB%93%E6%9D%9F%E6%97%A5">DMA相关-用户方案起始日与结束日</a>:涉及用户方案的开始和结束日期设定,与服务费挂钩,需副教练操作。</li>
|
||||||
|
<li><a href="/dma_handbook/posts/DMAModule#%E4%BA%94%E3%80%81%E7%94%A8%E6%88%B7%E4%B8%8A%E4%BC%A0%E6%95%B0%E6%8D%AE%E6%9F%A5%E7%9C%8B">DMA相关-用户上传数据查看</a>:提供用户上传的数据查看说明。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-13" tabindex="-1"><a class="header-anchor" href="#_2025-11-13"><span>2025-11-13</span></a></h3>
|
||||||
|
<h4 id="新增-7" tabindex="-1"><a class="header-anchor" href="#新增-7"><span>新增</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/DMAModule.html#%E4%B8%80%E3%80%81%E7%89%B9%E6%AE%8A%E4%BB%B7%E6%A0%BC%E8%B4%AD%E4%B9%B0-20000%E5%8F%8A25800">DMA相关-特殊价格购买</RouteLink>:允许以特殊价格(20000及25800)购买,可以设置规格限制。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-06" tabindex="-1"><a class="header-anchor" href="#_2025-11-06"><span>2025-11-06</span></a></h3>
|
||||||
|
<h4 id="更新-5" tabindex="-1"><a class="header-anchor" href="#更新-5"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/appCorrelation.html#%E4%B8%80%E3%80%81app%E6%B6%88%E6%81%AF%E9%80%9A%E7%9F%A5">APP相关-消息通知</RouteLink>:增加了开启APP通知消息的方式以及支持的平台,便于快速了解是否支持APP消息通知。</li>
|
||||||
|
<li><RouteLink to="/posts/helpCenter.html#_18-%E5%85%B3%E4%BA%8E%E9%9A%90%E7%A7%81%E8%B4%A6%E5%8F%B7">DMA隐私账号相关</RouteLink>:对DMA隐私账号相关内容进行了更新。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2025-11-04" tabindex="-1"><a class="header-anchor" href="#_2025-11-04"><span>2025-11-04</span></a></h3>
|
||||||
|
<h4 id="更新-6" tabindex="-1"><a class="header-anchor" href="#更新-6"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><RouteLink to="/posts/helpCenter.html#%E4%B8%89-dma%E9%80%9A%E7%94%A8%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86%E5%8E%9F%E5%88%99-2025-11-03%E6%9B%B4%E6%96%B0">DMA通用问题处理原则(2025-11-03更新)</RouteLink>:更新了DMA相关的通用问题处理原则。</li>
|
||||||
|
<li>增加了<RouteLink to="/posts/chiefCoach.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83">主教练-信息保密规范</RouteLink>、<RouteLink to="/posts/assistantCoach.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83">副教练-信息保密规范</RouteLink>、<RouteLink to="/posts/service.html#%E4%BF%A1%E6%81%AF%E4%BF%9D%E5%AF%86%E8%A7%84%E8%8C%83">客服-信息保密规范</RouteLink>。</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="_2025年10月" tabindex="-1"><a class="header-anchor" href="#_2025年10月"><span>2025年10月</span></a></h2>
|
||||||
|
<h3 id="_2025-10-17" tabindex="-1"><a class="header-anchor" href="#_2025-10-17"><span>2025-10-17</span></a></h3>
|
||||||
|
<h4 id="更新-7" tabindex="-1"><a class="header-anchor" href="#更新-7"><span>更新</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/#%E9%99%84%E5%BD%95-%E6%B5%81%E7%A8%8B%E8%8A%82%E7%82%B9%E6%97%B6%E6%95%88%E6%B1%87%E6%80%BB%E8%A1%A8" target="_blank" rel="noopener noreferrer">首页-附录</a>:对流程节点时效汇总表进行了调整。</li>
|
||||||
|
</ul>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/chiefCoach.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/chiefCoach.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/chiefCoach.html\",\"title\":\"主教练\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1766471007000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":5}],\"changelog\":[{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"8f0f08771e3748002699aa33318dbae7e39a397f\",\"time\":1760424178000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新职责\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/chiefCoach.md\"}")
|
||||||
|
export { comp, data }
|
||||||
43
docs/.vuepress/.temp/pages/posts/chiefCoach.html.vue
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<template><div><h1 id="主教练" tabindex="-1"><a class="header-anchor" href="#主教练"><span>主教练</span></a></h1>
|
||||||
|
<h2 id="工作职责与流程" tabindex="-1"><a class="header-anchor" href="#工作职责与流程"><span>工作职责与流程</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>指导副教练怎么做一个合格的副教练(含正确引导用户使用方案、服务话术、及时回复用户咨询的问题等)</li>
|
||||||
|
<li>如遇到特殊情况问题,副教练无法进行正确回答,主教练需要直接进行回复用户</li>
|
||||||
|
<li>根据用户的体检报告和身体反馈,提供具体的指导建议</li>
|
||||||
|
<li>审核客服编辑的餐单,并设置每日餐单</li>
|
||||||
|
<li>带领主导用户群的视频会议</li>
|
||||||
|
<li>常与用户互动</li>
|
||||||
|
<li>节假日送上祝福和关心问候</li>
|
||||||
|
<li>方案结束后,完成用户第3天、60天的《复盘评估表》</li>
|
||||||
|
<li>方案结束后,完成内部教练的《复盘服务评价表》</li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="dma职责" tabindex="-1"><a class="header-anchor" href="#dma职责"><span>DMA职责</span></a></h2>
|
||||||
|
<h3 id="解答专业疑问" tabindex="-1"><a class="header-anchor" href="#解答专业疑问"><span>解答专业疑问</span></a></h3>
|
||||||
|
<p>客户在群内 / 私信咨询运动动作、执行细节等问题时→30 分钟内回应。</p>
|
||||||
|
<p>解答需专业准确,避免提供错误指导。</p>
|
||||||
|
<p>客户对解答存疑(如 “与之前说法不一致”)→立即核对历史记录,若确有偏差,致歉并重新解释:“之前表述不够准确,正确方式是……”。</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/5323081878556e45dd22b21de9cfe3e8.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
<h2 id="信息保密规范" tabindex="-1"><a class="header-anchor" href="#信息保密规范"><span>信息保密规范</span></a></h2>
|
||||||
|
<h3 id="_1-保密范围" tabindex="-1"><a class="header-anchor" href="#_1-保密范围"><span>1. 保密范围</span></a></h3>
|
||||||
|
<p>所有工作人员必须严格保密用户在服务过程中产生的全部个人信息,包括但不限于:</p>
|
||||||
|
<ul>
|
||||||
|
<li>用户基本信息:姓名、身份证号、联系方式等;</li>
|
||||||
|
<li>职业与职务信息;</li>
|
||||||
|
<li>体检报告、健康问卷及任何身体/健康数据;</li>
|
||||||
|
<li>个人方案、服务群聊天记录、数据变化、《方案后问卷调查表》等内部资料。</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>可分享内容</strong>:本人或家人身体情况、照片;公司已正式发布的对外宣传画册。</p>
|
||||||
|
<h3 id="_2-授权要求" tabindex="-1"><a class="header-anchor" href="#_2-授权要求"><span>2. 授权要求</span></a></h3>
|
||||||
|
<p>因业务、宣传等任何目的需对外披露用户相关信息时,必须:</p>
|
||||||
|
<ol>
|
||||||
|
<li>事先取得用户本人<strong>书面授权</strong>;</li>
|
||||||
|
<li>对分享内容进行<strong>充分匿名化</strong>处理。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_3-责任与义务" tabindex="-1"><a class="header-anchor" href="#_3-责任与义务"><span>3. 责任与义务</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>保密义务在方案结束后仍然有效;</li>
|
||||||
|
<li>任何违反本规范的行为均视为<strong>严重违纪</strong>,公司保留追究<strong>法律责任</strong>的权利。</li>
|
||||||
|
</ul>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/examReservation.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/examReservation.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/examReservation.html\",\"title\":\"🧾 健康DMA人体驾照考试报名操作指南\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1765358621000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":2}],\"changelog\":[{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"0d2f55f94a3eee13f09e8cc2505c98c31ef6437a\",\"time\":1764209898000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/examReservation.md\"}")
|
||||||
|
export { comp, data }
|
||||||
43
docs/.vuepress/.temp/pages/posts/examReservation.html.vue
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<template><div><h1 id="🧾-健康dma人体驾照考试报名操作指南" tabindex="-1"><a class="header-anchor" href="#🧾-健康dma人体驾照考试报名操作指南"><span>🧾 健康DMA人体驾照考试报名操作指南</span></a></h1>
|
||||||
|
<p>欢迎报名健康DMA人体驾照考试!请按照以下步骤完成报名流程,预约考试:</p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="📝-第一步-购买指定服务" tabindex="-1"><a class="header-anchor" href="#📝-第一步-购买指定服务"><span>📝 第一步:购买指定服务</span></a></h2>
|
||||||
|
<p>进入「商品详情」页面,请确保选择以下内容:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>地区</strong>:根据您的所在地选择对应城市(如:南昌)</li>
|
||||||
|
<li><strong>规格</strong>:请务必选择 <strong>“服务及双证”</strong></li>
|
||||||
|
<li><strong>金额</strong>:确认金额后,点击 <strong>“立即购买”</strong></li>
|
||||||
|
</ul>
|
||||||
|
<p>✅ 购买前请勾选 <strong>《健康DMA人体驾照服务协议》</strong></p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/26/c9010093d3f1f865a80d89f5b3e960ea.png" alt="img"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="👥-第二步-进入咨询群" tabindex="-1"><a class="header-anchor" href="#👥-第二步-进入咨询群"><span>👥 第二步:进入咨询群</span></a></h2>
|
||||||
|
<p>购买成功后,系统将自动生成 <strong>“双证咨询服务器”</strong> 群聊。<br>
|
||||||
|
请在「消息中心」中找到该群并进入。</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/26/607319a87ceb4905b7a3280af84f5b65.png" alt="img">
|
||||||
|
<img src="https://images.health.ufutx.com/202511/26/81331b034760becfa11d0086dfcde7d5.png" alt="img"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🗓️-第三步-预约考试" tabindex="-1"><a class="header-anchor" href="#🗓️-第三步-预约考试"><span>🗓️ 第三步:预约考试</span></a></h2>
|
||||||
|
<p>在群聊中点击 <strong>“考试申请”</strong>,进入考试预约页面,请依次填写:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>姓名</strong>:请输入真实姓名</li>
|
||||||
|
<li><strong>手机号</strong>:请输入11位手机号码</li>
|
||||||
|
<li><strong>验证码</strong>:点击“获取验证码”并填写</li>
|
||||||
|
<li><strong>预约科目1</strong>:选择“身心健康管理师”(必选科目)</li>
|
||||||
|
<li><strong>预约时间1</strong>:选择考试月份</li>
|
||||||
|
<li><strong>预约科目2</strong>:选择“AI健康管理师”(自助选择科目)</li>
|
||||||
|
<li><strong>预约时间2</strong>:选择考试月份</li>
|
||||||
|
</ul>
|
||||||
|
<p>填写完成后,点击 <strong>“确认预约”</strong></p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/26/def4b56b23aeed032f2878ca2c249a47.png" alt="img"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="✅-第四步-预约成功" tabindex="-1"><a class="header-anchor" href="#✅-第四步-预约成功"><span>✅ 第四步:预约成功</span></a></h2>
|
||||||
|
<p>提交后系统将显示您的预约信息,包括考试科目与对应时间,点击 <strong>“知道了”</strong> 即完成全部流程。</p>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202511/26/b7b2770e4495ff1e18ade115d27dd6b4.png" alt="img"></p>
|
||||||
|
<hr>
|
||||||
|
<p>如有任何问题,欢迎在群里中提问,我们将尽快为您解答。<br>
|
||||||
|
祝您考试顺利!🚀</p>
|
||||||
|
<hr>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/helpCenter.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/helpCenter.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/helpCenter.html\",\"title\":\"常见问题\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1774516081000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":11}],\"changelog\":[{\"hash\":\"a7258d9980759323c9eba6e62638cab1c17523f3\",\"time\":1774516081000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"长图裁剪和查看\"},{\"hash\":\"263c4a87d2a7384f0740862be100870b4396fc14\",\"time\":1773297785000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"4286fa07f0adaee3f0095ab40ace1807d19994d4\",\"time\":1770343928000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"登录功能\"},{\"hash\":\"66f79e6de026448817b55bd6969c15fd05e5a53c\",\"time\":1768282379000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"e33125e761c68b1bfc4fe2e521992fbf42c49f20\",\"time\":1768184350000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"6e27dcce01edcc47b1f9ceaf1fe1ec4485400ef7\",\"time\":1763004968000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"c8086f8415d2ad3257a016a0e2e80012dbf715f5\",\"time\":1762244574000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"169908d04e7a4ef15ffea1d8ca58004c9c7451c4\",\"time\":1762222814000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"8f0f08771e3748002699aa33318dbae7e39a397f\",\"time\":1760424178000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新职责\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/helpCenter.md\"}")
|
||||||
|
export { comp, data }
|
||||||
406
docs/.vuepress/.temp/pages/posts/helpCenter.html.vue
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
<template><div><h1 id="常见问题" tabindex="-1"><a class="header-anchor" href="#常见问题"><span>常见问题</span></a></h1>
|
||||||
|
<h2 id="一、健康业务类" tabindex="-1"><a class="header-anchor" href="#一、健康业务类"><span>一、健康业务类</span></a></h2>
|
||||||
|
<h3 id="_1-友福智能手环指示灯说明" tabindex="-1"><a class="header-anchor" href="#_1-友福智能手环指示灯说明"><span>1. 友福智能手环指示灯说明</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="7400" src="https://images.health.ufutx.com/202509/26/58d8d0142b9091488898439971f10a13.jpeg"></LongPicSplit>
|
||||||
|
<h3 id="_2-手环为什么使用type-c的充电接口" tabindex="-1"><a class="header-anchor" href="#_2-手环为什么使用type-c的充电接口"><span>2. 手环为什么使用Type-C的充电接口?</span></a></h3>
|
||||||
|
<p>Type-C充电接口具备充电速度快、支持双向充电、接口可逆插等优势,能有效提升充电效率与使用便捷性,为手环提供稳定且高效的电力补给。</p>
|
||||||
|
<ul>
|
||||||
|
<li>Type-C比起USB充电接口有更强的兼容性:Type-C接口已成为移动设备最新的主流通用充电标准,目前主流电子设备品牌(例如:苹果、华为、小米、三星)均选用Type-C充电接口,无需为不同设备准备多种充电器,简化了充电设备的管理。</li>
|
||||||
|
<li>耐用性和便捷性:Type-C接口具有正反插功能,使用更方便,同时也更加耐用,减少了插拔时损坏接口的风险。</li>
|
||||||
|
<li>当前接口设计适用连接具备反充电功能的手机对手环进行充电,设备小,损耗手机电量少,不用担心手机电池损耗,随时移动充电便捷性强。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_3-手环电量怎么查看" tabindex="-1"><a class="header-anchor" href="#_3-手环电量怎么查看"><span>3. 手环电量怎么查看?</span></a></h3>
|
||||||
|
<p>您可通过以下方式查看手环电量:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>打开友福同享APP,进入「设备管理」页面,找到对应手环设备,即可查看实时电量信息。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>按下手环右侧按钮查看显示灯颜色,绿灯表示电量充足,正常使用没有问题。红灯闪烁表示电量不足,指示灯不亮表示没有电,请及时充电。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>也可以通过APP手环首页顶部电量百分比查看,电量低于30%的情况,请及时充电。</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2400" src="https://images.health.ufutx.com/202602/05/ef2e5a95d213ba80b022eff89877fd1c.jpg"></LongPicSplit>
|
||||||
|
<p>后续会规划低电量预警警告提醒功能,请耐心等待。</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_4-手环正确佩戴方式是什么" tabindex="-1"><a class="header-anchor" href="#_4-手环正确佩戴方式是什么"><span>4. 手环正确佩戴方式是什么?</span></a></h3>
|
||||||
|
<p>手环正确佩戴需注意以下要点:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>佩戴位置</strong>:将手环紧贴手腕内侧(远离手腕骨的一侧),确保传感器与皮肤良好接触;</li>
|
||||||
|
<li><strong>松紧度</strong>:以能插入1-2根手指为宜,避免过紧影响血液循环或过松导致数据监测不准确;</li>
|
||||||
|
<li><strong>日常调整</strong>:运动时可适当收紧,静止时可稍作放松,保持舒适。</li>
|
||||||
|
<li><strong>佩戴方式</strong> 请将手环佩戴在手腕上方,传感器放置手背一面紧贴皮肤,松紧调整至舒适状态,logo和表带置手外侧。正确佩戴有助于实时采集符合人体健康指标更准确的数据,请规范佩戴。</li>
|
||||||
|
</ul>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202408/16/d2b5ca33bd970f64a6301fa75ae2eb221723776012907.jpeg"></img></p>
|
||||||
|
<h3 id="_5-手环连接不上手机app怎么办" tabindex="-1"><a class="header-anchor" href="#_5-手环连接不上手机app怎么办"><span>5. 手环连接不上手机APP怎么办?</span></a></h3>
|
||||||
|
<p>若手环无法连接手机APP,可尝试以下步骤:</p>
|
||||||
|
<ul>
|
||||||
|
<li>1)确认是否电量充足,按下手环传感器侧面按钮显示灯亮,代表有电,红色蓝色交替 闪烁状态下显示电量不足需要及时充电。</li>
|
||||||
|
<li>2)使用手环靠近连接手机再次尝试连接。</li>
|
||||||
|
<li>3)检查当前连接手环是否被其他设备连接。</li>
|
||||||
|
<li>4)尝试关闭蓝牙后再打开蓝牙再次连接。</li>
|
||||||
|
<li>5)退出友福同享APP并重新打开或重启手机。</li>
|
||||||
|
<li>6)检查手机是否开启勿扰模式、飞行模式、省电模式、超级省电模式等非常规状态模式,解除非常规状态后,重新尝试再次连接。以上方式都连接不了的情况,请截图保存好未连接状态界面显示,检查手机系统自带蓝牙能否搜索到对应手环,联系技术团队人员协助排查解决问题,并录入BUG问题库进行追踪管理。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_6-运动步数与微信运动步数不一致怎么办" tabindex="-1"><a class="header-anchor" href="#_6-运动步数与微信运动步数不一致怎么办"><span>6. 运动步数与微信运动步数不一致怎么办?</span></a></h3>
|
||||||
|
<p>运动步数存在差异可能由以下原因导致:</p>
|
||||||
|
<ul>
|
||||||
|
<li>统计方式不同:手环与微信运动的计步算法、起始时间可能存在差异;</li>
|
||||||
|
<li>数据同步延迟:手环数据同步至APP或微信运动可能存在一定延迟,建议稍作等待后刷新查看;</li>
|
||||||
|
<li>权限设置:确认友福同享APP已授权微信运动读取步数数据。确认授权蓝牙权限,并且链接手环。</li>
|
||||||
|
<li>1)友福同享智能手环测量的是体动次数,综合全面反馈身体运动量,可以进入步数详情查看每小时体动量(步数),更能反映身体实际运动量,消耗的卡路里与实际更匹配。</li>
|
||||||
|
<li>2)微信是借助手机陀螺仪信息获得步数,且不能显示每小时的步数。没有携带手机在身边,以及将手机放置口袋或者背包情况下并不能准确计量实际走路或运动步数。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_7-睡眠时间与实际有偏差怎么办" tabindex="-1"><a class="header-anchor" href="#_7-睡眠时间与实际有偏差怎么办"><span>7. 睡眠时间与实际有偏差怎么办?</span></a></h3>
|
||||||
|
<p>若睡眠时间监测与实际不符,可尝试:</p>
|
||||||
|
<ul>
|
||||||
|
<li>检查佩戴位置:确保手环佩戴紧密,传感器能准确识别体动;</li>
|
||||||
|
<li>手动修正:在友福同享APP的「睡眠记录」中,手动调整入睡与起床时间;</li>
|
||||||
|
<li>反馈问题:若多次出现偏差,可通过APP内「意见反馈」功能提交问题,便于技术团队优化算法。</li>
|
||||||
|
<li>1)确认睡觉佩戴过程中是否有电,按下手环右侧按钮显示灯会亮,代表有电,红色蓝色交替闪烁状态下电量不足需要及时充电。</li>
|
||||||
|
<li>2)检查连接状态,是否频繁掉线,部分手机型号比较老旧,连接适配性较弱,需要技术人员根据型号逐个排查。</li>
|
||||||
|
<li>3)睡眠时间与实际不匹配,睡觉前后短时间平静躺卧低功耗休息类睡眠状态下判定为睡眠为正常状态。若在清醒起床状态,特别是运动状态下计入睡眠状况,截图保存好界面,联系技术人员收集睡眠数据做问题追踪处理。</li>
|
||||||
|
<li>4)目前当天白天只能看到昨天18:00之后的睡眠数据,这是根据太阳落山自然生物钟规律,以及大部分人作息规律设置,会存在18:00之前连续睡眠数据看不到的情况,后续会规划可供选择的方案,比如根据连续睡眠时间来展示睡眠时长,满足特殊时间睡眠,或者昏睡等特殊人群睡眠查看需求。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_8-手环被他人绑定无法解绑怎么办" tabindex="-1"><a class="header-anchor" href="#_8-手环被他人绑定无法解绑怎么办"><span>8. 手环被他人绑定无法解绑怎么办?</span></a></h3>
|
||||||
|
<p>若手环被他人绑定,您可:</p>
|
||||||
|
<ul>
|
||||||
|
<li>联系绑定人:请对方在其手机的友福同享APP中,进入「设备管理」解除绑定;</li>
|
||||||
|
<li>强制解绑:若无法联系对方,可长按手环功能键(具体按键见手环说明书)10秒以上,恢复出厂设置后重新绑定自己的账号;</li>
|
||||||
|
<li>客服协助:若仍有问题,拨打客服热线(XXX-XXXXXXX)寻求帮助。</li>
|
||||||
|
<li>如是认识的人误操作绑定,可以先联系他本人解绑后重新绑定。</li>
|
||||||
|
<li>如是不认识的人员绑定,又无法联系到他本人的情况下,请联系技术团队,确认情况属实,后台强制解绑并重新绑定。</li>
|
||||||
|
<li>后续会规划申请解绑功能,人工审核确认本人手环是否被误绑定,人工通过解绑之后,可重新绑定对应手环,请耐心等待。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_9-首次绑定手环时-周边有好几个手环设备-不知道绑定哪个怎么办" tabindex="-1"><a class="header-anchor" href="#_9-首次绑定手环时-周边有好几个手环设备-不知道绑定哪个怎么办"><span>9. 首次绑定手环时,周边有好几个手环设备,不知道绑定哪个怎么办?</span></a></h3>
|
||||||
|
<p>首次绑定手环时,可通过以下方式识别:</p>
|
||||||
|
<ul>
|
||||||
|
<li>查看手环ID:手环屏幕通常会显示设备ID,与APP搜索列表中的ID比对;</li>
|
||||||
|
<li>闪烁提示:部分手环在被搜索时会闪烁灯光或震动,可根据提示确认;</li>
|
||||||
|
<li>重启手环:重启后重新搜索,列表中最新出现的设备大概率为您的手环。</li>
|
||||||
|
<li>请找个人少的地方,打开蓝牙,单独搜索链接自己手上的手环。后续会进行相关优化,请耐心等待。</li>
|
||||||
|
<li>规划内容包含:包装盒会提供绑定二维码一对一进行手机绑定;如二维码不在身边或者丢失情况下,可以用搜索功能进行绑定,能轻松找到自己手上尚未被绑定的手环。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_10-手环佩戴过程中出现不舒适或者发红怎么办" tabindex="-1"><a class="header-anchor" href="#_10-手环佩戴过程中出现不舒适或者发红怎么办"><span>10. 手环佩戴过程中出现不舒适或者发红怎么办?</span></a></h3>
|
||||||
|
<p>若佩戴手环出现不适或皮肤发红,建议:</p>
|
||||||
|
<ul>
|
||||||
|
<li>调整佩戴位置:避免长时间压迫同一部位,可适当移动手环位置;</li>
|
||||||
|
<li>减少佩戴时间:初次使用可短时间佩戴,逐步适应;</li>
|
||||||
|
<li>清洁手环:定期用干净软布擦拭手环与皮肤接触部位,保持干燥清洁;</li>
|
||||||
|
<li>暂停使用:若症状持续,建议暂停佩戴并咨询医生,确认是否为材质过敏。</li>
|
||||||
|
<li>我们人体本身有一个佩戴习惯问题,如果常年不佩戴东西会出现不习惯的感觉,就像佩戴手表一样,养成习惯,这种不舒适感就会减轻或者没有。佩戴超过三天或者更长,我们会感觉越来越好戴,甚至不想摘掉。部分人皮肤比较脆弱敏感,出汗多,天气下雨或者闷热情况下,长期不移动手环,可能出现发红等情况。不用担心,用湿纸巾擦拭清洁传感器接触皮肤面一两次一天,保持好卫生,经常移动一下传感器或者两个手轮着佩戴,保持佩戴贴肤但不紧绷的状态,则不会发生这类情况。</li>
|
||||||
|
<li>手环表带颜色和材质后续会有更多选择性,以满足不同人群需要。</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_11-手环解绑教程" tabindex="-1"><a class="header-anchor" href="#_11-手环解绑教程"><span>11. 手环解绑教程?</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong><a href="https://ufutx-health.oss-cn-hangzhou.aliyuncs.com/health/video/202509/29/c6c1a2676f1a7786486825798519cfaa.mp4" target="_blank" rel="noopener noreferrer">点击查看使用健康手环使用视频</a></strong></li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_12-如何使用健康手环" tabindex="-1"><a class="header-anchor" href="#_12-如何使用健康手环"><span>12. 如何使用健康手环?</span></a></h3>
|
||||||
|
<p>健康手环使用步骤如下:</p>
|
||||||
|
<ul>
|
||||||
|
<li>充电开机:使用Type-C数据线连接手环与电源,充满电后长按功能键开机;</li>
|
||||||
|
<li>下载APP:在应用商店搜索「友福同享」下载并安装;</li>
|
||||||
|
<li>绑定设备:打开APP,注册/登录账号,进入「设备管理」→「添加设备」,搜索并绑定您的手环;</li>
|
||||||
|
<li>功能使用:在APP中可查看步数、睡眠、心率等数据,设置运动目标、闹钟等功能,具体操作详见APP内「使用指南」。</li>
|
||||||
|
<li><strong><a href="https://ufutx-health.oss-cn-hangzhou.aliyuncs.com/health/video/202603/17/e575df8ad14f5e4a367e761152271d5d.mp4" target="_blank" rel="noopener noreferrer">点击查看使用健康手环使用视频</a></strong></li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_13-如何使用体脂秤" tabindex="-1"><a class="header-anchor" href="#_13-如何使用体脂秤"><span>13. 如何使用体脂秤?</span></a></h3>
|
||||||
|
<p>体脂秤使用方法:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>放置位置:将体脂秤放在平整坚硬的地面上,避免地毯或松软地面;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>开机校准:首次使用需开机并等待秤面归零;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>赤脚站立:赤裸双脚站立在秤面金属电极片上,保持身体稳定;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>查看数据:体重数据即时显示,体脂等详细数据需打开友福同享APP,进入「体脂秤」页面查看(需提前绑定设备)。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong><a href="https://images.health.ufutx.com/202410/15/2024101401.mp4" target="_blank" rel="noopener noreferrer">点击查看使用健康体脂秤用视频</a></strong></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_14-购买友福同享dma智能健康方案-它包含哪些服务-及相关的流程是什么" tabindex="-1"><a class="header-anchor" href="#_14-购买友福同享dma智能健康方案-它包含哪些服务-及相关的流程是什么"><span>14. 购买友福同享DMA智能健康方案,它包含哪些服务,及相关的流程是什么?</span></a></h3>
|
||||||
|
<p>友福同享DMA智能健康方案包含以下服务与流程(具体以实际为准,建议咨询客服确认):</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><strong>服务内容</strong>:专属健康评估、定制运动计划、营养膳食指导、定期健康监测(含手环、体脂秤等设备使用)、健康教练在线咨询等;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>服务流程</strong>:支付成功后,客服将联系您预约健康评估,随后根据评估结果定制方案,配送设备并指导使用,后续将定期跟踪健康数据并调整方案。<br>
|
||||||
|
(答案含图片教程,实际请查看APP内「DMA方案详情」或联系客服获取图文指引)</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="12000" src="https://images.health.ufutx.com/202503/28/73c90abc9dea4b8f9e1daac17688c0a41743133737355.jpeg"></LongPicSplit>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_15-友福同享做dma健康方案-请问体检有哪些项目" tabindex="-1"><a class="header-anchor" href="#_15-友福同享做dma健康方案-请问体检有哪些项目"><span>15. 友福同享做DMA健康方案,请问体检有哪些项目?</span></a></h3>
|
||||||
|
<p>DMA健康方案的体检项目通常包括(具体以实际套餐为准):</p>
|
||||||
|
<ul>
|
||||||
|
<li>基础体检:身高、体重、体脂率、血压、心率等;</li>
|
||||||
|
<li>血液检测:血常规、血脂、血糖等;</li>
|
||||||
|
<li>影像学检查:心电图、腹部超声等;</li>
|
||||||
|
<li>专项检测:根据个人健康状况定制的专项检查(如骨密度、动脉硬化检测等)。<br>
|
||||||
|
具体项目可咨询客服或查看方案详情页(含图片说明,实际请以APP内展示或客服告知为准)。<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="1500" src="https://images.health.ufutx.com/202503/28/85f65a4c0999288c605dc0cf2851b2d11743133931953.jpeg"></LongPicSplit>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_16-腾讯会议操作指引-用户" tabindex="-1"><a class="header-anchor" href="#_16-腾讯会议操作指引-用户"><span>16. 腾讯会议操作指引(用户)</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li><strong><a href="https://ufutx-health.oss-cn-hangzhou.aliyuncs.com/health/video/202509/19/4abdda957f8faced9ddfcc039c090c29.mp4" target="_blank" rel="noopener noreferrer">点击查看腾讯会议操作指引视频</a></strong></li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_17-腾讯会议如何发起-分享给公司存档-教练" tabindex="-1"><a class="header-anchor" href="#_17-腾讯会议如何发起-分享给公司存档-教练"><span>17. 腾讯会议如何发起+分享给公司存档(教练)</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="8000" src="https://images.health.ufutx.com/202509/29/42aa8437800085f9f0231bed83b18f3e.jpeg"></LongPicSplit>
|
||||||
|
<h3 id="_18-腾讯会议如何打开权限-允许他人查看与下载的流程。" tabindex="-1"><a class="header-anchor" href="#_18-腾讯会议如何打开权限-允许他人查看与下载的流程。"><span>18. 腾讯会议如何打开权限,允许他人查看与下载的流程。</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="9100" src="https://images.health.ufutx.com/202603/12/51ffa9e210a40be0ab864ee127625bb7.jpg"></LongPicSplit>
|
||||||
|
<h3 id="_18-关于隐私账号" tabindex="-1"><a class="header-anchor" href="#_18-关于隐私账号"><span>18. 关于隐私账号</span></a></h3>
|
||||||
|
<p>在后台添加虚拟订单时,选定该订单为隐私账号,即用户部分信息不需要填写,展示默认值:</p>
|
||||||
|
<ul>
|
||||||
|
<li>方案前健康档案中,第二步调查问卷,第三步上传身体照使用默认数据,个人信息和上传体检报告需正常填写</li>
|
||||||
|
<li>方案前审核默认通过,展示隐私账号标识</li>
|
||||||
|
<li>陈老师出方案步骤不展示第二步和第三步信息,展示隐私账号标识</li>
|
||||||
|
<li>方案后健康档案中,方案后调查问卷,方案后身体照使用默认数据,方案后体检报告需正常填写</li>
|
||||||
|
<li>其他流程与步骤和正常DMA方案一致</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="二-dma通用问题处理原则" tabindex="-1"><a class="header-anchor" href="#二-dma通用问题处理原则"><span>二. DMA通用问题处理原则</span></a></h2>
|
||||||
|
<div class="hint-container tip">
|
||||||
|
<p class="hint-container-title">适用对象</p>
|
||||||
|
<p>所有 DMA 专属服务群内的教练、客服及行政人员</p>
|
||||||
|
</div>
|
||||||
|
<h3 id="_1-当用户要求自己的家属加入服务群" tabindex="-1"><a class="header-anchor" href="#_1-当用户要求自己的家属加入服务群"><span>1. 当用户要求自己的家属加入服务群</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>回复用户:“公司规定,本群是为您个人提供服务的专属群组,暂不向家属或朋友开放。”</li>
|
||||||
|
<li>告知用户:“如有特殊需求需要家属协助,我们可以向公司提交申请(我们将提供申请表格供您填写),预计一个工作日内回复您。”</li>
|
||||||
|
<li>向管理层提交申请,内容包含:用户姓名、申请理由等(以申请表格内容为准);</li>
|
||||||
|
<li>申请通过后:请家属下载“友福同享”APP;</li>
|
||||||
|
<li>向“友福服务”微信号发送以下信息:用户名、管理层批准截图、家属姓名及联系电话;</li>
|
||||||
|
<li>“友福服务”收到信息后,将相关家属加入服务群。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_2-当用户填写健康信息时-提供距今超过6个月的体检报告" tabindex="-1"><a class="header-anchor" href="#_2-当用户填写健康信息时-提供距今超过6个月的体检报告"><span>2. 当用户填写健康信息时,提供距今超过6个月的体检报告</span></a></h3>
|
||||||
|
<h4 id="方案一-提交新体检报告" tabindex="-1"><a class="header-anchor" href="#方案一-提交新体检报告"><span>方案一:提交新体检报告</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li>建议用户重新进行体检,我们可以提供相关的体检项目参考;</li>
|
||||||
|
<li>同时向用户说明:近期(6个月内)的体检报告能更准确反映您当前的身体状况,从而确保我们为您定制的健康方案更加科学、有效且个性化;</li>
|
||||||
|
<li>用户配合完成新的体检。</li>
|
||||||
|
</ol>
|
||||||
|
<h4 id="方案二-使用旧体检报告" tabindex="-1"><a class="header-anchor" href="#方案二-使用旧体检报告"><span>方案二:使用旧体检报告</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li>首先,查阅用户填写的健康问卷及旧体检报告,了解其是否存在重大疾病或近期手术史;</li>
|
||||||
|
<li>与用户沟通:确认其在APP服务群中的健康信息真实有效,并请用户在群内明确声明:“本人同意使用此份旧体检报告”;</li>
|
||||||
|
<li>在沟通群里告诉用户:“我们将为您提交申请,请您耐心等待通知,预计1个工作日内会有通知;</li>
|
||||||
|
<li>同时,将用户的情况截图存入“用户补充资料”中,并反馈至审核团队;</li>
|
||||||
|
<li>待审核团队批准后,在群里通知用户:“您的申请已通过,我们将为您设计专属健康方案。”</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_3-当老用户想进行第二次dma方案" tabindex="-1"><a class="header-anchor" href="#_3-当老用户想进行第二次dma方案"><span>3. 当老用户想进行第二次DMA方案</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>由原教练团队的主教练询问用户,是否需要服务人员陪伴做方案;</li>
|
||||||
|
<li>如果不需要工作人员陪伴服务
|
||||||
|
<ol>
|
||||||
|
<li>请用户直接回到自己的原服务群,查找历史餐单;也可请群内教练协助找回餐单,然后自行启动方案。</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>如果需要工作人员陪伴服务(将产生二次服务费用)
|
||||||
|
<ol>
|
||||||
|
<li>费用说明:具体费用将根据服务内容确定,例如:三位教练陪伴服务、方案中的营养包、智能设备提供、智能餐单设置等;</li>
|
||||||
|
<li>用户完成交费(线下);</li>
|
||||||
|
<li>用户下载“友福同享”APP,需使用第一次方案登记的电话号码与姓名进行注册登录;</li>
|
||||||
|
<li>若电话号码已变更,用户需将新、旧号码告知原服务群的主教练,由主教练转交行政人员修改个人信息;</li>
|
||||||
|
<li>行政人员同步通知教练团队该用户可享受的服务内容;</li>
|
||||||
|
<li>用户进入个人专属健康服务群。</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_4-针对渠道商或代理商推荐的dma用户" tabindex="-1"><a class="header-anchor" href="#_4-针对渠道商或代理商推荐的dma用户"><span>4. 针对渠道商或代理商推荐的DMA用户</span></a></h3>
|
||||||
|
<h4 id="视频会议注意事项及处理建议" tabindex="-1"><a class="header-anchor" href="#视频会议注意事项及处理建议"><span>视频会议注意事项及处理建议</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li>在服务群建立后,立即由“三对一”教练团队安排并启动视频会议;</li>
|
||||||
|
<li>视频会议中需向用户了解以下内容:
|
||||||
|
<ol>
|
||||||
|
<li>谁推荐您来做的健康方案?</li>
|
||||||
|
<li>用户对“智能健康DMA人体驾照”的理解是什么?</li>
|
||||||
|
<li>用户对方案有哪些疑惑?</li>
|
||||||
|
<li>用户最希望解决什么问题?</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<li>若用户理解与公司理念相符,则启动专属方案设计流程;</li>
|
||||||
|
<li>若用户理解与公司理念存在较大偏差,且经沟通后仍无法达成一致,则应立即向公司管理层汇报,由公司决定是否继续启动方案。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_5-关于临期营养素的处理建议" tabindex="-1"><a class="header-anchor" href="#_5-关于临期营养素的处理建议"><span>5. 关于临期营养素的处理建议</span></a></h3>
|
||||||
|
<p>请勿向新客户推荐临期营养素产品。如客户确有需要,请引导其前往友福商城购买。</p>
|
||||||
|
<h3 id="_6-用户执行dma方案一个月体重无明显改善且反馈身体不适的处理流程" tabindex="-1"><a class="header-anchor" href="#_6-用户执行dma方案一个月体重无明显改善且反馈身体不适的处理流程"><span>6. 用户执行DMA方案一个月体重无明显改善且反馈身体不适的处理流程</span></a></h3>
|
||||||
|
<p>如DMA用户执行方案一个月后体重基本无变化,并反馈身体仍有较多不舒服,教练团队须立即将情况上报至管理层,由陈老师给出具体指导并调整后续服务方向。</p>
|
||||||
|
<h2 id="三、dma用户发货及换货流程-v2" tabindex="-1"><a class="header-anchor" href="#三、dma用户发货及换货流程-v2"><span>三、DMA用户发货及换货流程(V2)</span></a></h2>
|
||||||
|
<Badge text="更新于 2026/1/12" type="tip" /><blockquote>
|
||||||
|
<p>本流程适用于所有 DMA 方案用户的智能设备(手环、体脂秤)发货与换货操作。</p>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
<h3 id="_1、dma方案用户配置智能手环流程" tabindex="-1"><a class="header-anchor" href="#_1、dma方案用户配置智能手环流程"><span>1、DMA方案用户配置智能手环流程</span></a></h3>
|
||||||
|
<h4 id="一-发货前确认" tabindex="-1"><a class="header-anchor" href="#一-发货前确认"><span>(一)发货前确认</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<p><strong>由服务群专属客服与用户确认手环类型</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>A. 已测试手环</strong>(经功能验证,可直接使用)</li>
|
||||||
|
<li><strong>B. 未测试有塑封包装手环</strong>(全新未拆封)</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>配套设备</strong>:统一配发 <strong>Type-C 转 USB 充电转换头</strong>。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>同步通知</strong>:客服需立即通过微信联系 <strong>“友福服务”</strong>,告知后台行政人员用户所选手环类型(A 或 B)及是否需要转换头。</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h4 id="二-新手环测试流程-仅适用于-a-类手环" tabindex="-1"><a class="header-anchor" href="#二-新手环测试流程-仅适用于-a-类手环"><span>(二)新手环测试流程(仅适用于 A 类手环)</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li><strong>测试人员</strong>:陈声飞、海静</li>
|
||||||
|
<li><strong>测试内容</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>充电 4 小时;</li>
|
||||||
|
<li>佩戴 1–4 小时;</li>
|
||||||
|
<li>验证:手环可激活、可绑定 APP、充电器正常充电、表带魔术贴功能完好。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>测试完成后</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>解绑设备;</li>
|
||||||
|
<li>清除历史数据;</li>
|
||||||
|
<li>核对手环编号与外包装一致。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>恢复包装</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>外盒干净整洁;</li>
|
||||||
|
<li>内配件齐全(充电线、表带、手环主机)。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>出库交接</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>行政人员需开箱确认物料齐全后签收。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>注意事项</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>测试过程必须使用 <strong>专用测试表带</strong>,确保用户收到的是 <strong>全新原装表带</strong>。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<hr>
|
||||||
|
<h3 id="_2、智能设备换货标准与流程" tabindex="-1"><a class="header-anchor" href="#_2、智能设备换货标准与流程"><span>2、智能设备换货标准与流程</span></a></h3>
|
||||||
|
<h4 id="一-手环换货标准" tabindex="-1"><a class="header-anchor" href="#一-手环换货标准"><span>(一)手环换货标准</span></a></h4>
|
||||||
|
<div class="hint-container tip">
|
||||||
|
<p class="hint-container-title">✅ 支持换货的情形</p>
|
||||||
|
<ul>
|
||||||
|
<li>充电器无法正常充电;</li>
|
||||||
|
<li>表带魔术贴在 <strong>3 个月内脱落</strong>;</li>
|
||||||
|
<li>手环出现功能性异常(如无法开机、无法连接 APP、传感器失灵等)。</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="hint-container warning">
|
||||||
|
<p class="hint-container-title">❌ 不支持换货的情形</p>
|
||||||
|
<ul>
|
||||||
|
<li>因人为使用导致的 <strong>刮花、破损、变形</strong>;</li>
|
||||||
|
<li>表带被污损、染色或自行剪裁;</li>
|
||||||
|
<li>非质量问题导致的外观磨损。</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<h4 id="二-体脂秤换货标准" tabindex="-1"><a class="header-anchor" href="#二-体脂秤换货标准"><span>(二)体脂秤换货标准</span></a></h4>
|
||||||
|
<div class="hint-container tip">
|
||||||
|
<p class="hint-container-title">✅ 支持换货的情形</p>
|
||||||
|
<ul>
|
||||||
|
<li>非电池原因导致 <strong>无法测量数据</strong>;</li>
|
||||||
|
<li>出厂即存在功能缺陷。</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="hint-container warning">
|
||||||
|
<p class="hint-container-title">❌ 不支持换货的情形</p>
|
||||||
|
<ul>
|
||||||
|
<li>电池耗尽(属正常耗材);</li>
|
||||||
|
<li>因跌落、挤压、进水等 <strong>使用不当</strong> 导致镜面破裂或结构损坏;</li>
|
||||||
|
<li>表面轻微划痕或磨损。</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<h4 id="三-换货有效期" tabindex="-1"><a class="header-anchor" href="#三-换货有效期"><span>(三)换货有效期</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>自设备签收之日起 <strong>1 年内</strong>,若出现 <strong>非人为质量问题</strong>,友福提供 <strong>免费换货服务</strong>。</li>
|
||||||
|
</ul>
|
||||||
|
<hr>
|
||||||
|
<h3 id="_3、不良设备换货操作流程" tabindex="-1"><a class="header-anchor" href="#_3、不良设备换货操作流程"><span>3、不良设备换货操作流程</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<p><strong>客服介入</strong><br>
|
||||||
|
由DMA群里的客服跟进。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>资料收集与申请</strong><br>
|
||||||
|
客服需整理以下信息,并通过微信发送至 <strong>“友福审核”</strong> 申请新设备:</p>
|
||||||
|
<div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre v-pre><code class="language-text"><span class="line">① 用户姓名:</span>
|
||||||
|
<span class="line">② 用户电话:</span>
|
||||||
|
<span class="line">③ 客服姓名:</span>
|
||||||
|
<span class="line">④ 商品问题:(请详细描述问题,附截图或视频更佳)</span>
|
||||||
|
<span class="line">⑤ 需配送物料:</span>
|
||||||
|
<span class="line"> - 手环 / 体脂秤</span>
|
||||||
|
<span class="line"> - 若为手环,请注明类型:A(已测试)或 B(未拆封)</span>
|
||||||
|
<span class="line"> - 是否需同步配发 Type-C 转 USB 转换头?</span>
|
||||||
|
<span class="line"></span></code></pre>
|
||||||
|
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
|
||||||
|
<li>
|
||||||
|
<p><strong>正在方案用户处理</strong><br>
|
||||||
|
对于正在方案中的用户,可以同步配送新机和退货;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>已完成方案用户处理</strong><br>
|
||||||
|
对于已完成方案的用户,需要先将旧的商品退回我司;</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>退货跟进</strong><br>
|
||||||
|
退货:由服务群的客服跟进,以确保用户会处理退货;并提供相关的退货快递单号,方便公司收件跟进。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>退货寄件要求</strong><br>
|
||||||
|
用户寄回商品,采用到付方式,收件信息如下:</p>
|
||||||
|
<div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre v-pre><code class="language-text"><span class="line">收件人: 陈声飞 </span>
|
||||||
|
<span class="line">手机号码: 13471927441 </span>
|
||||||
|
<span class="line">收件地址: 广东省深圳市南山区南山街道东滨路阳光科创中心B座3302 </span>
|
||||||
|
<span class="line"></span></code></pre>
|
||||||
|
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li>
|
||||||
|
<li>
|
||||||
|
<p><strong>新机出库配送</strong><br>
|
||||||
|
当更换的物料(手环或体脂秤)准备好后,通知客服来领取相关物料。双方确认物料齐全后出库,由客服发快递寄出。如果客服不在深圳,由供应链工作人员代发邮寄,但需客服根据邮寄照片确认物料齐全。</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>用户通知</strong><br>
|
||||||
|
客服在DMA用户群发送快递单号,通知用户留意查收。</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="四、培训业务类" tabindex="-1"><a class="header-anchor" href="#四、培训业务类"><span>四、培训业务类</span></a></h2>
|
||||||
|
<h3 id="_1-友福同享健康教练双证报考条件是什么" tabindex="-1"><a class="header-anchor" href="#_1-友福同享健康教练双证报考条件是什么"><span>1. 友福同享健康教练双证报考条件是什么?</span></a></h3>
|
||||||
|
<p>友福同享健康教练双证(具体证书名称以实际为准)报考条件通常包括:</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="3800" src="https://images.health.ufutx.com/202503/28/8091d01833ef90c6115a92252af381e71743133803770.jpeg"></LongPicSplit>
|
||||||
|
<h3 id="_2-友福同享健康教练双证报考流程是什么" tabindex="-1"><a class="header-anchor" href="#_2-友福同享健康教练双证报考流程是什么"><span>2. 友福同享健康教练双证报考流程是什么?</span></a></h3>
|
||||||
|
<p>友福同享健康教练双证报考流程如下(含图片指引,实际请查看培训专区或联系客服):</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="9520" src="https://images.health.ufutx.com/202503/28/89c5cc15f8651c76156d6b3f52731cd21743133847968.jpeg"></LongPicSplit>
|
||||||
|
<h2 id="五、商城业务类" tabindex="-1"><a class="header-anchor" href="#五、商城业务类"><span>五、商城业务类</span></a></h2>
|
||||||
|
<h3 id="_1-怎么查看订单的物流信息" tabindex="-1"><a class="header-anchor" href="#_1-怎么查看订单的物流信息"><span>1. 怎么查看订单的物流信息?</span></a></h3>
|
||||||
|
<p>查看订单物流信息的步骤:</p>
|
||||||
|
<ul>
|
||||||
|
<li>打开友福同享APP或小程序,进入「我的」→「我的订单」;找到快递单号,拷贝下来后,点击下面快递查询网页,便可以知道物流的进程及相关信息:https://www.baidu.com/s?rsv_dl=selectedsearch&wd=%E5%BF%AB%E9%80%92%E5%8D%95%E5%8F%B7%E6%9F%A5%E8%AF%A2%0A%0A</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="_2-友福商城订单查看、咨询指引" tabindex="-1"><a class="header-anchor" href="#_2-友福商城订单查看、咨询指引"><span>2. 友福商城订单查看、咨询指引</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="17500" src="https://images.health.ufutx.com/202603/10/5e46870452193a97e0a69053afd1ea50.jpg"></LongPicSplit>
|
||||||
|
<ClientOnly>
|
||||||
|
<FaqList />
|
||||||
|
</ClientOnly>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
16
docs/.vuepress/.temp/pages/posts/login.html.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/login.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/login.html\",\"title\":\"DMA手册 - 登录\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"DMA手册 - 登录\",\"layout\":\"LoginLayout\"},\"headers\":[],\"git\":{},\"filePathRelative\":\"posts/login.md\"}")
|
||||||
|
export { comp, data }
|
||||||
|
|
||||||
|
if (import.meta.webpackHot) {
|
||||||
|
import.meta.webpackHot.accept()
|
||||||
|
if (__VUE_HMR_RUNTIME__.updatePageData) {
|
||||||
|
__VUE_HMR_RUNTIME__.updatePageData(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.hot) {
|
||||||
|
import.meta.hot.accept(({ data }) => {
|
||||||
|
__VUE_HMR_RUNTIME__.updatePageData(data)
|
||||||
|
})
|
||||||
|
}
|
||||||
3
docs/.vuepress/.temp/pages/posts/login.html.vue
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<template><div></div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/overview.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/overview.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/overview.html\",\"title\":\"核心操作流程\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1765524799000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":2}],\"changelog\":[{\"hash\":\"acc531138f97433b765b2d0a43f9edb90f646da1\",\"time\":1765524799000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"第一版\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/overview.md\"}")
|
||||||
|
export { comp, data }
|
||||||
299
docs/.vuepress/.temp/pages/posts/overview.html.vue
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
<template><div><h1 id="核心操作流程" tabindex="-1"><a class="header-anchor" href="#核心操作流程"><span>核心操作流程</span></a></h1>
|
||||||
|
<h3 id="一-用户下单缴费阶段" tabindex="-1"><a class="header-anchor" href="#一-用户下单缴费阶段"><span>(一)用户下单缴费阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 行政确认合同类型</td>
|
||||||
|
<td>收到用户线上 / 线下支付成功通知后,1 个工作日内登录【后台系统 - 订单管理模块】,根据支付渠道(线上订单显示 “APP 支付”,线下订单显示 “线下转账”)确认合同类型(线上 / 线下),并在系统中勾选对应类型完成同步。</td>
|
||||||
|
<td>仔细核对支付信息与订单信息的一致性,确保合同类型判断准确。</td>
|
||||||
|
<td>若支付信息与订单信息不一致,立即联系技术核实,待确认后再进行合同类型确认。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 行政邀请服务团队进群</td>
|
||||||
|
<td>合同类型确认后,2 小时内登录【后台系统 - 客户群聊管理模块】,选择对应客户订单,点击 “邀请成员”,勾选 “主教练、副教练、客服” 角色,系统自动发送进群邀请。</td>
|
||||||
|
<td>确保邀请的人员角色准确,避免遗漏或误邀。</td>
|
||||||
|
<td>若系统发送邀请失败,检查网络连接,重新操作;若仍失败,联系技术支持处理。</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="二-合同签署与群聊搭建阶段" tabindex="-1"><a class="header-anchor" href="#二-合同签署与群聊搭建阶段"><span>(二)合同签署与群聊搭建阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 行政处理线下合同签署</td>
|
||||||
|
<td>若用户选择线下合同,在收到线下合同原件后,登录【后台系统 - 合同管理模块】,找到对应订单的合同,点击【确认签署】按钮,上传合同扫描件完成签署流程,系统自动同步合同状态为 “已签署”。</td>
|
||||||
|
<td>仔细核对合同内容及用户签字是否完整、清晰,扫描件需清晰可辨。</td>
|
||||||
|
<td>若合同内容有误或用户签字不清晰,联系客服与用户沟通重新签署,待收到正确合同后再进行确认签署操作。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 行政处理线上合同签署跟进</td>
|
||||||
|
<td>用户签署线上合同后,系统会发送 “待公司签署” 通知,行政需在 1 个工作日内登录【后台系统 - 合同管理模块】,找到对应合同,点击 “代表公司签署”,完成电子签名确认。</td>
|
||||||
|
<td>签署前再次核对合同条款,确保无误。</td>
|
||||||
|
<td>若电子签名无法正常使用,检查系统设置或联系技术支持解决。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3.行政邀请服务团队进群</td>
|
||||||
|
<td>合同类型确认后,2 小时内登录【后台系统 - 客户合同类型确认后,2 小时内登录【后台系统 - 客户群聊管理模块】,选择对应客户订单,点击 “邀请成员”,勾选 “主教练、副教练、客服” 角色,系统自动发送进群邀请。 对应客户订单,点击 “邀请成员”,勾选 “主教练、副教练、客服” 角色,系统自动发送进群邀请。</td>
|
||||||
|
<td>确保邀请的人员角色准确,避免遗漏或误邀。</td>
|
||||||
|
<td>若系统发送邀请失败,检查网络连接,重新操作;若仍失败,联系技术支持处理。</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="三-健康档案处理阶段" tabindex="-1"><a class="header-anchor" href="#三-健康档案处理阶段"><span>(三)健康档案处理阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 客服引导健康档案填写</td>
|
||||||
|
<td>线下合同用户:双方合同签署后,立即登录【客户群聊界面】,转发【健康档案(含方案前评估表 + 调查问卷)】填写链接,附带文字 “尊敬的客户,为了给您定制更合适的健康方案,请于 24 小时内点击链接完成健康档案填写,如有疑问可随时联系我~”。线上合同用户:关注系统触发的填写引导消息,若用户未及时填写,在 24 小时后发送提醒消息 “尊敬的客户,您的健康档案还未完成填写,完成后我们才能尽快为您定制方案哦~”。</td>
|
||||||
|
<td>发送消息后确认客户已读,若未读可适当电话提醒。</td>
|
||||||
|
<td>若客户表示不会填写,耐心指导客户操作,必要时远程协助。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 系统审核员审核健康评估表</td>
|
||||||
|
<td>收到用户提交的【方案前健康评估表】后,1 个工作日内登录【后台系统 - 健康档案审核模块】,逐项检查内容是否完整、真实,审核通过点击 “审核通过”,不通过则在 “审核意见” 栏注明具体原因(如 “血压数据未填写”),点击 “审核不通过”。</td>
|
||||||
|
<td>严格按照评估表填写要求进行审核,确保数据准确。</td>
|
||||||
|
<td>若对评估表中某项内容存疑,联系客服向客户核实,根据核实结果进行审核操作。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3. 客服审核健康档案并闭环</td>
|
||||||
|
<td>收到系统【健康档案待确认】通知后,1 个工作日内登录【后台系统 - 健康档案管理模块】,检查健康档案完整性(评估表 + 调查问卷)。审核通过:点击 “确认”,系统自动触发健康管理师方案设置通知。审核不通过:私信客户 “尊敬的客户,您的健康档案存在 [具体问题],请补充 / 修改后重新提交,感谢配合~”,2 小时后查看客户修改情况,直至审核通过。</td>
|
||||||
|
<td>确保健康档案内容完整、符合要求,审核意见需具体、明确。</td>
|
||||||
|
<td>若客户对审核不通过有异议,耐心解释原因,提供修改建议。</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="四-方案设置阶段" tabindex="-1"><a class="header-anchor" href="#四-方案设置阶段"><span>(四)方案设置阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 健康管理师制定健康方案</td>
|
||||||
|
<td>收到客服 “健康档案已确认” 通知后,3 个工作日内登录【后台系统 - 方案设置模块】,深度解读客户健康档案、健康评估表及相关健康数据,结合 AI 健康方案工具,制定个性化、可落地的健康方案(涵盖饮食、运动、作息、心理等维度),方案内容需包含周期(49 天)、每日餐单类型等核心信息,完成后点击 “提交方案”,系统自动通知客服和行政(电话18148522932)。</td>
|
||||||
|
<td>方案需科学、合理,符合客户健康状况和需求。</td>
|
||||||
|
<td>若在制定方案过程中发现健康档案信息不足,联系客服向客户补充收集。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 客服确认收货方式</td>
|
||||||
|
<td>收到健康管理师方案完成通知后,1 小时内通过电话或群聊联系客户 “尊敬的客户,您的健康方案已制定完成,请问您选择自提还是邮寄呢?自提地址为 [具体地址],邮寄请提供详细地址~”,确认后同步至行政。</td>
|
||||||
|
<td>准确记录客户提供的收货信息,避免错误。</td>
|
||||||
|
<td>若客户对自提地址或邮寄方式有疑问,详细解答,必要时提供其他可行方案。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3. 行政配货</td>
|
||||||
|
<td>收到客服同步的收货方式后,4 小时内根据方案内容进行配货,核对货物数量、种类与方案一致后,若为邮寄订单,登录【后台系统 - 物流管理模块】,录入快递单号(物流公司需选择合作物流);若为自提订单,在系统中备注自提点信息及可自提时间。</td>
|
||||||
|
<td>配货时轻拿轻放,避免货物损坏,确保包装完好。</td>
|
||||||
|
<td>若发现货物短缺或损坏,及时联系仓库补充或更换,延迟发货需提前告知客服,由客服向客户说明情况。</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="五-配送及收货确认阶段" tabindex="-1"><a class="header-anchor" href="#五-配送及收货确认阶段"><span>(五)配送及收货确认阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 行政发货确认与记录</td>
|
||||||
|
<td>线下配送或快递发货后,1 小时内拍摄发货数量、种类的清晰照片(需能看清货物细节和数量),登录【后台系统 - 发货记录模块】,上传照片,点击 “确认发货”,系统自动触发群聊通知 “尊敬的客户,您的健康方案已发货,物流信息:[快递单号](物流公司:[公司名称]),可点击链接查看,请注意查收~”。</td>
|
||||||
|
<td>照片需清晰、完整,能作为发货凭证。</td>
|
||||||
|
<td>若系统发送通知失败,手动在群聊中发送发货信息及照片。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 客服跟进收货状态</td>
|
||||||
|
<td>系统触发 “已发货” 通知后,24 小时内登录【后台系统 - 收货管理模块】,查看物流信息,在群聊发送 “尊敬的客户,您的货物已发出,预计 [送达时间] 到达,收到后请在群内点击【确认收货】哦~”。若超 48 小时未确认收货,主动私信客户 “尊敬的客户,请问您收到货物了吗?若已收到请及时确认,有任何问题随时联系我~”。</td>
|
||||||
|
<td>密切关注物流信息,及时跟进客户收货情况。</td>
|
||||||
|
<td>若客户反馈未收到货物,协助查询物流轨迹,若物流显示已送达,联系快递公司核实;若物流异常,协调处理并向客户说明情况。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3、方案前视频沟通(第一次)</td>
|
||||||
|
<td>系統发送通知给所有教练,与用户进行方案前视频沟通。「主教练主导」</td>
|
||||||
|
<td>视频前主教练需准备《方案沟通清单》,确保覆盖所有核心内容;副教练负责记录客户疑问及需求。</td>
|
||||||
|
<td>客户临时无法参加时,2 小时内协调新时间(原则上 24 小时内完成),并重新发送预约通知(如微信视频→腾讯会议小程序),</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="六-方案执行与结束阶段" tabindex="-1"><a class="header-anchor" href="#六-方案执行与结束阶段"><span>(六)方案执行与结束阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 客服设置餐单及跟进方案执行</td>
|
||||||
|
<td>方案执行期间,客服需每日登录【后台系统 - 餐单管理模块】,为客户设置当日餐单并同步至群聊。同时,定期在群内了解客户执行情况,解答客户疑问,记录客户反馈的问题并及时处理。</td>
|
||||||
|
<td>餐单设置需符合方案要求,跟进时态度热情、耐心。</td>
|
||||||
|
<td>若客户对餐单有异议,根据客户健康状况和需求适当调整,无法调整的向客户解释原因。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 副教练跟进体脂称使用指导</td>
|
||||||
|
<td>转发友福体脂称操作视频,指导用户完成设备绑定(步骤:下载 APP→蓝牙配对→输入个人信息),确认数据可同步至服务群</td>
|
||||||
|
<td>对 50 岁以上用户需提供电话分步指导,留存指导截图至【服务档案模块】。</td>
|
||||||
|
<td>设备无法绑定(如蓝牙连接失败)时,指导客户检查手机权限(是否开启位置 / 蓝牙权限),仍无法解决的联系技术支持,12 小时内提供解决方案。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3. 副教练跟进手环使用指导</td>
|
||||||
|
<td>参照《友福手环操作手册》,通过群聊演示设备激活、数据同步(运动 / 睡眠数据)流程,确保用户掌握每日数据查看方法</td>
|
||||||
|
<td>需在客户收货后 24 小时内完成指导,确保用户掌握基础操作。</td>
|
||||||
|
<td>数据同步失败时,指导客户重启设备及 APP,仍异常的记录设备型号及问题,反馈至行政协调更换(原则上 48 小时内完成更换)。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>4.副教练餐单发送与解读</td>
|
||||||
|
<td>每日 16:00-18:00 登录【友福同享 - 商务端 app】,点击【餐单管理】模块获取次日基础餐单,转发至服务群</td>
|
||||||
|
<td>每日 18:00 前完成发送</td>
|
||||||
|
<td>解读需口语化,避免使用 “GI 值” 等专业术语</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>5.日常互动与关怀</td>
|
||||||
|
<td>①每日 9:00 前发送个性化问候(结合天气 / 用户状态,如 “今日降温,晨练建议加件外套”)②节假日发送定制祝福(如糖尿病用户:“中秋快乐!推荐您尝试无糖月饼”)</td>
|
||||||
|
<td>问候不超过 9:00,节假日提前 1 天</td>
|
||||||
|
<td>客户反馈身体不适(如 “头晕 / 乏力”)时,立即询问具体症状及持续时间,同步主教练判断是否需要暂停当日方案,必要时建议客户咨询医师。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>6.方案前视频沟通(第二次)</td>
|
||||||
|
<td>方案中第三周结束时,系统发送通知给所有服务人员,与用户进行方案中视频沟通。</td>
|
||||||
|
<td>教练需提前查看用户《数据趋势图》,用可视化方式展示成果;(例如;体重&手环测量数据)</td>
|
||||||
|
<td>及时记录客户反馈执行情况</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>7. 客服处理方案结束事宜</td>
|
||||||
|
<td>第 50 天,登录【友福同享-商务端】,将方案状态标记为 “已结束”,并在群聊转发【用户调查问卷】,附带文字 “尊敬的客户,您的 49 天健康方案已结束,麻烦您抽空填写一下调查问卷,您的反馈对我们很重要,感谢您的支持~”。</td>
|
||||||
|
<td>及时标记方案状态,提醒客户填写调查问卷。</td>
|
||||||
|
<td>若客户不愿填写调查问卷,耐心说明填写的意义,争取客户配合,若客户坚持不填,记录情况即可。</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<h3 id="七-方案后阶段" tabindex="-1"><a class="header-anchor" href="#七-方案后阶段"><span>(七)方案后阶段</span></a></h3>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>流程步骤</td>
|
||||||
|
<td>操作指引</td>
|
||||||
|
<td>注意事项</td>
|
||||||
|
<td>异常处理</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>1. 服务人员评估</td>
|
||||||
|
<td>方案结束后 1 个工作日内,所有教练登录【服务评估模块】,填写《复盘服务评价表》,内容包括:①客户执行情况打分(1-10 分);②服务亮点与不足;③改进建议。主教练需汇总团队评估,形成《服务总结报告》。</td>
|
||||||
|
<td>未填写复盘服务评价表隔 3 天发送一次通知,发送 3 次后不再发送;评估内容需客观真实,禁止敷衍填写。</td>
|
||||||
|
<td>教练反馈系统无法提交时,立即联系技术支持,24 小时内解决,确保评估按时完成。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2. 方案后视频通话沟通(第三次)</td>
|
||||||
|
<td>方案结束后第 2 天,系统发送通知给所有教练,与其他用户进行方案后视频沟通。</td>
|
||||||
|
<td>提前准备《方案期成果对比表》(含初始与结束数据),副教练负责记录客户后续需求。</td>
|
||||||
|
<td>沟通中客户对成果有疑问时,用数据说话(如 “体脂率下降 3%,已达到预期目标”)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3.通知用户上传「方案后照片」</td>
|
||||||
|
<td>结束后第3天系统触发通知,通知用户上传方案后照片</td>
|
||||||
|
<td>提醒客户照片拍摄要求(光线充足、背景简洁),确保与方案前照片具有可比性</td>
|
||||||
|
<td>客户拒绝上传时,回复 “理解您的顾虑,照片上传非强制,若后续需要对比分析可随时联系我们”;照片不符合要求时,提供示例图指导重拍,避免影响成果评估</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>4.对用户进行第一次评估</td>
|
||||||
|
<td>教练对用户进行第一次评估,结束后第3天系统触发</td>
|
||||||
|
<td>评估需基于客观数据,避免主观评价</td>
|
||||||
|
<td>---</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>5. 用户上传复检报告</td>
|
||||||
|
<td>方案结束后第28天左右,系统发送提醒用户上传复检报告。</td>
|
||||||
|
<td>明确告知报告用途(仅用于健康分析,严格保密),减轻客户顾虑。</td>
|
||||||
|
<td>客户未按时上传时,第 30 天再次提醒;客户表示未做复检时,建议 1 周内完成,并重发提醒通知;</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>6.对用户进行第二次评估</td>
|
||||||
|
<td>教练对用户进行第二次评估,结束后第60天系统触发</td>
|
||||||
|
<td>评估需基于客观数据,避免主观评价</td>
|
||||||
|
<td>----</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/service.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/service.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/service.html\",\"title\":\"客服\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1765358621000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":4}],\"changelog\":[{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"2eace682f2e7d0c8c663ff7200d318edf973b980\",\"time\":1762239646000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"增加DMA通用问题处理原则(2025-11-03更新) 增加主教练-信息保密规范、副教练-信息保密规范、客服-信息保密规范\"},{\"hash\":\"8f0f08771e3748002699aa33318dbae7e39a397f\",\"time\":1760424178000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新职责\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/service.md\"}")
|
||||||
|
export { comp, data }
|
||||||
61
docs/.vuepress/.temp/pages/posts/service.html.vue
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<template><div><h1 id="客服" tabindex="-1"><a class="header-anchor" href="#客服"><span>客服</span></a></h1>
|
||||||
|
<h2 id="工作职责与流程" tabindex="-1"><a class="header-anchor" href="#工作职责与流程"><span>工作职责与流程</span></a></h2>
|
||||||
|
<ol>
|
||||||
|
<li>跟进合同签约;</li>
|
||||||
|
<li>跟进用户“健康信息”填写;</li>
|
||||||
|
<li>申请用户专属健康方案;</li>
|
||||||
|
<li>分享用户物料的物流信息;</li>
|
||||||
|
<li>向用户介绍各工作人员的角色及分工(主教练、副教练、客服);</li>
|
||||||
|
<li>设置用户餐单(审核:主教练);</li>
|
||||||
|
<li>协助主教练指导副教练。</li>
|
||||||
|
<li>协助解决系统问题。</li>
|
||||||
|
</ol>
|
||||||
|
<h2 id="dma职责" tabindex="-1"><a class="header-anchor" href="#dma职责"><span>DMA职责</span></a></h2>
|
||||||
|
<h3 id="一-引导健康档案填写" tabindex="-1"><a class="header-anchor" href="#一-引导健康档案填写"><span>(一)引导健康档案填写</span></a></h3>
|
||||||
|
<p>线下合同用户:合同签署后,立即登录【客户群聊界面】,转发【健康档案(含方案前评估表 + 调查问卷)】填写链接,附带文字 “尊敬的客户,为了给您定制更合适的健康方案,请于 24 小时内点击链接完成健康档案填写,如有疑问可随时联系我~”。线上合同用户:关注系统触发的填写引导消息,若用户未及时填写,在 24 小时后发送提醒消息 “尊敬的客户,您的健康档案还未完成填写,完成后我们才能尽快为您定制方案哦~”。<br></p>
|
||||||
|
<p>发送消息后确认客户已读,若未读可适当电话提醒。</p>
|
||||||
|
<p>若客户表示不会填写,耐心指导客户操作,必要时远程协助。</p>
|
||||||
|
<h3 id="二-审核健康档案并闭环" tabindex="-1"><a class="header-anchor" href="#二-审核健康档案并闭环"><span>(二)审核健康档案并闭环</span></a></h3>
|
||||||
|
<p>收到系统【健康档案待确认】通知后,1 个工作日内登录【后台系统 - 健康档案管理模块】,检查健康档案完整性(评估表 + 调查问卷)。审核通过:点击 “确认”,系统自动触发健康管理师方案设置通知。审核不通过:私信客户 “尊敬的客户,您的健康档案存在 [具体问题],请补充 / 修改后重新提交,感谢配合~”,2 小时后查看客户修改情况,直至审核通过。<br></p>
|
||||||
|
<p>确保健康档案内容完整、符合要求,审核意见需具体、明确。</p>
|
||||||
|
<p>若客户对审核不通过有异议,耐心解释原因,提供修改建议。</p>
|
||||||
|
<h3 id="三-确认收货方式" tabindex="-1"><a class="header-anchor" href="#三-确认收货方式"><span>(三)确认收货方式</span></a></h3>
|
||||||
|
<p>收到健康管理师方案完成通知后,1 小时内通过电话或群聊联系客户 “尊敬的客户,您的健康方案已制定完成,请问您选择自提还是邮寄呢?自提地址为 [具体地址],邮寄地址为健康档案中的地址~”,同步至行政。</p>
|
||||||
|
<p>准确记录客户提供的收货信息,避免错误。</p>
|
||||||
|
<p>若客户对自提地址或邮寄方式有疑问,详细解答,必要时提供其他可行方案。</p>
|
||||||
|
<h3 id="四-跟进收货状态" tabindex="-1"><a class="header-anchor" href="#四-跟进收货状态"><span>(四)跟进收货状态</span></a></h3>
|
||||||
|
<p>系统触发 “已发货” 通知后,查看物流信息,在群聊发送 “尊敬的客户,您的货物已发出,预计 [送达时间] 到达,收到后请在群内点击【确认收货】哦~”。若超 48 小时未确认收货,主动私信客户 “尊敬的客户,请问您收到货物了吗?若已收到请及时确认,有任何问题随时联系我~”。</p>
|
||||||
|
<p>密切关注物流信息,及时跟进客户收货情况。</p>
|
||||||
|
<p>若客户反馈未收到货物,协助查询物流轨迹,若物流显示已送达,联系快递公司核实;若物流异常,协调处理并向客户说明情况。</p>
|
||||||
|
<h3 id="五-设置餐单及跟进方案执行" tabindex="-1"><a class="header-anchor" href="#五-设置餐单及跟进方案执行"><span>(五)设置餐单及跟进方案执行</span></a></h3>
|
||||||
|
<p>方案执行期间,客服需每日登录【友福同享商务端】APP 中对应的服务群,发送当日餐单。同时,定期在群内了解客户执行情况,解答客户疑问,记录客户反馈的问题并及时处理。</p>
|
||||||
|
<p>跟进时态度热情、耐心。</p>
|
||||||
|
<p>若客户对餐单有异议,根据客户健康状况和需求适当调整,无法调整的向客户解释原因。</p>
|
||||||
|
<h3 id="六-处理方案结束事宜" tabindex="-1"><a class="header-anchor" href="#六-处理方案结束事宜"><span>(六)处理方案结束事宜</span></a></h3>
|
||||||
|
<p>第 50 天,登录【后台系统 - 方案管理模块】,将方案状态标记为 “已结束”,并在群聊转发【用户调查问卷】,附带文字 “尊敬的客户,您的 49 天健康方案已结束,麻烦您抽空填写一下调查问卷,您的反馈对我们很重要,感谢您的支持~”。</p>
|
||||||
|
<p>及时标记方案状态,提醒客户填写调查问卷。</p>
|
||||||
|
<p>若客户不愿填写调查问卷,耐心说明填写的意义,争取客户配合,若客户坚持不填,记录情况即可。</p>
|
||||||
|
<h2 id="信息保密规范" tabindex="-1"><a class="header-anchor" href="#信息保密规范"><span>信息保密规范</span></a></h2>
|
||||||
|
<h3 id="_1-保密范围" tabindex="-1"><a class="header-anchor" href="#_1-保密范围"><span>1. 保密范围</span></a></h3>
|
||||||
|
<p>所有工作人员必须严格保密用户在服务过程中产生的全部个人信息,包括但不限于:</p>
|
||||||
|
<ul>
|
||||||
|
<li>用户基本信息:姓名、身份证号、联系方式等;</li>
|
||||||
|
<li>职业与职务信息;</li>
|
||||||
|
<li>体检报告、健康问卷及任何身体/健康数据;</li>
|
||||||
|
<li>个人方案、服务群聊天记录、数据变化、《方案后问卷调查表》等内部资料。</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>可分享内容</strong>:本人或家人身体情况、照片;公司已正式发布的对外宣传画册。</p>
|
||||||
|
<h3 id="_2-授权要求" tabindex="-1"><a class="header-anchor" href="#_2-授权要求"><span>2. 授权要求</span></a></h3>
|
||||||
|
<p>因业务、宣传等任何目的需对外披露用户相关信息时,必须:</p>
|
||||||
|
<ol>
|
||||||
|
<li>事先取得用户本人<strong>书面授权</strong>;</li>
|
||||||
|
<li>对分享内容进行<strong>充分匿名化</strong>处理。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_3-责任与义务" tabindex="-1"><a class="header-anchor" href="#_3-责任与义务"><span>3. 责任与义务</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>保密义务在方案结束后仍然有效;</li>
|
||||||
|
<li>任何违反本规范的行为均视为<strong>严重违纪</strong>,公司保留追究<strong>法律责任</strong>的权利。</li>
|
||||||
|
</ul>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/shareBenefit.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/shareBenefit.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/shareBenefit.html\",\"title\":\"分润提现操作说明\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1774516081000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":9}],\"changelog\":[{\"hash\":\"a7258d9980759323c9eba6e62638cab1c17523f3\",\"time\":1774516081000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"长图裁剪和查看\"},{\"hash\":\"263c4a87d2a7384f0740862be100870b4396fc14\",\"time\":1773297785000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"732b13159c94b473eb57dc99992effbcb18ce111\",\"time\":1771915289000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"图片更新\"},{\"hash\":\"88720577da1423f5da911e33d2d9a6e5f8888191\",\"time\":1770945819000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"ed4670234dca64f3448451fd8ef704b62cc1db8b\",\"time\":1770603095000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"4286fa07f0adaee3f0095ab40ace1807d19994d4\",\"time\":1770343928000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"登录功能\"},{\"hash\":\"7799842e4c8bfd3bbd24d9cbc89c8ac4c28c918b\",\"time\":1761103662000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新\"},{\"hash\":\"8f0f08771e3748002699aa33318dbae7e39a397f\",\"time\":1760424178000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"更新职责\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/shareBenefit.md\"}")
|
||||||
|
export { comp, data }
|
||||||
218
docs/.vuepress/.temp/pages/posts/shareBenefit.html.vue
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
<template><div><h1 id="分润提现操作说明" tabindex="-1"><a class="header-anchor" href="#分润提现操作说明"><span>分润提现操作说明</span></a></h1>
|
||||||
|
<h2 id="一、下载app" tabindex="-1"><a class="header-anchor" href="#一、下载app"><span>一、下载APP</span></a></h2>
|
||||||
|
<h3 id="_1-1-安卓端下载" tabindex="-1"><a class="header-anchor" href="#_1-1-安卓端下载"><span>1.1 安卓端下载</span></a></h3>
|
||||||
|
<p>1.安卓用户通过下面二维码扫码下载商务端APP。</p>
|
||||||
|
<img alt="" src="https://images.health.ufutx.com/202602/09/4ac993fc01b96bb730f34340b97b23e2.png">
|
||||||
|
<h3 id="_1-2-苹果端下载" tabindex="-1"><a class="header-anchor" href="#_1-2-苹果端下载"><span>1.2 苹果端下载</span></a></h3>
|
||||||
|
<p>1.打开手机自带的“App store”应用商店,搜索并下载“友福同享商务”APP</p>
|
||||||
|
<h2 id="二、进入「收益提现」模块" tabindex="-1"><a class="header-anchor" href="#二、进入「收益提现」模块"><span>二、进入「收益提现」模块</span></a></h2>
|
||||||
|
<p><strong>操作步骤</strong>:</p>
|
||||||
|
<ol>
|
||||||
|
<li>DMA用户签署合同后,由相关工作人员进行收益发放,具体时间可等短信通知或询问相关工作人员。</li>
|
||||||
|
<li>打开APP,点击底部导航栏的 <strong>【我的】</strong> 模块。</li>
|
||||||
|
<li>在【我的】界面,选择 <strong>「我的收益」入口</strong>,进入对应页面。</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202602/05/a159dc901155fc12d1e9510dbe46c3b3.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h2 id="三、提现操作流程-分润订单提现" tabindex="-1"><a class="header-anchor" href="#三、提现操作流程-分润订单提现"><span>三、提现操作流程(分润订单提现)</span></a></h2>
|
||||||
|
<h3 id="_2-1-发起提现申请" tabindex="-1"><a class="header-anchor" href="#_2-1-发起提现申请"><span>2.1 发起提现申请</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li>
|
||||||
|
<p><strong>选择提现订单</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>进入「收益提现」列表,找到需提现的分润订单,点击 <strong>「提现」按钮</strong>,跳转至 <strong>「合约选择」页面</strong>。</li>
|
||||||
|
<li>⚠️ <strong>系统提醒</strong>:若页面显示 <strong>黄色字体提示</strong>(如“你有一个【XXX】合同待签署”),需先完成对应合约签署(见2.2节)。</li>
|
||||||
|
</ul>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_v3.jpg" loading="lazy"></LongPicSplit>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>关联分公司合约</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>每笔分润订单需匹配 <strong>对应分公司的合约</strong>:
|
||||||
|
<ul>
|
||||||
|
<li><strong>场景1:已有有效合约</strong>:选择对应分公司合约,点击 <strong>「确定」</strong>,进入发票上传环节。</li>
|
||||||
|
<li><strong>场景2:无有效合约</strong>:点击 <strong>「添加新合约」</strong>,按以下流程签署(见2.2节)。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_3.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h3 id="_2-2-合约签署" tabindex="-1"><a class="header-anchor" href="#_2-2-合约签署"><span>2.2 合约签署</span></a></h3>
|
||||||
|
<h4 id="_2-2-1-匹配分公司" tabindex="-1"><a class="header-anchor" href="#_2-2-1-匹配分公司"><span>2.2.1 匹配分公司</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>选择合约签署的分公司,需与分润订单的 <strong>「分公司名称完全一致」</strong>(否则提现失败)。</li>
|
||||||
|
</ul>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="/images/shareBenefit/img_4.png" loading="lazy" ></LongPicSplit><p><br><br></p>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="/images/shareBenefit/img_5.png" loading="lazy" ></LongPicSplit><h4 id="_2-2-2-选择合约模版" tabindex="-1"><a class="header-anchor" href="#_2-2-2-选择合约模版"><span>2.2.2 选择合约模版</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>可选择已签署过的合约,使用该合约中的信息,可避免重新填写信息,如:已签署深圳公司合约,现需签署南昌公司合约,可选已签署深圳公司,点击【使用该模版】即可受用该信息进行申请签署南昌公司合约。没有相关信息点击【填新信息】填写新内容。</p>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/9308f2212b238c90d1becee737678db2.png" loading="lazy" ></LongPicSplit><p><br><br></p>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="/images/shareBenefit/img_7.png" loading="lazy" ></LongPicSplit></li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_2-2-3-选择账户类型" tabindex="-1"><a class="header-anchor" href="#_2-2-3-选择账户类型"><span>2.2.3 选择账户类型</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>切换标签:<strong>「个人」</strong>(默认,展示银行卡信息表单) / <strong>「企业」</strong>(展示对公账户信息表单) / <strong>「灵活用工平台」(深圳专属)</strong>。</li>
|
||||||
|
</ul>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="600" :max-width="375" src="/images/shareBenefit/img_6.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h4 id="_2-2-4-填写信息-以个人为例" tabindex="-1"><a class="header-anchor" href="#_2-2-4-填写信息-以个人为例"><span>2.2.4 填写信息(以个人为例)</span></a></h4>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_7.png" loading="lazy"></LongPicSplit>
|
||||||
|
<br><br>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2050" :max-width="375" src="/images/shareBenefit/img_8.png" loading="lazy" ></LongPicSplit>
|
||||||
|
<br><br>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2050" :max-width="375" src="/images/shareBenefit/img_9.png" loading="lazy" ></LongPicSplit>
|
||||||
|
<p><strong>必填项要求</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>身份证号:本人真实身份证号(合约签署专用);</li>
|
||||||
|
<li>银行卡号:16-19位实名银行卡号;</li>
|
||||||
|
<li>开户行:完整名称(如“XX银行XX市XX支行”,需与银行预留信息一致);</li>
|
||||||
|
<li>开户人姓名:与银行卡实名一致(不可修改,否则无法到账);</li>
|
||||||
|
<li>预留手机号:银行绑定的手机号(若触发短信验证,需填写验证码)。</li>
|
||||||
|
</ul>
|
||||||
|
<p><strong>操作步骤</strong>:</p>
|
||||||
|
<ol>
|
||||||
|
<li>信息填写完毕,点击 <strong>「签署合约」按钮</strong>,跳转至合约签署页面;</li>
|
||||||
|
<li>点击 <strong>「签署」</strong>,弹出 <strong>「签署意愿确认」弹框</strong>,输入手机号验证码完成签署。</li>
|
||||||
|
<li>签署完成后,需要等 <strong>「友福同享」</strong> 也进行签署后才可进行提现,灵工平台(深圳)需要先申请灵工平台账户。</li>
|
||||||
|
</ol>
|
||||||
|
<h3 id="_2-3-合约分享-公司账户" tabindex="-1"><a class="header-anchor" href="#_2-3-合约分享-公司账户"><span>2.3 合约分享(公司账户)</span></a></h3>
|
||||||
|
<ol>
|
||||||
|
<li><strong>选择合约分享按钮</strong></li>
|
||||||
|
</ol>
|
||||||
|
<p>在我的合约中,双方已签署完成,合约类型为 <strong>「公司」</strong> 的合约可进行分享。</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_a11.png" loading="lazy"></LongPicSplit>
|
||||||
|
<ol start="2">
|
||||||
|
<li><strong>扫码接受该合约</strong></li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_a2.png" loading="lazy"></LongPicSplit>
|
||||||
|
<ol start="3">
|
||||||
|
<li><strong>接受后即可使用该合约进行提现</strong></li>
|
||||||
|
</ol>
|
||||||
|
<p>使用浏览器扫描该二维码后,登录完成即可选择接受该二维码,接受后即存在该合约,可使用该合约进行提现,提现步骤相同。</p>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_a3.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h3 id="_2-4-发票上传与提现提交-点击查看如何开发票" tabindex="-1"><a class="header-anchor" href="#_2-4-发票上传与提现提交-点击查看如何开发票"><span>2.4 发票上传与提现提交(<RouteLink to="/posts/shareBenefit.html#%E4%BA%94%E3%80%81%E5%BC%80%E7%A5%A8%E6%8C%87%E5%BC%95%E5%92%8C%E7%81%B5%E6%B4%BB%E7%94%A8%E5%B7%A5%E5%B9%B3%E5%8F%B0%E8%B4%A6%E6%88%B7-%E6%B7%B1%E5%9C%B3">点击查看如何开发票</RouteLink>)</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><strong>已有有效合约</strong>:选择对应分公司合约,点击 <strong>「确定」</strong>,进入发票上传环节。</p>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="/images/shareBenefit/img_3.png" loading="lazy"></LongPicSplit></li>
|
||||||
|
</ul>
|
||||||
|
<ol>
|
||||||
|
<li><strong>发票要求弹窗</strong>:
|
||||||
|
<ul>
|
||||||
|
<li>系统自动提示需上传的发票信息(含对应公司名称、发票金额),按要求准备并上传发票。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080" :original-height="2375" :max-width="375" src="/images/shareBenefit/img_10.png" loading="lazy"></LongPicSplit><ol start="2">
|
||||||
|
<li>
|
||||||
|
<p><strong>确认提现金额</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>弹出 <strong>「金额确认 + 发票上传弹窗」</strong>,核对金额并上传发票。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>提交申请</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>点击 <strong>「提交」</strong>,后续需要等待财务相关人员进行操作,可在首页提现记录查看相关提现记录。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_11.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h2 id="四、查看提现记录" tabindex="-1"><a class="header-anchor" href="#四、查看提现记录"><span>四、查看提现记录</span></a></h2>
|
||||||
|
<h3 id="_3-1-进入记录列表" tabindex="-1"><a class="header-anchor" href="#_3-1-进入记录列表"><span>3.1 进入记录列表</span></a></h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><strong>操作</strong>:在分润主页面,点击右上角 <strong>「提现记录」入口</strong>。</p>
|
||||||
|
<p>列表展示 <strong>申请时间、提现金额、状态、到账时间</strong>(若已到账);</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_12.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h3 id="_3-2-查看记录详情" tabindex="-1"><a class="header-anchor" href="#_3-2-查看记录详情"><span>3.2 查看记录详情</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="/images/shareBenefit/img_14.png" loading="lazy"></LongPicSplit>
|
||||||
|
<ul>
|
||||||
|
<li><strong>操作</strong>
|
||||||
|
<ul>
|
||||||
|
<li><strong>「审核失败」</strong>:弹出提示弹窗,展示失败原因(如“账户信息不符”“银行拒绝受理”);
|
||||||
|
<ul>
|
||||||
|
<li>点击 <strong>「提现失败」</strong> 文字或图标,触发以上反馈;</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>「已到账」</strong>:显示具体到账时间、银行流水单号(支持核对);</li>
|
||||||
|
<li><strong>「审核中」</strong>:提示“审核处理中,请勿重复提交”。</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="五、开票指引和灵活用工平台账户-深圳" tabindex="-1"><a class="header-anchor" href="#五、开票指引和灵活用工平台账户-深圳"><span>五、开票指引和灵活用工平台账户(深圳)</span></a></h2>
|
||||||
|
<h3 id="_1-深圳公司开发票指引" tabindex="-1"><a class="header-anchor" href="#_1-深圳公司开发票指引"><span>1.深圳公司开发票指引</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="31350" :max-width="375" src="https://images.health.ufutx.com/202602/24/be45292acad45867d2f28386884e37f4.jpg" loading="lazy" ></LongPicSplit>
|
||||||
|
<h3 id="_2-个人开发票指引" tabindex="-1"><a class="header-anchor" href="#_2-个人开发票指引"><span>2.个人开发票指引</span></a></h3>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="9350" :max-width="375" src="https://images.health.ufutx.com/202602/12/2393593f30bf374e9300fa1e22f55e86.jpg" loading="lazy" ></LongPicSplit>
|
||||||
|
<h3 id="_3-灵工平台账号指引-深圳" tabindex="-1"><a class="header-anchor" href="#_3-灵工平台账号指引-深圳"><span>3.灵工平台账号指引(深圳)</span></a></h3>
|
||||||
|
<h4 id="_3-1-灵工平台账号申请二维码" tabindex="-1"><a class="header-anchor" href="#_3-1-灵工平台账号申请二维码"><span>3.1 灵工平台账号申请二维码</span></a></h4>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="1100" :max-width="375" src="https://images.health.ufutx.com/202603/04/a781b440fad4adfc951acebdeb7ed2bf.png" loading="lazy"></LongPicSplit>
|
||||||
|
<h4 id="_3-2-灵工平台账号申请步骤" tabindex="-1"><a class="header-anchor" href="#_3-2-灵工平台账号申请步骤"><span>3.2 灵工平台账号申请步骤</span></a></h4>
|
||||||
|
<ol>
|
||||||
|
<li>扫描二维码,上传身份证信息,填写手机号</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="3175" :max-width="375" alt="" src="https://images.health.ufutx.com/202603/13/2095898b0c3ac9f314343ce6bf6c15d0.jpg" ></LongPicSplit>
|
||||||
|
<ol start="2">
|
||||||
|
<li>签约园区选择【第肆纪(深圳)数字科技有限公司】</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/13/1e708f04e0dbff54f60e4ee9317bae0a.png" ></LongPicSplit>
|
||||||
|
<ol start="3">
|
||||||
|
<li>点击下一步,确认信息无误后开始进行人脸认证</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/094cf35390aae711dde7ff1484275836.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/c6477d9d80787f1e5a12dbe43a5f718c.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/28b86e4f0ee5dc31b03f5a743583f049.jpg" ></LongPicSplit>
|
||||||
|
<ol start="4">
|
||||||
|
<li>认证完成后填写银行卡号,可上传或填写银行卡信息</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/f1e0a4596e0e6467f91bbf72f33928eb.jpg" ></LongPicSplit>
|
||||||
|
<ol start="5">
|
||||||
|
<li>填写完成后进行签约</li>
|
||||||
|
</ol>
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/dd454d1699418d1a5a8ba841faa1c2bb.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/6b5bde35c3d5f6e8551c5b24421ff1fb.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/28a8205cec35b3f2e62b1dd6f6842d5b.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/084728311ed2ef075bea167ccfc2d363.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/e2f3a5d1086acc7f26fcfca62f3a73b0.jpg" ></LongPicSplit>
|
||||||
|
<br />
|
||||||
|
<LongPicSplit :original-width="1080"
|
||||||
|
:original-height="2375" :max-width="375" src="https://images.health.ufutx.com/202603/04/d7a41a6052bde44a816662b319db93b9.jpg" ></LongPicSplit>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
3
docs/.vuepress/.temp/pages/posts/teacher.html.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/teacher.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/teacher.html\",\"title\":\"健康管理师\",\"lang\":\"zh-CN\",\"frontmatter\":{},\"git\":{\"updatedTime\":1766471007000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":2}],\"changelog\":[{\"hash\":\"326fedda6067ab0da7a7c497e8fef608057cb12e\",\"time\":1766471007000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"},{\"hash\":\"e73bbe09086600f49aec344301695549746ba3c4\",\"time\":1759135896000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"初始化\"}]},\"filePathRelative\":\"posts/teacher.md\"}")
|
||||||
|
export { comp, data }
|
||||||
10
docs/.vuepress/.temp/pages/posts/teacher.html.vue
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<template><div><h1 id="健康管理师" tabindex="-1"><a class="header-anchor" href="#健康管理师"><span>健康管理师</span></a></h1>
|
||||||
|
<h2 id="dma方案前" tabindex="-1"><a class="header-anchor" href="#dma方案前"><span>DMA方案前</span></a></h2>
|
||||||
|
<h3 id="一-制定健康方案" tabindex="-1"><a class="header-anchor" href="#一-制定健康方案"><span>(一)制定健康方案</span></a></h3>
|
||||||
|
<p>收到客服 “健康档案已确认” 通知后,3 个工作日内登录【后台系统 - 方案设置模块】,深度解读客户健康档案、健康评估表及相关健康数据,结合 AI 健康方案工具,制定个性化、可落地的健康方案(涵盖饮食、运动、作息、心理等维度),方案内容需包含周期(49 天)、每日餐单类型等核心信息,完成后点击 “提交方案”,系统自动通知客服和行政(电话18148522932)。</p>
|
||||||
|
<p>方案需科学、合理,符合客户健康状况和需求。</p>
|
||||||
|
<p>若在制定方案过程中发现健康档案信息不足,联系客服向客户补充收集。</p>
|
||||||
|
<img src="https://images.health.ufutx.com/202512/23/9ef373b5336e95fd0fa1221b8b578391.jpeg" loading="lazy" style="width:100%;height:auto;marginTop:10px;">
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
import comp from "D:/xue/dma_handbook/docs/.vuepress/.temp/pages/posts/userServiceProcess.html.vue"
|
||||||
|
const data = JSON.parse("{\"path\":\"/posts/userServiceProcess.html\",\"title\":\"用户服务流程说明\",\"lang\":\"zh-CN\",\"frontmatter\":{\"title\":\"用户服务流程说明\",\"sidebarDepth\":2},\"git\":{\"updatedTime\":1765358621000,\"contributors\":[{\"name\":\"lanzhihui\",\"username\":\"\",\"email\":\"503792708@qq.com\",\"commits\":1}],\"changelog\":[{\"hash\":\"55e24b1ebd4366534ba91b6b6e7e2e216de4adb2\",\"time\":1765358621000,\"email\":\"503792708@qq.com\",\"author\":\"lanzhihui\",\"message\":\"update\"}]},\"filePathRelative\":\"posts/userServiceProcess.md\"}")
|
||||||
|
export { comp, data }
|
||||||
131
docs/.vuepress/.temp/pages/posts/userServiceProcess.html.vue
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<template><div><h1 id="用户服务流程说明" tabindex="-1"><a class="header-anchor" href="#用户服务流程说明"><span>用户服务流程说明</span></a></h1>
|
||||||
|
<p>用户可通过群聊中的「<strong>服务流程</strong>」按钮,查看其完整的健康管理服务流程。该流程分为三个阶段:<strong>方案前</strong>、<strong>方案中</strong>、<strong>方案后</strong>,每个阶段包含具体任务与进度状态。</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>📌 用户可在群聊中点击绿色圆形按钮「服务流程」进入详情页,实时掌握当前服务进度。</p>
|
||||||
|
</blockquote>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/02/54e456005dc534f90e1271539c403869.png" alt="服务流程入口"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🎯-整体服务流程概览" tabindex="-1"><a class="header-anchor" href="#🎯-整体服务流程概览"><span>🎯 整体服务流程概览</span></a></h2>
|
||||||
|
<p>用户服务流程以 <strong>环形进度条</strong> 展示整体完成度,并按阶段划分任务:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>方案前</strong>:完成签约与信息准备</li>
|
||||||
|
<li><strong>方案中</strong>:执行个性化健康计划</li>
|
||||||
|
<li><strong>方案后</strong>:提交反馈与复检报告</li>
|
||||||
|
</ul>
|
||||||
|
<blockquote>
|
||||||
|
<p>🔍 当前进度显示为 <code v-pre>25%</code>,表示已进入“方案前”阶段,部分任务已完成。</p>
|
||||||
|
</blockquote>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/02/c8e503ff00fe07fc81106086adf5ad7f.jpeg" alt="整体服务流程概览"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="📋-阶段一-方案前" tabindex="-1"><a class="header-anchor" href="#📋-阶段一-方案前"><span>📋 阶段一:方案前</span></a></h2>
|
||||||
|
<p>此阶段为服务启动准备期,需完成以下关键步骤:</p>
|
||||||
|
<h4 id="_1-购买与支付" tabindex="-1"><a class="header-anchor" href="#_1-购买与支付"><span>1. 购买与支付</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>完成服务订单支付</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_2-签署合约" tabindex="-1"><a class="header-anchor" href="#_2-签署合约"><span>2. 签署合约</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>在线签署《健康 DMA 人体驾照》学习合约</li>
|
||||||
|
<li>操作:点击「去签署」跳转至签约页面</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_3-信息档案" tabindex="-1"><a class="header-anchor" href="#_3-信息档案"><span>3. 信息档案</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>填写个人健康档案</li>
|
||||||
|
</ul>
|
||||||
|
<blockquote>
|
||||||
|
<p>💡 提示:</p>
|
||||||
|
<ul>
|
||||||
|
<li>合约签署是服务生效的前提,请务必完成;</li>
|
||||||
|
<li>信息档案将用于AI健康服务方案定制。</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/02/ee128a3d569efded874171c69a32189c.jpeg" alt="方案前"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🧩-阶段二-方案中" tabindex="-1"><a class="header-anchor" href="#🧩-阶段二-方案中"><span>🧩 阶段二:方案中</span></a></h2>
|
||||||
|
<p>此阶段为核心执行期,用户需每日参与并同步数据:</p>
|
||||||
|
<h4 id="_1-查看每日餐单" tabindex="-1"><a class="header-anchor" href="#_1-查看每日餐单"><span>1. 查看每日餐单</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>查看个性化营养餐单</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_2-每日同步健康数据" tabindex="-1"><a class="header-anchor" href="#_2-每日同步健康数据"><span>2. 每日同步健康数据</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><strong>佩戴手环</strong>,同步运动与睡眠数据
|
||||||
|
<ul>
|
||||||
|
<li>操作:点击「同步数据」手动触发</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><strong>使用体脂秤</strong>,同步体重、体脂等指标
|
||||||
|
<ul>
|
||||||
|
<li>操作:点击「同步数据」上传测量结果</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_3-第二次视频会议" tabindex="-1"><a class="header-anchor" href="#_3-第二次视频会议"><span>3. 第二次视频会议</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>基于阶段性执行数据与健康反馈,动态调整后续服务方案</li>
|
||||||
|
</ul>
|
||||||
|
<blockquote>
|
||||||
|
<p>🔄 数据同步建议:</p>
|
||||||
|
<ul>
|
||||||
|
<li>每日早晚各一次,确保数据连续性;</li>
|
||||||
|
<li>手环与体脂秤数据可自动上传,也可手动补录。</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/02/f0dfa5e5a86278ada7f807c8e9e154ce.jpeg" alt="方案中"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🎯-阶段三-方案后" tabindex="-1"><a class="header-anchor" href="#🎯-阶段三-方案后"><span>🎯 阶段三:方案后</span></a></h2>
|
||||||
|
<p>此阶段为服务闭环期,需完成总结与反馈:</p>
|
||||||
|
<h4 id="_1-第三次视频会议" tabindex="-1"><a class="header-anchor" href="#_1-第三次视频会议"><span>1. 第三次视频会议</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>解读 49 天健康数据总结报告,深度复盘方案执行全流程</li>
|
||||||
|
<li>状态:📅 待安排</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_2-方案反馈" tabindex="-1"><a class="header-anchor" href="#_2-方案反馈"><span>2. 方案反馈</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li><strong>填写问卷</strong>:方案结束后,填写服务反馈问卷</li>
|
||||||
|
<li><strong>上传照片</strong>:上传方案后身体变化照片</li>
|
||||||
|
</ul>
|
||||||
|
<h4 id="_3-提交复检报告" tabindex="-1"><a class="header-anchor" href="#_3-提交复检报告"><span>3. 提交复检报告</span></a></h4>
|
||||||
|
<ul>
|
||||||
|
<li>方案后第 23 天,上传复检报告(如体检、体测等)</li>
|
||||||
|
</ul>
|
||||||
|
<p><img src="https://images.health.ufutx.com/202512/02/b3d416eb47ceaa791f96604472a5a12d.jpeg" alt="方案后"></p>
|
||||||
|
<hr>
|
||||||
|
<h2 id="🔍-使用说明" tabindex="-1"><a class="header-anchor" href="#🔍-使用说明"><span>🔍 使用说明</span></a></h2>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>功能</th>
|
||||||
|
<th>操作方式</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>查看服务流程</td>
|
||||||
|
<td>在群聊中点击「服务流程」按钮</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>签署合约</td>
|
||||||
|
<td>点击「去签署」跳转至电子合同平台</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>同步数据</td>
|
||||||
|
<td>在「方案中」点击「同步数据」按钮</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>提交反馈</td>
|
||||||
|
<td>在「方案后」完成问卷与照片上传</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<blockquote>
|
||||||
|
<p>💡 <strong>最佳实践建议</strong>:</p>
|
||||||
|
<ul>
|
||||||
|
<li>建议用户每日固定时间同步手环与体脂秤数据;</li>
|
||||||
|
<li>客服可主动引导用户完成“方案后”任务,提升服务满意度。</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
</div></template>
|
||||||
|
|
||||||
|
|
||||||
5
docs/.vuepress/.temp/prismjs/config.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/highlighter-helper/lib/client/styles/base.css"
|
||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-prismjs/lib/client/styles/nord.css"
|
||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/highlighter-helper/lib/client/styles/line-numbers.css"
|
||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/highlighter-helper/lib/client/styles/notation-highlight.css"
|
||||||
|
import "D:/xue/dma_handbook/node_modules/@vuepress/plugin-prismjs/node_modules/@vuepress/highlighter-helper/lib/client/styles/code-block-title.css"
|
||||||
0
docs/.vuepress/.temp/styles/index.scss
Normal file
1
docs/.vuepress/.temp/styles/palette.scss
Normal file
@ -0,0 +1 @@
|
|||||||
|
@forward 'file:///D:/xue/dma_handbook/docs/.vuepress/styles/palette.scss';
|
||||||
153
docs/.vuepress/client.js
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
// 导入自定义布局
|
||||||
|
import LoginLayout from './layouts/LoginLayout.vue'
|
||||||
|
// 导入默认布局(必须保留,否则其他页面会404)
|
||||||
|
import DefaultLayout from '@vuepress/theme-default/layouts/Layout.vue'
|
||||||
|
|
||||||
|
import { defineClientConfig } from 'vuepress/client'
|
||||||
|
import { createPinia } from 'pinia'
|
||||||
|
// 1. 补全所有缺失的核心导入(适配docs根目录的store/utils)
|
||||||
|
import { useUserStore } from './store/modules/user'
|
||||||
|
import { showToast, getUserInfo } from '../utils/request' // 新增getUserInfo
|
||||||
|
// 核心修改:导入全局常量SITE_BASE
|
||||||
|
import { SITE_BASE } from './constants.js';
|
||||||
|
// 原有组件导入(位置不变,无需修改)
|
||||||
|
import WithAuth from './components/WithAuth.vue'
|
||||||
|
import Login from './components/Login.vue'
|
||||||
|
import helperHTML from './components/helperHTML.vue'
|
||||||
|
import longPic from './components/longPic.vue'
|
||||||
|
import FaqList from './components/FaqList.vue'
|
||||||
|
import LongPicSplit from './components/LongPicSplit.vue'
|
||||||
|
|
||||||
|
export default defineClientConfig({
|
||||||
|
// 新增:注册布局
|
||||||
|
layouts: {
|
||||||
|
Layout: DefaultLayout, // 默认布局
|
||||||
|
LoginLayout: LoginLayout // 登录页布局
|
||||||
|
},
|
||||||
|
// 2. 解构出router(路由守卫必须用)
|
||||||
|
enhance({ app, router }) {
|
||||||
|
const pinia = createPinia()
|
||||||
|
app.use(pinia)
|
||||||
|
// 全局注册组件(原有逻辑,无问题)
|
||||||
|
app.component('WithAuth', WithAuth)
|
||||||
|
app.component('Login', Login)
|
||||||
|
app.component('helperHTML', helperHTML)
|
||||||
|
app.component('longPic', longPic)
|
||||||
|
app.component('FaqList', FaqList)
|
||||||
|
app.component('LongPicSplit', LongPicSplit)
|
||||||
|
|
||||||
|
// 权限指令v-auth:修复this指向+Pinia实例化问题
|
||||||
|
app.directive('auth', {
|
||||||
|
mounted(el, binding) {
|
||||||
|
// 3. Pinia仓库必须执行实例化(核心修复)
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const requiredRoles = binding.value
|
||||||
|
if (!requiredRoles) return
|
||||||
|
// 未登录/无权限直接隐藏
|
||||||
|
if (!userStore.isLogin) {
|
||||||
|
el.style.display = 'none'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let hasPermission = false
|
||||||
|
if (typeof requiredRoles === 'string') {
|
||||||
|
hasPermission = userStore.hasRole(requiredRoles)
|
||||||
|
} else if (Array.isArray(requiredRoles)) {
|
||||||
|
hasPermission = requiredRoles.some(role => userStore.hasRole(role))
|
||||||
|
}
|
||||||
|
if (!hasPermission) el.style.display = 'none'
|
||||||
|
},
|
||||||
|
updated(el, binding) {
|
||||||
|
// 4. 修复this指向问题:直接复用mounted逻辑,不用this
|
||||||
|
this.mounted.call(this, el, binding)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 全局路由守卫:VuePress 2.x 适配版(白名单+未登录跳登录)
|
||||||
|
const whiteList = ['/login.html'] // 无需登录的页面
|
||||||
|
|
||||||
|
// 上线做处理
|
||||||
|
if (typeof window == 'undefined') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 隐藏登录功能
|
||||||
|
// router.beforeEach(async (to, from, next) => {
|
||||||
|
// const userStore = useUserStore()
|
||||||
|
// const isLogin = userStore.isLogin
|
||||||
|
//
|
||||||
|
// // 白名单页面,直接放行
|
||||||
|
// if (whiteList.includes(to.path)) {
|
||||||
|
// next()
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if (typeof window == 'undefined') {
|
||||||
|
// next()
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// // 未登录:跳登录页并记录跳转前地址(适配base: /dma_handbook/)
|
||||||
|
// // 替换client.js中路由守卫的未登录跳转代码
|
||||||
|
// if (!isLogin) {
|
||||||
|
// showToast('请先登录后访问')
|
||||||
|
// // 核心修复:直接使用to.fullPath(已包含SITE_BASE),无需手动拼接
|
||||||
|
// let redirectPath = to.fullPath
|
||||||
|
// // 兜底校验:极端情况若fullPath未带SITE_BASE,手动拼接(防止地址栏手动修改)
|
||||||
|
// if (!redirectPath.startsWith(SITE_BASE)) {
|
||||||
|
// redirectPath = `${SITE_BASE}${redirectPath.replace(/^\//, '')}` // 去掉开头的/,避免双斜杠
|
||||||
|
// }
|
||||||
|
// // 编码后拼接登录页地址
|
||||||
|
// const redirect = encodeURIComponent(redirectPath)
|
||||||
|
// window.location.href = `${SITE_BASE}login.html?redirect=${redirect}`
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// // 核心修改:仅【已登录 + 未拉取过用户信息】时,才调用接口
|
||||||
|
// if (!userStore.isUserInfoFetched) {
|
||||||
|
// await getUserInfo(userStore)
|
||||||
|
// // 拉取成功后,更新标记为true(本次会话不再重复调用)
|
||||||
|
// userStore.setUserInfoFetched(true)
|
||||||
|
// }
|
||||||
|
// // 已登录,正常放行
|
||||||
|
// next()
|
||||||
|
// })
|
||||||
|
// ==============================================
|
||||||
|
// 【唯一正确】等待页面完全加载完再滚动锚点
|
||||||
|
// 解决:图片/长图未加载完 → 滚动错位、自动上飘
|
||||||
|
// ==============================================
|
||||||
|
// ==============================================
|
||||||
|
// 【VuePress 正确】监听页面完全加载完毕
|
||||||
|
// 100% 解决:图片未加载完 → 滚动错位、往上飘
|
||||||
|
// ==============================================
|
||||||
|
router.afterEach(async (to) => {
|
||||||
|
if (!to.hash) return
|
||||||
|
|
||||||
|
// ======================================
|
||||||
|
// 【这里就是:等待页面完全加载完成】
|
||||||
|
// ======================================
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 200)) // 等待DOM渲染
|
||||||
|
|
||||||
|
// 等待【所有图片】加载完成
|
||||||
|
await Promise.allSettled(
|
||||||
|
Array.from(document.images).map(img => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
if (img.complete) resolve()
|
||||||
|
img.onload = resolve
|
||||||
|
img.onerror = resolve
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 200)) // 等待高度稳定
|
||||||
|
console.log('12321==')
|
||||||
|
|
||||||
|
// ======================================
|
||||||
|
// 【到这里:页面才算 100% 加载完成】
|
||||||
|
// 现在再滚动,绝对不会飘!
|
||||||
|
// ======================================
|
||||||
|
// const target = document.querySelector(to.hash)
|
||||||
|
// if (!target) return
|
||||||
|
//
|
||||||
|
// const top = target.offsetTop - 60
|
||||||
|
// window.scrollTo(0, top)
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
setup() {},
|
||||||
|
})
|
||||||
140
docs/.vuepress/components/FaqList.vue
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, onUnmounted } from 'vue'
|
||||||
|
import request from '../../utils/request.js'
|
||||||
|
|
||||||
|
const faqList = ref([])
|
||||||
|
const loading = ref(false)
|
||||||
|
const activeId = ref(null)
|
||||||
|
|
||||||
|
// 分页
|
||||||
|
const currentPage = ref(1)
|
||||||
|
const pageSize = ref(15)
|
||||||
|
const totalPage = ref(1)
|
||||||
|
const finished = ref(false)
|
||||||
|
|
||||||
|
// 获取列表
|
||||||
|
const getFaqList = async () => {
|
||||||
|
if (finished.value || loading.value) return
|
||||||
|
loading.value = true
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await request({
|
||||||
|
url: '/go/api/h5/v1/other/get/question/list',
|
||||||
|
method: 'get',
|
||||||
|
params: {
|
||||||
|
page: currentPage.value,
|
||||||
|
page_size: pageSize.value
|
||||||
|
},
|
||||||
|
hideLoading: true
|
||||||
|
})
|
||||||
|
|
||||||
|
totalPage.value = res.total_page || 1
|
||||||
|
if (res.list?.length) {
|
||||||
|
faqList.value.push(...res.list)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否还有下一页
|
||||||
|
if (currentPage.value >= totalPage.value) {
|
||||||
|
finished.value = true
|
||||||
|
} else {
|
||||||
|
currentPage.value += 1
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('获取FAQ失败', err)
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换展开/收起
|
||||||
|
const toggle = (id) => {
|
||||||
|
activeId.value = activeId.value === id ? null : id
|
||||||
|
}
|
||||||
|
|
||||||
|
// 滚动监听(触底加载)
|
||||||
|
const handleScroll = () => {
|
||||||
|
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
|
||||||
|
const clientHeight = document.documentElement.clientHeight
|
||||||
|
const scrollHeight = document.documentElement.scrollHeight
|
||||||
|
|
||||||
|
// 距离底部 100px 加载下一页
|
||||||
|
if (scrollTop + clientHeight + 100 >= scrollHeight) {
|
||||||
|
getFaqList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getFaqList()
|
||||||
|
window.addEventListener('scroll', handleScroll)
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('scroll', handleScroll)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="faq-container">
|
||||||
|
<div v-for="item in faqList" :key="item.id" class="faq-item">
|
||||||
|
<div class="faq-title" @click="toggle(item.id)">
|
||||||
|
<span>{{ item.title }}</span>
|
||||||
|
<span class="arrow">{{ activeId === item.id ? '−' : '+' }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-show="activeId === item.id" class="faq-content">
|
||||||
|
<div v-html="item.content"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 加载提示 -->
|
||||||
|
<div v-if="loading" class="loading-tip">加载中...</div>
|
||||||
|
<!-- <div v-if="finished && faqList.length > 0" class="finished-tip">已加载全部</div>-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.faq-container {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.faq-item {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.faq-title {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 14px 16px;
|
||||||
|
background: #f9f9f9;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
.faq-title:hover {
|
||||||
|
background: #f3f3f3;
|
||||||
|
}
|
||||||
|
.arrow {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.faq-content {
|
||||||
|
padding: 16px;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
.faq-content :deep(img) {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
.loading-tip {
|
||||||
|
padding: 16px;
|
||||||
|
text-align: center;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.finished-tip {
|
||||||
|
padding: 16px;
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
161
docs/.vuepress/components/Login.vue
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div class="login-page">
|
||||||
|
<div class="login-form">
|
||||||
|
<h2>DMA服务手册 - 登录</h2>
|
||||||
|
<div class="form-item">
|
||||||
|
<label>账号:</label>
|
||||||
|
<input v-model="form.username" type="text" placeholder="请输入账号" />
|
||||||
|
</div>
|
||||||
|
<div class="form-item">
|
||||||
|
<label>密码:</label>
|
||||||
|
<input v-model="form.password" type="password" placeholder="请输入密码" />
|
||||||
|
</div>
|
||||||
|
<button class="login-btn" @click="handleLogin" :disabled="loading">
|
||||||
|
{{ loading ? '登录中...' : '立即登录' }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted } from 'vue';
|
||||||
|
import request from '../../utils/request';
|
||||||
|
import { useUserStore } from '../store/modules/user';
|
||||||
|
import { showToast } from '../../utils/request';
|
||||||
|
import { SITE_BASE } from '../constants.js';
|
||||||
|
|
||||||
|
// const VUEPRESS_BASE = '/dma_handbook/';
|
||||||
|
|
||||||
|
// 登录表单
|
||||||
|
const form = ref({
|
||||||
|
username: '15622316024',
|
||||||
|
password: '123',
|
||||||
|
});
|
||||||
|
// 加载状态
|
||||||
|
const loading = ref(false);
|
||||||
|
// 获取用户仓库
|
||||||
|
const userStore = useUserStore();
|
||||||
|
// 跳转地址(从URL参数中获取)
|
||||||
|
const redirect = ref('');
|
||||||
|
|
||||||
|
// 初始化,获取跳转前地址
|
||||||
|
onMounted(() => {
|
||||||
|
if (typeof window === "undefined"){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const searchParams = new URLSearchParams(window.location.search);
|
||||||
|
console.log(searchParams,'searchParams');
|
||||||
|
// 获取URL中的redirect参数
|
||||||
|
const rawRedirect = searchParams.get('redirect') || '';
|
||||||
|
if (rawRedirect) {
|
||||||
|
// 解析参数,若解析失败则兜底到首页
|
||||||
|
try {
|
||||||
|
redirect.value = decodeURIComponent(rawRedirect);
|
||||||
|
} catch (e) {
|
||||||
|
redirect.value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 兜底:若redirect为空/不是以VUEPRESS_BASE开头,默认跳项目首页
|
||||||
|
if (!redirect.value || !redirect.value.startsWith(SITE_BASE)) {
|
||||||
|
redirect.value = `${SITE_BASE}`; // 首页地址:/dma_handbook/
|
||||||
|
}
|
||||||
|
console.log(redirect.value,'searchParams');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 处理登录
|
||||||
|
const handleLogin = async () => {
|
||||||
|
// 表单验证
|
||||||
|
if (!form.value.username) {
|
||||||
|
showToast('请输入账号');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!form.value.password) {
|
||||||
|
showToast('请输入密码');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
loading.value = true;
|
||||||
|
let data = {
|
||||||
|
mobile: '15622316024',
|
||||||
|
area_code: 86,
|
||||||
|
code: '009527',
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
// 调用后端登录接口(替换为你的实际登录接口地址)
|
||||||
|
const res = await request({
|
||||||
|
url: '/go/api/app/server/mobile/code/login', // 示例接口,需替换
|
||||||
|
method: 'POST',
|
||||||
|
data: data,
|
||||||
|
hideLoading: true, // 手动控制loading,避免重复提示
|
||||||
|
});
|
||||||
|
// 登录成功,回填数据(假设后端返回{token: 'xxx', userInfo: {id: 1, name: 'xxx', roles: ['coach']}})
|
||||||
|
userStore.setToken(res.api_token);
|
||||||
|
showToast('登录成功');
|
||||||
|
// 跳转到目标页面
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.href = decodeURIComponent(redirect.value);
|
||||||
|
}, 1000);
|
||||||
|
} catch (err) {
|
||||||
|
console.log('登录失败:', err);
|
||||||
|
showToast(err.msg || err.message || '登录失败,请检查账号密码');
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.login-page {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
|
.login-form {
|
||||||
|
width: 350px;
|
||||||
|
padding: 30px;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.login-form h2 {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.form-item {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.form-item label {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
.form-item input {
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.form-item input:focus {
|
||||||
|
border-color: #299764;
|
||||||
|
}
|
||||||
|
.login-btn {
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px;
|
||||||
|
background: #299764;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.login-btn:disabled {
|
||||||
|
background: #96d8b7;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
421
docs/.vuepress/components/LongPicSplit.vue
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, computed } from 'vue'
|
||||||
|
import { SITE_BASE, CDN_BASE} from '../constants';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
src: { type: String, required: true },
|
||||||
|
alt: { type: String, default: '长图' },
|
||||||
|
chunkHeight: { type: Number, default: 2000 },
|
||||||
|
// 【新增】可选:传入原图宽高以实现完美的无抖动占位
|
||||||
|
originalWidth: { type: Number, default: 0 },
|
||||||
|
originalHeight: { type: Number, default: 0 },
|
||||||
|
maxWidth: { type: [String, Number], default: '100%' }
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
const imageList = ref([])
|
||||||
|
const isLoading = ref(true)
|
||||||
|
|
||||||
|
// 预览层状态
|
||||||
|
const showViewer = ref(false)
|
||||||
|
const currentIndex = ref(0)
|
||||||
|
const viewImg = ref('')
|
||||||
|
|
||||||
|
// 缩放状态
|
||||||
|
const scale = ref(1)
|
||||||
|
const startScale = ref(1)
|
||||||
|
const startDistance = ref(0)
|
||||||
|
|
||||||
|
// 滑动状态
|
||||||
|
const startX = ref(0)
|
||||||
|
|
||||||
|
// 计算宽高比,用于 CSS aspect-ratio
|
||||||
|
const aspectRatioStyle = computed(() => {
|
||||||
|
if (props.originalWidth && props.originalHeight) {
|
||||||
|
return `${props.originalWidth} / ${props.originalHeight}`
|
||||||
|
}
|
||||||
|
return undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
// 打开预览
|
||||||
|
const openView = (idx) => {
|
||||||
|
if (imageList.value.length === 0) return
|
||||||
|
currentIndex.value = idx
|
||||||
|
viewImg.value = imageList.value[idx]
|
||||||
|
showViewer.value = true
|
||||||
|
scale.value = 1
|
||||||
|
document.body.style.overflow = 'hidden'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭预览
|
||||||
|
const closeView = () => {
|
||||||
|
showViewer.value = false
|
||||||
|
document.body.style.overflow = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上一张
|
||||||
|
const prevImg = () => {
|
||||||
|
if (currentIndex.value > 0) {
|
||||||
|
currentIndex.value--
|
||||||
|
viewImg.value = imageList.value[currentIndex.value]
|
||||||
|
scale.value = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下一张
|
||||||
|
const nextImg = () => {
|
||||||
|
if (currentIndex.value < imageList.value.length - 1) {
|
||||||
|
currentIndex.value++
|
||||||
|
viewImg.value = imageList.value[currentIndex.value]
|
||||||
|
scale.value = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸开始
|
||||||
|
const onTouchStart = (e) => {
|
||||||
|
if (e.touches.length === 1) {
|
||||||
|
startX.value = e.touches[0].clientX
|
||||||
|
}
|
||||||
|
if (e.touches.length === 2) {
|
||||||
|
startDistance.value = getDistance(e.touches[0], e.touches[1])
|
||||||
|
startScale.value = scale.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸移动
|
||||||
|
const onTouchMove = (e) => {
|
||||||
|
// 阻止默认滚动行为,确保缩放和滑动流畅
|
||||||
|
if (e.touches.length === 2 || (e.touches.length === 1 && scale.value > 1)) {
|
||||||
|
// e.preventDefault() 在 passive listener 中可能无效,但在 Vue 事件修饰符 .prevent 中有效
|
||||||
|
// 这里主要逻辑在模板中处理了 .prevent
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.touches.length === 2) {
|
||||||
|
const dist = getDistance(e.touches[0], e.touches[1])
|
||||||
|
// 限制缩放范围 1x - 5x
|
||||||
|
scale.value = Math.min(5, Math.max(1, startScale.value * (dist / startDistance.value)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触摸结束
|
||||||
|
const onTouchEnd = (e) => {
|
||||||
|
if (e.changedTouches.length === 1) {
|
||||||
|
const diff = e.changedTouches[0].clientX - startX.value
|
||||||
|
// 滑动阈值 60px
|
||||||
|
if (Math.abs(diff) > 60) {
|
||||||
|
diff > 0 ? prevImg() : nextImg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算双指距离
|
||||||
|
const getDistance = (p1, p2) => {
|
||||||
|
return Math.hypot(p2.clientX - p1.clientX, p2.clientY - p1.clientY)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔥 最大宽度样式
|
||||||
|
const wrapperStyle = computed(() => {
|
||||||
|
let maxW = props.maxWidth
|
||||||
|
if (typeof maxW === 'number') maxW = maxW + 'px'
|
||||||
|
return {
|
||||||
|
aspectRatio: aspectRatioStyle.value,
|
||||||
|
maxWidth: maxW
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// 🔥🔥🔥 核心修复:自动拼接 VuePress 本地图片路径
|
||||||
|
const getImageUrl = (url) => {
|
||||||
|
// 如果是网络图片直接返回
|
||||||
|
if (url.startsWith('http')) return url
|
||||||
|
|
||||||
|
// 如果是本地图片,自动拼接基准路径(解决 404)
|
||||||
|
const base = SITE_BASE || '/'
|
||||||
|
return base + url.replace(/^\//, '')
|
||||||
|
}
|
||||||
|
// 切割长图
|
||||||
|
const sliceImage = () => {
|
||||||
|
isLoading.value = true
|
||||||
|
const img = new Image()
|
||||||
|
// 处理跨域问题,如果图片在同源可忽略,但加上更稳健
|
||||||
|
img.crossOrigin = 'anonymous'
|
||||||
|
img.src = getImageUrl(props.src)
|
||||||
|
|
||||||
|
img.onload = () => {
|
||||||
|
const { width, height } = img
|
||||||
|
const num = Math.ceil(height / props.chunkHeight)
|
||||||
|
const slices = []
|
||||||
|
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
const canvas = document.createElement('canvas')
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
const h = Math.min(props.chunkHeight, height - i * props.chunkHeight)
|
||||||
|
|
||||||
|
canvas.width = width
|
||||||
|
canvas.height = h
|
||||||
|
|
||||||
|
// 绘制切片
|
||||||
|
ctx.drawImage(img, 0, i * props.chunkHeight, width, h, 0, 0, width, h)
|
||||||
|
// 转为 base64
|
||||||
|
slices.push(canvas.toDataURL('image/jpeg', 0.9)) // 0.9 质量平衡体积与清晰度
|
||||||
|
}
|
||||||
|
|
||||||
|
imageList.value = slices
|
||||||
|
isLoading.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
img.onerror = () => {
|
||||||
|
console.error('图片加载失败:', props.src)
|
||||||
|
isLoading.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// img.src = props.src
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
sliceImage()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="long-pic-slice no-medium-zoom"
|
||||||
|
:style="wrapperStyle"
|
||||||
|
>
|
||||||
|
<!-- 加载中占位提示 -->
|
||||||
|
<div v-if="isLoading" class="loading-state">
|
||||||
|
<span class="loading-text">正在加载长图...</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 切片列表 -->
|
||||||
|
<img
|
||||||
|
v-for="(data, idx) in imageList"
|
||||||
|
:key="idx"
|
||||||
|
:src="data"
|
||||||
|
:alt="`${alt}-${idx}`"
|
||||||
|
class="slice-img no-zoom"
|
||||||
|
loading="eager"
|
||||||
|
@click="openView(idx)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 全屏预览层 -->
|
||||||
|
<!-- <Teleport to="body">-->
|
||||||
|
<!-- <transition name="viewer-fade">-->
|
||||||
|
<div v-if="showViewer" class="viewer" @click="closeView">
|
||||||
|
<!-- 左箭头 -->
|
||||||
|
<div
|
||||||
|
class="arrow arrow-left"
|
||||||
|
@click.stop="prevImg"
|
||||||
|
:class="{ disabled: currentIndex <= 0 }"
|
||||||
|
>
|
||||||
|
‹
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 图片容器 (防止点击穿透) -->
|
||||||
|
<div class="viewer-content">
|
||||||
|
<img
|
||||||
|
:src="viewImg"
|
||||||
|
class="viewer-img"
|
||||||
|
:style="{ transform: `scale(${scale})` }"
|
||||||
|
@touchstart.prevent="onTouchStart"
|
||||||
|
@touchmove.prevent="onTouchMove"
|
||||||
|
@touchend.prevent="onTouchEnd"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右箭头 -->
|
||||||
|
<div
|
||||||
|
class="arrow arrow-right"
|
||||||
|
@click.stop="nextImg"
|
||||||
|
:class="{ disabled: currentIndex >= imageList.length - 1 }"
|
||||||
|
>
|
||||||
|
›
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 底部指示器 -->
|
||||||
|
<div class="indicator">
|
||||||
|
{{ currentIndex + 1 }} / {{ imageList.length }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 关闭按钮 (可选) -->
|
||||||
|
<div class="close-btn" @click.stop="closeView">×</div>
|
||||||
|
</div>
|
||||||
|
<!-- </transition>-->
|
||||||
|
<!-- </Teleport>-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.long-pic-slice {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
margin: 12px 0;
|
||||||
|
position: relative;
|
||||||
|
background-color: #f5f5f5; /* 加载时的背景色 */
|
||||||
|
|
||||||
|
/* 【核心修复】设置最小高度,防止锚点定位错误 */
|
||||||
|
/* 如果没有传入宽高比,至少占据 300px,避免高度为 0 */
|
||||||
|
min-height: 300px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 加载状态样式 */
|
||||||
|
.loading-state {
|
||||||
|
position: absolute;
|
||||||
|
top: 0; left: 0; right: 0; bottom: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 0;
|
||||||
|
color: #999;
|
||||||
|
font-size: 14px;
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.slice-img {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
/* 移除图片底部的微小间隙 */
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- 全屏预览样式 --- */
|
||||||
|
.viewer {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: rgba(0, 0, 0, 0.95);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 999999;
|
||||||
|
backdrop-filter: blur(5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewer-content {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
overflow: hidden; /* 防止放大后出现滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewer-img {
|
||||||
|
max-width: 90%;
|
||||||
|
max-height: 90vh;
|
||||||
|
object-fit: contain;
|
||||||
|
transition: transform 0.15s ease-out; /* 缩放过渡更跟手 */
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
box-shadow: 0 0 20px rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 箭头样式 */
|
||||||
|
.arrow {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
background: rgba(255, 255, 255, 0.15);
|
||||||
|
color: #fff;
|
||||||
|
font-size: 28px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 100;
|
||||||
|
user-select: none;
|
||||||
|
transition: all 0.2s;
|
||||||
|
border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow:hover:not(.disabled) {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateY(-50%) scale(1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-left { left: 20px; }
|
||||||
|
.arrow-right { right: 20px; }
|
||||||
|
|
||||||
|
.arrow.disabled {
|
||||||
|
opacity: 0.2;
|
||||||
|
cursor: not-allowed;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 指示器 */
|
||||||
|
.indicator {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 30px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
background: rgba(0, 0, 0, 0.6);
|
||||||
|
padding: 6px 16px;
|
||||||
|
border-radius: 20px;
|
||||||
|
z-index: 100;
|
||||||
|
font-family: monospace;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 关闭按钮 */
|
||||||
|
.close-btn {
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
background: rgba(0,0,0,0.2);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 100;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
.close-btn:hover {
|
||||||
|
background: rgba(255,255,255,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 淡入淡出动画 */
|
||||||
|
.viewer-fade-enter-active,
|
||||||
|
.viewer-fade-leave-active {
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
.viewer-fade-enter-from,
|
||||||
|
.viewer-fade-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 移动端适配 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.arrow {
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.arrow-left { left: 10px; }
|
||||||
|
.arrow-right { right: 10px; }
|
||||||
|
.viewer-img {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
39
docs/.vuepress/components/WithAuth.vue
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<template>
|
||||||
|
<div v-if="hasPermission">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
<div v-else class="no-permission">
|
||||||
|
<Login v-if="!isLoggedIn()" />
|
||||||
|
<template v-else>
|
||||||
|
无权限查看此内容
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { checkPermission, getCurrentUserRole, isLoggedIn, showLoginModal } from '../../utils/auth';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: ['requiredPerm'],
|
||||||
|
methods: {
|
||||||
|
isLoggedIn() {
|
||||||
|
return isLoggedIn();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
hasPermission() {
|
||||||
|
if (!isLoggedIn()) {
|
||||||
|
showLoginModal();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const role = getCurrentUserRole();
|
||||||
|
return checkPermission(role, this.requiredPerm);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
if (!isLoggedIn()) {
|
||||||
|
showLoginModal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
11
docs/.vuepress/components/helloWorld.vue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<script setup>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<h1>23432</h1>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
437
docs/.vuepress/components/helperHTML.vue
Normal file
@ -0,0 +1,437 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
import {reactive,toRefs, ref} from "vue";
|
||||||
|
import { defineComponent } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
index: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const {index,title} =toRefs(props)
|
||||||
|
|
||||||
|
const list = reactive([
|
||||||
|
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环为什么使用Type-C的充电接口?",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">1)Type-C比起USB充电接口有更强的兼容性:Type-C接口已成为移动设备最新的主流通用充电标准,目前主流电子设备品牌(例如:苹果、华为、小米、三星)均选用Type-C充电接口,无需为不同设备准备多种充电器,简化了充电设备的管理。</span></span></p>\n<p class=\"MsoNormal\" style=\"text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">2)耐用性和便捷性:Type-C接口具有正反插功能,使用更方便,同时也更加耐用,减少了插拔时损坏接口的风险。</span></span></p>\n<p class=\"MsoNormal\" style=\"text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">3)当前接口设计适用连接具备反充电功能的手机对手环进行充电,设备小,损耗手机电量少,不用担心手机电池损耗,随时移动充电便捷性强。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:30:09",
|
||||||
|
"update_time": "2025-03-26 17:54:40",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环电量怎么查看",
|
||||||
|
"content": "<p><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\"> 1)按下手环右侧按钮查看显示灯颜色,绿灯表示电量充足,正常使用没有问题。红灯闪烁表示电量不足,指示灯不亮表示没有电,请及时充电。</span></span></p>\n<p><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\"> 2)也可以通过</span><span style=\"font-family: 宋体;\">APP手环首页顶部电量百分比查看,电量低于30%的情况,请及时充电。</span></span></p>\n<p class=\"MsoNormal\" style=\"text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"> <img src=\"https://images.health.ufutx.com/202408/16/d2b5ca33bd970f64a6301fa75ae2eb221723775855837.jpeg\" /> </span></p>\n<p> <span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">后续会规划低电量预警警告提醒功能,请耐心等待。</span></span></p>\n<p> </p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:38:58",
|
||||||
|
"update_time": "2025-03-26 17:54:36",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环正确佩戴方式",
|
||||||
|
"content": "<p class=\"MsoNormal\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\"> 请将手环佩戴在手腕上方,传感器放置手背一面紧贴皮肤,松紧调整至舒适状态,</span><span style=\"font-family: 宋体;\">logo和表带置手外侧。正确佩戴有助于实时采集符合人体健康指标更准确的数据,请规范佩戴。</span></span></p>\n<p class=\"MsoNormal\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><img src=\"https://images.health.ufutx.com/202408/16/d2b5ca33bd970f64a6301fa75ae2eb221723776012907.jpeg\" /></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:40:26",
|
||||||
|
"update_time": "2025-03-26 17:55:09",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环连接不上手机APP",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">1)确认是否电量充足,按下手环传感器侧面按钮显示灯亮,代表有电,红色蓝色交替闪烁状态下显示电量不足需要及时充电。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">2)使用手环靠近连接手机再次尝试连接。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">3)检查当前连接手环是否被其他设备连接。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">4)尝试关闭蓝牙后再打开蓝牙再次连接。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">5)退出友福同享APP并重新打开或重启手机。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">6)检查手机是否开启勿扰模式、飞行模式、省电模式、超级省电模式等非常规状态模式,解除非常规状态后,重新尝试再次连接。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">以上方式都连接不了的情况,请截图保存好未连接状态界面显示,检查手机系统自带蓝牙能否搜索到对应手环,联系技术团队人员协助排查解决问题,并录入</span><span style=\"font-family: 宋体;\">BUG问题库进行追踪管理。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:40:53",
|
||||||
|
"update_time": "2025-03-26 17:55:17",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "运动步数与微信运动步数不一致",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">1)友福同享智能手环测量的是体动次数,综合全面反馈身体运动量,可以进入步数详情查看每小时体动量(步数),更能反映身体实际运动量,消耗的卡路里与实际更匹配。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">2)微信是借助手机陀螺仪信息获得步数,且不能显示每小时的步数。没有携带手机在身边,以及将手机放置口袋或者背包情况下并不能准确计量实际走路或运动步数。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:41:36",
|
||||||
|
"update_time": "2025-03-26 17:55:23",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "睡眠时间与实际有偏差",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">1)确认睡觉佩戴过程中是否有电,按下手环右侧按钮显示灯会亮,代表有电,红色蓝色交替闪烁状态下电量不足需要及时充电。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">2)检查连接状态,是否频繁掉线,部分手机型号比较老旧,连接适配性较弱,需要技术人员根据型号逐个排查。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">3)睡眠时间与实际不匹配,睡觉前后短时间平静躺卧低功耗休息类睡眠状态下判定为睡眠为正常状态。若在清醒起床状态,特别是运动状态下计入睡眠状况,截图保存好界面,联系技术人员收集睡眠数据做问题追踪处理。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">4)目前当天白天只能看到昨天18:00之后的睡眠数据,这是根据太阳落山自然生物钟规律,以及大部分人作息规律设置,会存在18:00之前连续睡眠数据看不到的情况,后续会规划可供选择的方案,比如根据连续睡眠时间来展示睡眠时长,满足特殊时间睡眠,或者昏睡等特殊人群睡眠查看需求。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:43:08",
|
||||||
|
"update_time": "2025-03-26 17:55:28",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环被他人绑定无法解绑",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">如是认识的人误操作绑定,可以先联系他本人解绑后重新绑定。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">如是不认识的人员绑定,又无法联系到他本人的情况下,请联系技术团队,确认情况属实,后台强制解绑并重新绑定。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">后续会规划申请解绑功能,人工审核确认本人手环是否被误绑定,人工通过解绑之后,可重新绑定对应手环,请耐心等待。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:43:46",
|
||||||
|
"update_time": "2025-03-26 17:56:09",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "首次绑定手环时,周边有好几个手环设备,不知道绑定哪个",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">请找个人少的地方,打开蓝牙,单独搜索链接自己手上的手环。后续会进行相关优化,请耐心等待。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">规划内容包含:包装盒会提供绑定二维码一对一进行手机绑定;如二维码不在身边或者丢失情况下,可以用搜索功能进行绑定,能轻松找到自己手上尚未被绑定的手环。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:45:04",
|
||||||
|
"update_time": "2025-03-26 17:56:16",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "安装app时提示恶意应用怎么办?",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">我们现在属于测试阶段,不能频繁更新到应用市场,由于个别类型手机有外来应用特殊管控,非应用商城安装包安装属于正常的风险提示,我们公司提供的下载链接和二维码本身不会携带病毒,可以放心下载安装。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">处理方式如下:正常情况下按照提示,确认已了解风险,并点击继续安装,即可安装成功。有些手机系统中途可能会出现验证锁屏密码等隐私验证信息来确保本人手机安全,按提示操作后即可安装成功。手机自带系统在开启纯净模式情况下也会出现这样的情况,关闭纯净模式,按提示下载安装即可安装成功。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:45:53",
|
||||||
|
"update_time": "2025-03-26 17:56:23",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "如何关闭纯净模式?",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">可以自行百度查找相关类型手机的纯净模式关闭方式或者联系公司技术人员进行操作。以华为手机为例,纯净模式下出现病毒应用风险提示,需先关闭纯净模式,进入手机设置</span><span style=\"font-family: 宋体;\">—》系统和更新—》纯净模式—》点击退出(或开启按钮至灰或者关闭)。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:46:14",
|
||||||
|
"update_time": "2025-03-26 17:56:28",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "手环佩戴过程中出现不舒适或者发红",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">我们人体本身有一个佩戴习惯问题,如果常年不佩戴东西会出现不习惯的感觉,就像佩戴手表一样,养成习惯,这种不舒适感就会减轻或者没有。佩戴超过三天或者更长,我们会感觉越来越好戴,甚至不想摘掉。部分人皮肤比较脆弱敏感,出汗多,天气下雨或者闷热情况下,长期不移动手环,可能出现发红等情况。不用担心,用湿纸巾擦拭清洁传感器接触皮肤面一两次一天,保持好卫生,经常移动一下传感器或者两个手轮着佩戴,保持佩戴贴肤但不紧绷的状态,则不会发生这类情况。</span></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">手环表带颜色和材质后续会有更多选择性,以满足不同人群需要。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:46:41",
|
||||||
|
"update_time": "2025-03-26 17:56:43",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "安装APP以及开放文件访问权限会不会被恶意获取用户信息或者数据挪作他用,具有隐私信息泄露的风险?",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">这个是完全不存在的,完全不用担心。我们的</span><span style=\"font-family: 宋体;\">APP上线前通过了工信部ICP备案,合法合规运行,不存在非法经营活动。遵守《互联网信息服务管理办法》,有健全的网络与信息安全保障措施,包括网站安全保障措施、信息安全保密管理制度、用户信息安全管理制度。备案号为:</span></span><strong><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: bold; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">粤</span><span style=\"font-family: 宋体;\">ICP备12008876号</span></span></strong><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">,查询地址:</span></span><span style=\"mso-spacerun: 'yes'; font-family: 宋体; color: #0000ff; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\">https://beian.miit.gov.cn/#/Integrated/recordQuery</span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; color: #0000ff; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><img src=\"https://images.health.ufutx.com/202408/16/d2b5ca33bd970f64a6301fa75ae2eb221723776441977.jpeg\" /></span></p>\n<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none; line-height: 19.0000pt; mso-line-height-rule: exactly;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">非手机系统应用商城下载安装权限开放过程中会存在一些风险提醒,不排除存在对外来合法合规</span><span style=\"font-family: 宋体;\">APP安装过程中提示过多风险提示信息,以引起用户注意,达到保护用户隐私安全目的,但这并不代表APP本身运行有问题,认准本公司提供的链接安装的APP不会存在违法违规行为,请放心使用。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:48:07",
|
||||||
|
"update_time": "2025-03-26 17:56:50",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "我反馈的问题会不会石沉大海",
|
||||||
|
"content": "<p class=\"MsoNormal\" style=\"mso-para-margin-left: 0.0000gd; text-indent: 24.0000pt; mso-char-indent-count: 2.0000; text-autospace: ideograph-numeric; mso-pagination: none;\"><span style=\"mso-spacerun: 'yes'; font-family: 宋体; font-weight: normal; font-size: 12.0000pt; mso-font-kerning: 1.0000pt;\"><span style=\"font-family: 宋体;\">亲爱的测试官,您好!有任何问题或建议我们都会认真对待,并全力解决。感恩每一位测试官的反馈与配合,每一次反馈都会让我们的产品变得更好更优秀,让我们满心欢喜一同陪伴并见证这一成长过程。</span></span></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2024-08-16 10:48:54",
|
||||||
|
"update_time": "2025-03-26 17:56:56",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "如何使用健康手环?",
|
||||||
|
"content": "<p><a title=\"点击查看使用健康手环视频~\" href=\"https://images.health.ufutx.com/202410/15/2024101401.mp4\">点击查看使用健康手环使用视频~</a></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-01-02 17:12:21",
|
||||||
|
"update_time": "2025-03-26 17:57:01",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "如何使用体脂秤?",
|
||||||
|
"content": "<p><a title=\"点击查看健康体脂秤使用视频~\" href=\"https://images.health.ufutx.com/202410/15/2024101402.mp4\">点击查看体脂秤使用视频~</a></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-01-02 17:14:20",
|
||||||
|
"update_time": "2025-03-26 17:57:06",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 17,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "iOS使用app卡在启动页怎么办?",
|
||||||
|
"content": "<ul class=\"auto-hide-last-sibling-br\">\n<li><span style=\"font-size: 16px;\"><strong>强制关闭并重新打开</strong></span>\n<ul class=\"auto-hide-last-sibling-br\">\n<li><span style=\"font-size: 16px;\">双击 iPhone 的 “主屏幕” 按钮(全面屏设备从屏幕底部边缘向上轻扫并停顿),打开多任务处理界面。</span></li>\n<li><span style=\"font-size: 16px;\">在多任务处理界面中,找到出现问题的 App 卡片,向上滑动该卡片将其关闭。</span></li>\n<li><span style=\"font-size: 16px;\">然后再次点击该 App 的图标重新打开,看是否能正常进入。</span></li>\n</ul>\n</li>\n</ul>\n<p> </p>\n<ul class=\"auto-hide-last-sibling-br\">\n<li><span style=\"font-size: 16px;\"><strong>检查网络连接</strong></span>\n<ul class=\"auto-hide-last-sibling-br\">\n<li><span style=\"font-size: 16px;\">部分 App 需要联网才能正常启动和使用,确保你的 iOS 设备已连接到稳定的网络。可以尝试切换网络,比如从 Wi-Fi 切换到移动数据,或者反之。</span></li>\n</ul>\n</li>\n</ul>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-02-14 18:01:20",
|
||||||
|
"update_time": "2025-03-26 17:57:14",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 18,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "【苹果系统】友福同享App授权教程",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058845650.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058848281.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058851942.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058855113.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058857254.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058859455.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058861456.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058864057.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058867958.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428058870109.jpeg\" /> </p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-13 12:01:07",
|
||||||
|
"update_time": "2025-03-26 17:57:20",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 19,
|
||||||
|
"category_id": 5,
|
||||||
|
"title": "【安卓系统】友福同享App授权教程",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059398980.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059403091.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059406232.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059408403.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059410904.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059413585.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059415666.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059417607.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059419998.jpeg\" /> <img src=\"https://images.health.ufutx.com/202503/24/5e543256c480ac577d30f76f9120eb7417428059421979.jpeg\" /> </p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-24 16:45:45",
|
||||||
|
"update_time": "2025-03-26 17:57:28",
|
||||||
|
"category": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "其他业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/042f109b4ea6f3f7642926fe8136fdb7.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:04:07",
|
||||||
|
"update_time": "2025-03-26 17:04:07"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 22,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "购买25800元友福同享DMA 智能健康方案,它包含哪些服务,及相关的流程是什么?",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/28/73c90abc9dea4b8f9e1daac17688c0a41743133737355.jpeg\" alt=\"\" width=\"1080\" height=\"12007\" /></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-28 11:49:00",
|
||||||
|
"update_time": "2025-03-28 11:49:00",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 23,
|
||||||
|
"category_id": 3,
|
||||||
|
"title": "友福同享健康教练双证报考条件是什么?",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/28/8091d01833ef90c6115a92252af381e71743133803770.jpeg\" alt=\"\" width=\"1080\" height=\"3835\" /></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-28 11:50:01",
|
||||||
|
"update_time": "2025-03-28 11:50:01",
|
||||||
|
"category": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "培训业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/4019a6ef1f9df47a80bbcb26e2918c11.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:38",
|
||||||
|
"update_time": "2025-03-26 17:03:38"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 24,
|
||||||
|
"category_id": 3,
|
||||||
|
"title": "友福同享健康教练双证报考流程是什么?",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/28/89c5cc15f8651c76156d6b3f52731cd21743133847968.jpeg\" alt=\"\" width=\"1200\" height=\"10605\" /></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-28 11:50:44",
|
||||||
|
"update_time": "2025-03-28 11:50:44",
|
||||||
|
"category": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "培训业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/4019a6ef1f9df47a80bbcb26e2918c11.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:38",
|
||||||
|
"update_time": "2025-03-26 17:03:38"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 25,
|
||||||
|
"category_id": 1,
|
||||||
|
"title": "友福同享做DMA健康方案,请问体检有哪些项目?",
|
||||||
|
"content": "<p><img src=\"https://images.health.ufutx.com/202503/28/85f65a4c0999288c605dc0cf2851b2d11743133931953.jpeg\" alt=\"\" width=\"625\" height=\"876\" /></p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-28 11:52:08",
|
||||||
|
"update_time": "2025-03-28 11:52:08",
|
||||||
|
"category": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "健康业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/72a8feb143001e4704e8d72970c85b81.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:03",
|
||||||
|
"update_time": "2025-03-26 17:03:03"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 26,
|
||||||
|
"category_id": 2,
|
||||||
|
"title": "怎么查看订单的物流信息?",
|
||||||
|
"content": "<p>进入友福同享的APP或小程序,在“我的”里面,找到“我的订单”找到对应商品定单,找到快递单号,拷贝下来后,点击下面快递查询网页,便可以知道物流的进程及相关信息:</p>\n<p>https://www.baidu.com/s?rsv_dl=selectedsearch&wd=%E5%BF%AB%E9%80%92%E5%8D%95%E5%8F%B7%E6%9F%A5%E8%AF%A2%0A%0A</p>",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-28 11:53:38",
|
||||||
|
"update_time": "2025-03-28 11:59:55",
|
||||||
|
"category": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "商城业务",
|
||||||
|
"icon": "https://images.health.ufutx.com/202503/26/afff360bf1542ae5b17c60b981f1229b.png",
|
||||||
|
"sort": 1,
|
||||||
|
"create_time": "2025-03-26 17:03:20",
|
||||||
|
"update_time": "2025-03-26 17:03:20"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
// 新增中文序号转换方法
|
||||||
|
const getChineseNumber = (num) => {
|
||||||
|
const chineseNumbers = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
|
||||||
|
return num <= 10 ? `(${chineseNumbers[num - 1]})` : `(${num})`;
|
||||||
|
};
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div v-for="(item,index) in list">
|
||||||
|
<h2 :id="getChineseNumber(index + 1)+item.title">{{ getChineseNumber(index + 1) }}{{item.title}}</h2>
|
||||||
|
<div class="htmlMessage" v-html="item.content"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.htmlMessage{
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
:deep(img) {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
height:auto!important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
231
docs/.vuepress/components/longPic.vue
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, watch, onUnmounted, getCurrentInstance } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
src: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
alt: {
|
||||||
|
type: String,
|
||||||
|
default: '图片'
|
||||||
|
},
|
||||||
|
maxHeight: {
|
||||||
|
type: Number,
|
||||||
|
default: 500
|
||||||
|
},
|
||||||
|
// 新增:外部可配置宽度(支持数字/字符串,如 300 | '300px' | '100%')
|
||||||
|
width: {
|
||||||
|
type: [Number, String],
|
||||||
|
default: '100%'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const isExpanded = ref(false)
|
||||||
|
const showExpand = ref(false) // 仅当高度超maxHeight时显示展开/收起按钮
|
||||||
|
const isImageLoaded = ref(false)
|
||||||
|
const imgRef = ref(null)
|
||||||
|
const resizeObserver = ref(null)
|
||||||
|
const instance = getCurrentInstance()
|
||||||
|
|
||||||
|
// 全局通知图片加载/尺寸变化
|
||||||
|
const notifyImageLoaded = () => {
|
||||||
|
if (instance?.appContext.config.globalProperties.$notifyImageLoaded) {
|
||||||
|
instance.appContext.config.globalProperties.$notifyImageLoaded();
|
||||||
|
}
|
||||||
|
document.dispatchEvent(new CustomEvent('longPicImageLoaded'));
|
||||||
|
};
|
||||||
|
|
||||||
|
// 检查图片高度并控制展开按钮显示
|
||||||
|
// 核心修改:未超过maxHeight时不显示按钮,也不处理任何高度限制逻辑
|
||||||
|
const checkImageHeight = (img) => {
|
||||||
|
if (typeof window === 'undefined') return
|
||||||
|
|
||||||
|
const naturalHeight = img.naturalHeight || img.offsetHeight
|
||||||
|
console.log(props.alt, naturalHeight, '图片实际高度')
|
||||||
|
|
||||||
|
// 关键逻辑:仅当图片高度超过maxHeight时才显示展开按钮
|
||||||
|
showExpand.value = naturalHeight > props.maxHeight
|
||||||
|
isImageLoaded.value = true
|
||||||
|
|
||||||
|
// 未超高度时直接展开(取消高度限制)
|
||||||
|
if (!showExpand.value) {
|
||||||
|
isExpanded.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyImageLoaded()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 图片加载完成处理
|
||||||
|
const handleImageLoad = (event) => {
|
||||||
|
if (isImageLoaded.value) return
|
||||||
|
checkImageHeight(event.target)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听元素尺寸变化
|
||||||
|
const observeResize = () => {
|
||||||
|
if (typeof window === 'undefined' || !window.ResizeObserver) return
|
||||||
|
|
||||||
|
resizeObserver.value = new ResizeObserver((entries) => {
|
||||||
|
// 尺寸变化时重新检查高度(适配窗口缩放等场景)
|
||||||
|
const img = imgRef.value
|
||||||
|
if (img && isImageLoaded.value) {
|
||||||
|
checkImageHeight(img)
|
||||||
|
}
|
||||||
|
notifyImageLoaded()
|
||||||
|
})
|
||||||
|
|
||||||
|
if (imgRef.value) {
|
||||||
|
resizeObserver.value.observe(imgRef.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 展开/收起切换(仅当showExpand为true时触发)
|
||||||
|
const toggleExpand = () => {
|
||||||
|
if (!showExpand.value) return // 未超高度时不执行切换逻辑
|
||||||
|
isExpanded.value = !isExpanded.value
|
||||||
|
setTimeout(() => notifyImageLoaded(), 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 格式化宽度值(处理数字/字符串输入)
|
||||||
|
const formatWidth = () => {
|
||||||
|
if (typeof props.width === 'number') {
|
||||||
|
return `${props.width}px`
|
||||||
|
}
|
||||||
|
return props.width
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生命周期
|
||||||
|
onMounted(() => {
|
||||||
|
if (typeof window === 'undefined') return
|
||||||
|
|
||||||
|
const img = imgRef.value
|
||||||
|
if (img && img.complete) {
|
||||||
|
checkImageHeight(img)
|
||||||
|
}
|
||||||
|
|
||||||
|
observeResize()
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
if (resizeObserver.value) {
|
||||||
|
resizeObserver.value.disconnect()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 监听width属性变化,重新通知尺寸更新
|
||||||
|
watch(() => props.width, () => {
|
||||||
|
if (isImageLoaded.value) {
|
||||||
|
notifyImageLoaded()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="image-container" :style="{ width: formatWidth() }">
|
||||||
|
<!-- 核心修改:未超高度时取消maxHeight和aspectRatio限制 -->
|
||||||
|
<div
|
||||||
|
class="image-wrapper"
|
||||||
|
:class="{ 'expanded': isExpanded }"
|
||||||
|
:style="{
|
||||||
|
// 仅当需要限制高度时才设置maxHeight
|
||||||
|
maxHeight: showExpand && !isExpanded ? `${maxHeight}px` : 'none',
|
||||||
|
// 仅当需要限制高度时才设置aspectRatio
|
||||||
|
aspectRatio: showExpand && !isExpanded ? '16/9' : 'unset'
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
ref="imgRef"
|
||||||
|
:src="src"
|
||||||
|
:alt="alt"
|
||||||
|
@load="handleImageLoad"
|
||||||
|
class="responsive-image"
|
||||||
|
loading="eager"
|
||||||
|
decoding="async"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 仅当showExpand为true时显示展开/收起按钮 -->
|
||||||
|
<div v-if="showExpand" class="hint-wrapper">
|
||||||
|
<div class="expand-hint" @click="toggleExpand" v-show="!isExpanded">
|
||||||
|
<span>点击查看完整图片</span>
|
||||||
|
</div>
|
||||||
|
<div class="collapse-hint" @click="toggleExpand" v-show="isExpanded">
|
||||||
|
<span>收起图片</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.image-container {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 auto;
|
||||||
|
min-height: 100px; /* 兜底高度,防止加载前塌陷 */
|
||||||
|
/* 宽度由外部配置控制 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: max-height 0.3s ease-in-out;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 仅当未展开且需要限制高度时显示渐变遮罩 */
|
||||||
|
.image-wrapper:not(.expanded)::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 80px;
|
||||||
|
background: linear-gradient(transparent, rgba(255,255,255,0.95));
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开后隐藏遮罩 */
|
||||||
|
.image-wrapper.expanded::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsive-image {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: block;
|
||||||
|
object-fit: contain; /* 确保图片完整显示,不拉伸 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 按钮容器 */
|
||||||
|
.hint-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-hint, .collapse-hint {
|
||||||
|
text-align: center;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: 8px;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-hint {
|
||||||
|
background: rgba(64, 158, 255, 0.1);
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-hint:hover {
|
||||||
|
background: rgba(64, 158, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-hint {
|
||||||
|
background: rgba(103, 194, 58, 0.1);
|
||||||
|
color: #67c23a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-hint:hover {
|
||||||
|
background: rgba(103, 194, 58, 0.2);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
101
docs/.vuepress/components/longPicSplitV2.vue
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, computed } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
src: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
alt: {
|
||||||
|
type: String,
|
||||||
|
default: '长图'
|
||||||
|
},
|
||||||
|
sliceHeight: {
|
||||||
|
type: Number,
|
||||||
|
default: 600
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const imgLoaded = ref(false)
|
||||||
|
const naturalWidth = ref(0)
|
||||||
|
const naturalHeight = ref(0)
|
||||||
|
const containerWidth = ref(0)
|
||||||
|
|
||||||
|
const handleLoad = (e) => {
|
||||||
|
imgLoaded.value = true
|
||||||
|
naturalWidth.value = e.target.naturalWidth
|
||||||
|
naturalHeight.value = e.target.naturalHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleContainerResize = (el) => {
|
||||||
|
containerWidth.value = el.getBoundingClientRect().width
|
||||||
|
}
|
||||||
|
|
||||||
|
const slices = computed(() => {
|
||||||
|
if (!imgLoaded.value) return []
|
||||||
|
const count = Math.ceil(naturalHeight.value / props.sliceHeight)
|
||||||
|
const arr = []
|
||||||
|
for (let i = 0; i < count; i++) {
|
||||||
|
arr.push({
|
||||||
|
top: i * props.sliceHeight,
|
||||||
|
height: Math.min(props.sliceHeight, naturalHeight.value - i * props.sliceHeight)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="long-pic-img-split"
|
||||||
|
@resize="handleContainerResize($event.target)"
|
||||||
|
>
|
||||||
|
<!-- 用于获取尺寸 -->
|
||||||
|
<img
|
||||||
|
:src="src"
|
||||||
|
:alt="alt"
|
||||||
|
@load="handleLoad"
|
||||||
|
class="img-hidden"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- 正常分段显示,宽度100%,不会被放大 -->
|
||||||
|
<img
|
||||||
|
v-for="(item, idx) in slices"
|
||||||
|
:key="idx"
|
||||||
|
:src="src"
|
||||||
|
:alt="`${alt}-${idx + 1}`"
|
||||||
|
class="split-img"
|
||||||
|
:style="{
|
||||||
|
height: `${item.height}px`,
|
||||||
|
objectPosition: `center ${-item.top}px`,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.long-pic-img-split {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-hidden {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-img {
|
||||||
|
display: block;
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
object-fit: cover;
|
||||||
|
object-position: top center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
133
docs/.vuepress/config.js
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
import { viteBundler } from '@vuepress/bundler-vite'
|
||||||
|
import { defaultTheme } from '@vuepress/theme-default'
|
||||||
|
import { defineUserConfig } from 'vuepress'
|
||||||
|
import fs from 'fs-extra'
|
||||||
|
import path from 'path'
|
||||||
|
import { searchPlugin } from '@vuepress/plugin-search'
|
||||||
|
import { SITE_BASE, CDN_BASE} from './constants.js';
|
||||||
|
|
||||||
|
export default defineUserConfig({
|
||||||
|
// // 禁用内置锚点滚动,避免冲突
|
||||||
|
shouldPreventScroll: (to, from) => {
|
||||||
|
return !!to.hash;
|
||||||
|
},
|
||||||
|
//
|
||||||
|
// // 滚动偏移量
|
||||||
|
// scrollOffset: {
|
||||||
|
// home: 80,
|
||||||
|
// page: 80
|
||||||
|
// },
|
||||||
|
// shouldPreventScroll: () => true,
|
||||||
|
|
||||||
|
|
||||||
|
head: [
|
||||||
|
['meta', { name: 'og:type', content: 'website' }],
|
||||||
|
['meta', { property: 'og:title', content: 'DMA服务人员操作手册' }],
|
||||||
|
['meta', { name: 'description', content: 'DMA服务操作手册' }],
|
||||||
|
['meta', { property: 'og:description', content: 'DMA服务全流程操作指南' }],
|
||||||
|
['meta', { property: 'og:image', content: 'https://images.health.ufutx.com/202503/12/1f227399ffc2ddbf6c58eafa80627d19.png?v=' + Date.now() }],
|
||||||
|
['link', { rel: 'icon', href: 'https://images.health.ufutx.com/202503/12/1f227399ffc2ddbf6c58eafa80627d19.png?v=' + Date.now() }],
|
||||||
|
],
|
||||||
|
|
||||||
|
pages: [],
|
||||||
|
|
||||||
|
bundler: viteBundler({
|
||||||
|
viteOptions: {
|
||||||
|
build: {
|
||||||
|
rollupOptions: {
|
||||||
|
output: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
'/api': {
|
||||||
|
target: 'http://192.168.0.100:8080/',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api/, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
theme: defaultTheme({
|
||||||
|
navbar: [
|
||||||
|
'/',
|
||||||
|
{
|
||||||
|
text: '核心操作',
|
||||||
|
link: '/posts/overview',
|
||||||
|
activeMatch: '^/posts/overview',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '角色文档',
|
||||||
|
children: [
|
||||||
|
{ text: '主教练', link: '/posts/chiefCoach.html' },
|
||||||
|
{ text: '副教练', link: '/posts/assistantCoach.html' },
|
||||||
|
{ text: '客服', link: '/posts/service.html' },
|
||||||
|
{ text: '健康管理师', link: '/posts/teacher.html' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '操作指南',
|
||||||
|
children: [
|
||||||
|
{ text: '分润提现', link: '/posts/shareBenefit' },
|
||||||
|
{ text: 'APP相关', link: '/posts/appCorrelation' },
|
||||||
|
{ text: 'DMA模块', link: '/posts/DMAModule' },
|
||||||
|
{ text: '考试预约', link: '/posts/examReservation' },
|
||||||
|
{ text: '代理商', link: '/posts/agent' },
|
||||||
|
{ text: '用户服务流程', link: '/posts/userServiceProcess' },
|
||||||
|
{ text: '行为记录', link: '/posts/behaviorRecord' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{ text: '常见问题', link: '/posts/helpCenter' },
|
||||||
|
{ text: '更新日志', link: SITE_BASE === '/go_html/dma_handbook/' ? '/posts/changelog' : '/posts/changelogV2' },
|
||||||
|
],
|
||||||
|
sidebar: ({ pagePath }) => {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
lang:'zh-CN',
|
||||||
|
title:'DMA服务人员服务操作手册',
|
||||||
|
description: 'DMA服务人员服务操作手册',
|
||||||
|
base:SITE_BASE,
|
||||||
|
image:'https://images.health.ufutx.com/202503/12/1f227399ffc2ddbf6c58eafa80627d19.png',
|
||||||
|
|
||||||
|
plugins: [
|
||||||
|
['@vuepress/plugin-medium-zoom', {
|
||||||
|
selector: 'img:not(.no-zoom)',
|
||||||
|
delay: 500,
|
||||||
|
lazy: true,
|
||||||
|
options: {
|
||||||
|
loading: 'lazy',
|
||||||
|
decoding: 'async',
|
||||||
|
observer: true,
|
||||||
|
observerOptions: {
|
||||||
|
rootMargin: '0px',
|
||||||
|
threshold: 0.1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
searchPlugin({
|
||||||
|
maxSuggestions: 10,
|
||||||
|
hotKeys: ['s', '/'],
|
||||||
|
}),
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
async onGenerated (app) {
|
||||||
|
if(SITE_BASE === '/dma_handbook/') return
|
||||||
|
const outDir = app.options.dest
|
||||||
|
const htmlFiles = await fs.readdir(outDir)
|
||||||
|
for (const file of htmlFiles) {
|
||||||
|
if (!file.endsWith('.html')) continue
|
||||||
|
const filePath = path.join(outDir, file)
|
||||||
|
let content = await fs.readFile(filePath, 'utf-8')
|
||||||
|
const assetPrefix = SITE_BASE + 'assets/'
|
||||||
|
const cdnPrefix = CDN_BASE + '/assets/'
|
||||||
|
content = content.replace(new RegExp(assetPrefix, 'g'), cdnPrefix)
|
||||||
|
await fs.writeFile(filePath, content, 'utf-8')
|
||||||
|
console.log(`✅ Patched assets path in ${file}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
14
docs/.vuepress/constants.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// docs/.vuepress/constants.js
|
||||||
|
// 全局基础路径 - 唯一维护,修改后全项目生效
|
||||||
|
export const SITE_BASE = '/dma_handbook/';
|
||||||
|
|
||||||
|
// 配置常量(本地部署,需要时取消注释替换上面的SITE_BASE即可)
|
||||||
|
// export const SITE_BASE = '/go_html/dma_handbook/';
|
||||||
|
|
||||||
|
// CDN基础路径
|
||||||
|
export const CDN_BASE = 'https://images.health.ufutx.com/dp';
|
||||||
|
|
||||||
|
// 后端代理前缀(可选,也可统一维护)
|
||||||
|
export const API_PROXY_PREFIX = '/api';
|
||||||
|
// 后端实际地址(可选,统一维护)
|
||||||
|
export const API_TARGET = 'http://192.168.0.100:8080/';
|
||||||
9
docs/.vuepress/layouts/LoginLayout.vue
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 直接渲染登录组件 -->
|
||||||
|
<Login />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
// 导入你的登录组件
|
||||||
|
import Login from '../components/Login.vue'
|
||||||
|
</script>
|
||||||
BIN
docs/.vuepress/public/images/assistantCoachImage/fjieda.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/fmeiri.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/fshenhe.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 68 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/fzhuanfati.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/解答专业疑问.jpg
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/转发体脂称.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/转发手环使用指导.jpg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
docs/.vuepress/public/images/assistantCoachImage/转发每日餐单.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |