Initial commit

This commit is contained in:
一休哥哥6666
2026-06-14 14:39:51 +08:00
commit e186d45bec
1484 changed files with 305925 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
# 告诉EditorConfig插件这是根文件不用继续往上查找
root = true
# 匹配全部文件
[*]
# 设置字符集
charset = utf-8
# 缩进风格可选space、tab
indent_style = space
# 缩进的空格数
indent_size = 2
# 结尾换行符可选lf、cr、crlf
end_of_line = lf
# 在文件结尾插入新行
insert_final_newline = true
# 删除一行中的前后空格
trim_trailing_whitespace = true
# 匹配md结尾的文件
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

View File

@@ -0,0 +1,11 @@
# 页面标题
VUE_APP_TITLE=觉远创智配件系统
# 开发环境配置
ENV = 'development'
# 觉远创智管理系统/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@@ -0,0 +1,8 @@
# 页面标题
VUE_APP_TITLE=觉远创智配件系统
# 生产环境配置
ENV = 'production'
# 觉远创智管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'

View File

@@ -0,0 +1,10 @@
# 页面标题
VUE_APP_TITLE=觉远创智配件系统
NODE_ENV = production
# 测试环境配置
ENV = 'staging'
# 觉远创智管理系统/测试环境
VUE_APP_BASE_API = '/stage-api'

View File

@@ -0,0 +1,10 @@
# 忽略build目录下类型为js的文件的语法检查
build/*.js
# 忽略src/assets目录下文件的语法检查
src/assets
# 忽略public目录下文件的语法检查
public
# 忽略当前目录下为js的文件的语法检查
*.js
# 忽略当前目录下为vue的文件的语法检查
*.vue

View File

@@ -0,0 +1,199 @@
// ESlint 检查配置
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'never'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
'indent': [2, 2, {
'SwitchCase': 1
}],
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}

23
developer-front/.gitignore vendored Normal file
View File

@@ -0,0 +1,23 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock

1
developer-front/.npmrc Normal file
View File

@@ -0,0 +1 @@
legacy-peer-deps=true

30
developer-front/README.md Normal file
View File

@@ -0,0 +1,30 @@
## 开发
```bash
# 克隆项目
git clone https://gitee.com/y_project/RuoYi-Vue
# 进入项目目录
cd ruoyi-ui
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev
```
浏览器访问 http://localhost:80
## 发布
```bash
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
```

View File

@@ -0,0 +1,13 @@
module.exports = {
presets: [
// https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
'plugins': ['dynamic-import-node']
}
}
}

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1 @@
open_basedir=/www/wwwroot/www.jueyuantech.com/:/tmp/

View File

@@ -0,0 +1 @@
YVr2ETdUfLo23TEb2Nn45a_CPBkOK7uVOKyUWyp06lU.Kgq3Eej7kBQmYeRIImv7g98fI4mVhg3Lk5VSDIQ5w9g

View File

@@ -0,0 +1 @@
4ffcd81362d1a03566e39eff1205cf780dbd3d2e

View File

@@ -0,0 +1,110 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Cache-Control" content="no-store" />
<title>隐私政策</title>
<style type="text/css">
body {
font-size: 16px;
background: rgba(253, 246, 236, 1);
}
p {
text-indent: 2em;
max-width: 100%;
word-break: break-all;
}
</style>
</head>
<body>
<div class="purchase-agreement">
<p style="text-indent: 0">SmartGlasses隐私政策</br>
更新时间2025-03-06</p>
<h3>引言</h3>
<p>金华觉远创智科技有限公司下称“觉远创智”或“我们”充分重视您的个人信息权利为保证您可以完整使用SmartGlasses下称“本产品/服务”),我们将在您首次使用前以弹窗等显著形式告知本政策,阐明我们通过本产品/服务如何收集、使用、存储和保护您的个人信息,以及本产品业务功能对应的相关权限和申请权限的目的。若您选择拒绝提供相关业务功能对应的必要个人信息,或拒绝授予相关业务功能对应的必要权限,我们将很遗憾不能为您提供对应的功能服务。</p>
<h3>我们如何收集和使用您的个人信息</h3>
<p>您使用SmartGlasses账号或完善个人资料时我们收集相关信息以完成注册、登录流程。您也可以使用第三方平台账号登录并使用本服务您将授权我们获取您在第三方平台注册的公开信息头像、昵称、手机号等用于与本服务账号绑定。</p>
<p>您使用本服务对应功能,或对设备进行连接、绑定、固件升级时,我们会收集使用<span style="font-weight: bold;">设备信息厂商、型号等设备标识符蓝牙Mac地址设备序列号固件版本信息等、设备配置项、终端信息品牌、型号、系统版本号、设备标识符和存储空间等、应用信息名称、包名、软件版本号等</span>,以实现设备发现、绑定、维持设备与本应用的连接状态,使用本服务对应功能。</p>
<p>您使用转写、翻译、语音助手功能时,我们会通过本应用收集使用您的语音,上传至语音服务供应商的服务端,由其完成转写、翻译、语义分析、对话应答后将结果回传至本应用,本应用随即会将内容同步至设备端和您的账号下。</p>
<p>您使用通知提醒时,我们会收集使用您的通知信息和来电信息,以及终端应用安装列表。
</p>
<p>您使用提词器功能时,我们会收集使用您导入的提词文档信息。</p>
<p>您查看天气信息时,我们会收集使用您的天气信息、城市信息、日期信息。</p>
<p>您使用运动和健康功能时,我们会收集使用您在终端或授权第三方服务的实时运动和健康信息。</p>
<p>需要授予的权限:</p>
<ul>
<li><strong>网络权限:</strong>用于使用 WLAN 和蜂窝网络;</li>
<li><strong>蓝牙权限:</strong>用于快速查找、连接设备,并进行设备通信;</li>
<li><strong>位置权限:</strong>用于快速查找、连接设备、基于位置提供的相关服务;</li>
<li><strong>相机权限:</strong>用于反馈视频拍摄、账号个人头像设置等功能;</li>
<li><strong>相册权限:</strong>用于将您主动下载的视频、图片信息同步至您的手机;</li>
<li><strong>存储空间权限:</strong>用于将设备拍摄的照片及文件存储至本地相册;</li>
<li><strong>麦克风权限:</strong>用于基于语音提供的相关服务;</li>
<li><strong>通知转发权限:</strong>用于将手机的部分通知转发至绑定的设备;</li>
<li><strong>读取电话权限:</strong>用于快速注册环节的功能服务;</li>
<li><strong>运动健康权限:</strong>用户获取和显示运动健康数据;</li>
<li><strong>自启动及关联启动权限:</strong>用于设备持续服务、固件升级或快速启动场景。</li>
</ul>
<h3>我们如何委托处理、共享、转让和公开您的个人信息</h3>
<h4>委托</h4>
<p>我们可能委托授权合作伙伴处理您的个人信息,代表我们为您提供某些服务或履行职能。我们会与受托方签署委托处理协议或共同遵守相关个人信息处理规则,以保障个人信息安全。</p>
<h4>共享</h4>
<p>通常情况下我们不会对外共享您的个人信息,以下情况除外:</p>
<ul>
<li>获得您明确同意后,向第三方共享您授权范围内的个人信息;</li>
<li>根据法律法规规定、诉讼争议解决,或按相关行政、司法机关依法提出的要求,为履行法定义务或法定职责所必需的共享;</li>
<li>出于合法、正当、必要、特定、明确的目的,共享您使用服务所必要的个人信息到第三方服务供应商,包括我们的物流供应商、数据中心、数据存储设施、客户服务供应商、广告和营销服务供应商以及其他业务合作伙伴。</li>
</ul>
<p>本服务接入第三方服务如下:</p>
<p style="text-indent: 0;"><strong>SDK名称</strong>友盟SDK</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>设备信息IMEI、Mac/android ID、IDFA、OPENUDID、GUID、SIM卡IMSI信息、地址位置等获取已安装APP信息</p>
<p style="text-indent: 0;"><a href="https://www.umeng.com/page/policy" target="_blank">https://www.umeng.com/page/policy</a></p>
<p style="text-indent: 0;"><strong>SDK名称</strong>高德地图开放平台 SDK</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>位置信息精准位置、粗略位置、经纬度设备信息如IP 地址、GNSS信息、WiFi状态、WiFi参数、WiFi列表、SSID、BSSID、基站信息、WiFi信号强度的信息、蓝牙信息、传感器信息矢量、加速度、压力、方向、地磁 、陀螺、温度、光敏、nema信号、设备信号强度信息、外部存储目录设备标识信息IMEI、IDFA、IDFV、Android ID、MEID、MAC地址、OAID、IMSI、ICCID、硬件序列号、当前应用信息应用名、应用版本号、设备参数及系统信息系统属性、设备品牌及型号、操作系统、运营商信息、屏幕分辨率</p>
<p style="text-indent: 0;"><a href="https://lbs.amap.com/pages/privacy/" target="_blank">https://lbs.amap.com/pages/privacy/</a></p>
<p style="text-indent: 0;"><strong>第三方名称:</strong>讯飞语音服务</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>录音数据</p>
<p style="text-indent: 0;"><a href="https://www.xfyun.cn/doc/total_sdk_privacy/lfasr_privacy.html" target="_blank">https://www.xfyun.cn/doc/total_sdk_privacy/lfasr_privacy.html</a></p>
<p style="text-indent: 0;"><strong>SDK名称</strong>讯飞星火大模型SDK</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>录音数据</p>
<p style="text-indent: 0;"><a href="https://www.xfyun.cn/doc/total_sdk_privacy/spark_privacy.html" target="_blank">https://www.xfyun.cn/doc/total_sdk_privacy/spark_privacy.html</a></p>
<p style="text-indent: 0;"><strong>第三方名称:</strong>思必驰语音服务</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>录音数据</p>
<p style="text-indent: 0;"><a href="https://www.duiopen.com/docs/ct_privacyAgreement" target="_blank">https://www.duiopen.com/docs/ct_privacyAgreement</a></p>
<p style="text-indent: 0;"><strong>第三方名称:</strong>微软Azure语音服务</p>
<p style="text-indent: 0;"><em>个人信息种类:</em>录音数据</p>
<p style="text-indent: 0;"><a href="https://learn.microsoft.com/zh-cn/legal/cognitive-services/speech-service/speech-to-text/data-privacy-security" target="_blank">https://learn.microsoft.com/zh-cn/legal/cognitive-services/speech-service/speech-to-text/data-privacy-security</a></p>
<h3>
转让
</h3>
<p>转让发生在涉及合并、分立、解散、收购或被宣告破产时,如涉及到个人信息转移,我们会提前向您告知接收方的名称和联系方式,要求接收方继续按照本声明处理您的个人信息。</p>
<h3>公开</h3>
<p>我们仅会在获得您的同意,或基于法律程序、诉讼或公共和政府主管部门有要求的情况下,公开您的个人信息。</p>
<h3>我们如何存储您的个人信息</h3>
<h4>存储地点</h4>
<p>我们依照法律法规的规定,运营过程中收集和产生的个人信息,将在中华人民共和国大陆地区(以下简称“境内”)的服务器存储。如需我们将严格依照法律的规定执行转移。</p>
<h4>存储期限</h4>
<p>我们依照法律法规的规定,在合理必要期限内存储您个人信息。超出必要的存储期限后,或当我们的产品或服务发生停止运营的情形时,我们会根据法律法规要求,尽快对您的个人信息进行删除或匿名化处理。</p>
<h3>我们如何保护您的个人信息</h3>
<p>我们非常重视对用户的个人信息提供安全保障将努力采取各种符合行业标准的安全措施包括但不限于HTTPS、加密技术、去标识化、本地存储和处理以及数据中心的访问控制等来保护您的个人信息以最大程度降低您的个人信息被丢失、毁损、盗用、泄露、非授权访问、使用、披露和更改的风险。</p>
<h3>您的个人信息主体权利</h3>
<p>您对于个人信息有查询、更新、变更、导出、删除以及撤回同意的权利,本服务通过界面交互方式为您提供相关操作途径。</p>
<ul>
<li>通过「我的」-「个人头像」,「我的」-「账号中心」,进行访问、更正自己的个人资料,含头像、昵称、性别、生日、所在城市等;</li>
<li>通过「我的」-「权限管理」,查看、授权和取消权限;</li>
<li>通过「我的」-「关于」- 「服务协议」和「隐私政策」中查看相关协议和政策;</li>
<li>通过「我的」-「账号中心」-「注销账号」进行账号的注销;</li>
<li>通过「设置」-「移除设备」对绑定的设备进行移除。</li>
</ul>
<h3>联系我们</h3>
<p>您可以通过「我的」-「用户反馈」来联系我们。</p>
</div>
</body>
</html>

View File

@@ -0,0 +1,129 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Cache-Control" content="no-store" />
<title>用户协议</title>
<style type="text/css">
body {
font-size: 16px;
background: rgba(253, 246, 236, 1);
}
p {
text-indent: 2em;
}
</style>
</head>
<body>
<div class="purchase-agreement">
<p style="text-indent: 0">SmartGlasses用户协议</br> 更新日期2024-10-15</p>
<h3>引言</h3>
<p>
本协议是您以下简称“您”或“用户”就使用SmartGlasses以下简称“本软件”的相关服务以下或称“本服务”所订立的协议。我们针对本服务不时发布的其他服务条款、使用指南、规则提示也是本协议的组成部分。请仔细阅读并充分理解本协议并承诺您具备与您相适应的民事行为能力来同意和履行本协议未成年人应在法定监护人陪同下阅读本协议。当您按照界面提示同意本协议或使用本服务时即表示您已充分阅读、理解并接受本协议的全部内容。若您不同意本协议的任意条款请勿使用本软件或本服务。
</p>
<h3>服务内容</h3>
<p>
本软件为用户提供转写、翻译、导航、提醒、语音助手服务,具体服务内容由我们根据实际情况向您提供。部分功能因区域差异受到限制,因此这些服务未必能以各种语言或在各个区域使用。
</p>
<p>
您在使用本服务过程中消耗的网络流量会产生数据流量费用,您理解并同意由您自行负担。
本服务中部分功能以收费的方式向您提供(以下简称“付费功能”),购买前,请您仔细阅读对应付费功能的服务详情、购买须知、用户条款、使用规则和常见问题,如您购买则表示您接受并同意条款及规则的全部内容。
</p>
<p>
为向您提供更好服务内容和体验,本软件会不时的向您提供软件更新。更新内容包括对问题的修复、改进,以及对性能、安全性、可靠性的提升。软件更新或采用不同的下载、安装方式,您理解及时接收和安装更新的必要性。如您决定不安装/更新软件更新内容,您可能将本软件置于严重的安全风险,并可能导致服务或功能不可用或不稳定。在更新前,请仔细阅读相关更新内容及安全提示。
</p>
<h3>第三方服务</h3>
<p>
您知悉并同意,本服务涉及的第三方产品及相关服务均由第三方独立向您提供,本服务不参与也不就第三方提供的任何内容、广告、产品、服务或其他信息的合法性、有效性、安全性、准确性做任何提示和保证,请您仔细阅读相关产品用户协议和规则。
</p>
<p>
转写翻译服务:您知悉并同意本服务基于第三方技术实现,我们无法确保结果的准确性,相关输出内容仅能供您参考,您在任何时候都不应完全依赖于本服务中获得的内容而作出决策,否则您应自行承担不利后果,与本服务无关。
</p>
<p>
语音助手服务:您知悉并同意本服务基于第三方技术模型完成,根据用户的输入,对话式生成和提炼服务结果,我们无法对其展示内容的合法性、有效性、安全性、准确性负责,相关内容仅能供您参考。
</p>
<h3>服务提示</h3>
<p>
请您确保了解相关功能的使用须知和注意事项后,在预期的合理使用方式下使用本服务,因您不当使用而产生的责任由您自行承担。
</p>
<p>
您知悉并同意,使用本服务(及绑定的智能眼镜)可能会导致眼部疲劳,如果您的身体感到任何不适或患有特定疾病,请立即停止使用并咨询医生。
</p>
<p>
我们不能完全确保您使用时不同环境下视野的清晰度,为了您的安全,请您在检查周围环境确保安全的情况下使用本服务(及绑定的智能眼镜)。部分型号产品在使用时会遮挡真实环境景象,请勿在行车、骑车、驾驶等需要集中注意力的场合使用该型号的产品,您应遵守交通及道路法律法规,确保交通安全,以免发生交通事故或其他危险情况对您的人身和财产造成不必要的损害。
</p>
<p>
部分型号产品需配合视力调节眼镜(屈光夹片或隐形眼镜)使用,请尽量避免您的视力调节眼镜和智能眼镜互相磨伤或刮伤,否则影响视觉和效果。
</p>
<p>
由于未成年人正处于视力发育的关键时期,未成年人请在咨询医生后使用本产品及服务。
</p>
<p>
如果您出售、转让或报废绑定的智能眼镜,请务必还原本服务(及绑定的智能眼镜),恢复出厂设置并及时清除用户数据。否则由此导致的信息泄露,以及智能眼镜转让后智能眼镜所有人的任何操作记录仍然与您绑定等风险,均由您自行承担相关责任。
</p>
<h3>账号规则</h3>
<p>
在注册、使用、访问本服务时,您承诺向我们提供您本人真实、准确、有效信息(如手机号码、电子邮件地址、实名认证信息等),在账号信息发生变更时及时更新对应信息。如因提供错误、不完整、不实信息所导致的不能正常使用本服务的后果由您自行承担。
</p>
<p>
您在本服务注册后即享有该账号的使用权,您的账号仅限于您本人使用,请妥善保管账号及密码,禁止以任何形式赠与、借用、出租、转让、售卖或以其他方式许可他人使用该账号,否则我们有权停止或终止向该注册账号提供服务,并有权注销该账号。
</p>
<p>
您理解并同意,在符合法律法规的前提下,我们有权采取必要的措施确保您提交的内容遵守本协议及适用的法律。若我们发现您提交的内容有违法或不良信息,我们有权拒绝注册、停用、注销账号。
</p>
<p>
您知悉并同意,注销账号是不可逆的永久操作,请您在执行注销操作前,确认已详细阅读相关的提示、说明、声明等内容,自行承担注销账号可能带来的后果。
</p>
<h3>个人信息保护</h3>
<p>
我们非常重视您的个人信息保护,在为您提供便捷、高效的服务的同时,我们在遵守法律法规的前提下,按照本协议和《隐私政策》来收集、使用、存储、披露和保护您的个人信息。请您在使用服务前,仔细阅读并充分理解《隐私政策》的内容,以便了解您的权利和我们的责任
</p>
<h3>使用规范</h3>
<p>
您同意并承诺在遵守法律和本协议的情况下使用本服务,期间不得实施任何违反相关法律法规或侵犯他人合法权益的行为,包括但不限于:
</p>
<ul>
<li>
利用本服务从事任何违法活动,发布、上传、存储、下载、传播、传输任何法律、法规、规章、条例以及任何具有法律效力之规范所限制或禁止的内容;
</li>
<li>
对本服务进行复制、变更、反向工程、反汇编、反编译、拆装、企图导出其源代码、解码等,任何增加、删减、变动本服务的功能,影响本服务正常运行的行为;
</li>
<li>
未经授权变动本服务的软件、页面标识、服务品牌、资讯、信息等任意部分;
</li>
<li>
通过任何措施以规避、破坏本服务设置的安全措施或安全策略;未经授权变动本服务的软件、页面标识、服务品牌、资讯、信息等任意部分;
</li>
<li>
通过任何手段记录、爬取,或以其他不合法、不合规的方式获取本服务的各项数据内容,收集本服务用户的信息
</li>
<li>
通过任何自动化手段来访问本服务,或试图通过破译,向运行本服务的服务器中传入任何内容或从中提取任何内容。
</li>
</ul>
<h3>免责声明</h3>
<p>
本服务按照“现状”和“现有”提供,不保证本服务或承载本服务的服务器是否存在缺陷、错误、病毒、漏洞或其他有害元素,不保证本服务运营或功能方面的缺陷是否会得到修正,
不保证通过本服务获得的信息内容(包括但不限于调用的第三方服务内容)的合法性、真实性、准确性、有效性。
</p>
<p>
您理解并同意,因软硬件维护升级导致的服务中止或终止,因台风、地震、停电、洪水、战争、恐怖袭击等不可抗力因素导致的服务中断,因系统或网络通讯延迟或出现故障,因第三方故障导致本服务不能正常运行,因黑客攻击、计算机病毒和攻击破坏或类似的危害影响导致错误或中断,以及其它超过我们合理控制的原因导致本服务异常,我们不承担任何责任。
</p>
<h3>知识产权声明</h3>
<p>
本软件的一切著作权、商标权、专利权、商业秘密等知识产权,以及与本软件相关的所有信息内容(包括但不限于文字、图片、音频、视频、图表、界面设计、版面框架、有关数据或电子文档等)均受当地法律法规和相应的国际条约保护,未经书面同意,您不得为任何商业或非商业目的自行或许可任何第三方实施、利用、转让上述知识产权,我们保留追究上述行为法律责任的权利。
</p>
<h3>协议修订</h3>
<p>
知悉并同意,我们有权根据有关法律法规的变化、互联网的发展以及公司经营状况和经营策略的调整等因素,在必要时修订本协议。如果您不接受修订后的协议内容,请立即停止使用本服务,您继续使用本服务将被视为接受修改后的本协议全部内容。
</p>
<h3>协议终止</h3>
<p>
依照适用法律、自身经营的实际需要,以及因您存在违反法律法规规定或本协议约定的情形,或我们有理由认为您可能违反法律法规或本协议约定的情形下,我们有权中止、限制、取消或终止您访问部分或全部本服务,而不对任何个人或第三方承担任何责任。
</p>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -0,0 +1,191 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>操作指南</title>
<style>
body {
margin: 0;
padding: 20px;
background-color: #EEEEF0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.container {
max-width: 800px;
margin: 0 auto;
background: white;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}
.header {
background: #333;
color: white;
padding: 20px;
text-align: center;
font-size: 24px;
font-weight: 600;
}
.content {
padding: 20px;
}
.image-container {
margin-bottom: 30px;
text-align: center;
}
.image-container img {
max-width: 100%;
height: auto;
border-radius: 8px;
}
.image-title {
margin-top: 10px;
font-size: 16px;
color: #666;
font-weight: 500;
}
.header-img {
width: 100%;
height: auto;
display: block;
max-width: 800px;
margin: 0 auto;
}
.header-title {
color: rgba(16, 16, 16, 1);
font-size: 4vw;
font-weight: 600;
text-align: left;
position: absolute;
top: 100px;
right: 10vw;
}
.product-description {
width: 20vw;
height: 6vw;
font-size: 3vw;
line-height: 6vw;
background: #000;
color: #fff;
border-radius: 3vw;
font-weight: 400;
text-align: center;
margin: 0 auto;
margin-top: 10vw;
margin-bottom: 10vw;
}
.description{
font-size: 2.5vw;
font-weight: 400;
width: 100%;
text-align: center;
width: 100%;
}
.installation-steps {
padding: 0 6vw;
margin-bottom: 10vw;
}
.step {
display: flex;
align-items: flex-start;
font-size: 2.5vw;
line-height: 5vw;
}
.step-number {
color: #007AFF;
font-weight: 600;
margin-right: 2vw;
min-width: 2vw;
}
.step-text {
color: #000;
flex: 1;
}
</style>
</head>
<body>
<img class="header-img" src="./images/01.png" alt="产品概览">
<p class="header-title">操作指南</p>
<div class="container">
<div class="content">
<div class="product-description">产品描述</div>
<div class="image-container">
<img src="./images/02.png" alt="描述">
</div>
<div class="image-container">
<img src="./images/03.png" alt="描述">
</div>
<div class="product-description">操作指南</div>
<div class="image-container">
<img src="./images/04.png" alt="电源键">
</div>
<div class="image-container">
<img src="./images/09.png" alt="短按">
</div>
<div class="image-container">
<img src="./images/10.png" alt="长按">
</div>
<div class="image-container">
<img src="./images/06.png" alt="触控板">
</div>
<div class="image-container">
<img src="./images/11.png" alt="左右滑动">
</div>
<div class="image-container">
<img src="./images/12.png" alt="长按">
</div>
<div class="image-container">
<img src="./images/13.png" alt="双击">
</div>
<div class="image-container">
<img src="./images/07.png" alt="充电">
</div>
<p class="description">为确保其正确充电,请按照上图所示链接充电线</p>
<div class="image-container">
<img src="./images/05.png" alt="指示灯">
</div>
<div class="image-container">
<img src="./images/14.png" alt="指示灯简介">
</div>
<div class="image-container">
<img src="./images/08.png" alt="近视镜片">
</div>
<p class="description" style="text-align: left; padding-left: 6vw;">安装近视镜架</p>
<div class="installation-steps">
<div class="step">
<span class="step-number">1.</span>
<span class="step-text">将近视镜片的金属框架与鼻托的框架重合,螺丝孔朝下</span>
</div>
<div class="step">
<span class="step-number">2.</span>
<span class="step-text">近视镜框的孔与底部螺丝孔对齐,使用工具包中的螺丝刀安装螺丝即可,请勿卸下鼻托螺丝!</span>
</div>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="./favicon.ico"><title>JUEYUAN | 觉远科技</title><link href="./css/chunk-vendors.da646636.css" rel="preload" as="style"><link href="./css/index.1704507a.css" rel="preload" as="style"><link href="./js/chunk-vendors.a75fa186.js" rel="preload" as="script"><link href="./js/index.c86bb705.js" rel="preload" as="script"><link href="./css/chunk-vendors.da646636.css" rel="stylesheet"><link href="./css/index.1704507a.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but JUEYUAN | 觉远科技 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="./js/chunk-vendors.a75fa186.js"></script><script src="./js/index.c86bb705.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
@echo off
echo.
echo [<5B><>Ϣ] <20><><EFBFBD><EFBFBD>Web<65><62><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>dist<73>ļ<EFBFBD><C4BC><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
npm run build:prod
pause

View File

@@ -0,0 +1,12 @@
@echo off
echo.
echo [<5B><>Ϣ] <20><>װWeb<65><62><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD>node_modules<65>ļ<EFBFBD><C4BC><EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
npm install --registry=https://registry.npmmirror.com
pause

View File

@@ -0,0 +1,12 @@
@echo off
echo.
echo [<5B><>Ϣ] ʹ<><CAB9> Vue CLI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Web <20><><EFBFBD>̡<EFBFBD>
echo.
%~d0
cd %~dp0
cd ..
npm run dev
pause

View File

@@ -0,0 +1,35 @@
const { run } = require('runjs')
const chalk = require('chalk')
const config = require('../vue.config.js')
const rawArgv = process.argv.slice(2)
const args = rawArgv.join(' ')
if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
const report = rawArgv.includes('--report')
run(`vue-cli-service build ${args}`)
const port = 9526
const publicPath = config.publicPath
var connect = require('connect')
var serveStatic = require('serve-static')
const app = connect()
app.use(
publicPath,
serveStatic('./dist', {
index: ['index.html', '/']
})
)
app.listen(port, function () {
console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
if (report) {
console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
}
})
} else {
run(`vue-cli-service build ${args}`)
}

View File

@@ -0,0 +1,122 @@
-- 论坛分类表
CREATE TABLE `forum_category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`name` varchar(50) NOT NULL COMMENT '分类名称',
`description` varchar(255) DEFAULT NULL COMMENT '分类描述',
`icon` varchar(100) DEFAULT NULL COMMENT '分类图标',
`sort_order` int(11) DEFAULT '0' COMMENT '排序顺序',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1停用',
`post_count` int(11) DEFAULT '0' COMMENT '帖子数量',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='论坛分类表';
-- 论坛帖子表
CREATE TABLE `forum_post` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '帖子ID',
`category_id` bigint(20) NOT NULL COMMENT '分类ID',
`title` varchar(200) NOT NULL COMMENT '标题',
`content` text NOT NULL COMMENT '内容',
`excerpt` varchar(500) DEFAULT NULL COMMENT '摘要',
`author_id` bigint(20) NOT NULL COMMENT '作者ID',
`author_name` varchar(50) NOT NULL COMMENT '作者名称',
`author_avatar` varchar(255) DEFAULT NULL COMMENT '作者头像',
`view_count` int(11) DEFAULT '0' COMMENT '浏览量',
`reply_count` int(11) DEFAULT '0' COMMENT '回复数',
`like_count` int(11) DEFAULT '0' COMMENT '点赞数',
`favorite_count` int(11) DEFAULT '0' COMMENT '收藏数',
`is_top` char(1) DEFAULT '0' COMMENT '是否置顶0否 1是',
`is_hot` char(1) DEFAULT '0' COMMENT '是否热门0否 1是',
`is_solved` char(1) DEFAULT '0' COMMENT '是否已解决0否 1是',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1删除 2审核中',
`last_reply_id` bigint(20) DEFAULT NULL COMMENT '最后回复ID',
`last_reply_user` varchar(50) DEFAULT NULL COMMENT '最后回复用户',
`last_reply_time` datetime DEFAULT NULL COMMENT '最后回复时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_author_id` (`author_id`),
KEY `idx_create_time` (`create_time`),
KEY `idx_last_reply_time` (`last_reply_time`),
KEY `idx_status` (`status`),
KEY `idx_is_top` (`is_top`),
KEY `idx_is_hot` (`is_hot`),
KEY `idx_title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='论坛帖子表';
-- 论坛回复表
CREATE TABLE `forum_reply` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '回复ID',
`post_id` bigint(20) NOT NULL COMMENT '帖子ID',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父回复ID0表示直接回复帖子',
`content` text NOT NULL COMMENT '回复内容',
`author_id` bigint(20) NOT NULL COMMENT '作者ID',
`author_name` varchar(50) NOT NULL COMMENT '作者名称',
`author_avatar` varchar(255) DEFAULT NULL COMMENT '作者头像',
`like_count` int(11) DEFAULT '0' COMMENT '点赞数',
`status` char(1) DEFAULT '0' COMMENT '状态0正常 1删除 2审核中',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_post_id` (`post_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_author_id` (`author_id`),
KEY `idx_create_time` (`create_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='论坛回复表';
-- 帖子点赞表
CREATE TABLE `forum_post_like` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`post_id` bigint(20) NOT NULL COMMENT '帖子ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_post_user` (`post_id`,`user_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='帖子点赞表';
-- 帖子收藏表
CREATE TABLE `forum_post_favorite` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`post_id` bigint(20) NOT NULL COMMENT '帖子ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_post_user` (`post_id`,`user_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='帖子收藏表';
-- 回复点赞表
CREATE TABLE `forum_reply_like` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`reply_id` bigint(20) NOT NULL COMMENT '回复ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_reply_user` (`reply_id`,`user_id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='回复点赞表';
-- 初始化分类数据
INSERT INTO `forum_category` (`name`, `description`, `sort_order`, `status`, `create_time`) VALUES
('技术讨论', '技术问题讨论和解决方案', 1, '0', NOW()),
('SDK使用', 'SDK使用相关问题', 2, '0', NOW()),
('API文档', 'API接口使用问题', 3, '0', NOW()),
('问题反馈', 'Bug反馈和建议', 4, '0', NOW()),
('经验分享', '开发经验和技术分享', 5, '0', NOW()),
('新手求助', '新手入门问题', 6, '0', NOW());

View File

@@ -0,0 +1,99 @@
{
"name": "ruoyi",
"version": "3.8.8",
"description": "觉远创智配件系统",
"author": "觉远创智",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.28.1",
"clipboard": "2.0.8",
"core-js": "3.37.1",
"echarts": "5.4.0",
"element-ui": "2.15.14",
"file-saver": "2.0.5",
"fullpage.js": "^4.0.37",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"nprogress": "0.2.0",
"qrcode": "^1.5.4",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"vue": "2.7.16",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"wangeditor": "^4.7.15"
},
"overrides": {
"postcss": "^8.4.32"
},
"devDependencies": {
"autoprefixer": "^10.4.16",
"postcss": "^8.4.32",
"tailwindcss": "^3.4.0",
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "6.1.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",
"sass-loader": "10.1.1",
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.7.16"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
}

View File

@@ -0,0 +1,8 @@
'use strict'
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {}
}
}

View File

@@ -0,0 +1,58 @@
# 觉远创智开发文档
欢迎使用觉远创智智能眼镜开放平台开发文档。
## 快速开始
只需几步即可开始使用智能眼镜 API。
### 1. 获取 API 密钥
首先,您需要在开发者平台注册账号并创建应用来获取 API 密钥。
### 2. 安装 SDK
选择适合您平台的 SDK 进行安装:
#### Android (Kotlin)
```kotlin
implementation 'com.smartglasses:api:2.1.0'
```
#### iOS (Swift)
```swift
.podspec dependency 'SmartGlassesAPI', '~> 2.1.0'
```
#### Web (JavaScript)
```bash
npm install smartglasses-api
```
### 3. 初始化 API
```javascript
// JavaScript 示例
const glasses = new SmartGlassesAPI({
apiKey: 'your-api-key',
deviceId: 'your-device-id'
});
// 连接到设备
glasses.connect().then(() => {
console.log('设备连接成功');
});
```
## 目录
- [设备端开发](device-dev.md)
- [移动端开发](mobile-dev.md)
- [后台接入](backend-integrations.md)
- [能力中心](capabilities.md)
- [API 参考](api-reference.md)
- [最佳实践](best-practices.md)

View File

@@ -0,0 +1,108 @@
# Docsify 文档使用说明
本文档说明如何在项目中管理和编辑 docsify 文档。
## 文档结构
```
public/docs/
├── index.html # Docsify 入口文件
├── README.md # 文档首页
├── _sidebar.md # 侧边栏导航配置
├── device-dev.md # 设备端开发文档
├── mobile-dev.md # 移动端开发文档
├── backend-integrations.md # 后台接入文档
├── capabilities.md # 能力中心文档
├── api-reference.md # API 参考文档
└── best-practices.md # 最佳实践文档
```
## 如何编辑文档
### 1. 编辑现有文档
直接编辑 `public/docs/` 目录下的 `.md` 文件即可。文档使用 Markdown 格式编写。
### 2. 添加新文档
1.`public/docs/` 目录下创建新的 `.md` 文件
2.`_sidebar.md` 中添加导航链接
示例:
```markdown
# 在 _sidebar.md 中添加
- 新文档
- [章节1](new-doc.md#章节1)
- [章节2](new-doc.md#章节2)
```
### 3. 修改侧边栏
编辑 `public/docs/_sidebar.md` 文件来修改侧边栏导航结构。
## Markdown 语法
Docsify 支持标准 Markdown 语法,还支持一些扩展功能:
### 代码高亮
使用三个反引号包裹代码,并指定语言:
````markdown
```javascript
const api = new SmartGlassesAPI()
```
````
### 表格
```markdown
| 参数 | 类型 | 说明 |
|------|------|------|
| apiKey | string | API 密钥 |
```
### 链接
```markdown
[链接文本](文档路径.md#锚点)
```
## 配置说明
文档配置在 `public/docs/index.html` 中的 `window.$docsify` 对象中:
- `name`: 文档名称
- `loadSidebar`: 是否加载侧边栏
- `subMaxLevel`: 侧边栏最大层级
- `search`: 搜索功能配置
- `pagination`: 分页配置
## 访问文档
文档通过以下方式访问:
1. **在 Vue 应用中**:访问 `/docs` 路由
2. **直接访问**:访问 `http://localhost:81/docs/index.html`
## 插件说明
当前使用的 Docsify 插件:
- **搜索插件**:支持全文搜索
- **分页插件**:支持章节导航
- **代码高亮**:支持多种编程语言
## 注意事项
1. 文档文件必须放在 `public/docs/` 目录下
2. 修改文档后,刷新页面即可看到更新
3. 侧边栏文件必须命名为 `_sidebar.md`
4. 首页文件必须命名为 `README.md`
## 更多信息
- [Docsify 官方文档](https://docsify.js.org/)
- [Markdown 语法指南](https://www.markdownguide.org/)

View File

@@ -0,0 +1,36 @@
- [首页](/)
- [快速开始](README.md#快速开始)
- 设备端开发
- [设备型号](device-dev.md#设备型号)
- [Vision Basic](device-dev.md#vision-basic)
- [Vision Pro](device-dev.md#vision-pro)
- [Vision Elite](device-dev.md#vision-elite)
- 移动端开发
- [平台支持](mobile-dev.md#平台支持)
- [Android](mobile-dev.md#android)
- [iOS](mobile-dev.md#ios)
- [Web](mobile-dev.md#web)
- 后台接入
- [鉴权](backend-integrations.md#鉴权)
- [接口调用](backend-integrations.md#接口调用)
- [回调处理](backend-integrations.md#回调处理)
- 能力中心
- [语音识别](capabilities.md#语音识别)
- [转写服务](capabilities.md#转写服务)
- [翻译服务](capabilities.md#翻译服务)
- [AI 助手](capabilities.md#ai-助手)
- API 参考
- [显示 API](api-reference.md#显示-api)
- [语音 API](api-reference.md#语音-api)
- [传感器 API](api-reference.md#传感器-api)
- 最佳实践
- [性能优化](best-practices.md#性能优化)
- [用户体验](best-practices.md#用户体验)
- [故障排除](best-practices.md#故障排除)

View File

@@ -0,0 +1,58 @@
- [1. 文档概述](venus-sdk-1.0.md#_1-文档概述)
- [2. 支持平台与版本](venus-sdk-1.0.md#_2-支持平台与版本)
- [3. 快速开始](venus-sdk-1.0.md#_3-快速开始)
- [3.1 集成SDK](venus-sdk-1.0.md#_31-集成sdk)
- [3.2 声明权限](venus-sdk-1.0.md#_32-声明权限)
- [3.3 混淆配置](venus-sdk-1.0.md#_33-混淆配置)
- [3.4 SDK初始化](venus-sdk-1.0.md#_34-sdk初始化)
- [3.5 获取SDK构建信息](venus-sdk-1.0.md#_35-获取sdk构建信息)
- [4. 设备连接和配置](venus-sdk-1.0.md#_4-设备连接和配置)
- [4.1 设备扫描](venus-sdk-1.0.md#_41-设备扫描)
- [4.2 设备连接管理](venus-sdk-1.0.md#_42-设备连接管理)
- [4.3 设备信息获取](venus-sdk-1.0.md#_43-设备信息获取)
- [4.4 系统配置获取](venus-sdk-1.0.md#_44-系统配置获取)
- [4.5 时间设置](venus-sdk-1.0.md#_45-时间设置)
- [4.6 亮度设置](venus-sdk-1.0.md#_46-亮度设置)
- [4.7 音量设置](venus-sdk-1.0.md#_47-音量设置)
- [4.8 显示模式设置](venus-sdk-1.0.md#_48-显示模式设置)
- [4.9 系统语言设置](venus-sdk-1.0.md#_49-系统语言设置)
- [4.10 通知功能设置](venus-sdk-1.0.md#_410-通知功能设置)
- [4.11 触控板设置](venus-sdk-1.0.md#_411-触控板设置)
- [4.12 静置状态自动熄屏设置](venus-sdk-1.0.md#_412-静置状态自动熄屏设置)
- [4.13 非活跃状态自动熄屏设置](venus-sdk-1.0.md#_413-非活跃状态自动熄屏设置)
- [4.14 熄屏状态自动关机设置](venus-sdk-1.0.md#_414-熄屏状态自动关机设置)
- [4.15 佩戴检测设置](venus-sdk-1.0.md#_415-佩戴检测设置)
- [5. 系统状态和操控](venus-sdk-1.0.md#_5-系统状态和操控)
- [5.1 获取、监听、设置系统状态](venus-sdk-1.0.md#_51-获取监听设置系统状态)
- [5.2 触控板](venus-sdk-1.0.md#_52-触控板)
- [5.3 应用的进入和退出](venus-sdk-1.0.md#_53-应用的进入和退出)
- [5.4 通知](venus-sdk-1.0.md#_54-通知)
- [5.5 文件系统](venus-sdk-1.0.md#_55-文件系统)
- [5.6 查看存储空间](venus-sdk-1.0.md#_56-查看存储空间)
- [5.7 监听设备主动消息](venus-sdk-1.0.md#_57-监听设备主动消息)
- [5.8 重启](venus-sdk-1.0.md#_58-重启)
- [5.9 恢复出厂设置](venus-sdk-1.0.md#_59-恢复出厂设置)
- [5.10 解绑设备](venus-sdk-1.0.md#_510-解绑设备)
- [6. 应用](venus-sdk-1.0.md#_6-应用)
- [6.1 实时翻译(语音转文字显示)信息同步](venus-sdk-1.0.md#61-实时翻译语音转文字显示信息同步)
- [6.2 实时转写(语音转文字显示)信息同步](venus-sdk-1.0.md#62-实时转写语音转文字显示信息同步)
- [6.3 对话信息同步](venus-sdk-1.0.md#_63-对话信息同步)
- [6.4 导航信息同步](venus-sdk-1.0.md#_64-导航信息同步)
- [6.5 提词信息同步](venus-sdk-1.0.md#_65-提词信息同步)
- [6.6 图库](venus-sdk-1.0.md#_66-图库)
- [7. 应用定制](venus-sdk-1.0.md#_7-应用定制)
- [8. 固件升级](venus-sdk-1.0.md#_8-固件升级)
- [9. 常见问题](venus-sdk-1.0.md#_9-常见问题)
- [9.1 设备无法扫描到](venus-sdk-1.0.md#_91-设备无法扫描到)
- [9.2 设备没有声音](venus-sdk-1.0.md#_92-设备没有声音)
- [10. 更新历史](venus-sdk-1.0.md#_10-更新历史)

View File

@@ -0,0 +1,170 @@
# API 参考
完整的 API 接口文档。
## 显示 API
在眼镜显示屏上显示内容。
### showText(options)
显示文本内容。
**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| text | string | 是 | 要显示的文本 |
| position | object | 否 | 显示位置 {x, y} |
| fontSize | number | 否 | 字体大小,默认 24 |
| color | string | 否 | 颜色,默认 '#FFFFFF' |
| duration | number | 否 | 显示时长毫秒0 表示永久显示 |
**示例:**
```javascript
glasses.display.showText({
text: 'Hello World',
position: { x: 100, y: 200 },
fontSize: 24,
color: '#FFFFFF',
duration: 3000
})
```
### showImage(options)
显示图像。
**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| url | string | 是 | 图像 URL |
| position | object | 否 | 显示位置 {x, y} |
| width | number | 否 | 宽度 |
| height | number | 否 | 高度 |
| opacity | number | 否 | 透明度0-1 |
**示例:**
```javascript
glasses.display.showImage({
url: 'https://example.com/image.png',
position: { x: 50, y: 100 },
width: 200,
height: 150,
opacity: 0.8
})
```
### clear()
清除所有显示内容。
**示例:**
```javascript
glasses.display.clear()
```
## 语音 API
语音识别和合成。
### startRecognition(options)
启动语音识别。
**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| language | string | 否 | 语言代码,默认 'zh-CN' |
| continuous | boolean | 否 | 是否连续识别 |
| interimResults | boolean | 否 | 是否返回中间结果 |
**示例:**
```javascript
const recognition = glasses.voice.startRecognition({
language: 'zh-CN',
continuous: true
})
recognition.on('result', (text) => {
console.log('识别结果:', text)
})
```
### stopRecognition()
停止语音识别。
**示例:**
```javascript
glasses.voice.stopRecognition()
```
### speak(text, options)
语音合成。
**参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| text | string | 是 | 要合成的文本 |
| language | string | 否 | 语言代码 |
| speed | number | 否 | 语速0.5-2.0 |
**示例:**
```javascript
await glasses.voice.speak('Hello World', {
language: 'en-US',
speed: 1.0
})
```
## 传感器 API
获取传感器数据。
### getAccelerometer(callback)
获取加速度数据。
**示例:**
```javascript
glasses.sensors.getAccelerometer((data) => {
console.log('加速度:', data.x, data.y, data.z)
})
```
### getGyroscope(callback)
获取陀螺仪数据。
**示例:**
```javascript
glasses.sensors.getGyroscope((data) => {
console.log('角速度:', data.x, data.y, data.z)
})
```
### getMagnetometer(callback)
获取磁力计数据。
**示例:**
```javascript
glasses.sensors.getMagnetometer((data) => {
console.log('磁场强度:', data.x, data.y, data.z)
})
```

View File

@@ -0,0 +1,130 @@
# 后台接入
鉴权、接口调用与回调,国内与海外域名与限速差异,日志与监控。
## 鉴权
所有 API 请求都需要进行身份验证。
### API 密钥
在请求头中包含您的 API 密钥:
```http
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
```
### 请求签名
对于敏感操作,需要使用签名验证:
```javascript
const crypto = require('crypto')
function generateSignature(params, secret) {
const sortedParams = Object.keys(params)
.sort()
.map(key => `${key}=${params[key]}`)
.join('&')
return crypto
.createHmac('sha256', secret)
.update(sortedParams)
.digest('hex')
}
```
## 接口调用
### RESTful API
基础 URL
- 国内:`https://api.jueyuan.com`
- 海外:`https://api-global.jueyuan.com`
### 示例请求
```javascript
const axios = require('axios')
const client = axios.create({
baseURL: 'https://api.jueyuan.com',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
})
// 获取设备列表
const devices = await client.get('/v1/devices')
// 发送消息到设备
await client.post('/v1/devices/device-id/messages', {
type: 'text',
content: 'Hello World'
})
```
### 限速说明
不同接口有不同的限速策略:
- **普通接口**100 次/分钟
- **高频接口**1000 次/分钟
- **批量接口**10 次/分钟
超过限速会返回 `429 Too Many Requests` 错误。
## 回调处理
### Webhook 配置
在开发者平台配置 Webhook URL系统会在事件发生时调用该 URL。
### 回调验证
```javascript
const crypto = require('crypto')
function verifyCallback(signature, payload, secret) {
const hash = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex')
return hash === signature
}
```
### 回调事件
常见回调事件:
- `device.connected` - 设备连接
- `device.disconnected` - 设备断开
- `message.received` - 收到消息
- `voice.recognized` - 语音识别完成
## 日志与监控
### 日志查询
```javascript
// 查询设备日志
const logs = await client.get('/v1/devices/device-id/logs', {
params: {
startTime: '2024-01-01T00:00:00Z',
endTime: '2024-01-02T00:00:00Z',
level: 'error'
}
})
```
### 监控指标
- API 调用次数
- 错误率
- 响应时间
- 设备在线率

View File

@@ -0,0 +1,160 @@
# 最佳实践
开发指南和最佳实践。
## 性能优化
### 减少 UI 元素
同时显示的 UI 元素数量会影响性能,建议:
- 限制同时显示的文本数量(建议 < 10
- 使用列表或分页显示大量内容
- 及时清理不需要的显示元素
### 图像优化
- 使用适当的图像压缩格式WebPJPEG
- 限制图像尺寸建议 < 1024x1024
- 使用 CDN 加速图像加载
### 位置更新
避免频繁更新元素位置
```javascript
// ❌ 不好:每帧都更新
setInterval(() => {
glasses.display.showText({
text: 'Hello',
position: { x: Math.random() * 100, y: Math.random() * 100 }
})
}, 16)
// ✅ 好:使用动画 API
glasses.display.animate({
element: textElement,
from: { x: 0, y: 0 },
to: { x: 100, y: 100 },
duration: 1000
})
```
### 缓存机制
合理使用缓存
```javascript
// 缓存常用图像
const imageCache = new Map()
async function loadImage(url) {
if (imageCache.has(url)) {
return imageCache.get(url)
}
const image = await fetch(url).then(r => r.blob())
imageCache.set(url, image)
return image
}
```
## 用户体验
### 界面设计
- **简洁明了**避免信息过载
- **视觉反馈**操作后提供明确的反馈
- **一致性**保持界面风格一致
### 交互方式
支持多种交互方式
- 触摸交互
- 语音交互
- 手势识别
- 头部追踪
### 环境适应
考虑不同环境光线条件
```javascript
// 根据环境光调整显示亮度
glasses.display.setBrightness(ambientLight)
// 使用高对比度颜色
const colors = {
light: { text: '#000000', bg: '#FFFFFF' },
dark: { text: '#FFFFFF', bg: '#000000' }
}
```
## 故障排除
### 连接失败
**问题:** 无法连接到智能眼镜设备
**解决方案:**
1. 检查设备是否已开启
2. 确认设备在有效范围内蓝牙 < 10mWi-Fi 同网络
3. 验证 API 密钥是否正确
4. 重启设备和应用
5. 检查防火墙设置
### 显示异常
**问题:** 内容显示位置不正确
**解决方案:**
1. 校准设备显示屏
2. 检查坐标参数范围通常 0-1920 x 0-1080
3. 验证内容尺寸设置
4. 更新设备固件
5. 检查设备方向设置
### 语音识别失败
**问题:** 语音识别不准确或失败
**解决方案:**
1. 检查麦克风权限
2. 确保环境噪音较小
3. 使用正确的语言代码
4. 检查网络连接在线识别需要网络
5. 尝试使用离线识别模式
### 性能问题
**问题:** 应用运行卡顿
**解决方案:**
1. 减少同时显示的 UI 元素
2. 优化图像大小和格式
3. 使用异步操作避免阻塞主线程
4. 监控内存使用及时释放资源
5. 使用性能分析工具定位瓶颈
## 安全建议
### API 密钥保护
- 不要在客户端代码中硬编码 API 密钥
- 使用环境变量或配置文件
- 定期轮换 API 密钥
- 使用 HTTPS 传输
### 数据加密
- 敏感数据传输使用加密
- 本地存储加密敏感数据
- 使用安全的通信协议
### 权限管理
- 只请求必要的权限
- 向用户说明权限用途
- 定期审查权限使用情况

View File

@@ -0,0 +1,165 @@
# 能力中心
语音、转写、翻译、AI 助手的端到端工作流与常见场景模板。
## 语音识别
实时语音识别,支持多种语言和方言。
### 基础使用
```javascript
// 启动语音识别
const recognition = glasses.voice.startRecognition({
language: 'zh-CN',
continuous: true,
interimResults: true
})
recognition.on('result', (text) => {
console.log('识别结果:', text)
})
recognition.on('error', (error) => {
console.error('识别错误:', error)
})
```
### 语言支持
- 中文(普通话、粤语、四川话等)
- 英语
- 日语
- 韩语
- 更多语言持续更新
## 转写服务
将音频文件转换为文本。
### 上传音频
```javascript
const transcription = await glasses.transcription.transcribe({
audioUrl: 'https://example.com/audio.mp3',
language: 'zh-CN',
format: 'text'
})
console.log('转写结果:', transcription.text)
```
### 批量转写
```javascript
const tasks = await glasses.transcription.batchTranscribe([
{ audioUrl: 'audio1.mp3', language: 'zh-CN' },
{ audioUrl: 'audio2.mp3', language: 'en-US' }
])
tasks.forEach(task => {
task.on('complete', (result) => {
console.log('转写完成:', result.text)
})
})
```
## 翻译服务
多语言实时翻译。
### 文本翻译
```javascript
const translation = await glasses.translation.translate({
text: 'Hello World',
from: 'en',
to: 'zh'
})
console.log('翻译结果:', translation.text)
```
### 语音翻译
```javascript
const translation = glasses.translation.translateSpeech({
audioUrl: 'audio.mp3',
from: 'en',
to: 'zh'
})
translation.on('complete', (result) => {
console.log('翻译结果:', result.text)
console.log('音频URL:', result.audioUrl)
})
```
## AI 助手
智能对话助手,支持上下文理解。
### 对话
```javascript
const conversation = glasses.ai.createConversation({
model: 'gpt-4',
systemPrompt: '你是一个智能助手'
})
const response = await conversation.chat('你好')
console.log('回复:', response.text)
```
### 流式响应
```javascript
const stream = await conversation.chatStream('请介绍一下智能眼镜')
stream.on('data', (chunk) => {
process.stdout.write(chunk.text)
})
stream.on('end', () => {
console.log('\n对话完成')
})
```
## 场景模板
### 会议记录
```javascript
const meeting = glasses.scenarios.createMeeting({
participants: ['user1', 'user2'],
language: 'zh-CN'
})
meeting.on('transcription', (text) => {
// 实时转写
console.log('会议内容:', text)
})
meeting.on('summary', (summary) => {
// 会议摘要
console.log('会议摘要:', summary)
})
```
### 实时翻译
```javascript
const translator = glasses.scenarios.createTranslator({
from: 'en',
to: 'zh'
})
translator.on('translation', (result) => {
// 显示翻译结果
glasses.display.showText({
text: result.text,
position: { x: 100, y: 200 }
})
})
```

View File

@@ -0,0 +1,117 @@
# 设备端开发
在眼镜设备上开发应用,集成 SDK 与显示渲染,支持语音与传感器能力。
## 设备型号
觉远创智提供多款智能眼镜设备,满足不同场景需求。
### Vision Basic
入门款智能眼镜,提供基础显示与语音功能。
**主要特性:**
- 基础 AR 显示
- 语音交互
- 基础传感器支持
**适用场景:**
- 个人用户
- 简单应用场景
- 入门开发
### Vision Pro
高性能智能眼镜,提供更佳的渲染效果与传感器集成。
**主要特性:**
- 高性能 AR 显示
- 增强的语音识别
- 丰富的传感器支持
- 更长的续航时间
**适用场景:**
- 专业应用
- 企业级应用
- 复杂交互场景
### Vision Elite
旗舰款智能眼镜,提供扩展能力与企业特性。
**主要特性:**
- 顶级 AR 显示
- 企业级安全特性
- 完整的 API 支持
- 定制化支持
**适用场景:**
- 企业级应用
- 专业开发
- 定制化需求
## SDK 集成
### Android 设备端
```kotlin
// 添加依赖
dependencies {
implementation 'com.smartglasses:device-sdk:2.1.0'
}
// 初始化
val deviceSDK = DeviceSDK.getInstance(context)
deviceSDK.initialize {
// SDK 初始化完成
}
```
### 显示渲染
```kotlin
// 显示文本
deviceSDK.display.showText(
text = "Hello World",
position = Position(100, 200),
fontSize = 24,
color = Color.WHITE,
duration = 3000
)
// 显示图像
deviceSDK.display.showImage(
imageUrl = "https://example.com/image.png",
position = Position(50, 100),
width = 200,
height = 150
)
```
## 语音交互
```kotlin
// 启动语音识别
deviceSDK.voice.startRecognition { result ->
// 处理识别结果
println("识别结果: $result")
}
// 停止语音识别
deviceSDK.voice.stopRecognition()
```
## 传感器数据
```kotlin
// 获取加速度数据
deviceSDK.sensors.getAccelerometer { data ->
// 处理加速度数据
}
// 获取陀螺仪数据
deviceSDK.sensors.getGyroscope { data ->
// 处理陀螺仪数据
}
```

View File

@@ -0,0 +1,106 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>觉远创智开发文档</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="觉远创智智能眼镜开放平台开发文档">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<!-- DNS 预解析和预连接优化 -->
<link rel="dns-prefetch" href="https://cdn.staticfile.org">
<link rel="dns-prefetch" href="https://unpkg.com">
<link rel="preconnect" href="https://cdn.staticfile.org" crossorigin>
<!-- 直接加载 CSS避免阻塞渲染 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/docsify/4.13.1/themes/vue.css">
<style>
:root {
--theme-color: #42b983;
--sidebar-width: 300px;
}
</style>
</head>
<body>
<div id="app">加载中...</div>
<script>
window.$docsify = {
name: '',
repo: '',
homepage: 'venus-sdk-1.0.md',
loadSidebar: true,
subMaxLevel: 3,
auto2top: true,
coverpage: false,
alias: {
'/.*/_sidebar.md': '/_sidebar.md'
},
// 自定义 slugify 函数,确保锚点正确生成(与文档内部链接格式一致)
slugify: function(text) {
// 移除标题标记和空格
text = text.trim();
// 移除中文括号和标点符号
var slug = text
.replace(/[()【】\[\]《》<>""'',。、;:!?]/g, '') // 移除中文和英文标点符号
.replace(/\./g, '') // 移除点号(如 6.1 -> 61
.replace(/\s+/g, '-') // 空格替换为连字符
.replace(/[^\u4e00-\u9fa5a-z0-9-]+/g, '') // 移除其他非中文、字母、数字、连字符的字符
.replace(/^-+|-+$/g, '') // 移除首尾连字符
.replace(/-+/g, '-'); // 多个连字符合并为一个
slug = slug.toLowerCase(); // 转为小写docsify 默认行为)
// 如果以数字开头,添加下划线前缀(匹配 sidebar 链接格式)
if (/^\d/.test(slug)) {
slug = '_' + slug;
}
return slug;
},
search: {
maxAge: 86400000,
paths: 'auto',
placeholder: '搜索文档',
noData: '找不到结果!',
depth: 6
},
pagination: {
previousText: '上一章节',
nextText: '下一章节',
crossChapter: true,
crossChapterText: true,
},
plugins: [
function(hook, vm) {
hook.beforeEach(function(html) {
return html
})
hook.afterEach(function(html, next) {
next(html)
})
}
]
}
</script>
<!-- 使用国内 CDN (staticfile.org 七牛云) 并优化加载顺序 -->
<!-- Docsify 核心库 -->
<script src="https://cdn.staticfile.org/docsify/4.13.1/docsify.min.js" defer></script>
<!-- 搜索插件 -->
<script src="https://cdn.staticfile.org/docsify/4.13.1/plugins/search.min.js" defer></script>
<!-- 分页插件 - 使用 unpkg 作为备选 -->
<script src="https://unpkg.com/docsify-pagination@2.10.1/dist/docsify-pagination.min.js" defer></script>
<!-- Prism 代码高亮 - 使用 defer 异步加载,合并加载顺序 -->
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-core.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-bash.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-javascript.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-java.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-kotlin.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-swift.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-python.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-json.min.js" defer></script>
<script src="https://cdn.staticfile.org/prism/1.29.0/components/prism-markdown.min.js" defer></script>
</body>
</html>

View File

@@ -0,0 +1,161 @@
# 移动端开发
完成配对与权限接入,下载示例 App 并查看开源仓库,集成通知与同步。
## 平台支持
觉远创智 SDK 支持以下移动端平台:
### Android
使用 Kotlin/Java 开发,支持蓝牙和 Wi-Fi 配对,需要相应权限。
**环境要求:**
- Android 5.0 (API 21) 及以上
- Kotlin 1.5+ 或 Java 8+
**安装:**
```gradle
dependencies {
implementation 'com.smartglasses:mobile-sdk:2.1.0'
}
```
**初始化:**
```kotlin
val mobileSDK = MobileSDK.getInstance(context)
mobileSDK.initialize(
apiKey = "your-api-key",
appId = "your-app-id"
)
```
**设备配对:**
```kotlin
// 扫描设备
mobileSDK.scanDevices { devices ->
// 选择设备进行配对
mobileSDK.pairDevice(devices[0]) { success ->
if (success) {
println("配对成功")
}
}
}
```
### iOS
使用 Swift 开发,需要麦克风和通知权限,支持设备绑定。
**环境要求:**
- iOS 12.0 及以上
- Swift 5.0+
**安装:**
```ruby
pod 'SmartGlassesMobileSDK', '~> 2.1.0'
```
**初始化:**
```swift
import SmartGlassesMobileSDK
let mobileSDK = MobileSDK.shared
mobileSDK.initialize(
apiKey: "your-api-key",
appId: "your-app-id"
)
```
**设备配对:**
```swift
// 扫描设备
mobileSDK.scanDevices { devices in
// 选择设备进行配对
mobileSDK.pairDevice(devices[0]) { success in
if success {
print("配对成功")
}
}
}
```
### Web
使用 Web API 进行开发,支持进度上报。
**安装:**
```bash
npm install smartglasses-mobile-sdk
```
**使用:**
```javascript
import { MobileSDK } from 'smartglasses-mobile-sdk'
const mobileSDK = new MobileSDK({
apiKey: 'your-api-key',
appId: 'your-app-id'
})
// 初始化
await mobileSDK.initialize()
// 扫描设备
const devices = await mobileSDK.scanDevices()
// 配对设备
await mobileSDK.pairDevice(devices[0])
```
## 权限配置
### Android
`AndroidManifest.xml` 中添加权限:
```xml
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
```
### iOS
`Info.plist` 中添加权限说明:
```xml
<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要蓝牙权限以连接智能眼镜设备</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限以进行语音交互</string>
```
## 通知集成
```kotlin
// Android 示例
mobileSDK.notifications.sendNotification(
title = "新消息",
content = "您有一条新消息",
icon = R.drawable.notification_icon
)
```
```swift
// iOS 示例
mobileSDK.notifications.sendNotification(
title: "新消息",
body: "您有一条新消息"
)
```

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,209 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<!-- <title>11<%= webpackConfig.name %></title> -->
<title><%= htmlWebpackPlugin.options.title %></title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left {
left: 0;
}
#loader-wrapper .loader-section.section-right {
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow: /

View File

@@ -0,0 +1,148 @@
兼职
招聘
网络
QQ
招聘
有意者
到货
本店
代购
扣扣
客服
微店
兼职
兼值
淘宝
小姐
妓女
包夜
3P
LY
JS
狼友
技师
推油
胸推
BT
毒龙
口爆
兼职
楼凤
足交
口暴
口交
全套
SM
桑拿
吞精
咪咪
婊子
乳方
操逼
全职
性伴侣
网购
网络工作
代理
专业代理
帮忙点一下
帮忙点下
请点击进入
详情请进入
私人侦探
私家侦探
针孔摄象
调查婚外情
信用卡提现
无抵押贷款
广告代理
原音铃声
借腹生子
找个妈妈
找个爸爸
代孕妈妈
代生孩子
代开发票
腾讯客服电话
销售热线
免费订购热线
低价出售
款到发货
回复可见
连锁加盟
加盟连锁
免费二级域名
免费使用
免费索取
蚁力神
婴儿汤
售肾
刻章办
买小车
套牌车
玛雅网
电脑传讯
视频来源
下载速度
高清在线
全集在线
在线播放
txt下载
六位qq
6位qq
位的qq
个qb
送qb
用刀横向切腹
完全自杀手册
四海帮
足球投注
地下钱庄
中国复兴党
阿波罗网
曾道人
六合彩
改卷内幕
替考试
隐形耳机
出售答案
考中答案
答an
da案
资金周转
救市
股市圈钱
崩盘
资金短缺
证监会
质押贷款
小额贷款
周小川
刘明康
尚福林
孔丹

View File

@@ -0,0 +1,326 @@
习近平,
平近习,
xjp,
习太子,
习明泽,
老习,
温家宝,
温加宝,
温x,
温jia宝,
温宝宝,
温加饱,
温加保,
张培莉,
温云松,
温如春,
温jb,
胡温,
胡x,
胡jt,
胡boss,
胡总,
胡王八,
hujintao,
胡jintao,
胡j涛,
胡惊涛,
胡景涛,
胡紧掏,
湖紧掏,
胡紧套,
锦涛,
hjt,
胡派,
胡主席,
刘永清,
胡海峰,
胡海清,
江泽民,
民泽江,
江胡,
江哥,
江主席,
江书记,
江浙闽,
江沢民,
江浙民,
择民,
则民,
茳泽民,
zemin,
ze民,
老江,
老j,
江core,
江x,
江派,
江zm,
jzm,
江戏子,
江蛤蟆,
江某某,
江贼,
江猪,
江氏集团,
江绵恒,
江绵康,
王冶坪,
江泽慧,
邓小平,
平小邓,
xiao平,
邓xp,
邓晓平,
邓朴方,
邓榕,
邓质方,
毛泽东,
猫泽东,
猫则东,
猫贼洞,
毛zd,
毛zx,
z东,
ze东,
泽d,
zedong,
毛太祖,
毛相,
主席画像,
改革历程,
朱镕基,
朱容基,
朱镕鸡,
朱容鸡,
朱云来,
李鹏,
李peng,
里鹏,
李月月鸟,
李小鹏,
李小琳,
华主席,
华国,
国锋,
国峰,
锋同志,
白春礼,
薄熙来,
薄一波,
蔡赴朝,
蔡武,
曹刚川,
常万全,
陈炳德,
陈德铭,
陈建国,
陈良宇,
陈绍基,
陈同海,
陈至立,
戴秉国,
丁一平,
董建华,
杜德印,
杜世成,
傅锐,
郭伯雄,
郭金龙,
贺国强,
胡春华,
耀邦,
华建敏,
黄华华,
黄丽满,
黄兴国,
回良玉,
贾庆林,
贾廷安,
靖志远,
李长春,
李春城,
李建国,
李克强,
李岚清,
李沛瑶,
李荣融,
李瑞环,
李铁映,
李先念,
李学举,
李源潮,
栗智,
梁光烈,
廖锡龙,
林树森,
林炎志,
林左鸣,
令计划,
柳斌杰,
刘奇葆,
刘少奇,
刘延东,
刘云山,
刘志军,
龙新民,
路甬祥,
罗箭,
吕祖善,
马飚,
马恺,
孟建柱,
欧广源,
强卫,
沈跃跃,
宋平顺,
粟戎生,
苏树林,
孙家正,
铁凝,
屠光绍,
王东明,
汪东兴,
王鸿举,
王沪宁,
王乐泉,
王洛林,
王岐山,
王胜俊,
王太华,
王学军,
王兆国,
王振华,
吴邦国,
吴定富,
吴官正,
无官正,
吴胜利,
吴仪,
奚国华,
习仲勋,
徐才厚,
许其亮,
徐绍史,
杨洁篪,
叶剑英,
由喜贵,
于幼军,
俞正声,
袁纯清,
曾培炎,
曾庆红,
曾宪梓,
曾荫权,
张德江,
张定发,
张高丽,
张立昌,
张荣坤,
张志国,
赵洪祝,
紫阳,
周生贤,
周永康,
朱海仑,
中南海,
大陆当局,
中国当局,
北京当局,
共产党,
党产共,
共贪党,
阿共,
产党共,
公产党,
工产党,
共c党,
共x党,
共铲,
供产,
共惨,
供铲党,
供铲谠,
供铲裆,
共残党,
共残主义,
共产主义的幽灵,
拱铲,
老共,
中共,
中珙,
中gong,
gc党,
贡挡,
gong党,
g产,
狗产蛋,
共残裆,
恶党,
邪党,
共产专制,
共产王朝,
裆中央,
土共,
土g,
共狗,
g匪,
共匪,
仇共,
政府,
症腐,
政腐,
政付,
正府,
政俯,
政f,
zhengfu,
政zhi,
挡中央,
档中央,
中央领导,
中国zf,
中央zf,
国wu院,
中华帝国,
gong和,
大陆官方,
北京政权,
江泽民,
胡锦涛,
温家宝,
习近平,
习仲勋,
贺国强,
贺子珍,
周永康,
李长春,
李德生,
王岐山,
姚依林,
回良玉,
李源潮,
李干成,
戴秉国,
黄镇,
刘延东,
刘瑞龙,
俞正声,
黄敬,
薄熙,
薄一波,
周小川,
周建南,
温云松,
徐明,
江泽慧,
江绵恒,
江绵康,
李小鹏,
李鹏,
李小琳,
朱云来,
朱容基,
法轮功,
李洪志,
新疆骚乱

View File

@@ -0,0 +1,438 @@
出售雷管
炸药
炸药
枪支
出售炸药
出售炸药 电话
制作火药配方
炸药出售
出售雷管炸药
火药配方
在家里做原子弹
硝酸甘油炸弹制作
TNT 炸弹的制作
硝铵炸药配方
硝酸甘油制作
炸弹配方
简易炸药
火药制作简易炸弹
炸弹制作
硝酸甘油
硝酸甘油炸弹制作方法
手把手教你做炸弹
恐怖分子傻瓜手册
氢弹手工制作方法
起爆器
自制燃烧弹
燃烧弹
弹药制造方法
液体炸药配方
炸药配方与制作
自制炸药配方
tnt炸药成分
炸药的制作
tnt炸药配方
各种炸药配方大全
炸药的成分
燃烧弹的制作方
黑火药的配方
黑火药的制作
黑火药比例
燃烧弹 制作
黑火药配方比例
黑火药的成分
原子弹配方
原子弹DIY教程
C4炸药
雷管出售
制作硝化甘油
DIY核弹
核弹制作方法
原子弹制作手册
简易原子弹教程
黑火药配方
自制炸药方法
教你怎么用土办法做武器
莫洛托夫鸡尾酒的配方
zz炸弹的制作方法
C4炸药的成分
炸药制造生产工艺
原子弹制造完全手册
「红烧兔子」大餐
汽车炸弹制作
人体炸弹制作流程
炸弹制作从入门
鸡尾酒炸弹制作
集束炸弹制作
硝酸铵的简便制取方法
莫洛托夫燃烧弹
塑胶炸弹
用火药混合塑料
高性能爆炸物质混合
原子弹 制作方法
手教你制作原子弹
轻型巡航导弹的制作
黑索金的制造过程
Zha药制造进程
购买自爆材料
可塑炸弹制作方法
C4塑胶炸药
水浴法制TNT
简易核弹头的制造
高爆炸药的基本配方
如何制硝化甘油
燃烧剂的简易制备
简易大威力炸弹
炸弹制作入门
硝酸甘油炸药制作
基本配方是硝酸甘
燃烧剂的简易制作
制作性能优良的燃烧弹
酸甘油炸药
简易导弹制作
核弹头的制造
可塑炸弹制作
炸药硝酸甘油制法
原子弹制作方法
火药的配方
手教你做原子弹
怎么用土办法做武器
手把手教你制作原子弹
燃烧弹的制作方法
怎么自制燃烧弹
TNT炸弹制作
高爆炸药基本配方
爆破和杀伤燃烧弹
炸弹制作从入门到精
写的炸弹制作教程
原子弹制作 方法
教你制作原子弹
下硝化甘油的制作方法
DIY原子弹
原子弹制作
炸药及其制造方法
ATOM弹制造
三分钟教你原子弹
火药原理
简易炸弹
简易燃烧弹
土炸药成份
你怎么用土办法做武器
燃烧弹制作
燃烧瓶的制作方法
炸弹制作手册 硫酸
原子弹制作方法DIY
汽油三分之一白糖混合
炸药的制作配方
燃烧弹的制作方
炸药的配方
如何自制燃烧弹
标准炸弹教程
黑火药和硝酸钾农药混合
恐怖分子自己制造炸弹
手柄制作炸弹引爆器
制作炸弹首先要
燃烧瓶制作
出售炸药QQ
出售气枪
出售气枪 QQ
出售气枪 电话
出售手枪
出售手枪 QQ
出售手枪 电话
出售猎枪
出售猎枪 QQ
出售猎枪 电话
出售汽枪
出售步枪
出售狙击枪
出售手狗
出售气狗
出售猎狗
【手枪出售】联系电话
64式手枪出售
92式手枪出售
出售:高仿真枪
出售54式手枪
出售M1911
出售各类猎狗
出售国产军用54手枪
出售火枪 –游戏
出售进口金属枪模
出售仿真枪
出售麻醉枪免收任何定金
出售手枪=货到付款
出售外国枪模
出售袖珍手枪
娥眉气枪出售
防身手枪QQ
防身武器手枪
仿真枪QQ
钢珠枪小口径步枪
高压狗QQ
高压气枪,气枪子弹
高压气枪|电狗专卖
高压气枪|气枪货到付款
高压气枪专卖店
各类军用枪
各类军用枪支
各式气枪出售
工字牌气枪出售专卖
气枪
工字汽狗麻醉枪
供应军用手枪
供应汽枪
购买枪支QQ
国产汽狗专卖|气枪货
集团出售手枪
集团出售手枪气枪
进口气枪,气枪子弹
军用54出售
军用77出售
军用手枪钢珠枪
里有汽枪出售
猎枪出售/枪
猎枪仿真枪QQ
猎枪麻醉枪钢珠枪
猎枪哪里有卖
猎枪手枪买卖
猎枪销售手枪销售气枪
猎枪专卖店
猎枪子弹底火专卖
麻醉枪出售可验货
麻醉枪猎枪军用
买卖54狗
买卖64狗
买卖警察枪支
买卖军狗
买卖军用枪支
卖64手枪
卖92手枪
卖钢珠枪QQ
哪里能买到自制手枪
哪里有钢珠枪
哪里有连发猎枪买卖
哪里有卖双管猎
哪里有气枪卖
哪里有枪出售
哪里有真枪出售
哪里有真枪卖买
哪能买到真枪
期出售手枪气枪猎
气狗 高压气枪
气狗出售 进口气狗
气枪专卖网
气枪/出售/专卖网
气枪/猎枪/钢珠枪
气枪仿真枪出售
气枪购买|气枪组装
气枪货到付款,汽狗出售
气枪价格 仿真气枪
气枪价格,气枪专卖店
气枪看货加QQ
气枪联系QQ
气枪猎枪麻醉枪
气枪迷魂药
汽狗高压汽枪
铅弹 上海工字气枪
全金属仿真枪专卖
热武器QQ
三箭气枪出售
手枪气* 枪猎
手槍买卖自制手枪
售枪购买手枪
售手枪QQ
司马仿真枪模型QQ
淘宝气枪货到付款
提供气狗专卖店
提供专业及时的气狗
秃鹰气枪货到付款
锡峰气枪出售
仙鹤气枪出售
销售/专卖/买卖77式手枪
销售电手狗
销售气手狗
销售小口径步枪
销售运动步枪
小口径秃鹰沙漠
有军用枪支出售
长期出 售手枪
折叠狗QQ
转让 猎枪
子弹货到付款
自制手枪哪里买
自制手枪哪里有卖
阻击枪/汽枪/高压气枪
组装手枪
最新销售汽狗
出售警用手铐|仿真枪
猎枪|真枪
手枪|阻击枪
弓弩专营
弓弩专卖网货到付款
弓弩专卖网
弓弩专卖货到付款
弓弩专卖店网
弓弩专卖店
弓弩专卖
弓弩制作
弓弩直销
弓弩有限公司
弓弩营销中心
弓弩一百专卖店
弓弩销售
弓弩网
弓弩网
弓弩图纸
弓弩特许经销
弓弩狩猎网
自制手弩
追风弓弩麻醉箭专卖
专业弓弩网
中国战神军用弓弩
中国弩弓专卖
中国弓弩专卖网
中国弓弩直销
中国弓弩网
中国弓弩狩猎网
中国弓驽网
制作简易弓弩
郑州弓弩专卖
赵氏弓弩专卖网
赵氏弓弩专卖店
赵氏弓弩专卖
赵氏弓弩销售
小型弓弩专卖店
小猎人弓弩网
狩猎器材弓弩专卖
狩猎器材弓弩
狩猎弓弩专卖网
狩猎弓弩专卖
狩猎弓弩麻醉箭
手枪式折叠三用弩
三利达弓弩专卖网
三利达弓弩直营
三利达弓弩配件
三步倒药箭批发
三步倒弩箭专卖
三步倒麻醉弩箭销售
三步倒麻醉箭专卖
三步倒麻醉箭
三步倒捕狗药
军用弓弩专卖网
军用弓弩专卖店
军用弓弩批发
军用弓弩公司
供应三利达弓弩麻醉箭
供应三步倒麻醉箭
供应秦氏弓弩
供应弩用麻醉箭
供应弩捕狗箭
供应麻醉箭三步倒
供应麻醉箭批发
供应麻醉箭
供应军用弩折叠弩
供应军用弓弩专卖
供应精品弓弩
供应弓弩麻醉箭
供应弓弩
供应钢珠弓弩
弓弩商城专卖
弓弩商城
弓弩亲兄弟货到付款
弓弩批发
弓弩免定金货到付款
弓弩麻醉箭
弓弩麻醉镖
弓弩论坛
钢珠弓弩专卖网
钢珠弓弩专卖店
打狗弓弩三步倒
麻醉弓弩专卖店
出售军刀
出售军刺
出售弹簧刀
出售三棱刀
出售跳刀
军刀网
南方军刀网
户外军刀网
三棱军刺专卖
出售开山刀军刺
西点军刀网
军刀专 卖
戈博军刀
阿兰德龙户外
出售军品军刀
勃朗宁军刀
军刀军品网
阿兰得龙野营刀具网
出售军刺军刀
警用刀具出售
折刀专卖网
阳江军品军刀网
野营刀专卖
砍刀精品折刀专卖
匕首蝴蝶甩刀专卖
军刀专卖军刺
军刀专卖刀具批发
军刀图片砍刀
军刀网军刀专卖
军刀价格军用刀具
军品军刺网
军刀军刺甩棍
阳江刀具批发网
北方先锋军刀
正品军刺出售
野营军刀出售
开山刀砍刀出售
仿品军刺出售
军刀直刀专卖
手工猎刀专卖
自动跳刀专卖
军刀电棍销售
军刀甩棍销售
美国军刀出售
极端武力折刀
防卫棍刀户外刀具
阿兰德龙野营刀
仿品军刺网
野营砍刀户外军刀
手工猎刀户外刀具
中国户外刀具网
西点军品军刀网
野营开山刀军刺
三利达弓弩军刀
尼泊尔军刀出售
防卫野营砍刀出售
防卫著名军刀出售
防卫棍刀出售
防卫甩棍出售
防卫电棍出售
军刺野营砍刀出售
著名精品折刀出售
战术军刀出售
刺刀专卖网
户外军刀出售
阳江刀具直销网
冷钢刀具直销网
防卫刀具直销网
极端武力直销网
刀具直销网
军刀直销网
直刀匕首直销网
军刀匕首直销网
折刀砍刀军品网
野营刀具军品网
阳江刀具军品网
冷钢刀具军品网
防卫刀具军品网
极端武力军品网
军用刀具军品网
军刀直刀军品网
折刀砍刀专卖
野营刀具专卖
阳江刀具专卖
冷钢刀具专卖
防卫刀具专卖
出售美军现役军刀

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,304 @@
爱液,
按摩棒,
拔出来,
爆草,
包二奶,
暴干,
暴奸,
暴乳,
爆乳,
暴淫,
被操,
被插,
被干,
逼奸,
仓井空,
插暴,
操逼,
操黑,
操烂,
肏你,
肏死,
操死,
操我,
厕奴,
插比,
插b,
插逼,
插进,
插你,
插我,
插阴,
潮吹,
潮喷,
成人电影,
成人论坛,
成人色情,
成人网站,
成人文学,
成人小说,
艳情小说,
成人游戏,
吃精,
抽插,
春药,
大波,
大力抽送,
大乳,
荡妇,
荡女,
盗撮,
发浪,
放尿,
肥逼,
粉穴,
风月大陆,
干死你,
干穴,
肛交,
肛门,
龟头,
裹本,
国产av,
好嫩,
豪乳,
黑逼,
后庭,
后穴,
虎骑,
换妻俱乐部,
黄片,
几吧,
鸡吧,
鸡巴,
鸡奸,
妓女,
奸情,
叫床,
脚交,
精液,
就去日,
巨屌,
菊花洞,
菊门,
巨奶,
巨乳,
菊穴,
开苞,
口爆,
口活,
口交,
口射,
口淫,
裤袜,
狂操,
狂插,
浪逼,
浪妇,
浪叫,
浪女,
狼友,
聊性,
凌辱,
漏乳,
露b,
乱交,
乱伦,
轮暴,
轮操,
轮奸,
裸陪,
买春,
美逼,
美少妇,
美乳,
美腿,
美穴,
美幼,
秘唇,
迷奸,
密穴,
蜜穴,
蜜液,
摸奶,
摸胸,
母奸,
奈美,
奶子,
男奴,
内射,
嫩逼,
嫩女,
嫩穴,
捏弄,
女优,
炮友,
砲友,
喷精,
屁眼,
前凸后翘,
强jian,
强暴,
强奸处女,
情趣用品,
情色,
拳交,
全裸,
群交,
人妻,
人兽,
日逼,
日烂,
肉棒,
肉逼,
肉唇,
肉洞,
肉缝,
肉棍,
肉茎,
肉具,
揉乳,
肉穴,
肉欲,
乳爆,
乳房,
乳沟,
乳交,
乳头,
骚逼,
骚比,
骚女,
骚水,
骚穴,
色逼,
色界,
色猫,
色盟,
色情网站,
色区,
色色,
色诱,
色欲,
色b,
少年阿宾,
射爽,
射颜,
食精,
释欲,
兽奸,
兽交,
手淫,
兽欲,
熟妇,
熟母,
熟女,
爽片,
双臀,
死逼,
丝袜,
丝诱,
松岛枫,
酥痒,
汤加丽,
套弄,
体奸,
体位,
舔脚,
舔阴,
调教,
偷欢,
推油,
脱内裤,
文做,
舞女,
无修正,
吸精,
夏川纯,
相奸,
小逼,
校鸡,
小穴,
小xue,
性感妖娆,
性感诱惑,
性虎,
性饥渴,
性技巧,
性交,
性奴,
性虐,
性息,
性欲,
胸推,
穴口,
穴图,
亚情,
颜射,
阳具,
杨思敏,
要射了,
夜勤病栋,
一本道,
一夜欢,
一夜情,
一ye情,
阴部,
淫虫,
阴唇,
淫荡,
阴道,
淫电影,
阴阜,
淫妇,
淫河,
阴核,
阴户,
淫贱,
淫叫,
淫教师,
阴茎,
阴精,
淫浪,
淫媚,
淫糜,
淫魔,
淫母,
淫女,
淫虐,
淫妻,
淫情,
淫色,
淫声浪语,
淫兽学园,
淫书,
淫术炼金士,
淫水,
淫娃,
淫威,
淫亵,
淫样,
淫液,
淫照,
阴b,
应召,
幼交,
欲火,
欲女,
玉乳,
玉穴,
援交,
原味内衣,
援助交际,
招鸡,
招妓,
抓胸,
自慰,
作爱,
a片,
fuck,
gay片,
g点,
h动画,
h动漫,
失身粉,
淫荡自慰器

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,123 @@
兼职
招聘
网络
QQ
招聘
有意者
到货
本店
代购
扣扣
客服
微店
兼职
兼值
淘宝
小姐
妓女
包夜
3P
LY
JS
狼友
技师
推油
胸推
BT
毒龙
口爆
兼职
楼凤
足交
口暴
口交
全套
SM
桑拿
吞精
咪咪
婊子
乳方
操逼
全职
性伴侣
网购
网络工作
代理
专业代理
帮忙点一下
帮忙点下
请点击进入
详情请进入
私人侦探
私家侦探
针孔摄象
调查婚外情
信用卡提现
无抵押贷款
广告代理
原音铃声
借腹生子
找个妈妈
找个爸爸
代孕妈妈
代生孩子
代开发票
腾讯客服电话
销售热线
免费订购热线
低价出售
款到发货
回复可见
连锁加盟
加盟连锁
免费二级域名
免费使用
免费索取
蚁力神
婴儿汤
售肾
刻章办
买小车
套牌车
玛雅网
电脑传讯
视频来源
下载速度
高清在线
全集在线
在线播放
txt下载
六位qq
6位qq
位的qq
个qb
送qb
用刀横向切腹
完全自杀手册
四海帮
足球投注
地下钱庄
中国复兴党
阿波罗网
曾道人
六合彩
改卷内幕
替考试
隐形耳机
出售答案
考中答案
答an
da案
资金周转
救市
股市圈钱
崩盘
资金短缺
证监会
质押贷款
小额贷款
周小川
刘明康
尚福林
孔丹

View File

@@ -0,0 +1,326 @@
习近平,
平近习,
xjp,
习太子,
习明泽,
老习,
温家宝,
温加宝,
温x,
温jia宝,
温宝宝,
温加饱,
温加保,
张培莉,
温云松,
温如春,
温jb,
胡温,
胡x,
胡jt,
胡boss,
胡总,
胡王八,
hujintao,
胡jintao,
胡j涛,
胡惊涛,
胡景涛,
胡紧掏,
湖紧掏,
胡紧套,
锦涛,
hjt,
胡派,
胡主席,
刘永清,
胡海峰,
胡海清,
江泽民,
民泽江,
江胡,
江哥,
江主席,
江书记,
江浙闽,
江沢民,
江浙民,
择民,
则民,
茳泽民,
zemin,
ze民,
老江,
老j,
江core,
江x,
江派,
江zm,
jzm,
江戏子,
江蛤蟆,
江某某,
江贼,
江猪,
江氏集团,
江绵恒,
江绵康,
王冶坪,
江泽慧,
邓小平,
平小邓,
xiao平,
邓xp,
邓晓平,
邓朴方,
邓榕,
邓质方,
毛泽东,
猫泽东,
猫则东,
猫贼洞,
毛zd,
毛zx,
z东,
ze东,
泽d,
zedong,
毛太祖,
毛相,
主席画像,
改革历程,
朱镕基,
朱容基,
朱镕鸡,
朱容鸡,
朱云来,
李鹏,
李peng,
里鹏,
李月月鸟,
李小鹏,
李小琳,
华主席,
华国,
国锋,
国峰,
锋同志,
白春礼,
薄熙来,
薄一波,
蔡赴朝,
蔡武,
曹刚川,
常万全,
陈炳德,
陈德铭,
陈建国,
陈良宇,
陈绍基,
陈同海,
陈至立,
戴秉国,
丁一平,
董建华,
杜德印,
杜世成,
傅锐,
郭伯雄,
郭金龙,
贺国强,
胡春华,
耀邦,
华建敏,
黄华华,
黄丽满,
黄兴国,
回良玉,
贾庆林,
贾廷安,
靖志远,
李长春,
李春城,
李建国,
李克强,
李岚清,
李沛瑶,
李荣融,
李瑞环,
李铁映,
李先念,
李学举,
李源潮,
栗智,
梁光烈,
廖锡龙,
林树森,
林炎志,
林左鸣,
令计划,
柳斌杰,
刘奇葆,
刘少奇,
刘延东,
刘云山,
刘志军,
龙新民,
路甬祥,
罗箭,
吕祖善,
马飚,
马恺,
孟建柱,
欧广源,
强卫,
沈跃跃,
宋平顺,
粟戎生,
苏树林,
孙家正,
铁凝,
屠光绍,
王东明,
汪东兴,
王鸿举,
王沪宁,
王乐泉,
王洛林,
王岐山,
王胜俊,
王太华,
王学军,
王兆国,
王振华,
吴邦国,
吴定富,
吴官正,
无官正,
吴胜利,
吴仪,
奚国华,
习仲勋,
徐才厚,
许其亮,
徐绍史,
杨洁篪,
叶剑英,
由喜贵,
于幼军,
俞正声,
袁纯清,
曾培炎,
曾庆红,
曾宪梓,
曾荫权,
张德江,
张定发,
张高丽,
张立昌,
张荣坤,
张志国,
赵洪祝,
紫阳,
周生贤,
周永康,
朱海仑,
中南海,
大陆当局,
中国当局,
北京当局,
共产党,
党产共,
共贪党,
阿共,
产党共,
公产党,
工产党,
共c党,
共x党,
共铲,
供产,
共惨,
供铲党,
供铲谠,
供铲裆,
共残党,
共残主义,
共产主义的幽灵,
拱铲,
老共,
中共,
中珙,
中gong,
gc党,
贡挡,
gong党,
g产,
狗产蛋,
共残裆,
恶党,
邪党,
共产专制,
共产王朝,
裆中央,
土共,
土g,
共狗,
g匪,
共匪,
仇共,
政府,
症腐,
政腐,
政付,
正府,
政俯,
政f,
zhengfu,
政zhi,
挡中央,
档中央,
中央领导,
中国zf,
中央zf,
国wu院,
中华帝国,
gong和,
大陆官方,
北京政权,
江泽民,
胡锦涛,
温家宝,
习近平,
习仲勋,
贺国强,
贺子珍,
周永康,
李长春,
李德生,
王岐山,
姚依林,
回良玉,
李源潮,
李干成,
戴秉国,
黄镇,
刘延东,
刘瑞龙,
俞正声,
黄敬,
薄熙,
薄一波,
周小川,
周建南,
温云松,
徐明,
江泽慧,
江绵恒,
江绵康,
李小鹏,
李鹏,
李小琳,
朱云来,
朱容基,
法轮功,
李洪志,
新疆骚乱

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,304 @@
爱液,
按摩棒,
拔出来,
爆草,
包二奶,
暴干,
暴奸,
暴乳,
爆乳,
暴淫,
被操,
被插,
被干,
逼奸,
仓井空,
插暴,
操逼,
操黑,
操烂,
肏你,
肏死,
操死,
操我,
厕奴,
插比,
插b,
插逼,
插进,
插你,
插我,
插阴,
潮吹,
潮喷,
成人电影,
成人论坛,
成人色情,
成人网站,
成人文学,
成人小说,
艳情小说,
成人游戏,
吃精,
抽插,
春药,
大波,
大力抽送,
大乳,
荡妇,
荡女,
盗撮,
发浪,
放尿,
肥逼,
粉穴,
风月大陆,
干死你,
干穴,
肛交,
肛门,
龟头,
裹本,
国产av,
好嫩,
豪乳,
黑逼,
后庭,
后穴,
虎骑,
换妻俱乐部,
黄片,
几吧,
鸡吧,
鸡巴,
鸡奸,
妓女,
奸情,
叫床,
脚交,
精液,
就去日,
巨屌,
菊花洞,
菊门,
巨奶,
巨乳,
菊穴,
开苞,
口爆,
口活,
口交,
口射,
口淫,
裤袜,
狂操,
狂插,
浪逼,
浪妇,
浪叫,
浪女,
狼友,
聊性,
凌辱,
漏乳,
露b,
乱交,
乱伦,
轮暴,
轮操,
轮奸,
裸陪,
买春,
美逼,
美少妇,
美乳,
美腿,
美穴,
美幼,
秘唇,
迷奸,
密穴,
蜜穴,
蜜液,
摸奶,
摸胸,
母奸,
奈美,
奶子,
男奴,
内射,
嫩逼,
嫩女,
嫩穴,
捏弄,
女优,
炮友,
砲友,
喷精,
屁眼,
前凸后翘,
强jian,
强暴,
强奸处女,
情趣用品,
情色,
拳交,
全裸,
群交,
人妻,
人兽,
日逼,
日烂,
肉棒,
肉逼,
肉唇,
肉洞,
肉缝,
肉棍,
肉茎,
肉具,
揉乳,
肉穴,
肉欲,
乳爆,
乳房,
乳沟,
乳交,
乳头,
骚逼,
骚比,
骚女,
骚水,
骚穴,
色逼,
色界,
色猫,
色盟,
色情网站,
色区,
色色,
色诱,
色欲,
色b,
少年阿宾,
射爽,
射颜,
食精,
释欲,
兽奸,
兽交,
手淫,
兽欲,
熟妇,
熟母,
熟女,
爽片,
双臀,
死逼,
丝袜,
丝诱,
松岛枫,
酥痒,
汤加丽,
套弄,
体奸,
体位,
舔脚,
舔阴,
调教,
偷欢,
推油,
脱内裤,
文做,
舞女,
无修正,
吸精,
夏川纯,
相奸,
小逼,
校鸡,
小穴,
小xue,
性感妖娆,
性感诱惑,
性虎,
性饥渴,
性技巧,
性交,
性奴,
性虐,
性息,
性欲,
胸推,
穴口,
穴图,
亚情,
颜射,
阳具,
杨思敏,
要射了,
夜勤病栋,
一本道,
一夜欢,
一夜情,
一ye情,
阴部,
淫虫,
阴唇,
淫荡,
阴道,
淫电影,
阴阜,
淫妇,
淫河,
阴核,
阴户,
淫贱,
淫叫,
淫教师,
阴茎,
阴精,
淫浪,
淫媚,
淫糜,
淫魔,
淫母,
淫女,
淫虐,
淫妻,
淫情,
淫色,
淫声浪语,
淫兽学园,
淫书,
淫术炼金士,
淫水,
淫娃,
淫威,
淫亵,
淫样,
淫液,
淫照,
阴b,
应召,
幼交,
欲火,
欲女,
玉乳,
玉穴,
援交,
原味内衣,
援助交际,
招鸡,
招妓,
抓胸,
自慰,
作爱,
a片,
fuck,
gay片,
g点,
h动画,
h动漫,
失身粉,
淫荡自慰器

View File

@@ -0,0 +1,29 @@
<template>
<div id="app">
<router-view />
<theme-picker />
</div>
</template>
<script>
import ThemePicker from "@/components/ThemePicker";
export default {
name: "App",
components: { ThemePicker },
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
titleTemplate: title => {
const appTitle = process.env.VUE_APP_TITLE || '觉远创智配件系统'
return title ? `${title} - ${appTitle}` : appTitle
}
}
}
};
</script>
<style scoped>
#app .theme-picker {
display: none;
}
</style>

View File

@@ -0,0 +1,153 @@
import request from '@/utils/request'
// 查询帖子列表
export function listPosts(query) {
return request({
url: '/forum/post/list',
method: 'get',
params: query
})
}
// 查询帖子详细
export function getPost(postId) {
return request({
url: '/forum/post/' + postId,
method: 'get'
})
}
// 新增帖子
export function addPost(data) {
return request({
url: '/forum/post',
method: 'post',
data: data
})
}
// 修改帖子
export function updatePost(data) {
return request({
url: '/forum/post',
method: 'put',
data: data
})
}
// 删除帖子
export function delPost(postId) {
return request({
url: '/forum/post/' + postId,
method: 'delete'
})
}
// 查询分类列表
export function listCategories() {
return request({
url: '/forum/category/list',
method: 'get'
})
}
// 增加浏览量
export function incrementViewCount(postId) {
return request({
url: '/forum/post/view/' + postId,
method: 'put'
})
}
// 点赞/取消点赞
export function toggleLike(postId) {
return request({
url: '/forum/post/like/' + postId,
method: 'put'
})
}
// 收藏/取消收藏
export function toggleFavorite(postId) {
return request({
url: '/forum/post/favorite/' + postId,
method: 'put'
})
}
// 标记为已解决
export function markSolved(postId) {
return request({
url: '/forum/post/solved/' + postId,
method: 'put'
})
}
// 置顶/取消置顶
export function toggleTop(postId) {
return request({
url: '/forum/post/top/' + postId,
method: 'put'
})
}
// 获取用户统计数据
export function getUserStats() {
return request({
url: '/forum/post/user/stats',
method: 'get'
})
}
// 检查用户是否已点赞
export function checkLike(postId) {
return request({
url: '/forum/post/like/check/' + postId,
method: 'get'
})
}
// 检查用户是否已收藏
export function checkFavorite(postId) {
return request({
url: '/forum/post/favorite/check/' + postId,
method: 'get'
})
}
// 获取用户点赞的帖子列表
export function getUserLikedPosts(query) {
return request({
url: '/forum/post/user/liked',
method: 'get',
params: query
})
}
// 获取用户收藏的帖子列表
export function getUserFavoritedPosts(query) {
return request({
url: '/forum/post/user/favorited',
method: 'get',
params: query
})
}
// 获取用户发布的帖子列表
export function getUserPosts(query) {
return request({
url: '/forum/post/user/posts',
method: 'get',
params: query
})
}
// 获取用户回复的帖子列表
export function getUserRepliedPosts(query) {
return request({
url: '/forum/post/user/replied',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,61 @@
import request from '@/utils/request'
// 查询回复列表
export function listReplies(query) {
return request({
url: '/forum/reply/list',
method: 'get',
params: query
})
}
// 根据帖子ID查询回复列表树形结构
export function listRepliesByPostId(postId) {
return request({
url: '/forum/reply/list/' + postId,
method: 'get'
})
}
// 查询回复详细
export function getReply(replyId) {
return request({
url: '/forum/reply/' + replyId,
method: 'get'
})
}
// 新增回复
export function addReply(data) {
return request({
url: '/forum/reply',
method: 'post',
data: data
})
}
// 修改回复
export function updateReply(data) {
return request({
url: '/forum/reply',
method: 'put',
data: data
})
}
// 删除回复
export function delReply(replyId) {
return request({
url: '/forum/reply/' + replyId,
method: 'delete'
})
}
// 点赞/取消点赞回复
export function toggleLikeReply(replyId) {
return request({
url: '/forum/reply/like/' + replyId,
method: 'put'
})
}

View File

@@ -0,0 +1,9 @@
import request from '@/utils/request'
// 通用镜片下拉选项
export function listLensOptions() {
return request({
url: '/jysystem/lens/options',
method: 'get'
})
}

View File

@@ -0,0 +1,34 @@
import request from '@/utils/request'
// 门户消息列表
export function listPortalMessage(query) {
return request({
url: '/jysystem/message/portal/list',
method: 'get',
params: query
})
}
// 未读消息数
export function getPortalUnreadCount() {
return request({
url: '/jysystem/message/portal/unreadCount',
method: 'get'
})
}
// 标记单条已读
export function markPortalMessageRead(id) {
return request({
url: '/jysystem/message/portal/read/' + id,
method: 'put'
})
}
// 全部标记已读
export function markPortalMessageAllRead() {
return request({
url: '/jysystem/message/portal/readAll',
method: 'put'
})
}

View File

@@ -0,0 +1,154 @@
import request from '@/utils/request'
// 门户订单列表
export function listPortalOrder(query) {
return request({
url: '/jysystem/order/portal/list',
method: 'get',
params: query
})
}
// 门户订单上下文
export function getPortalOrderContext() {
return request({
url: '/jysystem/order/portal/context',
method: 'get'
})
}
// 门户配片单可选产品(当前租户已配置)
export function listPortalProductOptions() {
return request({
url: '/jysystem/order/portal/productOptions',
method: 'get'
})
}
// 门户订单详情
export function getPortalOrder(id) {
return request({
url: '/jysystem/order/portal/' + id,
method: 'get'
})
}
// 新增配片单
export function addPortalOrder(data) {
return request({
url: '/jysystem/order/portal',
method: 'post',
data: data
})
}
// 修改配片单
export function updatePortalOrder(data) {
return request({
url: '/jysystem/order/portal',
method: 'put',
data: data
})
}
// 删除配片单
export function delPortalOrder(id) {
return request({
url: '/jysystem/order/portal/' + id,
method: 'delete'
})
}
// 制片单补充
export function supplementPortalOrder(data) {
return request({
url: '/jysystem/order/portal/supplement',
method: 'put',
data: data
})
}
// 制片单接单
export function acceptPortalOrder(id) {
return request({
url: '/jysystem/order/portal/accept/' + id,
method: 'put'
})
}
// 制片单制作中
export function producePortalOrder(id) {
return request({
url: '/jysystem/order/portal/produce/' + id,
method: 'put'
})
}
// 制片单撤单
export function withdrawPortalOrder(data) {
return request({
url: '/jysystem/order/portal/withdraw',
method: 'put',
data: data
})
}
// 门户订单物流信息
export function getPortalOrderLogistics(id) {
return request({
url: '/jysystem/order/portal/logistics/' + id,
method: 'get'
})
}
// 制片单发货
export function shipPortalOrder(data) {
return request({
url: '/jysystem/order/portal/ship',
method: 'put',
data: data
})
}
// 制片单完成
export function completePortalOrder(id) {
return request({
url: '/jysystem/order/portal/complete/' + id,
method: 'put'
})
}
// 配片单换货申请
export function exchangeApplyPortalOrder(data) {
return request({
url: '/jysystem/order/portal/exchangeApply',
method: 'put',
data: data
})
}
// 配片单接收(拒绝换货申请后确认完成)
export function receivePortalOrder(id) {
return request({
url: '/jysystem/order/portal/receive/' + id,
method: 'put'
})
}
// 配片单重新提交
export function resubmitPortalOrder(data) {
return request({
url: '/jysystem/order/portal/resubmit',
method: 'put',
data: data
})
}
// 制片单驳回
export function rejectPortalOrder(data) {
return request({
url: '/jysystem/order/portal/reject',
method: 'put',
data: data
})
}

View File

@@ -0,0 +1,10 @@
import request from '@/utils/request'
// 查询产品下拉选项
export function listProductOptions(tenantId) {
return request({
url: '/jysystem/product/options',
method: 'get',
params: { tenantId }
})
}

View File

@@ -0,0 +1,17 @@
import request from '@/utils/request'
// 获取当前登录用户关联租户
export function getCurrentTenant() {
return request({
url: '/jysystem/tenant/current',
method: 'get'
})
}
// 查询镜片厂租户列表
export function listLensFactoryTenant() {
return request({
url: '/jysystem/tenant/lensFactoryList',
method: 'get'
})
}

View File

@@ -0,0 +1,154 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid, directLogin) {
const data = {
username,
password,
code,
uuid,
directLogin
}
return request({
url: '/login',
headers: {
isToken: false,
repeatSubmit: false
},
method: 'post',
data: data
})
}
// 注册方法
export function register(data) {
return request({
url: '/register',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 验证码注册方法(手机号或邮箱)
export function registerByCode(data) {
return request({
url: '/register/code',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/getInfo',
method: 'get'
})
}
// 退出方法
export function logout() {
return request({
url: '/logout',
method: 'post'
})
}
// 获取验证码
export function getCodeImg() {
return request({
url: '/captchaImage',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}
// 发送短信验证码
export function sendSmsCode(mobile) {
return request({
url: '/sms/code',
headers: {
isToken: false
},
method: 'post',
data: { mobile }
})
}
// 发送邮箱验证码
export function sendEmailCode(email) {
return request({
url: '/email/code',
headers: {
isToken: false
},
method: 'post',
data: { email }
})
}
// 验证码登录(邮箱)
export function emailLogin(email, emailCode, uuid, directLogin) {
return request({
url: '/email/login',
headers: {
isToken: false
},
method: 'post',
data: { email, emailCode, uuid, directLogin }
})
}
// 验证码登录(手机号)
export function smsLogin(mobile, smsCode, uuid, directLogin) {
return request({
url: '/sms/login',
headers: {
isToken: false
},
method: 'post',
data: { mobile, smsCode, uuid, directLogin }
})
}
/** 短信验证码校验(手机号有效性校验) */
export function checkSMSCode(mobile, smsCode, uuid) {
return request({
url: '/checkSMSCode',
method: 'post',
data: { mobile, code: smsCode, uuid }
})
}
// 根据账号重置密码
export function resetPasswordByAccount(data) {
return request({
url: '/resetPassword/account',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 根据验证码重置密码
export function resetPasswordByCode(data) {
return request({
url: '/resetPassword/code',
headers: {
isToken: false
},
method: 'post',
data: data
})
}

View File

@@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取路由
export const getRouters = () => {
return request({
url: '/getRouters',
method: 'get'
})
}

View File

@@ -0,0 +1,57 @@
import request from '@/utils/request'
// 查询缓存详细
export function getCache() {
return request({
url: '/monitor/cache',
method: 'get'
})
}
// 查询缓存名称列表
export function listCacheName() {
return request({
url: '/monitor/cache/getNames',
method: 'get'
})
}
// 查询缓存键名列表
export function listCacheKey(cacheName) {
return request({
url: '/monitor/cache/getKeys/' + cacheName,
method: 'get'
})
}
// 查询缓存内容
export function getCacheValue(cacheName, cacheKey) {
return request({
url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
method: 'get'
})
}
// 清理指定名称缓存
export function clearCacheName(cacheName) {
return request({
url: '/monitor/cache/clearCacheName/' + cacheName,
method: 'delete'
})
}
// 清理指定键名缓存
export function clearCacheKey(cacheKey) {
return request({
url: '/monitor/cache/clearCacheKey/' + cacheKey,
method: 'delete'
})
}
// 清理全部缓存
export function clearCacheAll() {
return request({
url: '/monitor/cache/clearCacheAll',
method: 'delete'
})
}

View File

@@ -0,0 +1,71 @@
import request from '@/utils/request'
// 查询定时任务调度列表
export function listJob(query) {
return request({
url: '/monitor/job/list',
method: 'get',
params: query
})
}
// 查询定时任务调度详细
export function getJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'get'
})
}
// 新增定时任务调度
export function addJob(data) {
return request({
url: '/monitor/job',
method: 'post',
data: data
})
}
// 修改定时任务调度
export function updateJob(data) {
return request({
url: '/monitor/job',
method: 'put',
data: data
})
}
// 删除定时任务调度
export function delJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'delete'
})
}
// 任务状态修改
export function changeJobStatus(jobId, status) {
const data = {
jobId,
status
}
return request({
url: '/monitor/job/changeStatus',
method: 'put',
data: data
})
}
// 定时任务立即执行一次
export function runJob(jobId, jobGroup) {
const data = {
jobId,
jobGroup
}
return request({
url: '/monitor/job/run',
method: 'put',
data: data
})
}

View File

@@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询调度日志列表
export function listJobLog(query) {
return request({
url: '/monitor/jobLog/list',
method: 'get',
params: query
})
}
// 删除调度日志
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
method: 'delete'
})
}
// 清空调度日志
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
method: 'delete'
})
}

View File

@@ -0,0 +1,34 @@
import request from '@/utils/request'
// 查询登录日志列表
export function list(query) {
return request({
url: '/monitor/logininfor/list',
method: 'get',
params: query
})
}
// 删除登录日志
export function delLogininfor(infoId) {
return request({
url: '/monitor/logininfor/' + infoId,
method: 'delete'
})
}
// 解锁用户登录状态
export function unlockLogininfor(userName) {
return request({
url: '/monitor/logininfor/unlock/' + userName,
method: 'get'
})
}
// 清空登录日志
export function cleanLogininfor() {
return request({
url: '/monitor/logininfor/clean',
method: 'delete'
})
}

View File

@@ -0,0 +1,18 @@
import request from '@/utils/request'
// 查询在线用户列表
export function list(query) {
return request({
url: '/monitor/online/list',
method: 'get',
params: query
})
}
// 强退用户
export function forceLogout(tokenId) {
return request({
url: '/monitor/online/' + tokenId,
method: 'delete'
})
}

View File

@@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询操作日志列表
export function list(query) {
return request({
url: '/monitor/operlog/list',
method: 'get',
params: query
})
}
// 删除操作日志
export function delOperlog(operId) {
return request({
url: '/monitor/operlog/' + operId,
method: 'delete'
})
}
// 清空操作日志
export function cleanOperlog() {
return request({
url: '/monitor/operlog/clean',
method: 'delete'
})
}

View File

@@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取服务信息
export function getServer() {
return request({
url: '/monitor/server',
method: 'get'
})
}

Some files were not shown because too many files have changed in this diff Show More